diff --git a/.gitignore b/.gitignore index 5b413a0d..cfbf7735 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ built +built-switch builtTT *.pyc *.pyo @@ -10,4 +11,7 @@ readlog.txt news/* .cvsignore .latestissue -useropt \ No newline at end of file +useropt +inject.py +*.log +app diff --git a/ai.bat b/ai.bat new file mode 100644 index 00000000..cd0f98e1 --- /dev/null +++ b/ai.bat @@ -0,0 +1,4 @@ +:main +python ttrun.py -ai %* +pause +goto :main diff --git a/ai.sh b/ai.sh new file mode 100755 index 00000000..0c58f785 --- /dev/null +++ b/ai.sh @@ -0,0 +1 @@ +screen -dmS Sillyville python3 -m ttrun -ai diff --git a/build.bat b/build.bat index 6902a9bf..07844feb 100644 --- a/build.bat +++ b/build.bat @@ -1 +1 @@ -"built\python\ppython" build.py %* \ No newline at end of file +"built\python\ppython" build.py -x -y -ai %* \ No newline at end of file diff --git a/libhttp.pyd b/libhttp.pyd new file mode 100644 index 00000000..376c905c Binary files /dev/null and b/libhttp.pyd differ diff --git a/libhttp.so b/libhttp.so new file mode 100755 index 00000000..0bd120b8 Binary files /dev/null and b/libhttp.so differ diff --git a/modules/pytz/tests/__init__.py b/logs/.gitkeep similarity index 100% rename from modules/pytz/tests/__init__.py rename to logs/.gitkeep diff --git a/modules/MySQLdb/__init__.py b/modules/MySQLdb/__init__.py deleted file mode 100644 index 87616715..00000000 --- a/modules/MySQLdb/__init__.py +++ /dev/null @@ -1,98 +0,0 @@ -"""MySQLdb - A DB API v2.0 compatible interface to MySQL. - -This package is a wrapper around _mysql, which mostly implements the -MySQL C API. - -connect() -- connects to server - -See the C API specification and the MySQL documentation for more info -on other items. - -For information on how MySQLdb handles type conversion, see the -MySQLdb.converters module. - -""" - -__revision__ = """$Revision$"""[11:-2] -from MySQLdb.release import __version__, version_info, __author__ - -import _mysql - -if version_info != _mysql.version_info: - raise ImportError("this is MySQLdb version %s, but _mysql is version %r" % - (version_info, _mysql.version_info)) - -threadsafety = 1 -apilevel = "2.0" -paramstyle = "format" - -from _mysql import * -from MySQLdb.constants import FIELD_TYPE -from MySQLdb.times import Date, Time, Timestamp, \ - DateFromTicks, TimeFromTicks, TimestampFromTicks - -try: - frozenset -except NameError: - from sets import ImmutableSet as frozenset - -class DBAPISet(frozenset): - - """A special type of set for which A == x is true if A is a - DBAPISet and x is a member of that set.""" - - def __eq__(self, other): - if isinstance(other, DBAPISet): - return not self.difference(other) - return other in self - - -STRING = DBAPISet([FIELD_TYPE.ENUM, FIELD_TYPE.STRING, - FIELD_TYPE.VAR_STRING]) -BINARY = DBAPISet([FIELD_TYPE.BLOB, FIELD_TYPE.LONG_BLOB, - FIELD_TYPE.MEDIUM_BLOB, FIELD_TYPE.TINY_BLOB]) -NUMBER = DBAPISet([FIELD_TYPE.DECIMAL, FIELD_TYPE.DOUBLE, FIELD_TYPE.FLOAT, - FIELD_TYPE.INT24, FIELD_TYPE.LONG, FIELD_TYPE.LONGLONG, - FIELD_TYPE.TINY, FIELD_TYPE.YEAR]) -DATE = DBAPISet([FIELD_TYPE.DATE, FIELD_TYPE.NEWDATE]) -TIME = DBAPISet([FIELD_TYPE.TIME]) -TIMESTAMP = DBAPISet([FIELD_TYPE.TIMESTAMP, FIELD_TYPE.DATETIME]) -DATETIME = TIMESTAMP -ROWID = DBAPISet() - -def test_DBAPISet_set_equality(): - assert STRING == STRING - -def test_DBAPISet_set_inequality(): - assert STRING != NUMBER - -def test_DBAPISet_set_equality_membership(): - assert FIELD_TYPE.VAR_STRING == STRING - -def test_DBAPISet_set_inequality_membership(): - assert FIELD_TYPE.DATE != STRING - -def Binary(x): - return str(x) - -def Connect(*args, **kwargs): - """Factory function for connections.Connection.""" - from MySQLdb.connections import Connection - return Connection(*args, **kwargs) - -connect = Connection = Connect - -__all__ = [ 'BINARY', 'Binary', 'Connect', 'Connection', 'DATE', - 'Date', 'Time', 'Timestamp', 'DateFromTicks', 'TimeFromTicks', - 'TimestampFromTicks', 'DataError', 'DatabaseError', 'Error', - 'FIELD_TYPE', 'IntegrityError', 'InterfaceError', 'InternalError', - 'MySQLError', 'NULL', 'NUMBER', 'NotSupportedError', 'DBAPISet', - 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', - 'TIMESTAMP', 'Warning', 'apilevel', 'connect', 'connections', - 'constants', 'converters', 'cursors', 'debug', 'escape', 'escape_dict', - 'escape_sequence', 'escape_string', 'get_client_info', - 'paramstyle', 'string_literal', 'threadsafety', 'version_info'] - - - - diff --git a/modules/MySQLdb/connections.py b/modules/MySQLdb/connections.py deleted file mode 100644 index 908706a3..00000000 --- a/modules/MySQLdb/connections.py +++ /dev/null @@ -1,351 +0,0 @@ -""" - -This module implements connections for MySQLdb. Presently there is -only one class: Connection. Others are unlikely. However, you might -want to make your own subclasses. In most cases, you will probably -override Connection.default_cursor with a non-standard Cursor class. - -""" -from MySQLdb import cursors -from _mysql_exceptions import Warning, Error, InterfaceError, DataError, \ - DatabaseError, OperationalError, IntegrityError, InternalError, \ - NotSupportedError, ProgrammingError -import types, _mysql -import re - - -def defaulterrorhandler(connection, cursor, errorclass, errorvalue): - """ - - If cursor is not None, (errorclass, errorvalue) is appended to - cursor.messages; otherwise it is appended to - connection.messages. Then errorclass is raised with errorvalue as - the value. - - You can override this with your own error handler by assigning it - to the instance. - - """ - error = errorclass, errorvalue - if cursor: - cursor.messages.append(error) - else: - connection.messages.append(error) - del cursor - del connection - raise errorclass, errorvalue - -re_numeric_part = re.compile(r"^(\d+)") - -def numeric_part(s): - """Returns the leading numeric part of a string. - - >>> numeric_part("20-alpha") - 20 - >>> numeric_part("foo") - >>> numeric_part("16b") - 16 - """ - - m = re_numeric_part.match(s) - if m: - return int(m.group(1)) - return None - - -class Connection(_mysql.connection): - - """MySQL Database Connection Object""" - - default_cursor = cursors.Cursor - - def __init__(self, *args, **kwargs): - """ - - Create a connection to the database. It is strongly recommended - that you only use keyword parameters. Consult the MySQL C API - documentation for more information. - - host - string, host to connect - - user - string, user to connect as - - passwd - string, password to use - - db - string, database to use - - port - integer, TCP/IP port to connect to - - unix_socket - string, location of unix_socket to use - - conv - conversion dictionary, see MySQLdb.converters - - connect_timeout - number of seconds to wait before the connection attempt - fails. - - compress - if set, compression is enabled - - named_pipe - if set, a named pipe is used to connect (Windows only) - - init_command - command which is run once the connection is created - - read_default_file - file from which default client values are read - - read_default_group - configuration group to use from the default file - - cursorclass - class object, used to create cursors (keyword only) - - use_unicode - If True, text-like columns are returned as unicode objects - using the connection's character set. Otherwise, text-like - columns are returned as strings. columns are returned as - normal strings. Unicode objects will always be encoded to - the connection's character set regardless of this setting. - - charset - If supplied, the connection character set will be changed - to this character set (MySQL-4.1 and newer). This implies - use_unicode=True. - - sql_mode - If supplied, the session SQL mode will be changed to this - setting (MySQL-4.1 and newer). For more details and legal - values, see the MySQL documentation. - - client_flag - integer, flags to use or 0 - (see MySQL docs or constants/CLIENTS.py) - - ssl - dictionary or mapping, contains SSL connection parameters; - see the MySQL documentation for more details - (mysql_ssl_set()). If this is set, and the client does not - support SSL, NotSupportedError will be raised. - - local_infile - integer, non-zero enables LOAD LOCAL INFILE; zero disables - - autocommit - If False (default), autocommit is disabled. - If True, autocommit is enabled. - If None, autocommit isn't set and server default is used. - - There are a number of undocumented, non-standard methods. See the - documentation for the MySQL C API for some hints on what they do. - - """ - from MySQLdb.constants import CLIENT, FIELD_TYPE - from MySQLdb.converters import conversions - from weakref import proxy - - kwargs2 = kwargs.copy() - - if 'conv' in kwargs: - conv = kwargs['conv'] - else: - conv = conversions - - conv2 = {} - for k, v in conv.items(): - if isinstance(k, int) and isinstance(v, list): - conv2[k] = v[:] - else: - conv2[k] = v - kwargs2['conv'] = conv2 - - cursorclass = kwargs2.pop('cursorclass', self.default_cursor) - charset = kwargs2.pop('charset', '') - - if charset: - use_unicode = True - else: - use_unicode = False - - use_unicode = kwargs2.pop('use_unicode', use_unicode) - sql_mode = kwargs2.pop('sql_mode', '') - - client_flag = kwargs.get('client_flag', 0) - client_version = tuple([ numeric_part(n) for n in _mysql.get_client_info().split('.')[:2] ]) - if client_version >= (4, 1): - client_flag |= CLIENT.MULTI_STATEMENTS - if client_version >= (5, 0): - client_flag |= CLIENT.MULTI_RESULTS - - kwargs2['client_flag'] = client_flag - - # PEP-249 requires autocommit to be initially off - autocommit = kwargs2.pop('autocommit', False) - - super(Connection, self).__init__(*args, **kwargs2) - self.cursorclass = cursorclass - self.encoders = dict([ (k, v) for k, v in conv.items() - if type(k) is not int ]) - - self._server_version = tuple([ numeric_part(n) for n in self.get_server_info().split('.')[:2] ]) - - db = proxy(self) - def _get_string_literal(): - def string_literal(obj, dummy=None): - return db.string_literal(obj) - return string_literal - - def _get_unicode_literal(): - def unicode_literal(u, dummy=None): - return db.literal(u.encode(unicode_literal.charset)) - return unicode_literal - - def _get_string_decoder(): - def string_decoder(s): - return s.decode(string_decoder.charset) - return string_decoder - - string_literal = _get_string_literal() - self.unicode_literal = unicode_literal = _get_unicode_literal() - self.string_decoder = string_decoder = _get_string_decoder() - if not charset: - charset = self.character_set_name() - self.set_character_set(charset) - - if sql_mode: - self.set_sql_mode(sql_mode) - - if use_unicode: - self.converter[FIELD_TYPE.STRING].append((None, string_decoder)) - self.converter[FIELD_TYPE.VAR_STRING].append((None, string_decoder)) - self.converter[FIELD_TYPE.VARCHAR].append((None, string_decoder)) - self.converter[FIELD_TYPE.BLOB].append((None, string_decoder)) - - self.encoders[types.StringType] = string_literal - self.encoders[types.UnicodeType] = unicode_literal - self._transactional = self.server_capabilities & CLIENT.TRANSACTIONS - if self._transactional: - if autocommit is not None: - self.autocommit(autocommit) - self.messages = [] - - def autocommit(self, on): - on = bool(on) - if self.get_autocommit() != on: - _mysql.connection.autocommit(self, on) - - def cursor(self, cursorclass=None): - """ - - Create a cursor on which queries may be performed. The - optional cursorclass parameter is used to create the - Cursor. By default, self.cursorclass=cursors.Cursor is - used. - - """ - return (cursorclass or self.cursorclass)(self) - - def __enter__(self): - if self.get_autocommit(): - self.query("BEGIN") - return self.cursor() - - def __exit__(self, exc, value, tb): - if exc: - self.rollback() - else: - self.commit() - - def literal(self, o): - """ - - If o is a single object, returns an SQL literal as a string. - If o is a non-string sequence, the items of the sequence are - converted and returned as a sequence. - - Non-standard. For internal use; do not use this in your - applications. - - """ - return self.escape(o, self.encoders) - - def begin(self): - """Explicitly begin a connection. Non-standard. - DEPRECATED: Will be removed in 1.3. - Use an SQL BEGIN statement instead.""" - from warnings import warn - warn("begin() is non-standard and will be removed in 1.3", - DeprecationWarning, 2) - self.query("BEGIN") - - if not hasattr(_mysql.connection, 'warning_count'): - - def warning_count(self): - """Return the number of warnings generated from the - last query. This is derived from the info() method.""" - from string import atoi - info = self.info() - if info: - return atoi(info.split()[-1]) - else: - return 0 - - def set_character_set(self, charset): - """Set the connection character set to charset. The character - set can only be changed in MySQL-4.1 and newer. If you try - to change the character set from the current value in an - older version, NotSupportedError will be raised.""" - if charset == "utf8mb4": - py_charset = "utf8" - else: - py_charset = charset - if self.character_set_name() != charset: - try: - super(Connection, self).set_character_set(charset) - except AttributeError: - if self._server_version < (4, 1): - raise NotSupportedError("server is too old to set charset") - self.query('SET NAMES %s' % charset) - self.store_result() - self.string_decoder.charset = py_charset - self.unicode_literal.charset = py_charset - - def set_sql_mode(self, sql_mode): - """Set the connection sql_mode. See MySQL documentation for - legal values.""" - if self._server_version < (4, 1): - raise NotSupportedError("server is too old to set sql_mode") - self.query("SET SESSION sql_mode='%s'" % sql_mode) - self.store_result() - - def show_warnings(self): - """Return detailed information about warnings as a - sequence of tuples of (Level, Code, Message). This - is only supported in MySQL-4.1 and up. If your server - is an earlier version, an empty sequence is returned.""" - if self._server_version < (4,1): return () - self.query("SHOW WARNINGS") - r = self.store_result() - warnings = r.fetch_row(0) - return warnings - - Warning = Warning - Error = Error - InterfaceError = InterfaceError - DatabaseError = DatabaseError - DataError = DataError - OperationalError = OperationalError - IntegrityError = IntegrityError - InternalError = InternalError - ProgrammingError = ProgrammingError - NotSupportedError = NotSupportedError - - errorhandler = defaulterrorhandler diff --git a/modules/MySQLdb/constants/CLIENT.py b/modules/MySQLdb/constants/CLIENT.py deleted file mode 100644 index 6559917b..00000000 --- a/modules/MySQLdb/constants/CLIENT.py +++ /dev/null @@ -1,29 +0,0 @@ -"""MySQL CLIENT constants - -These constants are used when creating the connection. Use bitwise-OR -(|) to combine options together, and pass them as the client_flags -parameter to MySQLdb.Connection. For more information on these flags, -see the MySQL C API documentation for mysql_real_connect(). - -""" - -LONG_PASSWORD = 1 -FOUND_ROWS = 2 -LONG_FLAG = 4 -CONNECT_WITH_DB = 8 -NO_SCHEMA = 16 -COMPRESS = 32 -ODBC = 64 -LOCAL_FILES = 128 -IGNORE_SPACE = 256 -CHANGE_USER = 512 -INTERACTIVE = 1024 -SSL = 2048 -IGNORE_SIGPIPE = 4096 -TRANSACTIONS = 8192 # mysql_com.h was WRONG prior to 3.23.35 -RESERVED = 16384 -SECURE_CONNECTION = 32768 -MULTI_STATEMENTS = 65536 -MULTI_RESULTS = 131072 - - diff --git a/modules/MySQLdb/constants/CR.py b/modules/MySQLdb/constants/CR.py deleted file mode 100644 index 249dfec9..00000000 --- a/modules/MySQLdb/constants/CR.py +++ /dev/null @@ -1,30 +0,0 @@ -"""MySQL Connection Errors - -Nearly all of these raise OperationalError. COMMANDS_OUT_OF_SYNC -raises ProgrammingError. - -""" - -MIN_ERROR = 2000 -MAX_ERROR = 2999 -UNKNOWN_ERROR = 2000 -SOCKET_CREATE_ERROR = 2001 -CONNECTION_ERROR = 2002 -CONN_HOST_ERROR = 2003 -IPSOCK_ERROR = 2004 -UNKNOWN_HOST = 2005 -SERVER_GONE_ERROR = 2006 -VERSION_ERROR = 2007 -OUT_OF_MEMORY = 2008 -WRONG_HOST_INFO = 2009 -LOCALHOST_CONNECTION = 2010 -TCP_CONNECTION = 2011 -SERVER_HANDSHAKE_ERR = 2012 -SERVER_LOST = 2013 -COMMANDS_OUT_OF_SYNC = 2014 -NAMEDPIPE_CONNECTION = 2015 -NAMEDPIPEWAIT_ERROR = 2016 -NAMEDPIPEOPEN_ERROR = 2017 -NAMEDPIPESETSTATE_ERROR = 2018 -CANT_READ_CHARSET = 2019 -NET_PACKET_TOO_LARGE = 2020 diff --git a/modules/MySQLdb/constants/ER.py b/modules/MySQLdb/constants/ER.py deleted file mode 100644 index ed45f3a1..00000000 --- a/modules/MySQLdb/constants/ER.py +++ /dev/null @@ -1,467 +0,0 @@ -"""MySQL ER Constants - -These constants are error codes for the bulk of the error conditions -that may occur. - -""" - -HASHCHK = 1000 -NISAMCHK = 1001 -NO = 1002 -YES = 1003 -CANT_CREATE_FILE = 1004 -CANT_CREATE_TABLE = 1005 -CANT_CREATE_DB = 1006 -DB_CREATE_EXISTS = 1007 -DB_DROP_EXISTS = 1008 -DB_DROP_DELETE = 1009 -DB_DROP_RMDIR = 1010 -CANT_DELETE_FILE = 1011 -CANT_FIND_SYSTEM_REC = 1012 -CANT_GET_STAT = 1013 -CANT_GET_WD = 1014 -CANT_LOCK = 1015 -CANT_OPEN_FILE = 1016 -FILE_NOT_FOUND = 1017 -CANT_READ_DIR = 1018 -CANT_SET_WD = 1019 -CHECKREAD = 1020 -DISK_FULL = 1021 -DUP_KEY = 1022 -ERROR_ON_CLOSE = 1023 -ERROR_ON_READ = 1024 -ERROR_ON_RENAME = 1025 -ERROR_ON_WRITE = 1026 -FILE_USED = 1027 -FILSORT_ABORT = 1028 -FORM_NOT_FOUND = 1029 -GET_ERRNO = 1030 -ILLEGAL_HA = 1031 -KEY_NOT_FOUND = 1032 -NOT_FORM_FILE = 1033 -NOT_KEYFILE = 1034 -OLD_KEYFILE = 1035 -OPEN_AS_READONLY = 1036 -OUTOFMEMORY = 1037 -OUT_OF_SORTMEMORY = 1038 -UNEXPECTED_EOF = 1039 -CON_COUNT_ERROR = 1040 -OUT_OF_RESOURCES = 1041 -BAD_HOST_ERROR = 1042 -HANDSHAKE_ERROR = 1043 -DBACCESS_DENIED_ERROR = 1044 -ACCESS_DENIED_ERROR = 1045 -NO_DB_ERROR = 1046 -UNKNOWN_COM_ERROR = 1047 -BAD_NULL_ERROR = 1048 -BAD_DB_ERROR = 1049 -TABLE_EXISTS_ERROR = 1050 -BAD_TABLE_ERROR = 1051 -NON_UNIQ_ERROR = 1052 -SERVER_SHUTDOWN = 1053 -BAD_FIELD_ERROR = 1054 -WRONG_FIELD_WITH_GROUP = 1055 -WRONG_GROUP_FIELD = 1056 -WRONG_SUM_SELECT = 1057 -WRONG_VALUE_COUNT = 1058 -TOO_LONG_IDENT = 1059 -DUP_FIELDNAME = 1060 -DUP_KEYNAME = 1061 -DUP_ENTRY = 1062 -WRONG_FIELD_SPEC = 1063 -PARSE_ERROR = 1064 -EMPTY_QUERY = 1065 -NONUNIQ_TABLE = 1066 -INVALID_DEFAULT = 1067 -MULTIPLE_PRI_KEY = 1068 -TOO_MANY_KEYS = 1069 -TOO_MANY_KEY_PARTS = 1070 -TOO_LONG_KEY = 1071 -KEY_COLUMN_DOES_NOT_EXITS = 1072 -BLOB_USED_AS_KEY = 1073 -TOO_BIG_FIELDLENGTH = 1074 -WRONG_AUTO_KEY = 1075 -READY = 1076 -NORMAL_SHUTDOWN = 1077 -GOT_SIGNAL = 1078 -SHUTDOWN_COMPLETE = 1079 -FORCING_CLOSE = 1080 -IPSOCK_ERROR = 1081 -NO_SUCH_INDEX = 1082 -WRONG_FIELD_TERMINATORS = 1083 -BLOBS_AND_NO_TERMINATED = 1084 -TEXTFILE_NOT_READABLE = 1085 -FILE_EXISTS_ERROR = 1086 -LOAD_INFO = 1087 -ALTER_INFO = 1088 -WRONG_SUB_KEY = 1089 -CANT_REMOVE_ALL_FIELDS = 1090 -CANT_DROP_FIELD_OR_KEY = 1091 -INSERT_INFO = 1092 -INSERT_TABLE_USED = 1093 -NO_SUCH_THREAD = 1094 -KILL_DENIED_ERROR = 1095 -NO_TABLES_USED = 1096 -TOO_BIG_SET = 1097 -NO_UNIQUE_LOGFILE = 1098 -TABLE_NOT_LOCKED_FOR_WRITE = 1099 -TABLE_NOT_LOCKED = 1100 -BLOB_CANT_HAVE_DEFAULT = 1101 -WRONG_DB_NAME = 1102 -WRONG_TABLE_NAME = 1103 -TOO_BIG_SELECT = 1104 -UNKNOWN_ERROR = 1105 -UNKNOWN_PROCEDURE = 1106 -WRONG_PARAMCOUNT_TO_PROCEDURE = 1107 -WRONG_PARAMETERS_TO_PROCEDURE = 1108 -UNKNOWN_TABLE = 1109 -FIELD_SPECIFIED_TWICE = 1110 -INVALID_GROUP_FUNC_USE = 1111 -UNSUPPORTED_EXTENSION = 1112 -TABLE_MUST_HAVE_COLUMNS = 1113 -RECORD_FILE_FULL = 1114 -UNKNOWN_CHARACTER_SET = 1115 -TOO_MANY_TABLES = 1116 -TOO_MANY_FIELDS = 1117 -TOO_BIG_ROWSIZE = 1118 -STACK_OVERRUN = 1119 -WRONG_OUTER_JOIN = 1120 -NULL_COLUMN_IN_INDEX = 1121 -CANT_FIND_UDF = 1122 -CANT_INITIALIZE_UDF = 1123 -UDF_NO_PATHS = 1124 -UDF_EXISTS = 1125 -CANT_OPEN_LIBRARY = 1126 -CANT_FIND_DL_ENTRY = 1127 -FUNCTION_NOT_DEFINED = 1128 -HOST_IS_BLOCKED = 1129 -HOST_NOT_PRIVILEGED = 1130 -PASSWORD_ANONYMOUS_USER = 1131 -PASSWORD_NOT_ALLOWED = 1132 -PASSWORD_NO_MATCH = 1133 -UPDATE_INFO = 1134 -CANT_CREATE_THREAD = 1135 -WRONG_VALUE_COUNT_ON_ROW = 1136 -CANT_REOPEN_TABLE = 1137 -INVALID_USE_OF_NULL = 1138 -REGEXP_ERROR = 1139 -MIX_OF_GROUP_FUNC_AND_FIELDS = 1140 -NONEXISTING_GRANT = 1141 -TABLEACCESS_DENIED_ERROR = 1142 -COLUMNACCESS_DENIED_ERROR = 1143 -ILLEGAL_GRANT_FOR_TABLE = 1144 -GRANT_WRONG_HOST_OR_USER = 1145 -NO_SUCH_TABLE = 1146 -NONEXISTING_TABLE_GRANT = 1147 -NOT_ALLOWED_COMMAND = 1148 -SYNTAX_ERROR = 1149 -DELAYED_CANT_CHANGE_LOCK = 1150 -TOO_MANY_DELAYED_THREADS = 1151 -ABORTING_CONNECTION = 1152 -NET_PACKET_TOO_LARGE = 1153 -NET_READ_ERROR_FROM_PIPE = 1154 -NET_FCNTL_ERROR = 1155 -NET_PACKETS_OUT_OF_ORDER = 1156 -NET_UNCOMPRESS_ERROR = 1157 -NET_READ_ERROR = 1158 -NET_READ_INTERRUPTED = 1159 -NET_ERROR_ON_WRITE = 1160 -NET_WRITE_INTERRUPTED = 1161 -TOO_LONG_STRING = 1162 -TABLE_CANT_HANDLE_BLOB = 1163 -TABLE_CANT_HANDLE_AUTO_INCREMENT = 1164 -DELAYED_INSERT_TABLE_LOCKED = 1165 -WRONG_COLUMN_NAME = 1166 -WRONG_KEY_COLUMN = 1167 -WRONG_MRG_TABLE = 1168 -DUP_UNIQUE = 1169 -BLOB_KEY_WITHOUT_LENGTH = 1170 -PRIMARY_CANT_HAVE_NULL = 1171 -TOO_MANY_ROWS = 1172 -REQUIRES_PRIMARY_KEY = 1173 -NO_RAID_COMPILED = 1174 -UPDATE_WITHOUT_KEY_IN_SAFE_MODE = 1175 -KEY_DOES_NOT_EXITS = 1176 -CHECK_NO_SUCH_TABLE = 1177 -CHECK_NOT_IMPLEMENTED = 1178 -CANT_DO_THIS_DURING_AN_TRANSACTION = 1179 -ERROR_DURING_COMMIT = 1180 -ERROR_DURING_ROLLBACK = 1181 -ERROR_DURING_FLUSH_LOGS = 1182 -ERROR_DURING_CHECKPOINT = 1183 -NEW_ABORTING_CONNECTION = 1184 -DUMP_NOT_IMPLEMENTED = 1185 -FLUSH_MASTER_BINLOG_CLOSED = 1186 -INDEX_REBUILD = 1187 -MASTER = 1188 -MASTER_NET_READ = 1189 -MASTER_NET_WRITE = 1190 -FT_MATCHING_KEY_NOT_FOUND = 1191 -LOCK_OR_ACTIVE_TRANSACTION = 1192 -UNKNOWN_SYSTEM_VARIABLE = 1193 -CRASHED_ON_USAGE = 1194 -CRASHED_ON_REPAIR = 1195 -WARNING_NOT_COMPLETE_ROLLBACK = 1196 -TRANS_CACHE_FULL = 1197 -SLAVE_MUST_STOP = 1198 -SLAVE_NOT_RUNNING = 1199 -BAD_SLAVE = 1200 -MASTER_INFO = 1201 -SLAVE_THREAD = 1202 -TOO_MANY_USER_CONNECTIONS = 1203 -SET_CONSTANTS_ONLY = 1204 -LOCK_WAIT_TIMEOUT = 1205 -LOCK_TABLE_FULL = 1206 -READ_ONLY_TRANSACTION = 1207 -DROP_DB_WITH_READ_LOCK = 1208 -CREATE_DB_WITH_READ_LOCK = 1209 -WRONG_ARGUMENTS = 1210 -NO_PERMISSION_TO_CREATE_USER = 1211 -UNION_TABLES_IN_DIFFERENT_DIR = 1212 -LOCK_DEADLOCK = 1213 -TABLE_CANT_HANDLE_FT = 1214 -CANNOT_ADD_FOREIGN = 1215 -NO_REFERENCED_ROW = 1216 -ROW_IS_REFERENCED = 1217 -CONNECT_TO_MASTER = 1218 -QUERY_ON_MASTER = 1219 -ERROR_WHEN_EXECUTING_COMMAND = 1220 -WRONG_USAGE = 1221 -WRONG_NUMBER_OF_COLUMNS_IN_SELECT = 1222 -CANT_UPDATE_WITH_READLOCK = 1223 -MIXING_NOT_ALLOWED = 1224 -DUP_ARGUMENT = 1225 -USER_LIMIT_REACHED = 1226 -SPECIFIC_ACCESS_DENIED_ERROR = 1227 -LOCAL_VARIABLE = 1228 -GLOBAL_VARIABLE = 1229 -NO_DEFAULT = 1230 -WRONG_VALUE_FOR_VAR = 1231 -WRONG_TYPE_FOR_VAR = 1232 -VAR_CANT_BE_READ = 1233 -CANT_USE_OPTION_HERE = 1234 -NOT_SUPPORTED_YET = 1235 -MASTER_FATAL_ERROR_READING_BINLOG = 1236 -SLAVE_IGNORED_TABLE = 1237 -INCORRECT_GLOBAL_LOCAL_VAR = 1238 -WRONG_FK_DEF = 1239 -KEY_REF_DO_NOT_MATCH_TABLE_REF = 1240 -OPERAND_COLUMNS = 1241 -SUBQUERY_NO_1_ROW = 1242 -UNKNOWN_STMT_HANDLER = 1243 -CORRUPT_HELP_DB = 1244 -CYCLIC_REFERENCE = 1245 -AUTO_CONVERT = 1246 -ILLEGAL_REFERENCE = 1247 -DERIVED_MUST_HAVE_ALIAS = 1248 -SELECT_REDUCED = 1249 -TABLENAME_NOT_ALLOWED_HERE = 1250 -NOT_SUPPORTED_AUTH_MODE = 1251 -SPATIAL_CANT_HAVE_NULL = 1252 -COLLATION_CHARSET_MISMATCH = 1253 -SLAVE_WAS_RUNNING = 1254 -SLAVE_WAS_NOT_RUNNING = 1255 -TOO_BIG_FOR_UNCOMPRESS = 1256 -ZLIB_Z_MEM_ERROR = 1257 -ZLIB_Z_BUF_ERROR = 1258 -ZLIB_Z_DATA_ERROR = 1259 -CUT_VALUE_GROUP_CONCAT = 1260 -WARN_TOO_FEW_RECORDS = 1261 -WARN_TOO_MANY_RECORDS = 1262 -WARN_NULL_TO_NOTNULL = 1263 -WARN_DATA_OUT_OF_RANGE = 1264 -WARN_DATA_TRUNCATED = 1265 -WARN_USING_OTHER_HANDLER = 1266 -CANT_AGGREGATE_2COLLATIONS = 1267 -DROP_USER = 1268 -REVOKE_GRANTS = 1269 -CANT_AGGREGATE_3COLLATIONS = 1270 -CANT_AGGREGATE_NCOLLATIONS = 1271 -VARIABLE_IS_NOT_STRUCT = 1272 -UNKNOWN_COLLATION = 1273 -SLAVE_IGNORED_SSL_PARAMS = 1274 -SERVER_IS_IN_SECURE_AUTH_MODE = 1275 -WARN_FIELD_RESOLVED = 1276 -BAD_SLAVE_UNTIL_COND = 1277 -MISSING_SKIP_SLAVE = 1278 -UNTIL_COND_IGNORED = 1279 -WRONG_NAME_FOR_INDEX = 1280 -WRONG_NAME_FOR_CATALOG = 1281 -WARN_QC_RESIZE = 1282 -BAD_FT_COLUMN = 1283 -UNKNOWN_KEY_CACHE = 1284 -WARN_HOSTNAME_WONT_WORK = 1285 -UNKNOWN_STORAGE_ENGINE = 1286 -WARN_DEPRECATED_SYNTAX = 1287 -NON_UPDATABLE_TABLE = 1288 -FEATURE_DISABLED = 1289 -OPTION_PREVENTS_STATEMENT = 1290 -DUPLICATED_VALUE_IN_TYPE = 1291 -TRUNCATED_WRONG_VALUE = 1292 -TOO_MUCH_AUTO_TIMESTAMP_COLS = 1293 -INVALID_ON_UPDATE = 1294 -UNSUPPORTED_PS = 1295 -GET_ERRMSG = 1296 -GET_TEMPORARY_ERRMSG = 1297 -UNKNOWN_TIME_ZONE = 1298 -WARN_INVALID_TIMESTAMP = 1299 -INVALID_CHARACTER_STRING = 1300 -WARN_ALLOWED_PACKET_OVERFLOWED = 1301 -CONFLICTING_DECLARATIONS = 1302 -SP_NO_RECURSIVE_CREATE = 1303 -SP_ALREADY_EXISTS = 1304 -SP_DOES_NOT_EXIST = 1305 -SP_DROP_FAILED = 1306 -SP_STORE_FAILED = 1307 -SP_LILABEL_MISMATCH = 1308 -SP_LABEL_REDEFINE = 1309 -SP_LABEL_MISMATCH = 1310 -SP_UNINIT_VAR = 1311 -SP_BADSELECT = 1312 -SP_BADRETURN = 1313 -SP_BADSTATEMENT = 1314 -UPDATE_LOG_DEPRECATED_IGNORED = 1315 -UPDATE_LOG_DEPRECATED_TRANSLATED = 1316 -QUERY_INTERRUPTED = 1317 -SP_WRONG_NO_OF_ARGS = 1318 -SP_COND_MISMATCH = 1319 -SP_NORETURN = 1320 -SP_NORETURNEND = 1321 -SP_BAD_CURSOR_QUERY = 1322 -SP_BAD_CURSOR_SELECT = 1323 -SP_CURSOR_MISMATCH = 1324 -SP_CURSOR_ALREADY_OPEN = 1325 -SP_CURSOR_NOT_OPEN = 1326 -SP_UNDECLARED_VAR = 1327 -SP_WRONG_NO_OF_FETCH_ARGS = 1328 -SP_FETCH_NO_DATA = 1329 -SP_DUP_PARAM = 1330 -SP_DUP_VAR = 1331 -SP_DUP_COND = 1332 -SP_DUP_CURS = 1333 -SP_CANT_ALTER = 1334 -SP_SUBSELECT_NYI = 1335 -STMT_NOT_ALLOWED_IN_SF_OR_TRG = 1336 -SP_VARCOND_AFTER_CURSHNDLR = 1337 -SP_CURSOR_AFTER_HANDLER = 1338 -SP_CASE_NOT_FOUND = 1339 -FPARSER_TOO_BIG_FILE = 1340 -FPARSER_BAD_HEADER = 1341 -FPARSER_EOF_IN_COMMENT = 1342 -FPARSER_ERROR_IN_PARAMETER = 1343 -FPARSER_EOF_IN_UNKNOWN_PARAMETER = 1344 -VIEW_NO_EXPLAIN = 1345 -FRM_UNKNOWN_TYPE = 1346 -WRONG_OBJECT = 1347 -NONUPDATEABLE_COLUMN = 1348 -VIEW_SELECT_DERIVED = 1349 -VIEW_SELECT_CLAUSE = 1350 -VIEW_SELECT_VARIABLE = 1351 -VIEW_SELECT_TMPTABLE = 1352 -VIEW_WRONG_LIST = 1353 -WARN_VIEW_MERGE = 1354 -WARN_VIEW_WITHOUT_KEY = 1355 -VIEW_INVALID = 1356 -SP_NO_DROP_SP = 1357 -SP_GOTO_IN_HNDLR = 1358 -TRG_ALREADY_EXISTS = 1359 -TRG_DOES_NOT_EXIST = 1360 -TRG_ON_VIEW_OR_TEMP_TABLE = 1361 -TRG_CANT_CHANGE_ROW = 1362 -TRG_NO_SUCH_ROW_IN_TRG = 1363 -NO_DEFAULT_FOR_FIELD = 1364 -DIVISION_BY_ZERO = 1365 -TRUNCATED_WRONG_VALUE_FOR_FIELD = 1366 -ILLEGAL_VALUE_FOR_TYPE = 1367 -VIEW_NONUPD_CHECK = 1368 -VIEW_CHECK_FAILED = 1369 -PROCACCESS_DENIED_ERROR = 1370 -RELAY_LOG_FAIL = 1371 -PASSWD_LENGTH = 1372 -UNKNOWN_TARGET_BINLOG = 1373 -IO_ERR_LOG_INDEX_READ = 1374 -BINLOG_PURGE_PROHIBITED = 1375 -FSEEK_FAIL = 1376 -BINLOG_PURGE_FATAL_ERR = 1377 -LOG_IN_USE = 1378 -LOG_PURGE_UNKNOWN_ERR = 1379 -RELAY_LOG_INIT = 1380 -NO_BINARY_LOGGING = 1381 -RESERVED_SYNTAX = 1382 -WSAS_FAILED = 1383 -DIFF_GROUPS_PROC = 1384 -NO_GROUP_FOR_PROC = 1385 -ORDER_WITH_PROC = 1386 -LOGGING_PROHIBIT_CHANGING_OF = 1387 -NO_FILE_MAPPING = 1388 -WRONG_MAGIC = 1389 -PS_MANY_PARAM = 1390 -KEY_PART_0 = 1391 -VIEW_CHECKSUM = 1392 -VIEW_MULTIUPDATE = 1393 -VIEW_NO_INSERT_FIELD_LIST = 1394 -VIEW_DELETE_MERGE_VIEW = 1395 -CANNOT_USER = 1396 -XAER_NOTA = 1397 -XAER_INVAL = 1398 -XAER_RMFAIL = 1399 -XAER_OUTSIDE = 1400 -XAER_RMERR = 1401 -XA_RBROLLBACK = 1402 -NONEXISTING_PROC_GRANT = 1403 -PROC_AUTO_GRANT_FAIL = 1404 -PROC_AUTO_REVOKE_FAIL = 1405 -DATA_TOO_LONG = 1406 -SP_BAD_SQLSTATE = 1407 -STARTUP = 1408 -LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR = 1409 -CANT_CREATE_USER_WITH_GRANT = 1410 -WRONG_VALUE_FOR_TYPE = 1411 -TABLE_DEF_CHANGED = 1412 -SP_DUP_HANDLER = 1413 -SP_NOT_VAR_ARG = 1414 -SP_NO_RETSET = 1415 -CANT_CREATE_GEOMETRY_OBJECT = 1416 -FAILED_ROUTINE_BREAK_BINLOG = 1417 -BINLOG_UNSAFE_ROUTINE = 1418 -BINLOG_CREATE_ROUTINE_NEED_SUPER = 1419 -EXEC_STMT_WITH_OPEN_CURSOR = 1420 -STMT_HAS_NO_OPEN_CURSOR = 1421 -COMMIT_NOT_ALLOWED_IN_SF_OR_TRG = 1422 -NO_DEFAULT_FOR_VIEW_FIELD = 1423 -SP_NO_RECURSION = 1424 -TOO_BIG_SCALE = 1425 -TOO_BIG_PRECISION = 1426 -M_BIGGER_THAN_D = 1427 -WRONG_LOCK_OF_SYSTEM_TABLE = 1428 -CONNECT_TO_FOREIGN_DATA_SOURCE = 1429 -QUERY_ON_FOREIGN_DATA_SOURCE = 1430 -FOREIGN_DATA_SOURCE_DOESNT_EXIST = 1431 -FOREIGN_DATA_STRING_INVALID_CANT_CREATE = 1432 -FOREIGN_DATA_STRING_INVALID = 1433 -CANT_CREATE_FEDERATED_TABLE = 1434 -TRG_IN_WRONG_SCHEMA = 1435 -STACK_OVERRUN_NEED_MORE = 1436 -TOO_LONG_BODY = 1437 -WARN_CANT_DROP_DEFAULT_KEYCACHE = 1438 -TOO_BIG_DISPLAYWIDTH = 1439 -XAER_DUPID = 1440 -DATETIME_FUNCTION_OVERFLOW = 1441 -CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG = 1442 -VIEW_PREVENT_UPDATE = 1443 -PS_NO_RECURSION = 1444 -SP_CANT_SET_AUTOCOMMIT = 1445 -MALFORMED_DEFINER = 1446 -VIEW_FRM_NO_USER = 1447 -VIEW_OTHER_USER = 1448 -NO_SUCH_USER = 1449 -FORBID_SCHEMA_CHANGE = 1450 -ROW_IS_REFERENCED_2 = 1451 -NO_REFERENCED_ROW_2 = 1452 -SP_BAD_VAR_SHADOW = 1453 -TRG_NO_DEFINER = 1454 -OLD_FILE_FORMAT = 1455 -SP_RECURSION_LIMIT = 1456 -SP_PROC_TABLE_CORRUPT = 1457 -ERROR_LAST = 1457 - diff --git a/modules/MySQLdb/constants/FIELD_TYPE.py b/modules/MySQLdb/constants/FIELD_TYPE.py deleted file mode 100644 index 8a57b171..00000000 --- a/modules/MySQLdb/constants/FIELD_TYPE.py +++ /dev/null @@ -1,37 +0,0 @@ -"""MySQL FIELD_TYPE Constants - -These constants represent the various column (field) types that are -supported by MySQL. - -""" - -DECIMAL = 0 -TINY = 1 -SHORT = 2 -LONG = 3 -FLOAT = 4 -DOUBLE = 5 -NULL = 6 -TIMESTAMP = 7 -LONGLONG = 8 -INT24 = 9 -DATE = 10 -TIME = 11 -DATETIME = 12 -YEAR = 13 -NEWDATE = 14 -VARCHAR = 15 -BIT = 16 -NEWDECIMAL = 246 -ENUM = 247 -SET = 248 -TINY_BLOB = 249 -MEDIUM_BLOB = 250 -LONG_BLOB = 251 -BLOB = 252 -VAR_STRING = 253 -STRING = 254 -GEOMETRY = 255 - -CHAR = TINY -INTERVAL = ENUM diff --git a/modules/MySQLdb/constants/FLAG.py b/modules/MySQLdb/constants/FLAG.py deleted file mode 100644 index 00e6c7c0..00000000 --- a/modules/MySQLdb/constants/FLAG.py +++ /dev/null @@ -1,23 +0,0 @@ -"""MySQL FLAG Constants - -These flags are used along with the FIELD_TYPE to indicate various -properties of columns in a result set. - -""" - -NOT_NULL = 1 -PRI_KEY = 2 -UNIQUE_KEY = 4 -MULTIPLE_KEY = 8 -BLOB = 16 -UNSIGNED = 32 -ZEROFILL = 64 -BINARY = 128 -ENUM = 256 -AUTO_INCREMENT = 512 -TIMESTAMP = 1024 -SET = 2048 -NUM = 32768 -PART_KEY = 16384 -GROUP = 32768 -UNIQUE = 65536 diff --git a/modules/MySQLdb/constants/REFRESH.py b/modules/MySQLdb/constants/REFRESH.py deleted file mode 100644 index 4a08b94e..00000000 --- a/modules/MySQLdb/constants/REFRESH.py +++ /dev/null @@ -1,17 +0,0 @@ -"""MySQL REFRESH Constants - -These constants seem to mostly deal with things internal to the -MySQL server. Forget you saw this. - -""" - -GRANT = 1 -LOG = 2 -TABLES = 4 -HOSTS = 8 -STATUS = 16 -THREADS = 32 -SLAVE = 64 -MASTER = 128 -READ_LOCK = 16384 -FAST = 32768 diff --git a/modules/MySQLdb/constants/__init__.py b/modules/MySQLdb/constants/__init__.py deleted file mode 100644 index 3da4a0e7..00000000 --- a/modules/MySQLdb/constants/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__all__ = ['CR', 'FIELD_TYPE','CLIENT','REFRESH','ER','FLAG'] diff --git a/modules/MySQLdb/converters.py b/modules/MySQLdb/converters.py deleted file mode 100644 index 26c1f901..00000000 --- a/modules/MySQLdb/converters.py +++ /dev/null @@ -1,189 +0,0 @@ -"""MySQLdb type conversion module - -This module handles all the type conversions for MySQL. If the default -type conversions aren't what you need, you can make your own. The -dictionary conversions maps some kind of type to a conversion function -which returns the corresponding value: - -Key: FIELD_TYPE.* (from MySQLdb.constants) - -Conversion function: - - Arguments: string - - Returns: Python object - -Key: Python type object (from types) or class - -Conversion function: - - Arguments: Python object of indicated type or class AND - conversion dictionary - - Returns: SQL literal value - - Notes: Most conversion functions can ignore the dictionary, but - it is a required parameter. It is necessary for converting - things like sequences and instances. - -Don't modify conversions if you can avoid it. Instead, make copies -(with the copy() method), modify the copies, and then pass them to -MySQL.connect(). - -""" - -from _mysql import string_literal, escape_sequence, escape_dict, escape, NULL -from MySQLdb.constants import FIELD_TYPE, FLAG -from MySQLdb.times import * - -try: - from types import IntType, LongType, FloatType, NoneType, TupleType, ListType, DictType, InstanceType, \ - StringType, UnicodeType, ObjectType, BooleanType, ClassType, TypeType -except ImportError: - # Python 3 - long = int - IntType, LongType, FloatType, NoneType = int, long, float, type(None) - TupleType, ListType, DictType, InstanceType = tuple, list, dict, None - StringType, UnicodeType, ObjectType, BooleanType = bytes, str, object, bool - -import array - -try: - ArrayType = array.ArrayType -except AttributeError: - ArrayType = array.array - -try: - set -except NameError: - from sets import Set as set - -def Bool2Str(s, d): return str(int(s)) - -def Str2Set(s): - return set([ i for i in s.split(',') if i ]) - -def Set2Str(s, d): - return string_literal(','.join(s), d) - -def Thing2Str(s, d): - """Convert something into a string via str().""" - return str(s) - -def Unicode2Str(s, d): - """Convert a unicode object to a string using the default encoding. - This is only used as a placeholder for the real function, which - is connection-dependent.""" - return s.encode() - -Long2Int = Thing2Str - -def Float2Str(o, d): - return '%.15g' % o - -def None2NULL(o, d): - """Convert None to NULL.""" - return NULL # duh - -def Thing2Literal(o, d): - - """Convert something into a SQL string literal. If using - MySQL-3.23 or newer, string_literal() is a method of the - _mysql.MYSQL object, and this function will be overridden with - that method when the connection is created.""" - - return string_literal(o, d) - - -def Instance2Str(o, d): - - """ - - Convert an Instance to a string representation. If the __str__() - method produces acceptable output, then you don't need to add the - class to conversions; it will be handled by the default - converter. If the exact class is not found in d, it will use the - first class it can find for which o is an instance. - - """ - - if o.__class__ in d: - return d[o.__class__](o, d) - cl = filter(lambda x,o=o: - type(x) is ClassType - and isinstance(o, x), d.keys()) - if not cl: - cl = filter(lambda x,o=o: - type(x) is TypeType - and isinstance(o, x) - and d[x] is not Instance2Str, - d.keys()) - if not cl: - return d[StringType](o,d) - d[o.__class__] = d[cl[0]] - return d[cl[0]](o, d) - -def char_array(s): - return array.array('c', s) - -def array2Str(o, d): - return Thing2Literal(o.tostring(), d) - -def quote_tuple(t, d): - return "(%s)" % (','.join(escape_sequence(t, d))) - -conversions = { - IntType: Thing2Str, - LongType: Long2Int, - FloatType: Float2Str, - NoneType: None2NULL, - TupleType: quote_tuple, - ListType: quote_tuple, - DictType: escape_dict, - InstanceType: Instance2Str, - ArrayType: array2Str, - StringType: Thing2Literal, # default - UnicodeType: Unicode2Str, - ObjectType: Instance2Str, - BooleanType: Bool2Str, - DateTimeType: DateTime2literal, - DateTimeDeltaType: DateTimeDelta2literal, - set: Set2Str, - FIELD_TYPE.TINY: int, - FIELD_TYPE.SHORT: int, - FIELD_TYPE.LONG: long, - FIELD_TYPE.FLOAT: float, - FIELD_TYPE.DOUBLE: float, - FIELD_TYPE.DECIMAL: float, - FIELD_TYPE.NEWDECIMAL: float, - FIELD_TYPE.LONGLONG: long, - FIELD_TYPE.INT24: int, - FIELD_TYPE.YEAR: int, - FIELD_TYPE.SET: Str2Set, - FIELD_TYPE.TIMESTAMP: mysql_timestamp_converter, - FIELD_TYPE.DATETIME: DateTime_or_None, - FIELD_TYPE.TIME: TimeDelta_or_None, - FIELD_TYPE.DATE: Date_or_None, - FIELD_TYPE.BLOB: [ - (FLAG.BINARY, str), - ], - FIELD_TYPE.STRING: [ - (FLAG.BINARY, str), - ], - FIELD_TYPE.VAR_STRING: [ - (FLAG.BINARY, str), - ], - FIELD_TYPE.VARCHAR: [ - (FLAG.BINARY, str), - ], - } - -try: - from decimal import Decimal - conversions[FIELD_TYPE.DECIMAL] = Decimal - conversions[FIELD_TYPE.NEWDECIMAL] = Decimal -except ImportError: - pass - - - diff --git a/modules/MySQLdb/cursors.py b/modules/MySQLdb/cursors.py deleted file mode 100644 index 348a586a..00000000 --- a/modules/MySQLdb/cursors.py +++ /dev/null @@ -1,541 +0,0 @@ -"""MySQLdb Cursors - -This module implements Cursors of various types for MySQLdb. By -default, MySQLdb uses the Cursor class. - -""" - -import re -import sys -try: - from types import ListType, TupleType, UnicodeType -except ImportError: - # Python 3 - ListType = list - TupleType = tuple - UnicodeType = str - -restr = r""" - \s - values - \s* - ( - \( - [^()']* - (?: - (?: - (?:\( - # ( - editor hightlighting helper - .* - \)) - | - ' - [^\\']* - (?:\\.[^\\']*)* - ' - ) - [^()']* - )* - \) - ) -""" - -insert_values = re.compile(restr, re.S | re.I | re.X) - -from _mysql_exceptions import Warning, Error, InterfaceError, DataError, \ - DatabaseError, OperationalError, IntegrityError, InternalError, \ - NotSupportedError, ProgrammingError - - -class BaseCursor(object): - - """A base for Cursor classes. Useful attributes: - - description - A tuple of DB API 7-tuples describing the columns in - the last executed query; see PEP-249 for details. - - description_flags - Tuple of column flags for last query, one entry per column - in the result set. Values correspond to those in - MySQLdb.constants.FLAG. See MySQL documentation (C API) - for more information. Non-standard extension. - - arraysize - default number of rows fetchmany() will fetch - - """ - - from _mysql_exceptions import MySQLError, Warning, Error, InterfaceError, \ - DatabaseError, DataError, OperationalError, IntegrityError, \ - InternalError, ProgrammingError, NotSupportedError - - _defer_warnings = False - - def __init__(self, connection): - from weakref import proxy - - self.connection = proxy(connection) - self.description = None - self.description_flags = None - self.rowcount = -1 - self.arraysize = 1 - self._executed = None - self.lastrowid = None - self.messages = [] - self.errorhandler = connection.errorhandler - self._result = None - self._warnings = 0 - self._info = None - self.rownumber = None - - def __del__(self): - self.close() - self.errorhandler = None - self._result = None - - def close(self): - """Close the cursor. No further queries will be possible.""" - if not self.connection: return - while self.nextset(): pass - self.connection = None - - def _check_executed(self): - if not self._executed: - self.errorhandler(self, ProgrammingError, "execute() first") - - def _warning_check(self): - from warnings import warn - if self._warnings: - warnings = self._get_db().show_warnings() - if warnings: - # This is done in two loops in case - # Warnings are set to raise exceptions. - for w in warnings: - self.messages.append((self.Warning, w)) - for w in warnings: - warn(w[-1], self.Warning, 3) - elif self._info: - self.messages.append((self.Warning, self._info)) - warn(self._info, self.Warning, 3) - - def nextset(self): - """Advance to the next result set. - - Returns None if there are no more result sets. - """ - if self._executed: - self.fetchall() - del self.messages[:] - - db = self._get_db() - nr = db.next_result() - if nr == -1: - return None - self._do_get_result() - self._post_get_result() - self._warning_check() - return 1 - - def _post_get_result(self): pass - - def _do_get_result(self): - db = self._get_db() - self._result = self._get_result() - self.rowcount = db.affected_rows() - self.rownumber = 0 - self.description = self._result and self._result.describe() or None - self.description_flags = self._result and self._result.field_flags() or None - self.lastrowid = db.insert_id() - self._warnings = db.warning_count() - self._info = db.info() - - def setinputsizes(self, *args): - """Does nothing, required by DB API.""" - - def setoutputsizes(self, *args): - """Does nothing, required by DB API.""" - - def _get_db(self): - if not self.connection: - self.errorhandler(self, ProgrammingError, "cursor closed") - return self.connection - - def execute(self, query, args=None): - - """Execute a query. - - query -- string, query to execute on server - args -- optional sequence or mapping, parameters to use with query. - - Note: If args is a sequence, then %s must be used as the - parameter placeholder in the query. If a mapping is used, - %(key)s must be used as the placeholder. - - Returns long integer rows affected, if any - - """ - del self.messages[:] - db = self._get_db() - if isinstance(query, unicode): - query = query.encode(db.unicode_literal.charset) - if args is not None: - if isinstance(args, dict): - query = query % dict((key, db.literal(item)) - for key, item in args.iteritems()) - else: - query = query % tuple([db.literal(item) for item in args]) - try: - r = None - r = self._query(query) - except TypeError, m: - if m.args[0] in ("not enough arguments for format string", - "not all arguments converted"): - self.messages.append((ProgrammingError, m.args[0])) - self.errorhandler(self, ProgrammingError, m.args[0]) - else: - self.messages.append((TypeError, m)) - self.errorhandler(self, TypeError, m) - except (SystemExit, KeyboardInterrupt): - raise - except: - exc, value, tb = sys.exc_info() - del tb - self.messages.append((exc, value)) - self.errorhandler(self, exc, value) - self._executed = query - if not self._defer_warnings: self._warning_check() - return r - - def executemany(self, query, args): - - """Execute a multi-row query. - - query -- string, query to execute on server - - args - - Sequence of sequences or mappings, parameters to use with - query. - - Returns long integer rows affected, if any. - - This method improves performance on multiple-row INSERT and - REPLACE. Otherwise it is equivalent to looping over args with - execute(). - - """ - del self.messages[:] - db = self._get_db() - if not args: return - if isinstance(query, unicode): - query = query.encode(db.unicode_literal.charset) - m = insert_values.search(query) - if not m: - r = 0 - for a in args: - r = r + self.execute(query, a) - return r - p = m.start(1) - e = m.end(1) - qv = m.group(1) - try: - q = [] - for a in args: - if isinstance(a, dict): - q.append(qv % dict((key, db.literal(item)) - for key, item in a.iteritems())) - else: - q.append(qv % tuple([db.literal(item) for item in a])) - except TypeError, msg: - if msg.args[0] in ("not enough arguments for format string", - "not all arguments converted"): - self.errorhandler(self, ProgrammingError, msg.args[0]) - else: - self.errorhandler(self, TypeError, msg) - except (SystemExit, KeyboardInterrupt): - raise - except: - exc, value, tb = sys.exc_info() - del tb - self.errorhandler(self, exc, value) - r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]])) - if not self._defer_warnings: self._warning_check() - return r - - def callproc(self, procname, args=()): - - """Execute stored procedure procname with args - - procname -- string, name of procedure to execute on server - - args -- Sequence of parameters to use with procedure - - Returns the original args. - - Compatibility warning: PEP-249 specifies that any modified - parameters must be returned. This is currently impossible - as they are only available by storing them in a server - variable and then retrieved by a query. Since stored - procedures return zero or more result sets, there is no - reliable way to get at OUT or INOUT parameters via callproc. - The server variables are named @_procname_n, where procname - is the parameter above and n is the position of the parameter - (from zero). Once all result sets generated by the procedure - have been fetched, you can issue a SELECT @_procname_0, ... - query using .execute() to get any OUT or INOUT values. - - Compatibility warning: The act of calling a stored procedure - itself creates an empty result set. This appears after any - result sets generated by the procedure. This is non-standard - behavior with respect to the DB-API. Be sure to use nextset() - to advance through all result sets; otherwise you may get - disconnected. - """ - - db = self._get_db() - for index, arg in enumerate(args): - q = "SET @_%s_%d=%s" % (procname, index, - db.literal(arg)) - if isinstance(q, unicode): - q = q.encode(db.unicode_literal.charset) - self._query(q) - self.nextset() - - q = "CALL %s(%s)" % (procname, - ','.join(['@_%s_%d' % (procname, i) - for i in range(len(args))])) - if type(q) is UnicodeType: - q = q.encode(db.unicode_literal.charset) - self._query(q) - self._executed = q - if not self._defer_warnings: self._warning_check() - return args - - def _do_query(self, q): - db = self._get_db() - self._last_executed = q - db.query(q) - self._do_get_result() - return self.rowcount - - def _query(self, q): return self._do_query(q) - - def _fetch_row(self, size=1): - if not self._result: - return () - return self._result.fetch_row(size, self._fetch_type) - - def __iter__(self): - return iter(self.fetchone, None) - - Warning = Warning - Error = Error - InterfaceError = InterfaceError - DatabaseError = DatabaseError - DataError = DataError - OperationalError = OperationalError - IntegrityError = IntegrityError - InternalError = InternalError - ProgrammingError = ProgrammingError - NotSupportedError = NotSupportedError - - -class CursorStoreResultMixIn(object): - - """This is a MixIn class which causes the entire result set to be - stored on the client side, i.e. it uses mysql_store_result(). If the - result set can be very large, consider adding a LIMIT clause to your - query, or using CursorUseResultMixIn instead.""" - - def _get_result(self): return self._get_db().store_result() - - def _query(self, q): - rowcount = self._do_query(q) - self._post_get_result() - return rowcount - - def _post_get_result(self): - self._rows = self._fetch_row(0) - self._result = None - - def fetchone(self): - """Fetches a single row from the cursor. None indicates that - no more rows are available.""" - self._check_executed() - if self.rownumber >= len(self._rows): return None - result = self._rows[self.rownumber] - self.rownumber = self.rownumber+1 - return result - - def fetchmany(self, size=None): - """Fetch up to size rows from the cursor. Result set may be smaller - than size. If size is not defined, cursor.arraysize is used.""" - self._check_executed() - end = self.rownumber + (size or self.arraysize) - result = self._rows[self.rownumber:end] - self.rownumber = min(end, len(self._rows)) - return result - - def fetchall(self): - """Fetchs all available rows from the cursor.""" - self._check_executed() - if self.rownumber: - result = self._rows[self.rownumber:] - else: - result = self._rows - self.rownumber = len(self._rows) - return result - - def scroll(self, value, mode='relative'): - """Scroll the cursor in the result set to a new position according - to mode. - - If mode is 'relative' (default), value is taken as offset to - the current position in the result set, if set to 'absolute', - value states an absolute target position.""" - self._check_executed() - if mode == 'relative': - r = self.rownumber + value - elif mode == 'absolute': - r = value - else: - self.errorhandler(self, ProgrammingError, - "unknown scroll mode %s" % repr(mode)) - if r < 0 or r >= len(self._rows): - self.errorhandler(self, IndexError, "out of range") - self.rownumber = r - - def __iter__(self): - self._check_executed() - result = self.rownumber and self._rows[self.rownumber:] or self._rows - return iter(result) - - -class CursorUseResultMixIn(object): - - """This is a MixIn class which causes the result set to be stored - in the server and sent row-by-row to client side, i.e. it uses - mysql_use_result(). You MUST retrieve the entire result set and - close() the cursor before additional queries can be peformed on - the connection.""" - - _defer_warnings = True - - def _get_result(self): return self._get_db().use_result() - - def fetchone(self): - """Fetches a single row from the cursor.""" - self._check_executed() - r = self._fetch_row(1) - if not r: - self._warning_check() - return None - self.rownumber = self.rownumber + 1 - return r[0] - - def fetchmany(self, size=None): - """Fetch up to size rows from the cursor. Result set may be smaller - than size. If size is not defined, cursor.arraysize is used.""" - self._check_executed() - r = self._fetch_row(size or self.arraysize) - self.rownumber = self.rownumber + len(r) - if not r: - self._warning_check() - return r - - def fetchall(self): - """Fetchs all available rows from the cursor.""" - self._check_executed() - r = self._fetch_row(0) - self.rownumber = self.rownumber + len(r) - self._warning_check() - return r - - def __iter__(self): - return self - - def next(self): - row = self.fetchone() - if row is None: - raise StopIteration - return row - - -class CursorTupleRowsMixIn(object): - - """This is a MixIn class that causes all rows to be returned as tuples, - which is the standard form required by DB API.""" - - _fetch_type = 0 - - -class CursorDictRowsMixIn(object): - - """This is a MixIn class that causes all rows to be returned as - dictionaries. This is a non-standard feature.""" - - _fetch_type = 1 - - def fetchoneDict(self): - """Fetch a single row as a dictionary. Deprecated: - Use fetchone() instead. Will be removed in 1.3.""" - from warnings import warn - warn("fetchoneDict() is non-standard and will be removed in 1.3", - DeprecationWarning, 2) - return self.fetchone() - - def fetchmanyDict(self, size=None): - """Fetch several rows as a list of dictionaries. Deprecated: - Use fetchmany() instead. Will be removed in 1.3.""" - from warnings import warn - warn("fetchmanyDict() is non-standard and will be removed in 1.3", - DeprecationWarning, 2) - return self.fetchmany(size) - - def fetchallDict(self): - """Fetch all available rows as a list of dictionaries. Deprecated: - Use fetchall() instead. Will be removed in 1.3.""" - from warnings import warn - warn("fetchallDict() is non-standard and will be removed in 1.3", - DeprecationWarning, 2) - return self.fetchall() - - -class CursorOldDictRowsMixIn(CursorDictRowsMixIn): - - """This is a MixIn class that returns rows as dictionaries with - the same key convention as the old Mysqldb (MySQLmodule). Don't - use this.""" - - _fetch_type = 2 - - -class Cursor(CursorStoreResultMixIn, CursorTupleRowsMixIn, - BaseCursor): - - """This is the standard Cursor class that returns rows as tuples - and stores the result set in the client.""" - - -class DictCursor(CursorStoreResultMixIn, CursorDictRowsMixIn, - BaseCursor): - - """This is a Cursor class that returns rows as dictionaries and - stores the result set in the client.""" - - -class SSCursor(CursorUseResultMixIn, CursorTupleRowsMixIn, - BaseCursor): - - """This is a Cursor class that returns rows as tuples and stores - the result set in the server.""" - - -class SSDictCursor(CursorUseResultMixIn, CursorDictRowsMixIn, - BaseCursor): - - """This is a Cursor class that returns rows as dictionaries and - stores the result set in the server.""" - - diff --git a/modules/MySQLdb/release.py b/modules/MySQLdb/release.py deleted file mode 100644 index 2e7119cf..00000000 --- a/modules/MySQLdb/release.py +++ /dev/null @@ -1,4 +0,0 @@ - -__author__ = "Andy Dustman " -version_info = (1,2,5,'final',1) -__version__ = "1.2.5" diff --git a/modules/MySQLdb/times.py b/modules/MySQLdb/times.py deleted file mode 100644 index 0ff74766..00000000 --- a/modules/MySQLdb/times.py +++ /dev/null @@ -1,126 +0,0 @@ -"""times module - -This module provides some Date and Time classes for dealing with MySQL data. - -Use Python datetime module to handle date and time columns.""" - -import math -from time import localtime -from datetime import date, datetime, time, timedelta -from _mysql import string_literal - -Date = date -Time = time -TimeDelta = timedelta -Timestamp = datetime - -DateTimeDeltaType = timedelta -DateTimeType = datetime - -def DateFromTicks(ticks): - """Convert UNIX ticks into a date instance.""" - return date(*localtime(ticks)[:3]) - -def TimeFromTicks(ticks): - """Convert UNIX ticks into a time instance.""" - return time(*localtime(ticks)[3:6]) - -def TimestampFromTicks(ticks): - """Convert UNIX ticks into a datetime instance.""" - return datetime(*localtime(ticks)[:6]) - -format_TIME = format_DATE = str - -def format_TIMEDELTA(v): - seconds = int(v.seconds) % 60 - minutes = int(v.seconds / 60) % 60 - hours = int(v.seconds / 3600) % 24 - return '%d %d:%d:%d' % (v.days, hours, minutes, seconds) - -def format_TIMESTAMP(d): - return d.isoformat(" ") - - -def DateTime_or_None(s): - if ' ' in s: - sep = ' ' - elif 'T' in s: - sep = 'T' - else: - return Date_or_None(s) - - try: - d, t = s.split(sep, 1) - if '.' in t: - t, ms = t.split('.',1) - ms = ms.ljust(6, '0') - else: - ms = 0 - return datetime(*[ int(x) for x in d.split('-')+t.split(':')+[ms] ]) - except (SystemExit, KeyboardInterrupt): - raise - except: - return Date_or_None(s) - -def TimeDelta_or_None(s): - try: - h, m, s = s.split(':') - if '.' in s: - s, ms = s.split('.') - ms = ms.ljust(6, '0') - else: - ms = 0 - h, m, s, ms = int(h), int(m), int(s), int(ms) - td = timedelta(hours=abs(h), minutes=m, seconds=s, - microseconds=ms) - if h < 0: - return -td - else: - return td - except ValueError: - # unpacking or int/float conversion failed - return None - -def Time_or_None(s): - try: - h, m, s = s.split(':') - if '.' in s: - s, ms = s.split('.') - ms = ms.ljust(6, '0') - else: - ms = 0 - h, m, s, ms = int(h), int(m), int(s), int(ms) - return time(hour=h, minute=m, second=s, - microsecond=ms) - except ValueError: - return None - -def Date_or_None(s): - try: - return date(*[ int(x) for x in s.split('-',2)]) - except (SystemExit, KeyboardInterrupt): - raise - except: - return None - -def DateTime2literal(d, c): - """Format a DateTime object as an ISO timestamp.""" - return string_literal(format_TIMESTAMP(d),c) - -def DateTimeDelta2literal(d, c): - """Format a DateTimeDelta object as a time.""" - return string_literal(format_TIMEDELTA(d),c) - -def mysql_timestamp_converter(s): - """Convert a MySQL TIMESTAMP to a Timestamp object.""" - # MySQL>4.1 returns TIMESTAMP in the same format as DATETIME - if s[4] == '-': return DateTime_or_None(s) - s = s + "0"*(14-len(s)) # padding - parts = map(int, filter(None, (s[:4],s[4:6],s[6:8], - s[8:10],s[10:12],s[12:14]))) - try: - return Timestamp(*parts) - except (SystemExit, KeyboardInterrupt): - raise - except: - return None diff --git a/modules/Pyro/EventService/Clients.py b/modules/Pyro/EventService/Clients.py deleted file mode 100644 index 72bc734c..00000000 --- a/modules/Pyro/EventService/Clients.py +++ /dev/null @@ -1,91 +0,0 @@ -############################################################################# -# -# Event Service client base classes -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import Pyro.core, Pyro.naming, Pyro.constants -import Pyro.EventService.Server -from Pyro.EventService.Event import Event -from Pyro.errors import * - -# SUBSCRIBER: subscribes to certain events. -class Subscriber(Pyro.core.CallbackObjBase): - def __init__(self, ident=None, esURI=None): - Pyro.core.CallbackObjBase.__init__(self) - Pyro.core.initServer() - Pyro.core.initClient() - daemon = Pyro.core.Daemon() - if esURI: - check=Pyro.core.PyroURI(esURI) - self.ES_uri=esURI - else: - locator = Pyro.naming.NameServerLocator(identification=ident) - self.NS = locator.getNS(host=Pyro.config.PYRO_NS_HOSTNAME) - daemon.useNameServer(self.NS) - self.ES_uri = self.NS.resolve(Pyro.constants.EVENTSERVER_NAME) - daemon.connect(self) # will also set self.daemon... - self.ES_ident=ident - self.abortListen=0 - self.daemon=daemon # make sure daemon doesn't get garbage collected now - - def getES(self): - # we get a fresh proxy to the ES because of threading issues. - # (proxies can not be reused across multiple threads) - eventservice=Pyro.core.getProxyForURI(self.ES_uri) - eventservice._setIdentification(self.ES_ident) - return eventservice - - def subscribe(self,subjects): - # Subscribe to one or more subjects. - # It is safe to call this multiple times. - self.getES().subscribe(subjects, self.getProxy()) - def subscribeMatch(self,subjectPatterns): - # Subscribe to one or more subjects (by pattern) - # It is safe to call this multiple times. - self.getES().subscribeMatch(subjectPatterns, self.getProxy()) - def unsubscribe(self, subjects): - # Unsubscribe the subscriber for the given subject(s). - self.getES().unsubscribe(subjects, self.getProxy()) - - def abort(self): - self.abortListen=1 - - def setThreading(self, threaded): - self.getDaemon().threaded=threaded - - def listen(self): - self.getDaemon().requestLoop(lambda s=self: not s.abortListen) - - def event(self, event): # callback, override this! - print event - -# PUBLISHER: publishes events. -class Publisher(object): - def __init__(self, ident=None, esURI=None): - Pyro.core.initClient() - if esURI: - check=Pyro.core.PyroURI(esURI) - self.ES_uri=esURI - else: - locator = Pyro.naming.NameServerLocator(identification=ident) - ns = locator.getNS(host=Pyro.config.PYRO_NS_HOSTNAME) - self.ES_uri = ns.resolve(Pyro.constants.EVENTSERVER_NAME) - ns._release() # be very sure to release the socket - self.ES_ident = ident - - def getES(self): - # we get a fresh proxy to the ES because of threading issues. - # (proxies can not be reused across multiple threads) - eventservice=Pyro.core.getProxyForURI(self.ES_uri) - eventservice._setIdentification(self.ES_ident) - return eventservice - - def publish(self, subjects, msg): - es=self.getES() - es.publish(subjects,msg) - es._release() # be very sure to release the socket - diff --git a/modules/Pyro/EventService/Event.py b/modules/Pyro/EventService/Event.py deleted file mode 100644 index d5e411d7..00000000 --- a/modules/Pyro/EventService/Event.py +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################# -# -# Event Service client base classes -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import time - -# EVENT - the thing that is published. Has a subject and contains a message. -class Event(object): - def __init__(self, subject, msg, creationTime=None): - self.msg=msg - self.subject=subject - self.time=creationTime or time.time() - def __str__(self): - return "" % (self.subject, time.ctime(self.time), str(self.msg)) diff --git a/modules/Pyro/EventService/Server.py b/modules/Pyro/EventService/Server.py deleted file mode 100644 index 8b23dfc2..00000000 --- a/modules/Pyro/EventService/Server.py +++ /dev/null @@ -1,301 +0,0 @@ -############################################################################# -# -# Event Service daemon and server classes -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import time, types, re, sys, traceback, os -import Pyro.core, Pyro.naming, Pyro.util, Pyro.constants -from Pyro.errors import * -from Pyro.EventService.Event import Event -import Queue -from threading import Thread - -Log=Pyro.util.Log - -# SUBSCRIBER - each subscriber has one of these worker threads -class Subscriber(Thread): - def __init__(self, remote): - Thread.__init__(self) - self.remote=remote - # set the callback method to ONEWAY mode: - self.remote._setOneway("event") - self.queue=Queue.Queue(Pyro.config.PYRO_ES_QUEUESIZE) - def run(self): - while 1: - event=self.queue.get() - if isinstance(event,Event): - try: - self.remote.event(event) - except ProtocolError,x: - break - else: - break # it was no Event, so exit - # this reads all pending items from the queue so that any - # tasks that are blocked on the queue can continue. - (queue, self.queue) = (self.queue, None) - try: - while 1: - queue.get(block=0) - except Queue.Empty: - pass - # release the remote connection - self.remote._release() - del self.remote - def send(self, event): - if self.queue: - self.queue.put(event, block=Pyro.config.PYRO_ES_BLOCKQUEUE) - def running(self): - return self.queue - -# The EVENTSERVICE is the actual Pyro server. -# -# BTW: Subscribers are remembered trough their proxy class. -# This class is capable of being a correct key in a dictionary. -class EventService(Pyro.core.ObjBase): - def __init__(self): - Pyro.core.ObjBase.__init__(self) - self.subscribers={} # subject -> { threadname-> subscriberthread } - self.subscribersMatch={} # subjectPattern -> { threadname->subscriberthread } - self.subscriptionWorkers={} # subscriber -> subscription thread object - def _mksequence(self, seq): - if not (type(seq) in (types.TupleType,types.ListType)): - return (seq,) - return seq - def getSubscriptionWorker(self, subscriber): - # If this subscriber doesn't have its own subscription thread, create one. - if subscriber not in self.subscriptionWorkers: - worker = Subscriber(subscriber) - worker.start() - self.subscriptionWorkers[subscriber]=worker - return worker - else: - return self.subscriptionWorkers[subscriber] - def subscribe(self, subjects, subscriber): - if not subjects: return - # Subscribe into a dictionary; this way; somebody can subscribe - # only once to this subject. Subjects are exact strings. - for subject in self._mksequence(subjects): - worker=self.getSubscriptionWorker(subscriber) - self.subscribers.setdefault(subject.lower(),{}) [worker.getName()]=worker - def subscribeMatch(self, subjects, subscriber): - if not subjects: return - # Subscribe into a dictionary; this way; somebody can subscribe - # only once to this subject. Subjects are regex patterns. - for subject in self._mksequence(subjects): - worker=self.getSubscriptionWorker(subscriber) - matcher = re.compile(subject,re.IGNORECASE) - self.subscribersMatch.setdefault(matcher,{}) [worker.getName()]=worker - def unsubscribe(self, subjects, subscriber): - if not subjects: return - for subject in self._mksequence(subjects): - try: - blaat=self.subscribers[subject.lower()] # check for subject - worker=self.subscriptionWorkers[subscriber] - del self.subscribers[subject.lower()] [worker.getName()] - self.killWorkerIfLastSubject(subscriber, worker) - except KeyError,x: - try: - m=re.compile(subject,re.IGNORECASE) - worker=self.subscriptionWorkers[subscriber] - del self.subscribersMatch[m] [worker.getName()] - self.killWorkerIfLastSubject(subscriber,worker) - except KeyError,x: - pass - - def publish(self, subjects, message): - if not subjects: return - # keep the creation time, this must be the same for all events. - creationTime=time.time() - # publish a message. Subjects must be exact strings - for subject in self._mksequence(subjects): - event = Event(subject, message, creationTime) - subjectLC=subject.lower() - try: - for (name,s) in self.subscribers[subjectLC].items(): - try: - if s.running(): - s.send(event) - else: - try: - del self.subscribers[subjectLC][name] - except KeyError: - pass - except Queue.Full: - pass - except KeyError: - pass - # process the subject patterns - for (m,subs) in self.subscribersMatch.items(): - if m.match(subject): - # send event to all subscribers - for (name,s) in subs.items(): - try: - if s.running(): - s.send(event) - else: - try: - del subs[name] - except KeyError: - pass - except Queue.Full: - pass - - def killWorkerIfLastSubject(self, subscriber, worker): - item=(worker.getName(),worker) - for v in self.subscribers.values(): - if item in v.items(): - return - for v in self.subscribersMatch.values(): - if item in v.items(): - return - worker.send("QUIT") - del self.subscriptionWorkers[subscriber] - - -class EventServiceStarter(object): - def __init__(self, identification=None): - Pyro.core.initServer() - self.running=1 - self.identification=identification - self.started = Pyro.util.getEventObject() - def start(self, *args, **kwargs): # see _start for allowed arguments - kwargs["startloop"]=1 - self._start(*args, **kwargs ) - def initialize(self, *args, **kwargs): # see _start for allowed arguments - kwargs["startloop"]=0 - self._start( *args, **kwargs ) - def getServerSockets(self): - return self.daemon.getServerSockets() - def waitUntilStarted(self,timeout=None): - self.started.wait(timeout) - return self.started.isSet() - def _start(self,hostname='',port=None,startloop=1,useNameServer=1,norange=0): - daemon = Pyro.core.Daemon(host=hostname,port=port,norange=norange) - if self.identification: - daemon.setAllowedIdentifications([self.identification]) - print 'Requiring connection authentication.' - - if useNameServer: - locator = Pyro.naming.NameServerLocator(identification=self.identification) - ns = locator.getNS() - - # check if ES already running - try: - ns.resolve(Pyro.constants.EVENTSERVER_NAME) - print 'The Event Server appears to be already running.' - print 'You cannot start multiple Event Servers.' - ans=raw_input('Start new Event Server anyway (y/n)? ') - if ans!='y': - return - ns.unregister(Pyro.constants.EVENTSERVER_NAME) - except NamingError: - pass - - daemon.useNameServer(ns) - - es = EventService() - - esURI=daemon.connect(es, Pyro.constants.EVENTSERVER_NAME) - print 'URI=',esURI - - message = daemon.validateHostnameAndIP() - if message: - print "\nWARNING:",message,"\n" - - print 'Event Server started.' - - self.started.set() # signal that we've started. - - if startloop: - Log.msg('ES daemon','This is the Pyro Event Server.') - - try: - if os.name!="java": - # I use a timeout here otherwise you can't break gracefully on Windows - daemon.setTimeout(20) - daemon.requestLoop(lambda s=self: s.running) - except KeyboardInterrupt: - Log.warn('ES daemon','shutdown on user break signal') - print 'Shutting down on user break signal.' - self.shutdown(es) - except: - try: - (exc_type, exc_value, exc_trb) = sys.exc_info() - out = ''.join(traceback.format_exception(exc_type, exc_value, exc_trb)[-5:]) - Log.error('ES daemon', 'Unexpected exception, type',exc_type, - '\n--- partial traceback of this exception follows:\n', - out,'\n--- end of traceback') - print '*** Exception occured!!! Partial traceback:' - print out - print '*** Resuming operations...' - finally: - del exc_type, exc_value, exc_trb # delete refs to allow proper GC - - Log.msg('ES daemon','Shut down gracefully.') - print 'Event Server gracefully stopped.' - else: - # no loop, store the required objects for getServerSockets() - self.daemon=daemon - self.es=es - if os.name!="java": - daemon.setTimeout(20) # XXX fixed timeout - - def mustContinueRunning(self): - return self.running - def handleRequests(self, timeout=None): - # this method must be called from a custom event loop - self.daemon.handleRequests(timeout=timeout) - def shutdown(self,es): - if es: - # internal shutdown call with specified ES object - daemon=es.getDaemon() - else: - # custom shutdown call w/o specified ES object, use stored instance - daemon=self.daemon - es=self.es - del self.es, self.daemon - try: - daemon.disconnect(es) # clean up nicely - except NamingError,x: - Log.warn('ES daemon','disconnect error during shutdown:',x) - except ConnectionClosedError,x: - Log.warn('ES daemon','lost connection with Name Server, cannot unregister') - self.running=0 - daemon.shutdown() - - -def start(argv): - Args = Pyro.util.ArgParser() - Args.parse(argv,'hNn:p:i:') - if Args.hasOpt('h'): - print 'Usage: pyro-es [-h] [-n hostname] [-p port] [-N] [-i identification]' - print ' where -p = ES server port (0 for auto)' - print ' -n = non-default hostname to bind on' - print ' -N = do not use the name server' - print ' -i = the required authentication ID for ES clients,' - print ' also used to connect to other Pyro services' - print ' -h = print this help' - raise SystemExit - hostname = Args.getOpt('n',None) - port = Args.getOpt('p',None) - useNameServer = not Args.hasOpt('N') - ident = Args.getOpt('i',None) - if port: - port=int(port) - norange=(port==0) - Args.printIgnored() - if Args.args: - print 'Ignored arguments:',' '.join(Args.args) - - print '*** Pyro Event Server ***' - starter=EventServiceStarter(identification=ident) - starter.start(hostname,port,useNameServer=useNameServer,norange=norange) - - -# allow easy starting of the ES by using python -m -if __name__=="__main__": - start(sys.argv[1:]) diff --git a/modules/Pyro/EventService/__init__.py b/modules/Pyro/EventService/__init__.py deleted file mode 100644 index 6f66f15a..00000000 --- a/modules/Pyro/EventService/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# just to make this a package. diff --git a/modules/Pyro/__init__.py b/modules/Pyro/__init__.py deleted file mode 100644 index f241e188..00000000 --- a/modules/Pyro/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -############################################################################# -# -# Pyro file to make Pyro a package, and to set up configuration. -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -# Note: to see what Pyro version this is, print Pyro.constants.VERSION -# -############################################################################# - - -# Initialize Pyro Configuration. -# -# This is put here because it could actually initialize config stuff needed -# even before the code calls core.initClient or core.initServer. -# -# Pyro.config is a class, which has a __getattr__ member, so all -# pyro code can use Pyro.config. to look up a value. -# This allows for tweaking the configuration lookups by writing -# a custom __getattr__ and/or __init__ for the class. -# However, currently the class initializer adds configuration items -# as regular class data members. - -import os -import Pyro.configuration - -config = Pyro.configuration.Config() -try: - confFile = os.environ['PYRO_CONFIG_FILE'] -except KeyError: - confFile = '' -if not confFile and os.path.isfile('Pyro.conf'): - confFile='Pyro.conf' -config.setup(confFile) diff --git a/modules/Pyro/configuration.py b/modules/Pyro/configuration.py deleted file mode 100644 index 0489a701..00000000 --- a/modules/Pyro/configuration.py +++ /dev/null @@ -1,238 +0,0 @@ -############################################################################# -# -# Sets up Pyro's configuration (Pyro.config). -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - - -# Initialize Pyro Configuration. - -import re, os, random, tempfile -import Pyro.errors -from Pyro.errors import PyroError -import Pyro.constants -import Pyro.util2 # not util because of cyclic dependency - -try: - from pickle import HIGHEST_PROTOCOL as PICKLE_HIGHEST_PROTOCOL -except ImportError: - PICKLE_HIGHEST_PROTOCOL = 1 - - -# ---------------------- DEFAULT CONFIGURATION VARIABLES ----------- - -# Special characters are '$CURDIR' (current directory, absolute) and -# $STORAGE which is replaced by the PYRO_STORAGE path. -_defaults= { - 'PYRO_STORAGE': '$CURDIR', # current dir (abs) - 'PYRO_HOST': '', - 'PYRO_PUBLISHHOST': None, - 'PYRO_PORT': 7766, - 'PYRO_PORT_RANGE': 100, - 'PYRO_NS_HOSTNAME': None, - 'PYRO_NS_PORT': 9090, # tcp - 'PYRO_NS_BC_ADDR': None, - 'PYRO_NS_BC_PORT': 9090, # udp - 'PYRO_NS2_HOSTNAME': None, - 'PYRO_NS2_PORT': 9091, # tcp - 'PYRO_NS2_BC_ADDR': None, - 'PYRO_NS2_BC_PORT': 9091, # udp - 'PYRO_NS_URIFILE': '$STORAGE/Pyro_NS_URI', # (abs) - 'PYRO_NS_DEFAULTGROUP': ':Default', - 'PYRO_BC_RETRIES': 1, - 'PYRO_BC_TIMEOUT': 0.75, - 'PYRO_PICKLE_FORMAT': PICKLE_HIGHEST_PROTOCOL, - 'PYRO_XML_PICKLE': None, - 'PYRO_GNOSIS_PARANOIA': 0, - 'PYRO_TRACELEVEL': 0, - 'PYRO_USER_TRACELEVEL': 0, - 'PYRO_LOGFILE': '$STORAGE/Pyro_log', # (abs) - 'PYRO_USER_LOGFILE': '$STORAGE/Pyro_userlog', # (abs) - 'PYRO_STDLOGGING': 0, - 'PYRO_STDLOGGING_CFGFILE': 'logging.cfg', - 'PYRO_MAXCONNECTIONS': 200, - 'PYRO_TCP_LISTEN_BACKLOG': 200, - 'PYRO_BROKEN_MSGWAITALL': 0, - 'PYRO_MULTITHREADED': 1, # assume 1 - 'PYRO_COMPRESSION': 0, - 'PYRO_MOBILE_CODE': 0, - 'PYRO_DNS_URI': 0, - 'PYRO_CHECKSUM': 0, - 'PYRO_SOCK_KEEPALIVE': 1, - 'PYRO_ES_QUEUESIZE': 1000, - 'PYRO_ES_BLOCKQUEUE': 1, - 'PYRO_DETAILED_TRACEBACK': 0, - 'PYRO_ONEWAY_THREADED': 1, - 'PYROSSL_CERTDIR': '$STORAGE/certs', # (abs) - 'PYROSSL_CA_CERT': 'ca.pem', - 'PYROSSL_CERT': 'host.pem', - 'PYROSSL_KEY': None, - 'PYROSSL_POSTCONNCHECK': 1 -} - -# ---------------------- END OF DEFAULT CONFIGURATION VARIABLES ----- - - -class Config(object): - - def __init__(self): - _defaults['PYRO_MULTITHREADED']=Pyro.util2.supports_multithreading() - self.__dict__[Pyro.constants.CFGITEM_PYRO_INITIALIZED] = 0 - - def __eq__(self, other): - return self.__dict__==other.__dict__ - - def setup(self, configFile): - reader = ConfigReader(_defaults) - try: - reader.parse(configFile) - except EnvironmentError,x: - raise PyroError("Error reading config file: "+configFile+"; "+str(x)); - self.__dict__.update(reader.items) - if configFile: - self.__dict__['PYRO_CONFIG_FILE'] = os.path.abspath(configFile) - else: - self.__dict__['PYRO_CONFIG_FILE'] = '' - - def finalizeConfig_Client(self): - # For the client, we're done for now! - # It's nice if the storage directory exists and is - # writable, but if it isn't, we can continue happily. - # If Pyro needs to write something (log?), it will - # fail at that point if it can't access the storage dir. - # This behavior is good enough for clients. - pass - - def finalizeConfig_Server(self, storageCheck): - if storageCheck: - # The server needs a storage dir. Because it's a server, - # this usually is no problem. So create & test it here. - # Create the storage directory if it doesn't exist yet - if not os.path.exists(self.PYRO_STORAGE): - os.mkdir(self.PYRO_STORAGE) - # see if we have permission there, in a thread-safe fashion. - if not os.path.isdir(self.PYRO_STORAGE): - raise IOError('PYRO_STORAGE is not a directory ['+self.PYRO_STORAGE+']') - - try: - if os.name=='java': - # jython doesn't have suitable TemporaryFile implementation (lacks dir param) - javatestfile=os.path.join(self.PYRO_STORAGE,'_pyro_'+str(random.random())+".tmp") - f=open(javatestfile,"w") - else: - # use tempfile to safely create a unique temporary file even on multi-cpu nodes - f=tempfile.TemporaryFile(dir=self.PYRO_STORAGE, suffix='.tmp', prefix='_pyro_') - except Exception,x: - print x - raise IOError('no write access to PYRO_STORAGE ['+self.PYRO_STORAGE+']') - else: - f.close() - if os.name=='java': - os.remove(javatestfile) - -# def __getattr__(self,name): -# # add smart code here to deal with other requested config items! - - - -class ConfigReader(object): - def __init__(self, defaults): - self.matcher=re.compile(r'^(\w+)\s*=\s*(\S*)') - self.items=defaults.copy() - - def _check(self, filename): - print "ConfigReader: checking file", filename - items=[] - for l in open(filename).readlines(): - l=l.rstrip() - if not l or l.startswith('#'): - continue # skip empty line or comment - match=self.matcher.match(l) - if match: - items.append(match.group(1)) - allitems=self.items.keys() - allitems.sort() - for item in allitems: - if item not in items: - print "MISSING item: ",item - try: - items.remove(item) - except ValueError: - pass - if items: - print "items NOT in DEFAULTS:", items - else: - print "ok!" - - - def parse(self, filename): - linenum=0 - if filename: - for l in open(filename).readlines(): - l=l.rstrip() - linenum=linenum+1 - if not l or l.startswith('#'): - continue # skip empty line or comment - match=self.matcher.match(l) - if match: - if match.group(1) in _defaults.keys(): - if match.group(2): - self.items[match.group(1)] = match.group(2) - else: - raise KeyError('Unknown config item in configfile (line %d): %s' % (linenum, match.group(1))) - else: - raise ValueError('Syntax error in config file, line '+str(linenum)) - - # Parse the environment variables (they override the config file) - self.items.update(self.processEnv(_defaults.keys())) - - # First, fix up PYRO_STORAGE because others depend on it. - self.items['PYRO_STORAGE'] = self.treatSpecial(self.items['PYRO_STORAGE']) - # Now fix up all other items: - for i in self.items.keys(): - newVal = self.treatSpecial(self.items[i]) - if i in ('PYRO_STORAGE', 'PYRO_LOGFILE', 'PYRO_USER_LOGFILE', 'PYRO_NS_URIFILE'): - newVal=os.path.abspath(newVal) - # fix the variable type if it's an integer or float - if type(_defaults[i]) == type(42): - newVal = int(newVal) - if type(_defaults[i]) == type(0.1): - newVal = float(newVal) - self.items[i]= newVal - - def processEnv(self, keys): - env={} - for key in keys: - try: env[key] = os.environ[key] - except KeyError: pass - return env - - def treatSpecial(self, value): - # treat special escape strings - if type(value)==type(""): - if value=='$CURDIR': - return os.curdir - elif value.startswith('$STORAGE/'): - return os.path.join(self.items['PYRO_STORAGE'], value[9:]) - return value - -# easy config diagnostic with python -m -if __name__=="__main__": - print "Pyro version:",Pyro.constants.VERSION - r=ConfigReader(_defaults) - if os.path.exists("Pyro.conf"): - r._check("Pyro.conf") - x=Config() - if os.path.exists("Pyro.conf"): - x.setup("Pyro.conf") - else: - x.setup(None) - x.finalizeConfig_Server(1) - items=vars(x).items() - items.sort() - print "Active configuration settings:" - for item,value in items: - print item+"="+str(value) diff --git a/modules/Pyro/constants.py b/modules/Pyro/constants.py deleted file mode 100644 index 27765726..00000000 --- a/modules/Pyro/constants.py +++ /dev/null @@ -1,52 +0,0 @@ -############################################################################# -# -# Pyro global constants -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - - -# General Pyro Version String #### -VERSION = '3.16' - -# Fixed (internal) GUIDs -INTERNAL_DAEMON_GUID='c0000000'+'01100000'+'10000000'+'10000001' - -# Pyro names for the standard Services -NAMESERVER_NAME = ":Pyro.NameServer" -EVENTSERVER_NAME = ":Pyro.EventService" - -# Pyro traceback attribute for remote exceptions -TRACEBACK_ATTRIBUTE = "remote_stacktrace" - - -#### Remote Invocation Flags (bit flags) #### - -RIF_Varargs = (1<<0) # for '*args' syntax -RIF_Keywords = (1<<1) # for '**keywords' syntax -RIF_Oneway = (1<<2) # for oneway (no result) messages - currently internal use only -RIF_VarargsAndKeywords = RIF_Varargs | RIF_Keywords - - -#### Reasons why a connection may be denied #### -DENIED_UNSPECIFIED=0 -DENIED_SERVERTOOBUSY=1 -DENIED_HOSTBLOCKED=2 -DENIED_SECURITY=3 - -deniedReasons={ - DENIED_UNSPECIFIED:'unspecified reason', - DENIED_SERVERTOOBUSY:'server too busy', - DENIED_HOSTBLOCKED:'host blocked', - DENIED_SECURITY:'security reasons' - } - -# special config items -CFGITEM_PYRO_INITIALIZED = "_PYRO_INITIALIZED" - -# NS roles -NSROLE_SINGLE=0 -NSROLE_PRIMARY=1 -NSROLE_SECONDARY=2 diff --git a/modules/Pyro/core.py b/modules/Pyro/core.py deleted file mode 100644 index aa45f56c..00000000 --- a/modules/Pyro/core.py +++ /dev/null @@ -1,868 +0,0 @@ -############################################################################# -# -# Pyro Core Library -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -from __future__ import with_statement -import sys, time, re, os, weakref -import imp, marshal, new, socket -from pickle import PicklingError -import Pyro.constants, Pyro.util, Pyro.protocol, Pyro.errors -from Pyro.errors import * -from types import UnboundMethodType, MethodType, BuiltinMethodType, TupleType, StringType, UnicodeType -if Pyro.util.supports_multithreading(): - import threading - -Log=Pyro.util.Log - - -def _checkInit(pyrotype="client"): - if not getattr(Pyro.config, Pyro.constants.CFGITEM_PYRO_INITIALIZED): - # If Pyro has not been initialized explicitly, do it automatically. - if pyrotype=="server": - initServer() - else: - initClient() - - -############################################################################# -# -# ObjBase - Server-side object implementation base class -# or master class with the actual object as delegate -# -# SynchronizedObjBase - Just the same, but with synchronized method -# calls (thread-safe). -# -############################################################################# - -class ObjBase(object): - def __init__(self): - self.objectGUID=Pyro.util.getGUID() - self.delegate=None - self.lastUsed=time.time() # for later reaping unused objects - if Pyro.config.PYRO_MOBILE_CODE: - self.codeValidator=lambda n,m,a: 1 # always accept - def GUID(self): - return self.objectGUID - def setGUID(self, guid): # used with persistent name server - self.objectGUID = guid - def delegateTo(self,delegate): - self.delegate=delegate - def setPyroDaemon(self, daemon): - # This will usually introduce a cyclic reference between the - # object and the daemon. Use a weak ref if available. - # NOTE: if you correctly clean up the object (that is, disconnect it from the daemon) - # the cyclic reference is cleared correctly, and no problem occurs. - # NOTE: you have to make sure your original daemon object doesn't get garbage collected - # if you still want to use the objects! You have to keep a ref. to the daemon somewhere. - if daemon: - self.daemon=weakref.proxy(daemon) - else: - self.daemon=None - def setCodeValidator(self, v): - if not callable(v): - raise TypeError("codevalidator must be a callable object") - self.codeValidator=v - def getDaemon(self): - return self.daemon - def getLocalStorage(self): - return self.daemon.getLocalStorage() - def _gotReaped(self): - # Called when daemon reaps this object due to unaccessed time - # Override this method if needed; to act on this event - pass - def getProxy(self): - return self.daemon.getProxyForObj(self) - def getAttrProxy(self): - return self.daemon.getAttrProxyForObj(self) - def Pyro_dyncall(self, method, flags, args): - # update the timestamp - self.lastUsed=time.time() - # find the method in this object, and call it with the supplied args. - keywords={} - if flags & Pyro.constants.RIF_Keywords: - # reconstruct the varargs from a tuple like - # (a,b,(va1,va2,va3...),{kw1:?,...}) - keywords=args[-1] - args=args[:-1] - if flags & Pyro.constants.RIF_Varargs: - # reconstruct the varargs from a tuple like (a,b,(va1,va2,va3...)) - args=args[:-1]+args[-1] - if keywords and type(keywords.iterkeys().next()) is unicode and sys.platform!="cli": - # IronPython sends all strings as unicode, but apply() doesn't grok unicode keywords. - # So we need to rebuild the keywords dict with str keys... - keywords = dict([(str(k),v) for k,v in keywords.iteritems()]) - # If the method is part of ObjBase, never call the delegate object because - # that object doesn't implement that method. If you don't check this, - # remote attributes won't work with delegates for instance, because the - # delegate object doesn't implement _r_xa. (remote_xxxattr) - if method in dir(ObjBase): - return getattr(self,method) (*args,**keywords) - else: - # try..except to deal with obsoleted string exceptions (raise "blahblah") - try : - return getattr(self.delegate or self,method) (*args,**keywords) - except : - exc_info = sys.exc_info() - try: - if type(exc_info[0]) == StringType : - if exc_info[1] == None : - raise Exception, exc_info[0], exc_info[2] - else : - raise Exception, "%s: %s" % (exc_info[0], exc_info[1]), exc_info[2] - else : - raise - finally: - del exc_info # delete frame to allow proper GC - - # remote getattr/setattr support: - def _r_ha(self, attr): - try: - attr = getattr(self.delegate or self,attr) - if type(attr) in (UnboundMethodType, MethodType, BuiltinMethodType): - return 1 # method - except: - pass - return 2 # attribute - def _r_ga(self, attr): - return getattr(self.delegate or self, attr) - def _r_sa(self, attr, value): - setattr(self.delegate or self, attr, value) - # remote code downloading support (server downloads from client): - def remote_supply_code(self, name, module, sourceaddr): - # XXX this is nasty code, and also duplicated in protocol.py _retrieveCode() - if Pyro.config.PYRO_MOBILE_CODE and self.codeValidator(name,module,sourceaddr): - try: - imp.acquire_lock() # threadsafe imports - if name in sys.modules and getattr(sys.modules[name],'_PYRO_bytecode',None): - # already have this module, don't import again - # we checked for the _PYRO_bytecode attribute because that is only - # present when all loading code below completed successfully - return - Log.msg('ObjBase','loading supplied code: ',name,'from',str(sourceaddr)) - if module[0:4]!=imp.get_magic(): - # compile source code - code=compile(module,'','exec') - else: - # read bytecode from the client - code=marshal.loads(module[8:]) - - # make the module hierarchy and add all names to sys.modules - name=name.split('.') - path='' - mod=new.module("pyro-agent-context") - for m in name: - path+='.'+m - # use already loaded modules instead of overwriting them - real_path = path[1:] - if sys.modules.has_key(real_path): - mod = sys.modules[real_path] - else: - setattr(mod,m,new.module(path[1:])) - mod=getattr(mod,m) - sys.modules[path[1:]]=mod - # execute the module code in the right module. - exec code in mod.__dict__ - # store the bytecode for possible later reference if we need to pass it on - mod.__dict__['_PYRO_bytecode'] = module - finally: - imp.release_lock() - else: - Log.warn('ObjBase','attempt to supply code denied: ',name,'from',str(sourceaddr)) - raise PyroError('attempt to supply code denied') - - # remote code retrieve support (client retrieves from server): - def remote_retrieve_code(self, name): - # XXX codeValidator: can we somehow get the client's address it is sent to? - # XXX this code is ugly. And duplicated in protocol.py remoteInvocation. - if Pyro.config.PYRO_MOBILE_CODE and self.codeValidator(name,None,None): - Log.msg("ObjBase","supplying code: ",name) - try: - importmodule=new.module("pyro-server-import") - try: - exec "import " + name in importmodule.__dict__ - except ImportError: - Log.error("ObjBase","Client wanted a non-existing module:", name) - raise PyroError("Client wanted a non-existing module", name) - m=eval("importmodule."+name) - # try to load the module's compiled source, or the real .py source if that fails. - # note that the source code (.py) is opened with universal newline mode - (filebase,ext)=os.path.splitext(m.__file__) - if ext.startswith(".PY"): - exts = ( (".PYO","rb"), (".PYC","rb"), (".PY","rU") ) # uppercase - else: - exts = ( (".pyo","rb"), (".pyc","rb"), (".py","rU") ) # lowercase - for ext,mode in exts: - try: - m=open(filebase+ext, mode).read() - return m # supply the module to the client! - except: - pass - Log.error("ObjBase","cannot read module source code for module:", name) - raise PyroError("cannot read module source code") - finally: - del importmodule - else: - Log.error("ObjBase","attempt to retrieve code denied:", name) - raise PyroError("attempt to retrieve code denied") - - -class SynchronizedObjBase(ObjBase): - def __init__(self): - ObjBase.__init__(self) - self.synlock=Pyro.util.getLockObject() - def Pyro_dyncall(self, method, flags, args): - with self.synlock: - return ObjBase.Pyro_dyncall(self, method,flags,args) - - -# Use this class instead if you're using callback objects and you -# want to see local exceptions. (otherwise they go back to the calling server...) -class CallbackObjBase(ObjBase): - def __init__(self): - ObjBase.__init__(self) - def Pyro_dyncall(self, method, flags, args): - try: - return ObjBase.Pyro_dyncall(self,method,flags,args) - except Exception,x: - # catch all errors - Log.warn('CallbackObjBase','Exception in callback object: ',x) - raise PyroExceptionCapsule(x,str(x)) - - -############################################################################# -# -# PyroURI - Pyro Universal Resource Identifier -# -# This class represents a Pyro URI (which consists of four parts, -# a protocol identifier, an IP address, a portnumber, and an object ID. -# -# The URI can be converted to a string representation (str converter). -# The URI can also be read back from such a string (reinitFromString). -# The URI can be initialised from its parts (init). -# The URI can be initialised from a string directly, if the init -# code detects a ':' and '/' in the host argument (which is then -# assumed to be a string URI, not a host name/ IP address). -# -############################################################################# - -class PyroURI(object): - def __init__(self,host,objectID=0,port=0,prtcol='PYRO'): - # if the 'host' arg is a PyroURI, copy contents - if isinstance(host, PyroURI): - self.init(host.address, host.objectID, host.port, host.protocol) - else: - # If the 'host' arg contains '://', assume it's an URI string. - if host.find('://')>0: - self.reinitFromString(host) - else: - if not objectID: - raise URIError('invalid URI format') - self.init(host, objectID, port, prtcol) - def __str__(self): - return self.protocol+'://'+self.address+':'+str(self.port)+'/'+self.objectID - def __repr__(self): - return '' - def __hash__(self): - # XXX this is handy but not safe. If the URI changes, the object will be in the wrong hash bucket. - return hash(str(self)) - def __cmp__(self, o): - return cmp(str(self), str(o)) - def clone(self): - return PyroURI(self) - def init(self,host,objectID,port=0,prtcol='PYRO'): - if '/' in host: - raise URIError('malformed hostname') - if Pyro.config.PYRO_DNS_URI: - self.address = host - else: - self.address=Pyro.protocol.getIPAddress(host) - if not self.address: - raise URIError('unknown host') - if port: - if type(port)==type(1): - self.port=port - else: - raise TypeError("port must be integer") - else: - self.port=Pyro.config.PYRO_PORT - self.protocol=prtcol - self.objectID=objectID - def reinitFromString(self,arg): - if arg.startswith('PYROLOC') or arg.startswith('PYRONAME'): - uri=processStringURI(arg) - self.init(uri.address,uri.objectID,uri.port,uri.protocol) - return - x=re.match(r'(?P[^\s:/]+)://(?P[^\s:]+):?(?P\d+)?/(?P\S*)',arg) - if x: - port=None - if x.group('port'): - port=int(x.group('port')) - self.init(x.group('hostname'), x.group('id'), port, x.group('protocol')) - return - Log.error('PyroURI','invalid URI format passed: '+arg) - raise URIError('invalid URI format') - def getProxy(self): - return DynamicProxy(self) - def getAttrProxy(self): - return DynamicProxyWithAttrs(self) - - -# -# This method takes a string representation of a Pyro URI -# and parses it. If it's a meta-protocol URI such as -# PYRONAME://.... it will do what is needed to make -# a regular PYRO:// URI out of it (resolve names etc). -# -def processStringURI(URI): - # PYRONAME(SSL)://[hostname[:port]/]objectname - x=re.match(r'(?PPYRONAME|PYRONAMESSL)://(((?P[^\s:]+):(?P\d+)/)|((?P[^\s:]+)/))?(?P\S*)',URI) - if x: - protocol=x.group('protocol') - if protocol=="PYRONAMESSL": - raise ProtocolError("NOT SUPPORTED YET: "+protocol) # XXX obviously, this should be implemented - hostname=x.group('hostname') or x.group('onlyhostname') - port=x.group('port') - name=x.group('name') - import Pyro.naming - loc=Pyro.naming.NameServerLocator() - if port: - port=int(port) - NS=loc.getNS(host=hostname,port=port) - return NS.resolve(name) - # PYROLOC(SSL)://hostname[:port]/objectname - x=re.match(r'(?PPYROLOC|PYROLOCSSL)://(?P[^\s:]+):?(?P\d+)?/(?P\S*)',URI) - if x: - protocol=x.group('protocol') - hostname=x.group('hostname') - port=x.group('port') - if port: - port=int(port) - else: - port=0 - name=x.group('name') - return PyroURI(hostname,name,port,protocol) - if URI.startswith('PYROLOC') or URI.startswith('PYRONAME'): - # hmm should have matched above. Likely invalid. - raise URIError('invalid URI format') - # It's not a meta-protocol such as PYROLOC or PYRONAME, - # let the normal Pyro URI deal with it. - # (it can deal with regular PYRO: and PYROSSL: protocols) - return PyroURI(URI) - - -############################################################################# -# -# DynamicProxy - dynamic Pyro proxy -# -# Can be used by clients to invoke objects for which they have no -# precompiled proxy. -# -############################################################################# - -def getProxyForURI(URI): - return DynamicProxy(URI) -def getAttrProxyForURI(URI): - return DynamicProxyWithAttrs(URI) - -class _RemoteMethod(object): - # method call abstraction, adapted from Python's xmlrpclib - # it would be rather easy to add nested method calls, but - # that is not compatible with the way that Pyro's method - # calls are defined to work ( no nested calls ) - def __init__(self, send, name): - self.__send = send - self.__name = name - def __call__(self, *args, **kwargs): - return self.__send(self.__name, args, kwargs) - -class DynamicProxy(object): - def __init__(self, URI): - _checkInit() # init required - if type(URI) in (StringType,UnicodeType): - URI=processStringURI(URI) - self.URI = URI - self.objectID = URI.objectID - # Delay adapter binding to enable transporting of proxies. - # We just create an adapter, and don't connect it... - self.adapter = Pyro.protocol.getProtocolAdapter(self.URI.protocol) - # ---- don't forget to register local vars with DynamicProxyWithAttrs, see below - def __del__(self): - try: - self.adapter.release(nolog=1) - except (AttributeError, RuntimeError): - pass - def _setIdentification(self, ident): - self.adapter.setIdentification(ident) - def _setNewConnectionValidator(self, validator): - self.adapter.setNewConnectionValidator(validator) - def _setOneway(self, methods): - if type(methods) not in (type([]), type((0,))): - methods=(methods,) - self.adapter.setOneway(methods) - def _setTimeout(self,timeout): - self.adapter.setTimeout(timeout) - def _transferThread(self, newOwnerThread=None): - pass # dummy function to retain API compatibility with Pyro 3.7 - def _release(self): - if self.adapter: - self.adapter.release() - def _local(self): - return self.URI._local() - def _islocal(self): - return self.URI._islocal() - def __copy__(self): # create copy of current proxy object - proxyCopy = DynamicProxy(self.URI) - proxyCopy.adapter.setIdentification(self.adapter.getIdentification(), munge=False) # copy identification info - proxyCopy._setTimeout(self.adapter.timeout) - proxyCopy._setOneway(self.adapter.onewayMethods) - proxyCopy._setNewConnectionValidator(self.adapter.getNewConnectionValidator()) - return proxyCopy - def __deepcopy__(self, arg): - raise PyroError("cannot deepcopy a proxy") - def __getattr__(self, name): - if name in ("__getnewargs__","__getinitargs__"): # allows it to be safely pickled - raise AttributeError() - return _RemoteMethod(self._invokePYRO, name) - def __repr__(self): - return "<"+self.__class__.__name__+" for "+str(self.URI)+">" - def __str__(self): - return repr(self) - def __hash__(self): - # makes it possible to use this class as a key in a dict - return hash(self.objectID) - def __eq__(self,other): - # makes it possible to compare two proxies using objectID - return hasattr(other,"objectID") and self.objectID==other.objectID - def __ne__(self,other): - # makes it possible to compare two proxies using objectID - return not hasattr(other,"objectID") or self.objectID!=other.objectID - def __nonzero__(self): - return 1 - def __coerce__(self,other): - # makes it possible to compare two proxies using objectID (cmp) - if hasattr(other,"objectID"): - return (self.objectID, other.objectID) - return None - - def _invokePYRO(self, name, vargs, kargs): - if not self.adapter.connected(): - # rebind here, don't do it from inside the remoteInvocation because deadlock will occur - self.adapter.bindToURI(self.URI) - return self.adapter.remoteInvocation(name, Pyro.constants.RIF_VarargsAndKeywords, vargs, kargs) - - # Pickling support, otherwise pickle uses __getattr__: - def __getstate__(self): - # for pickling, return a non-connected copy of ourselves: - cpy = self.__copy__() - cpy._release() - return cpy.__dict__ - def __setstate__(self, args): - # for pickling, to restore the pickled state - self.__dict__.update(args) - - -class DynamicProxyWithAttrs(DynamicProxy): - _local_attrs = ("_local_attrs","URI", "objectID", "adapter", "_attr_cache") - def __init__(self, URI): - self._attr_cache = {} - DynamicProxy.__init__(self, URI) - def _r_ga(self, attr, value=0): - if value: - return _RemoteMethod(self._invokePYRO, "_r_ga") (attr) # getattr - else: - return _RemoteMethod(self._invokePYRO, "_r_ha") (attr) # hasattr - def findattr(self, attr): - if attr in self._attr_cache.keys(): - return self._attr_cache[attr] - # look it up and cache the value - self._attr_cache[attr] = self._r_ga(attr) - return self._attr_cache[attr] - def __copy__(self): # create copy of current proxy object - return DynamicProxyWithAttrs(self.URI) - def __setattr__(self, attr, value): - if attr in self._local_attrs: - self.__dict__[attr]=value - else: - result = self.findattr(attr) - if result==2: # attribute - return _RemoteMethod(self._invokePYRO, "_r_sa") (attr,value) - else: - raise AttributeError('not an attribute') - def __getattr__(self, attr): - # allows it to be safely pickled - if attr not in ("__getnewargs__","__getinitargs__", "__hash__","__eq__","__ne__") and attr not in self._local_attrs: - result=self.findattr(attr) - if result==1: # method - return _RemoteMethod(self._invokePYRO, attr) - elif result: - return self._r_ga(attr, 1) - raise AttributeError - - -############################################################################# -# -# Daemon - server-side Pyro daemon -# -# Accepts and dispatches incoming Pyro method calls. -# -############################################################################# - -# The pyro object that represents the daemon. -# The daemon is not directly remotely accessible, for security reasons. -class DaemonServant(ObjBase): - def __init__(self, daemon): - ObjBase.__init__(self) - self.daemon=weakref.proxy(daemon) - def getRegistered(self): - return self.daemon.getRegistered() - def ResolvePYROLOC(self, name): - return self.daemon.ResolvePYROLOC(name) - -# The daemon itself: -class Daemon(Pyro.protocol.TCPServer, ObjBase): - def __init__(self,prtcol='PYRO',host=None,port=0,norange=0,publishhost=None): - ObjBase.__init__(self) - self.NameServer = None - self.connections=[] - _checkInit("server") # init required - self.setGUID(Pyro.constants.INTERNAL_DAEMON_GUID) - self.implementations={Pyro.constants.INTERNAL_DAEMON_GUID:(DaemonServant(self),'__PYRO_Internal_Daemon')} - self.persistentConnectedObjs=[] # guids - self.transientsCleanupAge=0 - self.transientsMutex=Pyro.util.getLockObject() - self.nscallMutex=Pyro.util.getLockObject() - if host is None: - host=Pyro.config.PYRO_HOST - if publishhost is None: - publishhost=Pyro.config.PYRO_PUBLISHHOST - - # Determine range scanning or random port allocation - if norange: - # Fixed or random port allocation - # If port is zero, OS will randomly assign, otherwise, - # attempt to use the provided port value - self.port = port - portrange = 1 - else: - # Scanning port allocation - if port: - self.port = port - else: - self.port = Pyro.config.PYRO_PORT - portrange=Pyro.config.PYRO_PORT_RANGE - - if not publishhost: - publishhost=host - errormsg='' - for i in range(portrange): - try: - Pyro.protocol.TCPServer.__init__(self, self.port, host, Pyro.config.PYRO_MULTITHREADED,prtcol) - if not self.port: - # If we bound to an OS provided port, report it - self.port = self.sock.getsockname()[1] - self.hostname = publishhost or Pyro.protocol.getHostname() - self.protocol = prtcol - self.adapter = Pyro.protocol.getProtocolAdapter(prtcol) - self.validateHostnameAndIP() # ignore any result message... it's in the log already. - return - except ProtocolError,msg: - errormsg=msg - self.port+=1 - Log.error('Daemon','Couldn\'t start Pyro daemon: ' +str(errormsg)) - raise DaemonError('Couldn\'t start Pyro daemon: ' +str(errormsg)) - - # to be called to stop all connections and shut down. - def shutdown(self, disconnect=False): - Pyro.protocol.TCPServer.shutdown(self) - if disconnect: - self.__disconnectObjects() - def __disconnectObjects(self): - # server shutting down, unregister all known objects in the NS - if self.NameServer and Pyro and Pyro.constants: - with self.nscallMutex: - if Pyro.constants.INTERNAL_DAEMON_GUID in self.implementations: - del self.implementations[Pyro.constants.INTERNAL_DAEMON_GUID] - if self.implementations: - Log.warn('Daemon','Shutting down but there are still',len(self.implementations),'objects connected - disconnecting them') - for guid in self.implementations.keys(): - if guid not in self.persistentConnectedObjs: - (obj,name)=self.implementations[guid] - if name: - try: - self.NameServer.unregister(name) - except Exception,x: - Log.warn('Daemon','Error while unregistering object during shutdown:',x) - self.implementations={} - - def __del__(self): - self.__disconnectObjects() # unregister objects - try: - del self.adapter - Pyro.protocol.TCPServer.__del__(self) - except (AttributeError, RuntimeError): - pass - - def __str__(self): - return '' - def __getstate__(self): - raise PicklingError('no access to the daemon') - - def validateHostnameAndIP(self): - # Checks if hostname is sensible. Returns None if it is, otherwise a message - # telling what's wrong if it isn't too serious. If things are really bad, - # expect an exception to be raised. Things are logged too. - if not self.hostname: - Log.error("Daemon","no hostname known") - raise socket.error("no hostname known for daemon") - if self.hostname!="localhost": - ip = Pyro.protocol.getIPAddress(self.hostname) - if ip is None: - Log.error("Daemon","no IP address known") - raise socket.error("no IP address known for daemon") - if not ip.startswith("127.0."): - return None # this is good! - # 127.0.x.x or 'localhost' is a warning situation! - msg="daemon bound on hostname that resolves to loopback address 127.0.x.x" - Log.warn("Daemon",msg) - Log.warn("Daemon","hostname="+self.hostname) - return msg - - def useNameServer(self,NS): - self.NameServer=NS - def getNameServer(self): - return self.NameServer - def setTimeout(self, timeout): - self.adapter.setTimeout(timeout) - def setAllowedIdentifications(self, ids): - self.getNewConnectionValidator().setAllowedIdentifications(ids) - def setTransientsCleanupAge(self, secs): - self.transientsCleanupAge=secs - if self.threaded: - Log.msg('Daemon','creating Grim Reaper thread for transients, timeout=',secs) - reaper=threading.Thread(target=self._grimReaper) - reaper.setDaemon(1) # thread must exit at program termination. - reaper.start() - def _grimReaper(self): - # this runs in a thread. - while self.transientsCleanupAge>0: - time.sleep(self.transientsCleanupAge/5) - self.reapUnusedTransients() - - def getProxyForObj(self, obj): - return DynamicProxy( PyroURI(self.hostname, - obj.GUID(), prtcol=self.protocol, port=self.port) ) - def getAttrProxyForObj(self, obj): - return DynamicProxyWithAttrs( PyroURI(self.hostname, - obj.GUID(), prtcol=self.protocol, port=self.port) ) - - def connectPersistent(self, obj, name=None): - # when a persistent entry is found in the NS, that URI is - # used instead of the supplied one, if the address matches. - if name and self.NameServer: - with self.nscallMutex: - try: - newURI = PyroURI(self.hostname, obj.GUID(), prtcol=self.protocol, port=self.port) - URI=self.NameServer.resolve(name) - if (URI.protocol,URI.address,URI.port)==(newURI.protocol,newURI.address,newURI.port): - # reuse the previous object ID - obj.setGUID(URI.objectID) - # enter the (object,name) in the known impl. dictionary - self.implementations[obj.GUID()]=(obj,name) - self.persistentConnectedObjs.append(obj.GUID()) - obj.setPyroDaemon(self) - return URI - else: - # name exists, but address etc. is wrong. Remove it. - # then continue so it wil be re-registered. - try: self.NameServer.unregister(name) - except NamingError: pass - except NamingError: - pass - # Register normally. - self.persistentConnectedObjs.append(obj.GUID()) - return self.connect(obj, name) - - def connect(self, obj, name=None): - URI = PyroURI(self.hostname, obj.GUID(), prtcol=self.protocol, port=self.port) - # if not transient, register the object with the NS - if name: - with self.nscallMutex: - if self.NameServer: - self.NameServer.register(name, URI) - else: - Log.warn('Daemon','connecting object without name server specified:',name) - # enter the (object,name) in the known implementations dictionary - self.implementations[obj.GUID()]=(obj,name) - obj.setPyroDaemon(self) - return URI - - def disconnect(self,obj): # obj can be either the object that was registered, or its uid - try: - if isinstance(obj,Pyro.core.ObjBase): - obj_uid=obj.GUID() - else: - obj_uid=str(obj) - if obj_uid==Pyro.constants.INTERNAL_DAEMON_GUID: - return # never allow to remove ourselves from the registry - if self.NameServer and self.implementations[obj_uid][1]: - with self.nscallMutex: - # only unregister with NS if it had a name (was not transient) - self.NameServer.unregister(self.implementations[obj_uid][1]) - del self.implementations[obj_uid] - if obj_uid in self.persistentConnectedObjs: - self.persistentConnectedObjs.remove(obj_uid) - # XXX Clean up connections/threads to this object? - # Can't be done because thread/socket is not associated with single object - finally: - if isinstance(obj,Pyro.core.ObjBase): - obj.setPyroDaemon(None) - - def getRegistered(self): - r={} - for guid in self.implementations.keys(): - r[guid]=self.implementations[guid][1] # keep only the names - return r - - def handleInvocation(self, conn): # overridden from TCPServer - # called in both single- and multithreaded mode - self.getLocalStorage().caller=conn - self.getAdapter().handleInvocation(self, conn) - self.reapUnusedTransients() - - def reapUnusedTransients(self): - if not self.transientsCleanupAge: return - now=time.time() - with self.transientsMutex: - for (obj,name) in self.implementations.values()[:]: # use copy of list - if not name: - # object is transient, reap it if timeout requires so. - if (now-obj.lastUsed)>self.transientsCleanupAge: - self.disconnect(obj) - obj._gotReaped() - - def handleError(self,conn,onewaycall=False): # overridden from TCPServer - try: - (exc_type, exc_value, exc_trb) = sys.exc_info() - if exc_type==ProtocolError: - # Problem with the communication protocol, shut down the connection - # XXX is shutting down what we want??? - Log.error('Daemon','protocol error occured:',exc_value) - Log.error('Daemon','Due to network error: shutting down connection with',conn) - self.removeConnection(conn) - else: - exclist = Pyro.util.formatTraceback(exc_type, exc_value, exc_trb) - out =''.join(exclist) - Log.warn('Daemon', 'Exception during processing of request from', - conn,' type',exc_type, - '\n--- traceback of this exception follows:\n', - out,'\n--- end of traceback') - if exc_type==PyroExceptionCapsule: - sys.stdout.flush() - # This is a capsuled exception, used with callback objects. - # That means we are actually the daemon on the client. - # Return the error to the other side and raise exception locally once more. - # (with a normal exception, it is not raised locally again!) - # only send the exception object if it's not a oneway call. - if not onewaycall: - self.adapter.returnException(conn,exc_value.excObj,0,exclist) # don't shutdown - exc_value.raiseEx() - else: - # normal exception, only return exception object if it's not a oneway call - if not onewaycall: - self.adapter.returnException(conn,exc_value,0,exclist) # don't shutdown connection - - finally: - # clean up circular references to traceback info to allow proper GC - del exc_type, exc_value, exc_trb - - def getAdapter(self): - # overridden from TCPServer - return self.adapter - - def getLocalObject(self, guid): - # return a local object registered with the given guid - return self.implementations[guid][0] - def getLocalObjectForProxy(self, proxy): - # return a local object registered with the guid to which the given proxy points - return self.implementations[proxy.objectID][0] - - def ResolvePYROLOC(self, name): - # this gets called from the protocol adapter when - # it wants the daemon to resolve a local object name (PYROLOC: protocol) - Log.msg('Daemon','resolving PYROLOC name: ',name) - for o in self.implementations.keys(): - if self.implementations[o][1]==name: - return o - raise NamingError('no object found by this name',name) - - -############################################################################# -# -# Client/Server Init code -# -############################################################################# - -# Has init been performed already? -_init_server_done=0 -_init_client_done=0 -_init_generic_done=0 - -def _initGeneric_pre(): - global _init_generic_done - if _init_generic_done: - return - if Pyro.config.PYRO_TRACELEVEL == 0: return - try: - out='\n'+'-'*60+' NEW SESSION\n'+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+ \ - ' Pyro Initializing, version '+Pyro.constants.VERSION+'\n' - Log.raw(out) - except IOError,e: - sys.stderr.write('PYRO: Can\'t write the tracefile '+Pyro.config.PYRO_LOGFILE+'\n'+str(e)) - -def _initGeneric_post(): - global _init_generic_done - setattr(Pyro.config, Pyro.constants.CFGITEM_PYRO_INITIALIZED,1) - if Pyro.config.PYRO_TRACELEVEL == 0: return - try: - if not _init_generic_done: - out='Configuration settings are as follows:\n' - for item in dir(Pyro.config): - if item[0:4] =='PYRO': - out+=item+' = '+str(Pyro.config.__dict__[item])+'\n' - Log.raw(out) - Log.raw('Init done.\n'+'-'*70+'\n') - except IOError: - pass - _init_generic_done=1 - - -def initClient(banner=0): - global _init_client_done - if _init_client_done: return - _initGeneric_pre() - if Pyro.config.PYRO_TRACELEVEL >0: Log.raw('This is initClient.\n') - Pyro.config.finalizeConfig_Client() - _initGeneric_post() - if banner: - print 'Pyro Client Initialized. Using Pyro V'+Pyro.constants.VERSION - _init_client_done=1 - -def initServer(banner=0, storageCheck=1): - global _init_server_done - if _init_server_done: return - _initGeneric_pre() - if Pyro.config.PYRO_TRACELEVEL >0: Log.raw('This is initServer.\n') - Pyro.config.finalizeConfig_Server(storageCheck=storageCheck) - _initGeneric_post() - if banner: - print 'Pyro Server Initialized. Using Pyro V'+Pyro.constants.VERSION - _init_server_done=1 - - -if __name__=="__main__": - print "Pyro version:",Pyro.constants.VERSION diff --git a/modules/Pyro/errors.py b/modules/Pyro/errors.py deleted file mode 100644 index 323668d5..00000000 --- a/modules/Pyro/errors.py +++ /dev/null @@ -1,82 +0,0 @@ -############################################################################# -# -# Pyro Exception Types -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -############################################################################# -# PyroError is the Pyro exception type which is used for problems WITHIN Pyro. -# User code should NOT use it!! -# -# NOTE: Any exception occuring in the user code on the server will be catched -# and transported to the client, where it is raised just as if it occured -# locally. The occurrence is logged in the server side Pyro log. -# Pyro will use the [Remote]PyroError exceptions and their subtypes to -# indicate that an internal problem occured. -############################################################################# - -class PyroError(Exception): pass # internal - -class URIError(PyroError): pass # URI probs -class DaemonError(PyroError): pass # daemon probs -class ProtocolError(PyroError): pass # protocol adapter -class ConnectionClosedError(ProtocolError): pass # connection in adapter is closed -class ConnectionDeniedError(ProtocolError): pass # server refused connection -class TimeoutError(ConnectionClosedError): pass # communication timeout -class NamingError(PyroError): pass # name server -class NoModuleError(PyroError): pass # no module found for incoming obj - -# do NOT use the following yourself: -class _InternalNoModuleError(PyroError): - def __init__(self, modulename=None, fromlist=None, *args): - # note: called without args on Python 2.5+, args will be set by __setstate__ - self.modulename=modulename - self.fromlist=fromlist - PyroError.__init__(* (self,)+args) - def __getstate__(self): - return { "modulename": self.modulename, "fromlist": self.fromlist } - def __setstate__(self, state): - self.modulename=state["modulename"] - self.fromlist=state["fromlist"] - - -############################################################################# -# -# PyroExceptionCapsule - Exception encapsulation. -# -# This class represents a Pyro exception which can be transported -# across the network, and raised on the other side (by invoking raiseEx). -# NOTE: the 'real' exception class must be 'known' on the other side! -# NOTE2: this class is adapted from exceptions.Exception. -# NOTE3: PyroError IS USED FOR ACTUAL PYRO ERRORS. PyroExceptionCapsule -# IS ONLY TO BE USED TO TRANSPORT AN EXCEPTION ACROSS THE NETWORK. -# NOTE4: It sets a special attribute on the exception that is raised -# (constants.TRACEBACK_ATTRIBUTE), this is the *remote* traceback -# NOTE5: ---> this class is intentionally not subclassed from Exception, -# and also not from object. -# Pyro's exception handling depends on this! -# -############################################################################# - -import Pyro.constants - -class PyroExceptionCapsule: # don't make this a new style class - def __init__(self,excObj,args=None): - self.excObj = excObj - self.args=args # if specified, this is the remote traceback info - def raiseEx(self): - setattr(self.excObj,Pyro.constants.TRACEBACK_ATTRIBUTE,self.args) - raise self.excObj - def __str__(self): - s=self.excObj.__class__.__name__ - if not self.args: - return s - elif len(self.args) == 1: - return s+': '+str(self.args[0]) - else: - return s+': '+str(self.args) - def __getitem__(self, i): - return self.args[i] diff --git a/modules/Pyro/ext/BasicNTService.py b/modules/Pyro/ext/BasicNTService.py deleted file mode 100644 index 327e0b67..00000000 --- a/modules/Pyro/ext/BasicNTService.py +++ /dev/null @@ -1,196 +0,0 @@ -############################################################################# -# -# An NT service that runs the Pyro Name Server -# Author: Syver Enstad; syver-en@online.no -# Bugfix for recent win32 builds: David Rushby; woodsplitter@rocketmail.com -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import sys -import win32serviceutil -import threading -import win32service -import win32api -import win32con - - -class BasicNTService(win32serviceutil.ServiceFramework, object): - """ Abstract base to help out with building NT services - in Python with the win32all(by Mark Hammond) support for - python nt services. - - Remember to set the two following class attributes - to something sensible in your subclass - _svc_name_ = 'PyroNS' - _svc_display_name_ = 'Pyro Naming Service NT service' - - The following are optional - _svc_deps_: This should be set to the list of service names - That need to be started before this one. - _exe_name_: This should be set to a service .EXE if you're not - going to use PythonService.exe - _svc_description_ : This is the descriptive string that you find - in the services applet - - To register the service with the SCM the easiest way is to include the - following at the bottom of the file where your subclass is defined. - if __name__ == '__main__': - TheClassYouDerivedFromBasicNTService.HandleCommandLine() - - """ - def __init__(self, args): - _redirectSystemStreamsIfNecessary() - - win32serviceutil.ServiceFramework.__init__(self, args) - self._stopEvent = threading.Event() - - def SvcStop(self): - """ Template method from win32serviceutil.ServiceFramework""" - # first tell SCM that we have started the stopping process - self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) - self._stopEvent.set() - - def _shouldStop(self): - return self._stopEvent.isSet() - - def _doRun(self): - raise NotImplementedError - - def _doStop(self): - raise NotImplementedError - - def SvcDoRun(self): - """ part of Template method SvcRun - from win32serviceutil.ServiceFramework""" - self.logStarted() - self._doRun() - self._stopEvent.wait() - self._doStop() - self.logTermination() - return 0 - - def logTermination(self): - import servicemanager - servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, - servicemanager.PYS_SERVICE_STOPPED, - (self._svc_name_, "")) - - def logStarted(self): - import servicemanager - servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, - servicemanager.PYS_SERVICE_STARTED, - (self._svc_name_, '')) - - def CustomOptionHandler(cls, opts): - #out=open("c:\\log.txt","w") - print "Installing the Pyro %s" % cls._svc_name_ - args = raw_input("Enter command line arguments for %s: " % cls._svc_name_) - try: - createRegistryParameters(cls._svc_name_, args.strip()) - except Exception,x: - print "Error occured when setting command line args in the registry: ",x - try: - cls._svc_description_ - except LookupError: - return - - key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, - "System\\CurrentControlSet\\Services\\%s" % cls._svc_name_) - try: - win32api.RegSetValueEx(key, "Description", 0, win32con.REG_SZ, cls._svc_description_); - finally: - win32api.RegCloseKey(key) - CustomOptionHandler = classmethod(CustomOptionHandler) - - - def HandleCommandLine(cls): - if win32serviceutil.HandleCommandLine(cls, customOptionHandler=cls.CustomOptionHandler) != 0: - return # some error occured - if sys.argv[1] in ("install", "update"): - print "\nYou can configure the command line arguments in the Registry." - print "The key is: HKLM\\System\\CurrentControlSet\\Services\\%s" % cls._svc_name_ - print "The value under that key is: ", pyroArgsRegkeyName - args=getRegistryParameters(cls._svc_name_) - if args: - print "(it is currently set to: '%s')" % args - else: - print "(it is currently not set)" - print - HandleCommandLine = classmethod(HandleCommandLine) - - - -pyroArgsRegkeyName = "PyroServiceArguments" - - -def getRegistryParameters(servicename): - key=win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\"+servicename) - try: - try: - (commandLine, regtype) = win32api.RegQueryValueEx(key,pyroArgsRegkeyName) - return commandLine - except: - pass - finally: - key.Close() - - createRegistryParameters(servicename, pyroArgsRegkeyName) - return "" - - -def createRegistryParameters(servicename, parameters): - newkey=win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\"+servicename,0,win32con.KEY_ALL_ACCESS) - try: - win32api.RegSetValueEx(newkey, pyroArgsRegkeyName, 0, win32con.REG_SZ, parameters) - finally: - newkey.Close() - - -def _redirectSystemStreamsIfNecessary(): - # Python programs running as Windows NT services must not send output to - # the default sys.stdout or sys.stderr streams, because those streams are - # not fully functional in the NT service execution environment. Sending - # output to them will eventually (but not immediately) cause an IOError - # ("Bad file descriptor"), which can be quite mystifying to the - # uninitiated. This problem can be overcome by replacing the default - # system streams with a stream that discards any data passed to it (like - # redirection to /dev/null on Unix). - # - # However, the pywin32 service framework supports a debug mode, under which - # the streams are fully functional and should not be redirected. - shouldRedirect = True - try: - import servicemanager - except ImportError: - # If we can't even 'import servicemanager', we're obviously not running - # as a service, so the streams shouldn't be redirected. - shouldRedirect = False - else: - # Unlike previous builds, pywin32 builds >= 200 allow the - # servicemanager module to be imported even in a program that isn't - # running as a service. In such a situation, it would not be desirable - # to redirect the system streams. - # - # However, it was not until pywin32 build 203 that a 'RunningAsService' - # predicate was added to allow client code to determine whether it's - # running as a service. - # - # This program logic redirects only when necessary if using any build - # of pywin32 except 200-202. With 200-202, the redirection is a bit - # more conservative than is strictly necessary. - if ( - servicemanager.Debugging() - or ( - hasattr(servicemanager, 'RunningAsService') - and not servicemanager.RunningAsService() - ) - ): - shouldRedirect = False - - if shouldRedirect: - sys.stdout = sys.stderr = open('nul', 'w') - - return shouldRedirect diff --git a/modules/Pyro/ext/ES_NtService.py b/modules/Pyro/ext/ES_NtService.py deleted file mode 100644 index b21cefdc..00000000 --- a/modules/Pyro/ext/ES_NtService.py +++ /dev/null @@ -1,112 +0,0 @@ -############################################################################# -# -# An NT service that runs the Pyro Event Service -# Author: Syver Enstad syver-en@online.no -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import win32serviceutil -import threading -import win32service -import win32api -from BasicNTService import BasicNTService, getRegistryParameters - - -def setConfig(): - Pyro.config.PYRO_TRACELEVEL=3 - Pyro.config.PYRO_STORAGE = os.path.splitdrive(win32api.GetSystemDirectory())[0]+os.sep - Pyro.config.PYRO_LOGFILE = "Pyro_ES_svc.log" - - -import os,sys -import Pyro.util -setConfig() -Log=Pyro.util.Log -from Pyro.EventService import Server - - -class PyroESThread(threading.Thread): - """ The Pyro Event Service will run in this thread - """ - def __init__(self, args, stopcallback): - threading.Thread.__init__(self) - self._args = list(args) - self._stopcallback = stopcallback - - def run(self): - self.startPyroES() - self._stopcallback() - - def startPyroES(self): - Log.msg("PyroES_svc","Pyro ES service is starting, arguments=",self._args) - """ ripped out of Pyro.EventService.Server and slightly changed to - accomodate not using sys.argv, but self._args instead - """ - - try: - Args = Pyro.util.ArgParser() - Args.parse(self._args,'hn:p:i:') - if Args.hasOpt('h'): - Log.error("PyroES_svc",""" -Usage: es [-h] [-n hostname] [-p port] [-i identification] - where -p = ES server port - -n = non-default hostname to bind on - -i = the required authentication ID for ES clients, - also used to connect to other Pyro services - -h = print this help -""") - raise SystemExit - host = Args.getOpt('n','') - port = Args.getOpt('p',None) - ident = Args.getOpt('i',None) - if port: - port=int(port) - if Args.ignored: - Log.warn("PyroES_svc",'Ignored options:',Args.ignored) - if Args.args: - Log.warn("PyroES_svc",'Ignored arguments:',Args.args) - - Log.msg("PyroES_scv", "Starting the Event Server.") - self.starter=Server.EventServiceStarter(identification=ident) - self.starter.start(host,port) - - except Exception,x : - Log.error("PyroES_scv","COULD NOT START!!!",x) - raise SystemExit - - def shutdown(self): - self.starter.running=0 - - -class PyroES_NTService(BasicNTService): - _svc_name_ = 'PyroES' - _svc_display_name_ = "Pyro Event Service" - _svc_description_ = "Provides event topics and publish/subscribe communication for Pyro" - def __init__(self, args): - super(PyroES_NTService, self).__init__(args) - setConfig() - try: - args = getRegistryParameters(self._svc_name_).split() - except Exception,x: - Log.error("PyroES_svc","PROBLEM GETTING ARGS FROM REGISTRY:",x) - self._esThread = PyroESThread(args, self.SvcStop) - - def _doRun(self): - """ Overriden """ - self._esThread.start() - - def _doStop(self): - """ Overridden """ - self._esThread.shutdown() - self._esThread.join() - - def SvcStop(self): - """Overriden """ - super(PyroES_NTService, self).SvcStop() - - -if __name__ == '__main__': - PyroES_NTService.HandleCommandLine() diff --git a/modules/Pyro/ext/NS_NtService.py b/modules/Pyro/ext/NS_NtService.py deleted file mode 100644 index a0af0f06..00000000 --- a/modules/Pyro/ext/NS_NtService.py +++ /dev/null @@ -1,200 +0,0 @@ -############################################################################# -# -# An NT service that runs the Pyro Name Server -# Author: Syver Enstad syver-en@online.no -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import win32serviceutil -import threading -import win32service -import win32api -from BasicNTService import BasicNTService, getRegistryParameters - - -def setConfig(): - Pyro.config.PYRO_TRACELEVEL=3 - Pyro.config.PYRO_STORAGE = os.path.splitdrive(win32api.GetSystemDirectory())[0]+os.sep - Pyro.config.PYRO_LOGFILE = "Pyro_NS_svc.log" - Pyro.config.PYRO_NS_URIFILE = os.path.join(Pyro.config.PYRO_STORAGE, "Pyro_NS_URI.txt") - -import os,sys -import Pyro.util -setConfig() -Log=Pyro.util.Log -import Pyro.core -import Pyro.constants -import Pyro.naming -from Pyro.naming import NameServer, PersistentNameServer, BroadcastServer, bcRequestHandler - -BcServerObject = None - -def startServer(hstn='', nsport=0, bcport=0, keep=0, persistent=0, dbdir=None, Guards=(None,None)): - global BcServerObject - if not nsport: - nsport=Pyro.config.PYRO_NS_PORT - if not bcport: - bcport=Pyro.config.PYRO_NS_BC_PORT - Pyro.core.initServer() - PyroDaemon = Pyro.core.Daemon(host=hstn, port=nsport,norange=1) - if Guards[0]: - PyroDaemon.setNewConnectionValidator(Guards[0]) - if persistent: - ns=PersistentNameServer(dbdir) - PyroDaemon.useNameServer(ns) - NS_URI=PyroDaemon.connectPersistent(ns,Pyro.constants.NAMESERVER_NAME) - else: - ns=NameServer() - PyroDaemon.useNameServer(ns) - NS_URI=PyroDaemon.connect(ns,Pyro.constants.NAMESERVER_NAME) - - BcServerObject = BroadcastServer((hstn or '',bcport),bcRequestHandler) - if Guards[1]: - BcServerObject.setRequestValidator(Guards[1]) - BcServerObject.keepRunning(keep) - if keep: - Log.msg("NS", 'Will ignore shutdown requests.') - ns.ignoreShutdown=True - else: - Log.msg("NS", 'Will accept shutdown requests.') - ns.ignoreShutdown=False - - if Guards[0] or Guards[1]: - print 'Using security plugins:' - if Guards[0]: - print ' NS new conn validator =',Guards[0].__class__.__name__,'from', Guards[0].__class__.__module__ - else: print ' default NS new conn validator' - if Guards[1]: - print ' BC request validator =',Guards[1].__class__.__name__,'from', Guards[1].__class__.__module__ - else: print ' default BC request validator' - - ns.publishURI(NS_URI) - BcServerObject.setNS_URI(NS_URI) - Log.msg('NS daemon','This is the Pyro Name Server.') - if persistent: - Log.msg('NS daemon','Persistent mode, database is in',ns.getDBDir()) - print 'Persistent mode, database is in',ns.getDBDir() - Log.msg('NS daemon','Starting on',PyroDaemon.hostname,'port', PyroDaemon.port, ' broadcast server on port',bcport) - - # I use a timeout here otherwise you can't break gracefully on Windoze - while not BcServerObject.shutdown: - try: - PyroDaemon.handleRequests(BcServerObject.preferredTimeOut,[BcServerObject],BcServerObject.bcCallback) - except KeyboardInterrupt: - Log.warn('NS daemon','shutdown on user break signal') - BcServerObject.shutdown=1 - except: - import traceback - (exc_type, exc_value, exc_trb) = sys.exc_info() - out = ''.join(traceback.format_exception(exc_type, exc_value, exc_trb)[-5:]) - Log.error('NS daemon', 'Unexpected exception, type',exc_type, - '\n--- partial traceback of this exception follows:\n', - out,'\n--- end of traceback') - - Log.msg('NS daemon','Shut down gracefully.') - - -class PyroNSThread(threading.Thread): - """ The Pyro Naming Service will run in this thread - """ - def __init__(self, args, stopcallback): - threading.Thread.__init__(self) - Log.msg("PyroNSsvc", "initializing") - self._args = list(args) - Log.msg("PyroNSsvc", "args are:",self._args) - self._stopcallback = stopcallback - - def run(self): - self.startPyroNS() - self._stopcallback() - - def startPyroNS(self): - try: - """ ripped out of Pyro.naming and slightly changed to - accomodate not using sys.argv, but self._args instead - """ - Args = Pyro.util.ArgParser() - Args.parse(self._args,'hkn:p:b:d:s:') - try: - Args.getOpt('h') - Log.error("PyroNS_svc",""" -Usage: ns [-h] [-n hostname] [-p port] [-b port] - [-d [databasefile]] [-s securitymodule] - where -p = NS server port - -b = NS broadcast port - -n = non-default server hostname - -d = use persistent database, provide optional storage directory - -s = use given python module with security code - -h = print this help -""") - raise SystemExit - except KeyError: - pass - host = Args.getOpt('n','') - port = int(Args.getOpt('p',Pyro.config.PYRO_NS_PORT)) - bcport = int(Args.getOpt('b',Pyro.config.PYRO_NS_BC_PORT)) - try: - dbdir = Args.getOpt('d') - persistent = 1 - except KeyError: - persistent = 0 - dbdir = None - - # we're running as a service, always ignore remote shutdown requests - keep=1 - - try: - secmod = __import__(Args.getOpt('s'),locals(),globals()) - Guards = (secmod.NSGuard(), secmod.BCGuard()) - except ImportError,x: - Log.msg("NS", 'Error loading security module:',x) - raise SystemExit - except KeyError: - secmod = None - Guards = (None,None) - - if Args.ignored: - Log.warn("PyroNS_svc",'Ignored options:',Args.ignored) - if Args.args: - Log.warn("PyroNS_svc",'Ignored arguments:',Args.args) - - Log.msg("PyroNS_svc","Starting the Name Server.") - startServer(host,port,bcport,keep,persistent,dbdir,Guards) - except Exception,x : - Log.error("NS daemon","COULD NOT START!!!",x) - raise SystemExit - - -class PyroNS_NTService(BasicNTService): - _svc_name_ = 'PyroNS' - _svc_display_name_ = "Pyro Naming Service" - _svc_description_ = 'Provides name resolution services for Pyro objects' - def __init__(self, args): - super(PyroNS_NTService, self).__init__(args) - setConfig() - try: - args = getRegistryParameters(self._svc_name_).split() - except Exception,x: - Log.error("PyroNS_svc","PROBLEM GETTING ARGS FROM REGISTRY:",x) - self._nsThread = PyroNSThread(args, self.SvcStop) - - def _doRun(self): - """ Overriden """ - self._nsThread.start() - - def _doStop(self): - """ Overridden """ - global BcServerObject - BcServerObject.shutdown = 1 - self._nsThread.join() - - def SvcStop(self): - """Overriden """ - super(PyroNS_NTService, self).SvcStop() - - -if __name__ == '__main__': - PyroNS_NTService.HandleCommandLine() diff --git a/modules/Pyro/ext/ServiceTest.py b/modules/Pyro/ext/ServiceTest.py deleted file mode 100644 index 65ebd6b2..00000000 --- a/modules/Pyro/ext/ServiceTest.py +++ /dev/null @@ -1,89 +0,0 @@ -############################################################################# -# -# A test for the PyroNS_NTService program -# Author: Syver Enstad syver-en@online.no -# -# This is part of "Pyro" - Python Remote Objects -# Which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import unittest -import win32serviceutil -import win32service -import time -import Pyro.nsc - -ServiceName = 'PyroNS' - -class Test(unittest.TestCase): - def setUp(self): - win32serviceutil.StartService(ServiceName) - - def testStartPending(self): - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.QueryServiceStatus(ServiceName) - assert svcState & win32service.SERVICE_START_PENDING - - def testFullyStarted(self): - self._waitForStarted() - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.QueryServiceStatus(ServiceName) - assert svcType & win32service.SERVICE_WIN32_OWN_PROCESS - assert svcState & win32service.SERVICE_RUNNING - assert svcControls & win32service.SERVICE_ACCEPT_STOP - - def testStop(self): - self._waitForStarted() - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.StopService(ServiceName) - assert svcState & win32service.SERVICE_STOPPED - assert svcType & win32service.SERVICE_WIN32_OWN_PROCESS - - def testNameserverAvailable(self): - self._waitForStarted() - ctrl = Pyro.nsc.PyroNSControl() - ctrl.args(None) - ctrl.ping() - - def testNameserverShutdownFromNsc(self): - self._waitForStarted() - ctrl = Pyro.nsc.PyroNSControl() - ctrl.args(None) - ctrl.shutdown() - for each in range(100): - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.QueryServiceStatus(ServiceName) - if svcState & win32service.SERVICE_STOPPED: - return - time.sleep(0.20) - self.fail() - - def tearDown(self): - for each in range(1000): - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.QueryServiceStatus(ServiceName) - if svcState & win32service.SERVICE_RUNNING: - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.StopService(ServiceName) - time.sleep(0.1) - elif svcState & win32service.SERVICE_STOPPED: - time.sleep(0.10) - break - else: - time.sleep(0.10) - assert svcState & win32service.SERVICE_STOPPED - time.sleep(3) - - def _waitForStarted(self): - for each in range(100): - svcType, svcState, svcControls, err, svcErr, svcCP, svcWH = \ - win32serviceutil.QueryServiceStatus(ServiceName) - if svcState & win32service.SERVICE_RUNNING: - break - else: - time.sleep(0.10) - - -if __name__ == '__main__': - unittest.main() diff --git a/modules/Pyro/ext/__init__.py b/modules/Pyro/ext/__init__.py deleted file mode 100644 index 6f66f15a..00000000 --- a/modules/Pyro/ext/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# just to make this a package. diff --git a/modules/Pyro/ext/daemonizer.py b/modules/Pyro/ext/daemonizer.py deleted file mode 100644 index 11b50614..00000000 --- a/modules/Pyro/ext/daemonizer.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env python -############################################################################# -# -# Run Pyro servers as daemon processes on Unix/Linux. -# This won't work on other operating systems such as Windows. -# Author: Jeff Bauer (jbauer@rubic.com) -# This software is released under the MIT software license. -# Based on an earlier daemonize module by Jeffery Kunce -# Updated by Luis Camaano to double-fork-detach. -# -# DEPRECATED. Don't use this in new code. -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import sys, os, time -from signal import SIGINT - -class DaemonizerException: - def __init__(self, msg): - self.msg = msg - def __str__(self): - return self.msg - -class Daemonizer: - """ - Daemonizer is a class wrapper to run a Pyro server program - in the background as daemon process. The only requirement - is for the derived class to implement a main_loop() method. - See Test class below for an example. - - The following command line operations are provided to support - typical /etc/init.d startup/shutdown on Unix systems: - - start | stop | restart - - In addition, a daemonized program can be called with arguments: - - status - check if process is still running - - debug - run the program in non-daemon mode for testing - - Note: Since Daemonizer uses fork(), it will not work on non-Unix - systems. - """ - def __init__(self, pidfile=None): - if not pidfile: - # PID file moved out of /tmp to avoid security vulnerability - # changed by Debian maintainer per Debian bug #631912 - self.pidfile = "/var/run/pyro-%s.pid" % self.__class__.__name__.lower() - else: - self.pidfile = pidfile - - def become_daemon(self, root_dir='/'): - if os.fork() != 0: # launch child and ... - os._exit(0) # kill off parent - os.setsid() - os.chdir(root_dir) - os.umask(0) - if os.fork() != 0: # fork again so we are not a session leader - os._exit(0) - sys.stdin.close() - sys.__stdin__ = sys.stdin - sys.stdout.close() - sys.stdout = sys.__stdout__ = _NullDevice() - sys.stderr.close() - sys.stderr = sys.__stderr__ = _NullDevice() - for fd in range(1024): - try: - os.close(fd) - except OSError: - pass - - def daemon_start(self, start_as_daemon=1): - if start_as_daemon: - self.become_daemon() - if self.is_process_running(): - msg = "Unable to start server. Process is already running." - raise DaemonizerException(msg) - f = open(self.pidfile, 'w') - f.write("%s" % os.getpid()) - f.close() - self.main_loop() - - def daemon_stop(self): - pid = self.get_pid() - try: - os.kill(pid, SIGINT) # SIGTERM is too harsh... - time.sleep(1) - try: - os.unlink(self.pidfile) - except OSError: - pass - except IOError: - pass - - def get_pid(self): - try: - f = open(self.pidfile) - pid = int(f.readline().strip()) - f.close() - except IOError: - pid = None - return pid - - def is_process_running(self): - pid = self.get_pid() - if pid: - try: - os.kill(pid, 0) - return 1 - except OSError: - pass - return 0 - - def main_loop(self): - """NOTE: This method must be implemented in the derived class.""" - msg = "main_loop method not implemented in derived class: %s" % \ - self.__class__.__name__ - raise DaemonizerException(msg) - - def process_command_line(self, argv, verbose=1): - usage = "usage: %s start | stop | restart | status | debug " \ - "[--pidfile=...] " \ - "(run as non-daemon)" % os.path.basename(argv[0]) - if len(argv) < 2: - print usage - raise SystemExit - else: - operation = argv[1] - if len(argv) > 2 and argv[2].startswith('--pidfile=') and \ - len(argv[2]) > len('--pidfile='): - self.pidfile = argv[2][len('--pidfile='):] - pid = self.get_pid() - if operation == 'status': - if self.is_process_running(): - print "Server process %s is running." % pid - else: - print "Server is not running." - elif operation == 'start': - if self.is_process_running(): - print "Server process %s is already running." % pid - raise SystemExit - else: - if verbose: - print "Starting server process." - self.daemon_start() - elif operation == 'stop': - if self.is_process_running(): - self.daemon_stop() - if verbose: - print "Server process %s stopped." % pid - else: - print "Server process %s is not running." % pid - raise SystemExit - elif operation == 'restart': - self.daemon_stop() - if verbose: - print "Restarting server process." - self.daemon_start() - elif operation == 'debug': - self.daemon_start(0) - else: - print "Unknown operation:", operation - raise SystemExit - - -class _NullDevice: - """A substitute for stdout/stderr that writes to nowhere.""" - def write(self, s): - pass - - -class Test(Daemonizer): - def __init__(self): - Daemonizer.__init__(self) - - def main_loop(self): - while 1: - time.sleep(1) - - -if __name__ == "__main__": - test = Test() - test.process_command_line(sys.argv) diff --git a/modules/Pyro/ext/remote.py b/modules/Pyro/ext/remote.py deleted file mode 100644 index 6f524929..00000000 --- a/modules/Pyro/ext/remote.py +++ /dev/null @@ -1,498 +0,0 @@ -############################################################################# -# -# simple Pyro connection module, originally written by John Wiegley -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import UserDict -import exceptions -import os -import re -import signal -import socket -import sys -import time -import types - -import Pyro.errors -import Pyro.naming -import Pyro.core -import Pyro.util - -from Pyro.protocol import ProtocolError - -true, false = 1, 0 - -copy_types = false -verbose = false -pyro_nameserver = None -pyro_daemon = None -client_initialized = false -server_initialized = false -daemon_host = '' -daemon_port = 0 -daemon_objects = [] -daemon_types = [] - -def tb_info(tb): - codename = tb.tb_frame.f_code.co_filename - lineno = tb.tb_lineno - if not (codename == '' or codename.find(".py") > 0): - lineno = lineno - 2 - return lineno, codename - -def canonize(e_type, e_val, e_traceback): - "Turn the exception into a textual representation." - # find the last traceback: - tb = e_traceback - - lineno, codename = tb_info(tb) - lines = [ "%s %s" % (codename, lineno) ] - - found = None - if tb.tb_frame.f_code.co_filename[0] == '<': - found = tb - - while tb.tb_next: - tb = tb.tb_next - if tb.tb_frame.f_code.co_filename[0] == '<': - found = tb - lineno, codename = tb_info(tb) - lines.append("%s %s" % (codename, lineno)) - - if found: - tb = found - - lineno, codename = tb_info(tb) - - if codename == '': - lines.insert(0, "%s in command: %s" % (e_type, e_val)) - elif codename.find(".py") > 0 and e_type == "SyntaxError": - lines.insert(0, "%s in: %s" % (e_type, e_val)) - else: - lines.insert(0, "%s in line %s of %s: %s" % - (e_type, lineno, codename, e_val)) - - return lines - -def exception_text(): - return sys.exc_value - -def format_exception(): - return canonize(*sys.exc_info()) - -def register_type(t): - """Whenever type T goes in or out, wrap/unwrap the type so that - the user is always interacting with the server object, or the - server interacts with the object directly.""" - if t not in daemon_types: - daemon_types.append(t) - -def unregister_objects(): - if pyro_daemon: - global daemon_objects - for obj in daemon_objects: - try: pyro_daemon.disconnect(obj) - except: pass - daemon_objects = [] - -sys.exitfunc = unregister_objects - -def host_ipaddr(interface = None): - if sys.platform == "win32": - return socket.gethostbyname(socket.gethostname()) - - cmd = "/sbin/ifconfig" - if interface: - cmd = '%s %s' % (cmd, interface) - fd = os.popen(cmd) - - this_host = None - interfaces = {} - name = None - - for line in fd.readlines(): - match = re.match("(\S+)", line) - if match: name = match.group(1) - match = re.search("inet addr:(\S+)", line) - if match: - addr = match.group(1) - if name: - interfaces[name] = addr - - if interfaces.has_key(interface): - this_host = interfaces[interface] - else: - for name, addr in interfaces.items(): - if re.match("ppp", name): - this_host = addr - break - elif re.match("eth", name): - this_host = addr - - fd.close() - - return this_host or socket.gethostbyname(socket.gethostname()) - -def find_nameserver(hostname = None, portnum = None): - if hostname and hostname.find('://') > 0: - URI = Pyro.core.PyroURI(hostname) - ns = Pyro.naming.NameServerProxy(URI) - else: - try: - if verbose: - print 'Searching for Naming Service on %s:%d...' % \ - (hostname or 'BROADCAST', - portnum or Pyro.config.PYRO_NS_BC_PORT) - locator = Pyro.naming.NameServerLocator() - ns = locator.getNS(host = hostname, port = portnum) - - except (Pyro.core.PyroError, socket.error), x: - localhost = socket.gethostbyname('localhost') - if verbose: - print "Error:", x - print """ -Naming Service not found with broadcast. -Trying local host""", localhost, '...', - - ns = locator.getNS(host = localhost, port = portnum) - - if verbose: print 'Naming Service found at', ns.URI - - return ns - -class Error(Exception): pass - -class ObjBase(Pyro.core.ObjBase): - """This extension of Pyro.core.ObjBase makes sure that any values - that get returned to the caller which are of a significant type, - get wrapped first in proxies. - - Likewise, if a proxy class comes back to us, and it's in regard to - an object native to this server, unwrap it.""" - def __nonzero__(self): return 1 - - def Pyro_dyncall(self, method, flags, args): - try: - base = Pyro.core.ObjBase.Pyro_dyncall - result = wrap(base(self, method, flags, unwrap(args))) - except: - result = Error('\n'.join(format_exception())) - return result - - def _r_ga(self, attr): - return wrap(Pyro.core.ObjBase._r_ga(self, attr)) - - def _r_sa(self, attr, value): - Pyro.core.ObjBase._r_sa(self, attr, unwrap(value)) - -class Nameserver: - """This helper class allows the server to use Pyro's naming - service for publishing certain objects by name. It integrates - better with remote.py, than Pyro.naming.NameServer does.""" - def __init__(self, ns, ns_port): - self.ns = ns - self.ns_port = ns_port - - def __cmp__(self, other): - return self.ns == other.ns and self.ns_port == other.ns_port - - def __str__(self): - if self.ns_port: - return "%s:%s" % (self.ns, self.ns_port) - return self.ns - - def resolve(self, name): - return get_remote_object(name, self.ns, self.ns_port) - - def register(self, name, object): - return provide_local_object(object, name, self.ns, self.ns_port) - - def unregister(self, object): - for obj in daemon_objects[:]: - if obj.delegate is object: - pyro_daemon.disconnect(obj) - daemon_objects.remove(obj) - -class DynamicProxy(Pyro.core.DynamicProxyWithAttrs): - """This version of the proxy just wraps args before making - external calls.""" - def __nonzero__(self): - return true - - def _invokePYRO(self, *vargs, **kargs): - result = unwrap(apply(Pyro.core.DynamicProxyWithAttrs._invokePYRO, - tuple([self] + wrap(list(vargs))), wrap(kargs))) - - if type(result) is types.InstanceType and \ - isinstance(result, Error) or \ - isinstance(result, Pyro.errors.PyroError) or \ - isinstance(result, ProtocolError): - msg = str(result) - type_name = msg[: msg.find(' ')] - - if type_name == 'exceptions.IndexError': - try: - real_type = eval(type_name) - msg = msg.split('\n')[0] - result = real_type(msg[msg.find(':') + 2 :]) - except: - pass - - raise result - else: - return result - -def unwrap(value): - t = type(value) - if t is types.InstanceType and isinstance(value, DynamicProxy): - if pyro_daemon: - try: - return pyro_daemon.getLocalObject(value.objectID) - except KeyError: - pass - return value - elif t is types.ListType: - for i in range(len(value)): - value[i] = unwrap(value[i]) - elif t is types.TupleType: - value = list(value) - for i in range(len(value)): - value[i] = unwrap(value[i]) - return tuple(value) - elif t is types.DictType: - for k, v in value.items(): - value[k] = unwrap(v) - return value - -def wrap(value): - """Wrap the argument, returning a copy -- since otherwise we might - alter a local data structure inadvertantly.""" - t = type(value) - if t is types.InstanceType: - matched = false - for dt in daemon_types: - if isinstance(value, dt): - matched = true - if not copy_types and not matched and \ - not isinstance(value, DynamicProxy): - return provide_local_object(value) - elif t is types.ListType: - value = value[:] - for i in range(len(value)): - value[i] = wrap(value[i]) - elif t is types.TupleType: - value = list(value) - for i in range(len(value)): - value[i] = wrap(value[i]) - return tuple(value) - elif t is types.DictType: - copy = {} - for k, v in value.items(): - copy[k] = wrap(v) - return copy - return value - -def get_remote_object(name, hostname = None, portnum = None): - global client_initialized, pyro_nameserver - - # initialize Pyro -- Python Remote Objects - if not client_initialized: - Pyro.core.initClient(verbose) - client_initialized = true - - if pyro_nameserver is None or hostname: - pyro_nameserver = find_nameserver(hostname, portnum) - - if verbose: - print 'Binding object %s' % name - - try: - URI = pyro_nameserver.resolve(name) - if verbose: - print 'URI:', URI - - return DynamicProxy(URI) - - except Pyro.core.PyroError, x: - raise Error("Couldn't bind object, nameserver says:", x) - -class Cache(UserDict.UserDict): - """simple cache that uses least recently accessed time to trim size""" - def __init__(self,data=None,size=100): - UserDict.UserDict.__init__(self,data) - self.size = size - - def resize(self): - """trim cache to no more than 95% of desired size""" - trim = max(0, int(len(self.data)-0.95*self.size)) - if trim: - # don't want self.items() because we must sort list by access time - values = map(None, self.data.values(), self.data.keys()) - values.sort() - for val,k in values[0:trim]: - del self.data[k] - - def __setitem__(self,key,val): - if (not self.data.has_key(key) and - len(self.data) >= self.size): - self.resize() - self.data[key] = (time.time(), val) - - def __getitem__(self,key): - """like normal __getitem__ but updates time of fetched entry""" - val = self.data[key][1] - self.data[key] = (time.time(),val) - return val - - def get(self,key,default=None): - """like normal __getitem__ but updates time of fetched entry""" - try: - return self[key] - except KeyError: - return default - - def values(self): - """return values, but eliminate access times first""" - vals = list(self.data.values()) - for i in range(len(vals)): - vals[i] = vals[i][1] - return tuple(vals) - - def items(self): - return map(None, self.keys(), self.values()) - - def copy(self): - return self.__class__(self.data, self.size) - - def update(self, otherdict): - for k in otherdict.keys(): - self[k] = otherdict[k] - -provided_objects = Cache(size = 100) - -def provide_local_object(obj, name = None, hostname = None, portnum = None): - global server_initialized, pyro_daemon, pyro_nameserver - - proxy_class = DynamicProxy - - if not server_initialized: - Pyro.core.initServer(verbose) - server_initialized = true - - if pyro_daemon is None: - pyro_daemon = Pyro.core.Daemon(host = daemon_host, - port = daemon_port) - - # If no 'name' was specified, don't even bother with the - # nameserver. - if name: - if pyro_nameserver is None or hostname: - pyro_nameserver = find_nameserver(hostname, portnum) - - pyro_daemon.useNameServer(pyro_nameserver) - - if verbose: - print 'Remoting object', name - - # tell nameserver to forget any earlier use of this name - try: - if pyro_nameserver.resolve(name): - pyro_nameserver.unregister(name) - except Pyro.errors.NamingError: - pass - - if not isinstance(obj, Pyro.core.ObjBase): - if provided_objects.has_key(obj): - obj = provided_objects[obj] - else: - slave = ObjBase() - slave.delegateTo(obj) - provided_objects[obj] = slave - obj = slave - - URI = pyro_daemon.connect(obj, name) - daemon_objects.append(obj) - - proxy = proxy_class(URI) - - return proxy - -abort = false - -def interrupt(*args): - global abort - abort = true - -if hasattr(signal,'SIGINT'): signal.signal(signal.SIGINT, interrupt) -#if hasattr(signal,'SIGHUP'): signal.signal(signal.SIGHUP, interrupt) -#if hasattr(signal,'SIGQUIT'): signal.signal(signal.SIGQUIT, interrupt) - -def handle_requests(wait_time = None, callback = None): - global abort - - abort = false - - if pyro_daemon is None: - raise Error("There is no daemon with which to handle requests") - - if wait_time: - start = time.time() - - while not abort: - try: - pyro_daemon.handleRequests(wait_time) - - if wait_time: - now = time.time() - if callback and now - start > wait_time: - callback() - start = now - elif callback: - callback() - - # ignore socket and select errors, they are often transient - except socket.error: pass - except Exception, msg: - if verbose: - print "Error:", sys.exc_type, msg - abort = true - except: - abort = true - - return abort - -def handle_requests_unsafe(wait_time = None, callback = None): - global abort - - abort = false - - if pyro_daemon is None: - raise Error("There is no daemon with which to handle requests") - - if wait_time: - start = time.time() - - while 1: - pyro_daemon.handleRequests(wait_time) - - if wait_time: - now = time.time() - if callback and now - start > wait_time: - callback() - start = now - elif callback: - callback() - - return true - -def unregister_object(obj): - if pyro_daemon: - try: pyro_daemon.disconnect(obj) - except: pass - global daemon_objects - if obj in daemon_objects: - daemon_objects.remove(obj) diff --git a/modules/Pyro/ext/remote_nons.py b/modules/Pyro/ext/remote_nons.py deleted file mode 100644 index 92dc1a6c..00000000 --- a/modules/Pyro/ext/remote_nons.py +++ /dev/null @@ -1,119 +0,0 @@ -############################################################################# -# -# simple Pyro connection module, without requiring Pyro's NameServer -# (adapted from John Wiegley's remote.py) -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import signal -import sys -import time - -import Pyro.errors -import Pyro.naming -import Pyro.core -import Pyro.util - -true, false = 1, 0 - -verbose = false -pyro_daemon = None -client_initialized = false -server_initialized = false -daemon_objects = [] - -from Pyro.protocol import ProtocolError - - -def get_server_object(objectName, hostname , portnum): - global client_initialized - - # initialize Pyro -- Python Remote Objects - if not client_initialized: - Pyro.core.initClient(verbose) - client_initialized = true - - - if verbose: - print 'Binding object %s' % objectName - - try: - URI = 'PYROLOC://%s:%d/%s' % (hostname,portnum,objectName) - if verbose: - print 'URI:', URI - - return Pyro.core.getAttrProxyForURI(URI) - - except Pyro.core.PyroError, x: - raise Pyro.core.PyroError("Couldn't bind object, Pyro says:", x) - -def provide_server_object(obj, name = None, hostname = '', portnum = None): - global server_initialized, pyro_daemon - proxy_class = Pyro.core.DynamicProxyWithAttrs - - if not server_initialized: - Pyro.core.initServer(verbose) - server_initialized = true - - if pyro_daemon is None: - pyro_daemon = Pyro.core.Daemon(host = hostname, port = portnum) - - - if not isinstance(obj, Pyro.core.ObjBase): - slave = Pyro.core.ObjBase() - slave.delegateTo(obj) - obj = slave - - URI = pyro_daemon.connect(obj, name) - if verbose: - print 'provide_server_object: URI = ', URI - daemon_objects.append(obj) - - proxy = proxy_class(URI) - - return proxy - -abort = false - -def interrupt(*args): - global abort - abort = true - -if hasattr(signal,'SIGINT'): signal.signal(signal.SIGINT, interrupt) -#if hasattr(signal,'SIGHUP'): signal.signal(signal.SIGHUP, interrupt) -#if hasattr(signal,'SIGQUIT'): signal.signal(signal.SIGQUIT, interrupt) - -def handle_requests(wait_time = None, callback = None): - global abort - - abort = false - - if pyro_daemon is None: - raise Pyro.errors.PyroError("There is no daemon with which to handle requests") - return - - if wait_time: - start = time.time() - - while not abort: - try: - pyro_daemon.handleRequests(wait_time) - if wait_time: - now = time.time() - if callback and now - start > wait_time: - callback() - start = now - elif callback: - callback() - - except Exception, msg: - if verbose: - print "Error:", sys.exc_type, msg - abort = true - except: - abort = true - - return abort diff --git a/modules/Pyro/naming.py b/modules/Pyro/naming.py deleted file mode 100644 index 98f2d15b..00000000 --- a/modules/Pyro/naming.py +++ /dev/null @@ -1,1489 +0,0 @@ -############################################################################# -# -# Pyro Name Server -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -from __future__ import with_statement -import sys, os, socket, time, traceback, errno -import dircache, shutil, SocketServer -import Pyro.constants, Pyro.core, Pyro.errors, Pyro.protocol, Pyro.util -if Pyro.util.supports_multithreading(): - import threading - -NS_SYSCMD_LOCATION='location' -NS_SYSCMD_SHUTDOWN='shutdown' - -Log = Pyro.util.Log - -############################################################################# -# -# The Pyro NameServer Locator. -# Use a broadcast mechanism to find the broadcast server of the NS which -# can provide us with the URI of the NS. -# Can also perform direct lookup (no broadcast) if the host is specified. -# (in that case, the 'port' argument is the Pyro port, not a broadcast port). -# -############################################################################# - -class NameServerLocator(object): - def __init__(self, identification=None): - Pyro.core._checkInit() # init required - self.identification=identification - - def sendSysCommand(self,request,host=None,port=None,trace=0,logerrors=1,bcaddr=None): - try: - # Try the 'first' name server. - # Note that if no host is specified, a broadcast is used, - # and that one is sent to both name servers in parallel. - return self.__sendSysCommand(request, host, port, trace, logerrors, Pyro.constants.NSROLE_PRIMARY, bcaddr) - except KeyboardInterrupt: - raise - except (socket.error, Pyro.errors.PyroError): - if not port: - # the 'first' name server failed, try the second - try: - result=self.__sendSysCommand(request, host, port, trace, logerrors, Pyro.constants.NSROLE_SECONDARY, bcaddr) - # found the second! - # switch config for first and second so that the second one (which we found) will now be tried first - Pyro.config.PYRO_NS2_HOSTNAME, Pyro.config.PYRO_NS_HOSTNAME = Pyro.config.PYRO_NS_HOSTNAME, Pyro.config.PYRO_NS2_HOSTNAME - Pyro.config.PYRO_NS2_PORT, Pyro.config.PYRO_NS_PORT = Pyro.config.PYRO_NS_PORT, Pyro.config.PYRO_NS2_PORT - Pyro.config.PYRO_NS2_BC_PORT, Pyro.config.PYRO_NS_BC_PORT = Pyro.config.PYRO_NS_BC_PORT, Pyro.config.PYRO_NS2_BC_PORT - Pyro.config.PYRO_NS2_BC_ADDR, Pyro.config.PYRO_NS_BC_ADDR = Pyro.config.PYRO_NS_BC_ADDR, Pyro.config.PYRO_NS2_BC_ADDR - return result - except (socket.error, Pyro.errors.PyroError): - # Could not find using broadcast. Try the current host and localhost as well. - # But only if there's no explicit host parameter given. - if host: - raise Pyro.errors.NamingError("could not find NameServer on host "+host) - else: - for host in (Pyro.protocol.getHostname(), "localhost"): - if trace: - print "Trying host",host - Log.msg('NameServerLocator','Trying host',host) - try: - result=self.__sendSysCommand(request, host, port, trace, logerrors, Pyro.constants.NSROLE_PRIMARY) - Pyro.config.PYRO_NS_HOSTNAME = host - return result - except Pyro.errors.ConnectionDeniedError: - raise - except (socket.error, Pyro.errors.PyroError),x: - pass - else: - raise Pyro.errors.NamingError("could not find NameServer") - else: - raise - - def __sendSysCommand(self,request,host=None,port=None,trace=0,logerrors=1,role=Pyro.constants.NSROLE_PRIMARY,bcaddr=None): - HPB={Pyro.constants.NSROLE_PRIMARY: (Pyro.config.PYRO_NS_HOSTNAME, Pyro.config.PYRO_NS_PORT, Pyro.config.PYRO_NS_BC_PORT, Pyro.config.PYRO_NS_BC_ADDR), - Pyro.constants.NSROLE_SECONDARY: (Pyro.config.PYRO_NS2_HOSTNAME, Pyro.config.PYRO_NS2_PORT, Pyro.config.PYRO_NS2_BC_PORT, Pyro.config.PYRO_NS2_BC_ADDR) } - if not host: - host=HPB[role][0] - if port: - port1=port2=port - else: - if not host: - # select the default broadcast ports - port1 = HPB[Pyro.constants.NSROLE_PRIMARY][2] - port2 = HPB[Pyro.constants.NSROLE_SECONDARY][2] - else: - # select the default port (normal) - port = HPB[role][1] - # We must discover the location of the name server. - # Pyro's NS can answer to broadcast requests. - try: - if host: - # use direct lookup with PYROLOC: mechanism, no broadcast - if trace: - print 'Locator: contacting Pyro Name Server...' - uri=Pyro.core.PyroURI(host,Pyro.constants.NAMESERVER_NAME,port,'PYROLOC') - prox=Pyro.core.getProxyForURI(uri) - prox._setIdentification(self.identification) - if request==NS_SYSCMD_LOCATION: - prox.ping() # force resolving of PYROLOC: uri - return prox.URI # return resolved uri - elif request==NS_SYSCMD_SHUTDOWN: - return prox._shutdown() - else: - raise ValueError("invalid command specified") - - # No host specified. Use broadcast mechanism - if os.name=='java' and sys.version_info<(2,5): - # jythons older than 2.5 don't have working broadcast - msg="Skipping UDP broadcast (older jythons don't support this operation)" - if trace: - print msg - raise Pyro.errors.PyroError(msg) - if bcaddr: - try: - socket.gethostbyname(bcaddr) - except socket.error: - msg="invalid broadcast address '%s'" % bcaddr - if trace: - print msg - raise ValueError(msg) - destination1 = (bcaddr, port1) - destination2 = (bcaddr, port2) - else: - destination1 = (Pyro.config.PYRO_NS_BC_ADDR or '', port1) - destination2 = (Pyro.config.PYRO_NS2_BC_ADDR or '', port2) - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - if hasattr(socket,'SO_BROADCAST'): - s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) - - if trace: - print 'Locator: searching Pyro Name Server...' - try: - bc_retries=Pyro.config.PYRO_BC_RETRIES - if bc_retries<0: - bc_retries=sys.maxint-1 - bc_retries = min(sys.maxint-1, bc_retries) - for i in xrange(bc_retries+1): - # send request to both Pyro NS (if running in paired mode) - s.sendto(request, destination1) - if destination2!=destination1: - s.sendto(request, destination2) - timeout=min(sys.maxint,Pyro.config.PYRO_BC_TIMEOUT) - if timeout<0: - timeout=None - ins,outs,exs = Pyro.protocol.safe_select([s],[],[s],timeout) - if s in ins: - # return the info of the first NS that responded. - reply, fromaddr = s.recvfrom(1000) - return reply - if trace and i') - self.lock=Pyro.util.getLockObject() - self.role=role - self.otherNS=None - self.ignoreShutdown=False - if role in (Pyro.constants.NSROLE_PRIMARY, Pyro.constants.NSROLE_SECONDARY): - # for paired mode with identification, we need to remember the ident string - adapter=Pyro.protocol.getProtocolAdapter("PYRO") - adapter.setIdentification(identification) - self.identification=adapter.getIdentification() # grab the munged ident - # create default groups - self.createGroup(':'+'Pyro') - self.createGroup(Pyro.config.PYRO_NS_DEFAULTGROUP) - Log.msg("NameServer","Running in", - {Pyro.constants.NSROLE_SINGLE:"single", - Pyro.constants.NSROLE_PRIMARY:"primary", - Pyro.constants.NSROLE_SECONDARY:"secondary"}[self.role],"mode" ) - - def _initialResyncWithTwin(self, twinProxy): - if twinProxy: - try: - Log.msg("NameServer","Initial resync with other NS at",twinProxy.URI.address,"port",twinProxy.URI.port) - print "Initial Resync with other NS at",twinProxy.URI.address,"port",twinProxy.URI.port - # keep old NS (self) registration - oldNSreg=self.resolve(Pyro.constants.NAMESERVER_NAME) - proxyForMe=NameServerProxy(self.getProxy().URI,noconnect=1) - proxyForMe.adapter.setIdentification(self.identification,munge=False) # set pre-munged ident - self.root=twinProxy._resync(proxyForMe) - # reset self registration - try: - self.unregister(Pyro.constants.NAMESERVER_NAME) - except: - pass - self.register(Pyro.constants.NAMESERVER_NAME,oldNSreg) - self.otherNS=twinProxy - Log.msg("NameServer","database sync complete.") - print "Database synchronized." - except Pyro.errors.NamingError,x: - print x - raise - - def _removeTwinNS(self): - self.otherNS=None - - def register(self,name,URI): - (origname,name)=name,self.validateName(name) - URI=self.validateURI(URI) - with self.lock: - (group, name)=self.locateGrpAndName(name) - if len(name or "")<1: - raise Pyro.errors.NamingError('invalid name',origname) - if isinstance(group,NameValue): - raise Pyro.errors.NamingError('parent is no group', group.name) - try: - group.newleaf(name,URI) - Log.msg('NameServer','registered',name,'with URI',str(URI)) - self._dosynccall("register",origname,URI) - except KeyError: - Log.msg('NameServer','name already exists:',name) - raise Pyro.errors.NamingError('name already exists',name) - - def unregister(self,name): - (origname,name)=name,self.validateName(name) - with self.lock: - (group, name)=self.locateGrpAndName(name) - if len(name or "")<1: - raise Pyro.errors.NamingError('invalid name',origname) - try: - group.cutleaf(name) - Log.msg('NameServer','unregistered',name) - self._dosynccall("unregister",origname) - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except ValueError: - Log.msg('NameServer','attempt to remove a group:',name) - raise Pyro.errors.NamingError('is a group, not an object',name) - - def resolve(self,name): - # not thread-locked: higher performance and not necessary. - name=self.validateName(name) - try: - branch=self.getBranch(name) - if isinstance(branch,NameValue): - return branch.value - else: - Log.msg('NameServer','attempt to resolve groupname:',name) - raise Pyro.errors.NamingError('attempt to resolve groupname',name) - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except AttributeError: - raise Pyro.errors.NamingError('group not found',name) - - def flatlist(self): - # return a dump - with self.lock: - r=self.root.flatten() - for i in xrange(len(r)): - r[i]=(':'+r[i][0], r[i][1]) - return r - - def ping(self): - # Just accept a remote invocation. - # This method is used to check if NS is still running, - # and also by the locator if a direct lookup is needed. - pass - - # --- sync support (twin NS) - def _resync(self, twinProxy): - if self.role!=Pyro.constants.NSROLE_SINGLE: - Log.msg("NameServer","resync requested from NS at",twinProxy.URI.address,"port",twinProxy.URI.port) - print "Resync requested from NS at",twinProxy.URI.address,"port",twinProxy.URI.port - self.otherNS=twinProxy - with self.lock: - return self._getSyncDump() - else: - Log.warn("NameServer","resync requested from",twinProxy.URI,"but not running in correct mode") - raise Pyro.errors.NamingError("The (other) NS is not running in 'primary' or 'secondary' mode") - - # remotely called: - def _synccall(self, method, *args): - # temporarily disable the other NS - oldOtherNS, self.otherNS = self.otherNS, None - getattr(self, method) (*args) - self.otherNS = oldOtherNS - - def resync(self): - if self.role==Pyro.constants.NSROLE_SINGLE: - raise Pyro.errors.NamingError("NS is not running in 'primary' or 'secondary' mode") - if self.otherNS: - try: - self._initialResyncWithTwin(self.otherNS) - return - except Exception: - pass - raise Pyro.errors.NamingError("cannot resync: twin NS is unknown or unreachable") - - # local helper: - def _dosynccall(self, method, *args): - if self.role!=Pyro.constants.NSROLE_SINGLE and self.otherNS: - try: - self.otherNS._synccall(method, *args) - except Exception,x: - Log.warn("NameServer","ignored error in _synccall - but removing other NS",x) - self.otherNS=None - - # --- hierarchical naming support - def createGroup(self,groupname): - groupname=self.validateName(groupname) - if len(groupname)<2: - raise Pyro.errors.NamingError('invalid groupname', groupname) - with self.lock: - (parent,name)=self.locateGrpAndName(groupname) - if isinstance(parent,NameValue): - raise Pyro.errors.NamingError('parent is no group', groupname) - try: - parent.newbranch(name) - Log.msg('NameServer','created group',groupname) - self._dosynccall("createGroup",groupname) - except KeyError: - raise Pyro.errors.NamingError('group already exists',name) - - def deleteGroup(self,groupname): - groupname=self.validateName(groupname) - if groupname==':': - Log.msg('NameServer','attempt to deleteGroup root group') - raise Pyro.errors.NamingError('not allowed to delete root group') - with self.lock: - (parent,name)=self.locateGrpAndName(groupname) - try: - parent.cutbranch(name) - Log.msg('NameServer','deleted group',name) - self._dosynccall("deleteGroup",groupname) - except KeyError: - raise Pyro.errors.NamingError('group not found',groupname) - except ValueError: - raise Pyro.errors.NamingError('is no group',groupname) - - def list(self,groupname): - # not thread-locked: higher performance and not necessary. - if not groupname: - groupname=':' - groupname=self.validateName(groupname) - try: - return self.getBranch(groupname).list() - except KeyError: - raise Pyro.errors.NamingError('group not found',groupname) - except AttributeError: - raise Pyro.errors.NamingError('is no group',groupname) - - # --- meta info support - def setMeta(self, name, meta): - name=self.validateName(name) - try: - branch=self.getBranch(name) - branch.setMeta(meta) - self._dosynccall("setMeta",name,meta) - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except AttributeError: - raise Pyro.errors.NamingError('group not found',name) - - def getMeta(self, name): - name=self.validateName(name) - try: - branch=self.getBranch(name) - return branch.getMeta() - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except AttributeError: - raise Pyro.errors.NamingError('group not found',name) - - def _setSystemMeta(self, name, meta): - name=self.validateName(name) - try: - branch=self.getBranch(name) - branch.setSystemMeta(meta) - self._dosynccall("_setSystemMeta",name,meta) - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except AttributeError: - raise Pyro.errors.NamingError('group not found',name) - - def _getSystemMeta(self, name): - name=self.validateName(name) - try: - branch=self.getBranch(name) - return branch.getSystemMeta() - except KeyError: - raise Pyro.errors.NamingError('name not found',name) - except AttributeError: - raise Pyro.errors.NamingError('group not found',name) - - # --- shut down the server - def _shutdown(self): - if self.ignoreShutdown: - Log.msg('NameServer','received shutdown request, but shutdown is denied') - return 'Shutdown request denied' - else: - Log.msg('NameServer','received shutdown request, will shutdown shortly') - self.getDaemon().shutdown() - return "Will shut down shortly" - - # --- private methods follow - def _getSyncDump(self): - return self.root - - def locateGrpAndName(self,name): - # ASSUME name is absolute (from root) (which is required here) - idx=name.rfind('.') - if idx>=0: - # name is hierarchical - grpname=name[:idx] - name=name[idx+1:] - try: - return (self.getBranch(grpname), name) - except KeyError: - raise Pyro.errors.NamingError('(parent)group not found',grpname) - else: - # name is in root - return (self.root, name[1:]) - - def getBranch(self,name): - # ASSUME name is absolute (from root) (which is required here) - name=name[1:] - if name: - return reduce(lambda x,y: x[y], name.split('.'), self.root) - else: - return self.root - - def validateName(self,name): - if name[0]==':': - if ('' not in name.split('.')): - for i in name: - if ord(i)<33 or ord(i)>126 or i=='\\': - raise Pyro.errors.NamingError('invalid character(s) in name',name) - return name - else: - raise Pyro.errors.NamingError('invalid name',name) - else: - # name is not absolute. Make it absolute. - return _expandName(name) - - def validateURI(self,URI): - if isinstance(URI, Pyro.core.PyroURI): - return URI - try: - return Pyro.core.PyroURI(URI) - except: - raise Pyro.errors.NamingError('invalid URI',URI) - - def publishURI(self, uri, verbose=0): - # verbose is not used - always prints the uri. - uri=str(uri) - print 'URI is:',uri - try: - f=open(Pyro.config.PYRO_NS_URIFILE,'w') - f.write(uri+'\n'); f.close() - print 'URI written to:',Pyro.config.PYRO_NS_URIFILE - Log.msg('NameServer','URI written to',Pyro.config.PYRO_NS_URIFILE) - except: - Log.warn('NameServer','Couldn\'t write URI to',Pyro.config.PYRO_NS_URIFILE) - -############################################################################# -# -# NamedTree data type. Used for the hierarchical name server. -# -############################################################################# - -class NameSpaceSystemMeta(object): - def __init__(self, node, timestamp, owner): - self.timestamp=timestamp - self.owner=owner - if isinstance(node, NamedTree): - self.type=0 # tree - else: - self.type=1 # leaf - def __str__(self): - return "[type="+str(self.type)+" timestamp="+str(self.timestamp)+" owner="+str(self.owner)+"]" - - -# All nodes in the namespace (groups, or namevalue pairs--leafs) have -# a shared set of properties, most notably: meta information. -class NameSpaceNode(object): - def __init__(self, name, meta, owner): - self.name=name - self.systemMeta = NameSpaceSystemMeta(self, time.time(), owner) - self.userMeta = meta - def getMeta(self): - return self.userMeta - def getSystemMeta(self): - return self.systemMeta - def setMeta(self,meta): - self.userMeta=meta - def setSystemMeta(self,meta): - if isinstance(meta, NameSpaceSystemMeta): - self.systemMeta=meta - else: - raise TypeError("system meta info must be NameSpaceSystemMeta object") - -class NameValue(NameSpaceNode): - def __init__(self, name, value=None, meta=None, owner=None): - NameSpaceNode.__init__(self, name, meta, owner) - self.value=value - -class NamedTree(NameSpaceNode): - def __init__(self, name, meta=None, owner=None): - NameSpaceNode.__init__(self, name, meta, owner) - self.branches={} - def newbranch(self,name): - if name in self.branches.keys(): - raise KeyError,'name already exists' - t = NamedTree(name) - self.branches[name]=t - return t - def newleaf(self,name,value=None): - if name in self.branches.keys(): - raise KeyError,'name already exists' - l = NameValue(name,value) - self.branches[name]=l - return l - def cutleaf(self,name): - if isinstance(self.branches[name], NameValue): - del self.branches[name] - else: - raise ValueError,'not a leaf' - def cutbranch(self,name): - if isinstance(self.branches[name], NamedTree): - del self.branches[name] - else: - raise ValueError,'not a branch' - def __getitem__(self,name): - return self.branches[name] - def list(self): - l=[] - for (k,v) in self.branches.items(): - if isinstance(v, NamedTree): - l.append( (k,0) ) # tree - elif isinstance(v, NameValue): - l.append( (k,1) ) # leaf - else: - raise ValueError('corrupt tree') - return l - def flatten(self,prefix=''): - flat=[] - for (k,v) in self.branches.items(): - if isinstance(v, NameValue): - flat.append( (prefix+k, v.value) ) - elif isinstance(v, NamedTree): - flat.extend(v.flatten(prefix+k+'.')) - return flat - - - -############################################################################# -# -# The Persistent Name Server (a Pyro Object). -# This implementation uses the hierarchical file system to -# store the groups (as directories) and objects (as files). -# -############################################################################# - -_PNS_META_SUFFIX=".ns_meta" - -class PersistentNameServer(NameServer): - def __init__(self, dbdir=None, role=Pyro.constants.NSROLE_SINGLE, identification=None): - self.dbroot=os.path.join(Pyro.config.PYRO_STORAGE,dbdir or 'Pyro_NS_database') - self._initdb_1() - try: - NameServer.__init__(self, role=role, identification=identification) - except Pyro.errors.NamingError: - pass - self._initdb_2() - - def _initdb_1(self): - # root is not a NamedTree but a directory - try: - os.mkdir(self.dbroot) - except OSError,x: - if x.errno not in (errno.EEXIST, errno.EBUSY): - raise - def _initdb_2(self): - # make sure that the 2 initial groups (Pyro and Default) exist - try: self.createGroup(':'+'Pyro') - except Pyro.errors.NamingError: pass - try: self.createGroup(Pyro.config.PYRO_NS_DEFAULTGROUP) - except Pyro.errors.NamingError: pass - - def getDBDir(self): - return self.dbroot - - def _initialResyncWithTwin(self, twinProxy): - if twinProxy: - Log.msg("NameServer","Initial resync with other NS at",twinProxy.URI.address,"port",twinProxy.URI.port) - # keep old NS (self) registration - oldNSreg=self.resolve(Pyro.constants.NAMESERVER_NAME) - proxyForMe=NameServerProxy(self.getProxy().URI,noconnect=1) - proxyForMe.adapter.setIdentification(self.identification,munge=False) # set pre-munged ident - syncdump=twinProxy._resync(proxyForMe) - self.otherNS = None # temporarily disable twin NS ref - # clear the old database - Log.msg("NameServer","erasing old database",self.dbroot) - shutil.rmtree(self.dbroot) - self._initdb_1() # phase 2 (creation of default groups) is not needed here - Log.msg("NameServer","store sync database") - for group,smeta,umeta in syncdump[0]: - try: - if group!=':': - dirnam = self.translate(group) - os.mkdir(dirnam) - if smeta: - self._setSystemMeta(group,smeta) - if umeta: - self.setMeta(group,umeta) - except EnvironmentError,x: - Log.warn("NameServer","problem creating group",group,x) - for name,uri,smeta,umeta in syncdump[1]: - try: - origname,name=name,self.validateName(name) - fn=self.translate(name) - open(fn,'w').write(uri+'\n') - if smeta: - self._setSystemMeta(name,smeta) - if umeta: - self.setMeta(name,umeta) - except Pyro.errors.NamingError,x: - Log.warn("NameServer","problem registering name",name,x) - # reset registration of self - try: - self.unregister(Pyro.constants.NAMESERVER_NAME) - except: - pass - self.register(Pyro.constants.NAMESERVER_NAME,oldNSreg) - self.otherNS=twinProxy - Log.msg("NameServer","database sync complete.") - print "Database synchronized." - - def register(self,name,URI): - origname,name=name,self.validateName(name) - URI=self.validateURI(URI) - fn=self.translate(name) - with self.lock: - if os.access(fn,os.R_OK): - Log.msg('NameServer','name already exists:',name) - raise Pyro.errors.NamingError('name already exists',name) - try: - open(fn,'w').write(str(URI)+'\n') - self._dosynccall("register",origname,URI) - Log.msg('NameServer','registered',name,'with URI',str(URI)) - except IOError,x: - if x.errno==errno.ENOENT: - raise Pyro.errors.NamingError('(parent)group not found') - elif x.errno==errno.ENOTDIR: - raise Pyro.errors.NamingError('parent is no group') - else: - raise Pyro.errors.NamingError(str(x)) - - def unregister(self,name): - origname,name=name,self.validateName(name) - fn=self.translate(name) - with self.lock: - try: - os.remove(fn) - self._dosynccall("unregister",origname) - Log.msg('NameServer','unregistered',name) - except OSError,x: - if x.errno==errno.ENOENT: - raise Pyro.errors.NamingError('name not found',name) - elif x.errno==errno.EISDIR: - Log.msg('NameServer','attempt to remove a group:',name) - raise Pyro.errors.NamingError('is a group, not an object',name) - else: - raise Pyro.errors.NamingError(str(x)) - - def resolve(self,name): - # not thread-locked: higher performance and not necessary. - name=self.validateName(name) - fn = self.translate(name) - try: - return Pyro.core.PyroURI(open(fn).read()) - except IOError,x: - if x.errno==errno.ENOENT: - raise Pyro.errors.NamingError('name not found',name) - elif x.errno==errno.EISDIR: - Log.msg('NameServer','attempt to resolve groupname:',name) - raise Pyro.errors.NamingError('attempt to resolve groupname',name) - else: - raise Pyro.errors.NamingError(str(x)) - - def flatlist(self): - dbroot=self.translate(':') - with self.lock: - flat=[] - for f in self._filelist(dbroot,dbroot): - f=self._unescapefilename(f) - flat.append((f, self.resolve(f))) - return flat - - # --- hierarchical naming support - def createGroup(self,groupname): - groupname=self.validateName(groupname) - dirnam = self.translate(groupname) - with self.lock: - try: - os.mkdir(dirnam) - self._dosynccall("createGroup",groupname) - Log.msg('NameServer','created group',groupname) - except OSError,x: - if x.errno in (errno.EEXIST, errno.EBUSY): - raise Pyro.errors.NamingError('group already exists',groupname) - elif x.errno == errno.ENOENT: - raise Pyro.errors.NamingError('(parent)group not found') - else: - raise Pyro.errors.NamingError(str(x)) - - def deleteGroup(self,groupname): - groupname=self.validateName(groupname) - if groupname==':': - Log.msg('NameServer','attempt to deleteGroup root group') - raise Pyro.errors.NamingError('not allowed to delete root group') - dirnam = self.translate(groupname) - with self.lock: - if not os.access(dirnam,os.R_OK): - raise Pyro.errors.NamingError('group not found',groupname) - try: - shutil.rmtree(dirnam) - self._dosynccall("deleteGroup",groupname) - Log.msg('NameServer','deleted group',groupname) - except OSError,x: - if x.errno==errno.ENOENT: - raise Pyro.errors.NamingError('group not found',groupname) - elif x.errno==errno.ENOTDIR: - raise Pyro.errors.NamingError('is no group',groupname) - else: - raise Pyro.errors.NamingError(str(x)) - - def list(self,groupname): - if not groupname: - groupname=':' - groupname=self.validateName(groupname) - dirnam=self.translate(groupname) - with self.lock: - if os.access(dirnam,os.R_OK): - if os.path.isfile(dirnam): - raise Pyro.errors.NamingError('is no group',groupname) - else: - l = dircache.listdir(dirnam) - entries = [] - for e in l: - if e.endswith(_PNS_META_SUFFIX): - continue - else: - objname=self._unescapefilename(e) - if os.path.isdir(os.path.join(dirnam,e)): - entries.append((objname,0)) # dir has code 0 - else: - entries.append((objname,1)) # leaf has code 1 - return entries - raise Pyro.errors.NamingError('group not found',groupname) - - - # --- private methods follow - - def _getSyncDump(self): - def visitor(arg,dirname,names): - shortdirname=dirname[len(self.dbroot)+len(os.path.sep):] - if shortdirname.endswith(_PNS_META_SUFFIX): - return - name = ':'+shortdirname.replace(os.path.sep,'.') - smeta=self._getSystemMeta(name) - umeta=self.getMeta(name) - arg[0].append( (name, smeta,umeta) ) - for n in names: - if n.endswith(_PNS_META_SUFFIX): - continue - n=os.path.join(dirname,n) - if os.path.isfile(n): - v=open(n,'r').read().strip() - name=':'+(n[len(self.dbroot)+len(os.path.sep):]).replace(os.path.sep,'.') - smeta=self._getSystemMeta(name) - umeta=self.getMeta(name) - arg[1].append( (name, v, smeta,umeta) ) - result=( [], [] ) # (groups, names) - os.path.walk(self.dbroot, visitor, result) - return result - - def _unescapefilename(self, name): - parts=name.split('\\') - res=[parts[0]] - myappend=res.append - del parts[0] - for item in parts: - if item[1:2]: - try: - myappend(chr(int(item[:2], 16)) + item[2:]) - except ValueError: - myappend('\\' + item) - else: - myappend('\\' + item) - return "".join(res) - def _escapefilename(self,name): - name=name.replace(os.path.sep,'\\%02x' % ord(os.path.sep)) # escape path separators in the name - name=name.replace(':','\\%02x' % ord(':')) # also get rid of any ':' 's - return name - - # recursive file listing, output is like "find -type f" - # but using NS group separator chars - def _filelist(self,root,path): - try: - (filez,dirz) = Pyro.util.listdir(path) - except OSError: - raise Pyro.errors.NamingError('group not found') - - files=[] - for f in filez: - if f.endswith(_PNS_META_SUFFIX): - continue - elif path==root: - files.append(':'+f) - else: - p=path[len(root):].replace(os.sep, '.') - files.append(':'+p+'.'+f) - for d in dirz: - files.extend(self._filelist(root,os.path.join(path,d))) - return files - - # Pyro NS name to filesystem path translation - def translate(self,name): - if name[0]==':': - name=name[1:] - name=self._escapefilename(name) - args=[self.dbroot]+name.split('.') - return os.path.join(*args) - - def getBranch(self,name): - tr = self.translate(name) - if os.path.exists(tr): - return PersistentNameSpaceNode(filename=tr+_PNS_META_SUFFIX) - else: - raise Pyro.errors.NamingError('name not found',name) - -# XXX this is a bit of a hack. Only metadata is stored here, -# and it's only used from getBranch, which in turn is only used -# from the set/get meta functions. -class PersistentNameSpaceNode(NameSpaceNode): - def __init__(self, filename, name=None, meta=None, owner=None): - NameSpaceNode.__init__(self, name, meta, owner) - self.filename=filename - if not name: - # init from file - try: - (sysmeta, usermeta)=Pyro.util.getPickle().load(open(self.filename,"rb")) - NameSpaceNode.setSystemMeta(self, sysmeta) - NameSpaceNode.setMeta(self, usermeta) - except Exception: - pass # just use empty meta... - else: - self._writeToFile() - def setMeta(self,meta): - NameSpaceNode.setMeta(self, meta) - self._writeToFile() - def setSystemMeta(self,meta): - NameSpaceNode.setSystemMeta(self, meta) - self._writeToFile() - def _writeToFile(self): - Pyro.util.getPickle().dump( (self.getSystemMeta(), self.getMeta()) , open(self.filename,"wb"), Pyro.config.PYRO_PICKLE_FORMAT) - - - -############################################################################# -# -# The broadcast server which listens to broadcast requests of clients who -# want to discover our location, or send other system commands. -# -############################################################################# - - -class BroadcastServer(SocketServer.UDPServer): - - nameServerURI = '' # the Pyro URI of the Name Server - - def __init__(self, addr, bcRequestHandler,norange=0): - if norange: - portrange=1 - else: - portrange=Pyro.config.PYRO_PORT_RANGE - (location,port)=addr - for port in range(port, port+portrange): - try: - SocketServer.UDPServer.__init__(self, (location,port), bcRequestHandler) - return # got it! - except socket.error: - continue # try the next port in the list - raise # port range exhausted... re-raise the socket error. - - def server_activate(self): - self.requestValidator=lambda x,y: 1 # default: accept all - self.shutdown=0 # should the server loop stop? - self.preferredTimeOut=3.0 # preferred timeout for the server loop - - def setNS_URI(self,URI): - self.nameServerURI=str(URI) - def setRequestValidator(self, validator): - self.requestValidator=validator - def keepRunning(self, keep): - self.ignoreShutdown = keep # ignore shutdown requests (i.e. keep running?) - - def bcCallback(self,ins): - for i in ins: - i.handle_request() - - def verify_request(self, req, addr): - return self.requestValidator(req, addr) - - def getServerSocket(self): - return self.socket - - -class bcRequestHandler(SocketServer.BaseRequestHandler): - def handle(self): - Log.msg('BroadcastServer','incoming request from',str(self.client_address[0])) - # request is a simple string - cmd = self.request[0] - if cmd==NS_SYSCMD_LOCATION: - # somebody wants to know our location, give them our URI - self.request[1].sendto(self.server.nameServerURI,self.client_address) - elif cmd==NS_SYSCMD_SHUTDOWN: - # we should die!? - if self.server.ignoreShutdown: - Log.msg('BroadcastServer','Shutdown ignored.') - self.request[1].sendto('Shutdown request denied',self.client_address) - else: - Log.msg('BroadcastServer','Shutdown received.') - print 'BroadcastServer received shutdown request... will shutdown shortly...' - self.request[1].sendto('Will shut down shortly',self.client_address) - self.server.shutdown=1 - else: - Log.warn('BroadcastServer','Invalid command ignored:',cmd) - -# The default BC request validator... accepts everything -# You must subclass this for your own validators -class BCReqValidator(object): - def __call__(self, req, addr): - (cmd,self.sock)=req - self.addr=addr - if cmd==NS_SYSCMD_LOCATION: - return self.acceptLocationCmd() - elif cmd==NS_SYSCMD_SHUTDOWN: - return self.acceptShutdownCmd() - else: - return 0 - def reply(self,msg): - self.sock.sendto(msg,self.addr) - def acceptLocationCmd(self): - return 1 - def acceptShutdownCmd(self): - return 1 - - -############################################################################# - -class NameServerStarter(object): - def __init__(self, identification=None): - Pyro.core.initServer() - self.persistent=False - self.identification=identification - self.started = Pyro.util.getEventObject() - def start(self, *args, **kwargs): # see _start for allowed arguments - kwargs["startloop"]=1 - self._start( *args, **kwargs ) - def initialize(self, *args, **kwargs): # see _start for allowed arguments - kwargs["startloop"]=0 - self._start( *args, **kwargs ) - def getServerSockets(self): - result=self.daemon.getServerSockets() - if self.bcserver: - result.append(self.bcserver.getServerSocket()) - return result - def waitUntilStarted(self,timeout=None): - self.started.wait(timeout) - return self.started.isSet() - def _start(self,hostname=None, nsport=None, bcport=0, keep=0, persistent=0, dbdir=None, Guards=(None,None), allowmultiple=0, dontlookupother=0, verbose=0, startloop=1, role=(Pyro.constants.NSROLE_SINGLE,None), bcaddr=None, nobroadcast=False ): - if nsport is None: - if role[0]==Pyro.constants.NSROLE_SECONDARY: - nsport=Pyro.config.PYRO_NS2_PORT - else: - nsport=Pyro.config.PYRO_NS_PORT - if not bcport: - if role[0]==Pyro.constants.NSROLE_SECONDARY: - bcport=Pyro.config.PYRO_NS2_BC_PORT - else: - bcport=Pyro.config.PYRO_NS_BC_PORT - if not bcaddr: - if role[0]==Pyro.constants.NSROLE_SECONDARY: - bcaddr=Pyro.config.PYRO_NS2_BC_ADDR - else: - bcaddr=Pyro.config.PYRO_NS_BC_ADDR - otherNSuri=None - - try: - if not dontlookupother: - retries=Pyro.config.PYRO_BC_RETRIES - timeout=Pyro.config.PYRO_BC_TIMEOUT - Pyro.config.PYRO_BC_RETRIES=1 - Pyro.config.PYRO_BC_TIMEOUT=0.7 - try: - otherNSuri=NameServerLocator().detectNS(bcaddr=bcaddr) - except Pyro.errors.PyroError: - pass - else: - print 'The Name Server appears to be already running on this segment.' - print '(host:',otherNSuri.address,' port:',otherNSuri.port,')' - if allowmultiple: - print 'WARNING: starting another Name Server in the same segment!' - elif role[0] in (Pyro.constants.NSROLE_PRIMARY, Pyro.constants.NSROLE_SECONDARY): - pass - else: - msg='Cannot start multiple Name Servers in the same network segment.' - print msg - raise Pyro.errors.NamingError(msg) - - if role[0]!=Pyro.constants.NSROLE_SINGLE: - print "Locating twin NameServer." - # Do this before starting our own daemon, otherwise possible deadlock! - # This step is done here to make pretty certain that one of both name - # servers finds the other either *now*, or else later on (below). - # If we omit this step here, deadlock may occur on the attempt below! - otherNS = self.locateTwinNS(role, otherNSuri) - if otherNS: - print "Found twin NameServer at",otherNS.URI.address,"port",otherNS.URI.port - role=(role[0], otherNS) - - Pyro.config.PYRO_BC_RETRIES=retries - Pyro.config.PYRO_BC_TIMEOUT=timeout - daemon = Pyro.core.Daemon(host=hostname, port=nsport,norange=1) - except Pyro.errors.DaemonError,x: - print 'The Name Server appears to be already running on this host.' - print '(or somebody else occupies our port,',nsport,')' - if hostname: - print 'It could also be that the address \''+hostname+'\' is not correct.' - print 'Name Server was not started!' - raise - - if self.identification: - daemon.setAllowedIdentifications([self.identification]) - print 'Requiring connection authentication.' - if Guards[0]: - daemon.setNewConnectionValidator(Guards[0]) - - if persistent: - ns=PersistentNameServer(dbdir,role=role[0], identification=self.identification) - daemon.useNameServer(ns) - NS_URI=daemon.connectPersistent(ns,Pyro.constants.NAMESERVER_NAME) - self.persistent=True - else: - ns=NameServer(role=role[0], identification=self.identification) - daemon.useNameServer(ns) - NS_URI=daemon.connect(ns,Pyro.constants.NAMESERVER_NAME) - self.persistent=False - - self.bcserver=None - if nobroadcast: - Log.msg('NS daemon','Not starting broadcast server due to config option') - if verbose: - print "Not starting broadcast server." - else: - # Try to start the broadcast server. Binding on the magic "" - # address should work, but on some systems (windows) it doesn't. - # Therefore we first try "", if that fails, try "". - # If any address override is in place, use that ofcourse. - notStartedError="" - msg = daemon.validateHostnameAndIP() - if msg: - Log.msg('NS daemon','Not starting broadcast server because of issue with daemon IP address.') - if verbose: - print "Not starting broadcast server." - else: - if bcaddr: - broadcastAddresses=[bcaddr] - else: - broadcastAddresses=["", "", "255.255.255.255"] - for bc_bind in broadcastAddresses: - try: - self.bcserver = BroadcastServer((bc_bind,bcport),bcRequestHandler,norange=1) - break - except socket.error,x: - notStartedError += str(x)+" " - if not self.bcserver: - print 'Cannot start broadcast server. Is somebody else occupying our broadcast port?' - print 'The error(s) were:',notStartedError - print '\nName Server was not started!' - raise Pyro.errors.NamingError("cannot start broadcast server") - - if Guards[1]: - self.bcserver.setRequestValidator(Guards[1]) - self.bcserver.keepRunning(keep) - - if keep: - ns.ignoreShutdown=True - if verbose: - print 'Will ignore shutdown requests.' - else: - ns.ignoreShutdown=False - if verbose: - print 'Will accept shutdown requests.' - - print 'Name server listening on:',daemon.sock.getsockname() - if self.bcserver: - print 'Broadcast server listening on:',self.bcserver.socket.getsockname() - message = daemon.validateHostnameAndIP() - if message: - print "\nWARNING:",message,"\n" - - if Guards[0] or Guards[1]: - if verbose: - print 'Using security plugins:' - if Guards[0]: - clazz=Guards[0].__class__ - if verbose: - print ' NS new conn validator =',clazz.__name__,'from', clazz.__module__, ' ['+sys.modules.get(clazz.__module__).__file__+']' - elif verbose: print ' default NS new conn validator' - if Guards[1]: - clazz=Guards[1].__class__ - if verbose: - print ' BC request validator =',clazz.__name__,'from', clazz.__module__, ' ['+sys.modules.get(clazz.__module__).__file__+']' - elif verbose: print ' default BC request validator' - - ns.publishURI(NS_URI,verbose) - - if self.bcserver: - self.bcserver.setNS_URI(NS_URI) - Log.msg('NS daemon','This is the Pyro Name Server.') - if persistent: - Log.msg('NS daemon','Persistent mode, database is in',ns.getDBDir()) - if verbose: - print 'Persistent mode, database is in',ns.getDBDir() - Log.msg('NS daemon','Starting on',daemon.hostname,'port', daemon.port) - if self.bcserver: - Log.msg('NS daemon','Broadcast server on port',bcport) - else: - Log.msg('NS daemon','No Broadcast server') - - if role[0]==Pyro.constants.NSROLE_PRIMARY: - print "Primary", - elif role[0]==Pyro.constants.NSROLE_SECONDARY: - print "Secondary", - print 'Name Server started.' - - # If we run in primary or secondary mode, resynchronize - # the NS database with the other name server. - # Try again to look it up if it wasn't found before. - - if role[0]!=Pyro.constants.NSROLE_SINGLE: - if not otherNS: - # try again to contact the other name server - print "Locating twin NameServer again." - otherNS = self.locateTwinNS(role, otherNSuri) - role=(role[0], otherNS) - if otherNS: - # finally got it, resync! - print "Found twin NameServer at",otherNS.URI.address,"port",otherNS.URI.port - ns._initialResyncWithTwin(otherNS) - - self.started.set() # signal that we've started (for external threads) - - self.daemon=daemon - if os.name!="java": - daemon.setTimeout(20) - - if startloop: - # I use a timeout here otherwise you can't break gracefully on Windoze - try: - if self.bcserver: - daemon.requestLoop(lambda s=self: not s.bcserver.shutdown, - self.bcserver.preferredTimeOut,[self.bcserver],self.bcserver.bcCallback) - if self.bcserver.shutdown: - self.shutdown(ns) - else: - daemon.requestLoop() - except KeyboardInterrupt: - Log.warn('NS daemon','shutdown on user break signal') - print 'Shutting down on user break signal.' - self.shutdown(ns) - except: - try: - (exc_type, exc_value, exc_trb) = sys.exc_info() - out = ''.join(traceback.format_exception(exc_type, exc_value, exc_trb)[-5:]) - Log.error('NS daemon', 'Unexpected exception, type',exc_type, - '\n--- partial traceback of this exception follows:\n', - out,'\n--- end of traceback') - print '*** Exception occured!!! Partial traceback:' - print out - print '*** Resuming operations...' - finally: - del exc_type, exc_value, exc_trb # delete frame refs to allow proper GC - - Log.msg('NS daemon','Shut down gracefully.') - print 'Name Server gracefully stopped.' - - - def locateTwinNS(self, role, otherNSuri): - try: - retries=Pyro.config.PYRO_BC_RETRIES - timeout=Pyro.config.PYRO_BC_TIMEOUT - Pyro.config.PYRO_BC_RETRIES=1 - Pyro.config.PYRO_BC_TIMEOUT=1 - try: - if role[1]: - (host,port)=(role[1]+':').split(':')[:2] - if len(port)==0: - port=None - else: - port=int(port) - otherNS=NameServerLocator(self.identification).getNS(host,port,trace=0) - else: - if otherNSuri: - otherNS=NameServerLocator(self.identification).getNS(host=otherNSuri.address, port=otherNSuri.port, trace=0) - else: - if role[0]==Pyro.constants.NSROLE_PRIMARY: - port=Pyro.config.PYRO_NS2_BC_PORT - else: - port=Pyro.config.PYRO_NS_BC_PORT - otherNS=NameServerLocator(self.identification).getNS(host=None,port=port,trace=0) - Log.msg("NameServerStarted","Found twin NS at",otherNS.URI) - return otherNS - except Pyro.errors.ConnectionDeniedError,x: - raise - except Exception,x: - print "WARNING: Cannot find twin NS yet: ",x - Log.msg("NameServerStarter","Cannot find twin NS yet:",x) - return None - finally: - Pyro.config.PYRO_BC_RETRIES=retries - Pyro.config.PYRO_BC_TIMEOUT=timeout - - - def handleRequests(self,timeout=None): - # this method must be called from a custom event loop - if self.bcserver: - self.daemon.handleRequests(timeout, [self.bcserver], self.bcserver.bcCallback) - if self.bcserver.shutdown: - self.shutdown() - else: - self.daemon.handleRequests(timeout) - - def shutdown(self, ns=None): - if ns: - # internal shutdown call with specified NS object - daemon=ns.getDaemon() - else: - # custom shutdown call w/o specified NS object, use stored instance - daemon=self.daemon - ns=daemon.getNameServer() - del self.daemon - ns._removeTwinNS() - if not self.persistent: - daemon.disconnect(ns) # clean up nicely only if not running in persistent mode - if self.bcserver: - self.bcserver.shutdown=1 - daemon.shutdown() - -def main(argv): - Args = Pyro.util.ArgParser() - Args.parse(argv,'hkmrvxn:p:b:c:d:s:i:1:2:') - if Args.hasOpt('h'): - print 'Usage: pyro-ns [-h] [-k] [-m] [-r] [-x] [-n hostname] [-p port] [-b bcport] [-c bcaddr]' - print ' [-i identification] [-d [databaselocation]] [-s securitymodule]' - print ' [-1 [host:port]] [-2 [host:port]] [-v]' - print ' where -p = NS server port (0 for auto)' - print ' -n = non-default hostname to bind on' - print ' -b = NS broadcast port' - print ' -c = NS broadcast address override' - print ' -x = do not start a broadcast listener' - print ' -m = allow multiple instances in network segment' - print ' -r = don\'t attempt to find already existing nameservers' - print ' -k = keep running- do not respond to shutdown requests' - print ' -d = use persistent database, provide optional storage directory' - print ' -s = use given python module with security plugins' - print ' -i = specify the required authentication ID' - print ' -1 = runs this NS as primary, opt. specify where secondary is' - print ' -2 = runs this NS as secondary, opt. specify where primary is' - print ' -v = verbose output' - print ' -h = print this help' - raise SystemExit - host = Args.getOpt('n',None) - port = Args.getOpt('p',None) - if port: - port=int(port) - bcport = int(Args.getOpt('b',0)) - bcaddr = Args.getOpt('c',None) - nobroadcast = Args.hasOpt('x') - - role=Pyro.constants.NSROLE_SINGLE - roleArgs=None - if Args.hasOpt('1'): - role=Pyro.constants.NSROLE_PRIMARY - roleArgs=Args.getOpt('1') - if Args.hasOpt('2'): - role=Pyro.constants.NSROLE_SECONDARY - roleArgs=Args.getOpt('2') - - ident = Args.getOpt('i',None) - verbose = Args.hasOpt('v') - keep=Args.hasOpt('k') - allowmultiple=Args.hasOpt('m') - dontlookupother=Args.hasOpt('r') - - try: - dbdir = Args.getOpt('d') - persistent = 1 - except KeyError: - persistent = 0 - dbdir = None - - try: - secmod = __import__(Args.getOpt('s'),locals(),globals()) - Guards = (secmod.NSGuard(), secmod.BCGuard()) - except ImportError,x: - print 'Error loading security module:',x - print '(is it in your python import path?)' - raise SystemExit - except KeyError: - secmod = None - Guards = (None,None) - - Args.printIgnored() - if Args.args: - print 'Ignored arguments:', ' '.join(Args.args) - - print '*** Pyro Name Server ***' - if ident: - starter=NameServerStarter(identification=ident) - else: - starter=NameServerStarter() - - try: - starter.start(host,port,bcport,keep,persistent,dbdir,Guards,allowmultiple,dontlookupother,verbose,role=(role,roleArgs),bcaddr=bcaddr,nobroadcast=nobroadcast) - except (Pyro.errors.NamingError, Pyro.errors.DaemonError),x: - # this error has already been printed, just exit. - pass - - -# allow easy starting of the NS by using python -m -if __name__=="__main__": - main(sys.argv[1:]) diff --git a/modules/Pyro/nsc.py b/modules/Pyro/nsc.py deleted file mode 100644 index 759e0f66..00000000 --- a/modules/Pyro/nsc.py +++ /dev/null @@ -1,231 +0,0 @@ -############################################################################# -# -# Pyro Name Server Control Tool -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import Pyro.constants -import Pyro.util -import Pyro.core -import Pyro.errors -from Pyro.naming import NameServerLocator -from Pyro.errors import NamingError, ConnectionDeniedError, PyroError -from Pyro.protocol import getHostname - -class PyroNSControl(object): - def args(self, args): - self.Args = Pyro.util.ArgParser() - self.Args.parse(args,'h:p:c:i:') - self.Args.printIgnored() - if self.Args.args: - cmd = self.Args.args[0] - del self.Args.args[0] - return cmd - return None - - def connect(self, sysCmd=None): - host = self.Args.getOpt('h',None) - bcaddr = self.Args.getOpt('c',None) - port = int(self.Args.getOpt('p', 0)) - ident = self.Args.getOpt('i',None) - if port==0: - port=None - - locator = NameServerLocator(identification=ident) - if not sysCmd: - self.NS = locator.getNS(host,port,1,bcaddr=bcaddr) - print 'NS is at',self.NS.URI.address,'('+(getHostname(self.NS.URI.address) or '??')+') port',self.NS.URI.port - self.NS._setIdentification(ident) - else: - result = locator.sendSysCommand(sysCmd,host,port,1,bcaddr=bcaddr) - print 'Result from system command',sysCmd,':',result - - def handleError(self, msg, exc): - print "## %s: " % msg, - if isinstance(exc.args, (list, tuple)): - print "; ".join(exc.args[:-1]), - else: - print exc.args, - print " ##" - - def ping(self): - self.connect() - self.NS.ping() - print 'NS is up and running!' - - def listall(self): - self.connect() - flat=self.NS.flatlist() - flat.sort() - print '-------------- START DATABASE' - for (name,val) in flat: - print name,' --> ',str(val) - print '-------------- END' - - def list(self): - self.connect() - if not self.Args.args: - # list the current group - print self.NS.fullName(''),'-->', - self.printList(self.NS.list(None)) - else: - # list all subpaths - for n in self.Args.args: - print self.NS.fullName(n),' -->', - try: - self.printList(self.NS.list(n)) - except NamingError,x: - self.handleError("can't list", x) - - def printList(self,list): - list.sort() - print '(', - for (n,t) in list: - if t==0: - print '['+n+']', - elif t==1: - print n, - print ')' - - def resolve(self): - self.connect() - if not self.Args.args: - print 'No arguments, nothing to resolve' - else: - for n in self.Args.args: - print n,' -->', - try: - print self.NS.resolve(n) - except NamingError,x: - self.handleError("can't resolve", x) - - def register(self): - self.connect() - try: - self.NS.register(self.Args.args[0],self.Args.args[1]) - uri=Pyro.core.PyroURI(self.Args.args[1]) - print 'registered',self.Args.args[0],' --> ',uri - except NamingError,x: - self.handleError('Error from NS',x) - except IndexError: - print 'Register needs 2 args: name URI' - - def remove(self): - self.connect() - for n in self.Args.args: - try: - self.NS.unregister(n) - print n,'unregistered.' - except NamingError,x: - self.handleError("Can't unregister", x) - - def creategroup(self): - self.connect() - for n in self.Args.args: - try: - self.NS.createGroup(n) - print n,'created.' - except NamingError,x: - self.handleError("Can't create group '"+n+"'",x) - - def deletegroup(self): - self.connect() - for n in self.Args.args: - try: - self.NS.deleteGroup(n) - print n,'deleted.' - except NamingError,x: - self.handleError("Can't delete group '"+n+"'",x) - - def showmeta(self): - self.connect() - if not self.Args.args: - print 'No arguments, nothing to show meta of' - for n in self.Args.args: - try: - print "META INFO OF",self.NS.fullName(n) - print "system meta info :",self.NS._getSystemMeta(n) - print " user meta info :",self.NS.getMeta(n) - except NamingError,x: - self.handleError("Can't get metadata",x) - - def setmeta(self): - self.connect() - try: - if len(self.Args.args)>2: - raise IndexError - name=self.Args.args[0] - meta=self.Args.args[1] - self.NS.setMeta(name,meta) - print "Metadata of",name,"set." - except IndexError: - print 'Setmeta needs 2 args: name metadata' - - def resync(self): - self.connect() - self.NS.resync() - print 'resync done' - - def shutdown(self): - self.connect(sysCmd='shutdown') - - -def usage(): - print 'PyroNS control program - usage is as follows;' - print '>> pyro-nsc [-h host] [-p port] [-c bcaddr] [-i identification] command [args...]' - print 'where command is one of: ping, list, listall, resolve, register, remove, creategroup, deletegroup, showmeta, setmeta, resync, shutdown' - print ' host is the host where the NS should be contacted' - print ' port is the non-standard Pyro NS broadcast port' - print ' (if host is specified, it is the Pyro port instead)' - print ' bcaddr allows you to override the broadcast address' - print ' identification is the authentication ID to connect to the server' - print ' args... depend on the command.' - raise SystemExit - -def main(argv): - - ctrl = PyroNSControl() - cmd=ctrl.args(argv) - - if not cmd: - usage() - - try: - # nice construct to map commands to the member function to call - call= { 'ping': ctrl.ping, - 'list': ctrl.list, - 'listall': ctrl.listall, - 'resolve': ctrl.resolve, - 'register': ctrl.register, - 'remove': ctrl.remove, - 'creategroup': ctrl.creategroup, - 'deletegroup': ctrl.deletegroup, - 'shutdown': ctrl.shutdown, - 'showmeta': ctrl.showmeta, - 'setmeta': ctrl.setmeta, - 'resync': ctrl.resync } [cmd] - - except KeyError: - usage() - try: - Pyro.core.initClient(banner=0) - call() - except ConnectionDeniedError,arg: - print 'Could not connect to the server:',arg - if str(arg)==Pyro.constants.deniedReasons[Pyro.constants.DENIED_SECURITY]: - print "Supply correct authentication ID?" - except PyroError,arg: - print 'There is a problem:',arg - except Exception,x: - print 'CAUGHT ERROR, printing Pyro traceback >>>>>>',x - print ''.join(Pyro.util.getPyroTraceback(x)) - print '<<<<<<< end of Pyro traceback' - - -# allow easy usage with python -m -if __name__=="__main__": - import sys - main(sys.argv[1:]) diff --git a/modules/Pyro/protocol.py b/modules/Pyro/protocol.py deleted file mode 100644 index 416d2595..00000000 --- a/modules/Pyro/protocol.py +++ /dev/null @@ -1,1290 +0,0 @@ -############################################################################# -# -# Pyro Protocol Adapters -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -from __future__ import with_statement -import socket, struct, os, time, sys, hmac, types, random, errno, select -import imp, marshal, new, __builtin__ -try: - import hashlib - md5=hashlib.md5 -except ImportError: - import md5 - md5=md5.md5 -import Pyro.constants, Pyro.util - -from Pyro.errors import * -from Pyro.errors import _InternalNoModuleError -pickle = Pyro.util.getPickle() -Log = Pyro.util.Log - -if Pyro.util.supports_multithreading(): - from threading import Thread,currentThread - _has_threading = 1 -else: - _has_threading = 0 - -if Pyro.util.supports_compression(): - import zlib - _has_compression = 1 -else: - _has_compression = 0 - - -try: - from M2Crypto import SSL - from M2Crypto.SSL import SSLError - if _has_threading: - import M2Crypto - M2Crypto.threading.init() -except ImportError: - class SSLError(Exception): pass - -ERRNO_RETRIES=[errno.EINTR, errno.EAGAIN, errno.EWOULDBLOCK, errno.EINPROGRESS] -if hasattr(errno, "WSAEINTR"): - ERRNO_RETRIES.append(errno.WSAEINTR) -if hasattr(errno, "WSAEWOULDBLOCK"): - ERRNO_RETRIES.append(errno.WSAEWOULDBLOCK) -if hasattr(errno, "WSAEINPROGRESS"): - ERRNO_RETRIES.append(errno.WSAEINPROGRESS) - -#------ Get the hostname (possibly of other machines) (returns None on error) -def getHostname(ip=None): - try: - if ip: - (hn,alias,ips) = socket.gethostbyaddr(ip) - return hn - else: - return socket.gethostname() - except socket.error: - return None - -#------ Get IP address (return None on error) -def getIPAddress(host=None): - try: - return socket.gethostbyname(host or getHostname()) - except socket.error: - return None - - -#------ Socket helper functions for sending and receiving data correctly. - - -# process optional timeout on socket. -# notice the check for M2Crypto SSL sockets: if there's data pending, -# a select on them will fail. So we avoid calling select in that case. -def _sock_timeout_send(sock, timeout): - if timeout and (not hasattr(sock,'pending') or sock.pending()==0): - r,w,e=safe_select([],[sock],[],timeout) - if not w: - raise TimeoutError('connection timeout sending') - -def _sock_timeout_recv(sock, timeout): - if timeout and (not hasattr(sock,'pending') or sock.pending()==0): - r,w,e=safe_select([sock],[],[],timeout) - if not r: - raise TimeoutError('connection timeout receiving') - -# Receive a precise number of bytes from a socket. Raises the -# ConnectionClosedError if that number of bytes was not available. -# (the connection has probably been closed then). -# Never will this function return an empty message (if size>0). -# We need this because 'recv' isn't guaranteed to return all desired -# bytes in one call, for instance, when network load is high. -# Use a list of all chunks and join at the end: faster! -# Handle EINTR states (interrupted system call) by just retrying. -def sock_recvmsg(sock, size, timeout=0): - while True: - try: - return _recv_msg(sock,size,timeout) - except socket.timeout: - raise TimeoutError("connection timeout receiving") - except socket.error,x: - if x.args[0] == errno.EINTR or (hasattr(errno, 'WSAEINTR') and x.args[0] == errno.WSAEINTR): - # interrupted system call, just retry - continue - raise ConnectionClosedError('connection lost: %s' % x) - except SSLError,x: - raise ConnectionClosedError('connection lost: %s' % x) - -# select the optimal recv() implementation -if hasattr(socket,"MSG_WAITALL") and not Pyro.config.PYRO_BROKEN_MSGWAITALL: - def _recv_msg(sock,size,timeout): - _sock_timeout_recv(sock,timeout) - try: - chunk=sock.recv(size, socket.MSG_WAITALL) # receive all data in one call - except TypeError: - # M2Crypto sock.recv() doesn't support MSG_WAITALL parameter - return __recv_msg_compat(sock,size,timeout) - else: - if len(chunk)!=size: - err=ConnectionClosedError('connection lost') - err.partialMsg=chunk # store the message that was received until now - raise err - return chunk -else: - def _recv_msg(sock,size,timeout): - _sock_timeout_recv(sock, timeout) - return __recv_msg_compat(sock,size,timeout) - -def __recv_msg_compat(sock,size,timeout): # compatibility implementation for non-MSG_WAITALL / M2Crypto - msglen=0 - msglist=[] - # Receive chunks of max. 60kb size: - # (rather arbitrary limit, but it avoids memory/buffer problems on certain OSes -- VAX/VMS, Windows) - while msglen", "exec") - else: - code = marshal.loads(module[8:]) - - importer=None - try: - loaded = 0 - # XXX probably want maxtries here... - while not loaded: - # install a custom importer to intercept any extra needed modules - # when executing the module code just obtained from the server - imp.acquire_lock() - importer = agent_import(__builtin__.__import__) - __builtin__.__import__ = importer - imp.release_lock() - - try: - exec code in mod.__dict__ - loaded = 1 - except ImportError: - mname = importer.name - if importer is not None: - __builtin__.__import__ = importer.orig_import - importer = None - - # XXX probably want maxrecursion here... - self._retrieveCode(mname, level+1) - - finally: - if importer is not None: - __builtin__.__import__ = importer.orig_import - finally: - imp.release_lock() # release the global import lock - - - def _remoteInvocationMobileCode(self, method, flags, *args): - # special trimmed-down version for mobile code methods (no locking etc) - body=pickle.dumps((self.URI.objectID,method,flags,args),Pyro.config.PYRO_PICKLE_FORMAT) - sock_sendmsg(self.conn.sock, self.createMsg(body), self.timeout) - ver,answer,pflags = self.receiveMsg(self.conn,1) - if answer is None: - raise ProtocolError('incorrect answer received') - answer=pickle.loads(answer) - if isinstance(answer,PyroExceptionCapsule): - if isinstance(answer.excObj,_InternalNoModuleError): - # server couldn't load module, supply it - return self.processMissingModuleError(answer.excObj, method, flags, args) - else: - # we have an encapsulated exception, raise it again. - answer.raiseEx() - return answer - - def remoteInvocation(self, method, flags, *args): - with self.lock: - # only 1 thread at a time may use this connection to call a remote method - try: - self.__pyrocallbusy=True - return self._remoteInvocation(method, flags, *args) - self.__pyrocallbusy=False - finally: - if self.__pyrocallbusy: - # the call has been aborted before completion, close the connection - # to avoid corrupt transfers on the next call - self.release() - - def _remoteInvocation(self, method, flags, *args): - if 'conn' not in self.__dict__.keys(): - Log.error('PYROAdapter','no connection available in remoteinvocation') - raise ProtocolError('no connection available in remoteinvocation') - if method in self.onewayMethods: - flags |= Pyro.constants.RIF_Oneway - body=pickle.dumps((self.URI.objectID,method,flags,args),Pyro.config.PYRO_PICKLE_FORMAT) - try: - sock_sendmsg(self.conn.sock, self.createMsg(body), self.timeout) - except (socket.error, ProtocolError, KeyboardInterrupt): - # Communication error during write. To avoid corrupt transfers, we close the connection. - # Otherwise we might receive the previous reply as a result of a new methodcall! - # Special case for keyboardinterrupt: people pressing ^C to abort the client - # may be catching the keyboardinterrupt in their code. We should probably be on the - # safe side and release the proxy connection in this case too, because they might - # be reusing the proxy object after catching the exception... - self.release() - raise - else: - if flags & Pyro.constants.RIF_Oneway: - self.__pyrocallbusy=False - return None # no answer required, return immediately - ver,answer,pflags = self.receiveMsg(self.conn,1) # read the server's response, send no further replies - self.__pyrocallbusy=False - if answer is None: - raise ProtocolError('incorrect answer received') - - # Try to get the answer from the server. - # If there are import problems, try to get those modules from - # the server too (if mobile code is enabled). - if not Pyro.config.PYRO_MOBILE_CODE: - answer = pickle.loads(answer) - else: - importer=None - try: - imp.acquire_lock() - loaded = 0 - # XXX maxtries here... - while not loaded: - # install a custom importer to intercept any extra needed modules - # when unpickling the answer just obtained from the server - imp.acquire_lock() - importer = agent_import(__builtin__.__import__) - __builtin__.__import__ = importer - imp.release_lock() - - try: - answer = pickle.loads(answer) - loaded = 1 - except ImportError: - mname = importer.name - if importer is not None: - __builtin__.__import__ = importer.orig_import - importer = None - self._retrieveCode(mname, 0) - - finally: - if importer is not None: - __builtin__.__import__ = importer.orig_import - imp.release_lock() - - if isinstance(answer,PyroExceptionCapsule): - if isinstance(answer.excObj,_InternalNoModuleError): - # server couldn't load the module, send it - return self.processMissingModuleError(answer.excObj, method, flags, args) - else: - # we have an encapsulated exception, raise it again. - answer.raiseEx() - return answer - - def processMissingModuleError(self, errorinfo, method, flags, args): - # server couldn't load module, supply it - # XXX this code is ugly. and duplicated in remote_retrieve_code in core.py - Log.msg('PYROAdapter',"server can't load module: "+errorinfo.modulename) - try: - importmodule=new.module('-agent-import-') - mname=errorinfo.modulename - # not used: fromlist=errorinfo.fromlist - try: - exec 'import '+mname in importmodule.__dict__ - except ImportError: - Log.error('PYROAdapter','Server wanted a non-existing module:',mname) - raise PyroError('Server wanted a non-existing module',mname) - m=eval('importmodule.'+mname) - bytecode=None - if hasattr(m,"_PYRO_bytecode"): - # use the bytecode that was put there earlier, - # this avoids recompiles of the source .py if we don't have .pyc bytecode available - bytecode=m._PYRO_bytecode - else: - # try to load the module's compiled source, or the real .py source if that fails. - # note that the source code (.py) is opened with universal newline mode - if not hasattr(m,"__file__"): - raise PyroError("cannot read module source code",mname) - (filebase,ext)=os.path.splitext(m.__file__) - if ext.startswith(".PY"): - exts = ( (".PYO","rb"), (".PYC","rb"), (".PY","rU") ) # uppercase - else: - exts = ( (".pyo","rb"), (".pyc","rb"), (".py","rU") ) # lowercase - for ext,mode in exts: - try: - bytecode=open(filebase+ext, mode).read() - break - except EnvironmentError: - pass - if bytecode: - Log.msg('PYROAdapter',"sending module to server: "+mname) - self._remoteInvocationMobileCode("remote_supply_code",0,mname, bytecode, self.conn.sock.getsockname()) - # retry the method invocation - return self._remoteInvocation(* (method, flags)+args) # use the non-locking call - Log.error("PYROAdapter","cannot read module source code for module:", mname) - raise PyroError("cannot read module source code",mname) - finally: - del importmodule - - # (private) receives a socket message, returns: (protocolver, message, protocolflags) - def receiveMsg(self,conn,noReply=0): - try: - msg=sock_recvmsg(conn.sock, self.headerSize, self.timeout) - (hid, ver, hsiz, bsiz, pflags, crc) = struct.unpack(self.headerFmt,msg) - # store in the connection what pickle method this is - if pflags&PFLG_XMLPICKLE_GNOSIS: - conn.pflags|=PFLG_XMLPICKLE_GNOSIS - if ver!=self.version: - msg='incompatible protocol version' - Log.error('PYROAdapter',msg) - if not noReply: - # try to report error to client, but most likely the connection will terminate: - self.returnException(conn, ProtocolError(msg)) - raise ProtocolError(msg) - if hid!=self.headerID or hsiz!=self.headerSize: - msg='invalid header' - Log.error('PYROAdapter',msg) - Log.error('PYROAdapter','INVALID HEADER DETAILS: ',conn,( hid, ver, hsiz, bsiz,pflags)) - if not noReply: - # try to report error to client, but most likely the connection will terminate: - self.returnException(conn, ProtocolError(msg), shutdown=1) - raise ProtocolError(msg) - body=sock_recvmsg(conn.sock, bsiz, self.timeout) - if pflags&PFLG_CHECKSUM: - if _has_compression: - if crc!=zlib.adler32(body): - msg='checksum error' - Log.error('PYROAdapter',msg) - if not noReply: - self.returnException(conn, ProtocolError(msg)) - raise ProtocolError(msg) - else: - raise ProtocolError('cannot perform checksum') - if pflags&PFLG_COMPRESSED: - if _has_compression: - body=zlib.decompress(body) - else: - # We received a compressed message but cannot decompress. - # Is this really a server error? We now throw an exception on the server... - raise ProtocolError('compression not supported') - return ver,body,pflags - except (socket.error, ProtocolError, KeyboardInterrupt),x: - # Communication error during read. To avoid corrupt transfers, we close the connection. - # Otherwise we might receive the previous reply as a result of a new methodcall! - # Special case for keyboardinterrupt: people pressing ^C to abort the client - # may be catching the keyboardinterrupt in their code. We should probably be on the - # safe side and release the proxy connection in this case too, because they might - # be reusing the proxy object after catching the exception... - self.release() - raise - - def _unpickleRequest(self, pflags, body): - if pflags&PFLG_XMLPICKLE_GNOSIS: - if Pyro.config.PYRO_XML_PICKLE=='gnosis': - return pickle.loads(body) - else: - return Pyro.util.getXMLPickle('gnosis').loads(body) - elif Pyro.config.PYRO_XML_PICKLE: - Log.error('PYROAdapter','xml pickle required, got other pickle') - raise ProtocolError('xml pickle required, got other pickle') - else: - return pickle.loads(body) - - def handleInvocation(self,daemon,conn): - ver,body,pflags = self.receiveMsg(conn) - if not body: - # something went wrong even before receiving the full message body - return - if ver!=self.version: - Log.error('PYROAdapter','incompatible protocol version') - self.returnException(conn, ProtocolError('incompatible protocol version')) - return - - # Unpickle the request, which is a tuple: - # (object ID, method name, flags, (arg1,arg2,...)) - importer=fromlist=None - try: - if Pyro.config.PYRO_MOBILE_CODE: - # install a custom importer to intercept any extra needed modules - # when unpickling the request just obtained from the client - try: - imp.acquire_lock() - importer=agent_import(__builtin__.__import__) - __builtin__.__import__=importer - req=self._unpickleRequest(pflags, body) - finally: - __builtin__.__import__=importer.orig_import - imp.release_lock() - else: - # no mobile code; just unpickle the stuff without a custom importer. - req=self._unpickleRequest(pflags, body) - - if type(req)!=tuple or len(req)!=4 or type(req[3])!=tuple: - # sanity check failed - raise ProtocolError("invalid request data format") - - except ImportError,x: - if Pyro.config.PYRO_MOBILE_CODE: - # return a special exception that will be processed by client; - # it will call the internal 'remote_supply_code' member - if importer: - modname=importer.name - fromlist=importer.fromlist - else: - modname = x.args[0][16:] - fromlist=None - self.returnException(conn, _InternalNoModuleError(modname,fromlist),0) # don't shutdown! - else: - Log.error('PYROAdapter','code problem with incoming object: '+str(x)) - self.returnException(conn, NoModuleError(* x.args)) - return - - try: - # find the object in the implementation database of our daemon - o=daemon.getLocalObject(req[0]) - except (KeyError, TypeError) ,x: - Log.warn('PYROAdapter','Invocation to unknown object ignored:',x) - self.returnException(conn, ProtocolError('unknown object ID')) - return - else: - # Do the invocation. We are already running in our own thread. - if req[2]&Pyro.constants.RIF_Oneway and Pyro.config.PYRO_ONEWAY_THREADED and daemon.threaded: - # received a oneway call, run this in its own thread. - thread=Thread(target=self._handleInvocation2, args=(daemon,req,pflags,conn,o,True)) - thread.setDaemon(1) # thread must exit at program termination. - thread.localStorage=LocalStorage() # set local storage for the new thread - thread.start() - else: - # not oneway or not in threaded mode, just do the invocation synchronously - self._handleInvocation2(daemon,req,pflags,conn,o,False) - - def _handleInvocation2(self, daemon, req, pflags, conn, obj, mustInitTLS=False): - if mustInitTLS: - daemon.initTLS(daemon.getLocalStorage()) - try: - flags=req[2] - importer=None - if not Pyro.config.PYRO_MOBILE_CODE: - res = obj.Pyro_dyncall(req[1],flags,req[3]) # (method,flags,args) - else: - try: - # install a custom importer to intercept any extra needed modules - # when executing the remote method. (using the data passed in by - # the client may trigger additional imports) - imp.acquire_lock() - importer=agent_import(__builtin__.__import__) - __builtin__.__import__=importer - res = obj.Pyro_dyncall(req[1],flags,req[3]) # (method,flags,args) - finally: - __builtin__.__import__=importer.orig_import - imp.release_lock() - - if flags&Pyro.constants.RIF_Oneway: - return # no result, return immediately - # reply the result to the caller - if pflags&PFLG_XMLPICKLE_GNOSIS: - replyflags=PFLG_XMLPICKLE_GNOSIS - if Pyro.config.PYRO_XML_PICKLE=='gnosis': - body=pickle.dumps(res,Pyro.config.PYRO_PICKLE_FORMAT) - else: - body=Pyro.util.getXMLPickle('gnosis').dumps(res,Pyro.config.PYRO_PICKLE_FORMAT) - else: - replyflags=0 - body=pickle.dumps(res,Pyro.config.PYRO_PICKLE_FORMAT) - sock_sendmsg(conn.sock, self.createMsg(body,replyflags),self.timeout) - except ImportError,ix: - if Pyro.config.PYRO_MOBILE_CODE: - # Return a special exception that will be processed by client; - # it will call the internal 'remote_supply_code' member. - # We have to use this seemingly complex way to signal the client - # to supply us some code, but it is only a proxy! We can't *call* it! - if importer: - # grab the import info from our importer - name=importer.name - fromlist=importer.fromlist - else: - # XXX the importerror sometimes doesn't contain the package :-( - name=ix.args[0][16:] - fromlist=None - Log.msg('PYROAdapter','failed to import',name) - self.returnException(conn, _InternalNoModuleError(name,fromlist),0) # don't shutdown! - else: - Log.error('PYROAdapter','code problem with incoming object: '+str(ix)) - self.returnException(conn, NoModuleError(* ix.args)) - except Exception: - # Handle the exception. Pass in if it was a oneway call, - # those calls don't need any response to be sent. - daemon.handleError(conn, bool(flags&Pyro.constants.RIF_Oneway)) - - def returnException(self, conn, exc, shutdown=1, args=None): - # return an encapsulated exception to the client - if conn.pflags&PFLG_XMLPICKLE_GNOSIS: - pic=Pyro.util.getXMLPickle('gnosis') - else: - pic=pickle - try: - body=pic.dumps(PyroExceptionCapsule(exc,args),Pyro.config.PYRO_PICKLE_FORMAT) - except Exception,x: - # hmm, pickling the exception failed... pickle the string instead - body=pic.dumps(PyroExceptionCapsule(PyroError(str(x)),args),Pyro.config.PYRO_PICKLE_FORMAT) - sock_sendmsg(conn.sock, self.createMsg(body),self.timeout) - if shutdown: - conn.close() - - def handleConnection(self, conn, tcpserver): - # Server-side connection stuff. Use auth code from tcpserver's validator. - try: - # Validate the connection source (host) immediately, - # if it's ok, send authentication challenge, and read identification data to validate. - (ok,reasonCode) = tcpserver.newConnValidator.acceptHost(tcpserver,conn) - if ok: - challenge=tcpserver.newConnValidator.createAuthChallenge(tcpserver,conn) - if len(challenge)!=self.AUTH_CHALLENGE_SIZE: - raise ValueError("Auth challenge must be exactly "+`self.AUTH_CHALLENGE_SIZE`+" bytes") - sock_sendmsg(conn.sock, self.createMsg(challenge),self.timeout) - ver,body,pflags = self.receiveMsg(conn) - # only process the message if it makes a bit of sense - if ver==self.version and body.startswith(self.connectMSG): - token=body[len(self.connectMSG):] - (ok,reasonCode) = tcpserver.newConnValidator.acceptIdentification(tcpserver,conn,token,challenge) - if ok: - self.sendAccept(conn) - conn.connected=1 - return 1 - else: - self.sendDeny(conn,reasonCode) - else: - self.sendDeny(conn,reasonCode) - return 0 - except ProtocolError: - # ignore the message if it caused protocol errors - return 0 - -# import wrapper class to help with importing remote modules -class agent_import(object): - def __init__(self, orig_import): - self.orig_import=orig_import - def __call__(self,name,iglobals={},ilocals={},fromlist=None, *rest, **krest): - if os.name=="java": - # workaround for odd Jython bug, iglobals and ilocals may not exist in this scope...(?!) - iglobals=vars().get("iglobals",{}) - ilocals=vars().get("ilocals",{}) - # save the import details: - self.name=name # note: this must be a str object - self.fromlist=fromlist - return self.orig_import(name,iglobals,ilocals,fromlist, *rest, **krest) - -# -# The SSL adapter that handles SSL connections instead of regular sockets. -# -class PYROSSLAdapter(PYROAdapter): - def __init__(self): - PYROAdapter.__init__(self) - try: - from M2Crypto import SSL - except ImportError: - raise ProtocolError('SSL not available') - - self.ctx = SSL.Context('sslv23') - if Pyro.config.PYROSSL_KEY: - keyfile = os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_KEY) - else: - keyfile = None - self.ctx.load_cert(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CERT), - keyfile) - self.ctx.load_client_ca(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CA_CERT)) - self.ctx.load_verify_info(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CA_CERT)) - self.ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,10) - self.ctx.set_allow_unknown_ca(1) - Log.msg('PYROSSLAdapter','SSL Context initialized') - - def setTimeout(self, timeout): - PYROAdapter.setTimeout(self, timeout) - - def bindToURI(self,URI): - if URI.protocol not in ('PYROSSL','PYROLOCSSL'): - Log.error('PYROSSLAdapter','incompatible protocol in URI:',URI.protocol) - raise ProtocolError('incompatible protocol in URI') - with self.lock: # only 1 thread at a time can bind the URI - try: - self.URI=URI - sock = SSL.Connection(self.ctx,socket.socket(socket.AF_INET, socket.SOCK_STREAM)) - if not Pyro.config.PYROSSL_POSTCONNCHECK: - sock.postConnectionCheck=None - _connect_socket(sock, URI.address, URI.port, self.timeout) - conn=TCPConnection(sock, sock.getpeername()) - # receive the authentication challenge string, and use that to build the actual identification string. - authChallenge=self.recvAuthChallenge(conn) - # reply with our ident token, generated from the ident passphrase and the challenge - msg = self._sendConnect(sock,self.newConnValidator.createAuthToken(self.ident, authChallenge, conn.addr, self.URI, None) ) - if msg==self.acceptMSG: - self.conn=conn - self.conn.connected=1 - Log.msg('PYROSSLAdapter','connected to',str(URI)) - if URI.protocol=='PYROLOCSSL': - self.resolvePYROLOC_URI("PYROSSL") # updates self.URI - elif msg[:len(self.denyMSG)]==self.denyMSG: - try: - raise ConnectionDeniedError(Pyro.constants.deniedReasons[int(msg[-1])]) - except (KeyError,ValueError): - raise ConnectionDeniedError('invalid response') - except socket.error: - Log.msg('PYROSSLAdapter','connection failed to URI',str(URI)) - raise ProtocolError('connection failed') - - def _sendConnect(self, sock, ident): - return PYROAdapter._sendConnect(self, sock, ident) - - -def getProtocolAdapter(protocol): - if protocol in ('PYRO', 'PYROLOC'): - return PYROAdapter() - elif protocol in ('PYROSSL', 'PYROLOCSSL'): - return PYROSSLAdapter() - else: - Log.error('getProtocolAdapter','unsupported protocol:',protocol) - raise ProtocolError('unsupported protocol') - - -#-------- TCPConnection object for TCPServer class -class TCPConnection(object): - def __init__(self, sock, addr): - self.sock = sock - set_sock_keepalive(self.sock) # enable tcp/ip keepalive on this socket - self.addr = addr - self.connected=0 # connected? - self.pflags=0 # protocol flags - def __del__(self): - self.close() - def fileno(self): - return self.sock.fileno() - def close(self): - #self.sock.makefile().flush() - self.sock.close() - self.connected=0 - def shutdown(self): - #self.sock.makefile().flush() - self.sock.shutdown(2) # no further send/receives - def __str__(self): - return 'TCPConnection with '+str(self.addr)+' connected='+str(self.connected) - -#-------- The New Connection Validators: -#-------- DefaultConnValidator checks max number of connections & identification -#-------- and ident check is done using hmac-md5 secure hash of passphrase+challenge. -#-------- Contains client- & server-side auth code. -class DefaultConnValidator(object): - def __init__(self): - self.setAllowedIdentifications(None) # default=accept all (None means all!) - def acceptHost(self,daemon,connection): - if len(daemon.connections)>=Pyro.config.PYRO_MAXCONNECTIONS: - Log.msg('DefaultConnValidator','Too many open connections, closing',connection,'#conns=',len(daemon.connections)) - return (0, Pyro.constants.DENIED_SERVERTOOBUSY) - return (1,0) - def acceptIdentification(self, daemon, connection, token, challenge): - if "all" in self.allowedIDs: - return (1,0) - for authid in self.allowedIDs[:]: - if self.createAuthToken(authid, challenge, connection.addr, None, daemon) == token: - return (1,0) - Log.warn('DefaultConnValidator','connect authentication failed on conn ',connection) - return (0,Pyro.constants.DENIED_SECURITY) - def createAuthToken(self, authid, challenge, peeraddr, URI, daemon): - # Called from both client and server, is used to be able to validate the token. - # client: URI & peeraddr provided, daemon is None - # server: URI is None, peeraddr and daemon provided. - # Return hmac-md5 secure hash of our authentication phrase & the challenge. - return hmac.new(challenge, authid).digest() - def createAuthChallenge(self, tcpserver, conn): - # Server-side only, when new connection comes in. - # Challenge is secure hash of: server IP, process ID, timestamp, random value - # (NOTE: MUST RETURN EXACTLY AUTH_CHALLENGE_SIZE(=16) BYTES!) - try: - pid=os.getpid() - except: - pid=id(self) # at least jython has no getpid() - string = '%s-%d-%.20f-%.20f' %(str(getIPAddress()), pid, time.time(), random.random()) - return md5(string).digest() - def mungeIdent(self, ident): - # munge the identification string into something else that's - # not easily guessed or recognised, like the md5 hash: - return md5(ident).digest() - def setAllowedIdentifications(self, ids): - if ids is not None: - if type(ids) in (types.TupleType, types.ListType): - self.allowedIDs=map(self.mungeIdent, ids) # don't store ids themselves - else: - raise TypeError("ids must be a list") - else: - self.allowedIDs=["all"] # trick: allow all incoming authentications. - - -#-------- basic SSL connection validator, a specialized default validator. -class BasicSSLValidator(DefaultConnValidator): - def __init__(self): - DefaultConnValidator.__init__(self) - def acceptHost(self,daemon,connection): - (ok,code) = DefaultConnValidator.acceptHost(self, daemon, connection) - if ok: - peercert=connection.sock.get_peer_cert() - return self.checkCertificate(peercert) - return (ok,code) - def checkCertificate(self,cert): - # do something interesting with the cert here, in a subclass :) - if cert is None: - return (0,Pyro.constants.DENIED_SECURITY) - return (1,0) - - - -#-------- Helper class for local storage. -class LocalStorage(object): - def __init__(self): - self.caller=None - -#-------- TCPServer base class - - -class TCPServer(object): - def __init__(self, port, host='', threaded=_has_threading,prtcol='PYRO'): - self._ssl_server = 0 - self.connections = [] # connection threads - self.initTLS=lambda tls: None # default do-nothing func - if host: - socket.gethostbyname(host) # validate hostname - try: - if prtcol=='PYROSSL': - try: - from M2Crypto import SSL - except ImportError: - raise ProtocolError('SSL not available') - try: - self.ctx = SSL.Context('sslv23') - if Pyro.config.PYROSSL_KEY: - keyfile = os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_KEY) - else: - keyfile = None - self.ctx.load_cert(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CERT), - keyfile) - self.ctx.load_client_ca(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CA_CERT)) - self.ctx.load_verify_info(os.path.join(Pyro.config.PYROSSL_CERTDIR, Pyro.config.PYROSSL_CA_CERT)) - self.ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,10) - self.ctx.set_allow_unknown_ca(1) - self._ssl_server = 1 - Log.msg('TCPServer','SSL Context initialized') - except: - Log.warn('TCPServer','SSL Context could not be initialized !!!') - self.setNewConnectionValidator(BasicSSLValidator()) - else: - self.setNewConnectionValidator(DefaultConnValidator()) - - # create server socket for new connections - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - set_reuse_addr(self.sock) - set_sock_no_inherit(self.sock) - self.sock.bind((host,port)) - self.sock.listen(Pyro.config.PYRO_TCP_LISTEN_BACKLOG) - if self._ssl_server: - self.sock = SSL.Connection(self.ctx,self.sock) # wrap server socket as SSL socket - # rest of members - self.threaded = threaded - self.mustShutdown=0 # global shutdown - self.localStorage=LocalStorage() # TLS for systems that don't have threads - return - except socket.error,msg: - raise ProtocolError(msg) - Log.msg('TCPServer','initialized') - - def __del__(self): - self.closedown(nolog=1) - - def setInitTLS(self, initTLS): - if not callable(initTLS): - raise TypeError("initTLS must be callable object") - self.initTLS=initTLS - # if in single thread mode, (re-)init the TLS right away. - if not Pyro.config.PYRO_MULTITHREADED: - self.initTLS(self.localStorage) - - def closedown(self, nolog=0): - # explicit closedown request - if len(self.connections)>0: - if not nolog: - Log.warn('TCPServer','Shutting down but there are still',len(self.connections),'active connections') - for c in self.connections[:]: - if isinstance(c,TCPConnection): - c.close() - if isinstance(c,Thread): - c.join() - self.connections=[] - if hasattr(self,'sock'): - self.sock.close() - del self.sock - - def setNewConnectionValidator(self,validator): - if not isinstance(validator, DefaultConnValidator): - raise TypeError("validator must be specialization of DefaultConnValidator") - self.newConnValidator=validator - def getNewConnectionValidator(self): - return self.newConnValidator - - def connectionHandler(self, conn): - # Handle the connection and all requests that arrive on it. - # This is only called in multithreading mode. - self.initTLS(self.getLocalStorage()) - try: - if self.getAdapter().handleConnection(conn, self): - Log.msg('TCPServer','new connection ',conn, ' #conns=',len(self.connections)) - while not self.mustShutdown: - try: - if not conn.connected: - # connection has been closed in the meantime! - raise ConnectionClosedError() - self.handleInvocation(conn) - except ConnectionClosedError: - # client went away. Exit immediately - self.removeConnection(conn) - return - except (PyroExceptionCapsule, Exception): - self.handleError(conn) - else: - # log entry has already been written by newConnValidator - self.removeConnection(conn) - finally: - # exiting thread. - self._removeFromConnectionList(None) - - def _removeFromConnectionList(self, obj): - if self.threaded and currentThread: - obj=currentThread() - try: - self.connections.remove(obj) - except ValueError: - pass - - - # this is the preferred way of dealing with the request loop. - def requestLoop(self, condition=lambda:1, timeout=3, others=[], callback=None): - while condition() and not self.mustShutdown: - self.handleRequests(timeout,others,callback) - - def handleRequests(self, timeout=None, others=[], callback=None): - if others and not callback: - raise ProtocolError('callback required') - if self.threaded: - self._handleRequest_Threaded(timeout,others,callback) - else: - self._handleRequest_NoThreads(timeout,others,callback) - - def _handleRequest_NoThreads(self,timeout,others,callback): - # self.connections is used to keep track of TCPConnections - socklist = self.connections+[self.sock]+others - ins,outs,exs = safe_select(socklist,[],[],timeout) - if self.sock in ins: - # it was the server socket, new incoming connection - ins.remove(self.sock) - if self._ssl_server: - try: - csock, addr = self.sock.accept() - #if not Pyro.config.PYROSSL_POSTCONNCHECK: - # csock.postConnectionCheck=None - except SSL.SSLError,error: - Log.warn('TCPServer','SSL error: '+str(error)) - return - else: - csock, addr = self.sock.accept() - - conn=TCPConnection(csock,addr) - if self.getAdapter().handleConnection(conn, self): - Log.msg('TCPServer','new connection ',conn, ' #conns=',len(self.connections)) - self.connections.append(conn) - else: - # connection denied, log entry has already been written by newConnValidator - self.removeConnection(conn) - - for c in ins[0:]: - if isinstance(c,TCPConnection): - ins.remove(c) - try: - self.handleInvocation(c) - if not c.connected: - self.removeConnection(c) - except ConnectionClosedError: - # client went away. - self.removeConnection(c) - except: - self.handleError(c) - - if ins and callback: - # the 'others' must have fired... - callback(ins) - - # def handleInvocation(self, conn): .... abstract method (implemented in subclass) - - - def _handleRequest_Threaded(self,timeout,others,callback): - # self.connections is used to keep track of connection Threads - socklist = [self.sock]+others - ins,outs,exs = safe_select(socklist,[],[],timeout) - if self.sock in ins: - # it was the server socket, new incoming connection - if self._ssl_server: - try: - csock, addr = self.sock.accept() - #if not Pyro.config.PYROSSL_POSTCONNCHECK: - # csock.postConnectionCheck=None - except SSL.SSLError,error: - Log.warn('TCPServer','SSL error: '+str(error)) - return - else: - csock, addr = self.sock.accept() - - conn=TCPConnection(csock,addr) - thread=Thread(target=self.connectionHandler, args=(conn,)) - thread.setDaemon(1) # thread must exit at program termination. - thread.localStorage=LocalStorage() - self.connections.append(thread) - thread.start() - elif callback: - # the 'others' must have fired... - callback(ins) - - def getLocalStorage(self): - # return storage object for this thread. - if self.threaded: - return currentThread().localStorage - else: - return self.localStorage - - # to be called if a dropped connection is detected: - def removeConnection(self, conn): - conn.close() - self._removeFromConnectionList(conn) - Log.msg('TCPServer','removed connection ',conn,' #conns=',len(self.connections)) - - # to be called to stop all connections and shut down. - def shutdown(self): - self.mustShutdown=1 - - def getAdapter(self): - raise NotImplementedError,'must be overridden to return protocol adapter' - def handleError(self,conn,onewaycall=False): - raise NotImplementedError,'must be overridden' - - def getServerSockets(self): - if self.threaded: - return [self.sock] - else: - return map(lambda conn: conn.sock, self.connections)+[self.sock] - -# Sometimes _selectfunction() raises an select.error exception with the EINTR -# errno flag set, which basically tells the caller to try again later. -# This safe_select method works around this case and indeed just tries again. -_selectfunction=select.select -if os.name=="java": - from select import cpython_compatible_select as _selectfunction -def safe_select(r,w,e,timeout=None): - delay=timeout - while True: - try: - # Make sure we don't delay longer than requested - start=time.time() - if delay is not None: - return _selectfunction(r,w,e,delay) - else: - return _selectfunction(r,w,e) - except select.error,x: - if x.args[0] == errno.EINTR or (hasattr(errno, 'WSAEINTR') and x.args[0] == errno.WSAEINTR): - delay=max(0.0,time.time()-start) - else: - raise diff --git a/modules/Pyro/test/__init__.py b/modules/Pyro/test/__init__.py deleted file mode 100644 index 6f66f15a..00000000 --- a/modules/Pyro/test/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# just to make this a package. diff --git a/modules/Pyro/test/echoserver.py b/modules/Pyro/test/echoserver.py deleted file mode 100644 index 3c188b56..00000000 --- a/modules/Pyro/test/echoserver.py +++ /dev/null @@ -1,101 +0,0 @@ -############################################################################# -# -# Pyro Echo Server, for test purposes -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import sys -import time -from threading import Thread -import Pyro.core -import Pyro.naming -import Pyro.errors - -class EchoServer(Pyro.core.ObjBase): - verbose=False - def echo(self, args): - if self.verbose: - print ("%s - echo: %s" % (time.asctime(), args)) - return args - def error(self): - if self.verbose: - print ("%s - error: generating exception" % time.asctime()) - return 1//0 # division by zero error - - -class NameServer(Thread): - def __init__(self, hostname): - Thread.__init__(self) - self.setDaemon(1) - self.starter = Pyro.naming.NameServerStarter() - self.hostname=hostname - def run(self): - self.starter.start(hostname=self.hostname, dontlookupother=True) - def waitUntilStarted(self): - return self.starter.waitUntilStarted() - def getHostAndPort(self): - d=self.starter.daemon - return d.hostname, d.port - def shutdown(self): - self.starter.shutdown() - -def startNameServer(host): - ns=NameServer(host) - ns.start() - ns.waitUntilStarted() - return ns - -def main(args): - from optparse import OptionParser - parser=OptionParser() - parser.add_option("-H","--host", default="localhost", help="hostname to bind server on (default=localhost)") - parser.add_option("-p","--port", type="int", default=0, help="port to bind server on") - parser.add_option("-n","--naming", action="store_true", default=False, help="register with nameserver") - parser.add_option("-N","--nameserver", action="store_true", default=False, help="also start a nameserver") - parser.add_option("-v","--verbose", action="store_true", default=False, help="verbose output") - options,args = parser.parse_args(args) - - nameserver=None - if options.nameserver: - options.naming=True - nameserver=startNameServer(options.host) - print("") - - print ("Starting Pyro's built-in test echo server.") - d=Pyro.core.Daemon(host=options.host, port=options.port, norange=True) - echo=EchoServer() - echo.verbose=options.verbose - objectName=":Pyro.test.echoserver" - if options.naming: - host,port=None,None - if nameserver is not None: - host,port=nameserver.getHostAndPort() - ns=Pyro.naming.NameServerLocator().getNS(host,port) - try: - ns.createGroup(":Pyro.test") - except Pyro.errors.NamingError: - pass - d.useNameServer(ns) - if options.verbose: - print ("using name server at %s" % ns.URI) - else: - if options.verbose: - print ("not using a name server.") - uri=d.connect(echo, objectName) - print ("object name = %s" % objectName) - print ("echo uri = %s" % uri) - print ("echo uri = PYROLOC://%s:%d/%s" % (d.hostname, d.port, objectName)) - print ("echoserver running.") - try: - d.requestLoop() - finally: - d.shutdown(disconnect=True) - if nameserver is not None: - #nameserver.shutdown() - pass - -if __name__=="__main__": - main(sys.argv[1:]) diff --git a/modules/Pyro/util.py b/modules/Pyro/util.py deleted file mode 100644 index c87a022a..00000000 --- a/modules/Pyro/util.py +++ /dev/null @@ -1,562 +0,0 @@ -############################################################################# -# -# Pyro Utilities -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -from __future__ import with_statement -import os, sys, traceback -import time, random, linecache -import socket, binascii -import Pyro.constants -from Pyro.util2 import * # bring in 'missing' util functions - - -# bogus lock class, for systems that don't have threads. -class BogusLock(object): - def __enter__(self): - return self - def __exit__(self, exc_type, exc_val, exc_tb): - pass - def acquire(self): pass - def release(self): pass - -def getLockObject(): - if supports_multithreading(): # XXX - from threading import Lock - return Lock() - else: - return BogusLock() -def getRLockObject(): - if supports_multithreading(): - from threading import RLock - return RLock() - else: - return BogusLock() - - -# bogus event class, for systems that don't have threads -class BogusEvent(object): - def __init__(self): - self.flag=0 - def isSet(self): return self.flag==1 - def set(self): self.flag=1 - def clear(self): self.flag=0 - def wait(self,timeout=None): - raise RuntimeError("cannot wait in non-threaded environment") - -def getEventObject(): - if supports_multithreading(): - from threading import Event - return Event() - else: - return BogusEvent() - - -# Logging stuff. - -# Select the logging implementation to use! -if Pyro.config.PYRO_STDLOGGING: - # new-style logging using logging module, python 2.3+ - import logging, logging.config - cfgfile=Pyro.config.PYRO_STDLOGGING_CFGFILE - if not os.path.isabs(cfgfile): - Pyro.config.PYRO_STDLOGGING_CFGFILE=os.path.join(Pyro.config.PYRO_STORAGE, cfgfile) - cfgfile=Pyro.config.PYRO_STDLOGGING_CFGFILE - externalConfig=0 - try: - open(cfgfile).close() - logging.config.fileConfig(cfgfile) - externalConfig=1 - except IOError,x: - # Config file couldn't be read! Use builtin config. - # First make the logfiles absolute paths: - if not os.path.isabs(Pyro.config.PYRO_LOGFILE): - Pyro.config.PYRO_LOGFILE=os.path.join(Pyro.config.PYRO_STORAGE, Pyro.config.PYRO_LOGFILE) - if not os.path.isabs(Pyro.config.PYRO_USER_LOGFILE): - Pyro.config.PYRO_USER_LOGFILE=os.path.join(Pyro.config.PYRO_STORAGE, Pyro.config.PYRO_USER_LOGFILE) - - class LoggerBase(object): - if externalConfig: - def __init__(self): - self.logger=logging.getLogger(self._getLoggerName()) - else: - def __init__(self): - self.logger=logging.getLogger("Pyro."+str(id(self))) # each time a different logger ... - self.setLevel(self._getPyroLevel()) - handler=logging.FileHandler(self._logfile()) - handler.setFormatter(logging.Formatter("%(asctime)s [%(process)d:%(thread)d] ** %(levelname)s ** %(message)s")) - self.logger.addHandler(handler) - def setLevel(self, pyroLevel): - if pyroLevel>=3: - self.logger.setLevel(logging.DEBUG) - elif pyroLevel>=2: - self.logger.setLevel(logging.WARN) - elif pyroLevel>=1: - self.logger.setLevel(logging.ERROR) - else: - self.logger.setLevel(999) - def msg(self,source,*args): - self.setLevel(self._getPyroLevel()) - if not args: - (args, source) = ([source], "N/A") - self.logger.info("%s ** %s", source, reduce(lambda x,y: str(x)+' '+str(y),args)) - def warn(self,source,*args): - self.setLevel(self._getPyroLevel()) - if not args: - (args, source) = ([source], "N/A") - self.logger.warn("%s ** %s", source, reduce(lambda x,y: str(x)+' '+str(y),args)) - def error(self,source,*args): - self.setLevel(self._getPyroLevel()) - if not args: - (args, source) = ([source], "N/A") - self.logger.error("%s ** %s", source, reduce(lambda x,y: str(x)+' '+str(y),args)) - def raw(self,ztr): - self.logger.log(999,ztr.rstrip()) - def _logfile(self): - raise NotImplementedError,'must override' - def _getlevel(self): - raise NotImplementedError,'must override' - - - class SystemLogger(LoggerBase): - def _getLoggerName(self): - return "Pyro.system" - def _getPyroLevel(self): - return Pyro.config.PYRO_TRACELEVEL - def _logfile(self): - return Pyro.config.PYRO_LOGFILE - - class UserLogger(LoggerBase): - def _getLoggerName(self): - return "Pyro.user" - def _getPyroLevel(self): - return Pyro.config.PYRO_USER_TRACELEVEL - def _logfile(self): - return Pyro.config.PYRO_USER_LOGFILE - -else: - # classic Pyro logging. - - class LoggerBase(object): - # Logger base class. Subclasses must override _logfile and _checkTraceLevel. - def __init__(self): - self.lock=getLockObject() - def msg(self,source,*args): - if self._checkTraceLevel(3): self._trace('NOTE',source, args) - def warn(self,source,*args): - if self._checkTraceLevel(2): self._trace('WARN',source, args) - def error(self,source,*args): - if self._checkTraceLevel(1): self._trace('ERR!',source, args) - def raw(self,str): - with self.lock: - f=open(self._logfile(),'a') - f.write(str) - f.close() - def _trace(self,typ,source, arglist): - with self.lock: - if not arglist: - (arglist, source) = ([source], "N/A") - try: - tf=open(self._logfile(),'a') - try: - pid=os.getpid() - pidinfo=" ["+str(os.getpid()) - except: - pidinfo=" [" # at least jython has no getpid() - if supports_multithreading(): - pidinfo+=":"+threading.currentThread().getName() - pidinfo+="] " - tf.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+ - pidinfo+'** '+typ+' ** '+str(source)+' ** '+reduce(lambda x,y: str(x)+' '+str(y),arglist)+'\n') - tf.close() - except Exception,x: - pass - def _logfile(self): - raise NotImplementedError,'must override' - def _checkTraceLevel(self,level): - raise NotImplementedError,'must override' - - class SystemLogger(LoggerBase): - def _checkTraceLevel(self, level): - return Pyro.config.PYRO_TRACELEVEL >= level - def _logfile(self): - filename=Pyro.config.PYRO_LOGFILE - if not os.path.isabs(filename): - Pyro.config.PYRO_LOGFILE=os.path.join(Pyro.config.PYRO_STORAGE, filename) - return Pyro.config.PYRO_LOGFILE - - class UserLogger(LoggerBase): - def _checkTraceLevel(self, level): - return Pyro.config.PYRO_USER_TRACELEVEL >= level - def _logfile(self): - filename=Pyro.config.PYRO_USER_LOGFILE - if not os.path.isabs(filename): - Pyro.config.PYRO_USER_LOGFILE=os.path.join(Pyro.config.PYRO_STORAGE, filename) - return Pyro.config.PYRO_USER_LOGFILE - - -# The logger object 'Log'. -Log = SystemLogger() - - -# Caching directory lister, outputs (filelist,dirlist) tuple -# Based upon dircache.py, but implemented in a callable object -# that has a thread-safe cache. -class DirLister(object): - def __init__(self): - self.lock=getLockObject() - self.__listdir_cache = {} - - def __call__(self,path): - with self.lock: - try: - cached_mtime, files, directories = self.__listdir_cache[path] - del self.__listdir_cache[path] - except KeyError: - cached_mtime, files, directories = -1, [], [] - mtime = os.stat(path)[8] - if mtime <> cached_mtime: - files=[] - directories=[] - for e in os.listdir(path): - if os.path.isdir(os.path.join(path,e)): - directories.append(e) - else: - files.append(e) - with self.lock: - self.__listdir_cache[path] = mtime, files, directories - return files,directories - -listdir = DirLister() # callable object - - -# Fairly simple argument options parser. Like getopt(3). -class ArgParser(object): - def __init__(self): - pass - def parse(self, args, optionlist): - # optionlist is a string such as "ab:c" which means - # we search for 3 options (-a, -b, -c) of which -b has an argument. - self.options={} # public, the option->value dictionary - self.args=[] # public, the rest of the arguments - self.ignored=[] # public, ignored options - optionlist+=' ' # add sentinel - if type(args)==type(''): - args=args.split() - while args: - arg=args[0] - del args[0] - if arg[0]=='-': - if len(arg)>=2: # arg is an option. Check our list - idx = optionlist.find(arg[1]) - if idx>=0: - if optionlist[idx+1]==':': # option requires argument. - if len(arg)>=3: # argument is appended. Use this. - self.options[arg[1]]=arg[2:] - continue - # fetch argument from next string - if len(args)>=1: - self.options[arg[1]]=args[0] - del args[0] - continue - else: # missing arg, substitute None - self.options[arg[1]]=None - else: # option requires no argument, use None - self.options[arg[1]]=None - else: # didn't find this option, skip it - self.ignored.append(arg[1]) - else: # arg is a single '-'. Stop parsing. - for a in args: - self.args.append(a) - args=None - else: # arg is no option, add it to the residu list and continue - self.args.append(arg) - def hasOpt(self, option): - return self.options.has_key(option) - def getOpt(self, option, default=Exception()): - try: - return self.options[option] - except KeyError: - if not isinstance(default,Exception): - return default - raise KeyError('no such option') - def printIgnored(self): - if self.ignored: - print 'Ignored options:', - for o in self.ignored: - print '-'+o, - print - - -_getGUID_counter=0 # extra safeguard against double numbers -_getGUID_lock=getLockObject() - -if os.name=='java': - # define jython specific stuff - # first, the guid stuff. try java5 uuid first. - try: - from java.util import UUID - def getGUID(): - return str(UUID.randomUUID()) - except ImportError: - # older java, use rmi's vmid instead - from java.rmi.dgc import VMID - def getGUID(): - return str(VMID().toString().replace(':','-').replace('--','-')) - import imp - if not hasattr(imp,"acquire_lock"): - # simulate missing imp.acquire_lock() from jython 2.2 (fixed in jython 2.5) - imp_lock=getLockObject() - def imp_acquire_lock(): - return imp_lock.acquire() - def imp_release_lock(): - return imp_lock.release() - imp.acquire_lock=imp_acquire_lock - imp.release_lock=imp_release_lock - -elif sys.platform=='cli': - import System - def getGUID(): - # IronPython uses .NET guid call - return System.Guid.NewGuid().ToString() -else: - def getGUID(): - # Generate readable GUID string. - # The GUID is constructed as follows: hexlified string of - # AAAAAAAA-AAAABBBB-BBBBBBBB-BBCCCCCC (a 128-bit number in hex) - # where A=network address, B=timestamp, C=random. - # The 128 bit number is returned as a string of 16 8-bits characters. - # For A: should use the machine's MAC ethernet address, but there is no - # portable way to get it... use the IP address + 2 bytes process id. - try: - ip=socket.gethostbyname(socket.gethostname()) - networkAddrStr=binascii.hexlify(socket.inet_aton(ip))+"%04x" % os.getpid() - except socket.error: - # can't get IP address... use another value, like our Python id() and PID - Log.warn('getGUID','Can\'t get IP address') - try: - ip=os.getpid() - except: - ip=0 - ip += id(getGUID) - networkAddrStr = "%08lx%04x" % (ip, os.getpid()) - - with _getGUID_lock: # cannot generate multiple GUIDs at once - global _getGUID_counter - t1=time.time()*100 +_getGUID_counter - _getGUID_counter+=1 - t2=int((t1*time.clock())%sys.maxint) & 0xffffff - t1=int(t1%sys.maxint) - timestamp = (long(t1) << 24) | t2 - r2=(random.randint(0,sys.maxint//2)>>4) & 0xffff - r3=(random.randint(0,sys.maxint//2)>>5) & 0xff - return networkAddrStr+'%014x%06x' % (timestamp, (r2<<8)|r3 ) - -def genguid_scripthelper(argv): - p=ArgParser() - p.parse(argv,'') - if p.args or p.ignored: - print 'Usage: genguid (no arguments)' - print 'This tool generates Pyro UIDs.' - raise SystemExit - print getGUID() - - - -# Get the configured pickling module. -# Currently supported: cPickle, pickle, gnosis.xml.pickle (@paranoia 0 or -1). -def getPickle(): - if Pyro.config.PYRO_XML_PICKLE: - # user requires xml pickle. Fails if that is not available! - return getXMLPickle() - else: - try: - import cPickle - return cPickle - except ImportError: - # Fall back on pickle if cPickle isn't available - import pickle - return pickle - -_xmlpickle={} -def getXMLPickle(impl=None): - # load & config the required xml pickle. - # Currently supported: Gnosis Utils' gnosis.xml.pickle. - global _xmlpickle - if not impl: - impl=Pyro.config.PYRO_XML_PICKLE - if impl in _xmlpickle: - return _xmlpickle[impl] - try: - if impl=='gnosis': - import gnosis.xml.pickle - import gnosis.version - gnosisVer=(gnosis.version.MAJOR, gnosis.version.MINOR) - if gnosisVer==(1,2): - # gnosis 1.2 style pickling, with paranoia setting - _xmlpickle[impl]=gnosis.xml.pickle - gnosis.xml.pickle.setParanoia(Pyro.config.PYRO_GNOSIS_PARANOIA) # default paranoia level is too strict for Pyro - gnosis.xml.pickle.setParser('SAX') # use fastest parser (cEXPAT?) - return gnosis.xml.pickle - elif gnosisVer>=(1,3): - from gnosis.xml.pickle import SEARCH_ALL, SEARCH_STORE, SEARCH_NO_IMPORT, SEARCH_NONE - if Pyro.config.PYRO_GNOSIS_PARANOIA<0: - class_search_flag = SEARCH_ALL # allow import of needed modules - elif Pyro.config.PYRO_GNOSIS_PARANOIA==0: - class_search_flag = SEARCH_NO_IMPORT # dont import new modules, only use known - else: - class_search_flag = SEARCH_STORE # only use class store - # create a wrapper class to be able to pass additional args into gnosis methods - class GnosisPickle: - def dumps(data, *args,**kwargs): - return gnosis.xml.pickle.dumps(data, allow_rawpickles=0) - dumps=staticmethod(dumps) - def loads(xml, *args, **kwargs): - return gnosis.xml.pickle.loads(xml, allow_rawpickles=0, class_search=class_search_flag) - loads=staticmethod(loads) - def dump(data, file, *args,**kwargs): - return gnosis.xml.pickle.dump(data, file, allow_rawpickles=0) - dump=staticmethod(dump) - def load(file, *args, **kwargs): - return gnosis.xml.pickle.load(file, allow_rawpickles=0, class_search=class_search_flag) - load=staticmethod(load) - _xmlpickle[impl]=GnosisPickle - return GnosisPickle - else: - raise NotImplementedError('no supported Gnosis tools version found (need at least 1.2). Found '+gnosis.version.VSTRING) - else: - raise ImportError('unsupported xml pickle implementation requested: %s' % impl) - except ImportError: - Log.error('xml pickling implementation (%s) is not available' % impl) - raise NotImplementedError('xml pickling implementation (%s) is not available' % impl) - - -# Pyro traceback printing -def getPyroTraceback(exc_obj, exc_type=None, exc_trb=None): - def formatRemoteTraceback(remote_tb_lines) : - result=[] - result.append(" +--- This exception occured remotely (Pyro) - Remote traceback:") - for line in remote_tb_lines : - if line.endswith("\n"): - line=line[:-1] - lines = line.split("\n") - for line in lines : - result.append("\n | ") - result.append(line) - result.append("\n +--- End of remote traceback\n") - return result - try: - if exc_type is None and exc_trb is None: - exc_type, exc_obj, exc_trb=sys.exc_info() - remote_tb=getattr(exc_obj,Pyro.constants.TRACEBACK_ATTRIBUTE,None) - local_tb=formatTraceback(exc_type, exc_obj, exc_trb) - if remote_tb: - remote_tb=formatRemoteTraceback(remote_tb) - return local_tb + remote_tb - else: - # hmm. no remote tb info, return just the local tb. - return local_tb - finally: - # clean up cycle to traceback, to allow proper GC - del exc_type, exc_obj, exc_trb - - -def formatTraceback(ex_type=None, ex_value=None, tb=None): - if ex_type is None and tb is None: - ex_type,ex_value,tb=sys.exc_info() - if Pyro.config.PYRO_DETAILED_TRACEBACK: - get_line_number = traceback.tb_lineno - - res = ['-'*50+ "\n", - " <%s> RAISED : %s\n" % (str(ex_type), str(ex_value)), - " Extended Stacktrace follows (most recent call last)\n", - '-'*50+'\n' ] - - try: - # Do some manipulation shit of stack - if tb != None: - frame_stack = [] - line_number_stack = [] - - #tb = sys.exc_info()[2] - while 1: - line_num = get_line_number(tb) - line_number_stack.append(line_num) - if not tb.tb_next: - break - tb = tb.tb_next - - f = tb.tb_frame - for x in line_number_stack: - frame_stack.append(f) - f = f.f_back - - frame_stack.reverse() - - lines = iter(line_number_stack) - seen_crap = 0 - for frame in frame_stack: - # Get items - flocals = frame.f_locals.items()[:] - - line_num = lines.next() - filename = frame.f_code.co_filename - - name = None - for key, value, in flocals: - if key == "self": - name = "%s::%s" % (value.__class__.__name__, frame.f_code.co_name) - if name == None: - name = frame.f_code.co_name - - res.append('File "%s", line (%s), in %s\n' % (filename, line_num, name)) - res.append("Source code:\n") - - code_line = linecache.getline(filename, line_num) - if code_line: - res.append(' %s\n' % code_line.strip()) - - if not seen_crap: - seen_crap = 1 - continue - - res.append("Local values:\n") - flocals.sort() - fcode=frame.f_code - for key, value, in flocals: - if key in fcode.co_names or key in fcode.co_varnames or key in fcode.co_cellvars: - local_res=" %20s = " % key - try: - local_res += repr(value) - except: - try: - local_res += str(value) - except: - local_res += "" - - res.append(local_res+"\n") - - res.append('-'*50 + '\n') - res.append(" <%s> RAISED : %s\n" % (str(ex_type), str(ex_value))) - res.append('-'*50+'\n') - return res - - except: - return ['-'*50+"\nError building extended traceback!!! :\n", - ''.join(traceback.format_exception(* sys.exc_info() ) ) + '-'*50 + '\n', - 'Original Exception follows:\n', - ''.join(traceback.format_exception(ex_type, ex_value, tb)) ] - - else: - # default traceback format. - return traceback.format_exception(ex_type, ex_value, tb) - - -def excepthook(ex_type, ex_value, ex_tb): - """An exception hook you can set sys.excepthook to, to automatically print remote Pyro tracebacks""" - traceback="".join(getPyroTraceback(ex_value,ex_type,ex_tb)) - sys.stderr.write(traceback) diff --git a/modules/Pyro/util2.py b/modules/Pyro/util2.py deleted file mode 100644 index 54b5fde1..00000000 --- a/modules/Pyro/util2.py +++ /dev/null @@ -1,35 +0,0 @@ -############################################################################# -# -# Pyro Utilities (part 2, to avoid circular dependencies) -# User code should never import this, always use Pyro.util! -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -_supports_mt=None -_supports_comp=None - -def supports_multithreading(): - global _supports_mt - if _supports_mt is None: - try: - from threading import Thread, Lock - _supports_mt=1 - except: - _supports_mt=0 - return _supports_mt - -def supports_compression(): - global _supports_comp - if _supports_comp is None: - try: - import zlib - _supports_comp=1 - except: - _supports_comp=0 - return _supports_comp - -if supports_multithreading(): - import threading diff --git a/modules/Pyro/wxnsc.py b/modules/Pyro/wxnsc.py deleted file mode 100644 index b6b8a69f..00000000 --- a/modules/Pyro/wxnsc.py +++ /dev/null @@ -1,913 +0,0 @@ -#!/usr/bin/env python - -""" -A wxPython gui to nsc (Pyro Name Server Control tool). -This gui doesn't have as many features as the xnsc that ships with Pyro, -but it has some nice features that the xnsc doesn't have ;) - -'Pyro' - Python Remote Objects is -(c) Irmen de Jong - irmen@razorvine.net - -This file 'wxnsc.py' is -(c) Jan Finell - finell@users.sourceforge.net - - -Usage (from the commandline): - -# to use set PYRO environment variables or broadcasting -# for finding the nameserver host... -> wxnsc.py - -""" - -__author__ = "Jan Finell" -__date__ = "$Date: 2009/03/27 14:30:29 $" -__revision__ = "$Revision: 1.10.2.6 $" - -# -# Standard modules -# -import os, sys, socket -import traceback, cStringIO - -# -# GUI modules -# -import wx - -# -# Pyro modules -# -from Pyro.naming import NameServerLocator -from Pyro.errors import NamingError, ConnectionClosedError,\ - ConnectionDeniedError -import Pyro.core - -#----------------------------------------------------------------------# -# Module constants -DEFAULT_GROUPNAME = ':Default' -PROTECTED_GROUPS = [DEFAULT_GROUPNAME, ':Pyro'] - -GROUP_XPM = [ -"16 16 9 1", -" c None", -". c #FFFFFF", -"+ c #000000", -"@ c #C3C3C3", -"# c #A0A0A0", -"$ c #8080FF", -"% c #585858", -"& c #FFFFFF", -"* c #808080", -" +%+ ", -" +%$$++ ", -" +&%%$$+++++ ", -" +&&@%%$$$$$+ ", -" +&@&@@%$$$$% ", -" +@&@@@@%%%%$+ ", -" +&@@@@@@@#@+$% ", -" +@@@@@@@#@#+$% ", -" +@@@#@@#@##+$% ", -" +@@@@@#@###+$% ", -" ++*@@#@####+$% ", -" ++*@#####+$% ", -" ++#####+$% ", -" ++###+$++", -" ++#+$++", -" ++++ "] - -GROUP_OPEN_XPM =[ -"16 16 12 1", -" c None", -". c #FFFFFF", -"+ c #000000", -"@ c #8080FF", -"# c #808080", -"$ c #C3C3C3", -"% c #C0C0FF", -"& c #A0A0A0", -"* c #303030", -"= c #FFFFFF", -"- c #DCDCDC", -"; c #585858", -" +++ ", -" +@#++ ", -" +@%@#++++ ", -"+++ +@%%%%%%@+ ", -"+&&*;@@@%%%%%@+ ", -"+#&&&#@@@@%%%@#+", -" *&&&&##@@@@%@#+", -" +#&&$$&##@@@@#+", -" *&$&$$$$##@@#+", -" +#$$$$-$-&@@#+", -" *#-$$$-=%;@#+", -" +*&--===&@#+", -" +*$===%;#+", -" +*$==##+", -" +*$=#+", -" +**+"] - -ITEM_XPM = [ -"16 16 11 1", -" c None", -". c #FFFFFF", -"+ c #FFFFFF", -"@ c #000000", -"# c #585858", -"$ c #DCDCDC", -"% c #FFFFC0", -"& c #FFDCA8", -"* c #303030", -"= c #C3C3C3", -"- c #A0A0A0", -" #####**@@ ", -" #$$$$$=*=@ ", -" #$+++++#+$@ ", -" #$+++++#$+=@", -" #$+++++###*@", -" #$++++++$=-@", -" #$++++++%+$@", -" #$+++++++++@", -" #$++++%+%+%@", -" #$+++++++&+@", -" #$++%+%+%+%@", -" #$+++++&+&+@", -" #$%+%+%+%+%@", -" #$+++&+&+&%@", -" #$%+%+%+%%%@", -" *@@@@@@@@@@@"] -#----------------------------------------------------------------------# -# Helper functions - -def cmp_name(n1, n2): - return cmp(n1[0], n2[0]) - -def show_message_dialog(parent, msg, title, style): - if sys.platform[:3] == 'win': - dlg = WinMessageDialog(parent, msg, title, style) - else: - dlg = wx.MessageDialog(parent, msg, title, style) - dlg.CentreOnParent() - retval = dlg.ShowModal() - dlg.Destroy() - return retval - -#----------------------------------------------------------------------# -## Classes - - -class wx_StdoutLog(wx.TextCtrl): - """ - :Purpose: A simple text ctrl that can be used for logging standard out - """ - def write(self, data): - if data.strip(): - wx.TextCtrl.AppendText(self, '%s\n' % data) - -class wx_NSC(wx.Frame): - """ - :Purpose: The main frame of the GUI. - """ - def __init__(self, nsHost, nsPort, bcAddr): - """ - :Parameters: - - `nsHost`: the name server host to connect to. This is the - name of the host or the ip. - - `nsPort`: the name server port. By default the Pyro name - server port is 9090 - - `bcAddr`: override for the broadcast address. - """ - wx.Frame.__init__(self, None, -1, 'Pyro Name Server') - self.nsHost = nsHost - self.nsPort = nsPort - self.bcAddr = bcAddr - self.NS = None - - self._build() - imageList = wx.ImageList(16,16) - self.__idGroup = imageList.Add(wx.BitmapFromXPMData(GROUP_XPM)) - self.__idItem = imageList.Add(wx.BitmapFromXPMData(ITEM_XPM)) - self.__idGroupOpen = imageList.Add(wx.BitmapFromXPMData(GROUP_OPEN_XPM)) - self.treeCtrlItems.SetImageList(imageList) - self.__imageList = imageList - - self._bindEvents() - # binding stdout to my own txtCtrl Log. - sys.stdout = self.txtCtrlLog - - self._log("Pyro version: "+Pyro.constants.VERSION) - - self.nsc_findNS() - if self.NS: self.update() - - #-- public methods --# - def enable(self, enable=True): - """ - Enabling/disabling some of the buttons. - """ - self.buttonDeleteGroup.Enable(enable) - self.buttonCreateGroup.Enable(enable) - self.buttonDeleteSelected.Enable(enable) - self.buttonRegisterItem.Enable(enable) - self.buttonShowMeta.Enable(enable) - self.buttonSetMeta.Enable(enable) - - def update(self): - """ - """ - tree = self.treeCtrlItems - tree.DeleteAllItems() - root = tree.AddRoot(':') - tree.SetItemImage(root, self.__idGroup) - tree.SetItemImage(root, self.__idGroupOpen, - wx.TreeItemIcon_Expanded) - self._populate_tree(tree, root, ':') - - # enabling/disabling buttons, depending on the current state. - self.enable(self.NS != None) - - def _populate_tree(self, tree, parent, group): - subgroupsL = self.nsc_list_groups(group) - subgroupsL.sort() - itemsL = self.nsc_list_items(group) - itemsL.sort() - for subgroup in subgroupsL: - groupB = tree.AppendItem(parent, subgroup) - tree.SetPyData(groupB, 0) - tree.SetItemImage(groupB, self.__idGroup) - tree.SetItemImage(groupB, self.__idGroupOpen, - wx.TreeItemIcon_Expanded) - self._populate_tree(tree, groupB, subgroup) - for item in itemsL: - itemB = tree.AppendItem(parent, item) - tree.SetPyData(itemB, 1) - tree.SetItemImage(itemB, self.__idItem) - tree.SetItemImage(itemB, self.__idItem, - wx.TreeItemIcon_Selected) - #-- nsc methods --# - def nsc_findNS(self, ident=None): - """ - Locating the Name Server by using given nsHost and nsPort - """ - locator = NameServerLocator(identification=ident) - try: - if self.nsHost: - self._log('connecting to Name Server (%s:%s)' % (self.nsHost, - self.nsPort)) - self.NS = locator.getNS(self.nsHost, self.nsPort, trace=1, bcaddr=self.bcAddr) - else: - self._log('broadcasting to find Name Server') - self.NS = locator.getNS(None, None, trace = 1, bcaddr=self.bcAddr) - self.nsHost = self.NS.URI.address - self.nsPort = self.NS.URI.port - self.NS._setIdentification(ident) - self._log('Name Server found, URI = %s' % self.NS.URI) - self._setNSData() - except ConnectionDeniedError, e: - if str(e).find( Pyro.constants.deniedReasons[Pyro.constants.DENIED_SECURITY] ) != -1: - msg = 'Authentication required:' - dlg = wx.TextEntryDialog(self, msg, 'Authentication', - style=wx.OK|wx.CANCEL|wx.TE_PASSWORD) - dlg.CentreOnParent() - if dlg.ShowModal() == wx.ID_OK: - ident = dlg.GetValue() - self.nsc_findNS(ident) - else: - self.NS = None - self._log('Connection to Name Server denied!','error') - else: - self.NS = None - self._logError('Unable to connect to Name Server') - except: - self.NS = None - self._logError('Name Server not found!') - - - def nsc_list_groups(self, ingroup): - """ - Returns a list of group names inside given group. - """ - return self._nsc_list(ingroup, 0) - - def nsc_list_items(self, ingroup): - """ - Returns a list of item names inside given group. - """ - return self._nsc_list(ingroup, 1) - - def _nsc_list(self, ingroup, type): - """ - Generic method for listing either groups or items inside a given group. - - type = 0 : group - type = 1 : item - """ - items = [] - if self.NS: - for name, t in self.NS.list(ingroup): - if t == type: - if type == 1: - uri = self.NS.resolve('%s.%s' % (ingroup,name)) - name = '%s (%s)' % (name, uri) - elif ingroup != ':': - name = '%s.%s' % (ingroup, name) - else: - name = '%s%s' % (ingroup, name) - items.append(name) - return items - - def nsc_create_group(self, groupName): - """ - Creating given group - """ - if self.NS: - try: - self.NS.createGroup(groupName) - self._log('created group (%s)' % (groupName)) - return 1 - except NamingError, e: - self._logError('unable to create group %s because %s' % (groupName, - e)) - return 0 - - def nsc_delete_group(self, groupName): - """ - Deleting given group - """ - if self.NS: - try: - self.NS.deleteGroup(groupName) - self._log('group %s deleted' % groupName) - return 1 - except NamingError, e: - self._logError('unable to delete group %s because %s' % (groupName, - e)) - return 0 - - def nsc_ping(self): - """ - Ping the current Name Server - """ - if self.NS: - try: - self.NS.ping() - self._log('ping Name Server (%s): up and running' % self.nsHost) - except: - self._logError('Name Server not responding.') - else: - self._logError('Name Server not responding') - - def nsc_delete(self, name): - """Removing given name from the Name Server. - - :Parameters: - - `name`: the name to delete from the Name Server - """ - try: - self.NS.unregister(name) - self._log('%s deleted successfully' % name) - return 1 - except NamingError, e: - self._logError('unable to delete %s because %s' % (name, e)) - except: - self._logError('deletion of %s failed' % name) - return 0 - - def nsc_register_item(self, name, uri): - """ - Registering new item with given name and uri - """ - try: - self.NS.register(name, uri) - uri = Pyro.core.PyroURI(uri) - self._log('registered %s with %s' % (name, uri)) - return 1 - except NamingError, e: - self._logError('unable to register,\nName Server error: %s' % e) - except Exception, e: - self._logError('unable to register, error: %s' % e) - return 0 - - def nsc_set_meta(self, name, meta): - """ - Set user meta data - """ - try: - self.NS.setMeta(name, meta) - self._log('set user meta data on '+name) - return 1 - except NamingError, e: - self._logError('unable to set user meta data,\nName Server error: %s' % e) - except Exception, e: - self._logError('unable to set user meta data, error: %s' % e) - return 0 - - def nsc_show_meta(self, name): - fullName = self.NS.fullName(name) - try: - self._log('"%s" system meta info: %s' % (fullName, - self.NS._getSystemMeta(fullName))) - self._log('"%s" user meta info: %s' % (fullName, - self.NS.getMeta(name))) - except NamingError, e: - self._logError('unable to get meta info,\nName Server error: %s' % e) - except Exception, e: - self._logError('unable to get meta info, error: %s' % e) - - #-- gui event methods --# - def OnCheckNS(self, event): - if self._checkNS(): - self.update() - - def OnClose(self, event): - sys.stdout = sys.__stdout__ #restoring the stdout - self.Destroy() - - def OnCreateGroup(self, event): - """ - Creating group in selected parent - """ - tree = self.treeCtrlItems - items = tree.GetSelections() - if items: - if tree.GetPyData(items[0]) == 0: - # use the selected group - parentGroupI = items[0] - parentGroupName = tree.GetItemText(parentGroupI) - else: - # take the parent - parentGroupI = tree.GetItemParent(items[0]) - parentGroupName = tree.GetItemText(parentGroupI) - else: - parentGroupI = tree.GetRootItem() - parentGroupName = ':' - msg = 'Create group in "%s", with name:' % parentGroupName - dlg = wx.TextEntryDialog(self, msg, 'Enter group name') - dlg.CentreOnParent() - if dlg.ShowModal() == wx.ID_OK: - if parentGroupName != ':': - groupName = '%s.%s' % (parentGroupName, dlg.GetValue()) - else: - groupName = ':%s' % (dlg.GetValue()) - if self.nsc_create_group(groupName): - groupI = tree.AppendItem(parentGroupI, groupName) - tree.SetPyData(groupI, 0) - tree.SetItemImage(groupI, self.__idGroup) - tree.SetItemImage(groupI, self.__idGroupOpen, - wx.TreeItemIcon_Expanded) - tree.Expand(parentGroupI) - - def OnSetMeta(self, ev=None): - """ - set user meta on selected groups + items - """ - tree = self.treeCtrlItems - itemsL, groupsL = self._getSelections() - namesL = itemsL + groupsL - if namesL: - namesS = ',\n '.join(namesL) - msg = 'User meta data string for:\n %s' % namesS - dlg = wx.TextEntryDialog(self, msg, 'Enter meta data') - dlg.CentreOnParent() - if dlg.ShowModal() == wx.ID_OK: - meta=dlg.GetValue() - for name in namesL: - self.nsc_set_meta(name,meta) - - def OnDelete(self, ev=None): - """ - Deleting selected items. - """ - tree = self.treeCtrlItems - itemsL = tree.GetSelections() - namesL = [] - deleteL = [] - for i in itemsL: - # only items (ie. no groups) - if tree.GetPyData(i) == 1: - parent = tree.GetItemParent(i) - parentName = tree.GetItemText(parent) - name = tree.GetItemText(i).split()[0] #only name - namesL.append('%s.%s' % (parentName, name)) - deleteL.append(i) - if namesL: - namesS = ',\n '.join(namesL) - ret = show_message_dialog(self, - 'Really delete following name(s)?:\n %s' % namesS, - '-- Confirm --', wx.YES|wx.NO|wx.ICON_QUESTION) - if ret == wx.ID_YES: - for name, i in zip(namesL,deleteL): - if self.nsc_delete(name): - tree.Delete(i) - - def OnDeleteGroup(self, ev=None): - """ - Deleting selected groups. - """ - tree = self.treeCtrlItems - itemsL = tree.GetSelections() - namesL = [] - deleteL = [] - for i in itemsL: - # only groups (ie. no items) - if tree.GetPyData(i) == 0: - name = tree.GetItemText(i) - if name not in PROTECTED_GROUPS and tree.GetChildrenCount(i)==0: - namesL.append(name) - deleteL.append(i) - if namesL: - namesS = ',\n'.join(namesL) - ret = show_message_dialog(self, - 'Really delete following group(s)?:\n %s' % namesS, - '-- Confirm --', wx.YES|wx.NO|wx.ICON_QUESTION) - if ret == wx.ID_YES: - for name, i in zip(namesL, deleteL): - if self.nsc_delete_group(name): - tree.Delete(i) - - def OnKeyPressed(self, event): - """ - Calling delete for both items and groups - """ - if event.GetKeyCode() == 127: - # deleting both selected groups and items - self.OnDelete() - self.OnDeleteGroup() - if event.GetKeyCode() == 105: # 105 == 'i' - # showing meta information on selected item - self.OnShowMeta() - event.Skip() - - def OnPing(self, event): - if self._checkNS(): - self.update() - self.nsc_ping() - - - def OnRegisterItem(self, event): - """ - Registering item in selected parent. - """ - tree = self.treeCtrlItems - items = tree.GetSelections() - if items: - if tree.GetPyData(items[0]) == 0: - # use the selected group - parentGroupI = items[0] - parentGroupName = tree.GetItemText(parentGroupI) - else: - parentGroupI = tree.GetItemParent(items[0]) - parentGroupName = tree.GetItemText(parentGroupI) - else: - parentGroupI = tree.GetRootItem() - parentGroupName = ':' - - msg = 'Register new item in "%s", with:\n ' % parentGroupName - dlg = wx.TextEntryDialog(self, msg, 'Register item') - dlg.CentreOnParent() - if dlg.ShowModal() == wx.ID_OK: - try: - itemName, uri = dlg.GetValue().split() - except: - self._log('Invalid arguments, use ', 'error') - else: - if parentGroupName != ':': - itemName = '%s.%s' % (parentGroupName, itemName) - else: - itemName = ':%s' % (itemName) - if self.nsc_register_item(itemName, uri): - label = '%s (%s)' % (dlg.GetValue().split()[0], uri) - itemI = tree.AppendItem(parentGroupI, label) - tree.SetPyData(itemI, 1) - tree.SetItemImage(itemI, self.__idItem) - tree.SetItemImage(itemI, self.__idItem, - wx.TreeItemIcon_Selected) - tree.Expand(parentGroupI) - - def OnUpdate(self, event): - self._checkNS() - self.update() - - def OnShowMeta(self, event=None): - itemsL, groupsL = self._getSelections() - for name in itemsL + groupsL: - self.nsc_show_meta(name) - - - #-- protected methods --# - def _checkNS(self): - """ - Reads the new values from the txtCtrlNSHost and txtCtrlNSPort. - If changed, it tries to connect to the new Name Server. - """ - changed = 0 - if self.txtCtrlNSHost.IsModified(): - self.nsHost = self.txtCtrlNSHost.GetValue() - changed = 1 - if self.txtCtrlNSPort.IsModified(): - try: - port = int(self.txtCtrlNSPort.GetValue()) - self.nsPort = port - except ValueError: - self._logError('Integer required for port') - changed = 1 - if changed: - self.nsc_findNS() - return changed - - def _log(self, line, status='info'): - """Writing given line to the log-textCtrl. - - :Parameters: - - `line`: text to log - - `status`: status should be 'info' or 'error'. If 'info' the - text will be colored blue, if 'error' the text will - be red. - """ - start = self.txtCtrlLog.GetLastPosition() - self.txtCtrlLog.AppendText('%s\n' % line) - color = wx.BLACK - if status == 'info': - color = wx.BLUE - elif status == 'error': - color = wx.RED - self.txtCtrlLog.SetStyle(start, self.txtCtrlLog.GetLastPosition(), - wx.TextAttr(color)) - - def _logError(self, line): - """ - Getting the traceback of previous error, and logging this. - """ - a, b, tb = sys.exc_info() - if a == ConnectionClosedError: - self.NS = None - self._log('Connection with Name Server lost', 'error') - self.enable(False) - buf = cStringIO.StringIO() - traceback.print_exc(file = buf) - self._log('%s:\n%s' % (line, buf.getvalue()), 'error') - - def _setNSData(self): - """ - Updates the display of current Name Server information. - """ - try: - ns_name, t, ns_ip = socket.gethostbyaddr(self.nsHost) - ns_ip = ns_ip[0] - except: - ns_name, ns_ip = self.nsHost, '' - self.txtCtrlNSHost.SetValue('%s' % ns_name) - self.txtCtrlNSPort.SetValue('%s' % self.nsPort) - self.SetTitle('Pyro Name Server ( %s - %s )' % (ns_name, ns_ip)) - - def _getSelections(self): - tree = self.treeCtrlItems - selectionsL = tree.GetSelections() - itemsL = [] - groupsL = [] - for i in selectionsL: - if tree.GetPyData(i) == 0: - # group - groupsL.append(tree.GetItemText(i)) - elif tree.GetPyData(i) == 1: - # item - parentName = tree.GetItemText(tree.GetItemParent(i)) - name = tree.GetItemText(i).split()[0] - itemsL.append('%s.%s' % (parentName, name)) - return itemsL, groupsL - - #-- build / bind methods --# - def _bindEvents(self): - """ - Binding events to the gui widgets. - """ - wx.EVT_BUTTON(self, self.buttonPing.GetId(), self.OnPing) - wx.EVT_BUTTON(self, self.buttonUpdate.GetId(), self.OnUpdate) - wx.EVT_BUTTON(self, self.buttonClose.GetId(), self.OnClose) - wx.EVT_BUTTON(self, self.buttonDeleteGroup.GetId(), self.OnDeleteGroup) - wx.EVT_BUTTON(self, self.buttonCreateGroup.GetId(), self.OnCreateGroup) - wx.EVT_BUTTON(self, self.buttonDeleteSelected.GetId(), self.OnDelete) - wx.EVT_BUTTON(self, self.buttonRegisterItem.GetId(), self.OnRegisterItem) - wx.EVT_BUTTON(self, self.buttonShowMeta.GetId(), self.OnShowMeta) - wx.EVT_BUTTON(self, self.buttonSetMeta.GetId(), self.OnSetMeta) - wx.EVT_TEXT_ENTER(self, self.txtCtrlNSHost.GetId(), self.OnCheckNS) - wx.EVT_TEXT_ENTER(self, self.txtCtrlNSPort.GetId(), self.OnCheckNS) - wx.EVT_CHAR(self.treeCtrlItems, self.OnKeyPressed) - - def _build(self): - """ - Building widgets and setting static widget data. - """ - parent = wx.Panel(self, -1) - sizer0 = wx.BoxSizer(wx.VERTICAL) - sizer0.Add(self._buildTopBar(parent), 0, wx.ALIGN_LEFT|wx.GROW, 5) - - splitter = wx.SplitterWindow(parent, -1) - #- TOP PART --------------------------------------------------------# - topParent = wx.Panel(splitter, -1) - topSizer = wx.BoxSizer(wx.VERTICAL) - self.treeCtrlItems = wx.TreeCtrl(topParent, -1, - style = wx.TR_TWIST_BUTTONS|wx.TR_LINES_AT_ROOT|wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_MULTIPLE) - topSizer.Add(self.treeCtrlItems, 1, wx.EXPAND, 5) - topParent.SetAutoLayout( True ) - topParent.SetSizer(topSizer ) - topSizer.Fit(topParent) - topSizer.SetSizeHints(topParent) - #-------------------------------------------------------------------# - #- BOTTOM PART -----------------------------------------------------# - bottomParent = wx.Panel(splitter,-1) - bottomSizer = wx.BoxSizer(wx.VERTICAL) - self.txtCtrlLog=wx_StdoutLog(bottomParent, -1, "", - size= wx.Size(-1, 10), - style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH) - bottomSizer.Add(self.txtCtrlLog, 1, wx.EXPAND, 5) - bottomParent.SetAutoLayout( True ) - bottomParent.SetSizer(bottomSizer ) - bottomSizer.Fit(bottomParent) - bottomSizer.SetSizeHints(bottomParent) - #-------------------------------------------------------------------# - splitter.SplitHorizontally(topParent,bottomParent, -100) - sizer0.Add(splitter, 1, wx.EXPAND|wx.ALIGN_CENTRE, 5) - - self.buttonClose = wx.Button(parent, -1, 'Close') # buttonClose - sizer0.Add(self.buttonClose, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - - parent.SetAutoLayout( True ) - parent.SetSizer( sizer0 ) - sizer0.Fit( parent) - sizer0.SetSizeHints( parent) - - def _buildTopBar(self, parent): - """ - Widget building - """ - sizer0 = wx.BoxSizer(wx.VERTICAL) - #-- - sizer1 = wx.BoxSizer(wx.HORIZONTAL) - txt1 = wx.StaticText(parent, -1, 'Name Server:') - txt1.SetForegroundColour(wx.BLUE) - sizer1.Add(txt1, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTRE|wx.ALL, 5) - self.txtCtrlNSHost = wx.TextCtrl(parent, -1, '', size=wx.Size(300,-1), - style=wx.TE_PROCESS_ENTER) - sizer1.Add(self.txtCtrlNSHost, 0, - wx.ALIGN_LEFT|wx.ALIGN_BOTTOM|wx.TOP|wx.BOTTOM, 5) - txtColon = wx.StaticText(parent, -1, ':') - txtColon.SetForegroundColour(wx.BLUE) - sizer1.Add(txtColon, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTRE|wx.TOP|wx.BOTTOM, 5) - self.txtCtrlNSPort = wx.TextCtrl(parent, -1, '', size=wx.Size(50,-1), - style=wx.TE_PROCESS_ENTER) - sizer1.Add(self.txtCtrlNSPort, 0, - wx.ALIGN_LEFT|wx.ALIGN_BOTTOM|wx.TOP|wx.BOTTOM, 5) - self.buttonUpdate = wx.Button(parent, -1, 'Update') # buttonUpdate - sizer1.Add(self.buttonUpdate, 0, wx.ALIGN_LEFT|wx.ALL, 5) - self.buttonPing = wx.Button(parent, -1, 'Ping') # buttonPing - sizer1.Add(self.buttonPing, 0, wx.ALIGN_LEFT|wx.ALL, 5) - sizer0.Add(sizer1, 0, wx.ALIGN_LEFT|wx.GROW, 5) - #-- - lineH1 = wx.StaticLine(parent, -1, style=wx.LI_HORIZONTAL) - sizer0.Add(lineH1, 0, wx.GROW|wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 5) - #-- - sizer2 = wx.BoxSizer(wx.HORIZONTAL) - self.buttonDeleteGroup = wx.Button(parent, -1, ' Delete group(s) ') - sizer2.Add(self.buttonDeleteGroup, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.TOP|wx.LEFT|wx.BOTTOM, 5) - self.buttonCreateGroup = wx.Button(parent, -1, ' Create group... ') - sizer2.Add(self.buttonCreateGroup, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.TOP|wx.LEFT|wx.BOTTOM, 5) - lineV1 = wx.StaticLine(parent, -1, style=wx.LI_VERTICAL) - sizer2.Add(lineV1, 0, - wx.ALL|wx.GROW, 5) - self.buttonDeleteSelected = wx.Button(parent, -1, - ' Delete item(s) ') - sizer2.Add(self.buttonDeleteSelected, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.ALL, 5) - self.buttonRegisterItem = wx.Button(parent, -1, ' Register item... ') - sizer2.Add(self.buttonRegisterItem, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, 5) - lineV2 = wx.StaticLine(parent, -1, style=wx.LI_VERTICAL) - sizer2.Add(lineV2, 0, - wx.ALL|wx.GROW, 5) - self.buttonShowMeta = wx.Button(parent, -1, ' Show meta ') - sizer2.Add(self.buttonShowMeta, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, 5) - self.buttonSetMeta = wx.Button(parent, -1, ' Set meta ') - sizer2.Add(self.buttonSetMeta, 0, - wx.ALIGN_LEFT|wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, 5) - sizer0.Add(sizer2, 0, wx.ALIGN_LEFT, 5) - #-- - return sizer0 - -#----------------------------------------------------------------------# -class WinMessageDialog(wx.Dialog): - ''' - :Purpose: Message dialog for MS Win. - The parameters are the same as for wx.MessageDialog - - :Detail: On Windows the native wx.MessageDialog can not - be centered on top of the parent or positioned, ie. - it will always be centered on the screen. - - ''' - def __init__(self, parent=None, message='Message:', - caption='Message', style=wx.OK|wx.CANCEL,pos=wx.DefaultPosition): - wx.Dialog.__init__(self, parent, -1, caption, size=wx.DefaultSize, - style=wx.CAPTION, pos=pos) - self._build(message, style) - self.Fit() - - def OnButton(self, ev): - self.EndModal(ev.GetId()) - - def _build(self, msg, style): - parent = wx.Panel(self, -1) - sizer = wx.BoxSizer(wx.VERTICAL) - #-- icon and message --# - msgSizer = wx.BoxSizer(wx.HORIZONTAL) - - # icon # - artID = None - if style & wx.ICON_EXCLAMATION == wx.ICON_EXCLAMATION \ - or style & wx.ICON_HAND == wx.ICON_HAND: - artID = wx.ART_WARNING - elif style & wx.ICON_ERROR == wx.ICON_ERROR: - artID = wx.ART_ERROR - elif style & wx.ICON_QUESTION == wx.ICON_QUESTION: - artID = wx.ART_QUESTION - elif style & wx.ICON_INFORMATION == wx.ICON_INFORMATION: - artID = wx.ART_INFORMATION - if artID: - bmp = wx.ArtProvider_GetBitmap(artID, wx.ART_MESSAGE_BOX, (48,48)) - bmpIcon = wx.StaticBitmap(parent, -1, bmp) - msgSizer.Add(bmpIcon, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - - # msg # - txtMsg = wx.StaticText(parent, -1, msg, style=wx.ALIGN_CENTRE) - msgSizer.Add(txtMsg, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - - sizer.Add(msgSizer, 0, wx.ALIGN_CENTRE, 5) - line = wx.StaticLine(parent, -1, style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW|wx.ALL, 5) - #-- buttons --# - btnSizer = wx.BoxSizer(wx.HORIZONTAL) - - if style & wx.YES_NO == wx.YES_NO: - btnYes = wx.Button(parent, wx.ID_YES, 'Yes') - btnSizer.Add(btnYes, 0, - wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 10) - btnNo = wx.Button(parent, wx.ID_NO, 'No') - btnSizer.Add(btnNo, 0, - wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 10) - if style & wx.YES_DEFAULT == wx.YES_DEFAULT: - btnYes.SetDefault() - elif style & wx.NO_DEFAULT == wx.NO_DEFAULT: - btnNo.SetDefault() - wx.EVT_BUTTON(self, wx.ID_YES, self.OnButton) - wx.EVT_BUTTON(self, wx.ID_NO, self.OnButton) - else: - if style & wx.OK == wx.OK: - btnOK = wx.Button(parent, wx.ID_OK, 'OK') - btnOK.SetDefault() - btnSizer.Add(btnOK, 0, - wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 10) - if style & wx.CANCEL == wx.CANCEL: - btnCancel = wx.Button(parent, wx.ID_CANCEL, 'Cancel') - btnSizer.Add(btnCancel, 0, - wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 10) - - sizer.Add(btnSizer, 0, wx.ALIGN_CENTRE|wx.TOP, 5) - #-- - parent.SetAutoLayout( True ) - parent.SetSizer(sizer ) - sizer.Fit( parent ) - sizer.SetSizeHints( parent ) - -#----------------------------------------------------------------------# -def main(argv): - """ - The default host will be None if the environment variable - PYRO_NS_HOSTNAME is not set. - The default port will be 9090 (Pyro.config.PYRO_NS_PORT) if - PYRO_NS_BC_PORT environment variable is not set. - """ - nsHost = os.getenv('PYRO_NS_HOSTNAME') - nsPort = os.getenv('PYRO_NS_BC_PORT') or Pyro.config.PYRO_NS_PORT - bcAddr = Pyro.config.PYRO_NS_BC_ADDR - if bcAddr: - bcAddr=bcAddr.strip() - bcAddr=bcAddr or None - - class wx_NSCApp(wx.App): - def OnInit(self): - Pyro.core.initClient() - frame = wx_NSC(nsHost, nsPort, bcAddr) - frame.SetSize(wx.Size(630,500)) - frame.Show(True) - return True - - app = wx_NSCApp(0) - app.MainLoop() - -# allow easy usage with python -m -if __name__=="__main__": - main(sys.argv) diff --git a/modules/Pyro/xnsc.py b/modules/Pyro/xnsc.py deleted file mode 100644 index ce97b555..00000000 --- a/modules/Pyro/xnsc.py +++ /dev/null @@ -1,350 +0,0 @@ -############################################################################# -# -# Pyro Name Server Control Tool with GUI -# -# This is part of "Pyro" - Python Remote Objects -# which is (c) Irmen de Jong - irmen@razorvine.net -# -############################################################################# - -import sys, time -from Tkinter import * -from Pyro.naming import NameServerLocator -from Pyro.errors import NamingError, ConnectionClosedError -import Pyro.core - -class xnscFrame(object): - - def quit(self): - self.master.quit() - - def clearOutput(self): - self.text_out.delete('1.0',AtEnd()) - self.outputln(time.asctime()) - - def output(self,txt): - self.text_out.insert(AtEnd(),txt) - self.text_out.yview(AtEnd()) - - def outputln(self,txt): - self.output(txt+'\n') - - def b_clearoutput(self, event=None): - self.clearOutput() - - def b_findNS(self,event=None): - self.clearOutput() - hst,prt = None,None - self.authID = self.entry_AuthID.get() - if event: - # Pressed in entry box - addr = self.entry_NSloc.get().split(':') - hst=addr[0] - if len(addr)>1: - prt=int(addr[1]) - # We need to keep the host/port for the shutdown button... - self.NShost = hst - self.NSport = prt - self.outputln('*** finding NS') - locator=NameServerLocator(identification=self.authID) - bcaddr=self.entry_BCAddr.get().strip() or None - try: - self.NS=locator.getNS(hst,prt,trace=1,bcaddr=bcaddr) - self.entry_NSloc.delete(0,AtEnd()) - self.entry_NSloc.insert(AtEnd(),self.NS.URI.address+':'+str(self.NS.URI.port)) - self.entry_AuthID.delete(0,AtEnd()) - self.entry_AuthID.insert(AtEnd(),'****') - - self.enable_buttons() - self.outputln(' found, URI='+str(self.NS.URI)) - except: - self.disable_buttons() - self.outputln(' not found:'); - a,b = sys.exc_info()[:2] - self.outputln(' '+str(a)+' : '+str(b)) - self.outputln('See standard output for trace messages.') - - def handle_comm_error(self,name): - # Handle a communication error: disable buttons and print exception - a,b = sys.exc_info()[:2] - self.outputln('*** '+name+': exception occured:') - self.outputln(' '+str(a)+' : '+str(b)) - if a==ConnectionClosedError: - self.disable_buttons() - self.outputln('*** Connection with NS lost - reconnect') - - def printError(self, msg, exc): - line="## %s: " % msg - if isinstance(exc.args, (list, tuple)): - line+="; ".join(exc.args[:-1]) - else: - line+=exc.args - line+=" ##" - self.outputln(line) - - def b_list(self,event=None): - names = self.entry_arg.get().split() - try: - if names: - self.outputln('*** List groups:') - for n in names: - self.output(' '+self.NS.fullName(n)+' --> ') - try: - self.printList(self.NS.list(n)) - except NamingError,x: - self.printError("can't list",x) - else: - self.outputln('*** List default group:') - self.printList(self.NS.list(None)) - except: - self.handle_comm_error('list') - def printList(self,lst): - out='( ' - lst.sort() - for (n,t) in lst: - if t==0: - out+='['+n+'] ' - elif t==1: - out+=n+' ' - self.outputln(out+')') - - def b_listall(self,event=None): - try: - flat=self.NS.flatlist() - flat.sort() - self.outputln('--------- Flat dump of namespace') - for (name,val) in flat: - self.outputln(' '+name+' --> '+str(val)) - self.outputln('--------- End dump') - except: - self.handle_comm_error('listall') - - def b_register(self,event=None): - self.outputln('*** registering with NS:') - try: - (name,uri) = self.entry_arg.get().split() - try: - self.NS.register(name,uri) - uri=Pyro.core.PyroURI(uri) - self.outputln(' '+name+' --> '+str(uri)) - except NamingError,x: - self.printError("Error from NS", x) - except: - self.handle_comm_error('register') - except ValueError: - self.outputln(' Invalid arguments, use " ".') - - def b_resolve(self,event=None): - self.outputln('*** resolving:') - name=self.entry_arg.get() - if not name: - self.outputln(' Invalid arguments, use "".') - else: - try: - uri=self.NS.resolve(name) - self.outputln(' '+name+' --> '+str(uri)) - except NamingError,x: - self.printError("can't resolve '"+name+"'", x) - except: - self.handle_comm_error('resolve') - - def b_remove(self,event=None): - self.outputln('*** removing:') - name=self.entry_arg.get() - if not name: - self.outputln(' Invalid arguments, use "".') - else: - try: - self.NS.unregister(name) - self.outputln('*** removed: '+name) - except NamingError,x: - self.printError("Can't remove '"+name+"'", x) - except: - self.handle_comm_error('remove') - - def b_ping(self,event=None): - try: - self.NS.ping() - self.outputln('*** ping NS: up and running!') - except: - self.handle_comm_error('ping') - - def b_creategroup(self,event=None): - name=self.entry_arg.get() - if not name: - self.outputln(' Invalid arguments, use "".') - else: - try: - self.NS.createGroup(name) - self.outputln('*** group created: '+name) - except Exception,x: - self.printError("Can't create group",x) - - def b_deletegroup(self,event=None): - name=self.entry_arg.get() - if not name: - self.outputln(' Invalid arguments, use "".') - else: - try: - self.NS.deleteGroup(name) - self.outputln('*** group deleted: '+name) - except Exception,x: - self.printError("Can't delete group",x) - - def b_showmeta(self,event=None): - name=self.NS.fullName(self.entry_arg.get()) - self.outputln('*** showing meta info of: '+name) - try: - self.outputln("system meta info : "+str(self.NS._getSystemMeta(name))) - self.outputln(" user meta info : "+str(self.NS.getMeta(name))) - except NamingError,x: - self.printError("Can't get Meta info",x) - except: - self.handle_comm_error('showmeta') - - def b_setmeta(self,event=None): - self.outputln('*** setting user meta data:') - try: - (name,meta) = self.entry_arg.get().split(None,1) - try: - self.NS.setMeta(name,meta) - self.outputln(' '+name+' META='+meta) - except NamingError,x: - self.printError("Error from NS", x) - except: - self.handle_comm_error('setmeta') - except ValueError: - self.outputln(' Invalid arguments, use " ".') - - def b_resync(self,event=None): - self.outputln("*** resync NS with twin") - try: - self.NS.resync() - except NamingError,x: - self.printError("Can't resync",x) - except: - self.handle_comm_error('resync') - - def b_shutdown(self,event=None): - locator = NameServerLocator(self.authID) - try: - result = locator.sendSysCommand('shutdown',self.NShost,self.NSport,0) - self.outputln('*** The NS replied to the shutdown message: '+str(result)) - except: - self.disable_buttons() - self.outputln(' not found:'); - a,b = sys.exc_info()[:2] - self.outputln(' '+str(a)+' : '+str(b)) - - def enable_buttons(self): - self.enable_disable_buttons(NORMAL) - - def disable_buttons(self): - self.enable_disable_buttons(DISABLED) - - def enable_disable_buttons(self,state): - self.but_ping['state']=state - self.but_list['state']=state - self.but_listall['state']=state - self.but_resolve['state']=state - self.but_register['state']=state - self.but_remove['state']=state - self.but_shutdown['state']=state - self.but_showmeta['state']=state - self.but_setmeta['state']=state - self.but_resync['state']=state - self.but_creategroup['state']=state - self.but_deletegroup['state']=state - - def createWidgets(self): - frame_top = Frame(self.master,borderwidth=2,relief=GROOVE) - frame_top1 = Frame(frame_top,borderwidth=0) - Label(frame_top1,text='Name Server Location (host:port)').pack(side=LEFT,anchor=W) - self.entry_NSloc=Entry(frame_top1) - self.entry_NSloc.bind('',self.b_findNS) - self.entry_NSloc.pack(expand=1,fill=X,side=LEFT) - Label(frame_top1,text='(press enter)').pack(side=LEFT,anchor=W) - frame_top1.pack(fill=X) - frame_top2 = Frame(frame_top,borderwidth=0) - frame_top3 = Frame(frame_top,borderwidth=0) - Label(frame_top2,text='Authorization ID:').pack(side=LEFT,anchor=W) - self.entry_AuthID=Entry(frame_top2) - self.entry_AuthID.bind('',self.b_findNS) - self.entry_AuthID.pack(expand=1,fill=X,side=LEFT) - Label(frame_top3,text='Broadcast address:').pack(side=LEFT,anchor=W) - self.entry_BCAddr=Entry(frame_top3) - self.entry_BCAddr.pack(expand=1,fill=X,side=LEFT) - self.but_findNS=Button(frame_top3,text='Auto Discover NS',command=self.b_findNS) - self.QUIT=Button(frame_top3,text='QUIT',command=self.quit) - self.QUIT.pack(side=RIGHT) - self.but_findNS.pack(side=RIGHT) - frame_top2.pack(fill=X) - frame_top3.pack(fill=X) - frame_top.pack(fill=X) - - frame_cmds=Frame(self.master) - frame_cmds1=Frame(frame_cmds) - frame_cmds2=Frame(frame_cmds) - self.but_ping=Button(frame_cmds1,text='Ping',state=DISABLED,command=self.b_ping) - self.but_list=Button(frame_cmds1,text='List',state=DISABLED,command=self.b_list) - self.but_listall=Button(frame_cmds1,text='List All',state=DISABLED,command=self.b_listall) - self.but_register=Button(frame_cmds2,text='Register',state=DISABLED,command=self.b_register) - self.but_resolve=Button(frame_cmds1,text='Resolve',state=DISABLED,command=self.b_resolve) - self.but_remove=Button(frame_cmds2,text='Remove',state=DISABLED,command=self.b_remove) - self.but_creategroup=Button(frame_cmds2,text='Create Group',state=DISABLED,command=self.b_creategroup) - self.but_deletegroup=Button(frame_cmds2,text='Delete Group',state=DISABLED,command=self.b_deletegroup) - self.but_showmeta=Button(frame_cmds1,text='Show Meta',state=DISABLED,command=self.b_showmeta) - self.but_setmeta=Button(frame_cmds1,text='Set Meta',state=DISABLED,command=self.b_setmeta) - self.but_resync=Button(frame_cmds1,text='ReSync',state=DISABLED,command=self.b_resync) - self.but_shutdown=Button(frame_cmds1,text='Shutdown',state=DISABLED,command=self.b_shutdown) - self.but_clearoutput=Button(frame_cmds2,text='Clear output',command=self.b_clearoutput) - Label(frame_cmds,text='NS commands:').pack(side=LEFT) - self.but_ping.pack(side=LEFT) - self.but_list.pack(side=LEFT) - self.but_listall.pack(side=LEFT) - self.but_register.pack(side=LEFT) - self.but_resolve.pack(side=LEFT) - self.but_remove.pack(side=LEFT) - self.but_creategroup.pack(side=LEFT) - self.but_deletegroup.pack(side=LEFT) - self.but_showmeta.pack(side=LEFT) - self.but_setmeta.pack(side=LEFT) - self.but_resync.pack(side=LEFT) - self.but_shutdown.pack(side=LEFT) - self.but_clearoutput.pack(side=RIGHT) - - frame_args=Frame(self.master,borderwidth=2) - self.entry_arg=Entry(frame_args) - Label(frame_args,text='Command arguments').pack(side=LEFT) - self.entry_arg.pack(expand=1,fill=X) - - frame_output=Frame(self.master) - ys=Scrollbar(frame_output,orient=VERTICAL) - self.text_out=Text(frame_output,yscrollcommand=ys.set,width=90,height=20) - ys['command']=self.text_out.yview - ys.pack(fill=Y,side=LEFT) - self.text_out.pack(side=LEFT,expand=1,fill=BOTH) - - # pack root children: - frame_cmds1.pack(fill=X) - frame_cmds2.pack(fill=X) - frame_cmds.pack(fill=X) - frame_args.pack(fill=X) - frame_output.pack(fill=BOTH,expand=1) - - def __init__(self, master=None): - self.master = master - self.createWidgets() - -def main(argv): - Pyro.core.initClient() - root=Tk() - root.title('xnsc - Pyro Name Server control tool - Pyro version '+Pyro.constants.VERSION) - app=xnscFrame(root) - root.protocol('WM_DELETE_WINDOW',root.quit) - root.mainloop() - -# allow easy usage with python -m -if __name__=="__main__": - import sys - main(sys.argv) diff --git a/modules/_mysql.pyd b/modules/_mysql.pyd deleted file mode 100644 index 079a5053..00000000 Binary files a/modules/_mysql.pyd and /dev/null differ diff --git a/modules/_mysql_exceptions.py b/modules/_mysql_exceptions.py deleted file mode 100644 index 3241e740..00000000 --- a/modules/_mysql_exceptions.py +++ /dev/null @@ -1,87 +0,0 @@ -"""_mysql_exceptions: Exception classes for _mysql and MySQLdb. - -These classes are dictated by the DB API v2.0: - - http://www.python.org/topics/database/DatabaseAPI-2.0.html -""" - -try: - from exceptions import Exception, StandardError, Warning -except ImportError: - # Python 3 - StandardError = Exception - - -class MySQLError(StandardError): - - """Exception related to operation with MySQL.""" - - -class Warning(Warning, MySQLError): - - """Exception raised for important warnings like data truncations - while inserting, etc.""" - -class Error(MySQLError): - - """Exception that is the base class of all other error exceptions - (not Warning).""" - - -class InterfaceError(Error): - - """Exception raised for errors that are related to the database - interface rather than the database itself.""" - - -class DatabaseError(Error): - - """Exception raised for errors that are related to the - database.""" - - -class DataError(DatabaseError): - - """Exception raised for errors that are due to problems with the - processed data like division by zero, numeric value out of range, - etc.""" - - -class OperationalError(DatabaseError): - - """Exception raised for errors that are related to the database's - operation and not necessarily under the control of the programmer, - e.g. an unexpected disconnect occurs, the data source name is not - found, a transaction could not be processed, a memory allocation - error occurred during processing, etc.""" - - -class IntegrityError(DatabaseError): - - """Exception raised when the relational integrity of the database - is affected, e.g. a foreign key check fails, duplicate key, - etc.""" - - -class InternalError(DatabaseError): - - """Exception raised when the database encounters an internal - error, e.g. the cursor is not valid anymore, the transaction is - out of sync, etc.""" - - -class ProgrammingError(DatabaseError): - - """Exception raised for programming errors, e.g. table not found - or already exists, syntax error in the SQL statement, wrong number - of parameters specified, etc.""" - - -class NotSupportedError(DatabaseError): - - """Exception raised in case a method or database API was used - which is not supported by the database, e.g. requesting a - .rollback() on a connection that does not support transaction or - has transactions turned off.""" - - diff --git a/modules/pytz/__init__.py b/modules/pytz/__init__.py deleted file mode 100644 index 58d81593..00000000 --- a/modules/pytz/__init__.py +++ /dev/null @@ -1,1299 +0,0 @@ -''' -datetime.tzinfo timezone definitions generated from the -Olson timezone database: - - ftp://elsie.nci.nih.gov/pub/tz*.tar.gz - -See the datetime section of the Python Library Reference for information -on how to use these modules. -''' - -# The Olson database has historically been updated about 4 times a year -OLSON_VERSION = '2005r' -VERSION = OLSON_VERSION -#VERSION = OLSON_VERSION + '.2' -__version__ = OLSON_VERSION - -OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling - -__all__ = [ - 'timezone', 'all_timezones', 'common_timezones', 'utc', - 'AmbiguousTimeError', 'country_timezones', '_', - ] - -import sys, datetime, os.path, gettext -from tzinfo import AmbiguousTimeError, unpickler - -# Enable this when we get some translations? -# We want an i18n API that is useful to programs using Python's gettext -# module, as well as the Zope3 i18n package. Perhaps we should just provide -# the POT file and translations, and leave it up to callers to make use -# of them. -# -# t = gettext.translation( -# 'pytz', os.path.join(os.path.dirname(__file__), 'locales'), -# fallback=True -# ) -# def _(timezone_name): -# """Translate a timezone name using the current locale, returning Unicode""" -# return t.ugettext(timezone_name) - -def timezone(zone): - ''' Return a datetime.tzinfo implementation for the given timezone - - >>> from datetime import datetime, timedelta - >>> utc = timezone('UTC') - >>> eastern = timezone('US/Eastern') - >>> eastern.zone - 'US/Eastern' - >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) - >>> loc_dt = utc_dt.astimezone(eastern) - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> loc_dt.strftime(fmt) - '2002-10-27 01:00:00 EST (-0500)' - >>> (loc_dt - timedelta(minutes=10)).strftime(fmt) - '2002-10-27 00:50:00 EST (-0500)' - >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt) - '2002-10-27 01:50:00 EDT (-0400)' - >>> (loc_dt + timedelta(minutes=10)).strftime(fmt) - '2002-10-27 01:10:00 EST (-0500)' - ''' - zone = _munge_zone(zone) - if zone.upper() == 'UTC': - return utc - zone_bits = ['zoneinfo'] + zone.split('/') - - # Load zone's module - module_name = '.'.join(zone_bits) - try: - module = __import__(module_name, globals(), locals()) - except ImportError: - raise KeyError, zone - rv = module - for bit in zone_bits[1:]: - rv = getattr(rv, bit) - - # Return instance from that module - rv = getattr(rv, zone_bits[-1]) - assert type(rv) != type(sys) - return rv - - -def _munge_zone(zone): - ''' Convert a zone into a string suitable for use as a Python identifier - ''' - return zone.replace('+', '_plus_').replace('-', '_minus_') - - -ZERO = datetime.timedelta(0) -HOUR = datetime.timedelta(hours=1) - - -class UTC(datetime.tzinfo): - """UTC - - Identical to the reference UTC implementation given in Python docs except - that it unpickles using the single module global instance defined beneath - this class declaration. - - Also contains extra attributes and methods to match other pytz tzinfo - instances. - """ - zone = "UTC" - - def utcoffset(self, dt): - return ZERO - - def tzname(self, dt): - return "UTC" - - def dst(self, dt): - return ZERO - - def __reduce__(self): - return _UTC, () - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError, 'Not naive datetime (tzinfo is already set)' - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' - if dt.tzinfo is None: - raise ValueError, 'Naive time - no tzinfo set' - return dt.replace(tzinfo=self) - - def __repr__(self): - return "" - - def __str__(self): - return "UTC" - - -UTC = utc = UTC() # UTC is a singleton - - -def _UTC(): - """Factory function for utc unpickling. - - Makes sure that unpickling a utc instance always returns the same - module global. - - These examples belong in the UTC class above, but it is obscured; or in - the README.txt, but we are not depending on Python 2.4 so integrating - the README.txt examples with the unit tests is not trivial. - - >>> import datetime, pickle - >>> dt = datetime.datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc) - >>> naive = dt.replace(tzinfo=None) - >>> p = pickle.dumps(dt, 1) - >>> naive_p = pickle.dumps(naive, 1) - >>> len(p), len(naive_p), len(p) - len(naive_p) - (60, 43, 17) - >>> new = pickle.loads(p) - >>> new == dt - True - >>> new is dt - False - >>> new.tzinfo is dt.tzinfo - True - >>> utc is UTC is timezone('UTC') - True - >>> utc is timezone('GMT') - False - """ - return utc -_UTC.__safe_for_unpickling__ = True - - -def _p(*args): - """Factory function for unpickling pytz tzinfo instances. - - Just a wrapper around tzinfo.unpickler to save a few bytes in each pickle - by shortening the path. - """ - return unpickler(*args) -_p.__safe_for_unpickling__ = True - -_country_timezones_cache = {} - -def country_timezones(iso3166_code): - """Return a list of timezones used in a particular country. - - iso3166_code is the two letter code used to identify the country. - - >>> country_timezones('ch') - ['Europe/Zurich'] - >>> country_timezones('CH') - ['Europe/Zurich'] - >>> country_timezones('XXX') - Traceback (most recent call last): - ... - KeyError: 'XXX' - """ - iso3166_code = iso3166_code.upper() - if not _country_timezones_cache: - zone_tab_name = os.path.join(os.path.dirname(__file__), 'zone.tab') - for line in open(zone_tab_name): - if line.startswith('#'): - continue - code, coordinates, zone = line.split(None, 4)[:3] - try: - _country_timezones_cache[code].append(zone) - except KeyError: - _country_timezones_cache[code] = [zone] - return _country_timezones_cache[iso3166_code] - -# Time-zone info based solely on fixed offsets - -class _FixedOffset(datetime.tzinfo): - - zone = None # to match the standard pytz API - - def __init__(self, minutes): - if abs(minutes) >= 1440: - raise ValueError("absolute offset is too large", minutes) - self._minutes = minutes - self._offset = datetime.timedelta(minutes=minutes) - - def utcoffset(self, dt): - return self._offset - - def __reduce__(self): - return FixedOffset, (self._minutes, ) - - def dst(self, dt): - return None - - def tzname(self, dt): - return None - - def __repr__(self): - return 'pytz.FixedOffset(%d)' % self._minutes - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError, 'Not naive datetime (tzinfo is already set)' - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' - if dt.tzinfo is None: - raise ValueError, 'Naive time - no tzinfo set' - return dt.replace(tzinfo=self) - -def FixedOffset(offset, _tzinfos = {}): - """return a fixed-offset timezone based off a number of minutes. - - >>> one = FixedOffset(-330) - >>> one - pytz.FixedOffset(-330) - >>> one.utcoffset(datetime.datetime.now()) - datetime.timedelta(-1, 66600) - - >>> two = FixedOffset(1380) - >>> two - pytz.FixedOffset(1380) - >>> two.utcoffset(datetime.datetime.now()) - datetime.timedelta(0, 82800) - - The datetime.timedelta must be between the range of -1 and 1 day, - non-inclusive. - - >>> FixedOffset(1440) - Traceback (most recent call last): - ... - ValueError: ('absolute offset is too large', 1440) - - >>> FixedOffset(-1440) - Traceback (most recent call last): - ... - ValueError: ('absolute offset is too large', -1440) - - An offset of 0 is special-cased to return UTC. - - >>> FixedOffset(0) is UTC - True - - There should always be only one instance of a FixedOffset per timedelta. - This should be true for multiple creation calls. - - >>> FixedOffset(-330) is one - True - >>> FixedOffset(1380) is two - True - - It should also be true for pickling. - - >>> import pickle - >>> pickle.loads(pickle.dumps(one)) is one - True - >>> pickle.loads(pickle.dumps(two)) is two - True - - """ - - if offset == 0: - return UTC - - info = _tzinfos.get(offset) - if info is None: - # We haven't seen this one before. we need to save it. - - # Use setdefault to avoid a race condition and make sure we have - # only one - info = _tzinfos.setdefault(offset, _FixedOffset(offset)) - - return info - -FixedOffset.__safe_for_unpickling__ = True - -def _test(): - import doctest, os, sys - sys.path.insert(0, os.pardir) - import pytz - return doctest.testmod(pytz) - -if __name__ == '__main__': - _test() - -common_timezones = \ -['Africa/Abidjan', - 'Africa/Accra', - 'Africa/Addis_Ababa', - 'Africa/Algiers', - 'Africa/Asmera', - 'Africa/Bamako', - 'Africa/Bangui', - 'Africa/Banjul', - 'Africa/Bissau', - 'Africa/Blantyre', - 'Africa/Brazzaville', - 'Africa/Bujumbura', - 'Africa/Cairo', - 'Africa/Casablanca', - 'Africa/Ceuta', - 'Africa/Conakry', - 'Africa/Dakar', - 'Africa/Dar_es_Salaam', - 'Africa/Djibouti', - 'Africa/Douala', - 'Africa/El_Aaiun', - 'Africa/Freetown', - 'Africa/Gaborone', - 'Africa/Harare', - 'Africa/Johannesburg', - 'Africa/Kampala', - 'Africa/Khartoum', - 'Africa/Kigali', - 'Africa/Kinshasa', - 'Africa/Lagos', - 'Africa/Libreville', - 'Africa/Lome', - 'Africa/Luanda', - 'Africa/Lubumbashi', - 'Africa/Lusaka', - 'Africa/Malabo', - 'Africa/Maputo', - 'Africa/Maseru', - 'Africa/Mbabane', - 'Africa/Mogadishu', - 'Africa/Monrovia', - 'Africa/Nairobi', - 'Africa/Ndjamena', - 'Africa/Niamey', - 'Africa/Nouakchott', - 'Africa/Ouagadougou', - 'Africa/Porto-Novo', - 'Africa/Sao_Tome', - 'Africa/Timbuktu', - 'Africa/Tripoli', - 'Africa/Tunis', - 'Africa/Windhoek', - 'America/Adak', - 'America/Anchorage', - 'America/Anguilla', - 'America/Antigua', - 'America/Araguaina', - 'America/Aruba', - 'America/Asuncion', - 'America/Atka', - 'America/Bahia', - 'America/Barbados', - 'America/Belem', - 'America/Belize', - 'America/Boa_Vista', - 'America/Bogota', - 'America/Boise', - 'America/Buenos_Aires', - 'America/Cambridge_Bay', - 'America/Campo_Grande', - 'America/Cancun', - 'America/Caracas', - 'America/Catamarca', - 'America/Cayenne', - 'America/Cayman', - 'America/Chicago', - 'America/Chihuahua', - 'America/Coral_Harbour', - 'America/Cordoba', - 'America/Costa_Rica', - 'America/Cuiaba', - 'America/Curacao', - 'America/Danmarkshavn', - 'America/Dawson', - 'America/Dawson_Creek', - 'America/Denver', - 'America/Detroit', - 'America/Dominica', - 'America/Edmonton', - 'America/Eirunepe', - 'America/El_Salvador', - 'America/Ensenada', - 'America/Fort_Wayne', - 'America/Fortaleza', - 'America/Glace_Bay', - 'America/Godthab', - 'America/Goose_Bay', - 'America/Grand_Turk', - 'America/Grenada', - 'America/Guadeloupe', - 'America/Guatemala', - 'America/Guayaquil', - 'America/Guyana', - 'America/Halifax', - 'America/Havana', - 'America/Hermosillo', - 'America/Indianapolis', - 'America/Inuvik', - 'America/Iqaluit', - 'America/Jamaica', - 'America/Jujuy', - 'America/Juneau', - 'America/Knox_IN', - 'America/La_Paz', - 'America/Lima', - 'America/Los_Angeles', - 'America/Louisville', - 'America/Maceio', - 'America/Managua', - 'America/Manaus', - 'America/Martinique', - 'America/Mazatlan', - 'America/Mendoza', - 'America/Menominee', - 'America/Merida', - 'America/Mexico_City', - 'America/Miquelon', - 'America/Monterrey', - 'America/Montevideo', - 'America/Montreal', - 'America/Montserrat', - 'America/Nassau', - 'America/New_York', - 'America/Nipigon', - 'America/Nome', - 'America/Noronha', - 'America/Panama', - 'America/Pangnirtung', - 'America/Paramaribo', - 'America/Phoenix', - 'America/Port-au-Prince', - 'America/Port_of_Spain', - 'America/Porto_Acre', - 'America/Porto_Velho', - 'America/Puerto_Rico', - 'America/Rainy_River', - 'America/Rankin_Inlet', - 'America/Recife', - 'America/Regina', - 'America/Rio_Branco', - 'America/Rosario', - 'America/Santiago', - 'America/Santo_Domingo', - 'America/Sao_Paulo', - 'America/Scoresbysund', - 'America/Shiprock', - 'America/St_Johns', - 'America/St_Kitts', - 'America/St_Lucia', - 'America/St_Thomas', - 'America/St_Vincent', - 'America/Swift_Current', - 'America/Tegucigalpa', - 'America/Thule', - 'America/Thunder_Bay', - 'America/Tijuana', - 'America/Toronto', - 'America/Tortola', - 'America/Vancouver', - 'America/Virgin', - 'America/Whitehorse', - 'America/Winnipeg', - 'America/Yakutat', - 'America/Yellowknife', - 'Antarctica/Casey', - 'Antarctica/Davis', - 'Antarctica/DumontDUrville', - 'Antarctica/Mawson', - 'Antarctica/McMurdo', - 'Antarctica/Palmer', - 'Antarctica/Rothera', - 'Antarctica/South_Pole', - 'Antarctica/Syowa', - 'Antarctica/Vostok', - 'Arctic/Longyearbyen', - 'Asia/Aden', - 'Asia/Almaty', - 'Asia/Amman', - 'Asia/Anadyr', - 'Asia/Aqtau', - 'Asia/Aqtobe', - 'Asia/Ashgabat', - 'Asia/Ashkhabad', - 'Asia/Baghdad', - 'Asia/Bahrain', - 'Asia/Baku', - 'Asia/Bangkok', - 'Asia/Beirut', - 'Asia/Bishkek', - 'Asia/Brunei', - 'Asia/Calcutta', - 'Asia/Choibalsan', - 'Asia/Chongqing', - 'Asia/Chungking', - 'Asia/Colombo', - 'Asia/Dacca', - 'Asia/Damascus', - 'Asia/Dhaka', - 'Asia/Dili', - 'Asia/Dubai', - 'Asia/Dushanbe', - 'Asia/Gaza', - 'Asia/Harbin', - 'Asia/Hong_Kong', - 'Asia/Hovd', - 'Asia/Irkutsk', - 'Asia/Istanbul', - 'Asia/Jakarta', - 'Asia/Jayapura', - 'Asia/Jerusalem', - 'Asia/Kabul', - 'Asia/Kamchatka', - 'Asia/Karachi', - 'Asia/Kashgar', - 'Asia/Katmandu', - 'Asia/Krasnoyarsk', - 'Asia/Kuala_Lumpur', - 'Asia/Kuching', - 'Asia/Kuwait', - 'Asia/Macao', - 'Asia/Macau', - 'Asia/Magadan', - 'Asia/Makassar', - 'Asia/Manila', - 'Asia/Muscat', - 'Asia/Nicosia', - 'Asia/Novosibirsk', - 'Asia/Omsk', - 'Asia/Oral', - 'Asia/Phnom_Penh', - 'Asia/Pontianak', - 'Asia/Pyongyang', - 'Asia/Qatar', - 'Asia/Qyzylorda', - 'Asia/Rangoon', - 'Asia/Riyadh', - 'Asia/Saigon', - 'Asia/Sakhalin', - 'Asia/Samarkand', - 'Asia/Seoul', - 'Asia/Shanghai', - 'Asia/Singapore', - 'Asia/Taipei', - 'Asia/Tashkent', - 'Asia/Tbilisi', - 'Asia/Tehran', - 'Asia/Tel_Aviv', - 'Asia/Thimbu', - 'Asia/Thimphu', - 'Asia/Tokyo', - 'Asia/Ujung_Pandang', - 'Asia/Ulaanbaatar', - 'Asia/Ulan_Bator', - 'Asia/Urumqi', - 'Asia/Vientiane', - 'Asia/Vladivostok', - 'Asia/Yakutsk', - 'Asia/Yekaterinburg', - 'Asia/Yerevan', - 'Atlantic/Azores', - 'Atlantic/Bermuda', - 'Atlantic/Canary', - 'Atlantic/Cape_Verde', - 'Atlantic/Faeroe', - 'Atlantic/Jan_Mayen', - 'Atlantic/Madeira', - 'Atlantic/Reykjavik', - 'Atlantic/South_Georgia', - 'Atlantic/St_Helena', - 'Atlantic/Stanley', - 'Australia/ACT', - 'Australia/Adelaide', - 'Australia/Brisbane', - 'Australia/Broken_Hill', - 'Australia/Canberra', - 'Australia/Currie', - 'Australia/Darwin', - 'Australia/Hobart', - 'Australia/LHI', - 'Australia/Lindeman', - 'Australia/Lord_Howe', - 'Australia/Melbourne', - 'Australia/NSW', - 'Australia/North', - 'Australia/Perth', - 'Australia/Queensland', - 'Australia/South', - 'Australia/Sydney', - 'Australia/Tasmania', - 'Australia/Victoria', - 'Australia/West', - 'Australia/Yancowinna', - 'Brazil/Acre', - 'Brazil/DeNoronha', - 'Brazil/East', - 'Brazil/West', - 'Canada/Atlantic', - 'Canada/Central', - 'Canada/East-Saskatchewan', - 'Canada/Eastern', - 'Canada/Mountain', - 'Canada/Newfoundland', - 'Canada/Pacific', - 'Canada/Saskatchewan', - 'Canada/Yukon', - 'Chile/Continental', - 'Chile/EasterIsland', - 'Europe/Amsterdam', - 'Europe/Andorra', - 'Europe/Athens', - 'Europe/Belfast', - 'Europe/Belgrade', - 'Europe/Berlin', - 'Europe/Bratislava', - 'Europe/Brussels', - 'Europe/Bucharest', - 'Europe/Budapest', - 'Europe/Chisinau', - 'Europe/Copenhagen', - 'Europe/Dublin', - 'Europe/Gibraltar', - 'Europe/Helsinki', - 'Europe/Istanbul', - 'Europe/Kaliningrad', - 'Europe/Kiev', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', - 'Europe/Luxembourg', - 'Europe/Madrid', - 'Europe/Malta', - 'Europe/Mariehamn', - 'Europe/Minsk', - 'Europe/Monaco', - 'Europe/Moscow', - 'Europe/Nicosia', - 'Europe/Oslo', - 'Europe/Paris', - 'Europe/Prague', - 'Europe/Riga', - 'Europe/Rome', - 'Europe/Samara', - 'Europe/San_Marino', - 'Europe/Sarajevo', - 'Europe/Simferopol', - 'Europe/Skopje', - 'Europe/Sofia', - 'Europe/Stockholm', - 'Europe/Tallinn', - 'Europe/Tirane', - 'Europe/Tiraspol', - 'Europe/Uzhgorod', - 'Europe/Vaduz', - 'Europe/Vatican', - 'Europe/Vienna', - 'Europe/Vilnius', - 'Europe/Warsaw', - 'Europe/Zagreb', - 'Europe/Zaporozhye', - 'Europe/Zurich', - 'GMT', - 'Indian/Antananarivo', - 'Indian/Chagos', - 'Indian/Christmas', - 'Indian/Cocos', - 'Indian/Comoro', - 'Indian/Kerguelen', - 'Indian/Mahe', - 'Indian/Maldives', - 'Indian/Mauritius', - 'Indian/Mayotte', - 'Indian/Reunion', - 'Mexico/BajaNorte', - 'Mexico/BajaSur', - 'Mexico/General', - 'Pacific/Apia', - 'Pacific/Auckland', - 'Pacific/Chatham', - 'Pacific/Easter', - 'Pacific/Efate', - 'Pacific/Enderbury', - 'Pacific/Fakaofo', - 'Pacific/Fiji', - 'Pacific/Funafuti', - 'Pacific/Galapagos', - 'Pacific/Gambier', - 'Pacific/Guadalcanal', - 'Pacific/Guam', - 'Pacific/Honolulu', - 'Pacific/Johnston', - 'Pacific/Kiritimati', - 'Pacific/Kosrae', - 'Pacific/Kwajalein', - 'Pacific/Majuro', - 'Pacific/Marquesas', - 'Pacific/Midway', - 'Pacific/Nauru', - 'Pacific/Niue', - 'Pacific/Norfolk', - 'Pacific/Noumea', - 'Pacific/Pago_Pago', - 'Pacific/Palau', - 'Pacific/Pitcairn', - 'Pacific/Ponape', - 'Pacific/Port_Moresby', - 'Pacific/Rarotonga', - 'Pacific/Saipan', - 'Pacific/Samoa', - 'Pacific/Tahiti', - 'Pacific/Tarawa', - 'Pacific/Tongatapu', - 'Pacific/Truk', - 'Pacific/Wake', - 'Pacific/Wallis', - 'Pacific/Yap', - 'US/Alaska', - 'US/Aleutian', - 'US/Arizona', - 'US/Central', - 'US/East-Indiana', - 'US/Eastern', - 'US/Hawaii', - 'US/Indiana-Starke', - 'US/Michigan', - 'US/Mountain', - 'US/Pacific', - 'US/Pacific-New', - 'US/Samoa', - 'UTC'] - -all_timezones = \ -['Africa/Abidjan', - 'Africa/Accra', - 'Africa/Addis_Ababa', - 'Africa/Algiers', - 'Africa/Asmera', - 'Africa/Bamako', - 'Africa/Bangui', - 'Africa/Banjul', - 'Africa/Bissau', - 'Africa/Blantyre', - 'Africa/Brazzaville', - 'Africa/Bujumbura', - 'Africa/Cairo', - 'Africa/Casablanca', - 'Africa/Ceuta', - 'Africa/Conakry', - 'Africa/Dakar', - 'Africa/Dar_es_Salaam', - 'Africa/Djibouti', - 'Africa/Douala', - 'Africa/El_Aaiun', - 'Africa/Freetown', - 'Africa/Gaborone', - 'Africa/Harare', - 'Africa/Johannesburg', - 'Africa/Kampala', - 'Africa/Khartoum', - 'Africa/Kigali', - 'Africa/Kinshasa', - 'Africa/Lagos', - 'Africa/Libreville', - 'Africa/Lome', - 'Africa/Luanda', - 'Africa/Lubumbashi', - 'Africa/Lusaka', - 'Africa/Malabo', - 'Africa/Maputo', - 'Africa/Maseru', - 'Africa/Mbabane', - 'Africa/Mogadishu', - 'Africa/Monrovia', - 'Africa/Nairobi', - 'Africa/Ndjamena', - 'Africa/Niamey', - 'Africa/Nouakchott', - 'Africa/Ouagadougou', - 'Africa/Porto-Novo', - 'Africa/Sao_Tome', - 'Africa/Timbuktu', - 'Africa/Tripoli', - 'Africa/Tunis', - 'Africa/Windhoek', - 'America/Adak', - 'America/Anchorage', - 'America/Anguilla', - 'America/Antigua', - 'America/Araguaina', - 'America/Argentina/Buenos_Aires', - 'America/Argentina/Catamarca', - 'America/Argentina/ComodRivadavia', - 'America/Argentina/Cordoba', - 'America/Argentina/Jujuy', - 'America/Argentina/La_Rioja', - 'America/Argentina/Mendoza', - 'America/Argentina/Rio_Gallegos', - 'America/Argentina/San_Juan', - 'America/Argentina/Tucuman', - 'America/Argentina/Ushuaia', - 'America/Aruba', - 'America/Asuncion', - 'America/Atka', - 'America/Bahia', - 'America/Barbados', - 'America/Belem', - 'America/Belize', - 'America/Boa_Vista', - 'America/Bogota', - 'America/Boise', - 'America/Buenos_Aires', - 'America/Cambridge_Bay', - 'America/Campo_Grande', - 'America/Cancun', - 'America/Caracas', - 'America/Catamarca', - 'America/Cayenne', - 'America/Cayman', - 'America/Chicago', - 'America/Chihuahua', - 'America/Coral_Harbour', - 'America/Cordoba', - 'America/Costa_Rica', - 'America/Cuiaba', - 'America/Curacao', - 'America/Danmarkshavn', - 'America/Dawson', - 'America/Dawson_Creek', - 'America/Denver', - 'America/Detroit', - 'America/Dominica', - 'America/Edmonton', - 'America/Eirunepe', - 'America/El_Salvador', - 'America/Ensenada', - 'America/Fort_Wayne', - 'America/Fortaleza', - 'America/Glace_Bay', - 'America/Godthab', - 'America/Goose_Bay', - 'America/Grand_Turk', - 'America/Grenada', - 'America/Guadeloupe', - 'America/Guatemala', - 'America/Guayaquil', - 'America/Guyana', - 'America/Halifax', - 'America/Havana', - 'America/Hermosillo', - 'America/Indiana/Indianapolis', - 'America/Indiana/Knox', - 'America/Indiana/Marengo', - 'America/Indiana/Vevay', - 'America/Indianapolis', - 'America/Inuvik', - 'America/Iqaluit', - 'America/Jamaica', - 'America/Jujuy', - 'America/Juneau', - 'America/Kentucky/Louisville', - 'America/Kentucky/Monticello', - 'America/Knox_IN', - 'America/La_Paz', - 'America/Lima', - 'America/Los_Angeles', - 'America/Louisville', - 'America/Maceio', - 'America/Managua', - 'America/Manaus', - 'America/Martinique', - 'America/Mazatlan', - 'America/Mendoza', - 'America/Menominee', - 'America/Merida', - 'America/Mexico_City', - 'America/Miquelon', - 'America/Monterrey', - 'America/Montevideo', - 'America/Montreal', - 'America/Montserrat', - 'America/Nassau', - 'America/New_York', - 'America/Nipigon', - 'America/Nome', - 'America/Noronha', - 'America/North_Dakota/Center', - 'America/Panama', - 'America/Pangnirtung', - 'America/Paramaribo', - 'America/Phoenix', - 'America/Port-au-Prince', - 'America/Port_of_Spain', - 'America/Porto_Acre', - 'America/Porto_Velho', - 'America/Puerto_Rico', - 'America/Rainy_River', - 'America/Rankin_Inlet', - 'America/Recife', - 'America/Regina', - 'America/Rio_Branco', - 'America/Rosario', - 'America/Santiago', - 'America/Santo_Domingo', - 'America/Sao_Paulo', - 'America/Scoresbysund', - 'America/Shiprock', - 'America/St_Johns', - 'America/St_Kitts', - 'America/St_Lucia', - 'America/St_Thomas', - 'America/St_Vincent', - 'America/Swift_Current', - 'America/Tegucigalpa', - 'America/Thule', - 'America/Thunder_Bay', - 'America/Tijuana', - 'America/Toronto', - 'America/Tortola', - 'America/Vancouver', - 'America/Virgin', - 'America/Whitehorse', - 'America/Winnipeg', - 'America/Yakutat', - 'America/Yellowknife', - 'Antarctica/Casey', - 'Antarctica/Davis', - 'Antarctica/DumontDUrville', - 'Antarctica/Mawson', - 'Antarctica/McMurdo', - 'Antarctica/Palmer', - 'Antarctica/Rothera', - 'Antarctica/South_Pole', - 'Antarctica/Syowa', - 'Antarctica/Vostok', - 'Arctic/Longyearbyen', - 'Asia/Aden', - 'Asia/Almaty', - 'Asia/Amman', - 'Asia/Anadyr', - 'Asia/Aqtau', - 'Asia/Aqtobe', - 'Asia/Ashgabat', - 'Asia/Ashkhabad', - 'Asia/Baghdad', - 'Asia/Bahrain', - 'Asia/Baku', - 'Asia/Bangkok', - 'Asia/Beirut', - 'Asia/Bishkek', - 'Asia/Brunei', - 'Asia/Calcutta', - 'Asia/Choibalsan', - 'Asia/Chongqing', - 'Asia/Chungking', - 'Asia/Colombo', - 'Asia/Dacca', - 'Asia/Damascus', - 'Asia/Dhaka', - 'Asia/Dili', - 'Asia/Dubai', - 'Asia/Dushanbe', - 'Asia/Gaza', - 'Asia/Harbin', - 'Asia/Hong_Kong', - 'Asia/Hovd', - 'Asia/Irkutsk', - 'Asia/Istanbul', - 'Asia/Jakarta', - 'Asia/Jayapura', - 'Asia/Jerusalem', - 'Asia/Kabul', - 'Asia/Kamchatka', - 'Asia/Karachi', - 'Asia/Kashgar', - 'Asia/Katmandu', - 'Asia/Krasnoyarsk', - 'Asia/Kuala_Lumpur', - 'Asia/Kuching', - 'Asia/Kuwait', - 'Asia/Macao', - 'Asia/Macau', - 'Asia/Magadan', - 'Asia/Makassar', - 'Asia/Manila', - 'Asia/Muscat', - 'Asia/Nicosia', - 'Asia/Novosibirsk', - 'Asia/Omsk', - 'Asia/Oral', - 'Asia/Phnom_Penh', - 'Asia/Pontianak', - 'Asia/Pyongyang', - 'Asia/Qatar', - 'Asia/Qyzylorda', - 'Asia/Rangoon', - 'Asia/Riyadh', - 'Asia/Saigon', - 'Asia/Sakhalin', - 'Asia/Samarkand', - 'Asia/Seoul', - 'Asia/Shanghai', - 'Asia/Singapore', - 'Asia/Taipei', - 'Asia/Tashkent', - 'Asia/Tbilisi', - 'Asia/Tehran', - 'Asia/Tel_Aviv', - 'Asia/Thimbu', - 'Asia/Thimphu', - 'Asia/Tokyo', - 'Asia/Ujung_Pandang', - 'Asia/Ulaanbaatar', - 'Asia/Ulan_Bator', - 'Asia/Urumqi', - 'Asia/Vientiane', - 'Asia/Vladivostok', - 'Asia/Yakutsk', - 'Asia/Yekaterinburg', - 'Asia/Yerevan', - 'Atlantic/Azores', - 'Atlantic/Bermuda', - 'Atlantic/Canary', - 'Atlantic/Cape_Verde', - 'Atlantic/Faeroe', - 'Atlantic/Jan_Mayen', - 'Atlantic/Madeira', - 'Atlantic/Reykjavik', - 'Atlantic/South_Georgia', - 'Atlantic/St_Helena', - 'Atlantic/Stanley', - 'Australia/ACT', - 'Australia/Adelaide', - 'Australia/Brisbane', - 'Australia/Broken_Hill', - 'Australia/Canberra', - 'Australia/Currie', - 'Australia/Darwin', - 'Australia/Hobart', - 'Australia/LHI', - 'Australia/Lindeman', - 'Australia/Lord_Howe', - 'Australia/Melbourne', - 'Australia/NSW', - 'Australia/North', - 'Australia/Perth', - 'Australia/Queensland', - 'Australia/South', - 'Australia/Sydney', - 'Australia/Tasmania', - 'Australia/Victoria', - 'Australia/West', - 'Australia/Yancowinna', - 'Brazil/Acre', - 'Brazil/DeNoronha', - 'Brazil/East', - 'Brazil/West', - 'CET', - 'CST6CDT', - 'Canada/Atlantic', - 'Canada/Central', - 'Canada/East-Saskatchewan', - 'Canada/Eastern', - 'Canada/Mountain', - 'Canada/Newfoundland', - 'Canada/Pacific', - 'Canada/Saskatchewan', - 'Canada/Yukon', - 'Chile/Continental', - 'Chile/EasterIsland', - 'Cuba', - 'EET', - 'EST', - 'EST5EDT', - 'Egypt', - 'Eire', - 'Etc/GMT', - 'Etc/GMT+0', - 'Etc/GMT+1', - 'Etc/GMT+10', - 'Etc/GMT+11', - 'Etc/GMT+12', - 'Etc/GMT+2', - 'Etc/GMT+3', - 'Etc/GMT+4', - 'Etc/GMT+5', - 'Etc/GMT+6', - 'Etc/GMT+7', - 'Etc/GMT+8', - 'Etc/GMT+9', - 'Etc/GMT-0', - 'Etc/GMT-1', - 'Etc/GMT-10', - 'Etc/GMT-11', - 'Etc/GMT-12', - 'Etc/GMT-13', - 'Etc/GMT-14', - 'Etc/GMT-2', - 'Etc/GMT-3', - 'Etc/GMT-4', - 'Etc/GMT-5', - 'Etc/GMT-6', - 'Etc/GMT-7', - 'Etc/GMT-8', - 'Etc/GMT-9', - 'Etc/GMT0', - 'Etc/Greenwich', - 'Etc/UCT', - 'Etc/UTC', - 'Etc/Universal', - 'Etc/Zulu', - 'Europe/Amsterdam', - 'Europe/Andorra', - 'Europe/Athens', - 'Europe/Belfast', - 'Europe/Belgrade', - 'Europe/Berlin', - 'Europe/Bratislava', - 'Europe/Brussels', - 'Europe/Bucharest', - 'Europe/Budapest', - 'Europe/Chisinau', - 'Europe/Copenhagen', - 'Europe/Dublin', - 'Europe/Gibraltar', - 'Europe/Helsinki', - 'Europe/Istanbul', - 'Europe/Kaliningrad', - 'Europe/Kiev', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', - 'Europe/Luxembourg', - 'Europe/Madrid', - 'Europe/Malta', - 'Europe/Mariehamn', - 'Europe/Minsk', - 'Europe/Monaco', - 'Europe/Moscow', - 'Europe/Nicosia', - 'Europe/Oslo', - 'Europe/Paris', - 'Europe/Prague', - 'Europe/Riga', - 'Europe/Rome', - 'Europe/Samara', - 'Europe/San_Marino', - 'Europe/Sarajevo', - 'Europe/Simferopol', - 'Europe/Skopje', - 'Europe/Sofia', - 'Europe/Stockholm', - 'Europe/Tallinn', - 'Europe/Tirane', - 'Europe/Tiraspol', - 'Europe/Uzhgorod', - 'Europe/Vaduz', - 'Europe/Vatican', - 'Europe/Vienna', - 'Europe/Vilnius', - 'Europe/Warsaw', - 'Europe/Zagreb', - 'Europe/Zaporozhye', - 'Europe/Zurich', - 'GB', - 'GB-Eire', - 'GMT', - 'GMT+0', - 'GMT-0', - 'GMT0', - 'Greenwich', - 'HST', - 'Hongkong', - 'Iceland', - 'Indian/Antananarivo', - 'Indian/Chagos', - 'Indian/Christmas', - 'Indian/Cocos', - 'Indian/Comoro', - 'Indian/Kerguelen', - 'Indian/Mahe', - 'Indian/Maldives', - 'Indian/Mauritius', - 'Indian/Mayotte', - 'Indian/Reunion', - 'Iran', - 'Israel', - 'Jamaica', - 'Japan', - 'Kwajalein', - 'Libya', - 'MET', - 'MST', - 'MST7MDT', - 'Mexico/BajaNorte', - 'Mexico/BajaSur', - 'Mexico/General', - 'NZ', - 'NZ-CHAT', - 'Navajo', - 'PRC', - 'PST8PDT', - 'Pacific/Apia', - 'Pacific/Auckland', - 'Pacific/Chatham', - 'Pacific/Easter', - 'Pacific/Efate', - 'Pacific/Enderbury', - 'Pacific/Fakaofo', - 'Pacific/Fiji', - 'Pacific/Funafuti', - 'Pacific/Galapagos', - 'Pacific/Gambier', - 'Pacific/Guadalcanal', - 'Pacific/Guam', - 'Pacific/Honolulu', - 'Pacific/Johnston', - 'Pacific/Kiritimati', - 'Pacific/Kosrae', - 'Pacific/Kwajalein', - 'Pacific/Majuro', - 'Pacific/Marquesas', - 'Pacific/Midway', - 'Pacific/Nauru', - 'Pacific/Niue', - 'Pacific/Norfolk', - 'Pacific/Noumea', - 'Pacific/Pago_Pago', - 'Pacific/Palau', - 'Pacific/Pitcairn', - 'Pacific/Ponape', - 'Pacific/Port_Moresby', - 'Pacific/Rarotonga', - 'Pacific/Saipan', - 'Pacific/Samoa', - 'Pacific/Tahiti', - 'Pacific/Tarawa', - 'Pacific/Tongatapu', - 'Pacific/Truk', - 'Pacific/Wake', - 'Pacific/Wallis', - 'Pacific/Yap', - 'Poland', - 'Portugal', - 'ROC', - 'ROK', - 'Singapore', - 'Turkey', - 'UCT', - 'US/Alaska', - 'US/Aleutian', - 'US/Arizona', - 'US/Central', - 'US/East-Indiana', - 'US/Eastern', - 'US/Hawaii', - 'US/Indiana-Starke', - 'US/Michigan', - 'US/Mountain', - 'US/Pacific', - 'US/Pacific-New', - 'US/Samoa', - 'UTC', - 'Universal', - 'W-SU', - 'WET', - 'Zulu', - 'posixrules'] diff --git a/modules/pytz/locales/pytz.pot b/modules/pytz/locales/pytz.pot deleted file mode 100644 index 19e6e248..00000000 --- a/modules/pytz/locales/pytz.pot +++ /dev/null @@ -1,1612 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: pytz 2005r\n" -"POT-Creation-Date: 2005-12-31 09:29+UTC\n" -"Content-Type: text/plain; charset=UTF-8\n" - - -msgid "Africa/Abidjan" -msgstr "" - -msgid "Africa/Accra" -msgstr "" - -msgid "Africa/Addis_Ababa" -msgstr "" - -msgid "Africa/Algiers" -msgstr "" - -msgid "Africa/Asmera" -msgstr "" - -msgid "Africa/Bamako" -msgstr "" - -msgid "Africa/Bangui" -msgstr "" - -msgid "Africa/Banjul" -msgstr "" - -msgid "Africa/Bissau" -msgstr "" - -msgid "Africa/Blantyre" -msgstr "" - -msgid "Africa/Brazzaville" -msgstr "" - -msgid "Africa/Bujumbura" -msgstr "" - -msgid "Africa/Cairo" -msgstr "" - -msgid "Africa/Casablanca" -msgstr "" - -msgid "Africa/Ceuta" -msgstr "" - -msgid "Africa/Conakry" -msgstr "" - -msgid "Africa/Dakar" -msgstr "" - -msgid "Africa/Dar_es_Salaam" -msgstr "" - -msgid "Africa/Djibouti" -msgstr "" - -msgid "Africa/Douala" -msgstr "" - -msgid "Africa/El_Aaiun" -msgstr "" - -msgid "Africa/Freetown" -msgstr "" - -msgid "Africa/Gaborone" -msgstr "" - -msgid "Africa/Harare" -msgstr "" - -msgid "Africa/Johannesburg" -msgstr "" - -msgid "Africa/Kampala" -msgstr "" - -msgid "Africa/Khartoum" -msgstr "" - -msgid "Africa/Kigali" -msgstr "" - -msgid "Africa/Kinshasa" -msgstr "" - -msgid "Africa/Lagos" -msgstr "" - -msgid "Africa/Libreville" -msgstr "" - -msgid "Africa/Lome" -msgstr "" - -msgid "Africa/Luanda" -msgstr "" - -msgid "Africa/Lubumbashi" -msgstr "" - -msgid "Africa/Lusaka" -msgstr "" - -msgid "Africa/Malabo" -msgstr "" - -msgid "Africa/Maputo" -msgstr "" - -msgid "Africa/Maseru" -msgstr "" - -msgid "Africa/Mbabane" -msgstr "" - -msgid "Africa/Mogadishu" -msgstr "" - -msgid "Africa/Monrovia" -msgstr "" - -msgid "Africa/Nairobi" -msgstr "" - -msgid "Africa/Ndjamena" -msgstr "" - -msgid "Africa/Niamey" -msgstr "" - -msgid "Africa/Nouakchott" -msgstr "" - -msgid "Africa/Ouagadougou" -msgstr "" - -msgid "Africa/Porto-Novo" -msgstr "" - -msgid "Africa/Sao_Tome" -msgstr "" - -msgid "Africa/Timbuktu" -msgstr "" - -msgid "Africa/Tripoli" -msgstr "" - -msgid "Africa/Tunis" -msgstr "" - -msgid "Africa/Windhoek" -msgstr "" - -msgid "America/Adak" -msgstr "" - -msgid "America/Anchorage" -msgstr "" - -msgid "America/Anguilla" -msgstr "" - -msgid "America/Antigua" -msgstr "" - -msgid "America/Araguaina" -msgstr "" - -msgid "America/Argentina/Buenos_Aires" -msgstr "" - -msgid "America/Argentina/Catamarca" -msgstr "" - -msgid "America/Argentina/ComodRivadavia" -msgstr "" - -msgid "America/Argentina/Cordoba" -msgstr "" - -msgid "America/Argentina/Jujuy" -msgstr "" - -msgid "America/Argentina/La_Rioja" -msgstr "" - -msgid "America/Argentina/Mendoza" -msgstr "" - -msgid "America/Argentina/Rio_Gallegos" -msgstr "" - -msgid "America/Argentina/San_Juan" -msgstr "" - -msgid "America/Argentina/Tucuman" -msgstr "" - -msgid "America/Argentina/Ushuaia" -msgstr "" - -msgid "America/Aruba" -msgstr "" - -msgid "America/Asuncion" -msgstr "" - -msgid "America/Atka" -msgstr "" - -msgid "America/Bahia" -msgstr "" - -msgid "America/Barbados" -msgstr "" - -msgid "America/Belem" -msgstr "" - -msgid "America/Belize" -msgstr "" - -msgid "America/Boa_Vista" -msgstr "" - -msgid "America/Bogota" -msgstr "" - -msgid "America/Boise" -msgstr "" - -msgid "America/Buenos_Aires" -msgstr "" - -msgid "America/Cambridge_Bay" -msgstr "" - -msgid "America/Campo_Grande" -msgstr "" - -msgid "America/Cancun" -msgstr "" - -msgid "America/Caracas" -msgstr "" - -msgid "America/Catamarca" -msgstr "" - -msgid "America/Cayenne" -msgstr "" - -msgid "America/Cayman" -msgstr "" - -msgid "America/Chicago" -msgstr "" - -msgid "America/Chihuahua" -msgstr "" - -msgid "America/Coral_Harbour" -msgstr "" - -msgid "America/Cordoba" -msgstr "" - -msgid "America/Costa_Rica" -msgstr "" - -msgid "America/Cuiaba" -msgstr "" - -msgid "America/Curacao" -msgstr "" - -msgid "America/Danmarkshavn" -msgstr "" - -msgid "America/Dawson" -msgstr "" - -msgid "America/Dawson_Creek" -msgstr "" - -msgid "America/Denver" -msgstr "" - -msgid "America/Detroit" -msgstr "" - -msgid "America/Dominica" -msgstr "" - -msgid "America/Edmonton" -msgstr "" - -msgid "America/Eirunepe" -msgstr "" - -msgid "America/El_Salvador" -msgstr "" - -msgid "America/Ensenada" -msgstr "" - -msgid "America/Fort_Wayne" -msgstr "" - -msgid "America/Fortaleza" -msgstr "" - -msgid "America/Glace_Bay" -msgstr "" - -msgid "America/Godthab" -msgstr "" - -msgid "America/Goose_Bay" -msgstr "" - -msgid "America/Grand_Turk" -msgstr "" - -msgid "America/Grenada" -msgstr "" - -msgid "America/Guadeloupe" -msgstr "" - -msgid "America/Guatemala" -msgstr "" - -msgid "America/Guayaquil" -msgstr "" - -msgid "America/Guyana" -msgstr "" - -msgid "America/Halifax" -msgstr "" - -msgid "America/Havana" -msgstr "" - -msgid "America/Hermosillo" -msgstr "" - -msgid "America/Indiana/Indianapolis" -msgstr "" - -msgid "America/Indiana/Knox" -msgstr "" - -msgid "America/Indiana/Marengo" -msgstr "" - -msgid "America/Indiana/Vevay" -msgstr "" - -msgid "America/Indianapolis" -msgstr "" - -msgid "America/Inuvik" -msgstr "" - -msgid "America/Iqaluit" -msgstr "" - -msgid "America/Jamaica" -msgstr "" - -msgid "America/Jujuy" -msgstr "" - -msgid "America/Juneau" -msgstr "" - -msgid "America/Kentucky/Louisville" -msgstr "" - -msgid "America/Kentucky/Monticello" -msgstr "" - -msgid "America/Knox_IN" -msgstr "" - -msgid "America/La_Paz" -msgstr "" - -msgid "America/Lima" -msgstr "" - -msgid "America/Los_Angeles" -msgstr "" - -msgid "America/Louisville" -msgstr "" - -msgid "America/Maceio" -msgstr "" - -msgid "America/Managua" -msgstr "" - -msgid "America/Manaus" -msgstr "" - -msgid "America/Martinique" -msgstr "" - -msgid "America/Mazatlan" -msgstr "" - -msgid "America/Mendoza" -msgstr "" - -msgid "America/Menominee" -msgstr "" - -msgid "America/Merida" -msgstr "" - -msgid "America/Mexico_City" -msgstr "" - -msgid "America/Miquelon" -msgstr "" - -msgid "America/Monterrey" -msgstr "" - -msgid "America/Montevideo" -msgstr "" - -msgid "America/Montreal" -msgstr "" - -msgid "America/Montserrat" -msgstr "" - -msgid "America/Nassau" -msgstr "" - -msgid "America/New_York" -msgstr "" - -msgid "America/Nipigon" -msgstr "" - -msgid "America/Nome" -msgstr "" - -msgid "America/Noronha" -msgstr "" - -msgid "America/North_Dakota/Center" -msgstr "" - -msgid "America/Panama" -msgstr "" - -msgid "America/Pangnirtung" -msgstr "" - -msgid "America/Paramaribo" -msgstr "" - -msgid "America/Phoenix" -msgstr "" - -msgid "America/Port-au-Prince" -msgstr "" - -msgid "America/Port_of_Spain" -msgstr "" - -msgid "America/Porto_Acre" -msgstr "" - -msgid "America/Porto_Velho" -msgstr "" - -msgid "America/Puerto_Rico" -msgstr "" - -msgid "America/Rainy_River" -msgstr "" - -msgid "America/Rankin_Inlet" -msgstr "" - -msgid "America/Recife" -msgstr "" - -msgid "America/Regina" -msgstr "" - -msgid "America/Rio_Branco" -msgstr "" - -msgid "America/Rosario" -msgstr "" - -msgid "America/Santiago" -msgstr "" - -msgid "America/Santo_Domingo" -msgstr "" - -msgid "America/Sao_Paulo" -msgstr "" - -msgid "America/Scoresbysund" -msgstr "" - -msgid "America/Shiprock" -msgstr "" - -msgid "America/St_Johns" -msgstr "" - -msgid "America/St_Kitts" -msgstr "" - -msgid "America/St_Lucia" -msgstr "" - -msgid "America/St_Thomas" -msgstr "" - -msgid "America/St_Vincent" -msgstr "" - -msgid "America/Swift_Current" -msgstr "" - -msgid "America/Tegucigalpa" -msgstr "" - -msgid "America/Thule" -msgstr "" - -msgid "America/Thunder_Bay" -msgstr "" - -msgid "America/Tijuana" -msgstr "" - -msgid "America/Toronto" -msgstr "" - -msgid "America/Tortola" -msgstr "" - -msgid "America/Vancouver" -msgstr "" - -msgid "America/Virgin" -msgstr "" - -msgid "America/Whitehorse" -msgstr "" - -msgid "America/Winnipeg" -msgstr "" - -msgid "America/Yakutat" -msgstr "" - -msgid "America/Yellowknife" -msgstr "" - -msgid "Antarctica/Casey" -msgstr "" - -msgid "Antarctica/Davis" -msgstr "" - -msgid "Antarctica/DumontDUrville" -msgstr "" - -msgid "Antarctica/Mawson" -msgstr "" - -msgid "Antarctica/McMurdo" -msgstr "" - -msgid "Antarctica/Palmer" -msgstr "" - -msgid "Antarctica/Rothera" -msgstr "" - -msgid "Antarctica/South_Pole" -msgstr "" - -msgid "Antarctica/Syowa" -msgstr "" - -msgid "Antarctica/Vostok" -msgstr "" - -msgid "Arctic/Longyearbyen" -msgstr "" - -msgid "Asia/Aden" -msgstr "" - -msgid "Asia/Almaty" -msgstr "" - -msgid "Asia/Amman" -msgstr "" - -msgid "Asia/Anadyr" -msgstr "" - -msgid "Asia/Aqtau" -msgstr "" - -msgid "Asia/Aqtobe" -msgstr "" - -msgid "Asia/Ashgabat" -msgstr "" - -msgid "Asia/Ashkhabad" -msgstr "" - -msgid "Asia/Baghdad" -msgstr "" - -msgid "Asia/Bahrain" -msgstr "" - -msgid "Asia/Baku" -msgstr "" - -msgid "Asia/Bangkok" -msgstr "" - -msgid "Asia/Beirut" -msgstr "" - -msgid "Asia/Bishkek" -msgstr "" - -msgid "Asia/Brunei" -msgstr "" - -msgid "Asia/Calcutta" -msgstr "" - -msgid "Asia/Choibalsan" -msgstr "" - -msgid "Asia/Chongqing" -msgstr "" - -msgid "Asia/Chungking" -msgstr "" - -msgid "Asia/Colombo" -msgstr "" - -msgid "Asia/Dacca" -msgstr "" - -msgid "Asia/Damascus" -msgstr "" - -msgid "Asia/Dhaka" -msgstr "" - -msgid "Asia/Dili" -msgstr "" - -msgid "Asia/Dubai" -msgstr "" - -msgid "Asia/Dushanbe" -msgstr "" - -msgid "Asia/Gaza" -msgstr "" - -msgid "Asia/Harbin" -msgstr "" - -msgid "Asia/Hong_Kong" -msgstr "" - -msgid "Asia/Hovd" -msgstr "" - -msgid "Asia/Irkutsk" -msgstr "" - -msgid "Asia/Istanbul" -msgstr "" - -msgid "Asia/Jakarta" -msgstr "" - -msgid "Asia/Jayapura" -msgstr "" - -msgid "Asia/Jerusalem" -msgstr "" - -msgid "Asia/Kabul" -msgstr "" - -msgid "Asia/Kamchatka" -msgstr "" - -msgid "Asia/Karachi" -msgstr "" - -msgid "Asia/Kashgar" -msgstr "" - -msgid "Asia/Katmandu" -msgstr "" - -msgid "Asia/Krasnoyarsk" -msgstr "" - -msgid "Asia/Kuala_Lumpur" -msgstr "" - -msgid "Asia/Kuching" -msgstr "" - -msgid "Asia/Kuwait" -msgstr "" - -msgid "Asia/Macao" -msgstr "" - -msgid "Asia/Macau" -msgstr "" - -msgid "Asia/Magadan" -msgstr "" - -msgid "Asia/Makassar" -msgstr "" - -msgid "Asia/Manila" -msgstr "" - -msgid "Asia/Muscat" -msgstr "" - -msgid "Asia/Nicosia" -msgstr "" - -msgid "Asia/Novosibirsk" -msgstr "" - -msgid "Asia/Omsk" -msgstr "" - -msgid "Asia/Oral" -msgstr "" - -msgid "Asia/Phnom_Penh" -msgstr "" - -msgid "Asia/Pontianak" -msgstr "" - -msgid "Asia/Pyongyang" -msgstr "" - -msgid "Asia/Qatar" -msgstr "" - -msgid "Asia/Qyzylorda" -msgstr "" - -msgid "Asia/Rangoon" -msgstr "" - -msgid "Asia/Riyadh" -msgstr "" - -msgid "Asia/Saigon" -msgstr "" - -msgid "Asia/Sakhalin" -msgstr "" - -msgid "Asia/Samarkand" -msgstr "" - -msgid "Asia/Seoul" -msgstr "" - -msgid "Asia/Shanghai" -msgstr "" - -msgid "Asia/Singapore" -msgstr "" - -msgid "Asia/Taipei" -msgstr "" - -msgid "Asia/Tashkent" -msgstr "" - -msgid "Asia/Tbilisi" -msgstr "" - -msgid "Asia/Tehran" -msgstr "" - -msgid "Asia/Tel_Aviv" -msgstr "" - -msgid "Asia/Thimbu" -msgstr "" - -msgid "Asia/Thimphu" -msgstr "" - -msgid "Asia/Tokyo" -msgstr "" - -msgid "Asia/Ujung_Pandang" -msgstr "" - -msgid "Asia/Ulaanbaatar" -msgstr "" - -msgid "Asia/Ulan_Bator" -msgstr "" - -msgid "Asia/Urumqi" -msgstr "" - -msgid "Asia/Vientiane" -msgstr "" - -msgid "Asia/Vladivostok" -msgstr "" - -msgid "Asia/Yakutsk" -msgstr "" - -msgid "Asia/Yekaterinburg" -msgstr "" - -msgid "Asia/Yerevan" -msgstr "" - -msgid "Atlantic/Azores" -msgstr "" - -msgid "Atlantic/Bermuda" -msgstr "" - -msgid "Atlantic/Canary" -msgstr "" - -msgid "Atlantic/Cape_Verde" -msgstr "" - -msgid "Atlantic/Faeroe" -msgstr "" - -msgid "Atlantic/Jan_Mayen" -msgstr "" - -msgid "Atlantic/Madeira" -msgstr "" - -msgid "Atlantic/Reykjavik" -msgstr "" - -msgid "Atlantic/South_Georgia" -msgstr "" - -msgid "Atlantic/St_Helena" -msgstr "" - -msgid "Atlantic/Stanley" -msgstr "" - -msgid "Australia/ACT" -msgstr "" - -msgid "Australia/Adelaide" -msgstr "" - -msgid "Australia/Brisbane" -msgstr "" - -msgid "Australia/Broken_Hill" -msgstr "" - -msgid "Australia/Canberra" -msgstr "" - -msgid "Australia/Currie" -msgstr "" - -msgid "Australia/Darwin" -msgstr "" - -msgid "Australia/Hobart" -msgstr "" - -msgid "Australia/LHI" -msgstr "" - -msgid "Australia/Lindeman" -msgstr "" - -msgid "Australia/Lord_Howe" -msgstr "" - -msgid "Australia/Melbourne" -msgstr "" - -msgid "Australia/NSW" -msgstr "" - -msgid "Australia/North" -msgstr "" - -msgid "Australia/Perth" -msgstr "" - -msgid "Australia/Queensland" -msgstr "" - -msgid "Australia/South" -msgstr "" - -msgid "Australia/Sydney" -msgstr "" - -msgid "Australia/Tasmania" -msgstr "" - -msgid "Australia/Victoria" -msgstr "" - -msgid "Australia/West" -msgstr "" - -msgid "Australia/Yancowinna" -msgstr "" - -msgid "Brazil/Acre" -msgstr "" - -msgid "Brazil/DeNoronha" -msgstr "" - -msgid "Brazil/East" -msgstr "" - -msgid "Brazil/West" -msgstr "" - -msgid "CET" -msgstr "" - -msgid "CST6CDT" -msgstr "" - -msgid "Canada/Atlantic" -msgstr "" - -msgid "Canada/Central" -msgstr "" - -msgid "Canada/East-Saskatchewan" -msgstr "" - -msgid "Canada/Eastern" -msgstr "" - -msgid "Canada/Mountain" -msgstr "" - -msgid "Canada/Newfoundland" -msgstr "" - -msgid "Canada/Pacific" -msgstr "" - -msgid "Canada/Saskatchewan" -msgstr "" - -msgid "Canada/Yukon" -msgstr "" - -msgid "Chile/Continental" -msgstr "" - -msgid "Chile/EasterIsland" -msgstr "" - -msgid "Cuba" -msgstr "" - -msgid "EET" -msgstr "" - -msgid "EST" -msgstr "" - -msgid "EST5EDT" -msgstr "" - -msgid "Egypt" -msgstr "" - -msgid "Eire" -msgstr "" - -msgid "Etc/GMT" -msgstr "" - -msgid "Etc/GMT+0" -msgstr "" - -msgid "Etc/GMT+1" -msgstr "" - -msgid "Etc/GMT+10" -msgstr "" - -msgid "Etc/GMT+11" -msgstr "" - -msgid "Etc/GMT+12" -msgstr "" - -msgid "Etc/GMT+2" -msgstr "" - -msgid "Etc/GMT+3" -msgstr "" - -msgid "Etc/GMT+4" -msgstr "" - -msgid "Etc/GMT+5" -msgstr "" - -msgid "Etc/GMT+6" -msgstr "" - -msgid "Etc/GMT+7" -msgstr "" - -msgid "Etc/GMT+8" -msgstr "" - -msgid "Etc/GMT+9" -msgstr "" - -msgid "Etc/GMT-0" -msgstr "" - -msgid "Etc/GMT-1" -msgstr "" - -msgid "Etc/GMT-10" -msgstr "" - -msgid "Etc/GMT-11" -msgstr "" - -msgid "Etc/GMT-12" -msgstr "" - -msgid "Etc/GMT-13" -msgstr "" - -msgid "Etc/GMT-14" -msgstr "" - -msgid "Etc/GMT-2" -msgstr "" - -msgid "Etc/GMT-3" -msgstr "" - -msgid "Etc/GMT-4" -msgstr "" - -msgid "Etc/GMT-5" -msgstr "" - -msgid "Etc/GMT-6" -msgstr "" - -msgid "Etc/GMT-7" -msgstr "" - -msgid "Etc/GMT-8" -msgstr "" - -msgid "Etc/GMT-9" -msgstr "" - -msgid "Etc/GMT0" -msgstr "" - -msgid "Etc/Greenwich" -msgstr "" - -msgid "Etc/UCT" -msgstr "" - -msgid "Etc/UTC" -msgstr "" - -msgid "Etc/Universal" -msgstr "" - -msgid "Etc/Zulu" -msgstr "" - -msgid "Europe/Amsterdam" -msgstr "" - -msgid "Europe/Andorra" -msgstr "" - -msgid "Europe/Athens" -msgstr "" - -msgid "Europe/Belfast" -msgstr "" - -msgid "Europe/Belgrade" -msgstr "" - -msgid "Europe/Berlin" -msgstr "" - -msgid "Europe/Bratislava" -msgstr "" - -msgid "Europe/Brussels" -msgstr "" - -msgid "Europe/Bucharest" -msgstr "" - -msgid "Europe/Budapest" -msgstr "" - -msgid "Europe/Chisinau" -msgstr "" - -msgid "Europe/Copenhagen" -msgstr "" - -msgid "Europe/Dublin" -msgstr "" - -msgid "Europe/Gibraltar" -msgstr "" - -msgid "Europe/Helsinki" -msgstr "" - -msgid "Europe/Istanbul" -msgstr "" - -msgid "Europe/Kaliningrad" -msgstr "" - -msgid "Europe/Kiev" -msgstr "" - -msgid "Europe/Lisbon" -msgstr "" - -msgid "Europe/Ljubljana" -msgstr "" - -msgid "Europe/London" -msgstr "" - -msgid "Europe/Luxembourg" -msgstr "" - -msgid "Europe/Madrid" -msgstr "" - -msgid "Europe/Malta" -msgstr "" - -msgid "Europe/Mariehamn" -msgstr "" - -msgid "Europe/Minsk" -msgstr "" - -msgid "Europe/Monaco" -msgstr "" - -msgid "Europe/Moscow" -msgstr "" - -msgid "Europe/Nicosia" -msgstr "" - -msgid "Europe/Oslo" -msgstr "" - -msgid "Europe/Paris" -msgstr "" - -msgid "Europe/Prague" -msgstr "" - -msgid "Europe/Riga" -msgstr "" - -msgid "Europe/Rome" -msgstr "" - -msgid "Europe/Samara" -msgstr "" - -msgid "Europe/San_Marino" -msgstr "" - -msgid "Europe/Sarajevo" -msgstr "" - -msgid "Europe/Simferopol" -msgstr "" - -msgid "Europe/Skopje" -msgstr "" - -msgid "Europe/Sofia" -msgstr "" - -msgid "Europe/Stockholm" -msgstr "" - -msgid "Europe/Tallinn" -msgstr "" - -msgid "Europe/Tirane" -msgstr "" - -msgid "Europe/Tiraspol" -msgstr "" - -msgid "Europe/Uzhgorod" -msgstr "" - -msgid "Europe/Vaduz" -msgstr "" - -msgid "Europe/Vatican" -msgstr "" - -msgid "Europe/Vienna" -msgstr "" - -msgid "Europe/Vilnius" -msgstr "" - -msgid "Europe/Warsaw" -msgstr "" - -msgid "Europe/Zagreb" -msgstr "" - -msgid "Europe/Zaporozhye" -msgstr "" - -msgid "Europe/Zurich" -msgstr "" - -msgid "GB" -msgstr "" - -msgid "GB-Eire" -msgstr "" - -msgid "GMT" -msgstr "" - -msgid "GMT+0" -msgstr "" - -msgid "GMT-0" -msgstr "" - -msgid "GMT0" -msgstr "" - -msgid "Greenwich" -msgstr "" - -msgid "HST" -msgstr "" - -msgid "Hongkong" -msgstr "" - -msgid "Iceland" -msgstr "" - -msgid "Indian/Antananarivo" -msgstr "" - -msgid "Indian/Chagos" -msgstr "" - -msgid "Indian/Christmas" -msgstr "" - -msgid "Indian/Cocos" -msgstr "" - -msgid "Indian/Comoro" -msgstr "" - -msgid "Indian/Kerguelen" -msgstr "" - -msgid "Indian/Mahe" -msgstr "" - -msgid "Indian/Maldives" -msgstr "" - -msgid "Indian/Mauritius" -msgstr "" - -msgid "Indian/Mayotte" -msgstr "" - -msgid "Indian/Reunion" -msgstr "" - -msgid "Iran" -msgstr "" - -msgid "Israel" -msgstr "" - -msgid "Jamaica" -msgstr "" - -msgid "Japan" -msgstr "" - -msgid "Kwajalein" -msgstr "" - -msgid "Libya" -msgstr "" - -msgid "MET" -msgstr "" - -msgid "MST" -msgstr "" - -msgid "MST7MDT" -msgstr "" - -msgid "Mexico/BajaNorte" -msgstr "" - -msgid "Mexico/BajaSur" -msgstr "" - -msgid "Mexico/General" -msgstr "" - -msgid "NZ" -msgstr "" - -msgid "NZ-CHAT" -msgstr "" - -msgid "Navajo" -msgstr "" - -msgid "PRC" -msgstr "" - -msgid "PST8PDT" -msgstr "" - -msgid "Pacific/Apia" -msgstr "" - -msgid "Pacific/Auckland" -msgstr "" - -msgid "Pacific/Chatham" -msgstr "" - -msgid "Pacific/Easter" -msgstr "" - -msgid "Pacific/Efate" -msgstr "" - -msgid "Pacific/Enderbury" -msgstr "" - -msgid "Pacific/Fakaofo" -msgstr "" - -msgid "Pacific/Fiji" -msgstr "" - -msgid "Pacific/Funafuti" -msgstr "" - -msgid "Pacific/Galapagos" -msgstr "" - -msgid "Pacific/Gambier" -msgstr "" - -msgid "Pacific/Guadalcanal" -msgstr "" - -msgid "Pacific/Guam" -msgstr "" - -msgid "Pacific/Honolulu" -msgstr "" - -msgid "Pacific/Johnston" -msgstr "" - -msgid "Pacific/Kiritimati" -msgstr "" - -msgid "Pacific/Kosrae" -msgstr "" - -msgid "Pacific/Kwajalein" -msgstr "" - -msgid "Pacific/Majuro" -msgstr "" - -msgid "Pacific/Marquesas" -msgstr "" - -msgid "Pacific/Midway" -msgstr "" - -msgid "Pacific/Nauru" -msgstr "" - -msgid "Pacific/Niue" -msgstr "" - -msgid "Pacific/Norfolk" -msgstr "" - -msgid "Pacific/Noumea" -msgstr "" - -msgid "Pacific/Pago_Pago" -msgstr "" - -msgid "Pacific/Palau" -msgstr "" - -msgid "Pacific/Pitcairn" -msgstr "" - -msgid "Pacific/Ponape" -msgstr "" - -msgid "Pacific/Port_Moresby" -msgstr "" - -msgid "Pacific/Rarotonga" -msgstr "" - -msgid "Pacific/Saipan" -msgstr "" - -msgid "Pacific/Samoa" -msgstr "" - -msgid "Pacific/Tahiti" -msgstr "" - -msgid "Pacific/Tarawa" -msgstr "" - -msgid "Pacific/Tongatapu" -msgstr "" - -msgid "Pacific/Truk" -msgstr "" - -msgid "Pacific/Wake" -msgstr "" - -msgid "Pacific/Wallis" -msgstr "" - -msgid "Pacific/Yap" -msgstr "" - -msgid "Poland" -msgstr "" - -msgid "Portugal" -msgstr "" - -msgid "ROC" -msgstr "" - -msgid "ROK" -msgstr "" - -msgid "Singapore" -msgstr "" - -msgid "Turkey" -msgstr "" - -msgid "UCT" -msgstr "" - -msgid "US/Alaska" -msgstr "" - -msgid "US/Aleutian" -msgstr "" - -msgid "US/Arizona" -msgstr "" - -msgid "US/Central" -msgstr "" - -msgid "US/East-Indiana" -msgstr "" - -msgid "US/Eastern" -msgstr "" - -msgid "US/Hawaii" -msgstr "" - -msgid "US/Indiana-Starke" -msgstr "" - -msgid "US/Michigan" -msgstr "" - -msgid "US/Mountain" -msgstr "" - -msgid "US/Pacific" -msgstr "" - -msgid "US/Pacific-New" -msgstr "" - -msgid "US/Samoa" -msgstr "" - -msgid "UTC" -msgstr "" - -msgid "Universal" -msgstr "" - -msgid "W-SU" -msgstr "" - -msgid "WET" -msgstr "" - -msgid "Zulu" -msgstr "" - -msgid "posixrules" -msgstr "" - diff --git a/modules/pytz/reference.py b/modules/pytz/reference.py deleted file mode 100644 index 516f0ae9..00000000 --- a/modules/pytz/reference.py +++ /dev/null @@ -1,128 +0,0 @@ -''' -$Id: reference.py,v 1.2 2004/10/25 04:14:00 zenzen Exp $ - -Reference tzinfo implementations from the Python docs. -Used for testing against. -''' - -from datetime import tzinfo, timedelta, datetime -from pytz import utc, UTC, HOUR, ZERO - -# A class building tzinfo objects for fixed-offset time zones. -# Note that FixedOffset(0, "UTC") is a different way to build a -# UTC tzinfo object. - -class FixedOffset(tzinfo): - """Fixed offset in minutes east from UTC.""" - - def __init__(self, offset, name): - self.__offset = timedelta(minutes = offset) - self.__name = name - - def utcoffset(self, dt): - return self.__offset - - def tzname(self, dt): - return self.__name - - def dst(self, dt): - return ZERO - -# A class capturing the platform's idea of local time. - -import time as _time - -STDOFFSET = timedelta(seconds = -_time.timezone) -if _time.daylight: - DSTOFFSET = timedelta(seconds = -_time.altzone) -else: - DSTOFFSET = STDOFFSET - -DSTDIFF = DSTOFFSET - STDOFFSET - -class LocalTimezone(tzinfo): - - def utcoffset(self, dt): - if self._isdst(dt): - return DSTOFFSET - else: - return STDOFFSET - - def dst(self, dt): - if self._isdst(dt): - return DSTDIFF - else: - return ZERO - - def tzname(self, dt): - return _time.tzname[self._isdst(dt)] - - def _isdst(self, dt): - tt = (dt.year, dt.month, dt.day, - dt.hour, dt.minute, dt.second, - dt.weekday(), 0, -1) - stamp = _time.mktime(tt) - tt = _time.localtime(stamp) - return tt.tm_isdst > 0 - -Local = LocalTimezone() - -# A complete implementation of current DST rules for major US time zones. - -def first_sunday_on_or_after(dt): - days_to_go = 6 - dt.weekday() - if days_to_go: - dt += timedelta(days_to_go) - return dt - -# In the US, DST starts at 2am (standard time) on the first Sunday in April. -DSTSTART = datetime(1, 4, 1, 2) -# and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct. -# which is the first Sunday on or after Oct 25. -DSTEND = datetime(1, 10, 25, 1) - -class USTimeZone(tzinfo): - - def __init__(self, hours, reprname, stdname, dstname): - self.stdoffset = timedelta(hours=hours) - self.reprname = reprname - self.stdname = stdname - self.dstname = dstname - - def __repr__(self): - return self.reprname - - def tzname(self, dt): - if self.dst(dt): - return self.dstname - else: - return self.stdname - - def utcoffset(self, dt): - return self.stdoffset + self.dst(dt) - - def dst(self, dt): - if dt is None or dt.tzinfo is None: - # An exception may be sensible here, in one or both cases. - # It depends on how you want to treat them. The default - # fromutc() implementation (called by the default astimezone() - # implementation) passes a datetime with dt.tzinfo is self. - return ZERO - assert dt.tzinfo is self - - # Find first Sunday in April & the last in October. - start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) - end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) - - # Can't compare naive to aware objects, so strip the timezone from - # dt first. - if start <= dt.replace(tzinfo=None) < end: - return HOUR - else: - return ZERO - -Eastern = USTimeZone(-5, "Eastern", "EST", "EDT") -Central = USTimeZone(-6, "Central", "CST", "CDT") -Mountain = USTimeZone(-7, "Mountain", "MST", "MDT") -Pacific = USTimeZone(-8, "Pacific", "PST", "PDT") - diff --git a/modules/pytz/tests/test_docs.py b/modules/pytz/tests/test_docs.py deleted file mode 100644 index 50301cb4..00000000 --- a/modules/pytz/tests/test_docs.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: ascii -*- - -import unittest, os, os.path, sys -from doctest import DocTestSuite - -# We test the documentation this way instead of using DocFileSuite so -# we can run the tests under Python 2.3 -def test_README(): - pass - -this_dir = os.path.dirname(__file__) -locs = [ - os.path.join(this_dir, os.pardir, 'README.txt'), - os.path.join(this_dir, os.pardir, os.pardir, 'README.txt'), - ] -for loc in locs: - if os.path.exists(loc): - test_README.__doc__ = open(loc).read() - break -if test_README.__doc__ is None: - raise RuntimeError('README.txt not found') - -README = DocTestSuite() - -def test_suite(): - "For the Z3 test runner" - return README - -if __name__ == '__main__': - sys.path.insert(0, os.path.normpath(os.path.join( - this_dir, os.pardir, os.pardir - ))) - unittest.main(defaultTest='README') - - diff --git a/modules/pytz/tests/test_tzinfo.py b/modules/pytz/tests/test_tzinfo.py deleted file mode 100644 index 50e16330..00000000 --- a/modules/pytz/tests/test_tzinfo.py +++ /dev/null @@ -1,457 +0,0 @@ -# -*- coding: ascii -*- - -import sys, os, os.path -import unittest, doctest -import cPickle as pickle -from datetime import datetime, tzinfo, timedelta - -if __name__ == '__main__': - # Only munge path if invoked as a script. Testrunners should have setup - # the paths already - sys.path.insert(0, os.path.join(os.pardir, os.pardir)) - -import pytz -from pytz import reference - -EXPECTED_VERSION='2005r' - -fmt = '%Y-%m-%d %H:%M:%S %Z%z' - -NOTIME = timedelta(0) - -# GMT is a tzinfo.StaticTzInfo--the class we primarily want to test--while -# UTC is reference implementation. They both have the same timezone meaning. -UTC = pytz.timezone('UTC') -GMT = pytz.timezone('GMT') - -class BasicTest(unittest.TestCase): - - def testVersion(self): - # Ensuring the correct version of pytz has been loaded - self.failUnlessEqual(EXPECTED_VERSION, pytz.__version__, - 'Incorrect pytz version loaded. Import path is stuffed ' - 'or this test needs updating. (Wanted %s, got %s)' - % (EXPECTED_VERSION, pytz.__version__) - ) - - def testGMT(self): - now = datetime.now(tz=GMT) - self.failUnless(now.utcoffset() == NOTIME) - self.failUnless(now.dst() == NOTIME) - self.failUnless(now.timetuple() == now.utctimetuple()) - self.failUnless(now==now.replace(tzinfo=UTC)) - - def testReferenceUTC(self): - now = datetime.now(tz=UTC) - self.failUnless(now.utcoffset() == NOTIME) - self.failUnless(now.dst() == NOTIME) - self.failUnless(now.timetuple() == now.utctimetuple()) - - -class PicklingTest(unittest.TestCase): - - def _roundtrip_tzinfo(self, tz): - p = pickle.dumps(tz) - unpickled_tz = pickle.loads(p) - self.failUnless(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) - - def _roundtrip_datetime(self, dt): - # Ensure that the tzinfo attached to a datetime instance - # is identical to the one returned. This is important for - # DST timezones, as some state is stored in the tzinfo. - tz = dt.tzinfo - p = pickle.dumps(dt) - unpickled_dt = pickle.loads(p) - unpickled_tz = unpickled_dt.tzinfo - self.failUnless(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) - - def testDst(self): - tz = pytz.timezone('Europe/Amsterdam') - dt = datetime(2004, 2, 1, 0, 0, 0) - - for localized_tz in tz._tzinfos.values(): - self._roundtrip_tzinfo(localized_tz) - self._roundtrip_datetime(dt.replace(tzinfo=localized_tz)) - - def testRoundtrip(self): - dt = datetime(2004, 2, 1, 0, 0, 0) - for zone in pytz.all_timezones: - tz = pytz.timezone(zone) - self._roundtrip_tzinfo(tz) - - def testDatabaseFixes(self): - # Hack the pickle to make it refer to a timezone abbreviation - # that does not match anything. The unpickler should be able - # to repair this case - tz = pytz.timezone('Australia/Melbourne') - p = pickle.dumps(tz) - tzname = tz._tzname - hacked_p = p.replace(tzname, '???') - self.failIfEqual(p, hacked_p) - unpickled_tz = pickle.loads(hacked_p) - self.failUnless(tz is unpickled_tz) - - # Simulate a database correction. In this case, the incorrect - # data will continue to be used. - p = pickle.dumps(tz) - new_utcoffset = tz._utcoffset.seconds + 42 - hacked_p = p.replace(str(tz._utcoffset.seconds), str(new_utcoffset)) - self.failIfEqual(p, hacked_p) - unpickled_tz = pickle.loads(hacked_p) - self.failUnlessEqual(unpickled_tz._utcoffset.seconds, new_utcoffset) - self.failUnless(tz is not unpickled_tz) - - -class USEasternDSTStartTestCase(unittest.TestCase): - tzinfo = pytz.timezone('US/Eastern') - - # 24 hours before DST changeover - transition_time = datetime(2002, 4, 7, 7, 0, 0, tzinfo=UTC) - - # Increase for 'flexible' DST transitions due to 1 minute granularity - # of Python's datetime library - instant = timedelta(seconds=1) - - # before transition - before = { - 'tzname': 'EST', - 'utcoffset': timedelta(hours = -5), - 'dst': timedelta(hours = 0), - } - - # after transition - after = { - 'tzname': 'EDT', - 'utcoffset': timedelta(hours = -4), - 'dst': timedelta(hours = 1), - } - - def _test_tzname(self, utc_dt, wanted): - tzname = wanted['tzname'] - dt = utc_dt.astimezone(self.tzinfo) - self.failUnlessEqual(dt.tzname(), tzname, - 'Expected %s as tzname for %s. Got %s' % ( - tzname, str(utc_dt), dt.tzname() - ) - ) - - def _test_utcoffset(self, utc_dt, wanted): - utcoffset = wanted['utcoffset'] - dt = utc_dt.astimezone(self.tzinfo) - self.failUnlessEqual( - dt.utcoffset(), wanted['utcoffset'], - 'Expected %s as utcoffset for %s. Got %s' % ( - utcoffset, utc_dt, dt.utcoffset() - ) - ) - - def _test_dst(self, utc_dt, wanted): - dst = wanted['dst'] - dt = utc_dt.astimezone(self.tzinfo) - self.failUnlessEqual(dt.dst(),dst, - 'Expected %s as dst for %s. Got %s' % ( - dst, utc_dt, dt.dst() - ) - ) - - def test_arithmetic(self): - utc_dt = self.transition_time - - for days in range(-420, 720, 20): - delta = timedelta(days=days) - - # Make sure we can get back where we started - dt = utc_dt.astimezone(self.tzinfo) - dt2 = dt + delta - dt2 = dt2 - delta - self.failUnlessEqual(dt, dt2) - - # Make sure arithmetic crossing DST boundaries ends - # up in the correct timezone after normalization - self.failUnlessEqual( - (utc_dt + delta).astimezone(self.tzinfo).strftime(fmt), - self.tzinfo.normalize(dt + delta).strftime(fmt), - 'Incorrect result for delta==%d days. Wanted %r. Got %r'%( - days, - (utc_dt + delta).astimezone(self.tzinfo).strftime(fmt), - self.tzinfo.normalize(dt + delta).strftime(fmt), - ) - ) - - def _test_all(self, utc_dt, wanted): - self._test_utcoffset(utc_dt, wanted) - self._test_tzname(utc_dt, wanted) - self._test_dst(utc_dt, wanted) - - def testDayBefore(self): - self._test_all( - self.transition_time - timedelta(days=1), self.before - ) - - def testTwoHoursBefore(self): - self._test_all( - self.transition_time - timedelta(hours=2), self.before - ) - - def testHourBefore(self): - self._test_all( - self.transition_time - timedelta(hours=1), self.before - ) - - def testInstantBefore(self): - self._test_all( - self.transition_time - self.instant, self.before - ) - - def testTransition(self): - self._test_all( - self.transition_time, self.after - ) - - def testInstantAfter(self): - self._test_all( - self.transition_time + self.instant, self.after - ) - - def testHourAfter(self): - self._test_all( - self.transition_time + timedelta(hours=1), self.after - ) - - def testTwoHoursAfter(self): - self._test_all( - self.transition_time + timedelta(hours=1), self.after - ) - - def testDayAfter(self): - self._test_all( - self.transition_time + timedelta(days=1), self.after - ) - - -class USEasternDSTEndTestCase(USEasternDSTStartTestCase): - tzinfo = pytz.timezone('US/Eastern') - transition_time = datetime(2002, 10, 27, 6, 0, 0, tzinfo=UTC) - before = { - 'tzname': 'EDT', - 'utcoffset': timedelta(hours = -4), - 'dst': timedelta(hours = 1), - } - after = { - 'tzname': 'EST', - 'utcoffset': timedelta(hours = -5), - 'dst': timedelta(hours = 0), - } - - -class USEasternEPTStartTestCase(USEasternDSTStartTestCase): - transition_time = datetime(1945, 8, 14, 23, 0, 0, tzinfo=UTC) - before = { - 'tzname': 'EWT', - 'utcoffset': timedelta(hours = -4), - 'dst': timedelta(hours = 1), - } - after = { - 'tzname': 'EPT', - 'utcoffset': timedelta(hours = -4), - 'dst': timedelta(hours = 1), - } - - -class USEasternEPTEndTestCase(USEasternDSTStartTestCase): - transition_time = datetime(1945, 9, 30, 6, 0, 0, tzinfo=UTC) - before = { - 'tzname': 'EPT', - 'utcoffset': timedelta(hours = -4), - 'dst': timedelta(hours = 1), - } - after = { - 'tzname': 'EST', - 'utcoffset': timedelta(hours = -5), - 'dst': timedelta(hours = 0), - } - - -class WarsawWMTEndTestCase(USEasternDSTStartTestCase): - # In 1915, Warsaw changed from Warsaw to Central European time. - # This involved the clocks being set backwards, causing a end-of-DST - # like situation without DST being involved. - tzinfo = pytz.timezone('Europe/Warsaw') - transition_time = datetime(1915, 8, 4, 22, 36, 0, tzinfo=UTC) - before = { - 'tzname': 'WMT', - 'utcoffset': timedelta(hours=1, minutes=24), - 'dst': timedelta(0), - } - after = { - 'tzname': 'CET', - 'utcoffset': timedelta(hours=1), - 'dst': timedelta(0), - } - - -class VilniusWMTEndTestCase(USEasternDSTStartTestCase): - # At the end of 1916, Vilnius changed timezones putting its clock - # forward by 11 minutes 35 seconds. Neither timezone was in DST mode. - tzinfo = pytz.timezone('Europe/Vilnius') - instant = timedelta(seconds=31) - transition_time = datetime(1916, 12, 31, 22, 36, 00, tzinfo=UTC) - before = { - 'tzname': 'WMT', - 'utcoffset': timedelta(hours=1, minutes=24), - 'dst': timedelta(0), - } - after = { - 'tzname': 'KMT', - 'utcoffset': timedelta(hours=1, minutes=36), # Really 1:35:36 - 'dst': timedelta(0), - } - - -class ReferenceUSEasternDSTStartTestCase(USEasternDSTStartTestCase): - tzinfo = reference.Eastern - def test_arithmetic(self): - # Reference implementation cannot handle this - pass - - -class ReferenceUSEasternDSTEndTestCase(USEasternDSTEndTestCase): - tzinfo = reference.Eastern - - def testHourBefore(self): - # Python's datetime library has a bug, where the hour before - # a daylight savings transition is one hour out. For example, - # at the end of US/Eastern daylight savings time, 01:00 EST - # occurs twice (once at 05:00 UTC and once at 06:00 UTC), - # whereas the first should actually be 01:00 EDT. - # Note that this bug is by design - by accepting this ambiguity - # for one hour one hour per year, an is_dst flag on datetime.time - # became unnecessary. - self._test_all( - self.transition_time - timedelta(hours=1), self.after - ) - - def testInstantBefore(self): - self._test_all( - self.transition_time - timedelta(seconds=1), self.after - ) - - def test_arithmetic(self): - # Reference implementation cannot handle this - pass - - -class LocalTestCase(unittest.TestCase): - def testLocalize(self): - loc_tz = pytz.timezone('Europe/Amsterdam') - - loc_time = loc_tz.localize(datetime(1930, 5, 10, 0, 0, 0)) - # Actually +00:19:32, but Python datetime rounds this - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'AMT+0020') - - loc_time = loc_tz.localize(datetime(1930, 5, 20, 0, 0, 0)) - # Actually +00:19:32, but Python datetime rounds this - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'NST+0120') - - loc_time = loc_tz.localize(datetime(1940, 5, 10, 0, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'NET+0020') - - loc_time = loc_tz.localize(datetime(1940, 5, 20, 0, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'CEST+0200') - - loc_time = loc_tz.localize(datetime(2004, 2, 1, 0, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'CET+0100') - - loc_time = loc_tz.localize(datetime(2004, 4, 1, 0, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'CEST+0200') - - tz = pytz.timezone('Europe/Amsterdam') - loc_time = loc_tz.localize(datetime(1943, 3, 29, 1, 59, 59)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'CET+0100') - - - # Switch to US - loc_tz = pytz.timezone('US/Eastern') - - # End of DST ambiguity check - loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=1) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EDT-0400') - - loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=0) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EST-0500') - - self.failUnlessRaises(pytz.AmbiguousTimeError, - loc_tz.localize, datetime(1918, 10, 27, 1, 59, 59), is_dst=None - ) - - # Weird changes - war time and peace time both is_dst==True - - loc_time = loc_tz.localize(datetime(1942, 2, 9, 3, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EWT-0400') - - loc_time = loc_tz.localize(datetime(1945, 8, 14, 19, 0, 0)) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EPT-0400') - - loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=1) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EPT-0400') - - loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=0) - self.failUnlessEqual(loc_time.strftime('%Z%z'), 'EST-0500') - - def testNormalize(self): - tz = pytz.timezone('US/Eastern') - dt = datetime(2004, 4, 4, 7, 0, 0, tzinfo=UTC).astimezone(tz) - dt2 = dt - timedelta(minutes=10) - self.failUnlessEqual( - dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'), - '2004-04-04 02:50:00 EDT-0400' - ) - - dt2 = tz.normalize(dt2) - self.failUnlessEqual( - dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'), - '2004-04-04 01:50:00 EST-0500' - ) - - def testPartialMinuteOffsets(self): - # utcoffset in Amsterdam was not a whole minute until 1937 - # However, we fudge this by rounding them, as the Python - # datetime library - tz = pytz.timezone('Europe/Amsterdam') - utc_dt = datetime(1914, 1, 1, 13, 40, 28, tzinfo=UTC) # correct - utc_dt = utc_dt.replace(second=0) # But we need to fudge it - loc_dt = utc_dt.astimezone(tz) - self.failUnlessEqual( - loc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'), - '1914-01-01 14:00:00 AMT+0020' - ) - - # And get back... - utc_dt = loc_dt.astimezone(UTC) - self.failUnlessEqual( - utc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'), - '1914-01-01 13:40:00 UTC+0000' - ) - - def no_testCreateLocaltime(self): - # It would be nice if this worked, but it doesn't. - tz = pytz.timezone('Europe/Amsterdam') - dt = datetime(2004, 10, 31, 2, 0, 0, tzinfo=tz) - self.failUnlessEqual( - dt.strftime(fmt), - '2004-10-31 02:00:00 CET+0100' - ) - -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(doctest.DocTestSuite('pytz')) - suite.addTest(doctest.DocTestSuite('pytz.tzinfo')) - import test_tzinfo - suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_tzinfo)) - return suite - -DEFAULT = test_suite() - -if __name__ == '__main__': - unittest.main(defaultTest='DEFAULT') - diff --git a/modules/pytz/tzinfo.py b/modules/pytz/tzinfo.py deleted file mode 100644 index f5e9e0b0..00000000 --- a/modules/pytz/tzinfo.py +++ /dev/null @@ -1,379 +0,0 @@ -'''Base classes and helpers for building zone specific tzinfo classes''' - -from datetime import datetime, timedelta, tzinfo -from bisect import bisect_right -from sets import Set - -import pytz - -__all__ = [] - -_timedelta_cache = {} -def memorized_timedelta(seconds): - '''Create only one instance of each distinct timedelta''' - try: - return _timedelta_cache[seconds] - except KeyError: - delta = timedelta(seconds=seconds) - _timedelta_cache[seconds] = delta - return delta - -_datetime_cache = {} -def memorized_datetime(*args): - '''Create only one instance of each distinct datetime''' - try: - return _datetime_cache[args] - except KeyError: - dt = datetime(*args) - _datetime_cache[args] = dt - return dt - -_ttinfo_cache = {} -def memorized_ttinfo(*args): - '''Create only one instance of each distinct tuple''' - try: - return _ttinfo_cache[args] - except KeyError: - ttinfo = ( - memorized_timedelta(args[0]), - memorized_timedelta(args[1]), - args[2] - ) - _ttinfo_cache[args] = ttinfo - return ttinfo - -_notime = memorized_timedelta(0) - -def _to_seconds(td): - '''Convert a timedelta to seconds''' - return td.seconds + td.days * 24 * 60 * 60 - - -class BaseTzInfo(tzinfo): - # Overridden in subclass - _utcoffset = None - _tzname = None - zone = None - - def __str__(self): - return self.zone - - -class StaticTzInfo(BaseTzInfo): - '''A timezone that has a constant offset from UTC - - These timezones are rare, as most regions have changed their - offset from UTC at some point in their history - ''' - def fromutc(self, dt): - '''See datetime.tzinfo.fromutc''' - return (dt + self._utcoffset).replace(tzinfo=self) - - def utcoffset(self,dt): - '''See datetime.tzinfo.utcoffset''' - return self._utcoffset - - def dst(self,dt): - '''See datetime.tzinfo.dst''' - return _notime - - def tzname(self,dt): - '''See datetime.tzinfo.tzname''' - return self._tzname - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError, 'Not naive datetime (tzinfo is already set)' - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' - if dt.tzinfo is None: - raise ValueError, 'Naive time - no tzinfo set' - return dt.replace(tzinfo=self) - - def __repr__(self): - return '' % (self.zone,) - - def __reduce__(self): - # Special pickle to zone remains a singleton and to cope with - # database changes. - return pytz._p, (self.zone,) - - -class DstTzInfo(BaseTzInfo): - '''A timezone that has a variable offset from UTC - - The offset might change if daylight savings time comes into effect, - or at a point in history when the region decides to change their - timezone definition. - - ''' - # Overridden in subclass - _utc_transition_times = None # Sorted list of DST transition times in UTC - _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding - # to _utc_transition_times entries - zone = None - - # Set in __init__ - _tzinfos = None - _dst = None # DST offset - - def __init__(self, _inf=None, _tzinfos=None): - if _inf: - self._tzinfos = _tzinfos - self._utcoffset, self._dst, self._tzname = _inf - else: - _tzinfos = {} - self._tzinfos = _tzinfos - self._utcoffset, self._dst, self._tzname = self._transition_info[0] - _tzinfos[self._transition_info[0]] = self - for inf in self._transition_info[1:]: - if not _tzinfos.has_key(inf): - _tzinfos[inf] = self.__class__(inf, _tzinfos) - - def fromutc(self, dt): - '''See datetime.tzinfo.fromutc''' - dt = dt.replace(tzinfo=None) - idx = max(0, bisect_right(self._utc_transition_times, dt) - 1) - inf = self._transition_info[idx] - return (dt + inf[0]).replace(tzinfo=self._tzinfos[inf]) - - def normalize(self, dt): - '''Correct the timezone information on the given datetime - - If date arithmetic crosses DST boundaries, the tzinfo - is not magically adjusted. This method normalizes the - tzinfo to the correct one. - - To test, first we need to do some setup - - >>> from pytz import timezone - >>> utc = timezone('UTC') - >>> eastern = timezone('US/Eastern') - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - - We next create a datetime right on an end-of-DST transition point, - the instant when the wallclocks are wound back one hour. - - >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) - >>> loc_dt = utc_dt.astimezone(eastern) - >>> loc_dt.strftime(fmt) - '2002-10-27 01:00:00 EST (-0500)' - - Now, if we subtract a few minutes from it, note that the timezone - information has not changed. - - >>> before = loc_dt - timedelta(minutes=10) - >>> before.strftime(fmt) - '2002-10-27 00:50:00 EST (-0500)' - - But we can fix that by calling the normalize method - - >>> before = eastern.normalize(before) - >>> before.strftime(fmt) - '2002-10-27 01:50:00 EDT (-0400)' - - ''' - if dt.tzinfo is None: - raise ValueError, 'Naive time - no tzinfo set' - - # Convert dt in localtime to UTC - offset = dt.tzinfo._utcoffset - dt = dt.replace(tzinfo=None) - dt = dt - offset - # convert it back, and return it - return self.fromutc(dt) - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time. - - This method should be used to construct localtimes, rather - than passing a tzinfo argument to a datetime constructor. - - is_dst is used to determine the correct timezone in the ambigous - period at the end of daylight savings time. - - >>> from pytz import timezone - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> amdam = timezone('Europe/Amsterdam') - >>> dt = datetime(2004, 10, 31, 2, 0, 0) - >>> loc_dt1 = amdam.localize(dt, is_dst=True) - >>> loc_dt2 = amdam.localize(dt, is_dst=False) - >>> loc_dt1.strftime(fmt) - '2004-10-31 02:00:00 CEST (+0200)' - >>> loc_dt2.strftime(fmt) - '2004-10-31 02:00:00 CET (+0100)' - >>> str(loc_dt2 - loc_dt1) - '1:00:00' - - Use is_dst=None to raise an AmbiguousTimeError for ambiguous - times at the end of daylight savings - - >>> try: - ... loc_dt1 = amdam.localize(dt, is_dst=None) - ... except AmbiguousTimeError: - ... print 'Oops' - Oops - - >>> loc_dt1 = amdam.localize(dt, is_dst=None) - Traceback (most recent call last): - [...] - AmbiguousTimeError: 2004-10-31 02:00:00 - - is_dst defaults to False - - >>> amdam.localize(dt) == amdam.localize(dt, False) - True - - ''' - if dt.tzinfo is not None: - raise ValueError, 'Not naive datetime (tzinfo is already set)' - - # Find the possibly correct timezones. We probably just have one, - # but we might end up with two if we are in the end-of-DST - # transition period. Or possibly more in some particularly confused - # location... - possible_loc_dt = Set() - for tzinfo in self._tzinfos.values(): - loc_dt = tzinfo.normalize(dt.replace(tzinfo=tzinfo)) - if loc_dt.replace(tzinfo=None) == dt: - possible_loc_dt.add(loc_dt) - - if len(possible_loc_dt) == 1: - return possible_loc_dt.pop() - - # If told to be strict, raise an exception since we have an - # ambiguous case - if is_dst is None: - raise AmbiguousTimeError(dt) - - # Filter out the possiblilities that don't match the requested - # is_dst - filtered_possible_loc_dt = [ - p for p in possible_loc_dt - if bool(p.tzinfo._dst) == is_dst - ] - - # Hopefully we only have one possibility left. Return it. - if len(filtered_possible_loc_dt) == 1: - return filtered_possible_loc_dt[0] - - if len(filtered_possible_loc_dt) == 0: - filtered_possible_loc_dt = list(possible_loc_dt) - - # If we get this far, we have in a wierd timezone transition - # where the clocks have been wound back but is_dst is the same - # in both (eg. Europe/Warsaw 1915 when they switched to CET). - # At this point, we just have to guess unless we allow more - # hints to be passed in (such as the UTC offset or abbreviation), - # but that is just getting silly. - # - # Choose the earliest (by UTC) applicable timezone. - def mycmp(a,b): - return cmp( - a.replace(tzinfo=None) - a.tzinfo._utcoffset, - b.replace(tzinfo=None) - b.tzinfo._utcoffset, - ) - filtered_possible_loc_dt.sort(mycmp) - return filtered_possible_loc_dt[0] - - def utcoffset(self, dt): - '''See datetime.tzinfo.utcoffset''' - return self._utcoffset - - def dst(self, dt): - '''See datetime.tzinfo.dst''' - return self._dst - - def tzname(self, dt): - '''See datetime.tzinfo.tzname''' - return self._tzname - - def __repr__(self): - if self._dst: - dst = 'DST' - else: - dst = 'STD' - if self._utcoffset > _notime: - return '' % ( - self.zone, self._tzname, self._utcoffset, dst - ) - else: - return '' % ( - self.zone, self._tzname, self._utcoffset, dst - ) - - def __reduce__(self): - # Special pickle to zone remains a singleton and to cope with - # database changes. - return pytz._p, ( - self.zone, - _to_seconds(self._utcoffset), - _to_seconds(self._dst), - self._tzname - ) - - -class AmbiguousTimeError(Exception): - '''Exception raised when attempting to create an ambiguous wallclock time. - - At the end of a DST transition period, a particular wallclock time will - occur twice (once before the clocks are set back, once after). Both - possibilities may be correct, unless further information is supplied. - - See DstTzInfo.normalize() for more info - ''' - - -def unpickler(zone, utcoffset=None, dstoffset=None, tzname=None): - """Factory function for unpickling pytz tzinfo instances. - - This is shared for both StaticTzInfo and DstTzInfo instances, because - database changes could cause a zones implementation to switch between - these two base classes and we can't break pickles on a pytz version - upgrade. - """ - # Raises a KeyError if zone no longer exists, which should never happen - # and would be a bug. - tz = pytz.timezone(zone) - - # A StaticTzInfo - just return it - if utcoffset is None: - return tz - - # This pickle was created from a DstTzInfo. We need to - # determine which of the list of tzinfo instances for this zone - # to use in order to restore the state of any datetime instances using - # it correctly. - utcoffset = memorized_timedelta(utcoffset) - dstoffset = memorized_timedelta(dstoffset) - try: - return tz._tzinfos[(utcoffset, dstoffset, tzname)] - except KeyError: - # The particular state requested in this timezone no longer exists. - # This indicates a corrupt pickle, or the timezone database has been - # corrected violently enough to make this particular - # (utcoffset,dstoffset) no longer exist in the zone, or the - # abbreviation has been changed. - pass - - # See if we can find an entry differing only by tzname. Abbreviations - # get changed from the initial guess by the database maintainers to - # match reality when this information is discovered. - for localized_tz in tz._tzinfos.values(): - if (localized_tz._utcoffset == utcoffset - and localized_tz._dst == dstoffset): - return localized_tz - - # This (utcoffset, dstoffset) information has been removed from the - # zone. Add it back. This might occur when the database maintainers have - # corrected incorrect information. datetime instances using this - # incorrect information will continue to do so, exactly as they were - # before being pickled. This is purely an overly paranoid safety net - I - # doubt this will ever been needed in real life. - inf = (utcoffset, dstoffset, tzname) - tz._tzinfos[inf] = tz.__class__(inf, tz._tzinfos) - return tz._tzinfos[inf] - diff --git a/modules/pytz/zone.tab b/modules/pytz/zone.tab deleted file mode 100644 index d9b278b0..00000000 --- a/modules/pytz/zone.tab +++ /dev/null @@ -1,407 +0,0 @@ -# @(#)zone.tab 1.32 -# -# TZ zone descriptions -# -# From Paul Eggert (1996-08-05): -# -# This file contains a table with the following columns: -# 1. ISO 3166 2-character country code. See the file `iso3166.tab'. -# 2. Latitude and longitude of the zone's principal location -# in ISO 6709 sign-degrees-minutes-seconds format, -# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS, -# first latitude (+ is north), then longitude (+ is east). -# 3. Zone name used in value of TZ environment variable. -# 4. Comments; present if and only if the country has multiple rows. -# -# Columns are separated by a single tab. -# The table is sorted first by country, then an order within the country that -# (1) makes some geographical sense, and -# (2) puts the most populous zones first, where that does not contradict (1). -# -# Lines beginning with `#' are comments. -# -#country- -#code coordinates TZ comments -AD +4230+00131 Europe/Andorra -AE +2518+05518 Asia/Dubai -AF +3431+06912 Asia/Kabul -AG +1703-06148 America/Antigua -AI +1812-06304 America/Anguilla -AL +4120+01950 Europe/Tirane -AM +4011+04430 Asia/Yerevan -AN +1211-06900 America/Curacao -AO -0848+01314 Africa/Luanda -AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island -AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole -AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island -AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island -AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay -AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills -AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula -AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole -AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Base, Terre Adelie -AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I -AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) -AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL) -AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) -AR -3124-06411 America/Argentina/Tucuman Tucuman (TM) -AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) -AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) -AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) -AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) -AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) -AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) -AS -1416-17042 Pacific/Pago_Pago -AT +4813+01620 Europe/Vienna -AU -3133+15905 Australia/Lord_Howe Lord Howe Island -AU -4253+14719 Australia/Hobart Tasmania - most locations -AU -3956+14352 Australia/Currie Tasmania - King Island -AU -3749+14458 Australia/Melbourne Victoria -AU -3352+15113 Australia/Sydney New South Wales - most locations -AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna -AU -2728+15302 Australia/Brisbane Queensland - most locations -AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands -AU -3455+13835 Australia/Adelaide South Australia -AU -1228+13050 Australia/Darwin Northern Territory -AU -3157+11551 Australia/Perth Western Australia -AW +1230-06858 America/Aruba -AX +6006+01957 Europe/Mariehamn -AZ +4023+04951 Asia/Baku -BA +4352+01825 Europe/Sarajevo -BB +1306-05937 America/Barbados -BD +2343+09025 Asia/Dhaka -BE +5050+00420 Europe/Brussels -BF +1222-00131 Africa/Ouagadougou -BG +4241+02319 Europe/Sofia -BH +2623+05035 Asia/Bahrain -BI -0323+02922 Africa/Bujumbura -BJ +0629+00237 Africa/Porto-Novo -BM +3217-06446 Atlantic/Bermuda -BN +0456+11455 Asia/Brunei -BO -1630-06809 America/La_Paz -BR -0351-03225 America/Noronha Atlantic islands -BR -0127-04829 America/Belem Amapa, E Para -BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) -BR -0803-03454 America/Recife Pernambuco -BR -0712-04812 America/Araguaina Tocantins -BR -0940-03543 America/Maceio Alagoas, Sergipe -BR -1259-03831 America/Bahia Bahia -BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS) -BR -2027-05437 America/Campo_Grande Mato Grosso do Sul -BR -1535-05605 America/Cuiaba Mato Grosso -BR -0846-06354 America/Porto_Velho W Para, Rondonia -BR +0249-06040 America/Boa_Vista Roraima -BR -0308-06001 America/Manaus E Amazonas -BR -0640-06952 America/Eirunepe W Amazonas -BR -0958-06748 America/Rio_Branco Acre -BS +2505-07721 America/Nassau -BT +2728+08939 Asia/Thimphu -BW -2545+02555 Africa/Gaborone -BY +5354+02734 Europe/Minsk -BZ +1730-08812 America/Belize -CA +4734-05243 America/St_Johns Newfoundland Island -CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI -CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 -CA +5320-06025 America/Goose_Bay Atlantic Time - E Labrador -CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations -CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations -CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973 -CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario -CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut -CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut -CA +6408-08310 America/Coral_Harbour Eastern Standard Time - Southampton Island -CA +6245-09210 America/Rankin_Inlet Central Time - central Nunavut -CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario -CA +4843-09429 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario -CA +6903-10505 America/Cambridge_Bay Central Time - west Nunavut -CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations -CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest -CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan -CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories -CA +6825-11330 America/Inuvik Mountain Time - west Northwest Territories -CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia -CA +4916-12307 America/Vancouver Pacific Time - west British Columbia -CA +6043-13503 America/Whitehorse Pacific Time - south Yukon -CA +6404-13925 America/Dawson Pacific Time - north Yukon -CC -1210+09655 Indian/Cocos -CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo -CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo -CF +0422+01835 Africa/Bangui -CG -0416+01517 Africa/Brazzaville -CH +4723+00832 Europe/Zurich -CI +0519-00402 Africa/Abidjan -CK -2114-15946 Pacific/Rarotonga -CL -3327-07040 America/Santiago most locations -CL -2710-10927 Pacific/Easter Easter Island & Sala y Gomez -CM +0403+00942 Africa/Douala -CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc. -CN +4545+12641 Asia/Harbin Heilongjiang -CN +2934+10635 Asia/Chongqing central China - Gansu, Guizhou, Sichuan, Yunnan, etc. -CN +4348+08735 Asia/Urumqi Tibet & most of Xinjiang Uyghur -CN +3929+07559 Asia/Kashgar southwest Xinjiang Uyghur -CO +0436-07405 America/Bogota -CR +0956-08405 America/Costa_Rica -CS +4450+02030 Europe/Belgrade -CU +2308-08222 America/Havana -CV +1455-02331 Atlantic/Cape_Verde -CX -1025+10543 Indian/Christmas -CY +3510+03322 Asia/Nicosia -CZ +5005+01426 Europe/Prague -DE +5230+01322 Europe/Berlin -DJ +1136+04309 Africa/Djibouti -DK +5540+01235 Europe/Copenhagen -DM +1518-06124 America/Dominica -DO +1828-06954 America/Santo_Domingo -DZ +3647+00303 Africa/Algiers -EC -0210-07950 America/Guayaquil mainland -EC -0054-08936 Pacific/Galapagos Galapagos Islands -EE +5925+02445 Europe/Tallinn -EG +3003+03115 Africa/Cairo -EH +2709-01312 Africa/El_Aaiun -ER +1520+03853 Africa/Asmera -ES +4024-00341 Europe/Madrid mainland -ES +3553-00519 Africa/Ceuta Ceuta & Melilla -ES +2806-01524 Atlantic/Canary Canary Islands -ET +0902+03842 Africa/Addis_Ababa -FI +6010+02458 Europe/Helsinki -FJ -1808+17825 Pacific/Fiji -FK -5142-05751 Atlantic/Stanley -FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap -FM +0658+15813 Pacific/Ponape Ponape (Pohnpei) -FM +0519+16259 Pacific/Kosrae Kosrae -FO +6201-00646 Atlantic/Faeroe -FR +4852+00220 Europe/Paris -GA +0023+00927 Africa/Libreville -GB +512830-0001845 Europe/London -GD +1203-06145 America/Grenada -GE +4143+04449 Asia/Tbilisi -GF +0456-05220 America/Cayenne -GH +0533-00013 Africa/Accra -GI +3608-00521 Europe/Gibraltar -GL +6411-05144 America/Godthab most locations -GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund -GL +7030-02215 America/Scoresbysund Scoresbysund / Ittoqqortoormiit -GL +7634-06847 America/Thule Thule / Pituffik -GM +1328-01639 Africa/Banjul -GN +0931-01343 Africa/Conakry -GP +1614-06132 America/Guadeloupe -GQ +0345+00847 Africa/Malabo -GR +3758+02343 Europe/Athens -GS -5416-03632 Atlantic/South_Georgia -GT +1438-09031 America/Guatemala -GU +1328+14445 Pacific/Guam -GW +1151-01535 Africa/Bissau -GY +0648-05810 America/Guyana -HK +2217+11409 Asia/Hong_Kong -HN +1406-08713 America/Tegucigalpa -HR +4548+01558 Europe/Zagreb -HT +1832-07220 America/Port-au-Prince -HU +4730+01905 Europe/Budapest -ID -0610+10648 Asia/Jakarta Java & Sumatra -ID -0002+10920 Asia/Pontianak west & central Borneo -ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor -ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas -IE +5320-00615 Europe/Dublin -IL +3146+03514 Asia/Jerusalem -IN +2232+08822 Asia/Calcutta -IO -0720+07225 Indian/Chagos -IQ +3321+04425 Asia/Baghdad -IR +3540+05126 Asia/Tehran -IS +6409-02151 Atlantic/Reykjavik -IT +4154+01229 Europe/Rome -JM +1800-07648 America/Jamaica -JO +3157+03556 Asia/Amman -JP +353916+1394441 Asia/Tokyo -KE -0117+03649 Africa/Nairobi -KG +4254+07436 Asia/Bishkek -KH +1133+10455 Asia/Phnom_Penh -KI +0125+17300 Pacific/Tarawa Gilbert Islands -KI -0308-17105 Pacific/Enderbury Phoenix Islands -KI +0152-15720 Pacific/Kiritimati Line Islands -KM -1141+04316 Indian/Comoro -KN +1718-06243 America/St_Kitts -KP +3901+12545 Asia/Pyongyang -KR +3733+12658 Asia/Seoul -KW +2920+04759 Asia/Kuwait -KY +1918-08123 America/Cayman -KZ +4315+07657 Asia/Almaty most locations -KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) -KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) -KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau) -KZ +5113+05121 Asia/Oral West Kazakhstan -LA +1758+10236 Asia/Vientiane -LB +3353+03530 Asia/Beirut -LC +1401-06100 America/St_Lucia -LI +4709+00931 Europe/Vaduz -LK +0656+07951 Asia/Colombo -LR +0618-01047 Africa/Monrovia -LS -2928+02730 Africa/Maseru -LT +5441+02519 Europe/Vilnius -LU +4936+00609 Europe/Luxembourg -LV +5657+02406 Europe/Riga -LY +3254+01311 Africa/Tripoli -MA +3339-00735 Africa/Casablanca -MC +4342+00723 Europe/Monaco -MD +4700+02850 Europe/Chisinau -MG -1855+04731 Indian/Antananarivo -MH +0709+17112 Pacific/Majuro most locations -MH +0905+16720 Pacific/Kwajalein Kwajalein -MK +4159+02126 Europe/Skopje -ML +1239-00800 Africa/Bamako -MM +1647+09610 Asia/Rangoon -MN +4755+10653 Asia/Ulaanbaatar most locations -MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan -MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar -MO +2214+11335 Asia/Macau -MP +1512+14545 Pacific/Saipan -MQ +1436-06105 America/Martinique -MR +1806-01557 Africa/Nouakchott -MS +1644-06213 America/Montserrat -MT +3554+01431 Europe/Malta -MU -2010+05730 Indian/Mauritius -MV +0410+07330 Indian/Maldives -MW -1547+03500 Africa/Blantyre -MX +1924-09909 America/Mexico_City Central Time - most locations -MX +2105-08646 America/Cancun Central Time - Quintana Roo -MX +2058-08937 America/Merida Central Time - Campeche, Yucatan -MX +2540-10019 America/Monterrey Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas -MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa -MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua -MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora -MX +3232-11701 America/Tijuana Pacific Time -MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia -MY +0133+11020 Asia/Kuching Sabah & Sarawak -MZ -2558+03235 Africa/Maputo -NA -2234+01706 Africa/Windhoek -NC -2216+16530 Pacific/Noumea -NE +1331+00207 Africa/Niamey -NF -2903+16758 Pacific/Norfolk -NG +0627+00324 Africa/Lagos -NI +1209-08617 America/Managua -NL +5222+00454 Europe/Amsterdam -NO +5955+01045 Europe/Oslo -NP +2743+08519 Asia/Katmandu -NR -0031+16655 Pacific/Nauru -NU -1901+16955 Pacific/Niue -NZ -3652+17446 Pacific/Auckland most locations -NZ -4357-17633 Pacific/Chatham Chatham Islands -OM +2336+05835 Asia/Muscat -PA +0858-07932 America/Panama -PE -1203-07703 America/Lima -PF -1732-14934 Pacific/Tahiti Society Islands -PF -0900-13930 Pacific/Marquesas Marquesas Islands -PF -2308-13457 Pacific/Gambier Gambier Islands -PG -0930+14710 Pacific/Port_Moresby -PH +1435+12100 Asia/Manila -PK +2452+06703 Asia/Karachi -PL +5215+02100 Europe/Warsaw -PM +4703-05620 America/Miquelon -PN -2504-13005 Pacific/Pitcairn -PR +182806-0660622 America/Puerto_Rico -PS +3130+03428 Asia/Gaza -PT +3843-00908 Europe/Lisbon mainland -PT +3238-01654 Atlantic/Madeira Madeira Islands -PT +3744-02540 Atlantic/Azores Azores -PW +0720+13429 Pacific/Palau -PY -2516-05740 America/Asuncion -QA +2517+05132 Asia/Qatar -RE -2052+05528 Indian/Reunion -RO +4426+02606 Europe/Bucharest -RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad -RU +5545+03735 Europe/Moscow Moscow+00 - west Russia -RU +5312+05009 Europe/Samara Moscow+01 - Caspian Sea -RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals -RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia -RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk -RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River -RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal -RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River -RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River -RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island -RU +5934+15048 Asia/Magadan Moscow+08 - Magadan -RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka -RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea -RW -0157+03004 Africa/Kigali -SA +2438+04643 Asia/Riyadh -SB -0932+16012 Pacific/Guadalcanal -SC -0440+05528 Indian/Mahe -SD +1536+03232 Africa/Khartoum -SE +5920+01803 Europe/Stockholm -SG +0117+10351 Asia/Singapore -SH -1555-00542 Atlantic/St_Helena -SI +4603+01431 Europe/Ljubljana -SJ +7800+01600 Arctic/Longyearbyen Svalbard -SJ +7059-00805 Atlantic/Jan_Mayen Jan Mayen -SK +4809+01707 Europe/Bratislava -SL +0830-01315 Africa/Freetown -SM +4355+01228 Europe/San_Marino -SN +1440-01726 Africa/Dakar -SO +0204+04522 Africa/Mogadishu -SR +0550-05510 America/Paramaribo -ST +0020+00644 Africa/Sao_Tome -SV +1342-08912 America/El_Salvador -SY +3330+03618 Asia/Damascus -SZ -2618+03106 Africa/Mbabane -TC +2128-07108 America/Grand_Turk -TD +1207+01503 Africa/Ndjamena -TF -492110+0701303 Indian/Kerguelen -TG +0608+00113 Africa/Lome -TH +1345+10031 Asia/Bangkok -TJ +3835+06848 Asia/Dushanbe -TK -0922-17114 Pacific/Fakaofo -TL -0833+12535 Asia/Dili -TM +3757+05823 Asia/Ashgabat -TN +3648+01011 Africa/Tunis -TO -2110+17510 Pacific/Tongatapu -TR +4101+02858 Europe/Istanbul -TT +1039-06131 America/Port_of_Spain -TV -0831+17913 Pacific/Funafuti -TW +2503+12130 Asia/Taipei -TZ -0648+03917 Africa/Dar_es_Salaam -UA +5026+03031 Europe/Kiev most locations -UA +4837+02218 Europe/Uzhgorod Ruthenia -UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk -UA +4457+03406 Europe/Simferopol central Crimea -UG +0019+03225 Africa/Kampala -UM +1700-16830 Pacific/Johnston Johnston Atoll -UM +2813-17722 Pacific/Midway Midway Islands -UM +1917+16637 Pacific/Wake Wake Island -US +404251-0740023 America/New_York Eastern Time -US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations -US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area -US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County -US +394606-0860929 America/Indiana/Indianapolis Eastern Standard Time - Indiana - most locations -US +382232-0862041 America/Indiana/Marengo Eastern Standard Time - Indiana - Crawford County -US +411745-0863730 America/Indiana/Knox Eastern Standard Time - Indiana - Starke County -US +384452-0850402 America/Indiana/Vevay Eastern Standard Time - Indiana - Switzerland County -US +415100-0873900 America/Chicago Central Time -US +450628-0873651 America/Menominee Central Time - Michigan - Wisconsin border -US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County -US +394421-1045903 America/Denver Mountain Time -US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon -US +364708-1084111 America/Shiprock Mountain Time - Navajo -US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona -US +340308-1181434 America/Los_Angeles Pacific Time -US +611305-1495401 America/Anchorage Alaska Time -US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle -US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck -US +643004-1652423 America/Nome Alaska Time - west Alaska -US +515248-1763929 America/Adak Aleutian Islands -US +211825-1575130 Pacific/Honolulu Hawaii -UY -3453-05611 America/Montevideo -UZ +3940+06648 Asia/Samarkand west Uzbekistan -UZ +4120+06918 Asia/Tashkent east Uzbekistan -VA +4154+01227 Europe/Vatican -VC +1309-06114 America/St_Vincent -VE +1030-06656 America/Caracas -VG +1827-06437 America/Tortola -VI +1821-06456 America/St_Thomas -VN +1045+10640 Asia/Saigon -VU -1740+16825 Pacific/Efate -WF -1318-17610 Pacific/Wallis -WS -1350-17144 Pacific/Apia -YE +1245+04512 Asia/Aden -YT -1247+04514 Indian/Mayotte -ZA -2615+02800 Africa/Johannesburg -ZM -1525+02817 Africa/Lusaka -ZW -1750+03103 Africa/Harare diff --git a/modules/pytz/zoneinfo/Africa/Abidjan.py b/modules/pytz/zoneinfo/Africa/Abidjan.py deleted file mode 100644 index a78a5071..00000000 --- a/modules/pytz/zoneinfo/Africa/Abidjan.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Abidjan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Abidjan(DstTzInfo): - '''Africa/Abidjan timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Abidjan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,16,8), - ] - - _transition_info = [ -i(-960,0,'LMT'), -i(0,0,'GMT'), - ] - -Abidjan = Abidjan() - diff --git a/modules/pytz/zoneinfo/Africa/Accra.py b/modules/pytz/zoneinfo/Africa/Accra.py deleted file mode 100644 index 62c42d39..00000000 --- a/modules/pytz/zoneinfo/Africa/Accra.py +++ /dev/null @@ -1,50 +0,0 @@ -'''tzinfo timezone information for Africa/Accra.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Accra(DstTzInfo): - '''Africa/Accra timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Accra' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,1,1,0,0,52), -d(1936,9,1,0,0,0), -d(1936,12,30,23,40,0), -d(1937,9,1,0,0,0), -d(1937,12,30,23,40,0), -d(1938,9,1,0,0,0), -d(1938,12,30,23,40,0), -d(1939,9,1,0,0,0), -d(1939,12,30,23,40,0), -d(1940,9,1,0,0,0), -d(1940,12,30,23,40,0), -d(1941,9,1,0,0,0), -d(1941,12,30,23,40,0), -d(1942,9,1,0,0,0), -d(1942,12,30,23,40,0), - ] - - _transition_info = [ -i(-60,0,'LMT'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), -i(1200,1200,'GHST'), -i(0,0,'GMT'), - ] - -Accra = Accra() - diff --git a/modules/pytz/zoneinfo/Africa/Addis_Ababa.py b/modules/pytz/zoneinfo/Africa/Addis_Ababa.py deleted file mode 100644 index 2b7a992e..00000000 --- a/modules/pytz/zoneinfo/Africa/Addis_Ababa.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Addis_Ababa.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Addis_Ababa(DstTzInfo): - '''Africa/Addis_Ababa timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Addis_Ababa' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1936,5,4,21,24,40), - ] - - _transition_info = [ -i(9300,0,'ADMT'), -i(10800,0,'EAT'), - ] - -Addis_Ababa = Addis_Ababa() - diff --git a/modules/pytz/zoneinfo/Africa/Algiers.py b/modules/pytz/zoneinfo/Africa/Algiers.py deleted file mode 100644 index 6f2b763f..00000000 --- a/modules/pytz/zoneinfo/Africa/Algiers.py +++ /dev/null @@ -1,86 +0,0 @@ -'''tzinfo timezone information for Africa/Algiers.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Algiers(DstTzInfo): - '''Africa/Algiers timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Algiers' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,3,10,23,50,39), -d(1916,6,14,23,0,0), -d(1916,10,1,23,0,0), -d(1917,3,24,23,0,0), -d(1917,10,7,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,6,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,5,23,0,0), -d(1920,2,14,23,0,0), -d(1920,10,23,23,0,0), -d(1921,3,14,23,0,0), -d(1921,6,21,23,0,0), -d(1939,9,11,23,0,0), -d(1939,11,19,0,0,0), -d(1940,2,25,2,0,0), -d(1944,4,3,1,0,0), -d(1944,10,8,0,0,0), -d(1945,4,2,1,0,0), -d(1945,9,15,23,0,0), -d(1946,10,6,23,0,0), -d(1956,1,29,0,0,0), -d(1963,4,13,23,0,0), -d(1971,4,25,23,0,0), -d(1971,9,26,23,0,0), -d(1977,5,6,0,0,0), -d(1977,10,20,23,0,0), -d(1978,3,24,0,0,0), -d(1978,9,22,1,0,0), -d(1979,10,25,23,0,0), -d(1980,4,25,0,0,0), -d(1980,10,31,1,0,0), -d(1981,5,1,0,0,0), - ] - - _transition_info = [ -i(540,0,'PMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), - ] - -Algiers = Algiers() - diff --git a/modules/pytz/zoneinfo/Africa/Asmera.py b/modules/pytz/zoneinfo/Africa/Asmera.py deleted file mode 100644 index f05e0444..00000000 --- a/modules/pytz/zoneinfo/Africa/Asmera.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Asmera.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Asmera(DstTzInfo): - '''Africa/Asmera timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Asmera' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1936,5,4,21,24,40), - ] - - _transition_info = [ -i(9300,0,'ADMT'), -i(10800,0,'EAT'), - ] - -Asmera = Asmera() - diff --git a/modules/pytz/zoneinfo/Africa/Bamako.py b/modules/pytz/zoneinfo/Africa/Bamako.py deleted file mode 100644 index 67a15dd9..00000000 --- a/modules/pytz/zoneinfo/Africa/Bamako.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Bamako.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bamako(DstTzInfo): - '''Africa/Bamako timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Bamako' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,32,0), -d(1934,2,26,0,0,0), -d(1960,6,20,1,0,0), - ] - - _transition_info = [ -i(-1920,0,'LMT'), -i(0,0,'GMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Bamako = Bamako() - diff --git a/modules/pytz/zoneinfo/Africa/Bangui.py b/modules/pytz/zoneinfo/Africa/Bangui.py deleted file mode 100644 index 6fc9ea9c..00000000 --- a/modules/pytz/zoneinfo/Africa/Bangui.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Bangui.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bangui(DstTzInfo): - '''Africa/Bangui timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Bangui' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,22,45,40), - ] - - _transition_info = [ -i(4440,0,'LMT'), -i(3600,0,'WAT'), - ] - -Bangui = Bangui() - diff --git a/modules/pytz/zoneinfo/Africa/Banjul.py b/modules/pytz/zoneinfo/Africa/Banjul.py deleted file mode 100644 index 6d88185e..00000000 --- a/modules/pytz/zoneinfo/Africa/Banjul.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Banjul.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Banjul(DstTzInfo): - '''Africa/Banjul timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Banjul' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,1,6,36), -d(1935,1,1,1,6,36), -d(1964,1,1,1,0,0), - ] - - _transition_info = [ -i(-4020,0,'LMT'), -i(-4020,0,'BMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Banjul = Banjul() - diff --git a/modules/pytz/zoneinfo/Africa/Bissau.py b/modules/pytz/zoneinfo/Africa/Bissau.py deleted file mode 100644 index 9ba10a3f..00000000 --- a/modules/pytz/zoneinfo/Africa/Bissau.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Bissau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bissau(DstTzInfo): - '''Africa/Bissau timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Bissau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,26,1,2,20), -d(1975,1,1,1,0,0), - ] - - _transition_info = [ -i(-3720,0,'LMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Bissau = Bissau() - diff --git a/modules/pytz/zoneinfo/Africa/Blantyre.py b/modules/pytz/zoneinfo/Africa/Blantyre.py deleted file mode 100644 index d9ee75fe..00000000 --- a/modules/pytz/zoneinfo/Africa/Blantyre.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Blantyre.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Blantyre(DstTzInfo): - '''Africa/Blantyre timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Blantyre' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,21,40,0), - ] - - _transition_info = [ -i(8400,0,'LMT'), -i(7200,0,'CAT'), - ] - -Blantyre = Blantyre() - diff --git a/modules/pytz/zoneinfo/Africa/Brazzaville.py b/modules/pytz/zoneinfo/Africa/Brazzaville.py deleted file mode 100644 index b027a136..00000000 --- a/modules/pytz/zoneinfo/Africa/Brazzaville.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Brazzaville.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Brazzaville(DstTzInfo): - '''Africa/Brazzaville timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Brazzaville' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,22,58,52), - ] - - _transition_info = [ -i(3660,0,'LMT'), -i(3600,0,'WAT'), - ] - -Brazzaville = Brazzaville() - diff --git a/modules/pytz/zoneinfo/Africa/Bujumbura.py b/modules/pytz/zoneinfo/Africa/Bujumbura.py deleted file mode 100644 index 5c6df45e..00000000 --- a/modules/pytz/zoneinfo/Africa/Bujumbura.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Africa/Bujumbura.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Bujumbura(StaticTzInfo): - '''Africa/Bujumbura timezone definition. See datetime.tzinfo for details''' - zone = 'Africa/Bujumbura' - _utcoffset = timedelta(seconds=7200) - _tzname = 'CAT' - -Bujumbura = Bujumbura() - diff --git a/modules/pytz/zoneinfo/Africa/Cairo.py b/modules/pytz/zoneinfo/Africa/Cairo.py deleted file mode 100644 index 6aff50ae..00000000 --- a/modules/pytz/zoneinfo/Africa/Cairo.py +++ /dev/null @@ -1,368 +0,0 @@ -'''tzinfo timezone information for Africa/Cairo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cairo(DstTzInfo): - '''Africa/Cairo timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Cairo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,7,14,22,0,0), -d(1940,9,30,21,0,0), -d(1941,4,14,22,0,0), -d(1941,9,15,21,0,0), -d(1942,3,31,22,0,0), -d(1942,10,26,21,0,0), -d(1943,3,31,22,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,21,0,0), -d(1957,5,9,22,0,0), -d(1957,9,30,21,0,0), -d(1958,4,30,22,0,0), -d(1958,9,30,21,0,0), -d(1959,4,30,23,0,0), -d(1959,9,30,0,0,0), -d(1960,4,30,23,0,0), -d(1960,9,30,0,0,0), -d(1961,4,30,23,0,0), -d(1961,9,30,0,0,0), -d(1962,4,30,23,0,0), -d(1962,9,30,0,0,0), -d(1963,4,30,23,0,0), -d(1963,9,30,0,0,0), -d(1964,4,30,23,0,0), -d(1964,9,30,0,0,0), -d(1965,4,30,23,0,0), -d(1965,9,30,0,0,0), -d(1966,4,30,23,0,0), -d(1966,10,1,0,0,0), -d(1967,4,30,23,0,0), -d(1967,10,1,0,0,0), -d(1968,4,30,23,0,0), -d(1968,10,1,0,0,0), -d(1969,4,30,23,0,0), -d(1969,10,1,0,0,0), -d(1970,4,30,23,0,0), -d(1970,10,1,0,0,0), -d(1971,4,30,23,0,0), -d(1971,10,1,0,0,0), -d(1972,4,30,23,0,0), -d(1972,10,1,0,0,0), -d(1973,4,30,23,0,0), -d(1973,10,1,0,0,0), -d(1974,4,30,23,0,0), -d(1974,10,1,0,0,0), -d(1975,4,30,23,0,0), -d(1975,10,1,0,0,0), -d(1976,4,30,23,0,0), -d(1976,10,1,0,0,0), -d(1977,4,30,23,0,0), -d(1977,10,1,0,0,0), -d(1978,4,30,23,0,0), -d(1978,10,1,0,0,0), -d(1979,4,30,23,0,0), -d(1979,10,1,0,0,0), -d(1980,4,30,23,0,0), -d(1980,10,1,0,0,0), -d(1981,4,30,23,0,0), -d(1981,10,1,0,0,0), -d(1982,7,24,23,0,0), -d(1982,10,1,0,0,0), -d(1983,7,11,23,0,0), -d(1983,10,1,0,0,0), -d(1984,4,30,23,0,0), -d(1984,10,1,0,0,0), -d(1985,4,30,23,0,0), -d(1985,10,1,0,0,0), -d(1986,4,30,23,0,0), -d(1986,10,1,0,0,0), -d(1987,4,30,23,0,0), -d(1987,10,1,0,0,0), -d(1988,4,30,23,0,0), -d(1988,10,1,0,0,0), -d(1989,5,5,23,0,0), -d(1989,10,1,0,0,0), -d(1990,4,30,23,0,0), -d(1990,10,1,0,0,0), -d(1991,4,30,23,0,0), -d(1991,10,1,0,0,0), -d(1992,4,30,23,0,0), -d(1992,10,1,0,0,0), -d(1993,4,30,23,0,0), -d(1993,10,1,0,0,0), -d(1994,4,30,23,0,0), -d(1994,10,1,0,0,0), -d(1995,4,27,22,0,0), -d(1995,9,28,21,0,0), -d(1996,4,25,22,0,0), -d(1996,9,26,21,0,0), -d(1997,4,24,22,0,0), -d(1997,9,25,21,0,0), -d(1998,4,23,22,0,0), -d(1998,9,24,21,0,0), -d(1999,4,29,22,0,0), -d(1999,9,30,21,0,0), -d(2000,4,27,22,0,0), -d(2000,9,28,21,0,0), -d(2001,4,26,22,0,0), -d(2001,9,27,21,0,0), -d(2002,4,25,22,0,0), -d(2002,9,26,21,0,0), -d(2003,4,24,22,0,0), -d(2003,9,25,21,0,0), -d(2004,4,29,22,0,0), -d(2004,9,30,21,0,0), -d(2005,4,28,22,0,0), -d(2005,9,29,21,0,0), -d(2006,4,27,22,0,0), -d(2006,9,28,21,0,0), -d(2007,4,26,22,0,0), -d(2007,9,27,21,0,0), -d(2008,4,24,22,0,0), -d(2008,9,25,21,0,0), -d(2009,4,23,22,0,0), -d(2009,9,24,21,0,0), -d(2010,4,29,22,0,0), -d(2010,9,30,21,0,0), -d(2011,4,28,22,0,0), -d(2011,9,29,21,0,0), -d(2012,4,26,22,0,0), -d(2012,9,27,21,0,0), -d(2013,4,25,22,0,0), -d(2013,9,26,21,0,0), -d(2014,4,24,22,0,0), -d(2014,9,25,21,0,0), -d(2015,4,23,22,0,0), -d(2015,9,24,21,0,0), -d(2016,4,28,22,0,0), -d(2016,9,29,21,0,0), -d(2017,4,27,22,0,0), -d(2017,9,28,21,0,0), -d(2018,4,26,22,0,0), -d(2018,9,27,21,0,0), -d(2019,4,25,22,0,0), -d(2019,9,26,21,0,0), -d(2020,4,23,22,0,0), -d(2020,9,24,21,0,0), -d(2021,4,29,22,0,0), -d(2021,9,30,21,0,0), -d(2022,4,28,22,0,0), -d(2022,9,29,21,0,0), -d(2023,4,27,22,0,0), -d(2023,9,28,21,0,0), -d(2024,4,25,22,0,0), -d(2024,9,26,21,0,0), -d(2025,4,24,22,0,0), -d(2025,9,25,21,0,0), -d(2026,4,23,22,0,0), -d(2026,9,24,21,0,0), -d(2027,4,29,22,0,0), -d(2027,9,30,21,0,0), -d(2028,4,27,22,0,0), -d(2028,9,28,21,0,0), -d(2029,4,26,22,0,0), -d(2029,9,27,21,0,0), -d(2030,4,25,22,0,0), -d(2030,9,26,21,0,0), -d(2031,4,24,22,0,0), -d(2031,9,25,21,0,0), -d(2032,4,29,22,0,0), -d(2032,9,30,21,0,0), -d(2033,4,28,22,0,0), -d(2033,9,29,21,0,0), -d(2034,4,27,22,0,0), -d(2034,9,28,21,0,0), -d(2035,4,26,22,0,0), -d(2035,9,27,21,0,0), -d(2036,4,24,22,0,0), -d(2036,9,25,21,0,0), -d(2037,4,23,22,0,0), -d(2037,9,24,21,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Cairo = Cairo() - diff --git a/modules/pytz/zoneinfo/Africa/Casablanca.py b/modules/pytz/zoneinfo/Africa/Casablanca.py deleted file mode 100644 index 3e7bf3b3..00000000 --- a/modules/pytz/zoneinfo/Africa/Casablanca.py +++ /dev/null @@ -1,58 +0,0 @@ -'''tzinfo timezone information for Africa/Casablanca.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Casablanca(DstTzInfo): - '''Africa/Casablanca timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Casablanca' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1913,10,26,0,30,20), -d(1939,9,12,0,0,0), -d(1939,11,18,23,0,0), -d(1940,2,25,0,0,0), -d(1945,11,17,23,0,0), -d(1950,6,11,0,0,0), -d(1950,10,28,23,0,0), -d(1967,6,3,12,0,0), -d(1967,9,30,23,0,0), -d(1974,6,24,0,0,0), -d(1974,8,31,23,0,0), -d(1976,5,1,0,0,0), -d(1976,7,31,23,0,0), -d(1977,5,1,0,0,0), -d(1977,9,27,23,0,0), -d(1978,6,1,0,0,0), -d(1978,8,3,23,0,0), -d(1984,3,16,0,0,0), -d(1985,12,31,23,0,0), - ] - - _transition_info = [ -i(-1800,0,'LMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(0,0,'WET'), - ] - -Casablanca = Casablanca() - diff --git a/modules/pytz/zoneinfo/Africa/Ceuta.py b/modules/pytz/zoneinfo/Africa/Ceuta.py deleted file mode 100644 index 8da35b7c..00000000 --- a/modules/pytz/zoneinfo/Africa/Ceuta.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for Africa/Ceuta.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ceuta(DstTzInfo): - '''Africa/Ceuta timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Ceuta' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,5,6,23,0,0), -d(1918,10,7,22,0,0), -d(1924,4,16,23,0,0), -d(1924,10,4,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,1,1,0,0,0), -d(1967,6,3,12,0,0), -d(1967,9,30,23,0,0), -d(1974,6,24,0,0,0), -d(1974,8,31,23,0,0), -d(1976,5,1,0,0,0), -d(1976,7,31,23,0,0), -d(1977,5,1,0,0,0), -d(1977,9,27,23,0,0), -d(1978,6,1,0,0,0), -d(1978,8,3,23,0,0), -d(1984,3,16,0,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Ceuta = Ceuta() - diff --git a/modules/pytz/zoneinfo/Africa/Conakry.py b/modules/pytz/zoneinfo/Africa/Conakry.py deleted file mode 100644 index 39fd4059..00000000 --- a/modules/pytz/zoneinfo/Africa/Conakry.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Conakry.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Conakry(DstTzInfo): - '''Africa/Conakry timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Conakry' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,54,52), -d(1934,2,26,0,0,0), -d(1960,1,1,1,0,0), - ] - - _transition_info = [ -i(-3300,0,'LMT'), -i(0,0,'GMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Conakry = Conakry() - diff --git a/modules/pytz/zoneinfo/Africa/Dakar.py b/modules/pytz/zoneinfo/Africa/Dakar.py deleted file mode 100644 index 5a07e676..00000000 --- a/modules/pytz/zoneinfo/Africa/Dakar.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Dakar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dakar(DstTzInfo): - '''Africa/Dakar timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Dakar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,1,9,44), -d(1941,6,1,1,0,0), - ] - - _transition_info = [ -i(-4200,0,'LMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Dakar = Dakar() - diff --git a/modules/pytz/zoneinfo/Africa/Dar_es_Salaam.py b/modules/pytz/zoneinfo/Africa/Dar_es_Salaam.py deleted file mode 100644 index 63f72fe5..00000000 --- a/modules/pytz/zoneinfo/Africa/Dar_es_Salaam.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Dar_es_Salaam.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dar_es_Salaam(DstTzInfo): - '''Africa/Dar_es_Salaam timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Dar_es_Salaam' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1930,12,31,21,22,52), -d(1947,12,31,21,0,0), -d(1960,12,31,21,15,15), - ] - - _transition_info = [ -i(9420,0,'LMT'), -i(10800,0,'EAT'), -i(9900,0,'BEAUT'), -i(10800,0,'EAT'), - ] - -Dar_es_Salaam = Dar_es_Salaam() - diff --git a/modules/pytz/zoneinfo/Africa/Djibouti.py b/modules/pytz/zoneinfo/Africa/Djibouti.py deleted file mode 100644 index 1f114880..00000000 --- a/modules/pytz/zoneinfo/Africa/Djibouti.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Djibouti.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Djibouti(DstTzInfo): - '''Africa/Djibouti timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Djibouti' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,6,30,21,7,24), - ] - - _transition_info = [ -i(10380,0,'LMT'), -i(10800,0,'EAT'), - ] - -Djibouti = Djibouti() - diff --git a/modules/pytz/zoneinfo/Africa/Douala.py b/modules/pytz/zoneinfo/Africa/Douala.py deleted file mode 100644 index ffa00b51..00000000 --- a/modules/pytz/zoneinfo/Africa/Douala.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Douala.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Douala(DstTzInfo): - '''Africa/Douala timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Douala' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,23,21,12), - ] - - _transition_info = [ -i(2340,0,'LMT'), -i(3600,0,'WAT'), - ] - -Douala = Douala() - diff --git a/modules/pytz/zoneinfo/Africa/El_Aaiun.py b/modules/pytz/zoneinfo/Africa/El_Aaiun.py deleted file mode 100644 index 7fa97f7f..00000000 --- a/modules/pytz/zoneinfo/Africa/El_Aaiun.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/El_Aaiun.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class El_Aaiun(DstTzInfo): - '''Africa/El_Aaiun timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/El_Aaiun' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1934,1,1,0,52,48), -d(1976,4,14,1,0,0), - ] - - _transition_info = [ -i(-3180,0,'LMT'), -i(-3600,0,'WAT'), -i(0,0,'WET'), - ] - -El_Aaiun = El_Aaiun() - diff --git a/modules/pytz/zoneinfo/Africa/Freetown.py b/modules/pytz/zoneinfo/Africa/Freetown.py deleted file mode 100644 index 729e0f38..00000000 --- a/modules/pytz/zoneinfo/Africa/Freetown.py +++ /dev/null @@ -1,80 +0,0 @@ -'''tzinfo timezone information for Africa/Freetown.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Freetown(DstTzInfo): - '''Africa/Freetown timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Freetown' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1913,6,1,0,53,0), -d(1935,6,1,1,0,0), -d(1935,10,1,0,20,0), -d(1936,6,1,1,0,0), -d(1936,10,1,0,20,0), -d(1937,6,1,1,0,0), -d(1937,10,1,0,20,0), -d(1938,6,1,1,0,0), -d(1938,10,1,0,20,0), -d(1939,6,1,1,0,0), -d(1939,10,1,0,20,0), -d(1940,6,1,1,0,0), -d(1940,10,1,0,20,0), -d(1941,6,1,1,0,0), -d(1941,10,1,0,20,0), -d(1942,6,1,1,0,0), -d(1942,10,1,0,20,0), -d(1957,1,1,1,0,0), -d(1957,6,1,0,0,0), -d(1957,8,31,23,0,0), -d(1958,6,1,0,0,0), -d(1958,8,31,23,0,0), -d(1959,6,1,0,0,0), -d(1959,8,31,23,0,0), -d(1960,6,1,0,0,0), -d(1960,8,31,23,0,0), -d(1961,6,1,0,0,0), -d(1961,8,31,23,0,0), -d(1962,6,1,0,0,0), -d(1962,8,31,23,0,0), - ] - - _transition_info = [ -i(-3180,0,'FMT'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(-1200,2400,'SLST'), -i(-3600,0,'WAT'), -i(0,0,'WAT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), -i(3600,3600,'SLST'), -i(0,0,'GMT'), - ] - -Freetown = Freetown() - diff --git a/modules/pytz/zoneinfo/Africa/Gaborone.py b/modules/pytz/zoneinfo/Africa/Gaborone.py deleted file mode 100644 index 2f7ca37c..00000000 --- a/modules/pytz/zoneinfo/Africa/Gaborone.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Gaborone.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Gaborone(DstTzInfo): - '''Africa/Gaborone timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Gaborone' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1943,9,19,0,0,0), -d(1944,3,18,23,0,0), - ] - - _transition_info = [ -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), - ] - -Gaborone = Gaborone() - diff --git a/modules/pytz/zoneinfo/Africa/Harare.py b/modules/pytz/zoneinfo/Africa/Harare.py deleted file mode 100644 index 3dd81aaa..00000000 --- a/modules/pytz/zoneinfo/Africa/Harare.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Harare.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Harare(DstTzInfo): - '''Africa/Harare timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Harare' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,21,55,48), - ] - - _transition_info = [ -i(7440,0,'LMT'), -i(7200,0,'CAT'), - ] - -Harare = Harare() - diff --git a/modules/pytz/zoneinfo/Africa/Johannesburg.py b/modules/pytz/zoneinfo/Africa/Johannesburg.py deleted file mode 100644 index 09bde279..00000000 --- a/modules/pytz/zoneinfo/Africa/Johannesburg.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Africa/Johannesburg.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Johannesburg(DstTzInfo): - '''Africa/Johannesburg timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Johannesburg' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,22,30,0), -d(1942,9,20,0,0,0), -d(1943,3,20,23,0,0), -d(1943,9,19,0,0,0), -d(1944,3,18,23,0,0), - ] - - _transition_info = [ -i(5400,0,'SAST'), -i(7200,0,'SAST'), -i(10800,3600,'SAST'), -i(7200,0,'SAST'), -i(10800,3600,'SAST'), -i(7200,0,'SAST'), - ] - -Johannesburg = Johannesburg() - diff --git a/modules/pytz/zoneinfo/Africa/Kampala.py b/modules/pytz/zoneinfo/Africa/Kampala.py deleted file mode 100644 index c60e898d..00000000 --- a/modules/pytz/zoneinfo/Africa/Kampala.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Africa/Kampala.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kampala(DstTzInfo): - '''Africa/Kampala timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Kampala' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1928,6,30,21,50,20), -d(1929,12,31,21,0,0), -d(1947,12,31,21,30,0), -d(1956,12,31,21,15,15), - ] - - _transition_info = [ -i(7800,0,'LMT'), -i(10800,0,'EAT'), -i(9000,0,'BEAT'), -i(9900,0,'BEAUT'), -i(10800,0,'EAT'), - ] - -Kampala = Kampala() - diff --git a/modules/pytz/zoneinfo/Africa/Khartoum.py b/modules/pytz/zoneinfo/Africa/Khartoum.py deleted file mode 100644 index 94beac52..00000000 --- a/modules/pytz/zoneinfo/Africa/Khartoum.py +++ /dev/null @@ -1,88 +0,0 @@ -'''tzinfo timezone information for Africa/Khartoum.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Khartoum(DstTzInfo): - '''Africa/Khartoum timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Khartoum' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1930,12,31,21,49,52), -d(1970,4,30,22,0,0), -d(1970,10,14,21,0,0), -d(1971,4,29,22,0,0), -d(1971,10,14,21,0,0), -d(1972,4,29,22,0,0), -d(1972,10,14,21,0,0), -d(1973,4,28,22,0,0), -d(1973,10,14,21,0,0), -d(1974,4,27,22,0,0), -d(1974,10,14,21,0,0), -d(1975,4,26,22,0,0), -d(1975,10,14,21,0,0), -d(1976,4,24,22,0,0), -d(1976,10,14,21,0,0), -d(1977,4,23,22,0,0), -d(1977,10,14,21,0,0), -d(1978,4,29,22,0,0), -d(1978,10,14,21,0,0), -d(1979,4,28,22,0,0), -d(1979,10,14,21,0,0), -d(1980,4,26,22,0,0), -d(1980,10,14,21,0,0), -d(1981,4,25,22,0,0), -d(1981,10,14,21,0,0), -d(1982,4,24,22,0,0), -d(1982,10,14,21,0,0), -d(1983,4,23,22,0,0), -d(1983,10,14,21,0,0), -d(1984,4,28,22,0,0), -d(1984,10,14,21,0,0), -d(1985,4,27,22,0,0), -d(1985,10,14,21,0,0), -d(2000,1,15,10,0,0), - ] - - _transition_info = [ -i(7800,0,'LMT'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,3600,'CAST'), -i(7200,0,'CAT'), -i(10800,0,'EAT'), - ] - -Khartoum = Khartoum() - diff --git a/modules/pytz/zoneinfo/Africa/Kigali.py b/modules/pytz/zoneinfo/Africa/Kigali.py deleted file mode 100644 index eaf21aa8..00000000 --- a/modules/pytz/zoneinfo/Africa/Kigali.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Kigali.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kigali(DstTzInfo): - '''Africa/Kigali timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Kigali' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1935,5,31,21,59,44), - ] - - _transition_info = [ -i(7200,0,'LMT'), -i(7200,0,'CAT'), - ] - -Kigali = Kigali() - diff --git a/modules/pytz/zoneinfo/Africa/Kinshasa.py b/modules/pytz/zoneinfo/Africa/Kinshasa.py deleted file mode 100644 index abba1690..00000000 --- a/modules/pytz/zoneinfo/Africa/Kinshasa.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Africa/Kinshasa.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Kinshasa(StaticTzInfo): - '''Africa/Kinshasa timezone definition. See datetime.tzinfo for details''' - zone = 'Africa/Kinshasa' - _utcoffset = timedelta(seconds=3600) - _tzname = 'WAT' - -Kinshasa = Kinshasa() - diff --git a/modules/pytz/zoneinfo/Africa/Lagos.py b/modules/pytz/zoneinfo/Africa/Lagos.py deleted file mode 100644 index 23a616fa..00000000 --- a/modules/pytz/zoneinfo/Africa/Lagos.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Lagos.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lagos(DstTzInfo): - '''Africa/Lagos timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Lagos' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,8,31,23,46,24), - ] - - _transition_info = [ -i(840,0,'LMT'), -i(3600,0,'WAT'), - ] - -Lagos = Lagos() - diff --git a/modules/pytz/zoneinfo/Africa/Libreville.py b/modules/pytz/zoneinfo/Africa/Libreville.py deleted file mode 100644 index 26c4bdf9..00000000 --- a/modules/pytz/zoneinfo/Africa/Libreville.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Libreville.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Libreville(DstTzInfo): - '''Africa/Libreville timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Libreville' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,23,22,12), - ] - - _transition_info = [ -i(2280,0,'LMT'), -i(3600,0,'WAT'), - ] - -Libreville = Libreville() - diff --git a/modules/pytz/zoneinfo/Africa/Lome.py b/modules/pytz/zoneinfo/Africa/Lome.py deleted file mode 100644 index f161dddf..00000000 --- a/modules/pytz/zoneinfo/Africa/Lome.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Africa/Lome.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Lome(StaticTzInfo): - '''Africa/Lome timezone definition. See datetime.tzinfo for details''' - zone = 'Africa/Lome' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -Lome = Lome() - diff --git a/modules/pytz/zoneinfo/Africa/Luanda.py b/modules/pytz/zoneinfo/Africa/Luanda.py deleted file mode 100644 index 80528f6f..00000000 --- a/modules/pytz/zoneinfo/Africa/Luanda.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Luanda.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Luanda(DstTzInfo): - '''Africa/Luanda timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Luanda' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,25,23,7,56), - ] - - _transition_info = [ -i(3120,0,'AOT'), -i(3600,0,'WAT'), - ] - -Luanda = Luanda() - diff --git a/modules/pytz/zoneinfo/Africa/Lubumbashi.py b/modules/pytz/zoneinfo/Africa/Lubumbashi.py deleted file mode 100644 index a9d6411f..00000000 --- a/modules/pytz/zoneinfo/Africa/Lubumbashi.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Africa/Lubumbashi.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Lubumbashi(StaticTzInfo): - '''Africa/Lubumbashi timezone definition. See datetime.tzinfo for details''' - zone = 'Africa/Lubumbashi' - _utcoffset = timedelta(seconds=7200) - _tzname = 'CAT' - -Lubumbashi = Lubumbashi() - diff --git a/modules/pytz/zoneinfo/Africa/Lusaka.py b/modules/pytz/zoneinfo/Africa/Lusaka.py deleted file mode 100644 index cb92fb80..00000000 --- a/modules/pytz/zoneinfo/Africa/Lusaka.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Lusaka.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lusaka(DstTzInfo): - '''Africa/Lusaka timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Lusaka' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,22,6,52), - ] - - _transition_info = [ -i(6780,0,'LMT'), -i(7200,0,'CAT'), - ] - -Lusaka = Lusaka() - diff --git a/modules/pytz/zoneinfo/Africa/Malabo.py b/modules/pytz/zoneinfo/Africa/Malabo.py deleted file mode 100644 index c5ec85e6..00000000 --- a/modules/pytz/zoneinfo/Africa/Malabo.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Malabo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Malabo(DstTzInfo): - '''Africa/Malabo timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Malabo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,23,24,52), -d(1963,12,15,0,0,0), - ] - - _transition_info = [ -i(2100,0,'LMT'), -i(0,0,'GMT'), -i(3600,0,'WAT'), - ] - -Malabo = Malabo() - diff --git a/modules/pytz/zoneinfo/Africa/Maputo.py b/modules/pytz/zoneinfo/Africa/Maputo.py deleted file mode 100644 index 69b83ebf..00000000 --- a/modules/pytz/zoneinfo/Africa/Maputo.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Maputo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Maputo(DstTzInfo): - '''Africa/Maputo timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Maputo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,21,49,40), - ] - - _transition_info = [ -i(7800,0,'LMT'), -i(7200,0,'CAT'), - ] - -Maputo = Maputo() - diff --git a/modules/pytz/zoneinfo/Africa/Maseru.py b/modules/pytz/zoneinfo/Africa/Maseru.py deleted file mode 100644 index d49b14f6..00000000 --- a/modules/pytz/zoneinfo/Africa/Maseru.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Maseru.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Maseru(DstTzInfo): - '''Africa/Maseru timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Maseru' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,22,10,0), -d(1943,9,19,0,0,0), -d(1944,3,18,23,0,0), - ] - - _transition_info = [ -i(6600,0,'LMT'), -i(7200,0,'SAST'), -i(10800,3600,'SAST'), -i(7200,0,'SAST'), - ] - -Maseru = Maseru() - diff --git a/modules/pytz/zoneinfo/Africa/Mbabane.py b/modules/pytz/zoneinfo/Africa/Mbabane.py deleted file mode 100644 index caf48cc7..00000000 --- a/modules/pytz/zoneinfo/Africa/Mbabane.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Mbabane.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mbabane(DstTzInfo): - '''Africa/Mbabane timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Mbabane' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,21,55,36), - ] - - _transition_info = [ -i(7440,0,'LMT'), -i(7200,0,'SAST'), - ] - -Mbabane = Mbabane() - diff --git a/modules/pytz/zoneinfo/Africa/Mogadishu.py b/modules/pytz/zoneinfo/Africa/Mogadishu.py deleted file mode 100644 index fd871e15..00000000 --- a/modules/pytz/zoneinfo/Africa/Mogadishu.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Mogadishu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mogadishu(DstTzInfo): - '''Africa/Mogadishu timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Mogadishu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1930,12,31,21,0,0), -d(1956,12,31,21,30,0), - ] - - _transition_info = [ -i(10800,0,'EAT'), -i(9000,0,'BEAT'), -i(10800,0,'EAT'), - ] - -Mogadishu = Mogadishu() - diff --git a/modules/pytz/zoneinfo/Africa/Monrovia.py b/modules/pytz/zoneinfo/Africa/Monrovia.py deleted file mode 100644 index 15a42685..00000000 --- a/modules/pytz/zoneinfo/Africa/Monrovia.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Monrovia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Monrovia(DstTzInfo): - '''Africa/Monrovia timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Monrovia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,3,1,0,43,8), -d(1972,5,1,0,44,30), - ] - - _transition_info = [ -i(-2580,0,'MMT'), -i(-2640,0,'LRT'), -i(0,0,'GMT'), - ] - -Monrovia = Monrovia() - diff --git a/modules/pytz/zoneinfo/Africa/Nairobi.py b/modules/pytz/zoneinfo/Africa/Nairobi.py deleted file mode 100644 index fbee2de7..00000000 --- a/modules/pytz/zoneinfo/Africa/Nairobi.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Africa/Nairobi.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nairobi(DstTzInfo): - '''Africa/Nairobi timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Nairobi' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1928,6,30,21,32,44), -d(1929,12,31,21,0,0), -d(1939,12,31,21,30,0), -d(1959,12,31,21,15,15), - ] - - _transition_info = [ -i(8820,0,'LMT'), -i(10800,0,'EAT'), -i(9000,0,'BEAT'), -i(9900,0,'BEAUT'), -i(10800,0,'EAT'), - ] - -Nairobi = Nairobi() - diff --git a/modules/pytz/zoneinfo/Africa/Ndjamena.py b/modules/pytz/zoneinfo/Africa/Ndjamena.py deleted file mode 100644 index 52a0ea83..00000000 --- a/modules/pytz/zoneinfo/Africa/Ndjamena.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Ndjamena.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ndjamena(DstTzInfo): - '''Africa/Ndjamena timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Ndjamena' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,22,59,48), -d(1979,10,13,23,0,0), -d(1980,3,7,22,0,0), - ] - - _transition_info = [ -i(3600,0,'LMT'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), - ] - -Ndjamena = Ndjamena() - diff --git a/modules/pytz/zoneinfo/Africa/Niamey.py b/modules/pytz/zoneinfo/Africa/Niamey.py deleted file mode 100644 index f4ffd54d..00000000 --- a/modules/pytz/zoneinfo/Africa/Niamey.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Niamey.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Niamey(DstTzInfo): - '''Africa/Niamey timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Niamey' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,23,51,32), -d(1934,2,26,1,0,0), -d(1960,1,1,0,0,0), - ] - - _transition_info = [ -i(480,0,'LMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), -i(3600,0,'WAT'), - ] - -Niamey = Niamey() - diff --git a/modules/pytz/zoneinfo/Africa/Nouakchott.py b/modules/pytz/zoneinfo/Africa/Nouakchott.py deleted file mode 100644 index 1c35ec79..00000000 --- a/modules/pytz/zoneinfo/Africa/Nouakchott.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Nouakchott.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nouakchott(DstTzInfo): - '''Africa/Nouakchott timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Nouakchott' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,1,3,48), -d(1934,2,26,0,0,0), -d(1960,11,28,1,0,0), - ] - - _transition_info = [ -i(-3840,0,'LMT'), -i(0,0,'GMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Nouakchott = Nouakchott() - diff --git a/modules/pytz/zoneinfo/Africa/Ouagadougou.py b/modules/pytz/zoneinfo/Africa/Ouagadougou.py deleted file mode 100644 index 1019d179..00000000 --- a/modules/pytz/zoneinfo/Africa/Ouagadougou.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Ouagadougou.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ouagadougou(DstTzInfo): - '''Africa/Ouagadougou timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Ouagadougou' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,6,4), - ] - - _transition_info = [ -i(-360,0,'LMT'), -i(0,0,'GMT'), - ] - -Ouagadougou = Ouagadougou() - diff --git a/modules/pytz/zoneinfo/Africa/Porto_minus_Novo.py b/modules/pytz/zoneinfo/Africa/Porto_minus_Novo.py deleted file mode 100644 index 867c468f..00000000 --- a/modules/pytz/zoneinfo/Africa/Porto_minus_Novo.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Africa/Porto_minus_Novo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Porto_minus_Novo(DstTzInfo): - '''Africa/Porto_minus_Novo timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Porto_minus_Novo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,23,49,32), -d(1934,2,26,0,0,0), - ] - - _transition_info = [ -i(600,0,'LMT'), -i(0,0,'GMT'), -i(3600,0,'WAT'), - ] - -Porto_minus_Novo = Porto_minus_Novo() - diff --git a/modules/pytz/zoneinfo/Africa/Sao_Tome.py b/modules/pytz/zoneinfo/Africa/Sao_Tome.py deleted file mode 100644 index 427b6d00..00000000 --- a/modules/pytz/zoneinfo/Africa/Sao_Tome.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Africa/Sao_Tome.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sao_Tome(DstTzInfo): - '''Africa/Sao_Tome timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Sao_Tome' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,36,32), - ] - - _transition_info = [ -i(-2220,0,'LMT'), -i(0,0,'GMT'), - ] - -Sao_Tome = Sao_Tome() - diff --git a/modules/pytz/zoneinfo/Africa/Timbuktu.py b/modules/pytz/zoneinfo/Africa/Timbuktu.py deleted file mode 100644 index adc88f9a..00000000 --- a/modules/pytz/zoneinfo/Africa/Timbuktu.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Africa/Timbuktu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Timbuktu(DstTzInfo): - '''Africa/Timbuktu timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Timbuktu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,32,0), -d(1934,2,26,0,0,0), -d(1960,6,20,1,0,0), - ] - - _transition_info = [ -i(-1920,0,'LMT'), -i(0,0,'GMT'), -i(-3600,0,'WAT'), -i(0,0,'GMT'), - ] - -Timbuktu = Timbuktu() - diff --git a/modules/pytz/zoneinfo/Africa/Tripoli.py b/modules/pytz/zoneinfo/Africa/Tripoli.py deleted file mode 100644 index d4752dc9..00000000 --- a/modules/pytz/zoneinfo/Africa/Tripoli.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for Africa/Tripoli.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tripoli(DstTzInfo): - '''Africa/Tripoli timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Tripoli' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,23,7,16), -d(1951,10,14,1,0,0), -d(1951,12,31,22,0,0), -d(1953,10,9,1,0,0), -d(1953,12,31,22,0,0), -d(1955,9,29,23,0,0), -d(1955,12,31,22,0,0), -d(1958,12,31,23,0,0), -d(1981,12,31,22,0,0), -d(1982,3,31,23,0,0), -d(1982,9,30,22,0,0), -d(1983,3,31,23,0,0), -d(1983,9,30,22,0,0), -d(1984,3,31,23,0,0), -d(1984,9,30,22,0,0), -d(1985,4,5,23,0,0), -d(1985,9,30,22,0,0), -d(1986,4,3,23,0,0), -d(1986,10,2,22,0,0), -d(1987,3,31,23,0,0), -d(1987,9,30,22,0,0), -d(1988,3,31,23,0,0), -d(1988,9,30,22,0,0), -d(1989,3,31,23,0,0), -d(1989,9,30,22,0,0), -d(1990,5,3,23,0,0), -d(1996,9,29,22,0,0), -d(1997,4,3,23,0,0), -d(1997,10,3,22,0,0), - ] - - _transition_info = [ -i(3180,0,'LMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,0,'EET'), - ] - -Tripoli = Tripoli() - diff --git a/modules/pytz/zoneinfo/Africa/Tunis.py b/modules/pytz/zoneinfo/Africa/Tunis.py deleted file mode 100644 index eead83da..00000000 --- a/modules/pytz/zoneinfo/Africa/Tunis.py +++ /dev/null @@ -1,74 +0,0 @@ -'''tzinfo timezone information for Africa/Tunis.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tunis(DstTzInfo): - '''Africa/Tunis timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Tunis' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,3,10,23,50,39), -d(1939,4,15,22,0,0), -d(1939,11,18,22,0,0), -d(1940,2,25,22,0,0), -d(1941,10,5,22,0,0), -d(1942,3,8,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,4,17,0,0,0), -d(1943,4,25,1,0,0), -d(1943,10,4,0,0,0), -d(1944,4,3,1,0,0), -d(1944,10,7,22,0,0), -d(1945,4,2,1,0,0), -d(1945,9,15,22,0,0), -d(1977,4,29,23,0,0), -d(1977,9,23,23,0,0), -d(1978,4,30,23,0,0), -d(1978,9,30,23,0,0), -d(1988,5,31,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,4,30,23,0,0), -d(1990,9,29,23,0,0), -d(2005,4,30,23,0,0), -d(2005,9,30,0,0,0), - ] - - _transition_info = [ -i(540,0,'PMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Tunis = Tunis() - diff --git a/modules/pytz/zoneinfo/Africa/Windhoek.py b/modules/pytz/zoneinfo/Africa/Windhoek.py deleted file mode 100644 index 58bca755..00000000 --- a/modules/pytz/zoneinfo/Africa/Windhoek.py +++ /dev/null @@ -1,204 +0,0 @@ -'''tzinfo timezone information for Africa/Windhoek.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Windhoek(DstTzInfo): - '''Africa/Windhoek timezone definition. See datetime.tzinfo for details''' - - zone = 'Africa/Windhoek' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1903,2,28,22,30,0), -d(1942,9,20,0,0,0), -d(1943,3,20,23,0,0), -d(1990,3,20,22,0,0), -d(1994,4,2,22,0,0), -d(1994,9,4,1,0,0), -d(1995,4,2,0,0,0), -d(1995,9,3,1,0,0), -d(1996,4,7,0,0,0), -d(1996,9,1,1,0,0), -d(1997,4,6,0,0,0), -d(1997,9,7,1,0,0), -d(1998,4,5,0,0,0), -d(1998,9,6,1,0,0), -d(1999,4,4,0,0,0), -d(1999,9,5,1,0,0), -d(2000,4,2,0,0,0), -d(2000,9,3,1,0,0), -d(2001,4,1,0,0,0), -d(2001,9,2,1,0,0), -d(2002,4,7,0,0,0), -d(2002,9,1,1,0,0), -d(2003,4,6,0,0,0), -d(2003,9,7,1,0,0), -d(2004,4,4,0,0,0), -d(2004,9,5,1,0,0), -d(2005,4,3,0,0,0), -d(2005,9,4,1,0,0), -d(2006,4,2,0,0,0), -d(2006,9,3,1,0,0), -d(2007,4,1,0,0,0), -d(2007,9,2,1,0,0), -d(2008,4,6,0,0,0), -d(2008,9,7,1,0,0), -d(2009,4,5,0,0,0), -d(2009,9,6,1,0,0), -d(2010,4,4,0,0,0), -d(2010,9,5,1,0,0), -d(2011,4,3,0,0,0), -d(2011,9,4,1,0,0), -d(2012,4,1,0,0,0), -d(2012,9,2,1,0,0), -d(2013,4,7,0,0,0), -d(2013,9,1,1,0,0), -d(2014,4,6,0,0,0), -d(2014,9,7,1,0,0), -d(2015,4,5,0,0,0), -d(2015,9,6,1,0,0), -d(2016,4,3,0,0,0), -d(2016,9,4,1,0,0), -d(2017,4,2,0,0,0), -d(2017,9,3,1,0,0), -d(2018,4,1,0,0,0), -d(2018,9,2,1,0,0), -d(2019,4,7,0,0,0), -d(2019,9,1,1,0,0), -d(2020,4,5,0,0,0), -d(2020,9,6,1,0,0), -d(2021,4,4,0,0,0), -d(2021,9,5,1,0,0), -d(2022,4,3,0,0,0), -d(2022,9,4,1,0,0), -d(2023,4,2,0,0,0), -d(2023,9,3,1,0,0), -d(2024,4,7,0,0,0), -d(2024,9,1,1,0,0), -d(2025,4,6,0,0,0), -d(2025,9,7,1,0,0), -d(2026,4,5,0,0,0), -d(2026,9,6,1,0,0), -d(2027,4,4,0,0,0), -d(2027,9,5,1,0,0), -d(2028,4,2,0,0,0), -d(2028,9,3,1,0,0), -d(2029,4,1,0,0,0), -d(2029,9,2,1,0,0), -d(2030,4,7,0,0,0), -d(2030,9,1,1,0,0), -d(2031,4,6,0,0,0), -d(2031,9,7,1,0,0), -d(2032,4,4,0,0,0), -d(2032,9,5,1,0,0), -d(2033,4,3,0,0,0), -d(2033,9,4,1,0,0), -d(2034,4,2,0,0,0), -d(2034,9,3,1,0,0), -d(2035,4,1,0,0,0), -d(2035,9,2,1,0,0), -d(2036,4,6,0,0,0), -d(2036,9,7,1,0,0), -d(2037,4,5,0,0,0), -d(2037,9,6,1,0,0), - ] - - _transition_info = [ -i(5400,0,'SWAT'), -i(7200,0,'SAST'), -i(10800,3600,'SAST'), -i(7200,0,'SAST'), -i(7200,0,'CAT'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), -i(3600,0,'WAT'), -i(7200,3600,'WAST'), - ] - -Windhoek = Windhoek() - diff --git a/modules/pytz/zoneinfo/America/Adak.py b/modules/pytz/zoneinfo/America/Adak.py deleted file mode 100644 index 9748947b..00000000 --- a/modules/pytz/zoneinfo/America/Adak.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for America/Adak.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Adak(DstTzInfo): - '''America/Adak timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Adak' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,13,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,12,0,0), -d(1967,4,1,11,0,0), -d(1969,4,27,13,0,0), -d(1969,10,26,12,0,0), -d(1970,4,26,13,0,0), -d(1970,10,25,12,0,0), -d(1971,4,25,13,0,0), -d(1971,10,31,12,0,0), -d(1972,4,30,13,0,0), -d(1972,10,29,12,0,0), -d(1973,4,29,13,0,0), -d(1973,10,28,12,0,0), -d(1974,1,6,13,0,0), -d(1974,10,27,12,0,0), -d(1975,2,23,13,0,0), -d(1975,10,26,12,0,0), -d(1976,4,25,13,0,0), -d(1976,10,31,12,0,0), -d(1977,4,24,13,0,0), -d(1977,10,30,12,0,0), -d(1978,4,30,13,0,0), -d(1978,10,29,12,0,0), -d(1979,4,29,13,0,0), -d(1979,10,28,12,0,0), -d(1980,4,27,13,0,0), -d(1980,10,26,12,0,0), -d(1981,4,26,13,0,0), -d(1981,10,25,12,0,0), -d(1982,4,25,13,0,0), -d(1982,10,31,12,0,0), -d(1983,4,24,13,0,0), -d(1983,10,30,12,0,0), -d(1983,11,30,10,0,0), -d(1984,4,29,12,0,0), -d(1984,10,28,11,0,0), -d(1985,4,28,12,0,0), -d(1985,10,27,11,0,0), -d(1986,4,27,12,0,0), -d(1986,10,26,11,0,0), -d(1987,4,5,12,0,0), -d(1987,10,25,11,0,0), -d(1988,4,3,12,0,0), -d(1988,10,30,11,0,0), -d(1989,4,2,12,0,0), -d(1989,10,29,11,0,0), -d(1990,4,1,12,0,0), -d(1990,10,28,11,0,0), -d(1991,4,7,12,0,0), -d(1991,10,27,11,0,0), -d(1992,4,5,12,0,0), -d(1992,10,25,11,0,0), -d(1993,4,4,12,0,0), -d(1993,10,31,11,0,0), -d(1994,4,3,12,0,0), -d(1994,10,30,11,0,0), -d(1995,4,2,12,0,0), -d(1995,10,29,11,0,0), -d(1996,4,7,12,0,0), -d(1996,10,27,11,0,0), -d(1997,4,6,12,0,0), -d(1997,10,26,11,0,0), -d(1998,4,5,12,0,0), -d(1998,10,25,11,0,0), -d(1999,4,4,12,0,0), -d(1999,10,31,11,0,0), -d(2000,4,2,12,0,0), -d(2000,10,29,11,0,0), -d(2001,4,1,12,0,0), -d(2001,10,28,11,0,0), -d(2002,4,7,12,0,0), -d(2002,10,27,11,0,0), -d(2003,4,6,12,0,0), -d(2003,10,26,11,0,0), -d(2004,4,4,12,0,0), -d(2004,10,31,11,0,0), -d(2005,4,3,12,0,0), -d(2005,10,30,11,0,0), -d(2006,4,2,12,0,0), -d(2006,10,29,11,0,0), -d(2007,3,11,12,0,0), -d(2007,11,4,11,0,0), -d(2008,3,9,12,0,0), -d(2008,11,2,11,0,0), -d(2009,3,8,12,0,0), -d(2009,11,1,11,0,0), -d(2010,3,14,12,0,0), -d(2010,11,7,11,0,0), -d(2011,3,13,12,0,0), -d(2011,11,6,11,0,0), -d(2012,3,11,12,0,0), -d(2012,11,4,11,0,0), -d(2013,3,10,12,0,0), -d(2013,11,3,11,0,0), -d(2014,3,9,12,0,0), -d(2014,11,2,11,0,0), -d(2015,3,8,12,0,0), -d(2015,11,1,11,0,0), -d(2016,3,13,12,0,0), -d(2016,11,6,11,0,0), -d(2017,3,12,12,0,0), -d(2017,11,5,11,0,0), -d(2018,3,11,12,0,0), -d(2018,11,4,11,0,0), -d(2019,3,10,12,0,0), -d(2019,11,3,11,0,0), -d(2020,3,8,12,0,0), -d(2020,11,1,11,0,0), -d(2021,3,14,12,0,0), -d(2021,11,7,11,0,0), -d(2022,3,13,12,0,0), -d(2022,11,6,11,0,0), -d(2023,3,12,12,0,0), -d(2023,11,5,11,0,0), -d(2024,3,10,12,0,0), -d(2024,11,3,11,0,0), -d(2025,3,9,12,0,0), -d(2025,11,2,11,0,0), -d(2026,3,8,12,0,0), -d(2026,11,1,11,0,0), -d(2027,3,14,12,0,0), -d(2027,11,7,11,0,0), -d(2028,3,12,12,0,0), -d(2028,11,5,11,0,0), -d(2029,3,11,12,0,0), -d(2029,11,4,11,0,0), -d(2030,3,10,12,0,0), -d(2030,11,3,11,0,0), -d(2031,3,9,12,0,0), -d(2031,11,2,11,0,0), -d(2032,3,14,12,0,0), -d(2032,11,7,11,0,0), -d(2033,3,13,12,0,0), -d(2033,11,6,11,0,0), -d(2034,3,12,12,0,0), -d(2034,11,5,11,0,0), -d(2035,3,11,12,0,0), -d(2035,11,4,11,0,0), -d(2036,3,9,12,0,0), -d(2036,11,2,11,0,0), -d(2037,3,8,12,0,0), -d(2037,11,1,11,0,0), - ] - - _transition_info = [ -i(-39600,0,'NST'), -i(-36000,3600,'NWT'), -i(-36000,3600,'NPT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-36000,0,'AHST'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), - ] - -Adak = Adak() - diff --git a/modules/pytz/zoneinfo/America/Anchorage.py b/modules/pytz/zoneinfo/America/Anchorage.py deleted file mode 100644 index f36cd076..00000000 --- a/modules/pytz/zoneinfo/America/Anchorage.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for America/Anchorage.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Anchorage(DstTzInfo): - '''America/Anchorage timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Anchorage' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,12,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,11,0,0), -d(1967,4,1,10,0,0), -d(1969,4,27,12,0,0), -d(1969,10,26,11,0,0), -d(1970,4,26,12,0,0), -d(1970,10,25,11,0,0), -d(1971,4,25,12,0,0), -d(1971,10,31,11,0,0), -d(1972,4,30,12,0,0), -d(1972,10,29,11,0,0), -d(1973,4,29,12,0,0), -d(1973,10,28,11,0,0), -d(1974,1,6,12,0,0), -d(1974,10,27,11,0,0), -d(1975,2,23,12,0,0), -d(1975,10,26,11,0,0), -d(1976,4,25,12,0,0), -d(1976,10,31,11,0,0), -d(1977,4,24,12,0,0), -d(1977,10,30,11,0,0), -d(1978,4,30,12,0,0), -d(1978,10,29,11,0,0), -d(1979,4,29,12,0,0), -d(1979,10,28,11,0,0), -d(1980,4,27,12,0,0), -d(1980,10,26,11,0,0), -d(1981,4,26,12,0,0), -d(1981,10,25,11,0,0), -d(1982,4,25,12,0,0), -d(1982,10,31,11,0,0), -d(1983,4,24,12,0,0), -d(1983,10,30,11,0,0), -d(1983,11,30,9,0,0), -d(1984,4,29,11,0,0), -d(1984,10,28,10,0,0), -d(1985,4,28,11,0,0), -d(1985,10,27,10,0,0), -d(1986,4,27,11,0,0), -d(1986,10,26,10,0,0), -d(1987,4,5,11,0,0), -d(1987,10,25,10,0,0), -d(1988,4,3,11,0,0), -d(1988,10,30,10,0,0), -d(1989,4,2,11,0,0), -d(1989,10,29,10,0,0), -d(1990,4,1,11,0,0), -d(1990,10,28,10,0,0), -d(1991,4,7,11,0,0), -d(1991,10,27,10,0,0), -d(1992,4,5,11,0,0), -d(1992,10,25,10,0,0), -d(1993,4,4,11,0,0), -d(1993,10,31,10,0,0), -d(1994,4,3,11,0,0), -d(1994,10,30,10,0,0), -d(1995,4,2,11,0,0), -d(1995,10,29,10,0,0), -d(1996,4,7,11,0,0), -d(1996,10,27,10,0,0), -d(1997,4,6,11,0,0), -d(1997,10,26,10,0,0), -d(1998,4,5,11,0,0), -d(1998,10,25,10,0,0), -d(1999,4,4,11,0,0), -d(1999,10,31,10,0,0), -d(2000,4,2,11,0,0), -d(2000,10,29,10,0,0), -d(2001,4,1,11,0,0), -d(2001,10,28,10,0,0), -d(2002,4,7,11,0,0), -d(2002,10,27,10,0,0), -d(2003,4,6,11,0,0), -d(2003,10,26,10,0,0), -d(2004,4,4,11,0,0), -d(2004,10,31,10,0,0), -d(2005,4,3,11,0,0), -d(2005,10,30,10,0,0), -d(2006,4,2,11,0,0), -d(2006,10,29,10,0,0), -d(2007,3,11,11,0,0), -d(2007,11,4,10,0,0), -d(2008,3,9,11,0,0), -d(2008,11,2,10,0,0), -d(2009,3,8,11,0,0), -d(2009,11,1,10,0,0), -d(2010,3,14,11,0,0), -d(2010,11,7,10,0,0), -d(2011,3,13,11,0,0), -d(2011,11,6,10,0,0), -d(2012,3,11,11,0,0), -d(2012,11,4,10,0,0), -d(2013,3,10,11,0,0), -d(2013,11,3,10,0,0), -d(2014,3,9,11,0,0), -d(2014,11,2,10,0,0), -d(2015,3,8,11,0,0), -d(2015,11,1,10,0,0), -d(2016,3,13,11,0,0), -d(2016,11,6,10,0,0), -d(2017,3,12,11,0,0), -d(2017,11,5,10,0,0), -d(2018,3,11,11,0,0), -d(2018,11,4,10,0,0), -d(2019,3,10,11,0,0), -d(2019,11,3,10,0,0), -d(2020,3,8,11,0,0), -d(2020,11,1,10,0,0), -d(2021,3,14,11,0,0), -d(2021,11,7,10,0,0), -d(2022,3,13,11,0,0), -d(2022,11,6,10,0,0), -d(2023,3,12,11,0,0), -d(2023,11,5,10,0,0), -d(2024,3,10,11,0,0), -d(2024,11,3,10,0,0), -d(2025,3,9,11,0,0), -d(2025,11,2,10,0,0), -d(2026,3,8,11,0,0), -d(2026,11,1,10,0,0), -d(2027,3,14,11,0,0), -d(2027,11,7,10,0,0), -d(2028,3,12,11,0,0), -d(2028,11,5,10,0,0), -d(2029,3,11,11,0,0), -d(2029,11,4,10,0,0), -d(2030,3,10,11,0,0), -d(2030,11,3,10,0,0), -d(2031,3,9,11,0,0), -d(2031,11,2,10,0,0), -d(2032,3,14,11,0,0), -d(2032,11,7,10,0,0), -d(2033,3,13,11,0,0), -d(2033,11,6,10,0,0), -d(2034,3,12,11,0,0), -d(2034,11,5,10,0,0), -d(2035,3,11,11,0,0), -d(2035,11,4,10,0,0), -d(2036,3,9,11,0,0), -d(2036,11,2,10,0,0), -d(2037,3,8,11,0,0), -d(2037,11,1,10,0,0), - ] - - _transition_info = [ -i(-36000,0,'CAT'), -i(-32400,3600,'CAWT'), -i(-32400,3600,'CAWT'), -i(-36000,0,'CAT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-32400,0,'YST'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), - ] - -Anchorage = Anchorage() - diff --git a/modules/pytz/zoneinfo/America/Anguilla.py b/modules/pytz/zoneinfo/America/Anguilla.py deleted file mode 100644 index e72c84f8..00000000 --- a/modules/pytz/zoneinfo/America/Anguilla.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Anguilla.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Anguilla(DstTzInfo): - '''America/Anguilla timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Anguilla' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,2,4,12,16), - ] - - _transition_info = [ -i(-15120,0,'LMT'), -i(-14400,0,'AST'), - ] - -Anguilla = Anguilla() - diff --git a/modules/pytz/zoneinfo/America/Antigua.py b/modules/pytz/zoneinfo/America/Antigua.py deleted file mode 100644 index 7515f841..00000000 --- a/modules/pytz/zoneinfo/America/Antigua.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Antigua.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Antigua(DstTzInfo): - '''America/Antigua timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Antigua' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,2,4,7,12), -d(1951,1,1,5,0,0), - ] - - _transition_info = [ -i(-14820,0,'LMT'), -i(-18000,0,'EST'), -i(-14400,0,'AST'), - ] - -Antigua = Antigua() - diff --git a/modules/pytz/zoneinfo/America/Araguaina.py b/modules/pytz/zoneinfo/America/Araguaina.py deleted file mode 100644 index 60e69fa2..00000000 --- a/modules/pytz/zoneinfo/America/Araguaina.py +++ /dev/null @@ -1,118 +0,0 @@ -'''tzinfo timezone information for America/Araguaina.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Araguaina(DstTzInfo): - '''America/Araguaina timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Araguaina' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,12,48), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1995,10,15,3,0,0), -d(1996,2,11,2,0,0), -d(1996,10,6,3,0,0), -d(1997,2,16,2,0,0), -d(1997,10,6,3,0,0), -d(1998,3,1,2,0,0), -d(1998,10,11,3,0,0), -d(1999,2,21,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2001,2,18,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), -d(2002,11,3,3,0,0), -d(2003,2,16,2,0,0), - ] - - _transition_info = [ -i(-11580,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Araguaina = Araguaina() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Buenos_Aires.py b/modules/pytz/zoneinfo/America/Argentina/Buenos_Aires.py deleted file mode 100644 index 0862e0f6..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Buenos_Aires.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Buenos_Aires.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Buenos_Aires(DstTzInfo): - '''America/Argentina/Buenos_Aires timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Buenos_Aires' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Buenos_Aires = Buenos_Aires() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Catamarca.py b/modules/pytz/zoneinfo/America/Argentina/Catamarca.py deleted file mode 100644 index f12423a3..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Catamarca.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Catamarca.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Catamarca(DstTzInfo): - '''America/Argentina/Catamarca timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Catamarca' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Catamarca = Catamarca() - diff --git a/modules/pytz/zoneinfo/America/Argentina/ComodRivadavia.py b/modules/pytz/zoneinfo/America/Argentina/ComodRivadavia.py deleted file mode 100644 index 12a1e871..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/ComodRivadavia.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/ComodRivadavia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class ComodRivadavia(DstTzInfo): - '''America/Argentina/ComodRivadavia timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/ComodRivadavia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -ComodRivadavia = ComodRivadavia() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Cordoba.py b/modules/pytz/zoneinfo/America/Argentina/Cordoba.py deleted file mode 100644 index c880297a..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Cordoba.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Cordoba.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cordoba(DstTzInfo): - '''America/Argentina/Cordoba timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Cordoba' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Cordoba = Cordoba() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Jujuy.py b/modules/pytz/zoneinfo/America/Argentina/Jujuy.py deleted file mode 100644 index b6fe1dd3..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Jujuy.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Jujuy.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jujuy(DstTzInfo): - '''America/Argentina/Jujuy timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Jujuy' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,28,4,0,0), -d(1991,3,17,3,0,0), -d(1991,10,6,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Jujuy = Jujuy() - diff --git a/modules/pytz/zoneinfo/America/Argentina/La_Rioja.py b/modules/pytz/zoneinfo/America/Argentina/La_Rioja.py deleted file mode 100644 index 548dd2f2..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/La_Rioja.py +++ /dev/null @@ -1,138 +0,0 @@ -'''tzinfo timezone information for America/Argentina/La_Rioja.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class La_Rioja(DstTzInfo): - '''America/Argentina/La_Rioja timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/La_Rioja' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,1,2,0,0), -d(1991,5,7,4,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -La_Rioja = La_Rioja() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Mendoza.py b/modules/pytz/zoneinfo/America/Argentina/Mendoza.py deleted file mode 100644 index e699aa9d..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Mendoza.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Mendoza.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mendoza(DstTzInfo): - '''America/Argentina/Mendoza timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Mendoza' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,15,4,0,0), -d(1991,3,1,3,0,0), -d(1991,10,15,4,0,0), -d(1992,3,1,3,0,0), -d(1992,10,18,4,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,5,23,3,0,0), -d(2004,9,26,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Mendoza = Mendoza() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Rio_Gallegos.py b/modules/pytz/zoneinfo/America/Argentina/Rio_Gallegos.py deleted file mode 100644 index 2c234469..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Rio_Gallegos.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Rio_Gallegos.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rio_Gallegos(DstTzInfo): - '''America/Argentina/Rio_Gallegos timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Rio_Gallegos' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Rio_Gallegos = Rio_Gallegos() - diff --git a/modules/pytz/zoneinfo/America/Argentina/San_Juan.py b/modules/pytz/zoneinfo/America/Argentina/San_Juan.py deleted file mode 100644 index cce3e874..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/San_Juan.py +++ /dev/null @@ -1,138 +0,0 @@ -'''tzinfo timezone information for America/Argentina/San_Juan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class San_Juan(DstTzInfo): - '''America/Argentina/San_Juan timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/San_Juan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,1,2,0,0), -d(1991,5,7,4,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,5,31,3,0,0), -d(2004,7,25,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -San_Juan = San_Juan() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Tucuman.py b/modules/pytz/zoneinfo/America/Argentina/Tucuman.py deleted file mode 100644 index 093eeaa7..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Tucuman.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Tucuman.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tucuman(DstTzInfo): - '''America/Argentina/Tucuman timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Tucuman' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,13,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Tucuman = Tucuman() - diff --git a/modules/pytz/zoneinfo/America/Argentina/Ushuaia.py b/modules/pytz/zoneinfo/America/Argentina/Ushuaia.py deleted file mode 100644 index 37e681c8..00000000 --- a/modules/pytz/zoneinfo/America/Argentina/Ushuaia.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Argentina/Ushuaia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ushuaia(DstTzInfo): - '''America/Argentina/Ushuaia timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Argentina/Ushuaia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,5,30,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Ushuaia = Ushuaia() - diff --git a/modules/pytz/zoneinfo/America/Aruba.py b/modules/pytz/zoneinfo/America/Aruba.py deleted file mode 100644 index 6f7afb01..00000000 --- a/modules/pytz/zoneinfo/America/Aruba.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Aruba.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Aruba(DstTzInfo): - '''America/Aruba timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Aruba' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,12,4,40,24), -d(1965,1,1,4,30,0), - ] - - _transition_info = [ -i(-16800,0,'LMT'), -i(-16200,0,'ANT'), -i(-14400,0,'AST'), - ] - -Aruba = Aruba() - diff --git a/modules/pytz/zoneinfo/America/Asuncion.py b/modules/pytz/zoneinfo/America/Asuncion.py deleted file mode 100644 index 472182dd..00000000 --- a/modules/pytz/zoneinfo/America/Asuncion.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for America/Asuncion.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Asuncion(DstTzInfo): - '''America/Asuncion timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Asuncion' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1931,10,10,3,50,40), -d(1972,10,1,4,0,0), -d(1974,4,1,3,0,0), -d(1975,10,1,4,0,0), -d(1976,3,1,3,0,0), -d(1976,10,1,4,0,0), -d(1977,3,1,3,0,0), -d(1977,10,1,4,0,0), -d(1978,3,1,3,0,0), -d(1978,10,1,4,0,0), -d(1979,4,1,3,0,0), -d(1979,10,1,4,0,0), -d(1980,4,1,3,0,0), -d(1980,10,1,4,0,0), -d(1981,4,1,3,0,0), -d(1981,10,1,4,0,0), -d(1982,4,1,3,0,0), -d(1982,10,1,4,0,0), -d(1983,4,1,3,0,0), -d(1983,10,1,4,0,0), -d(1984,4,1,3,0,0), -d(1984,10,1,4,0,0), -d(1985,4,1,3,0,0), -d(1985,10,1,4,0,0), -d(1986,4,1,3,0,0), -d(1986,10,1,4,0,0), -d(1987,4,1,3,0,0), -d(1987,10,1,4,0,0), -d(1988,4,1,3,0,0), -d(1988,10,1,4,0,0), -d(1989,4,1,3,0,0), -d(1989,10,22,4,0,0), -d(1990,4,1,3,0,0), -d(1990,10,1,4,0,0), -d(1991,4,1,3,0,0), -d(1991,10,6,4,0,0), -d(1992,3,1,3,0,0), -d(1992,10,5,4,0,0), -d(1993,3,31,3,0,0), -d(1993,10,1,4,0,0), -d(1994,2,27,3,0,0), -d(1994,10,1,4,0,0), -d(1995,2,26,3,0,0), -d(1995,10,1,4,0,0), -d(1996,3,1,3,0,0), -d(1996,10,6,4,0,0), -d(1997,2,23,3,0,0), -d(1997,10,5,4,0,0), -d(1998,3,1,3,0,0), -d(1998,10,4,4,0,0), -d(1999,3,7,3,0,0), -d(1999,10,3,4,0,0), -d(2000,3,5,3,0,0), -d(2000,10,1,4,0,0), -d(2001,3,4,3,0,0), -d(2001,10,7,4,0,0), -d(2002,4,7,3,0,0), -d(2002,9,1,4,0,0), -d(2003,4,6,3,0,0), -d(2003,9,7,4,0,0), -d(2004,4,4,3,0,0), -d(2004,10,17,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,16,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,21,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,19,4,0,0), -d(2009,3,8,3,0,0), -d(2009,10,18,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,17,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,16,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,21,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,20,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,19,4,0,0), -d(2015,3,8,3,0,0), -d(2015,10,18,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,16,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,21,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,20,4,0,0), -d(2020,3,8,3,0,0), -d(2020,10,18,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,17,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,16,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,20,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,19,4,0,0), -d(2026,3,8,3,0,0), -d(2026,10,18,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,17,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,21,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,20,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,19,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,17,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,16,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,21,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,19,4,0,0), -d(2037,3,8,3,0,0), -d(2037,10,18,4,0,0), - ] - - _transition_info = [ -i(-13860,0,'AMT'), -i(-14400,0,'PYT'), -i(-10800,0,'PYT'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), -i(-14400,0,'PYT'), -i(-10800,3600,'PYST'), - ] - -Asuncion = Asuncion() - diff --git a/modules/pytz/zoneinfo/America/Atka.py b/modules/pytz/zoneinfo/America/Atka.py deleted file mode 100644 index ab5d0dcb..00000000 --- a/modules/pytz/zoneinfo/America/Atka.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for America/Atka.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Atka(DstTzInfo): - '''America/Atka timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Atka' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,13,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,12,0,0), -d(1967,4,1,11,0,0), -d(1969,4,27,13,0,0), -d(1969,10,26,12,0,0), -d(1970,4,26,13,0,0), -d(1970,10,25,12,0,0), -d(1971,4,25,13,0,0), -d(1971,10,31,12,0,0), -d(1972,4,30,13,0,0), -d(1972,10,29,12,0,0), -d(1973,4,29,13,0,0), -d(1973,10,28,12,0,0), -d(1974,1,6,13,0,0), -d(1974,10,27,12,0,0), -d(1975,2,23,13,0,0), -d(1975,10,26,12,0,0), -d(1976,4,25,13,0,0), -d(1976,10,31,12,0,0), -d(1977,4,24,13,0,0), -d(1977,10,30,12,0,0), -d(1978,4,30,13,0,0), -d(1978,10,29,12,0,0), -d(1979,4,29,13,0,0), -d(1979,10,28,12,0,0), -d(1980,4,27,13,0,0), -d(1980,10,26,12,0,0), -d(1981,4,26,13,0,0), -d(1981,10,25,12,0,0), -d(1982,4,25,13,0,0), -d(1982,10,31,12,0,0), -d(1983,4,24,13,0,0), -d(1983,10,30,12,0,0), -d(1983,11,30,10,0,0), -d(1984,4,29,12,0,0), -d(1984,10,28,11,0,0), -d(1985,4,28,12,0,0), -d(1985,10,27,11,0,0), -d(1986,4,27,12,0,0), -d(1986,10,26,11,0,0), -d(1987,4,5,12,0,0), -d(1987,10,25,11,0,0), -d(1988,4,3,12,0,0), -d(1988,10,30,11,0,0), -d(1989,4,2,12,0,0), -d(1989,10,29,11,0,0), -d(1990,4,1,12,0,0), -d(1990,10,28,11,0,0), -d(1991,4,7,12,0,0), -d(1991,10,27,11,0,0), -d(1992,4,5,12,0,0), -d(1992,10,25,11,0,0), -d(1993,4,4,12,0,0), -d(1993,10,31,11,0,0), -d(1994,4,3,12,0,0), -d(1994,10,30,11,0,0), -d(1995,4,2,12,0,0), -d(1995,10,29,11,0,0), -d(1996,4,7,12,0,0), -d(1996,10,27,11,0,0), -d(1997,4,6,12,0,0), -d(1997,10,26,11,0,0), -d(1998,4,5,12,0,0), -d(1998,10,25,11,0,0), -d(1999,4,4,12,0,0), -d(1999,10,31,11,0,0), -d(2000,4,2,12,0,0), -d(2000,10,29,11,0,0), -d(2001,4,1,12,0,0), -d(2001,10,28,11,0,0), -d(2002,4,7,12,0,0), -d(2002,10,27,11,0,0), -d(2003,4,6,12,0,0), -d(2003,10,26,11,0,0), -d(2004,4,4,12,0,0), -d(2004,10,31,11,0,0), -d(2005,4,3,12,0,0), -d(2005,10,30,11,0,0), -d(2006,4,2,12,0,0), -d(2006,10,29,11,0,0), -d(2007,3,11,12,0,0), -d(2007,11,4,11,0,0), -d(2008,3,9,12,0,0), -d(2008,11,2,11,0,0), -d(2009,3,8,12,0,0), -d(2009,11,1,11,0,0), -d(2010,3,14,12,0,0), -d(2010,11,7,11,0,0), -d(2011,3,13,12,0,0), -d(2011,11,6,11,0,0), -d(2012,3,11,12,0,0), -d(2012,11,4,11,0,0), -d(2013,3,10,12,0,0), -d(2013,11,3,11,0,0), -d(2014,3,9,12,0,0), -d(2014,11,2,11,0,0), -d(2015,3,8,12,0,0), -d(2015,11,1,11,0,0), -d(2016,3,13,12,0,0), -d(2016,11,6,11,0,0), -d(2017,3,12,12,0,0), -d(2017,11,5,11,0,0), -d(2018,3,11,12,0,0), -d(2018,11,4,11,0,0), -d(2019,3,10,12,0,0), -d(2019,11,3,11,0,0), -d(2020,3,8,12,0,0), -d(2020,11,1,11,0,0), -d(2021,3,14,12,0,0), -d(2021,11,7,11,0,0), -d(2022,3,13,12,0,0), -d(2022,11,6,11,0,0), -d(2023,3,12,12,0,0), -d(2023,11,5,11,0,0), -d(2024,3,10,12,0,0), -d(2024,11,3,11,0,0), -d(2025,3,9,12,0,0), -d(2025,11,2,11,0,0), -d(2026,3,8,12,0,0), -d(2026,11,1,11,0,0), -d(2027,3,14,12,0,0), -d(2027,11,7,11,0,0), -d(2028,3,12,12,0,0), -d(2028,11,5,11,0,0), -d(2029,3,11,12,0,0), -d(2029,11,4,11,0,0), -d(2030,3,10,12,0,0), -d(2030,11,3,11,0,0), -d(2031,3,9,12,0,0), -d(2031,11,2,11,0,0), -d(2032,3,14,12,0,0), -d(2032,11,7,11,0,0), -d(2033,3,13,12,0,0), -d(2033,11,6,11,0,0), -d(2034,3,12,12,0,0), -d(2034,11,5,11,0,0), -d(2035,3,11,12,0,0), -d(2035,11,4,11,0,0), -d(2036,3,9,12,0,0), -d(2036,11,2,11,0,0), -d(2037,3,8,12,0,0), -d(2037,11,1,11,0,0), - ] - - _transition_info = [ -i(-39600,0,'NST'), -i(-36000,3600,'NWT'), -i(-36000,3600,'NPT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-36000,0,'AHST'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), - ] - -Atka = Atka() - diff --git a/modules/pytz/zoneinfo/America/Bahia.py b/modules/pytz/zoneinfo/America/Bahia.py deleted file mode 100644 index 5d4d5c5d..00000000 --- a/modules/pytz/zoneinfo/America/Bahia.py +++ /dev/null @@ -1,138 +0,0 @@ -'''tzinfo timezone information for America/Bahia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bahia(DstTzInfo): - '''America/Bahia timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Bahia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,34,4), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1990,10,21,3,0,0), -d(1991,2,17,2,0,0), -d(1991,10,20,3,0,0), -d(1992,2,9,2,0,0), -d(1992,10,25,3,0,0), -d(1993,1,31,2,0,0), -d(1993,10,17,3,0,0), -d(1994,2,20,2,0,0), -d(1994,10,16,3,0,0), -d(1995,2,19,2,0,0), -d(1995,10,15,3,0,0), -d(1996,2,11,2,0,0), -d(1996,10,6,3,0,0), -d(1997,2,16,2,0,0), -d(1997,10,6,3,0,0), -d(1998,3,1,2,0,0), -d(1998,10,11,3,0,0), -d(1999,2,21,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2001,2,18,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), -d(2002,11,3,3,0,0), -d(2003,2,16,2,0,0), - ] - - _transition_info = [ -i(-9240,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Bahia = Bahia() - diff --git a/modules/pytz/zoneinfo/America/Barbados.py b/modules/pytz/zoneinfo/America/Barbados.py deleted file mode 100644 index 97ba8c65..00000000 --- a/modules/pytz/zoneinfo/America/Barbados.py +++ /dev/null @@ -1,40 +0,0 @@ -'''tzinfo timezone information for America/Barbados.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Barbados(DstTzInfo): - '''America/Barbados timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Barbados' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,1,1,3,58,28), -d(1932,1,1,3,58,28), -d(1977,6,12,6,0,0), -d(1977,10,2,5,0,0), -d(1978,4,16,6,0,0), -d(1978,10,1,5,0,0), -d(1979,4,15,6,0,0), -d(1979,9,30,5,0,0), -d(1980,4,20,6,0,0), -d(1980,9,25,5,0,0), - ] - - _transition_info = [ -i(-14280,0,'LMT'), -i(-14280,0,'BMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Barbados = Barbados() - diff --git a/modules/pytz/zoneinfo/America/Belem.py b/modules/pytz/zoneinfo/America/Belem.py deleted file mode 100644 index f35f1999..00000000 --- a/modules/pytz/zoneinfo/America/Belem.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for America/Belem.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Belem(DstTzInfo): - '''America/Belem timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Belem' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,13,56), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), - ] - - _transition_info = [ -i(-11640,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Belem = Belem() - diff --git a/modules/pytz/zoneinfo/America/Belize.py b/modules/pytz/zoneinfo/America/Belize.py deleted file mode 100644 index 8f599331..00000000 --- a/modules/pytz/zoneinfo/America/Belize.py +++ /dev/null @@ -1,130 +0,0 @@ -'''tzinfo timezone information for America/Belize.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Belize(DstTzInfo): - '''America/Belize timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Belize' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,4,1,5,52,48), -d(1918,10,6,6,0,0), -d(1919,2,9,5,30,0), -d(1919,10,5,6,0,0), -d(1920,2,15,5,30,0), -d(1920,10,3,6,0,0), -d(1921,2,13,5,30,0), -d(1921,10,2,6,0,0), -d(1922,2,12,5,30,0), -d(1922,10,8,6,0,0), -d(1923,2,11,5,30,0), -d(1923,10,7,6,0,0), -d(1924,2,10,5,30,0), -d(1924,10,5,6,0,0), -d(1925,2,15,5,30,0), -d(1925,10,4,6,0,0), -d(1926,2,14,5,30,0), -d(1926,10,3,6,0,0), -d(1927,2,13,5,30,0), -d(1927,10,2,6,0,0), -d(1928,2,12,5,30,0), -d(1928,10,7,6,0,0), -d(1929,2,10,5,30,0), -d(1929,10,6,6,0,0), -d(1930,2,9,5,30,0), -d(1930,10,5,6,0,0), -d(1931,2,15,5,30,0), -d(1931,10,4,6,0,0), -d(1932,2,14,5,30,0), -d(1932,10,2,6,0,0), -d(1933,2,12,5,30,0), -d(1933,10,8,6,0,0), -d(1934,2,11,5,30,0), -d(1934,10,7,6,0,0), -d(1935,2,10,5,30,0), -d(1935,10,6,6,0,0), -d(1936,2,9,5,30,0), -d(1936,10,4,6,0,0), -d(1937,2,14,5,30,0), -d(1937,10,3,6,0,0), -d(1938,2,13,5,30,0), -d(1938,10,2,6,0,0), -d(1939,2,12,5,30,0), -d(1939,10,8,6,0,0), -d(1940,2,11,5,30,0), -d(1940,10,6,6,0,0), -d(1941,2,9,5,30,0), -d(1941,10,5,6,0,0), -d(1942,2,15,5,30,0), -d(1942,10,4,6,0,0), -d(1943,2,14,5,30,0), -d(1973,12,5,6,0,0), -d(1974,2,9,5,0,0), -d(1982,12,18,6,0,0), -d(1983,2,12,5,0,0), - ] - - _transition_info = [ -i(-21180,0,'LMT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-19800,1800,'CHDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Belize = Belize() - diff --git a/modules/pytz/zoneinfo/America/Boa_Vista.py b/modules/pytz/zoneinfo/America/Boa_Vista.py deleted file mode 100644 index f533ae97..00000000 --- a/modules/pytz/zoneinfo/America/Boa_Vista.py +++ /dev/null @@ -1,86 +0,0 @@ -'''tzinfo timezone information for America/Boa_Vista.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Boa_Vista(DstTzInfo): - '''America/Boa_Vista timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Boa_Vista' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,2,40), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), -d(1999,10,3,4,0,0), -d(2000,2,27,3,0,0), -d(2000,10,8,4,0,0), -d(2000,10,15,3,0,0), - ] - - _transition_info = [ -i(-14580,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), - ] - -Boa_Vista = Boa_Vista() - diff --git a/modules/pytz/zoneinfo/America/Bogota.py b/modules/pytz/zoneinfo/America/Bogota.py deleted file mode 100644 index 61fa1aa0..00000000 --- a/modules/pytz/zoneinfo/America/Bogota.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for America/Bogota.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bogota(DstTzInfo): - '''America/Bogota timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Bogota' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,11,23,4,56,20), -d(1992,5,2,5,0,0), -d(1992,12,31,4,0,0), - ] - - _transition_info = [ -i(-17760,0,'BMT'), -i(-18000,0,'COT'), -i(-14400,3600,'COST'), -i(-18000,0,'COT'), - ] - -Bogota = Bogota() - diff --git a/modules/pytz/zoneinfo/America/Boise.py b/modules/pytz/zoneinfo/America/Boise.py deleted file mode 100644 index ed619370..00000000 --- a/modules/pytz/zoneinfo/America/Boise.py +++ /dev/null @@ -1,320 +0,0 @@ -'''tzinfo timezone information for America/Boise.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Boise(DstTzInfo): - '''America/Boise timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Boise' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,10,0,0), -d(1918,10,27,9,0,0), -d(1919,3,30,10,0,0), -d(1919,10,26,9,0,0), -d(1923,5,13,10,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,2,3,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Boise = Boise() - diff --git a/modules/pytz/zoneinfo/America/Buenos_Aires.py b/modules/pytz/zoneinfo/America/Buenos_Aires.py deleted file mode 100644 index 2a457607..00000000 --- a/modules/pytz/zoneinfo/America/Buenos_Aires.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Buenos_Aires.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Buenos_Aires(DstTzInfo): - '''America/Buenos_Aires timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Buenos_Aires' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Buenos_Aires = Buenos_Aires() - diff --git a/modules/pytz/zoneinfo/America/Cambridge_Bay.py b/modules/pytz/zoneinfo/America/Cambridge_Bay.py deleted file mode 100644 index ce1d6db0..00000000 --- a/modules/pytz/zoneinfo/America/Cambridge_Bay.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for America/Cambridge_Bay.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cambridge_Bay(DstTzInfo): - '''America/Cambridge_Bay timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cambridge_Bay' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,9,0,0), -d(1918,10,27,8,0,0), -d(1919,5,25,9,0,0), -d(1919,11,1,6,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,7,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2000,11,5,5,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-18000,7200,'MDDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-21600,0,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Cambridge_Bay = Cambridge_Bay() - diff --git a/modules/pytz/zoneinfo/America/Campo_Grande.py b/modules/pytz/zoneinfo/America/Campo_Grande.py deleted file mode 100644 index 500b220f..00000000 --- a/modules/pytz/zoneinfo/America/Campo_Grande.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for America/Campo_Grande.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Campo_Grande(DstTzInfo): - '''America/Campo_Grande timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Campo_Grande' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,38,28), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), -d(1988,10,16,4,0,0), -d(1989,1,29,3,0,0), -d(1989,10,15,4,0,0), -d(1990,2,11,3,0,0), -d(1990,10,21,4,0,0), -d(1991,2,17,3,0,0), -d(1991,10,20,4,0,0), -d(1992,2,9,3,0,0), -d(1992,10,25,4,0,0), -d(1993,1,31,3,0,0), -d(1993,10,17,4,0,0), -d(1994,2,20,3,0,0), -d(1994,10,16,4,0,0), -d(1995,2,19,3,0,0), -d(1995,10,15,4,0,0), -d(1996,2,11,3,0,0), -d(1996,10,6,4,0,0), -d(1997,2,16,3,0,0), -d(1997,10,6,4,0,0), -d(1998,3,1,3,0,0), -d(1998,10,11,4,0,0), -d(1999,2,21,3,0,0), -d(1999,10,3,4,0,0), -d(2000,2,27,3,0,0), -d(2000,10,8,4,0,0), -d(2001,2,18,3,0,0), -d(2001,10,14,4,0,0), -d(2002,2,17,3,0,0), -d(2002,11,3,4,0,0), -d(2003,2,16,3,0,0), -d(2003,10,19,4,0,0), -d(2004,2,15,3,0,0), -d(2004,11,2,4,0,0), -d(2005,2,20,3,0,0), -d(2005,10,16,4,0,0), -d(2006,2,19,3,0,0), -d(2006,10,15,4,0,0), -d(2007,2,18,3,0,0), -d(2007,10,21,4,0,0), -d(2008,2,17,3,0,0), -d(2008,10,19,4,0,0), -d(2009,2,15,3,0,0), -d(2009,10,18,4,0,0), -d(2010,2,21,3,0,0), -d(2010,10,17,4,0,0), -d(2011,2,20,3,0,0), -d(2011,10,16,4,0,0), -d(2012,2,19,3,0,0), -d(2012,10,21,4,0,0), -d(2013,2,17,3,0,0), -d(2013,10,20,4,0,0), -d(2014,2,16,3,0,0), -d(2014,10,19,4,0,0), -d(2015,2,15,3,0,0), -d(2015,10,18,4,0,0), -d(2016,2,21,3,0,0), -d(2016,10,16,4,0,0), -d(2017,2,19,3,0,0), -d(2017,10,15,4,0,0), -d(2018,2,18,3,0,0), -d(2018,10,21,4,0,0), -d(2019,2,17,3,0,0), -d(2019,10,20,4,0,0), -d(2020,2,16,3,0,0), -d(2020,10,18,4,0,0), -d(2021,2,21,3,0,0), -d(2021,10,17,4,0,0), -d(2022,2,20,3,0,0), -d(2022,10,16,4,0,0), -d(2023,2,19,3,0,0), -d(2023,10,15,4,0,0), -d(2024,2,18,3,0,0), -d(2024,10,20,4,0,0), -d(2025,2,16,3,0,0), -d(2025,10,19,4,0,0), -d(2026,2,15,3,0,0), -d(2026,10,18,4,0,0), -d(2027,2,21,3,0,0), -d(2027,10,17,4,0,0), -d(2028,2,20,3,0,0), -d(2028,10,15,4,0,0), -d(2029,2,18,3,0,0), -d(2029,10,21,4,0,0), -d(2030,2,17,3,0,0), -d(2030,10,20,4,0,0), -d(2031,2,16,3,0,0), -d(2031,10,19,4,0,0), -d(2032,2,15,3,0,0), -d(2032,10,17,4,0,0), -d(2033,2,20,3,0,0), -d(2033,10,16,4,0,0), -d(2034,2,19,3,0,0), -d(2034,10,15,4,0,0), -d(2035,2,18,3,0,0), -d(2035,10,21,4,0,0), -d(2036,2,17,3,0,0), -d(2036,10,19,4,0,0), -d(2037,2,15,3,0,0), -d(2037,10,18,4,0,0), - ] - - _transition_info = [ -i(-13080,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), - ] - -Campo_Grande = Campo_Grande() - diff --git a/modules/pytz/zoneinfo/America/Cancun.py b/modules/pytz/zoneinfo/America/Cancun.py deleted file mode 100644 index 75c04155..00000000 --- a/modules/pytz/zoneinfo/America/Cancun.py +++ /dev/null @@ -1,194 +0,0 @@ -'''tzinfo timezone information for America/Cancun.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cancun(DstTzInfo): - '''America/Cancun timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cancun' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,6,0,0), -d(1981,12,23,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,8,2,6,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,5,6,8,0,0), -d(2001,9,30,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,4,1,8,0,0), -d(2007,10,28,7,0,0), -d(2008,4,6,8,0,0), -d(2008,10,26,7,0,0), -d(2009,4,5,8,0,0), -d(2009,10,25,7,0,0), -d(2010,4,4,8,0,0), -d(2010,10,31,7,0,0), -d(2011,4,3,8,0,0), -d(2011,10,30,7,0,0), -d(2012,4,1,8,0,0), -d(2012,10,28,7,0,0), -d(2013,4,7,8,0,0), -d(2013,10,27,7,0,0), -d(2014,4,6,8,0,0), -d(2014,10,26,7,0,0), -d(2015,4,5,8,0,0), -d(2015,10,25,7,0,0), -d(2016,4,3,8,0,0), -d(2016,10,30,7,0,0), -d(2017,4,2,8,0,0), -d(2017,10,29,7,0,0), -d(2018,4,1,8,0,0), -d(2018,10,28,7,0,0), -d(2019,4,7,8,0,0), -d(2019,10,27,7,0,0), -d(2020,4,5,8,0,0), -d(2020,10,25,7,0,0), -d(2021,4,4,8,0,0), -d(2021,10,31,7,0,0), -d(2022,4,3,8,0,0), -d(2022,10,30,7,0,0), -d(2023,4,2,8,0,0), -d(2023,10,29,7,0,0), -d(2024,4,7,8,0,0), -d(2024,10,27,7,0,0), -d(2025,4,6,8,0,0), -d(2025,10,26,7,0,0), -d(2026,4,5,8,0,0), -d(2026,10,25,7,0,0), -d(2027,4,4,8,0,0), -d(2027,10,31,7,0,0), -d(2028,4,2,8,0,0), -d(2028,10,29,7,0,0), -d(2029,4,1,8,0,0), -d(2029,10,28,7,0,0), -d(2030,4,7,8,0,0), -d(2030,10,27,7,0,0), -d(2031,4,6,8,0,0), -d(2031,10,26,7,0,0), -d(2032,4,4,8,0,0), -d(2032,10,31,7,0,0), -d(2033,4,3,8,0,0), -d(2033,10,30,7,0,0), -d(2034,4,2,8,0,0), -d(2034,10,29,7,0,0), -d(2035,4,1,8,0,0), -d(2035,10,28,7,0,0), -d(2036,4,6,8,0,0), -d(2036,10,26,7,0,0), -d(2037,4,5,8,0,0), -d(2037,10,25,7,0,0), - ] - - _transition_info = [ -i(-20820,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Cancun = Cancun() - diff --git a/modules/pytz/zoneinfo/America/Caracas.py b/modules/pytz/zoneinfo/America/Caracas.py deleted file mode 100644 index 7d6276c3..00000000 --- a/modules/pytz/zoneinfo/America/Caracas.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Caracas.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Caracas(DstTzInfo): - '''America/Caracas timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Caracas' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,12,4,27,40), -d(1965,1,1,4,30,0), - ] - - _transition_info = [ -i(-16080,0,'CMT'), -i(-16200,0,'VET'), -i(-14400,0,'VET'), - ] - -Caracas = Caracas() - diff --git a/modules/pytz/zoneinfo/America/Catamarca.py b/modules/pytz/zoneinfo/America/Catamarca.py deleted file mode 100644 index 857a1870..00000000 --- a/modules/pytz/zoneinfo/America/Catamarca.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Catamarca.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Catamarca(DstTzInfo): - '''America/Catamarca timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Catamarca' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,6,1,3,0,0), -d(2004,6,20,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Catamarca = Catamarca() - diff --git a/modules/pytz/zoneinfo/America/Cayenne.py b/modules/pytz/zoneinfo/America/Cayenne.py deleted file mode 100644 index d20a6edd..00000000 --- a/modules/pytz/zoneinfo/America/Cayenne.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Cayenne.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cayenne(DstTzInfo): - '''America/Cayenne timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cayenne' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,3,29,20), -d(1967,10,1,4,0,0), - ] - - _transition_info = [ -i(-12540,0,'LMT'), -i(-14400,0,'GFT'), -i(-10800,0,'GFT'), - ] - -Cayenne = Cayenne() - diff --git a/modules/pytz/zoneinfo/America/Cayman.py b/modules/pytz/zoneinfo/America/Cayman.py deleted file mode 100644 index 96c1ffea..00000000 --- a/modules/pytz/zoneinfo/America/Cayman.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Cayman.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cayman(DstTzInfo): - '''America/Cayman timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cayman' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,1,5,7,12), - ] - - _transition_info = [ -i(-18420,0,'KMT'), -i(-18000,0,'EST'), - ] - -Cayman = Cayman() - diff --git a/modules/pytz/zoneinfo/America/Chicago.py b/modules/pytz/zoneinfo/America/Chicago.py deleted file mode 100644 index d1043045..00000000 --- a/modules/pytz/zoneinfo/America/Chicago.py +++ /dev/null @@ -1,490 +0,0 @@ -'''tzinfo timezone information for America/Chicago.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chicago(DstTzInfo): - '''America/Chicago timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Chicago' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1920,6,13,8,0,0), -d(1920,10,31,7,0,0), -d(1921,3,27,8,0,0), -d(1921,10,30,7,0,0), -d(1922,4,30,8,0,0), -d(1922,9,24,7,0,0), -d(1923,4,29,8,0,0), -d(1923,9,30,7,0,0), -d(1924,4,27,8,0,0), -d(1924,9,28,7,0,0), -d(1925,4,26,8,0,0), -d(1925,9,27,7,0,0), -d(1926,4,25,8,0,0), -d(1926,9,26,7,0,0), -d(1927,4,24,8,0,0), -d(1927,9,25,7,0,0), -d(1928,4,29,8,0,0), -d(1928,9,30,7,0,0), -d(1929,4,28,8,0,0), -d(1929,9,29,7,0,0), -d(1930,4,27,8,0,0), -d(1930,9,28,7,0,0), -d(1931,4,26,8,0,0), -d(1931,9,27,7,0,0), -d(1932,4,24,8,0,0), -d(1932,9,25,7,0,0), -d(1933,4,30,8,0,0), -d(1933,9,24,7,0,0), -d(1934,4,29,8,0,0), -d(1934,9,30,7,0,0), -d(1935,4,28,8,0,0), -d(1935,9,29,7,0,0), -d(1936,3,1,8,0,0), -d(1936,11,15,7,0,0), -d(1937,4,25,8,0,0), -d(1937,9,26,7,0,0), -d(1938,4,24,8,0,0), -d(1938,9,25,7,0,0), -d(1939,4,30,8,0,0), -d(1939,9,24,7,0,0), -d(1940,4,28,8,0,0), -d(1940,9,29,7,0,0), -d(1941,4,27,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,10,30,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,10,27,7,0,0), -d(1958,4,27,8,0,0), -d(1958,10,26,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,10,29,7,0,0), -d(1962,4,29,8,0,0), -d(1962,10,28,7,0,0), -d(1963,4,28,8,0,0), -d(1963,10,27,7,0,0), -d(1964,4,26,8,0,0), -d(1964,10,25,7,0,0), -d(1965,4,25,8,0,0), -d(1965,10,31,7,0,0), -d(1966,4,24,8,0,0), -d(1966,10,30,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Chicago = Chicago() - diff --git a/modules/pytz/zoneinfo/America/Chihuahua.py b/modules/pytz/zoneinfo/America/Chihuahua.py deleted file mode 100644 index b50fc998..00000000 --- a/modules/pytz/zoneinfo/America/Chihuahua.py +++ /dev/null @@ -1,200 +0,0 @@ -'''tzinfo timezone information for America/Chihuahua.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chihuahua(DstTzInfo): - '''America/Chihuahua timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Chihuahua' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,5,6,9,0,0), -d(2001,9,30,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-25440,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-21600,0,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Chihuahua = Chihuahua() - diff --git a/modules/pytz/zoneinfo/America/Coral_Harbour.py b/modules/pytz/zoneinfo/America/Coral_Harbour.py deleted file mode 100644 index 5eb3b06d..00000000 --- a/modules/pytz/zoneinfo/America/Coral_Harbour.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for America/Coral_Harbour.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Coral_Harbour(DstTzInfo): - '''America/Coral_Harbour timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Coral_Harbour' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,7,0,0), -d(1918,10,27,6,0,0), -d(1919,5,25,7,0,0), -d(1919,11,1,4,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), - ] - -Coral_Harbour = Coral_Harbour() - diff --git a/modules/pytz/zoneinfo/America/Cordoba.py b/modules/pytz/zoneinfo/America/Cordoba.py deleted file mode 100644 index 0a8bd6c7..00000000 --- a/modules/pytz/zoneinfo/America/Cordoba.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Cordoba.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cordoba(DstTzInfo): - '''America/Cordoba timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cordoba' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Cordoba = Cordoba() - diff --git a/modules/pytz/zoneinfo/America/Costa_Rica.py b/modules/pytz/zoneinfo/America/Costa_Rica.py deleted file mode 100644 index 62693b86..00000000 --- a/modules/pytz/zoneinfo/America/Costa_Rica.py +++ /dev/null @@ -1,38 +0,0 @@ -'''tzinfo timezone information for America/Costa_Rica.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Costa_Rica(DstTzInfo): - '''America/Costa_Rica timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Costa_Rica' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,1,15,5,36,20), -d(1979,2,25,6,0,0), -d(1979,6,3,5,0,0), -d(1980,2,24,6,0,0), -d(1980,6,1,5,0,0), -d(1991,1,19,6,0,0), -d(1991,7,1,5,0,0), -d(1992,1,18,6,0,0), -d(1992,3,15,5,0,0), - ] - - _transition_info = [ -i(-20160,0,'SJMT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Costa_Rica = Costa_Rica() - diff --git a/modules/pytz/zoneinfo/America/Cuiaba.py b/modules/pytz/zoneinfo/America/Cuiaba.py deleted file mode 100644 index b284bf5c..00000000 --- a/modules/pytz/zoneinfo/America/Cuiaba.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for America/Cuiaba.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cuiaba(DstTzInfo): - '''America/Cuiaba timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Cuiaba' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,44,20), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), -d(1988,10,16,4,0,0), -d(1989,1,29,3,0,0), -d(1989,10,15,4,0,0), -d(1990,2,11,3,0,0), -d(1990,10,21,4,0,0), -d(1991,2,17,3,0,0), -d(1991,10,20,4,0,0), -d(1992,2,9,3,0,0), -d(1992,10,25,4,0,0), -d(1993,1,31,3,0,0), -d(1993,10,17,4,0,0), -d(1994,2,20,3,0,0), -d(1994,10,16,4,0,0), -d(1995,2,19,3,0,0), -d(1995,10,15,4,0,0), -d(1996,2,11,3,0,0), -d(1996,10,6,4,0,0), -d(1997,2,16,3,0,0), -d(1997,10,6,4,0,0), -d(1998,3,1,3,0,0), -d(1998,10,11,4,0,0), -d(1999,2,21,3,0,0), -d(1999,10,3,4,0,0), -d(2000,2,27,3,0,0), -d(2000,10,8,4,0,0), -d(2001,2,18,3,0,0), -d(2001,10,14,4,0,0), -d(2002,2,17,3,0,0), -d(2002,11,3,4,0,0), -d(2003,2,16,3,0,0), -d(2004,11,2,4,0,0), -d(2005,2,20,3,0,0), -d(2005,10,16,4,0,0), -d(2006,2,19,3,0,0), -d(2006,10,15,4,0,0), -d(2007,2,18,3,0,0), -d(2007,10,21,4,0,0), -d(2008,2,17,3,0,0), -d(2008,10,19,4,0,0), -d(2009,2,15,3,0,0), -d(2009,10,18,4,0,0), -d(2010,2,21,3,0,0), -d(2010,10,17,4,0,0), -d(2011,2,20,3,0,0), -d(2011,10,16,4,0,0), -d(2012,2,19,3,0,0), -d(2012,10,21,4,0,0), -d(2013,2,17,3,0,0), -d(2013,10,20,4,0,0), -d(2014,2,16,3,0,0), -d(2014,10,19,4,0,0), -d(2015,2,15,3,0,0), -d(2015,10,18,4,0,0), -d(2016,2,21,3,0,0), -d(2016,10,16,4,0,0), -d(2017,2,19,3,0,0), -d(2017,10,15,4,0,0), -d(2018,2,18,3,0,0), -d(2018,10,21,4,0,0), -d(2019,2,17,3,0,0), -d(2019,10,20,4,0,0), -d(2020,2,16,3,0,0), -d(2020,10,18,4,0,0), -d(2021,2,21,3,0,0), -d(2021,10,17,4,0,0), -d(2022,2,20,3,0,0), -d(2022,10,16,4,0,0), -d(2023,2,19,3,0,0), -d(2023,10,15,4,0,0), -d(2024,2,18,3,0,0), -d(2024,10,20,4,0,0), -d(2025,2,16,3,0,0), -d(2025,10,19,4,0,0), -d(2026,2,15,3,0,0), -d(2026,10,18,4,0,0), -d(2027,2,21,3,0,0), -d(2027,10,17,4,0,0), -d(2028,2,20,3,0,0), -d(2028,10,15,4,0,0), -d(2029,2,18,3,0,0), -d(2029,10,21,4,0,0), -d(2030,2,17,3,0,0), -d(2030,10,20,4,0,0), -d(2031,2,16,3,0,0), -d(2031,10,19,4,0,0), -d(2032,2,15,3,0,0), -d(2032,10,17,4,0,0), -d(2033,2,20,3,0,0), -d(2033,10,16,4,0,0), -d(2034,2,19,3,0,0), -d(2034,10,15,4,0,0), -d(2035,2,18,3,0,0), -d(2035,10,21,4,0,0), -d(2036,2,17,3,0,0), -d(2036,10,19,4,0,0), -d(2037,2,15,3,0,0), -d(2037,10,18,4,0,0), - ] - - _transition_info = [ -i(-13440,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), - ] - -Cuiaba = Cuiaba() - diff --git a/modules/pytz/zoneinfo/America/Curacao.py b/modules/pytz/zoneinfo/America/Curacao.py deleted file mode 100644 index b96dd992..00000000 --- a/modules/pytz/zoneinfo/America/Curacao.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Curacao.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Curacao(DstTzInfo): - '''America/Curacao timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Curacao' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,12,4,35,44), -d(1965,1,1,4,30,0), - ] - - _transition_info = [ -i(-16560,0,'LMT'), -i(-16200,0,'ANT'), -i(-14400,0,'AST'), - ] - -Curacao = Curacao() - diff --git a/modules/pytz/zoneinfo/America/Danmarkshavn.py b/modules/pytz/zoneinfo/America/Danmarkshavn.py deleted file mode 100644 index a476ad6a..00000000 --- a/modules/pytz/zoneinfo/America/Danmarkshavn.py +++ /dev/null @@ -1,88 +0,0 @@ -'''tzinfo timezone information for America/Danmarkshavn.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Danmarkshavn(DstTzInfo): - '''America/Danmarkshavn timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Danmarkshavn' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,28,1,14,40), -d(1980,4,6,5,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,1,1,3,0,0), - ] - - _transition_info = [ -i(-4500,0,'LMT'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(0,0,'GMT'), - ] - -Danmarkshavn = Danmarkshavn() - diff --git a/modules/pytz/zoneinfo/America/Dawson.py b/modules/pytz/zoneinfo/America/Dawson.py deleted file mode 100644 index bf11c4b7..00000000 --- a/modules/pytz/zoneinfo/America/Dawson.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for America/Dawson.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dawson(DstTzInfo): - '''America/Dawson timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Dawson' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,11,0,0), -d(1918,10,27,10,0,0), -d(1919,5,25,11,0,0), -d(1919,11,1,8,0,0), -d(1942,2,9,11,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,10,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,9,0,0), -d(1973,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YWT'), -i(-28800,3600,'YPT'), -i(-32400,0,'YST'), -i(-25200,7200,'YDDT'), -i(-32400,0,'YST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Dawson = Dawson() - diff --git a/modules/pytz/zoneinfo/America/Dawson_Creek.py b/modules/pytz/zoneinfo/America/Dawson_Creek.py deleted file mode 100644 index cd815b0d..00000000 --- a/modules/pytz/zoneinfo/America/Dawson_Creek.py +++ /dev/null @@ -1,134 +0,0 @@ -'''tzinfo timezone information for America/Dawson_Creek.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dawson_Creek(DstTzInfo): - '''America/Dawson_Creek timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Dawson_Creek' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,10,0,0), -d(1918,10,31,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1947,4,27,10,0,0), -d(1947,9,28,9,0,0), -d(1948,4,25,10,0,0), -d(1948,9,26,9,0,0), -d(1949,4,24,10,0,0), -d(1949,9,25,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,8,30,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-25200,0,'MST'), - ] - -Dawson_Creek = Dawson_Creek() - diff --git a/modules/pytz/zoneinfo/America/Denver.py b/modules/pytz/zoneinfo/America/Denver.py deleted file mode 100644 index 205e6911..00000000 --- a/modules/pytz/zoneinfo/America/Denver.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for America/Denver.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Denver(DstTzInfo): - '''America/Denver timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Denver' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1920,3,28,9,0,0), -d(1920,10,31,8,0,0), -d(1921,3,27,9,0,0), -d(1921,5,22,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,8,0,0), -d(1966,4,24,9,0,0), -d(1966,10,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Denver = Denver() - diff --git a/modules/pytz/zoneinfo/America/Detroit.py b/modules/pytz/zoneinfo/America/Detroit.py deleted file mode 100644 index 0c943ba6..00000000 --- a/modules/pytz/zoneinfo/America/Detroit.py +++ /dev/null @@ -1,298 +0,0 @@ -'''tzinfo timezone information for America/Detroit.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Detroit(DstTzInfo): - '''America/Detroit timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Detroit' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,1,1,5,32,11), -d(1915,5,15,8,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1967,6,14,7,0,0), -d(1967,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-19920,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Detroit = Detroit() - diff --git a/modules/pytz/zoneinfo/America/Dominica.py b/modules/pytz/zoneinfo/America/Dominica.py deleted file mode 100644 index 6d2c1ecd..00000000 --- a/modules/pytz/zoneinfo/America/Dominica.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Dominica.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dominica(DstTzInfo): - '''America/Dominica timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Dominica' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,6,36), - ] - - _transition_info = [ -i(-14760,0,'LMT'), -i(-14400,0,'AST'), - ] - -Dominica = Dominica() - diff --git a/modules/pytz/zoneinfo/America/Edmonton.py b/modules/pytz/zoneinfo/America/Edmonton.py deleted file mode 100644 index f85349b8..00000000 --- a/modules/pytz/zoneinfo/America/Edmonton.py +++ /dev/null @@ -1,328 +0,0 @@ -'''tzinfo timezone information for America/Edmonton.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Edmonton(DstTzInfo): - '''America/Edmonton timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Edmonton' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,9,1,7,33,52), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1919,4,13,9,0,0), -d(1919,5,27,8,0,0), -d(1920,4,25,9,0,0), -d(1920,10,31,8,0,0), -d(1921,4,24,9,0,0), -d(1921,9,25,8,0,0), -d(1922,4,30,9,0,0), -d(1922,9,24,8,0,0), -d(1923,4,29,9,0,0), -d(1923,9,30,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,4,28,9,0,0), -d(1974,10,27,8,0,0), -d(1975,4,27,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-27240,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Edmonton = Edmonton() - diff --git a/modules/pytz/zoneinfo/America/Eirunepe.py b/modules/pytz/zoneinfo/America/Eirunepe.py deleted file mode 100644 index 1c41bd95..00000000 --- a/modules/pytz/zoneinfo/America/Eirunepe.py +++ /dev/null @@ -1,82 +0,0 @@ -'''tzinfo timezone information for America/Eirunepe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Eirunepe(DstTzInfo): - '''America/Eirunepe timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Eirunepe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,39,28), -d(1931,10,3,16,0,0), -d(1932,4,1,4,0,0), -d(1932,10,3,5,0,0), -d(1933,4,1,4,0,0), -d(1949,12,1,5,0,0), -d(1950,4,16,5,0,0), -d(1950,12,1,5,0,0), -d(1951,4,1,4,0,0), -d(1951,12,1,5,0,0), -d(1952,4,1,4,0,0), -d(1952,12,1,5,0,0), -d(1953,3,1,4,0,0), -d(1963,12,9,5,0,0), -d(1964,3,1,4,0,0), -d(1965,1,31,5,0,0), -d(1965,3,31,4,0,0), -d(1965,12,1,5,0,0), -d(1966,3,1,4,0,0), -d(1966,11,1,5,0,0), -d(1967,3,1,4,0,0), -d(1967,11,1,5,0,0), -d(1968,3,1,4,0,0), -d(1985,11,2,5,0,0), -d(1986,3,15,4,0,0), -d(1986,10,25,5,0,0), -d(1987,2,14,4,0,0), -d(1987,10,25,5,0,0), -d(1988,2,7,4,0,0), -d(1993,10,17,5,0,0), -d(1994,2,20,4,0,0), - ] - - _transition_info = [ -i(-16740,0,'LMT'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), - ] - -Eirunepe = Eirunepe() - diff --git a/modules/pytz/zoneinfo/America/El_Salvador.py b/modules/pytz/zoneinfo/America/El_Salvador.py deleted file mode 100644 index 4ed5d13a..00000000 --- a/modules/pytz/zoneinfo/America/El_Salvador.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for America/El_Salvador.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class El_Salvador(DstTzInfo): - '''America/El_Salvador timezone definition. See datetime.tzinfo for details''' - - zone = 'America/El_Salvador' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,1,1,5,56,48), -d(1987,5,3,6,0,0), -d(1987,9,27,5,0,0), -d(1988,5,1,6,0,0), -d(1988,9,25,5,0,0), - ] - - _transition_info = [ -i(-21420,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -El_Salvador = El_Salvador() - diff --git a/modules/pytz/zoneinfo/America/Ensenada.py b/modules/pytz/zoneinfo/America/Ensenada.py deleted file mode 100644 index d1cc2e84..00000000 --- a/modules/pytz/zoneinfo/America/Ensenada.py +++ /dev/null @@ -1,316 +0,0 @@ -'''tzinfo timezone information for America/Ensenada.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ensenada(DstTzInfo): - '''America/Ensenada timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Ensenada' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,8,0,0), -d(1924,1,1,7,0,0), -d(1927,6,11,7,0,0), -d(1930,11,15,7,0,0), -d(1931,4,1,8,0,0), -d(1931,9,30,7,0,0), -d(1942,4,24,8,0,0), -d(1945,11,12,7,0,0), -d(1948,4,5,8,0,0), -d(1949,1,14,7,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-28080,0,'LMT'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Ensenada = Ensenada() - diff --git a/modules/pytz/zoneinfo/America/Fort_Wayne.py b/modules/pytz/zoneinfo/America/Fort_Wayne.py deleted file mode 100644 index 4a1bd609..00000000 --- a/modules/pytz/zoneinfo/America/Fort_Wayne.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for America/Fort_Wayne.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Fort_Wayne(DstTzInfo): - '''America/Fort_Wayne timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Fort_Wayne' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1941,6,22,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Fort_Wayne = Fort_Wayne() - diff --git a/modules/pytz/zoneinfo/America/Fortaleza.py b/modules/pytz/zoneinfo/America/Fortaleza.py deleted file mode 100644 index 44ca5ae1..00000000 --- a/modules/pytz/zoneinfo/America/Fortaleza.py +++ /dev/null @@ -1,98 +0,0 @@ -'''tzinfo timezone information for America/Fortaleza.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Fortaleza(DstTzInfo): - '''America/Fortaleza timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Fortaleza' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,34,0), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2000,10,22,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), - ] - - _transition_info = [ -i(-9240,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Fortaleza = Fortaleza() - diff --git a/modules/pytz/zoneinfo/America/Glace_Bay.py b/modules/pytz/zoneinfo/America/Glace_Bay.py deleted file mode 100644 index cd5edff1..00000000 --- a/modules/pytz/zoneinfo/America/Glace_Bay.py +++ /dev/null @@ -1,300 +0,0 @@ -'''tzinfo timezone information for America/Glace_Bay.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Glace_Bay(DstTzInfo): - '''America/Glace_Bay timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Glace_Bay' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1902,6,15,3,59,48), -d(1918,4,14,6,0,0), -d(1918,10,31,5,0,0), -d(1942,2,9,6,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,5,0,0), -d(1953,4,26,6,0,0), -d(1953,9,27,5,0,0), -d(1972,4,30,6,0,0), -d(1972,10,29,5,0,0), -d(1973,4,29,6,0,0), -d(1973,10,28,5,0,0), -d(1974,4,28,6,0,0), -d(1974,10,27,5,0,0), -d(1975,4,27,6,0,0), -d(1975,10,26,5,0,0), -d(1976,4,25,6,0,0), -d(1976,10,31,5,0,0), -d(1977,4,24,6,0,0), -d(1977,10,30,5,0,0), -d(1978,4,30,6,0,0), -d(1978,10,29,5,0,0), -d(1979,4,29,6,0,0), -d(1979,10,28,5,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,6,0,0), -d(1987,10,25,5,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,5,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,5,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,5,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,5,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,5,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,5,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,5,0,0), -d(1998,4,5,6,0,0), -d(1998,10,25,5,0,0), -d(1999,4,4,6,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,6,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,6,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,6,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,6,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,6,0,0), -d(2004,10,31,5,0,0), -d(2005,4,3,6,0,0), -d(2005,10,30,5,0,0), -d(2006,4,2,6,0,0), -d(2006,10,29,5,0,0), -d(2007,3,11,6,0,0), -d(2007,11,4,5,0,0), -d(2008,3,9,6,0,0), -d(2008,11,2,5,0,0), -d(2009,3,8,6,0,0), -d(2009,11,1,5,0,0), -d(2010,3,14,6,0,0), -d(2010,11,7,5,0,0), -d(2011,3,13,6,0,0), -d(2011,11,6,5,0,0), -d(2012,3,11,6,0,0), -d(2012,11,4,5,0,0), -d(2013,3,10,6,0,0), -d(2013,11,3,5,0,0), -d(2014,3,9,6,0,0), -d(2014,11,2,5,0,0), -d(2015,3,8,6,0,0), -d(2015,11,1,5,0,0), -d(2016,3,13,6,0,0), -d(2016,11,6,5,0,0), -d(2017,3,12,6,0,0), -d(2017,11,5,5,0,0), -d(2018,3,11,6,0,0), -d(2018,11,4,5,0,0), -d(2019,3,10,6,0,0), -d(2019,11,3,5,0,0), -d(2020,3,8,6,0,0), -d(2020,11,1,5,0,0), -d(2021,3,14,6,0,0), -d(2021,11,7,5,0,0), -d(2022,3,13,6,0,0), -d(2022,11,6,5,0,0), -d(2023,3,12,6,0,0), -d(2023,11,5,5,0,0), -d(2024,3,10,6,0,0), -d(2024,11,3,5,0,0), -d(2025,3,9,6,0,0), -d(2025,11,2,5,0,0), -d(2026,3,8,6,0,0), -d(2026,11,1,5,0,0), -d(2027,3,14,6,0,0), -d(2027,11,7,5,0,0), -d(2028,3,12,6,0,0), -d(2028,11,5,5,0,0), -d(2029,3,11,6,0,0), -d(2029,11,4,5,0,0), -d(2030,3,10,6,0,0), -d(2030,11,3,5,0,0), -d(2031,3,9,6,0,0), -d(2031,11,2,5,0,0), -d(2032,3,14,6,0,0), -d(2032,11,7,5,0,0), -d(2033,3,13,6,0,0), -d(2033,11,6,5,0,0), -d(2034,3,12,6,0,0), -d(2034,11,5,5,0,0), -d(2035,3,11,6,0,0), -d(2035,11,4,5,0,0), -d(2036,3,9,6,0,0), -d(2036,11,2,5,0,0), -d(2037,3,8,6,0,0), -d(2037,11,1,5,0,0), - ] - - _transition_info = [ -i(-14400,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'AWT'), -i(-10800,3600,'APT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Glace_Bay = Glace_Bay() - diff --git a/modules/pytz/zoneinfo/America/Godthab.py b/modules/pytz/zoneinfo/America/Godthab.py deleted file mode 100644 index bce7b307..00000000 --- a/modules/pytz/zoneinfo/America/Godthab.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for America/Godthab.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Godthab(DstTzInfo): - '''America/Godthab timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Godthab' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,28,3,26,56), -d(1980,4,6,5,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-12420,0,'LMT'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), -i(-7200,3600,'WGST'), -i(-10800,0,'WGT'), - ] - -Godthab = Godthab() - diff --git a/modules/pytz/zoneinfo/America/Goose_Bay.py b/modules/pytz/zoneinfo/America/Goose_Bay.py deleted file mode 100644 index 66d75a8a..00000000 --- a/modules/pytz/zoneinfo/America/Goose_Bay.py +++ /dev/null @@ -1,426 +0,0 @@ -'''tzinfo timezone information for America/Goose_Bay.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Goose_Bay(DstTzInfo): - '''America/Goose_Bay timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Goose_Bay' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,5,30,52), -d(1918,10,31,4,30,52), -d(1935,3,30,3,30,52), -d(1936,5,11,3,30,0), -d(1936,10,5,2,30,0), -d(1937,5,10,3,30,0), -d(1937,10,4,2,30,0), -d(1938,5,9,3,30,0), -d(1938,10,3,2,30,0), -d(1939,5,15,3,30,0), -d(1939,10,2,2,30,0), -d(1940,5,13,3,30,0), -d(1940,10,7,2,30,0), -d(1941,5,12,3,30,0), -d(1941,10,6,2,30,0), -d(1942,5,11,3,30,0), -d(1945,8,14,23,0,0), -d(1945,9,30,4,30,0), -d(1946,5,12,5,30,0), -d(1946,10,6,4,30,0), -d(1947,5,11,5,30,0), -d(1947,10,5,4,30,0), -d(1948,5,9,5,30,0), -d(1948,10,3,4,30,0), -d(1949,5,8,5,30,0), -d(1949,10,2,4,30,0), -d(1950,5,14,5,30,0), -d(1950,10,8,4,30,0), -d(1951,4,29,5,30,0), -d(1951,9,30,4,30,0), -d(1952,4,27,5,30,0), -d(1952,9,28,4,30,0), -d(1953,4,26,5,30,0), -d(1953,9,27,4,30,0), -d(1954,4,25,5,30,0), -d(1954,9,26,4,30,0), -d(1955,4,24,5,30,0), -d(1955,9,25,4,30,0), -d(1956,4,29,5,30,0), -d(1956,9,30,4,30,0), -d(1957,4,28,5,30,0), -d(1957,9,29,4,30,0), -d(1958,4,27,5,30,0), -d(1958,9,28,4,30,0), -d(1959,4,26,5,30,0), -d(1959,9,27,4,30,0), -d(1960,4,24,5,30,0), -d(1960,10,30,4,30,0), -d(1961,4,30,5,30,0), -d(1961,10,29,4,30,0), -d(1962,4,29,5,30,0), -d(1962,10,28,4,30,0), -d(1963,4,28,5,30,0), -d(1963,10,27,4,30,0), -d(1964,4,26,5,30,0), -d(1964,10,25,4,30,0), -d(1965,4,25,5,30,0), -d(1965,10,31,4,30,0), -d(1966,3,15,5,30,0), -d(1966,4,24,6,0,0), -d(1966,10,30,5,0,0), -d(1967,4,30,6,0,0), -d(1967,10,29,5,0,0), -d(1968,4,28,6,0,0), -d(1968,10,27,5,0,0), -d(1969,4,27,6,0,0), -d(1969,10,26,5,0,0), -d(1970,4,26,6,0,0), -d(1970,10,25,5,0,0), -d(1971,4,25,6,0,0), -d(1971,10,31,5,0,0), -d(1972,4,30,6,0,0), -d(1972,10,29,5,0,0), -d(1973,4,29,6,0,0), -d(1973,10,28,5,0,0), -d(1974,4,28,6,0,0), -d(1974,10,27,5,0,0), -d(1975,4,27,6,0,0), -d(1975,10,26,5,0,0), -d(1976,4,25,6,0,0), -d(1976,10,31,5,0,0), -d(1977,4,24,6,0,0), -d(1977,10,30,5,0,0), -d(1978,4,30,6,0,0), -d(1978,10,29,5,0,0), -d(1979,4,29,6,0,0), -d(1979,10,28,5,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,4,1,0), -d(1987,10,25,3,1,0), -d(1988,4,3,4,1,0), -d(1988,10,30,2,1,0), -d(1989,4,2,4,1,0), -d(1989,10,29,3,1,0), -d(1990,4,1,4,1,0), -d(1990,10,28,3,1,0), -d(1991,4,7,4,1,0), -d(1991,10,27,3,1,0), -d(1992,4,5,4,1,0), -d(1992,10,25,3,1,0), -d(1993,4,4,4,1,0), -d(1993,10,31,3,1,0), -d(1994,4,3,4,1,0), -d(1994,10,30,3,1,0), -d(1995,4,2,4,1,0), -d(1995,10,29,3,1,0), -d(1996,4,7,4,1,0), -d(1996,10,27,3,1,0), -d(1997,4,6,4,1,0), -d(1997,10,26,3,1,0), -d(1998,4,5,4,1,0), -d(1998,10,25,3,1,0), -d(1999,4,4,4,1,0), -d(1999,10,31,3,1,0), -d(2000,4,2,4,1,0), -d(2000,10,29,3,1,0), -d(2001,4,1,4,1,0), -d(2001,10,28,3,1,0), -d(2002,4,7,4,1,0), -d(2002,10,27,3,1,0), -d(2003,4,6,4,1,0), -d(2003,10,26,3,1,0), -d(2004,4,4,4,1,0), -d(2004,10,31,3,1,0), -d(2005,4,3,4,1,0), -d(2005,10,30,3,1,0), -d(2006,4,2,4,1,0), -d(2006,10,29,3,1,0), -d(2007,4,1,4,1,0), -d(2007,10,28,3,1,0), -d(2008,4,6,4,1,0), -d(2008,10,26,3,1,0), -d(2009,4,5,4,1,0), -d(2009,10,25,3,1,0), -d(2010,4,4,4,1,0), -d(2010,10,31,3,1,0), -d(2011,4,3,4,1,0), -d(2011,10,30,3,1,0), -d(2012,4,1,4,1,0), -d(2012,10,28,3,1,0), -d(2013,4,7,4,1,0), -d(2013,10,27,3,1,0), -d(2014,4,6,4,1,0), -d(2014,10,26,3,1,0), -d(2015,4,5,4,1,0), -d(2015,10,25,3,1,0), -d(2016,4,3,4,1,0), -d(2016,10,30,3,1,0), -d(2017,4,2,4,1,0), -d(2017,10,29,3,1,0), -d(2018,4,1,4,1,0), -d(2018,10,28,3,1,0), -d(2019,4,7,4,1,0), -d(2019,10,27,3,1,0), -d(2020,4,5,4,1,0), -d(2020,10,25,3,1,0), -d(2021,4,4,4,1,0), -d(2021,10,31,3,1,0), -d(2022,4,3,4,1,0), -d(2022,10,30,3,1,0), -d(2023,4,2,4,1,0), -d(2023,10,29,3,1,0), -d(2024,4,7,4,1,0), -d(2024,10,27,3,1,0), -d(2025,4,6,4,1,0), -d(2025,10,26,3,1,0), -d(2026,4,5,4,1,0), -d(2026,10,25,3,1,0), -d(2027,4,4,4,1,0), -d(2027,10,31,3,1,0), -d(2028,4,2,4,1,0), -d(2028,10,29,3,1,0), -d(2029,4,1,4,1,0), -d(2029,10,28,3,1,0), -d(2030,4,7,4,1,0), -d(2030,10,27,3,1,0), -d(2031,4,6,4,1,0), -d(2031,10,26,3,1,0), -d(2032,4,4,4,1,0), -d(2032,10,31,3,1,0), -d(2033,4,3,4,1,0), -d(2033,10,30,3,1,0), -d(2034,4,2,4,1,0), -d(2034,10,29,3,1,0), -d(2035,4,1,4,1,0), -d(2035,10,28,3,1,0), -d(2036,4,6,4,1,0), -d(2036,10,26,3,1,0), -d(2037,4,5,4,1,0), -d(2037,10,25,3,1,0), - ] - - _transition_info = [ -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NWT'), -i(-9000,3600,'NPT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-7200,7200,'ADDT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Goose_Bay = Goose_Bay() - diff --git a/modules/pytz/zoneinfo/America/Grand_Turk.py b/modules/pytz/zoneinfo/America/Grand_Turk.py deleted file mode 100644 index ba4cae50..00000000 --- a/modules/pytz/zoneinfo/America/Grand_Turk.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for America/Grand_Turk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Grand_Turk(DstTzInfo): - '''America/Grand_Turk timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Grand_Turk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,1,5,7,12), -d(1979,4,29,5,0,0), -d(1979,10,28,4,0,0), -d(1980,4,27,5,0,0), -d(1980,10,26,4,0,0), -d(1981,4,26,5,0,0), -d(1981,10,25,4,0,0), -d(1982,4,25,5,0,0), -d(1982,10,31,4,0,0), -d(1983,4,24,5,0,0), -d(1983,10,30,4,0,0), -d(1984,4,29,5,0,0), -d(1984,10,28,4,0,0), -d(1985,4,28,5,0,0), -d(1985,10,27,4,0,0), -d(1986,4,27,5,0,0), -d(1986,10,26,4,0,0), -d(1987,4,5,5,0,0), -d(1987,10,25,4,0,0), -d(1988,4,3,5,0,0), -d(1988,10,30,4,0,0), -d(1989,4,2,5,0,0), -d(1989,10,29,4,0,0), -d(1990,4,1,5,0,0), -d(1990,10,28,4,0,0), -d(1991,4,7,5,0,0), -d(1991,10,27,4,0,0), -d(1992,4,5,5,0,0), -d(1992,10,25,4,0,0), -d(1993,4,4,5,0,0), -d(1993,10,31,4,0,0), -d(1994,4,3,5,0,0), -d(1994,10,30,4,0,0), -d(1995,4,2,5,0,0), -d(1995,10,29,4,0,0), -d(1996,4,7,5,0,0), -d(1996,10,27,4,0,0), -d(1997,4,6,5,0,0), -d(1997,10,26,4,0,0), -d(1998,4,5,5,0,0), -d(1998,10,25,4,0,0), -d(1999,4,4,5,0,0), -d(1999,10,31,4,0,0), -d(2000,4,2,5,0,0), -d(2000,10,29,4,0,0), -d(2001,4,1,5,0,0), -d(2001,10,28,4,0,0), -d(2002,4,7,5,0,0), -d(2002,10,27,4,0,0), -d(2003,4,6,5,0,0), -d(2003,10,26,4,0,0), -d(2004,4,4,5,0,0), -d(2004,10,31,4,0,0), -d(2005,4,3,5,0,0), -d(2005,10,30,4,0,0), -d(2006,4,2,5,0,0), -d(2006,10,29,4,0,0), -d(2007,4,1,5,0,0), -d(2007,10,28,4,0,0), -d(2008,4,6,5,0,0), -d(2008,10,26,4,0,0), -d(2009,4,5,5,0,0), -d(2009,10,25,4,0,0), -d(2010,4,4,5,0,0), -d(2010,10,31,4,0,0), -d(2011,4,3,5,0,0), -d(2011,10,30,4,0,0), -d(2012,4,1,5,0,0), -d(2012,10,28,4,0,0), -d(2013,4,7,5,0,0), -d(2013,10,27,4,0,0), -d(2014,4,6,5,0,0), -d(2014,10,26,4,0,0), -d(2015,4,5,5,0,0), -d(2015,10,25,4,0,0), -d(2016,4,3,5,0,0), -d(2016,10,30,4,0,0), -d(2017,4,2,5,0,0), -d(2017,10,29,4,0,0), -d(2018,4,1,5,0,0), -d(2018,10,28,4,0,0), -d(2019,4,7,5,0,0), -d(2019,10,27,4,0,0), -d(2020,4,5,5,0,0), -d(2020,10,25,4,0,0), -d(2021,4,4,5,0,0), -d(2021,10,31,4,0,0), -d(2022,4,3,5,0,0), -d(2022,10,30,4,0,0), -d(2023,4,2,5,0,0), -d(2023,10,29,4,0,0), -d(2024,4,7,5,0,0), -d(2024,10,27,4,0,0), -d(2025,4,6,5,0,0), -d(2025,10,26,4,0,0), -d(2026,4,5,5,0,0), -d(2026,10,25,4,0,0), -d(2027,4,4,5,0,0), -d(2027,10,31,4,0,0), -d(2028,4,2,5,0,0), -d(2028,10,29,4,0,0), -d(2029,4,1,5,0,0), -d(2029,10,28,4,0,0), -d(2030,4,7,5,0,0), -d(2030,10,27,4,0,0), -d(2031,4,6,5,0,0), -d(2031,10,26,4,0,0), -d(2032,4,4,5,0,0), -d(2032,10,31,4,0,0), -d(2033,4,3,5,0,0), -d(2033,10,30,4,0,0), -d(2034,4,2,5,0,0), -d(2034,10,29,4,0,0), -d(2035,4,1,5,0,0), -d(2035,10,28,4,0,0), -d(2036,4,6,5,0,0), -d(2036,10,26,4,0,0), -d(2037,4,5,5,0,0), -d(2037,10,25,4,0,0), - ] - - _transition_info = [ -i(-18420,0,'KMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Grand_Turk = Grand_Turk() - diff --git a/modules/pytz/zoneinfo/America/Grenada.py b/modules/pytz/zoneinfo/America/Grenada.py deleted file mode 100644 index 37d67e85..00000000 --- a/modules/pytz/zoneinfo/America/Grenada.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Grenada.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Grenada(DstTzInfo): - '''America/Grenada timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Grenada' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,7,0), - ] - - _transition_info = [ -i(-14820,0,'LMT'), -i(-14400,0,'AST'), - ] - -Grenada = Grenada() - diff --git a/modules/pytz/zoneinfo/America/Guadeloupe.py b/modules/pytz/zoneinfo/America/Guadeloupe.py deleted file mode 100644 index 19720756..00000000 --- a/modules/pytz/zoneinfo/America/Guadeloupe.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Guadeloupe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guadeloupe(DstTzInfo): - '''America/Guadeloupe timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Guadeloupe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,6,8,4,6,8), - ] - - _transition_info = [ -i(-14760,0,'LMT'), -i(-14400,0,'AST'), - ] - -Guadeloupe = Guadeloupe() - diff --git a/modules/pytz/zoneinfo/America/Guatemala.py b/modules/pytz/zoneinfo/America/Guatemala.py deleted file mode 100644 index db41d857..00000000 --- a/modules/pytz/zoneinfo/America/Guatemala.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for America/Guatemala.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guatemala(DstTzInfo): - '''America/Guatemala timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Guatemala' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,10,5,6,2,4), -d(1973,11,25,6,0,0), -d(1974,2,24,5,0,0), -d(1983,5,21,6,0,0), -d(1983,9,22,5,0,0), -d(1991,3,23,6,0,0), -d(1991,9,7,5,0,0), - ] - - _transition_info = [ -i(-21720,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Guatemala = Guatemala() - diff --git a/modules/pytz/zoneinfo/America/Guayaquil.py b/modules/pytz/zoneinfo/America/Guayaquil.py deleted file mode 100644 index c44a5f14..00000000 --- a/modules/pytz/zoneinfo/America/Guayaquil.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Guayaquil.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guayaquil(DstTzInfo): - '''America/Guayaquil timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Guayaquil' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1931,1,1,5,14,0), - ] - - _transition_info = [ -i(-18840,0,'QMT'), -i(-18000,0,'ECT'), - ] - -Guayaquil = Guayaquil() - diff --git a/modules/pytz/zoneinfo/America/Guyana.py b/modules/pytz/zoneinfo/America/Guyana.py deleted file mode 100644 index 3397d5e5..00000000 --- a/modules/pytz/zoneinfo/America/Guyana.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for America/Guyana.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guyana(DstTzInfo): - '''America/Guyana timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Guyana' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,3,1,3,52,40), -d(1966,5,26,3,45,0), -d(1975,7,31,3,45,0), -d(1991,1,1,3,0,0), - ] - - _transition_info = [ -i(-13980,0,'LMT'), -i(-13500,0,'GBGT'), -i(-13500,0,'GYT'), -i(-10800,0,'GYT'), -i(-14400,0,'GYT'), - ] - -Guyana = Guyana() - diff --git a/modules/pytz/zoneinfo/America/Halifax.py b/modules/pytz/zoneinfo/America/Halifax.py deleted file mode 100644 index ae673915..00000000 --- a/modules/pytz/zoneinfo/America/Halifax.py +++ /dev/null @@ -1,476 +0,0 @@ -'''tzinfo timezone information for America/Halifax.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Halifax(DstTzInfo): - '''America/Halifax timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Halifax' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1902,6,15,4,14,24), -d(1916,4,1,4,0,0), -d(1916,10,1,3,0,0), -d(1918,4,14,6,0,0), -d(1918,10,31,5,0,0), -d(1920,5,9,4,0,0), -d(1920,8,29,3,0,0), -d(1921,5,6,4,0,0), -d(1921,9,5,3,0,0), -d(1922,4,30,4,0,0), -d(1922,9,5,3,0,0), -d(1923,5,6,4,0,0), -d(1923,9,4,3,0,0), -d(1924,5,4,4,0,0), -d(1924,9,15,3,0,0), -d(1925,5,3,4,0,0), -d(1925,9,28,3,0,0), -d(1926,5,16,4,0,0), -d(1926,9,13,3,0,0), -d(1927,5,1,4,0,0), -d(1927,9,26,3,0,0), -d(1928,5,13,4,0,0), -d(1928,9,9,3,0,0), -d(1929,5,12,4,0,0), -d(1929,9,3,3,0,0), -d(1930,5,11,4,0,0), -d(1930,9,15,3,0,0), -d(1931,5,10,4,0,0), -d(1931,9,28,3,0,0), -d(1932,5,1,4,0,0), -d(1932,9,26,3,0,0), -d(1933,4,30,4,0,0), -d(1933,10,2,3,0,0), -d(1934,5,20,4,0,0), -d(1934,9,16,3,0,0), -d(1935,6,2,4,0,0), -d(1935,9,30,3,0,0), -d(1936,6,1,4,0,0), -d(1936,9,14,3,0,0), -d(1937,5,2,4,0,0), -d(1937,9,27,3,0,0), -d(1938,5,1,4,0,0), -d(1938,9,26,3,0,0), -d(1939,5,28,4,0,0), -d(1939,9,25,3,0,0), -d(1940,5,5,4,0,0), -d(1940,9,30,3,0,0), -d(1941,5,4,4,0,0), -d(1941,9,29,3,0,0), -d(1942,2,9,6,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,5,0,0), -d(1946,4,28,6,0,0), -d(1946,9,29,5,0,0), -d(1947,4,27,6,0,0), -d(1947,9,28,5,0,0), -d(1948,4,25,6,0,0), -d(1948,9,26,5,0,0), -d(1949,4,24,6,0,0), -d(1949,9,25,5,0,0), -d(1951,4,29,6,0,0), -d(1951,9,30,5,0,0), -d(1952,4,27,6,0,0), -d(1952,9,28,5,0,0), -d(1953,4,26,6,0,0), -d(1953,9,27,5,0,0), -d(1954,4,25,6,0,0), -d(1954,9,26,5,0,0), -d(1956,4,29,6,0,0), -d(1956,9,30,5,0,0), -d(1957,4,28,6,0,0), -d(1957,9,29,5,0,0), -d(1958,4,27,6,0,0), -d(1958,9,28,5,0,0), -d(1959,4,26,6,0,0), -d(1959,9,27,5,0,0), -d(1962,4,29,6,0,0), -d(1962,10,28,5,0,0), -d(1963,4,28,6,0,0), -d(1963,10,27,5,0,0), -d(1964,4,26,6,0,0), -d(1964,10,25,5,0,0), -d(1965,4,25,6,0,0), -d(1965,10,31,5,0,0), -d(1966,4,24,6,0,0), -d(1966,10,30,5,0,0), -d(1967,4,30,6,0,0), -d(1967,10,29,5,0,0), -d(1968,4,28,6,0,0), -d(1968,10,27,5,0,0), -d(1969,4,27,6,0,0), -d(1969,10,26,5,0,0), -d(1970,4,26,6,0,0), -d(1970,10,25,5,0,0), -d(1971,4,25,6,0,0), -d(1971,10,31,5,0,0), -d(1972,4,30,6,0,0), -d(1972,10,29,5,0,0), -d(1973,4,29,6,0,0), -d(1973,10,28,5,0,0), -d(1974,4,28,6,0,0), -d(1974,10,27,5,0,0), -d(1975,4,27,6,0,0), -d(1975,10,26,5,0,0), -d(1976,4,25,6,0,0), -d(1976,10,31,5,0,0), -d(1977,4,24,6,0,0), -d(1977,10,30,5,0,0), -d(1978,4,30,6,0,0), -d(1978,10,29,5,0,0), -d(1979,4,29,6,0,0), -d(1979,10,28,5,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,6,0,0), -d(1987,10,25,5,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,5,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,5,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,5,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,5,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,5,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,5,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,5,0,0), -d(1998,4,5,6,0,0), -d(1998,10,25,5,0,0), -d(1999,4,4,6,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,6,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,6,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,6,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,6,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,6,0,0), -d(2004,10,31,5,0,0), -d(2005,4,3,6,0,0), -d(2005,10,30,5,0,0), -d(2006,4,2,6,0,0), -d(2006,10,29,5,0,0), -d(2007,3,11,6,0,0), -d(2007,11,4,5,0,0), -d(2008,3,9,6,0,0), -d(2008,11,2,5,0,0), -d(2009,3,8,6,0,0), -d(2009,11,1,5,0,0), -d(2010,3,14,6,0,0), -d(2010,11,7,5,0,0), -d(2011,3,13,6,0,0), -d(2011,11,6,5,0,0), -d(2012,3,11,6,0,0), -d(2012,11,4,5,0,0), -d(2013,3,10,6,0,0), -d(2013,11,3,5,0,0), -d(2014,3,9,6,0,0), -d(2014,11,2,5,0,0), -d(2015,3,8,6,0,0), -d(2015,11,1,5,0,0), -d(2016,3,13,6,0,0), -d(2016,11,6,5,0,0), -d(2017,3,12,6,0,0), -d(2017,11,5,5,0,0), -d(2018,3,11,6,0,0), -d(2018,11,4,5,0,0), -d(2019,3,10,6,0,0), -d(2019,11,3,5,0,0), -d(2020,3,8,6,0,0), -d(2020,11,1,5,0,0), -d(2021,3,14,6,0,0), -d(2021,11,7,5,0,0), -d(2022,3,13,6,0,0), -d(2022,11,6,5,0,0), -d(2023,3,12,6,0,0), -d(2023,11,5,5,0,0), -d(2024,3,10,6,0,0), -d(2024,11,3,5,0,0), -d(2025,3,9,6,0,0), -d(2025,11,2,5,0,0), -d(2026,3,8,6,0,0), -d(2026,11,1,5,0,0), -d(2027,3,14,6,0,0), -d(2027,11,7,5,0,0), -d(2028,3,12,6,0,0), -d(2028,11,5,5,0,0), -d(2029,3,11,6,0,0), -d(2029,11,4,5,0,0), -d(2030,3,10,6,0,0), -d(2030,11,3,5,0,0), -d(2031,3,9,6,0,0), -d(2031,11,2,5,0,0), -d(2032,3,14,6,0,0), -d(2032,11,7,5,0,0), -d(2033,3,13,6,0,0), -d(2033,11,6,5,0,0), -d(2034,3,12,6,0,0), -d(2034,11,5,5,0,0), -d(2035,3,11,6,0,0), -d(2035,11,4,5,0,0), -d(2036,3,9,6,0,0), -d(2036,11,2,5,0,0), -d(2037,3,8,6,0,0), -d(2037,11,1,5,0,0), - ] - - _transition_info = [ -i(-15240,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'AWT'), -i(-10800,3600,'APT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Halifax = Halifax() - diff --git a/modules/pytz/zoneinfo/America/Havana.py b/modules/pytz/zoneinfo/America/Havana.py deleted file mode 100644 index 988a380b..00000000 --- a/modules/pytz/zoneinfo/America/Havana.py +++ /dev/null @@ -1,330 +0,0 @@ -'''tzinfo timezone information for America/Havana.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Havana(DstTzInfo): - '''America/Havana timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Havana' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1925,7,19,17,29,36), -d(1928,6,10,5,0,0), -d(1928,10,10,4,0,0), -d(1940,6,2,5,0,0), -d(1940,9,1,4,0,0), -d(1941,6,1,5,0,0), -d(1941,9,7,4,0,0), -d(1942,6,7,5,0,0), -d(1942,9,6,4,0,0), -d(1945,6,3,5,0,0), -d(1945,9,2,4,0,0), -d(1946,6,2,5,0,0), -d(1946,9,1,4,0,0), -d(1965,6,1,5,0,0), -d(1965,9,30,4,0,0), -d(1966,5,29,5,0,0), -d(1966,10,2,4,0,0), -d(1967,4,8,5,0,0), -d(1967,9,10,4,0,0), -d(1968,4,14,5,0,0), -d(1968,9,8,4,0,0), -d(1969,4,27,5,0,0), -d(1969,10,26,4,0,0), -d(1970,4,26,5,0,0), -d(1970,10,25,4,0,0), -d(1971,4,25,5,0,0), -d(1971,10,31,4,0,0), -d(1972,4,30,5,0,0), -d(1972,10,8,4,0,0), -d(1973,4,29,5,0,0), -d(1973,10,8,4,0,0), -d(1974,4,28,5,0,0), -d(1974,10,8,4,0,0), -d(1975,4,27,5,0,0), -d(1975,10,26,4,0,0), -d(1976,4,25,5,0,0), -d(1976,10,31,4,0,0), -d(1977,4,24,5,0,0), -d(1977,10,30,4,0,0), -d(1978,5,7,5,0,0), -d(1978,10,8,4,0,0), -d(1979,3,18,5,0,0), -d(1979,10,14,4,0,0), -d(1980,3,16,5,0,0), -d(1980,10,12,4,0,0), -d(1981,5,10,5,0,0), -d(1981,10,11,4,0,0), -d(1982,5,9,5,0,0), -d(1982,10,10,4,0,0), -d(1983,5,8,5,0,0), -d(1983,10,9,4,0,0), -d(1984,5,6,5,0,0), -d(1984,10,14,4,0,0), -d(1985,5,5,5,0,0), -d(1985,10,13,4,0,0), -d(1986,3,16,5,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,5,0,0), -d(1987,10,11,4,0,0), -d(1988,3,20,5,0,0), -d(1988,10,9,4,0,0), -d(1989,3,19,5,0,0), -d(1989,10,8,4,0,0), -d(1990,4,1,5,0,0), -d(1990,10,14,4,0,0), -d(1991,4,7,5,0,0), -d(1991,10,13,5,0,0), -d(1992,4,5,5,0,0), -d(1992,10,11,5,0,0), -d(1993,4,4,5,0,0), -d(1993,10,10,5,0,0), -d(1994,4,3,5,0,0), -d(1994,10,9,5,0,0), -d(1995,4,2,5,0,0), -d(1995,10,8,5,0,0), -d(1996,4,7,5,0,0), -d(1996,10,6,5,0,0), -d(1997,4,6,5,0,0), -d(1997,10,12,5,0,0), -d(1998,3,29,5,0,0), -d(1998,10,25,5,0,0), -d(1999,3,28,5,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,5,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,5,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,5,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,5,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,5,0,0), -d(2006,10,29,5,0,0), -d(2007,4,1,5,0,0), -d(2007,10,28,5,0,0), -d(2008,4,6,5,0,0), -d(2008,10,26,5,0,0), -d(2009,4,5,5,0,0), -d(2009,10,25,5,0,0), -d(2010,4,4,5,0,0), -d(2010,10,31,5,0,0), -d(2011,4,3,5,0,0), -d(2011,10,30,5,0,0), -d(2012,4,1,5,0,0), -d(2012,10,28,5,0,0), -d(2013,4,7,5,0,0), -d(2013,10,27,5,0,0), -d(2014,4,6,5,0,0), -d(2014,10,26,5,0,0), -d(2015,4,5,5,0,0), -d(2015,10,25,5,0,0), -d(2016,4,3,5,0,0), -d(2016,10,30,5,0,0), -d(2017,4,2,5,0,0), -d(2017,10,29,5,0,0), -d(2018,4,1,5,0,0), -d(2018,10,28,5,0,0), -d(2019,4,7,5,0,0), -d(2019,10,27,5,0,0), -d(2020,4,5,5,0,0), -d(2020,10,25,5,0,0), -d(2021,4,4,5,0,0), -d(2021,10,31,5,0,0), -d(2022,4,3,5,0,0), -d(2022,10,30,5,0,0), -d(2023,4,2,5,0,0), -d(2023,10,29,5,0,0), -d(2024,4,7,5,0,0), -d(2024,10,27,5,0,0), -d(2025,4,6,5,0,0), -d(2025,10,26,5,0,0), -d(2026,4,5,5,0,0), -d(2026,10,25,5,0,0), -d(2027,4,4,5,0,0), -d(2027,10,31,5,0,0), -d(2028,4,2,5,0,0), -d(2028,10,29,5,0,0), -d(2029,4,1,5,0,0), -d(2029,10,28,5,0,0), -d(2030,4,7,5,0,0), -d(2030,10,27,5,0,0), -d(2031,4,6,5,0,0), -d(2031,10,26,5,0,0), -d(2032,4,4,5,0,0), -d(2032,10,31,5,0,0), -d(2033,4,3,5,0,0), -d(2033,10,30,5,0,0), -d(2034,4,2,5,0,0), -d(2034,10,29,5,0,0), -d(2035,4,1,5,0,0), -d(2035,10,28,5,0,0), -d(2036,4,6,5,0,0), -d(2036,10,26,5,0,0), -d(2037,4,5,5,0,0), -d(2037,10,25,5,0,0), - ] - - _transition_info = [ -i(-19800,0,'HMT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), - ] - -Havana = Havana() - diff --git a/modules/pytz/zoneinfo/America/Hermosillo.py b/modules/pytz/zoneinfo/America/Hermosillo.py deleted file mode 100644 index 926ea817..00000000 --- a/modules/pytz/zoneinfo/America/Hermosillo.py +++ /dev/null @@ -1,50 +0,0 @@ -'''tzinfo timezone information for America/Hermosillo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hermosillo(DstTzInfo): - '''America/Hermosillo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Hermosillo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1942,4,24,6,0,0), -d(1949,1,14,7,0,0), -d(1970,1,1,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), - ] - - _transition_info = [ -i(-26640,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Hermosillo = Hermosillo() - diff --git a/modules/pytz/zoneinfo/America/Indiana/Indianapolis.py b/modules/pytz/zoneinfo/America/Indiana/Indianapolis.py deleted file mode 100644 index 21369f1b..00000000 --- a/modules/pytz/zoneinfo/America/Indiana/Indianapolis.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for America/Indiana/Indianapolis.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Indianapolis(DstTzInfo): - '''America/Indiana/Indianapolis timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Indiana/Indianapolis' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1941,6,22,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Indianapolis = Indianapolis() - diff --git a/modules/pytz/zoneinfo/America/Indiana/Knox.py b/modules/pytz/zoneinfo/America/Indiana/Knox.py deleted file mode 100644 index 86af820b..00000000 --- a/modules/pytz/zoneinfo/America/Indiana/Knox.py +++ /dev/null @@ -1,326 +0,0 @@ -'''tzinfo timezone information for America/Indiana/Knox.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Knox(DstTzInfo): - '''America/Indiana/Knox timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Indiana/Knox' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,10,30,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,10,29,7,0,0), -d(1962,4,29,8,0,0), -d(1963,10,27,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Knox = Knox() - diff --git a/modules/pytz/zoneinfo/America/Indiana/Marengo.py b/modules/pytz/zoneinfo/America/Indiana/Marengo.py deleted file mode 100644 index 3eca6df0..00000000 --- a/modules/pytz/zoneinfo/America/Indiana/Marengo.py +++ /dev/null @@ -1,224 +0,0 @@ -'''tzinfo timezone information for America/Indiana/Marengo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Marengo(DstTzInfo): - '''America/Indiana/Marengo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Indiana/Marengo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,9,25,7,0,0), -d(1956,4,29,8,0,0), -d(1956,9,30,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,9,27,7,0,0), -d(1960,4,24,8,0,0), -d(1960,9,25,7,0,0), -d(1961,4,30,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-18000,0,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Marengo = Marengo() - diff --git a/modules/pytz/zoneinfo/America/Indiana/Vevay.py b/modules/pytz/zoneinfo/America/Indiana/Vevay.py deleted file mode 100644 index 614e1de4..00000000 --- a/modules/pytz/zoneinfo/America/Indiana/Vevay.py +++ /dev/null @@ -1,180 +0,0 @@ -'''tzinfo timezone information for America/Indiana/Vevay.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vevay(DstTzInfo): - '''America/Indiana/Vevay timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Indiana/Vevay' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1954,4,25,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Vevay = Vevay() - diff --git a/modules/pytz/zoneinfo/America/Indiana/__init__.py b/modules/pytz/zoneinfo/America/Indiana/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/America/Indianapolis.py b/modules/pytz/zoneinfo/America/Indianapolis.py deleted file mode 100644 index 5cd52ede..00000000 --- a/modules/pytz/zoneinfo/America/Indianapolis.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for America/Indianapolis.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Indianapolis(DstTzInfo): - '''America/Indianapolis timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Indianapolis' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1941,6,22,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Indianapolis = Indianapolis() - diff --git a/modules/pytz/zoneinfo/America/Inuvik.py b/modules/pytz/zoneinfo/America/Inuvik.py deleted file mode 100644 index c91eb052..00000000 --- a/modules/pytz/zoneinfo/America/Inuvik.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for America/Inuvik.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Inuvik(DstTzInfo): - '''America/Inuvik timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Inuvik' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,10,0,0), -d(1918,10,27,9,0,0), -d(1919,5,25,10,0,0), -d(1919,11,1,7,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1965,4,25,8,0,0), -d(1965,10,31,8,0,0), -d(1979,4,29,10,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-21600,7200,'PDDT'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Inuvik = Inuvik() - diff --git a/modules/pytz/zoneinfo/America/Iqaluit.py b/modules/pytz/zoneinfo/America/Iqaluit.py deleted file mode 100644 index 69597a4e..00000000 --- a/modules/pytz/zoneinfo/America/Iqaluit.py +++ /dev/null @@ -1,270 +0,0 @@ -'''tzinfo timezone information for America/Iqaluit.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Iqaluit(DstTzInfo): - '''America/Iqaluit timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Iqaluit' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,7,0,0), -d(1918,10,27,6,0,0), -d(1919,5,25,7,0,0), -d(1919,11,1,4,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1965,4,25,5,0,0), -d(1965,10,31,5,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-10800,7200,'EDDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Iqaluit = Iqaluit() - diff --git a/modules/pytz/zoneinfo/America/Jamaica.py b/modules/pytz/zoneinfo/America/Jamaica.py deleted file mode 100644 index e9a82f58..00000000 --- a/modules/pytz/zoneinfo/America/Jamaica.py +++ /dev/null @@ -1,62 +0,0 @@ -'''tzinfo timezone information for America/Jamaica.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jamaica(DstTzInfo): - '''America/Jamaica timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Jamaica' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,1,5,7,12), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), - ] - - _transition_info = [ -i(-18420,0,'KMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Jamaica = Jamaica() - diff --git a/modules/pytz/zoneinfo/America/Jujuy.py b/modules/pytz/zoneinfo/America/Jujuy.py deleted file mode 100644 index 3a1025b7..00000000 --- a/modules/pytz/zoneinfo/America/Jujuy.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Jujuy.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jujuy(DstTzInfo): - '''America/Jujuy timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Jujuy' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,28,4,0,0), -d(1991,3,17,3,0,0), -d(1991,10,6,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Jujuy = Jujuy() - diff --git a/modules/pytz/zoneinfo/America/Juneau.py b/modules/pytz/zoneinfo/America/Juneau.py deleted file mode 100644 index def09cc7..00000000 --- a/modules/pytz/zoneinfo/America/Juneau.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for America/Juneau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Juneau(DstTzInfo): - '''America/Juneau timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Juneau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,1,6,10,0,0), -d(1974,10,27,9,0,0), -d(1975,2,23,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1983,11,30,9,0,0), -d(1984,4,29,11,0,0), -d(1984,10,28,10,0,0), -d(1985,4,28,11,0,0), -d(1985,10,27,10,0,0), -d(1986,4,27,11,0,0), -d(1986,10,26,10,0,0), -d(1987,4,5,11,0,0), -d(1987,10,25,10,0,0), -d(1988,4,3,11,0,0), -d(1988,10,30,10,0,0), -d(1989,4,2,11,0,0), -d(1989,10,29,10,0,0), -d(1990,4,1,11,0,0), -d(1990,10,28,10,0,0), -d(1991,4,7,11,0,0), -d(1991,10,27,10,0,0), -d(1992,4,5,11,0,0), -d(1992,10,25,10,0,0), -d(1993,4,4,11,0,0), -d(1993,10,31,10,0,0), -d(1994,4,3,11,0,0), -d(1994,10,30,10,0,0), -d(1995,4,2,11,0,0), -d(1995,10,29,10,0,0), -d(1996,4,7,11,0,0), -d(1996,10,27,10,0,0), -d(1997,4,6,11,0,0), -d(1997,10,26,10,0,0), -d(1998,4,5,11,0,0), -d(1998,10,25,10,0,0), -d(1999,4,4,11,0,0), -d(1999,10,31,10,0,0), -d(2000,4,2,11,0,0), -d(2000,10,29,10,0,0), -d(2001,4,1,11,0,0), -d(2001,10,28,10,0,0), -d(2002,4,7,11,0,0), -d(2002,10,27,10,0,0), -d(2003,4,6,11,0,0), -d(2003,10,26,10,0,0), -d(2004,4,4,11,0,0), -d(2004,10,31,10,0,0), -d(2005,4,3,11,0,0), -d(2005,10,30,10,0,0), -d(2006,4,2,11,0,0), -d(2006,10,29,10,0,0), -d(2007,3,11,11,0,0), -d(2007,11,4,10,0,0), -d(2008,3,9,11,0,0), -d(2008,11,2,10,0,0), -d(2009,3,8,11,0,0), -d(2009,11,1,10,0,0), -d(2010,3,14,11,0,0), -d(2010,11,7,10,0,0), -d(2011,3,13,11,0,0), -d(2011,11,6,10,0,0), -d(2012,3,11,11,0,0), -d(2012,11,4,10,0,0), -d(2013,3,10,11,0,0), -d(2013,11,3,10,0,0), -d(2014,3,9,11,0,0), -d(2014,11,2,10,0,0), -d(2015,3,8,11,0,0), -d(2015,11,1,10,0,0), -d(2016,3,13,11,0,0), -d(2016,11,6,10,0,0), -d(2017,3,12,11,0,0), -d(2017,11,5,10,0,0), -d(2018,3,11,11,0,0), -d(2018,11,4,10,0,0), -d(2019,3,10,11,0,0), -d(2019,11,3,10,0,0), -d(2020,3,8,11,0,0), -d(2020,11,1,10,0,0), -d(2021,3,14,11,0,0), -d(2021,11,7,10,0,0), -d(2022,3,13,11,0,0), -d(2022,11,6,10,0,0), -d(2023,3,12,11,0,0), -d(2023,11,5,10,0,0), -d(2024,3,10,11,0,0), -d(2024,11,3,10,0,0), -d(2025,3,9,11,0,0), -d(2025,11,2,10,0,0), -d(2026,3,8,11,0,0), -d(2026,11,1,10,0,0), -d(2027,3,14,11,0,0), -d(2027,11,7,10,0,0), -d(2028,3,12,11,0,0), -d(2028,11,5,10,0,0), -d(2029,3,11,11,0,0), -d(2029,11,4,10,0,0), -d(2030,3,10,11,0,0), -d(2030,11,3,10,0,0), -d(2031,3,9,11,0,0), -d(2031,11,2,10,0,0), -d(2032,3,14,11,0,0), -d(2032,11,7,10,0,0), -d(2033,3,13,11,0,0), -d(2033,11,6,10,0,0), -d(2034,3,12,11,0,0), -d(2034,11,5,10,0,0), -d(2035,3,11,11,0,0), -d(2035,11,4,10,0,0), -d(2036,3,9,11,0,0), -d(2036,11,2,10,0,0), -d(2037,3,8,11,0,0), -d(2037,11,1,10,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-32400,0,'YST'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), - ] - -Juneau = Juneau() - diff --git a/modules/pytz/zoneinfo/America/Kentucky/Louisville.py b/modules/pytz/zoneinfo/America/Kentucky/Louisville.py deleted file mode 100644 index 501f4566..00000000 --- a/modules/pytz/zoneinfo/America/Kentucky/Louisville.py +++ /dev/null @@ -1,374 +0,0 @@ -'''tzinfo timezone information for America/Kentucky/Louisville.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Louisville(DstTzInfo): - '''America/Kentucky/Louisville timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Kentucky/Louisville' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1921,5,1,8,0,0), -d(1921,9,1,7,0,0), -d(1941,4,27,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,1,1,6,0,0), -d(1946,6,2,7,0,0), -d(1947,4,27,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,9,25,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,10,27,7,0,0), -d(1958,4,27,8,0,0), -d(1958,10,26,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,7,23,7,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-18000,0,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Louisville = Louisville() - diff --git a/modules/pytz/zoneinfo/America/Kentucky/Monticello.py b/modules/pytz/zoneinfo/America/Kentucky/Monticello.py deleted file mode 100644 index a74d82b9..00000000 --- a/modules/pytz/zoneinfo/America/Kentucky/Monticello.py +++ /dev/null @@ -1,314 +0,0 @@ -'''tzinfo timezone information for America/Kentucky/Monticello.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Monticello(DstTzInfo): - '''America/Kentucky/Monticello timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Kentucky/Monticello' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Monticello = Monticello() - diff --git a/modules/pytz/zoneinfo/America/Kentucky/__init__.py b/modules/pytz/zoneinfo/America/Kentucky/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/America/Knox_IN.py b/modules/pytz/zoneinfo/America/Knox_IN.py deleted file mode 100644 index 4463c54a..00000000 --- a/modules/pytz/zoneinfo/America/Knox_IN.py +++ /dev/null @@ -1,326 +0,0 @@ -'''tzinfo timezone information for America/Knox_IN.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Knox_IN(DstTzInfo): - '''America/Knox_IN timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Knox_IN' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,10,30,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,10,29,7,0,0), -d(1962,4,29,8,0,0), -d(1963,10,27,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Knox_IN = Knox_IN() - diff --git a/modules/pytz/zoneinfo/America/La_Paz.py b/modules/pytz/zoneinfo/America/La_Paz.py deleted file mode 100644 index bca04b08..00000000 --- a/modules/pytz/zoneinfo/America/La_Paz.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/La_Paz.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class La_Paz(DstTzInfo): - '''America/La_Paz timezone definition. See datetime.tzinfo for details''' - - zone = 'America/La_Paz' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1931,10,15,4,32,36), -d(1932,3,21,3,32,36), - ] - - _transition_info = [ -i(-16380,0,'CMT'), -i(-12780,3600,'BOST'), -i(-14400,0,'BOT'), - ] - -La_Paz = La_Paz() - diff --git a/modules/pytz/zoneinfo/America/Lima.py b/modules/pytz/zoneinfo/America/Lima.py deleted file mode 100644 index 657d87a5..00000000 --- a/modules/pytz/zoneinfo/America/Lima.py +++ /dev/null @@ -1,50 +0,0 @@ -'''tzinfo timezone information for America/Lima.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lima(DstTzInfo): - '''America/Lima timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Lima' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,7,28,5,8,36), -d(1938,1,1,5,0,0), -d(1938,4,1,4,0,0), -d(1938,9,25,5,0,0), -d(1939,3,26,4,0,0), -d(1939,9,24,5,0,0), -d(1940,3,24,4,0,0), -d(1986,1,1,5,0,0), -d(1986,4,1,4,0,0), -d(1987,1,1,5,0,0), -d(1987,4,1,4,0,0), -d(1990,1,1,5,0,0), -d(1990,4,1,4,0,0), -d(1994,1,1,5,0,0), -d(1994,4,1,4,0,0), - ] - - _transition_info = [ -i(-18540,0,'LMT'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), -i(-14400,3600,'PEST'), -i(-18000,0,'PET'), - ] - -Lima = Lima() - diff --git a/modules/pytz/zoneinfo/America/Los_Angeles.py b/modules/pytz/zoneinfo/America/Los_Angeles.py deleted file mode 100644 index 5add3d1a..00000000 --- a/modules/pytz/zoneinfo/America/Los_Angeles.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for America/Los_Angeles.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Los_Angeles(DstTzInfo): - '''America/Los_Angeles timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Los_Angeles' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,10,0,0), -d(1918,10,27,9,0,0), -d(1919,3,30,10,0,0), -d(1919,10,26,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1948,3,14,10,0,0), -d(1949,1,1,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,1,6,10,0,0), -d(1974,10,27,9,0,0), -d(1975,2,23,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,3,11,10,0,0), -d(2007,11,4,9,0,0), -d(2008,3,9,10,0,0), -d(2008,11,2,9,0,0), -d(2009,3,8,10,0,0), -d(2009,11,1,9,0,0), -d(2010,3,14,10,0,0), -d(2010,11,7,9,0,0), -d(2011,3,13,10,0,0), -d(2011,11,6,9,0,0), -d(2012,3,11,10,0,0), -d(2012,11,4,9,0,0), -d(2013,3,10,10,0,0), -d(2013,11,3,9,0,0), -d(2014,3,9,10,0,0), -d(2014,11,2,9,0,0), -d(2015,3,8,10,0,0), -d(2015,11,1,9,0,0), -d(2016,3,13,10,0,0), -d(2016,11,6,9,0,0), -d(2017,3,12,10,0,0), -d(2017,11,5,9,0,0), -d(2018,3,11,10,0,0), -d(2018,11,4,9,0,0), -d(2019,3,10,10,0,0), -d(2019,11,3,9,0,0), -d(2020,3,8,10,0,0), -d(2020,11,1,9,0,0), -d(2021,3,14,10,0,0), -d(2021,11,7,9,0,0), -d(2022,3,13,10,0,0), -d(2022,11,6,9,0,0), -d(2023,3,12,10,0,0), -d(2023,11,5,9,0,0), -d(2024,3,10,10,0,0), -d(2024,11,3,9,0,0), -d(2025,3,9,10,0,0), -d(2025,11,2,9,0,0), -d(2026,3,8,10,0,0), -d(2026,11,1,9,0,0), -d(2027,3,14,10,0,0), -d(2027,11,7,9,0,0), -d(2028,3,12,10,0,0), -d(2028,11,5,9,0,0), -d(2029,3,11,10,0,0), -d(2029,11,4,9,0,0), -d(2030,3,10,10,0,0), -d(2030,11,3,9,0,0), -d(2031,3,9,10,0,0), -d(2031,11,2,9,0,0), -d(2032,3,14,10,0,0), -d(2032,11,7,9,0,0), -d(2033,3,13,10,0,0), -d(2033,11,6,9,0,0), -d(2034,3,12,10,0,0), -d(2034,11,5,9,0,0), -d(2035,3,11,10,0,0), -d(2035,11,4,9,0,0), -d(2036,3,9,10,0,0), -d(2036,11,2,9,0,0), -d(2037,3,8,10,0,0), -d(2037,11,1,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Los_Angeles = Los_Angeles() - diff --git a/modules/pytz/zoneinfo/America/Louisville.py b/modules/pytz/zoneinfo/America/Louisville.py deleted file mode 100644 index 1c0e3ccf..00000000 --- a/modules/pytz/zoneinfo/America/Louisville.py +++ /dev/null @@ -1,374 +0,0 @@ -'''tzinfo timezone information for America/Louisville.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Louisville(DstTzInfo): - '''America/Louisville timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Louisville' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1921,5,1,8,0,0), -d(1921,9,1,7,0,0), -d(1941,4,27,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,1,1,6,0,0), -d(1946,6,2,7,0,0), -d(1947,4,27,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,9,25,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,10,27,7,0,0), -d(1958,4,27,8,0,0), -d(1958,10,26,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,7,23,7,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-18000,0,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Louisville = Louisville() - diff --git a/modules/pytz/zoneinfo/America/Maceio.py b/modules/pytz/zoneinfo/America/Maceio.py deleted file mode 100644 index d4ac830c..00000000 --- a/modules/pytz/zoneinfo/America/Maceio.py +++ /dev/null @@ -1,102 +0,0 @@ -'''tzinfo timezone information for America/Maceio.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Maceio(DstTzInfo): - '''America/Maceio timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Maceio' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,22,52), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1995,10,15,3,0,0), -d(1996,2,11,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2000,10,22,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), - ] - - _transition_info = [ -i(-8580,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Maceio = Maceio() - diff --git a/modules/pytz/zoneinfo/America/Managua.py b/modules/pytz/zoneinfo/America/Managua.py deleted file mode 100644 index 3d6d01b0..00000000 --- a/modules/pytz/zoneinfo/America/Managua.py +++ /dev/null @@ -1,46 +0,0 @@ -'''tzinfo timezone information for America/Managua.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Managua(DstTzInfo): - '''America/Managua timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Managua' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1934,6,23,5,45,12), -d(1973,5,1,6,0,0), -d(1975,2,16,5,0,0), -d(1979,3,18,6,0,0), -d(1979,6,25,5,0,0), -d(1980,3,16,6,0,0), -d(1980,6,23,5,0,0), -d(1992,1,1,10,0,0), -d(1992,9,24,5,0,0), -d(1993,1,1,10,0,0), -d(1998,12,1,5,0,0), -d(2005,4,10,6,0,0), -d(2005,10,2,5,0,0), - ] - - _transition_info = [ -i(-20700,0,'MMT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Managua = Managua() - diff --git a/modules/pytz/zoneinfo/America/Manaus.py b/modules/pytz/zoneinfo/America/Manaus.py deleted file mode 100644 index b190af1b..00000000 --- a/modules/pytz/zoneinfo/America/Manaus.py +++ /dev/null @@ -1,82 +0,0 @@ -'''tzinfo timezone information for America/Manaus.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Manaus(DstTzInfo): - '''America/Manaus timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Manaus' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,0,4), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), -d(1993,10,17,4,0,0), -d(1994,2,20,3,0,0), - ] - - _transition_info = [ -i(-14400,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), - ] - -Manaus = Manaus() - diff --git a/modules/pytz/zoneinfo/America/Martinique.py b/modules/pytz/zoneinfo/America/Martinique.py deleted file mode 100644 index 7154b4f2..00000000 --- a/modules/pytz/zoneinfo/America/Martinique.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for America/Martinique.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Martinique(DstTzInfo): - '''America/Martinique timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Martinique' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,1,4,4,20), -d(1980,4,6,4,0,0), -d(1980,9,28,3,0,0), - ] - - _transition_info = [ -i(-14640,0,'FFMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Martinique = Martinique() - diff --git a/modules/pytz/zoneinfo/America/Mazatlan.py b/modules/pytz/zoneinfo/America/Mazatlan.py deleted file mode 100644 index 30490aa4..00000000 --- a/modules/pytz/zoneinfo/America/Mazatlan.py +++ /dev/null @@ -1,206 +0,0 @@ -'''tzinfo timezone information for America/Mazatlan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mazatlan(DstTzInfo): - '''America/Mazatlan timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Mazatlan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1942,4,24,6,0,0), -d(1949,1,14,7,0,0), -d(1970,1,1,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,5,6,9,0,0), -d(2001,9,30,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-25560,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Mazatlan = Mazatlan() - diff --git a/modules/pytz/zoneinfo/America/Mendoza.py b/modules/pytz/zoneinfo/America/Mendoza.py deleted file mode 100644 index 2c00395a..00000000 --- a/modules/pytz/zoneinfo/America/Mendoza.py +++ /dev/null @@ -1,136 +0,0 @@ -'''tzinfo timezone information for America/Mendoza.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mendoza(DstTzInfo): - '''America/Mendoza timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Mendoza' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,15,4,0,0), -d(1991,3,1,3,0,0), -d(1991,10,15,4,0,0), -d(1992,3,1,3,0,0), -d(1992,10,18,4,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), -d(2004,5,23,3,0,0), -d(2004,9,26,4,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-10800,3600,'WARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'WART'), -i(-10800,0,'ART'), - ] - -Mendoza = Mendoza() - diff --git a/modules/pytz/zoneinfo/America/Menominee.py b/modules/pytz/zoneinfo/America/Menominee.py deleted file mode 100644 index 63a65310..00000000 --- a/modules/pytz/zoneinfo/America/Menominee.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for America/Menominee.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Menominee(DstTzInfo): - '''America/Menominee timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Menominee' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1966,4,24,8,0,0), -d(1966,10,30,7,0,0), -d(1969,4,27,8,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-18000,0,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Menominee = Menominee() - diff --git a/modules/pytz/zoneinfo/America/Merida.py b/modules/pytz/zoneinfo/America/Merida.py deleted file mode 100644 index e50f96ea..00000000 --- a/modules/pytz/zoneinfo/America/Merida.py +++ /dev/null @@ -1,194 +0,0 @@ -'''tzinfo timezone information for America/Merida.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Merida(DstTzInfo): - '''America/Merida timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Merida' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,6,0,0), -d(1981,12,23,6,0,0), -d(1982,12,2,5,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,5,6,8,0,0), -d(2001,9,30,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,4,1,8,0,0), -d(2007,10,28,7,0,0), -d(2008,4,6,8,0,0), -d(2008,10,26,7,0,0), -d(2009,4,5,8,0,0), -d(2009,10,25,7,0,0), -d(2010,4,4,8,0,0), -d(2010,10,31,7,0,0), -d(2011,4,3,8,0,0), -d(2011,10,30,7,0,0), -d(2012,4,1,8,0,0), -d(2012,10,28,7,0,0), -d(2013,4,7,8,0,0), -d(2013,10,27,7,0,0), -d(2014,4,6,8,0,0), -d(2014,10,26,7,0,0), -d(2015,4,5,8,0,0), -d(2015,10,25,7,0,0), -d(2016,4,3,8,0,0), -d(2016,10,30,7,0,0), -d(2017,4,2,8,0,0), -d(2017,10,29,7,0,0), -d(2018,4,1,8,0,0), -d(2018,10,28,7,0,0), -d(2019,4,7,8,0,0), -d(2019,10,27,7,0,0), -d(2020,4,5,8,0,0), -d(2020,10,25,7,0,0), -d(2021,4,4,8,0,0), -d(2021,10,31,7,0,0), -d(2022,4,3,8,0,0), -d(2022,10,30,7,0,0), -d(2023,4,2,8,0,0), -d(2023,10,29,7,0,0), -d(2024,4,7,8,0,0), -d(2024,10,27,7,0,0), -d(2025,4,6,8,0,0), -d(2025,10,26,7,0,0), -d(2026,4,5,8,0,0), -d(2026,10,25,7,0,0), -d(2027,4,4,8,0,0), -d(2027,10,31,7,0,0), -d(2028,4,2,8,0,0), -d(2028,10,29,7,0,0), -d(2029,4,1,8,0,0), -d(2029,10,28,7,0,0), -d(2030,4,7,8,0,0), -d(2030,10,27,7,0,0), -d(2031,4,6,8,0,0), -d(2031,10,26,7,0,0), -d(2032,4,4,8,0,0), -d(2032,10,31,7,0,0), -d(2033,4,3,8,0,0), -d(2033,10,30,7,0,0), -d(2034,4,2,8,0,0), -d(2034,10,29,7,0,0), -d(2035,4,1,8,0,0), -d(2035,10,28,7,0,0), -d(2036,4,6,8,0,0), -d(2036,10,26,7,0,0), -d(2037,4,5,8,0,0), -d(2037,10,25,7,0,0), - ] - - _transition_info = [ -i(-21480,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Merida = Merida() - diff --git a/modules/pytz/zoneinfo/America/Mexico_City.py b/modules/pytz/zoneinfo/America/Mexico_City.py deleted file mode 100644 index e9b6ed0b..00000000 --- a/modules/pytz/zoneinfo/America/Mexico_City.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for America/Mexico_City.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mexico_City(DstTzInfo): - '''America/Mexico_City timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Mexico_City' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1939,2,5,6,0,0), -d(1939,6,25,5,0,0), -d(1940,12,9,6,0,0), -d(1941,4,1,5,0,0), -d(1943,12,16,6,0,0), -d(1944,5,1,5,0,0), -d(1950,2,12,6,0,0), -d(1950,7,30,5,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,5,6,8,0,0), -d(2001,9,30,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,4,1,8,0,0), -d(2007,10,28,7,0,0), -d(2008,4,6,8,0,0), -d(2008,10,26,7,0,0), -d(2009,4,5,8,0,0), -d(2009,10,25,7,0,0), -d(2010,4,4,8,0,0), -d(2010,10,31,7,0,0), -d(2011,4,3,8,0,0), -d(2011,10,30,7,0,0), -d(2012,4,1,8,0,0), -d(2012,10,28,7,0,0), -d(2013,4,7,8,0,0), -d(2013,10,27,7,0,0), -d(2014,4,6,8,0,0), -d(2014,10,26,7,0,0), -d(2015,4,5,8,0,0), -d(2015,10,25,7,0,0), -d(2016,4,3,8,0,0), -d(2016,10,30,7,0,0), -d(2017,4,2,8,0,0), -d(2017,10,29,7,0,0), -d(2018,4,1,8,0,0), -d(2018,10,28,7,0,0), -d(2019,4,7,8,0,0), -d(2019,10,27,7,0,0), -d(2020,4,5,8,0,0), -d(2020,10,25,7,0,0), -d(2021,4,4,8,0,0), -d(2021,10,31,7,0,0), -d(2022,4,3,8,0,0), -d(2022,10,30,7,0,0), -d(2023,4,2,8,0,0), -d(2023,10,29,7,0,0), -d(2024,4,7,8,0,0), -d(2024,10,27,7,0,0), -d(2025,4,6,8,0,0), -d(2025,10,26,7,0,0), -d(2026,4,5,8,0,0), -d(2026,10,25,7,0,0), -d(2027,4,4,8,0,0), -d(2027,10,31,7,0,0), -d(2028,4,2,8,0,0), -d(2028,10,29,7,0,0), -d(2029,4,1,8,0,0), -d(2029,10,28,7,0,0), -d(2030,4,7,8,0,0), -d(2030,10,27,7,0,0), -d(2031,4,6,8,0,0), -d(2031,10,26,7,0,0), -d(2032,4,4,8,0,0), -d(2032,10,31,7,0,0), -d(2033,4,3,8,0,0), -d(2033,10,30,7,0,0), -d(2034,4,2,8,0,0), -d(2034,10,29,7,0,0), -d(2035,4,1,8,0,0), -d(2035,10,28,7,0,0), -d(2036,4,6,8,0,0), -d(2036,10,26,7,0,0), -d(2037,4,5,8,0,0), -d(2037,10,25,7,0,0), - ] - - _transition_info = [ -i(-23820,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Mexico_City = Mexico_City() - diff --git a/modules/pytz/zoneinfo/America/Miquelon.py b/modules/pytz/zoneinfo/America/Miquelon.py deleted file mode 100644 index f4dedbfc..00000000 --- a/modules/pytz/zoneinfo/America/Miquelon.py +++ /dev/null @@ -1,228 +0,0 @@ -'''tzinfo timezone information for America/Miquelon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Miquelon(DstTzInfo): - '''America/Miquelon timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Miquelon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,15,3,44,40), -d(1980,5,1,4,0,0), -d(1987,4,5,5,0,0), -d(1987,10,25,4,0,0), -d(1988,4,3,5,0,0), -d(1988,10,30,4,0,0), -d(1989,4,2,5,0,0), -d(1989,10,29,4,0,0), -d(1990,4,1,5,0,0), -d(1990,10,28,4,0,0), -d(1991,4,7,5,0,0), -d(1991,10,27,4,0,0), -d(1992,4,5,5,0,0), -d(1992,10,25,4,0,0), -d(1993,4,4,5,0,0), -d(1993,10,31,4,0,0), -d(1994,4,3,5,0,0), -d(1994,10,30,4,0,0), -d(1995,4,2,5,0,0), -d(1995,10,29,4,0,0), -d(1996,4,7,5,0,0), -d(1996,10,27,4,0,0), -d(1997,4,6,5,0,0), -d(1997,10,26,4,0,0), -d(1998,4,5,5,0,0), -d(1998,10,25,4,0,0), -d(1999,4,4,5,0,0), -d(1999,10,31,4,0,0), -d(2000,4,2,5,0,0), -d(2000,10,29,4,0,0), -d(2001,4,1,5,0,0), -d(2001,10,28,4,0,0), -d(2002,4,7,5,0,0), -d(2002,10,27,4,0,0), -d(2003,4,6,5,0,0), -d(2003,10,26,4,0,0), -d(2004,4,4,5,0,0), -d(2004,10,31,4,0,0), -d(2005,4,3,5,0,0), -d(2005,10,30,4,0,0), -d(2006,4,2,5,0,0), -d(2006,10,29,4,0,0), -d(2007,3,11,5,0,0), -d(2007,11,4,4,0,0), -d(2008,3,9,5,0,0), -d(2008,11,2,4,0,0), -d(2009,3,8,5,0,0), -d(2009,11,1,4,0,0), -d(2010,3,14,5,0,0), -d(2010,11,7,4,0,0), -d(2011,3,13,5,0,0), -d(2011,11,6,4,0,0), -d(2012,3,11,5,0,0), -d(2012,11,4,4,0,0), -d(2013,3,10,5,0,0), -d(2013,11,3,4,0,0), -d(2014,3,9,5,0,0), -d(2014,11,2,4,0,0), -d(2015,3,8,5,0,0), -d(2015,11,1,4,0,0), -d(2016,3,13,5,0,0), -d(2016,11,6,4,0,0), -d(2017,3,12,5,0,0), -d(2017,11,5,4,0,0), -d(2018,3,11,5,0,0), -d(2018,11,4,4,0,0), -d(2019,3,10,5,0,0), -d(2019,11,3,4,0,0), -d(2020,3,8,5,0,0), -d(2020,11,1,4,0,0), -d(2021,3,14,5,0,0), -d(2021,11,7,4,0,0), -d(2022,3,13,5,0,0), -d(2022,11,6,4,0,0), -d(2023,3,12,5,0,0), -d(2023,11,5,4,0,0), -d(2024,3,10,5,0,0), -d(2024,11,3,4,0,0), -d(2025,3,9,5,0,0), -d(2025,11,2,4,0,0), -d(2026,3,8,5,0,0), -d(2026,11,1,4,0,0), -d(2027,3,14,5,0,0), -d(2027,11,7,4,0,0), -d(2028,3,12,5,0,0), -d(2028,11,5,4,0,0), -d(2029,3,11,5,0,0), -d(2029,11,4,4,0,0), -d(2030,3,10,5,0,0), -d(2030,11,3,4,0,0), -d(2031,3,9,5,0,0), -d(2031,11,2,4,0,0), -d(2032,3,14,5,0,0), -d(2032,11,7,4,0,0), -d(2033,3,13,5,0,0), -d(2033,11,6,4,0,0), -d(2034,3,12,5,0,0), -d(2034,11,5,4,0,0), -d(2035,3,11,5,0,0), -d(2035,11,4,4,0,0), -d(2036,3,9,5,0,0), -d(2036,11,2,4,0,0), -d(2037,3,8,5,0,0), -d(2037,11,1,4,0,0), - ] - - _transition_info = [ -i(-13500,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), -i(-7200,3600,'PMDT'), -i(-10800,0,'PMST'), - ] - -Miquelon = Miquelon() - diff --git a/modules/pytz/zoneinfo/America/Monterrey.py b/modules/pytz/zoneinfo/America/Monterrey.py deleted file mode 100644 index 32b924a7..00000000 --- a/modules/pytz/zoneinfo/America/Monterrey.py +++ /dev/null @@ -1,194 +0,0 @@ -'''tzinfo timezone information for America/Monterrey.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Monterrey(DstTzInfo): - '''America/Monterrey timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Monterrey' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,6,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,5,6,8,0,0), -d(2001,9,30,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,4,1,8,0,0), -d(2007,10,28,7,0,0), -d(2008,4,6,8,0,0), -d(2008,10,26,7,0,0), -d(2009,4,5,8,0,0), -d(2009,10,25,7,0,0), -d(2010,4,4,8,0,0), -d(2010,10,31,7,0,0), -d(2011,4,3,8,0,0), -d(2011,10,30,7,0,0), -d(2012,4,1,8,0,0), -d(2012,10,28,7,0,0), -d(2013,4,7,8,0,0), -d(2013,10,27,7,0,0), -d(2014,4,6,8,0,0), -d(2014,10,26,7,0,0), -d(2015,4,5,8,0,0), -d(2015,10,25,7,0,0), -d(2016,4,3,8,0,0), -d(2016,10,30,7,0,0), -d(2017,4,2,8,0,0), -d(2017,10,29,7,0,0), -d(2018,4,1,8,0,0), -d(2018,10,28,7,0,0), -d(2019,4,7,8,0,0), -d(2019,10,27,7,0,0), -d(2020,4,5,8,0,0), -d(2020,10,25,7,0,0), -d(2021,4,4,8,0,0), -d(2021,10,31,7,0,0), -d(2022,4,3,8,0,0), -d(2022,10,30,7,0,0), -d(2023,4,2,8,0,0), -d(2023,10,29,7,0,0), -d(2024,4,7,8,0,0), -d(2024,10,27,7,0,0), -d(2025,4,6,8,0,0), -d(2025,10,26,7,0,0), -d(2026,4,5,8,0,0), -d(2026,10,25,7,0,0), -d(2027,4,4,8,0,0), -d(2027,10,31,7,0,0), -d(2028,4,2,8,0,0), -d(2028,10,29,7,0,0), -d(2029,4,1,8,0,0), -d(2029,10,28,7,0,0), -d(2030,4,7,8,0,0), -d(2030,10,27,7,0,0), -d(2031,4,6,8,0,0), -d(2031,10,26,7,0,0), -d(2032,4,4,8,0,0), -d(2032,10,31,7,0,0), -d(2033,4,3,8,0,0), -d(2033,10,30,7,0,0), -d(2034,4,2,8,0,0), -d(2034,10,29,7,0,0), -d(2035,4,1,8,0,0), -d(2035,10,28,7,0,0), -d(2036,4,6,8,0,0), -d(2036,10,26,7,0,0), -d(2037,4,5,8,0,0), -d(2037,10,25,7,0,0), - ] - - _transition_info = [ -i(-24060,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Monterrey = Monterrey() - diff --git a/modules/pytz/zoneinfo/America/Montevideo.py b/modules/pytz/zoneinfo/America/Montevideo.py deleted file mode 100644 index abe4f61a..00000000 --- a/modules/pytz/zoneinfo/America/Montevideo.py +++ /dev/null @@ -1,154 +0,0 @@ -'''tzinfo timezone information for America/Montevideo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Montevideo(DstTzInfo): - '''America/Montevideo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Montevideo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,3,44,44), -d(1923,10,2,3,30,0), -d(1924,4,1,3,0,0), -d(1924,10,1,3,30,0), -d(1925,4,1,3,0,0), -d(1925,10,1,3,30,0), -d(1926,4,1,3,0,0), -d(1933,10,29,3,30,0), -d(1934,4,1,3,0,0), -d(1934,10,28,3,30,0), -d(1935,3,31,3,0,0), -d(1935,10,27,3,30,0), -d(1936,3,29,3,0,0), -d(1936,11,1,3,30,0), -d(1937,3,28,3,0,0), -d(1937,10,31,3,30,0), -d(1938,3,27,3,0,0), -d(1938,10,30,3,30,0), -d(1939,3,26,3,0,0), -d(1939,10,29,3,30,0), -d(1940,3,31,3,0,0), -d(1940,10,27,3,30,0), -d(1941,3,30,3,0,0), -d(1942,1,1,3,30,0), -d(1942,12,14,3,0,0), -d(1943,3,14,2,0,0), -d(1959,5,24,3,0,0), -d(1959,11,15,2,0,0), -d(1960,1,17,3,0,0), -d(1960,3,6,2,0,0), -d(1965,4,4,3,0,0), -d(1965,9,26,2,0,0), -d(1966,4,3,3,0,0), -d(1966,10,31,2,0,0), -d(1967,4,2,3,0,0), -d(1967,10,31,2,0,0), -d(1968,5,27,3,0,0), -d(1968,12,2,2,30,0), -d(1969,5,27,3,0,0), -d(1969,12,2,2,30,0), -d(1970,5,27,3,0,0), -d(1970,12,2,2,30,0), -d(1972,4,24,3,0,0), -d(1972,8,15,2,0,0), -d(1974,3,10,3,0,0), -d(1974,12,22,2,30,0), -d(1976,10,1,2,0,0), -d(1977,12,4,3,0,0), -d(1978,4,1,2,0,0), -d(1979,10,1,3,0,0), -d(1980,5,1,2,0,0), -d(1987,12,14,3,0,0), -d(1988,3,14,2,0,0), -d(1988,12,11,3,0,0), -d(1989,3,12,2,0,0), -d(1989,10,29,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,27,3,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,2,28,2,0,0), -d(2004,9,19,3,0,0), -d(2005,3,27,4,0,0), -d(2005,10,9,5,0,0), -d(2006,3,12,4,0,0), - ] - - _transition_info = [ -i(-13500,0,'MMT'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-12600,0,'UYT'), -i(-10800,1800,'UYHST'), -i(-7200,5400,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-9000,1800,'UYHST'), -i(-10800,0,'UYT'), -i(-9000,1800,'UYHST'), -i(-10800,0,'UYT'), -i(-9000,1800,'UYHST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-9000,1800,'UYHST'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), -i(-7200,3600,'UYST'), -i(-10800,0,'UYT'), - ] - -Montevideo = Montevideo() - diff --git a/modules/pytz/zoneinfo/America/Montreal.py b/modules/pytz/zoneinfo/America/Montreal.py deleted file mode 100644 index f780e39f..00000000 --- a/modules/pytz/zoneinfo/America/Montreal.py +++ /dev/null @@ -1,484 +0,0 @@ -'''tzinfo timezone information for America/Montreal.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Montreal(DstTzInfo): - '''America/Montreal timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Montreal' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,3,25,7,0,0), -d(1917,4,24,4,0,0), -d(1918,4,14,7,0,0), -d(1918,10,31,6,0,0), -d(1919,3,31,7,30,0), -d(1919,10,25,6,30,0), -d(1920,5,2,7,30,0), -d(1920,10,3,6,30,0), -d(1921,5,1,7,0,0), -d(1921,10,2,6,30,0), -d(1922,4,30,7,0,0), -d(1922,10,1,6,30,0), -d(1924,5,17,7,0,0), -d(1924,9,28,6,30,0), -d(1925,5,3,7,0,0), -d(1925,9,27,6,30,0), -d(1926,5,2,7,0,0), -d(1926,9,26,6,30,0), -d(1927,5,1,5,0,0), -d(1927,9,25,4,0,0), -d(1928,4,29,5,0,0), -d(1928,9,30,4,0,0), -d(1929,4,28,5,0,0), -d(1929,9,29,4,0,0), -d(1930,4,27,5,0,0), -d(1930,9,28,4,0,0), -d(1931,4,26,5,0,0), -d(1931,9,27,4,0,0), -d(1932,5,1,5,0,0), -d(1932,9,25,4,0,0), -d(1933,4,30,5,0,0), -d(1933,10,1,4,0,0), -d(1934,4,29,5,0,0), -d(1934,9,30,4,0,0), -d(1935,4,28,5,0,0), -d(1935,9,29,4,0,0), -d(1936,4,26,5,0,0), -d(1936,9,27,4,0,0), -d(1937,4,25,5,0,0), -d(1937,9,26,4,0,0), -d(1938,4,24,5,0,0), -d(1938,9,25,4,0,0), -d(1939,4,30,5,0,0), -d(1939,9,24,4,0,0), -d(1940,4,28,5,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,7,0,0), -d(1947,9,28,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1949,4,24,7,0,0), -d(1949,10,30,6,0,0), -d(1950,4,30,7,0,0), -d(1950,10,29,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,9,25,6,0,0), -d(1956,4,29,7,0,0), -d(1956,9,30,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Montreal = Montreal() - diff --git a/modules/pytz/zoneinfo/America/Montserrat.py b/modules/pytz/zoneinfo/America/Montserrat.py deleted file mode 100644 index 65ba519e..00000000 --- a/modules/pytz/zoneinfo/America/Montserrat.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Montserrat.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Montserrat(DstTzInfo): - '''America/Montserrat timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Montserrat' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,9,52), - ] - - _transition_info = [ -i(-14940,0,'LMT'), -i(-14400,0,'AST'), - ] - -Montserrat = Montserrat() - diff --git a/modules/pytz/zoneinfo/America/Nassau.py b/modules/pytz/zoneinfo/America/Nassau.py deleted file mode 100644 index d4bcdada..00000000 --- a/modules/pytz/zoneinfo/America/Nassau.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for America/Nassau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nassau(DstTzInfo): - '''America/Nassau timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Nassau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,2,5,9,24), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,4,1,7,0,0), -d(2007,10,28,6,0,0), -d(2008,4,6,7,0,0), -d(2008,10,26,6,0,0), -d(2009,4,5,7,0,0), -d(2009,10,25,6,0,0), -d(2010,4,4,7,0,0), -d(2010,10,31,6,0,0), -d(2011,4,3,7,0,0), -d(2011,10,30,6,0,0), -d(2012,4,1,7,0,0), -d(2012,10,28,6,0,0), -d(2013,4,7,7,0,0), -d(2013,10,27,6,0,0), -d(2014,4,6,7,0,0), -d(2014,10,26,6,0,0), -d(2015,4,5,7,0,0), -d(2015,10,25,6,0,0), -d(2016,4,3,7,0,0), -d(2016,10,30,6,0,0), -d(2017,4,2,7,0,0), -d(2017,10,29,6,0,0), -d(2018,4,1,7,0,0), -d(2018,10,28,6,0,0), -d(2019,4,7,7,0,0), -d(2019,10,27,6,0,0), -d(2020,4,5,7,0,0), -d(2020,10,25,6,0,0), -d(2021,4,4,7,0,0), -d(2021,10,31,6,0,0), -d(2022,4,3,7,0,0), -d(2022,10,30,6,0,0), -d(2023,4,2,7,0,0), -d(2023,10,29,6,0,0), -d(2024,4,7,7,0,0), -d(2024,10,27,6,0,0), -d(2025,4,6,7,0,0), -d(2025,10,26,6,0,0), -d(2026,4,5,7,0,0), -d(2026,10,25,6,0,0), -d(2027,4,4,7,0,0), -d(2027,10,31,6,0,0), -d(2028,4,2,7,0,0), -d(2028,10,29,6,0,0), -d(2029,4,1,7,0,0), -d(2029,10,28,6,0,0), -d(2030,4,7,7,0,0), -d(2030,10,27,6,0,0), -d(2031,4,6,7,0,0), -d(2031,10,26,6,0,0), -d(2032,4,4,7,0,0), -d(2032,10,31,6,0,0), -d(2033,4,3,7,0,0), -d(2033,10,30,6,0,0), -d(2034,4,2,7,0,0), -d(2034,10,29,6,0,0), -d(2035,4,1,7,0,0), -d(2035,10,28,6,0,0), -d(2036,4,6,7,0,0), -d(2036,10,26,6,0,0), -d(2037,4,5,7,0,0), -d(2037,10,25,6,0,0), - ] - - _transition_info = [ -i(-18540,0,'LMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Nassau = Nassau() - diff --git a/modules/pytz/zoneinfo/America/New_York.py b/modules/pytz/zoneinfo/America/New_York.py deleted file mode 100644 index 9acebd98..00000000 --- a/modules/pytz/zoneinfo/America/New_York.py +++ /dev/null @@ -1,490 +0,0 @@ -'''tzinfo timezone information for America/New_York.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class New_York(DstTzInfo): - '''America/New_York timezone definition. See datetime.tzinfo for details''' - - zone = 'America/New_York' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,7,0,0), -d(1918,10,27,6,0,0), -d(1919,3,30,7,0,0), -d(1919,10,26,6,0,0), -d(1920,3,28,7,0,0), -d(1920,10,31,6,0,0), -d(1921,4,24,7,0,0), -d(1921,9,25,6,0,0), -d(1922,4,30,7,0,0), -d(1922,9,24,6,0,0), -d(1923,4,29,7,0,0), -d(1923,9,30,6,0,0), -d(1924,4,27,7,0,0), -d(1924,9,28,6,0,0), -d(1925,4,26,7,0,0), -d(1925,9,27,6,0,0), -d(1926,4,25,7,0,0), -d(1926,9,26,6,0,0), -d(1927,4,24,7,0,0), -d(1927,9,25,6,0,0), -d(1928,4,29,7,0,0), -d(1928,9,30,6,0,0), -d(1929,4,28,7,0,0), -d(1929,9,29,6,0,0), -d(1930,4,27,7,0,0), -d(1930,9,28,6,0,0), -d(1931,4,26,7,0,0), -d(1931,9,27,6,0,0), -d(1932,4,24,7,0,0), -d(1932,9,25,6,0,0), -d(1933,4,30,7,0,0), -d(1933,9,24,6,0,0), -d(1934,4,29,7,0,0), -d(1934,9,30,6,0,0), -d(1935,4,28,7,0,0), -d(1935,9,29,6,0,0), -d(1936,4,26,7,0,0), -d(1936,9,27,6,0,0), -d(1937,4,25,7,0,0), -d(1937,9,26,6,0,0), -d(1938,4,24,7,0,0), -d(1938,9,25,6,0,0), -d(1939,4,30,7,0,0), -d(1939,9,24,6,0,0), -d(1940,4,28,7,0,0), -d(1940,9,29,6,0,0), -d(1941,4,27,7,0,0), -d(1941,9,28,6,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,7,0,0), -d(1947,9,28,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1949,4,24,7,0,0), -d(1949,9,25,6,0,0), -d(1950,4,30,7,0,0), -d(1950,9,24,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,10,30,6,0,0), -d(1956,4,29,7,0,0), -d(1956,10,28,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -New_York = New_York() - diff --git a/modules/pytz/zoneinfo/America/Nipigon.py b/modules/pytz/zoneinfo/America/Nipigon.py deleted file mode 100644 index 29b1397c..00000000 --- a/modules/pytz/zoneinfo/America/Nipigon.py +++ /dev/null @@ -1,288 +0,0 @@ -'''tzinfo timezone information for America/Nipigon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nipigon(DstTzInfo): - '''America/Nipigon timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Nipigon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,7,0,0), -d(1918,10,31,6,0,0), -d(1940,9,29,5,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Nipigon = Nipigon() - diff --git a/modules/pytz/zoneinfo/America/Nome.py b/modules/pytz/zoneinfo/America/Nome.py deleted file mode 100644 index 5889ab26..00000000 --- a/modules/pytz/zoneinfo/America/Nome.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for America/Nome.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nome(DstTzInfo): - '''America/Nome timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Nome' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,13,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,12,0,0), -d(1967,4,1,11,0,0), -d(1969,4,27,13,0,0), -d(1969,10,26,12,0,0), -d(1970,4,26,13,0,0), -d(1970,10,25,12,0,0), -d(1971,4,25,13,0,0), -d(1971,10,31,12,0,0), -d(1972,4,30,13,0,0), -d(1972,10,29,12,0,0), -d(1973,4,29,13,0,0), -d(1973,10,28,12,0,0), -d(1974,1,6,13,0,0), -d(1974,10,27,12,0,0), -d(1975,2,23,13,0,0), -d(1975,10,26,12,0,0), -d(1976,4,25,13,0,0), -d(1976,10,31,12,0,0), -d(1977,4,24,13,0,0), -d(1977,10,30,12,0,0), -d(1978,4,30,13,0,0), -d(1978,10,29,12,0,0), -d(1979,4,29,13,0,0), -d(1979,10,28,12,0,0), -d(1980,4,27,13,0,0), -d(1980,10,26,12,0,0), -d(1981,4,26,13,0,0), -d(1981,10,25,12,0,0), -d(1982,4,25,13,0,0), -d(1982,10,31,12,0,0), -d(1983,4,24,13,0,0), -d(1983,10,30,12,0,0), -d(1983,11,30,9,0,0), -d(1984,4,29,11,0,0), -d(1984,10,28,10,0,0), -d(1985,4,28,11,0,0), -d(1985,10,27,10,0,0), -d(1986,4,27,11,0,0), -d(1986,10,26,10,0,0), -d(1987,4,5,11,0,0), -d(1987,10,25,10,0,0), -d(1988,4,3,11,0,0), -d(1988,10,30,10,0,0), -d(1989,4,2,11,0,0), -d(1989,10,29,10,0,0), -d(1990,4,1,11,0,0), -d(1990,10,28,10,0,0), -d(1991,4,7,11,0,0), -d(1991,10,27,10,0,0), -d(1992,4,5,11,0,0), -d(1992,10,25,10,0,0), -d(1993,4,4,11,0,0), -d(1993,10,31,10,0,0), -d(1994,4,3,11,0,0), -d(1994,10,30,10,0,0), -d(1995,4,2,11,0,0), -d(1995,10,29,10,0,0), -d(1996,4,7,11,0,0), -d(1996,10,27,10,0,0), -d(1997,4,6,11,0,0), -d(1997,10,26,10,0,0), -d(1998,4,5,11,0,0), -d(1998,10,25,10,0,0), -d(1999,4,4,11,0,0), -d(1999,10,31,10,0,0), -d(2000,4,2,11,0,0), -d(2000,10,29,10,0,0), -d(2001,4,1,11,0,0), -d(2001,10,28,10,0,0), -d(2002,4,7,11,0,0), -d(2002,10,27,10,0,0), -d(2003,4,6,11,0,0), -d(2003,10,26,10,0,0), -d(2004,4,4,11,0,0), -d(2004,10,31,10,0,0), -d(2005,4,3,11,0,0), -d(2005,10,30,10,0,0), -d(2006,4,2,11,0,0), -d(2006,10,29,10,0,0), -d(2007,3,11,11,0,0), -d(2007,11,4,10,0,0), -d(2008,3,9,11,0,0), -d(2008,11,2,10,0,0), -d(2009,3,8,11,0,0), -d(2009,11,1,10,0,0), -d(2010,3,14,11,0,0), -d(2010,11,7,10,0,0), -d(2011,3,13,11,0,0), -d(2011,11,6,10,0,0), -d(2012,3,11,11,0,0), -d(2012,11,4,10,0,0), -d(2013,3,10,11,0,0), -d(2013,11,3,10,0,0), -d(2014,3,9,11,0,0), -d(2014,11,2,10,0,0), -d(2015,3,8,11,0,0), -d(2015,11,1,10,0,0), -d(2016,3,13,11,0,0), -d(2016,11,6,10,0,0), -d(2017,3,12,11,0,0), -d(2017,11,5,10,0,0), -d(2018,3,11,11,0,0), -d(2018,11,4,10,0,0), -d(2019,3,10,11,0,0), -d(2019,11,3,10,0,0), -d(2020,3,8,11,0,0), -d(2020,11,1,10,0,0), -d(2021,3,14,11,0,0), -d(2021,11,7,10,0,0), -d(2022,3,13,11,0,0), -d(2022,11,6,10,0,0), -d(2023,3,12,11,0,0), -d(2023,11,5,10,0,0), -d(2024,3,10,11,0,0), -d(2024,11,3,10,0,0), -d(2025,3,9,11,0,0), -d(2025,11,2,10,0,0), -d(2026,3,8,11,0,0), -d(2026,11,1,10,0,0), -d(2027,3,14,11,0,0), -d(2027,11,7,10,0,0), -d(2028,3,12,11,0,0), -d(2028,11,5,10,0,0), -d(2029,3,11,11,0,0), -d(2029,11,4,10,0,0), -d(2030,3,10,11,0,0), -d(2030,11,3,10,0,0), -d(2031,3,9,11,0,0), -d(2031,11,2,10,0,0), -d(2032,3,14,11,0,0), -d(2032,11,7,10,0,0), -d(2033,3,13,11,0,0), -d(2033,11,6,10,0,0), -d(2034,3,12,11,0,0), -d(2034,11,5,10,0,0), -d(2035,3,11,11,0,0), -d(2035,11,4,10,0,0), -d(2036,3,9,11,0,0), -d(2036,11,2,10,0,0), -d(2037,3,8,11,0,0), -d(2037,11,1,10,0,0), - ] - - _transition_info = [ -i(-39600,0,'NST'), -i(-36000,3600,'NWT'), -i(-36000,3600,'NPT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-32400,0,'YST'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), - ] - -Nome = Nome() - diff --git a/modules/pytz/zoneinfo/America/Noronha.py b/modules/pytz/zoneinfo/America/Noronha.py deleted file mode 100644 index 915773c9..00000000 --- a/modules/pytz/zoneinfo/America/Noronha.py +++ /dev/null @@ -1,98 +0,0 @@ -'''tzinfo timezone information for America/Noronha.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Noronha(DstTzInfo): - '''America/Noronha timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Noronha' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,9,40), -d(1931,10,3,13,0,0), -d(1932,4,1,1,0,0), -d(1932,10,3,2,0,0), -d(1933,4,1,1,0,0), -d(1949,12,1,2,0,0), -d(1950,4,16,2,0,0), -d(1950,12,1,2,0,0), -d(1951,4,1,1,0,0), -d(1951,12,1,2,0,0), -d(1952,4,1,1,0,0), -d(1952,12,1,2,0,0), -d(1953,3,1,1,0,0), -d(1963,12,9,2,0,0), -d(1964,3,1,1,0,0), -d(1965,1,31,2,0,0), -d(1965,3,31,1,0,0), -d(1965,12,1,2,0,0), -d(1966,3,1,1,0,0), -d(1966,11,1,2,0,0), -d(1967,3,1,1,0,0), -d(1967,11,1,2,0,0), -d(1968,3,1,1,0,0), -d(1985,11,2,2,0,0), -d(1986,3,15,1,0,0), -d(1986,10,25,2,0,0), -d(1987,2,14,1,0,0), -d(1987,10,25,2,0,0), -d(1988,2,7,1,0,0), -d(1988,10,16,2,0,0), -d(1989,1,29,1,0,0), -d(1989,10,15,2,0,0), -d(1990,2,11,1,0,0), -d(1999,10,3,2,0,0), -d(2000,2,27,1,0,0), -d(2000,10,8,2,0,0), -d(2000,10,15,1,0,0), -d(2001,10,14,2,0,0), -d(2002,2,17,1,0,0), - ] - - _transition_info = [ -i(-7800,0,'LMT'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), - ] - -Noronha = Noronha() - diff --git a/modules/pytz/zoneinfo/America/North_Dakota/Center.py b/modules/pytz/zoneinfo/America/North_Dakota/Center.py deleted file mode 100644 index e9460b69..00000000 --- a/modules/pytz/zoneinfo/America/North_Dakota/Center.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for America/North_Dakota/Center.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Center(DstTzInfo): - '''America/North_Dakota/Center timezone definition. See datetime.tzinfo for details''' - - zone = 'America/North_Dakota/Center' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Center = Center() - diff --git a/modules/pytz/zoneinfo/America/North_Dakota/__init__.py b/modules/pytz/zoneinfo/America/North_Dakota/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/America/Panama.py b/modules/pytz/zoneinfo/America/Panama.py deleted file mode 100644 index d0f9fa76..00000000 --- a/modules/pytz/zoneinfo/America/Panama.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Panama.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Panama(DstTzInfo): - '''America/Panama timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Panama' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,4,22,5,19,36), - ] - - _transition_info = [ -i(-19200,0,'CMT'), -i(-18000,0,'EST'), - ] - -Panama = Panama() - diff --git a/modules/pytz/zoneinfo/America/Pangnirtung.py b/modules/pytz/zoneinfo/America/Pangnirtung.py deleted file mode 100644 index 79dfa10c..00000000 --- a/modules/pytz/zoneinfo/America/Pangnirtung.py +++ /dev/null @@ -1,270 +0,0 @@ -'''tzinfo timezone information for America/Pangnirtung.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pangnirtung(DstTzInfo): - '''America/Pangnirtung timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Pangnirtung' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,6,0,0), -d(1918,10,27,5,0,0), -d(1919,5,25,6,0,0), -d(1919,11,1,3,0,0), -d(1942,2,9,6,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,5,0,0), -d(1965,4,25,4,0,0), -d(1965,10,31,4,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,6,0,0), -d(1987,10,25,5,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,5,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,5,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,5,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,5,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'AWT'), -i(-10800,3600,'APT'), -i(-14400,0,'AST'), -i(-7200,7200,'ADDT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-14400,0,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Pangnirtung = Pangnirtung() - diff --git a/modules/pytz/zoneinfo/America/Paramaribo.py b/modules/pytz/zoneinfo/America/Paramaribo.py deleted file mode 100644 index 5238f9d5..00000000 --- a/modules/pytz/zoneinfo/America/Paramaribo.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for America/Paramaribo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Paramaribo(DstTzInfo): - '''America/Paramaribo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Paramaribo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,1,1,3,40,40), -d(1935,1,1,3,40,52), -d(1945,10,1,3,40,36), -d(1975,11,20,3,30,0), -d(1984,10,1,3,30,0), - ] - - _transition_info = [ -i(-13260,0,'LMT'), -i(-13260,0,'PMT'), -i(-13260,0,'PMT'), -i(-12600,0,'NEGT'), -i(-12600,0,'SRT'), -i(-10800,0,'SRT'), - ] - -Paramaribo = Paramaribo() - diff --git a/modules/pytz/zoneinfo/America/Phoenix.py b/modules/pytz/zoneinfo/America/Phoenix.py deleted file mode 100644 index 1cc351ee..00000000 --- a/modules/pytz/zoneinfo/America/Phoenix.py +++ /dev/null @@ -1,40 +0,0 @@ -'''tzinfo timezone information for America/Phoenix.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Phoenix(DstTzInfo): - '''America/Phoenix timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Phoenix' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1942,2,9,9,0,0), -d(1944,1,1,6,1,0), -d(1944,4,1,7,1,0), -d(1944,10,1,6,1,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Phoenix = Phoenix() - diff --git a/modules/pytz/zoneinfo/America/Port_minus_au_minus_Prince.py b/modules/pytz/zoneinfo/America/Port_minus_au_minus_Prince.py deleted file mode 100644 index ab77bec9..00000000 --- a/modules/pytz/zoneinfo/America/Port_minus_au_minus_Prince.py +++ /dev/null @@ -1,86 +0,0 @@ -'''tzinfo timezone information for America/Port_minus_au_minus_Prince.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Port_minus_au_minus_Prince(DstTzInfo): - '''America/Port_minus_au_minus_Prince timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Port_minus_au_minus_Prince' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,1,24,16,49,0), -d(1983,5,8,5,0,0), -d(1983,10,30,4,0,0), -d(1984,4,29,5,0,0), -d(1984,10,28,4,0,0), -d(1985,4,28,5,0,0), -d(1985,10,27,4,0,0), -d(1986,4,27,5,0,0), -d(1986,10,26,4,0,0), -d(1987,4,26,5,0,0), -d(1987,10,25,4,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,6,0,0), -d(2005,4,3,5,0,0), -d(2005,10,30,4,0,0), - ] - - _transition_info = [ -i(-17340,0,'PPMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Port_minus_au_minus_Prince = Port_minus_au_minus_Prince() - diff --git a/modules/pytz/zoneinfo/America/Port_of_Spain.py b/modules/pytz/zoneinfo/America/Port_of_Spain.py deleted file mode 100644 index f1a37eb6..00000000 --- a/modules/pytz/zoneinfo/America/Port_of_Spain.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Port_of_Spain.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Port_of_Spain(DstTzInfo): - '''America/Port_of_Spain timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Port_of_Spain' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,2,4,6,4), - ] - - _transition_info = [ -i(-14760,0,'LMT'), -i(-14400,0,'AST'), - ] - -Port_of_Spain = Port_of_Spain() - diff --git a/modules/pytz/zoneinfo/America/Porto_Acre.py b/modules/pytz/zoneinfo/America/Porto_Acre.py deleted file mode 100644 index 34dce668..00000000 --- a/modules/pytz/zoneinfo/America/Porto_Acre.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for America/Porto_Acre.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Porto_Acre(DstTzInfo): - '''America/Porto_Acre timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Porto_Acre' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,31,12), -d(1931,10,3,16,0,0), -d(1932,4,1,4,0,0), -d(1932,10,3,5,0,0), -d(1933,4,1,4,0,0), -d(1949,12,1,5,0,0), -d(1950,4,16,5,0,0), -d(1950,12,1,5,0,0), -d(1951,4,1,4,0,0), -d(1951,12,1,5,0,0), -d(1952,4,1,4,0,0), -d(1952,12,1,5,0,0), -d(1953,3,1,4,0,0), -d(1963,12,9,5,0,0), -d(1964,3,1,4,0,0), -d(1965,1,31,5,0,0), -d(1965,3,31,4,0,0), -d(1965,12,1,5,0,0), -d(1966,3,1,4,0,0), -d(1966,11,1,5,0,0), -d(1967,3,1,4,0,0), -d(1967,11,1,5,0,0), -d(1968,3,1,4,0,0), -d(1985,11,2,5,0,0), -d(1986,3,15,4,0,0), -d(1986,10,25,5,0,0), -d(1987,2,14,4,0,0), -d(1987,10,25,5,0,0), -d(1988,2,7,4,0,0), - ] - - _transition_info = [ -i(-16260,0,'LMT'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), - ] - -Porto_Acre = Porto_Acre() - diff --git a/modules/pytz/zoneinfo/America/Porto_Velho.py b/modules/pytz/zoneinfo/America/Porto_Velho.py deleted file mode 100644 index 85620897..00000000 --- a/modules/pytz/zoneinfo/America/Porto_Velho.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for America/Porto_Velho.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Porto_Velho(DstTzInfo): - '''America/Porto_Velho timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Porto_Velho' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,15,36), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), - ] - - _transition_info = [ -i(-15360,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), - ] - -Porto_Velho = Porto_Velho() - diff --git a/modules/pytz/zoneinfo/America/Puerto_Rico.py b/modules/pytz/zoneinfo/America/Puerto_Rico.py deleted file mode 100644 index 7e3cd258..00000000 --- a/modules/pytz/zoneinfo/America/Puerto_Rico.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for America/Puerto_Rico.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Puerto_Rico(DstTzInfo): - '''America/Puerto_Rico timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Puerto_Rico' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,5,3,4,0,0), -d(1945,9,30,5,0,0), - ] - - _transition_info = [ -i(-14400,0,'AST'), -i(-10800,3600,'AWT'), -i(-14400,0,'AST'), - ] - -Puerto_Rico = Puerto_Rico() - diff --git a/modules/pytz/zoneinfo/America/Rainy_River.py b/modules/pytz/zoneinfo/America/Rainy_River.py deleted file mode 100644 index 9863d587..00000000 --- a/modules/pytz/zoneinfo/America/Rainy_River.py +++ /dev/null @@ -1,288 +0,0 @@ -'''tzinfo timezone information for America/Rainy_River.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rainy_River(DstTzInfo): - '''America/Rainy_River timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Rainy_River' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,8,0,0), -d(1918,10,31,7,0,0), -d(1940,9,29,6,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1974,4,28,8,0,0), -d(1974,10,27,7,0,0), -d(1975,4,27,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Rainy_River = Rainy_River() - diff --git a/modules/pytz/zoneinfo/America/Rankin_Inlet.py b/modules/pytz/zoneinfo/America/Rankin_Inlet.py deleted file mode 100644 index 033c8bb3..00000000 --- a/modules/pytz/zoneinfo/America/Rankin_Inlet.py +++ /dev/null @@ -1,270 +0,0 @@ -'''tzinfo timezone information for America/Rankin_Inlet.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rankin_Inlet(DstTzInfo): - '''America/Rankin_Inlet timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Rankin_Inlet' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,8,0,0), -d(1918,10,27,7,0,0), -d(1919,5,25,8,0,0), -d(1919,11,1,5,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1965,4,25,6,0,0), -d(1965,10,31,6,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-14400,7200,'CDDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-18000,0,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Rankin_Inlet = Rankin_Inlet() - diff --git a/modules/pytz/zoneinfo/America/Recife.py b/modules/pytz/zoneinfo/America/Recife.py deleted file mode 100644 index a30a40df..00000000 --- a/modules/pytz/zoneinfo/America/Recife.py +++ /dev/null @@ -1,98 +0,0 @@ -'''tzinfo timezone information for America/Recife.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Recife(DstTzInfo): - '''America/Recife timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Recife' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,19,36), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,12,9,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2000,10,15,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), - ] - - _transition_info = [ -i(-8400,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), - ] - -Recife = Recife() - diff --git a/modules/pytz/zoneinfo/America/Regina.py b/modules/pytz/zoneinfo/America/Regina.py deleted file mode 100644 index 08b11abf..00000000 --- a/modules/pytz/zoneinfo/America/Regina.py +++ /dev/null @@ -1,126 +0,0 @@ -'''tzinfo timezone information for America/Regina.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Regina(DstTzInfo): - '''America/Regina timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Regina' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,9,1,6,58,36), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1930,5,4,7,0,0), -d(1930,10,5,6,0,0), -d(1931,5,3,7,0,0), -d(1931,10,4,6,0,0), -d(1932,5,1,7,0,0), -d(1932,10,2,6,0,0), -d(1933,5,7,7,0,0), -d(1933,10,1,6,0,0), -d(1934,5,6,7,0,0), -d(1934,10,7,6,0,0), -d(1937,4,11,7,0,0), -d(1937,10,10,6,0,0), -d(1938,4,10,7,0,0), -d(1938,10,2,6,0,0), -d(1939,4,9,7,0,0), -d(1939,10,8,6,0,0), -d(1940,4,14,7,0,0), -d(1940,10,13,6,0,0), -d(1941,4,13,7,0,0), -d(1941,10,12,6,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1946,4,14,9,0,0), -d(1946,10,13,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1948,4,25,9,0,0), -d(1948,9,26,8,0,0), -d(1949,4,24,9,0,0), -d(1949,9,25,8,0,0), -d(1950,4,30,9,0,0), -d(1950,9,24,8,0,0), -d(1951,4,29,9,0,0), -d(1951,9,30,8,0,0), -d(1952,4,27,9,0,0), -d(1952,9,28,8,0,0), -d(1953,4,26,9,0,0), -d(1953,9,27,8,0,0), -d(1954,4,25,9,0,0), -d(1954,9,26,8,0,0), -d(1955,4,24,9,0,0), -d(1955,9,25,8,0,0), -d(1956,4,29,9,0,0), -d(1956,9,30,8,0,0), -d(1957,4,28,9,0,0), -d(1957,9,29,8,0,0), -d(1959,4,26,9,0,0), -d(1959,10,25,8,0,0), -d(1960,4,24,9,0,0), - ] - - _transition_info = [ -i(-25140,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), - ] - -Regina = Regina() - diff --git a/modules/pytz/zoneinfo/America/Rio_Branco.py b/modules/pytz/zoneinfo/America/Rio_Branco.py deleted file mode 100644 index 14b71ddb..00000000 --- a/modules/pytz/zoneinfo/America/Rio_Branco.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for America/Rio_Branco.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rio_Branco(DstTzInfo): - '''America/Rio_Branco timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Rio_Branco' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,31,12), -d(1931,10,3,16,0,0), -d(1932,4,1,4,0,0), -d(1932,10,3,5,0,0), -d(1933,4,1,4,0,0), -d(1949,12,1,5,0,0), -d(1950,4,16,5,0,0), -d(1950,12,1,5,0,0), -d(1951,4,1,4,0,0), -d(1951,12,1,5,0,0), -d(1952,4,1,4,0,0), -d(1952,12,1,5,0,0), -d(1953,3,1,4,0,0), -d(1963,12,9,5,0,0), -d(1964,3,1,4,0,0), -d(1965,1,31,5,0,0), -d(1965,3,31,4,0,0), -d(1965,12,1,5,0,0), -d(1966,3,1,4,0,0), -d(1966,11,1,5,0,0), -d(1967,3,1,4,0,0), -d(1967,11,1,5,0,0), -d(1968,3,1,4,0,0), -d(1985,11,2,5,0,0), -d(1986,3,15,4,0,0), -d(1986,10,25,5,0,0), -d(1987,2,14,4,0,0), -d(1987,10,25,5,0,0), -d(1988,2,7,4,0,0), - ] - - _transition_info = [ -i(-16260,0,'LMT'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), - ] - -Rio_Branco = Rio_Branco() - diff --git a/modules/pytz/zoneinfo/America/Rosario.py b/modules/pytz/zoneinfo/America/Rosario.py deleted file mode 100644 index a0aaa92d..00000000 --- a/modules/pytz/zoneinfo/America/Rosario.py +++ /dev/null @@ -1,132 +0,0 @@ -'''tzinfo timezone information for America/Rosario.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rosario(DstTzInfo): - '''America/Rosario timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Rosario' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,5,1,4,16,48), -d(1930,12,1,4,0,0), -d(1931,4,1,3,0,0), -d(1931,10,15,4,0,0), -d(1932,3,1,3,0,0), -d(1932,11,1,4,0,0), -d(1933,3,1,3,0,0), -d(1933,11,1,4,0,0), -d(1934,3,1,3,0,0), -d(1934,11,1,4,0,0), -d(1935,3,1,3,0,0), -d(1935,11,1,4,0,0), -d(1936,3,1,3,0,0), -d(1936,11,1,4,0,0), -d(1937,3,1,3,0,0), -d(1937,11,1,4,0,0), -d(1938,3,1,3,0,0), -d(1938,11,1,4,0,0), -d(1939,3,1,3,0,0), -d(1939,11,1,4,0,0), -d(1940,3,1,3,0,0), -d(1940,7,1,4,0,0), -d(1941,6,15,3,0,0), -d(1941,10,15,4,0,0), -d(1943,8,1,3,0,0), -d(1943,10,15,4,0,0), -d(1946,3,1,3,0,0), -d(1946,10,1,4,0,0), -d(1963,10,1,3,0,0), -d(1963,12,15,4,0,0), -d(1964,3,1,3,0,0), -d(1964,10,15,4,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,2,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1988,12,1,3,0,0), -d(1989,3,5,2,0,0), -d(1989,10,15,3,0,0), -d(1990,3,4,2,0,0), -d(1990,10,21,3,0,0), -d(1991,3,3,2,0,0), -d(1991,10,20,4,0,0), -d(1992,3,1,2,0,0), -d(1992,10,18,3,0,0), -d(1993,3,7,2,0,0), -d(1999,10,3,3,0,0), -d(2000,3,3,3,0,0), - ] - - _transition_info = [ -i(-15420,0,'CMT'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-14400,0,'WART'), -i(-7200,7200,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-10800,0,'ARST'), -i(-10800,0,'ART'), - ] - -Rosario = Rosario() - diff --git a/modules/pytz/zoneinfo/America/Santiago.py b/modules/pytz/zoneinfo/America/Santiago.py deleted file mode 100644 index 1b1d9976..00000000 --- a/modules/pytz/zoneinfo/America/Santiago.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for America/Santiago.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Santiago(DstTzInfo): - '''America/Santiago timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Santiago' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,1,1,4,42,40), -d(1918,9,1,5,0,0), -d(1919,7,2,4,0,0), -d(1927,9,1,5,0,0), -d(1928,4,1,4,0,0), -d(1928,9,1,5,0,0), -d(1929,4,1,4,0,0), -d(1929,9,1,5,0,0), -d(1930,4,1,4,0,0), -d(1930,9,1,5,0,0), -d(1931,4,1,4,0,0), -d(1931,9,1,5,0,0), -d(1932,4,1,4,0,0), -d(1932,9,1,5,0,0), -d(1966,10,9,4,0,0), -d(1967,3,12,3,0,0), -d(1967,10,15,4,0,0), -d(1968,3,10,3,0,0), -d(1968,10,13,4,0,0), -d(1969,3,9,3,0,0), -d(1969,10,12,4,0,0), -d(1970,3,15,3,0,0), -d(1970,10,11,4,0,0), -d(1971,3,14,3,0,0), -d(1971,10,10,4,0,0), -d(1972,3,12,3,0,0), -d(1972,10,15,4,0,0), -d(1973,3,11,3,0,0), -d(1973,10,14,4,0,0), -d(1974,3,10,3,0,0), -d(1974,10,13,4,0,0), -d(1975,3,9,3,0,0), -d(1975,10,12,4,0,0), -d(1976,3,14,3,0,0), -d(1976,10,10,4,0,0), -d(1977,3,13,3,0,0), -d(1977,10,9,4,0,0), -d(1978,3,12,3,0,0), -d(1978,10,15,4,0,0), -d(1979,3,11,3,0,0), -d(1979,10,14,4,0,0), -d(1980,3,9,3,0,0), -d(1980,10,12,4,0,0), -d(1981,3,15,3,0,0), -d(1981,10,11,4,0,0), -d(1982,3,14,3,0,0), -d(1982,10,10,4,0,0), -d(1983,3,13,3,0,0), -d(1983,10,9,4,0,0), -d(1984,3,11,3,0,0), -d(1984,10,14,4,0,0), -d(1985,3,10,3,0,0), -d(1985,10,13,4,0,0), -d(1986,3,9,3,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,3,0,0), -d(1987,10,11,4,0,0), -d(1988,3,13,3,0,0), -d(1988,10,9,4,0,0), -d(1989,3,12,3,0,0), -d(1989,10,15,4,0,0), -d(1990,3,11,3,0,0), -d(1990,10,14,4,0,0), -d(1991,3,10,3,0,0), -d(1991,10,13,4,0,0), -d(1992,3,15,3,0,0), -d(1992,10,11,4,0,0), -d(1993,3,14,3,0,0), -d(1993,10,10,4,0,0), -d(1994,3,13,3,0,0), -d(1994,10,9,4,0,0), -d(1995,3,12,3,0,0), -d(1995,10,15,4,0,0), -d(1996,3,10,3,0,0), -d(1996,10,13,4,0,0), -d(1997,3,9,3,0,0), -d(1997,10,12,4,0,0), -d(1998,3,15,3,0,0), -d(1998,9,27,4,0,0), -d(1999,4,4,3,0,0), -d(1999,10,10,4,0,0), -d(2000,3,12,3,0,0), -d(2000,10,15,4,0,0), -d(2001,3,11,3,0,0), -d(2001,10,14,4,0,0), -d(2002,3,10,3,0,0), -d(2002,10,13,4,0,0), -d(2003,3,9,3,0,0), -d(2003,10,12,4,0,0), -d(2004,3,14,3,0,0), -d(2004,10,10,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,9,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,14,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,12,4,0,0), -d(2009,3,15,3,0,0), -d(2009,10,11,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,10,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,9,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,14,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,13,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,12,4,0,0), -d(2015,3,15,3,0,0), -d(2015,10,11,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,9,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,14,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,13,4,0,0), -d(2020,3,15,3,0,0), -d(2020,10,11,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,10,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,9,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,13,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,12,4,0,0), -d(2026,3,15,3,0,0), -d(2026,10,11,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,10,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,14,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,13,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,12,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,10,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,9,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,14,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,12,4,0,0), -d(2037,3,15,3,0,0), -d(2037,10,11,4,0,0), - ] - - _transition_info = [ -i(-16980,0,'SMT'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), - ] - -Santiago = Santiago() - diff --git a/modules/pytz/zoneinfo/America/Santo_Domingo.py b/modules/pytz/zoneinfo/America/Santo_Domingo.py deleted file mode 100644 index 63963732..00000000 --- a/modules/pytz/zoneinfo/America/Santo_Domingo.py +++ /dev/null @@ -1,52 +0,0 @@ -'''tzinfo timezone information for America/Santo_Domingo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Santo_Domingo(DstTzInfo): - '''America/Santo_Domingo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Santo_Domingo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1933,4,1,16,40,0), -d(1966,10,30,5,0,0), -d(1967,2,28,4,0,0), -d(1969,10,26,5,0,0), -d(1970,2,21,4,30,0), -d(1970,10,25,5,0,0), -d(1971,1,20,4,30,0), -d(1971,10,31,5,0,0), -d(1972,1,21,4,30,0), -d(1972,10,29,5,0,0), -d(1973,1,21,4,30,0), -d(1973,10,28,5,0,0), -d(1974,1,21,4,30,0), -d(1974,10,27,5,0,0), -d(2000,10,29,6,0,0), -d(2000,12,3,6,0,0), - ] - - _transition_info = [ -i(-16800,0,'SDMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-16200,1800,'EHDT'), -i(-18000,0,'EST'), -i(-16200,1800,'EHDT'), -i(-18000,0,'EST'), -i(-16200,1800,'EHDT'), -i(-18000,0,'EST'), -i(-16200,1800,'EHDT'), -i(-18000,0,'EST'), -i(-16200,1800,'EHDT'), -i(-18000,0,'EST'), -i(-14400,0,'AST'), -i(-18000,0,'EST'), -i(-14400,0,'AST'), - ] - -Santo_Domingo = Santo_Domingo() - diff --git a/modules/pytz/zoneinfo/America/Sao_Paulo.py b/modules/pytz/zoneinfo/America/Sao_Paulo.py deleted file mode 100644 index 53183cfb..00000000 --- a/modules/pytz/zoneinfo/America/Sao_Paulo.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for America/Sao_Paulo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sao_Paulo(DstTzInfo): - '''America/Sao_Paulo timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Sao_Paulo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,6,28), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,10,23,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1990,10,21,3,0,0), -d(1991,2,17,2,0,0), -d(1991,10,20,3,0,0), -d(1992,2,9,2,0,0), -d(1992,10,25,3,0,0), -d(1993,1,31,2,0,0), -d(1993,10,17,3,0,0), -d(1994,2,20,2,0,0), -d(1994,10,16,3,0,0), -d(1995,2,19,2,0,0), -d(1995,10,15,3,0,0), -d(1996,2,11,2,0,0), -d(1996,10,6,3,0,0), -d(1997,2,16,2,0,0), -d(1997,10,6,3,0,0), -d(1998,3,1,2,0,0), -d(1998,10,11,3,0,0), -d(1999,2,21,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2001,2,18,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), -d(2002,11,3,3,0,0), -d(2003,2,16,2,0,0), -d(2003,10,19,3,0,0), -d(2004,2,15,2,0,0), -d(2004,11,2,3,0,0), -d(2005,2,20,2,0,0), -d(2005,10,16,3,0,0), -d(2006,2,19,2,0,0), -d(2006,10,15,3,0,0), -d(2007,2,18,2,0,0), -d(2007,10,21,3,0,0), -d(2008,2,17,2,0,0), -d(2008,10,19,3,0,0), -d(2009,2,15,2,0,0), -d(2009,10,18,3,0,0), -d(2010,2,21,2,0,0), -d(2010,10,17,3,0,0), -d(2011,2,20,2,0,0), -d(2011,10,16,3,0,0), -d(2012,2,19,2,0,0), -d(2012,10,21,3,0,0), -d(2013,2,17,2,0,0), -d(2013,10,20,3,0,0), -d(2014,2,16,2,0,0), -d(2014,10,19,3,0,0), -d(2015,2,15,2,0,0), -d(2015,10,18,3,0,0), -d(2016,2,21,2,0,0), -d(2016,10,16,3,0,0), -d(2017,2,19,2,0,0), -d(2017,10,15,3,0,0), -d(2018,2,18,2,0,0), -d(2018,10,21,3,0,0), -d(2019,2,17,2,0,0), -d(2019,10,20,3,0,0), -d(2020,2,16,2,0,0), -d(2020,10,18,3,0,0), -d(2021,2,21,2,0,0), -d(2021,10,17,3,0,0), -d(2022,2,20,2,0,0), -d(2022,10,16,3,0,0), -d(2023,2,19,2,0,0), -d(2023,10,15,3,0,0), -d(2024,2,18,2,0,0), -d(2024,10,20,3,0,0), -d(2025,2,16,2,0,0), -d(2025,10,19,3,0,0), -d(2026,2,15,2,0,0), -d(2026,10,18,3,0,0), -d(2027,2,21,2,0,0), -d(2027,10,17,3,0,0), -d(2028,2,20,2,0,0), -d(2028,10,15,3,0,0), -d(2029,2,18,2,0,0), -d(2029,10,21,3,0,0), -d(2030,2,17,2,0,0), -d(2030,10,20,3,0,0), -d(2031,2,16,2,0,0), -d(2031,10,19,3,0,0), -d(2032,2,15,2,0,0), -d(2032,10,17,3,0,0), -d(2033,2,20,2,0,0), -d(2033,10,16,3,0,0), -d(2034,2,19,2,0,0), -d(2034,10,15,3,0,0), -d(2035,2,18,2,0,0), -d(2035,10,21,3,0,0), -d(2036,2,17,2,0,0), -d(2036,10,19,3,0,0), -d(2037,2,15,2,0,0), -d(2037,10,18,3,0,0), - ] - - _transition_info = [ -i(-11160,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), - ] - -Sao_Paulo = Sao_Paulo() - diff --git a/modules/pytz/zoneinfo/America/Scoresbysund.py b/modules/pytz/zoneinfo/America/Scoresbysund.py deleted file mode 100644 index d9f17ba4..00000000 --- a/modules/pytz/zoneinfo/America/Scoresbysund.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for America/Scoresbysund.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Scoresbysund(DstTzInfo): - '''America/Scoresbysund timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Scoresbysund' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,28,1,29,0), -d(1980,4,6,4,0,0), -d(1980,9,28,4,0,0), -d(1981,3,29,2,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-5340,0,'LMT'), -i(-7200,0,'CGT'), -i(-3600,3600,'CGST'), -i(-7200,0,'CGT'), -i(0,7200,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), -i(0,3600,'EGST'), -i(-3600,0,'EGT'), - ] - -Scoresbysund = Scoresbysund() - diff --git a/modules/pytz/zoneinfo/America/Shiprock.py b/modules/pytz/zoneinfo/America/Shiprock.py deleted file mode 100644 index 2a3e4d09..00000000 --- a/modules/pytz/zoneinfo/America/Shiprock.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for America/Shiprock.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Shiprock(DstTzInfo): - '''America/Shiprock timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Shiprock' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1920,3,28,9,0,0), -d(1920,10,31,8,0,0), -d(1921,3,27,9,0,0), -d(1921,5,22,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,8,0,0), -d(1966,4,24,9,0,0), -d(1966,10,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Shiprock = Shiprock() - diff --git a/modules/pytz/zoneinfo/America/St_Johns.py b/modules/pytz/zoneinfo/America/St_Johns.py deleted file mode 100644 index cbfc2cff..00000000 --- a/modules/pytz/zoneinfo/America/St_Johns.py +++ /dev/null @@ -1,496 +0,0 @@ -'''tzinfo timezone information for America/St_Johns.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Johns(DstTzInfo): - '''America/St_Johns timezone definition. See datetime.tzinfo for details''' - - zone = 'America/St_Johns' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,4,8,5,30,52), -d(1917,9,17,4,30,52), -d(1918,4,14,5,30,52), -d(1918,10,31,4,30,52), -d(1919,5,6,2,30,52), -d(1919,8,13,1,30,52), -d(1920,5,3,2,30,52), -d(1920,11,1,1,30,52), -d(1921,5,2,2,30,52), -d(1921,10,31,1,30,52), -d(1922,5,8,2,30,52), -d(1922,10,30,1,30,52), -d(1923,5,7,2,30,52), -d(1923,10,29,1,30,52), -d(1924,5,5,2,30,52), -d(1924,10,27,1,30,52), -d(1925,5,4,2,30,52), -d(1925,10,26,1,30,52), -d(1926,5,3,2,30,52), -d(1926,11,1,1,30,52), -d(1927,5,2,2,30,52), -d(1927,10,31,1,30,52), -d(1928,5,7,2,30,52), -d(1928,10,29,1,30,52), -d(1929,5,6,2,30,52), -d(1929,10,28,1,30,52), -d(1930,5,5,2,30,52), -d(1930,10,27,1,30,52), -d(1931,5,4,2,30,52), -d(1931,10,26,1,30,52), -d(1932,5,2,2,30,52), -d(1932,10,31,1,30,52), -d(1933,5,8,2,30,52), -d(1933,10,30,1,30,52), -d(1934,5,7,2,30,52), -d(1934,10,29,1,30,52), -d(1935,3,30,3,30,52), -d(1935,5,6,2,30,0), -d(1935,10,28,1,30,0), -d(1936,5,11,3,30,0), -d(1936,10,5,2,30,0), -d(1937,5,10,3,30,0), -d(1937,10,4,2,30,0), -d(1938,5,9,3,30,0), -d(1938,10,3,2,30,0), -d(1939,5,15,3,30,0), -d(1939,10,2,2,30,0), -d(1940,5,13,3,30,0), -d(1940,10,7,2,30,0), -d(1941,5,12,3,30,0), -d(1941,10,6,2,30,0), -d(1942,5,11,3,30,0), -d(1945,8,14,23,0,0), -d(1945,9,30,4,30,0), -d(1946,5,12,5,30,0), -d(1946,10,6,4,30,0), -d(1947,5,11,5,30,0), -d(1947,10,5,4,30,0), -d(1948,5,9,5,30,0), -d(1948,10,3,4,30,0), -d(1949,5,8,5,30,0), -d(1949,10,2,4,30,0), -d(1950,5,14,5,30,0), -d(1950,10,8,4,30,0), -d(1951,4,29,5,30,0), -d(1951,9,30,4,30,0), -d(1952,4,27,5,30,0), -d(1952,9,28,4,30,0), -d(1953,4,26,5,30,0), -d(1953,9,27,4,30,0), -d(1954,4,25,5,30,0), -d(1954,9,26,4,30,0), -d(1955,4,24,5,30,0), -d(1955,9,25,4,30,0), -d(1956,4,29,5,30,0), -d(1956,9,30,4,30,0), -d(1957,4,28,5,30,0), -d(1957,9,29,4,30,0), -d(1958,4,27,5,30,0), -d(1958,9,28,4,30,0), -d(1959,4,26,5,30,0), -d(1959,9,27,4,30,0), -d(1960,4,24,5,30,0), -d(1960,10,30,4,30,0), -d(1961,4,30,5,30,0), -d(1961,10,29,4,30,0), -d(1962,4,29,5,30,0), -d(1962,10,28,4,30,0), -d(1963,4,28,5,30,0), -d(1963,10,27,4,30,0), -d(1964,4,26,5,30,0), -d(1964,10,25,4,30,0), -d(1965,4,25,5,30,0), -d(1965,10,31,4,30,0), -d(1966,4,24,5,30,0), -d(1966,10,30,4,30,0), -d(1967,4,30,5,30,0), -d(1967,10,29,4,30,0), -d(1968,4,28,5,30,0), -d(1968,10,27,4,30,0), -d(1969,4,27,5,30,0), -d(1969,10,26,4,30,0), -d(1970,4,26,5,30,0), -d(1970,10,25,4,30,0), -d(1971,4,25,5,30,0), -d(1971,10,31,4,30,0), -d(1972,4,30,5,30,0), -d(1972,10,29,4,30,0), -d(1973,4,29,5,30,0), -d(1973,10,28,4,30,0), -d(1974,4,28,5,30,0), -d(1974,10,27,4,30,0), -d(1975,4,27,5,30,0), -d(1975,10,26,4,30,0), -d(1976,4,25,5,30,0), -d(1976,10,31,4,30,0), -d(1977,4,24,5,30,0), -d(1977,10,30,4,30,0), -d(1978,4,30,5,30,0), -d(1978,10,29,4,30,0), -d(1979,4,29,5,30,0), -d(1979,10,28,4,30,0), -d(1980,4,27,5,30,0), -d(1980,10,26,4,30,0), -d(1981,4,26,5,30,0), -d(1981,10,25,4,30,0), -d(1982,4,25,5,30,0), -d(1982,10,31,4,30,0), -d(1983,4,24,5,30,0), -d(1983,10,30,4,30,0), -d(1984,4,29,5,30,0), -d(1984,10,28,4,30,0), -d(1985,4,28,5,30,0), -d(1985,10,27,4,30,0), -d(1986,4,27,5,30,0), -d(1986,10,26,4,30,0), -d(1987,4,5,3,31,0), -d(1987,10,25,2,31,0), -d(1988,4,3,3,31,0), -d(1988,10,30,1,31,0), -d(1989,4,2,3,31,0), -d(1989,10,29,2,31,0), -d(1990,4,1,3,31,0), -d(1990,10,28,2,31,0), -d(1991,4,7,3,31,0), -d(1991,10,27,2,31,0), -d(1992,4,5,3,31,0), -d(1992,10,25,2,31,0), -d(1993,4,4,3,31,0), -d(1993,10,31,2,31,0), -d(1994,4,3,3,31,0), -d(1994,10,30,2,31,0), -d(1995,4,2,3,31,0), -d(1995,10,29,2,31,0), -d(1996,4,7,3,31,0), -d(1996,10,27,2,31,0), -d(1997,4,6,3,31,0), -d(1997,10,26,2,31,0), -d(1998,4,5,3,31,0), -d(1998,10,25,2,31,0), -d(1999,4,4,3,31,0), -d(1999,10,31,2,31,0), -d(2000,4,2,3,31,0), -d(2000,10,29,2,31,0), -d(2001,4,1,3,31,0), -d(2001,10,28,2,31,0), -d(2002,4,7,3,31,0), -d(2002,10,27,2,31,0), -d(2003,4,6,3,31,0), -d(2003,10,26,2,31,0), -d(2004,4,4,3,31,0), -d(2004,10,31,2,31,0), -d(2005,4,3,3,31,0), -d(2005,10,30,2,31,0), -d(2006,4,2,3,31,0), -d(2006,10,29,2,31,0), -d(2007,4,1,3,31,0), -d(2007,10,28,2,31,0), -d(2008,4,6,3,31,0), -d(2008,10,26,2,31,0), -d(2009,4,5,3,31,0), -d(2009,10,25,2,31,0), -d(2010,4,4,3,31,0), -d(2010,10,31,2,31,0), -d(2011,4,3,3,31,0), -d(2011,10,30,2,31,0), -d(2012,4,1,3,31,0), -d(2012,10,28,2,31,0), -d(2013,4,7,3,31,0), -d(2013,10,27,2,31,0), -d(2014,4,6,3,31,0), -d(2014,10,26,2,31,0), -d(2015,4,5,3,31,0), -d(2015,10,25,2,31,0), -d(2016,4,3,3,31,0), -d(2016,10,30,2,31,0), -d(2017,4,2,3,31,0), -d(2017,10,29,2,31,0), -d(2018,4,1,3,31,0), -d(2018,10,28,2,31,0), -d(2019,4,7,3,31,0), -d(2019,10,27,2,31,0), -d(2020,4,5,3,31,0), -d(2020,10,25,2,31,0), -d(2021,4,4,3,31,0), -d(2021,10,31,2,31,0), -d(2022,4,3,3,31,0), -d(2022,10,30,2,31,0), -d(2023,4,2,3,31,0), -d(2023,10,29,2,31,0), -d(2024,4,7,3,31,0), -d(2024,10,27,2,31,0), -d(2025,4,6,3,31,0), -d(2025,10,26,2,31,0), -d(2026,4,5,3,31,0), -d(2026,10,25,2,31,0), -d(2027,4,4,3,31,0), -d(2027,10,31,2,31,0), -d(2028,4,2,3,31,0), -d(2028,10,29,2,31,0), -d(2029,4,1,3,31,0), -d(2029,10,28,2,31,0), -d(2030,4,7,3,31,0), -d(2030,10,27,2,31,0), -d(2031,4,6,3,31,0), -d(2031,10,26,2,31,0), -d(2032,4,4,3,31,0), -d(2032,10,31,2,31,0), -d(2033,4,3,3,31,0), -d(2033,10,30,2,31,0), -d(2034,4,2,3,31,0), -d(2034,10,29,2,31,0), -d(2035,4,1,3,31,0), -d(2035,10,28,2,31,0), -d(2036,4,6,3,31,0), -d(2036,10,26,2,31,0), -d(2037,4,5,3,31,0), -d(2037,10,25,2,31,0), - ] - - _transition_info = [ -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NWT'), -i(-9000,3600,'NPT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-5400,7200,'NDDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), - ] - -St_Johns = St_Johns() - diff --git a/modules/pytz/zoneinfo/America/St_Kitts.py b/modules/pytz/zoneinfo/America/St_Kitts.py deleted file mode 100644 index 6092919d..00000000 --- a/modules/pytz/zoneinfo/America/St_Kitts.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/St_Kitts.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Kitts(DstTzInfo): - '''America/St_Kitts timezone definition. See datetime.tzinfo for details''' - - zone = 'America/St_Kitts' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,2,4,10,52), - ] - - _transition_info = [ -i(-15060,0,'LMT'), -i(-14400,0,'AST'), - ] - -St_Kitts = St_Kitts() - diff --git a/modules/pytz/zoneinfo/America/St_Lucia.py b/modules/pytz/zoneinfo/America/St_Lucia.py deleted file mode 100644 index ae785136..00000000 --- a/modules/pytz/zoneinfo/America/St_Lucia.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/St_Lucia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Lucia(DstTzInfo): - '''America/St_Lucia timezone definition. See datetime.tzinfo for details''' - - zone = 'America/St_Lucia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,4,4,0), - ] - - _transition_info = [ -i(-14640,0,'CMT'), -i(-14400,0,'AST'), - ] - -St_Lucia = St_Lucia() - diff --git a/modules/pytz/zoneinfo/America/St_Thomas.py b/modules/pytz/zoneinfo/America/St_Thomas.py deleted file mode 100644 index 4367e35a..00000000 --- a/modules/pytz/zoneinfo/America/St_Thomas.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/St_Thomas.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Thomas(DstTzInfo): - '''America/St_Thomas timezone definition. See datetime.tzinfo for details''' - - zone = 'America/St_Thomas' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,19,44), - ] - - _transition_info = [ -i(-15600,0,'LMT'), -i(-14400,0,'AST'), - ] - -St_Thomas = St_Thomas() - diff --git a/modules/pytz/zoneinfo/America/St_Vincent.py b/modules/pytz/zoneinfo/America/St_Vincent.py deleted file mode 100644 index fca39da8..00000000 --- a/modules/pytz/zoneinfo/America/St_Vincent.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/St_Vincent.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Vincent(DstTzInfo): - '''America/St_Vincent timezone definition. See datetime.tzinfo for details''' - - zone = 'America/St_Vincent' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,4,4,56), - ] - - _transition_info = [ -i(-14700,0,'KMT'), -i(-14400,0,'AST'), - ] - -St_Vincent = St_Vincent() - diff --git a/modules/pytz/zoneinfo/America/Swift_Current.py b/modules/pytz/zoneinfo/America/Swift_Current.py deleted file mode 100644 index e4bab9f7..00000000 --- a/modules/pytz/zoneinfo/America/Swift_Current.py +++ /dev/null @@ -1,66 +0,0 @@ -'''tzinfo timezone information for America/Swift_Current.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Swift_Current(DstTzInfo): - '''America/Swift_Current timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Swift_Current' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,9,1,7,11,20), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1946,4,28,9,0,0), -d(1946,10,13,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1948,4,25,9,0,0), -d(1948,9,26,8,0,0), -d(1949,4,24,9,0,0), -d(1949,9,25,8,0,0), -d(1957,4,28,9,0,0), -d(1957,10,27,8,0,0), -d(1959,4,26,9,0,0), -d(1959,10,25,8,0,0), -d(1960,4,24,9,0,0), -d(1960,9,25,8,0,0), -d(1961,4,30,9,0,0), -d(1961,9,24,8,0,0), -d(1972,4,30,9,0,0), - ] - - _transition_info = [ -i(-25860,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), - ] - -Swift_Current = Swift_Current() - diff --git a/modules/pytz/zoneinfo/America/Tegucigalpa.py b/modules/pytz/zoneinfo/America/Tegucigalpa.py deleted file mode 100644 index 3419daae..00000000 --- a/modules/pytz/zoneinfo/America/Tegucigalpa.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for America/Tegucigalpa.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tegucigalpa(DstTzInfo): - '''America/Tegucigalpa timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Tegucigalpa' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,4,1,5,48,52), -d(1987,5,3,6,0,0), -d(1987,9,27,5,0,0), -d(1988,5,1,6,0,0), -d(1988,9,25,5,0,0), - ] - - _transition_info = [ -i(-20940,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Tegucigalpa = Tegucigalpa() - diff --git a/modules/pytz/zoneinfo/America/Thule.py b/modules/pytz/zoneinfo/America/Thule.py deleted file mode 100644 index 26f61c05..00000000 --- a/modules/pytz/zoneinfo/America/Thule.py +++ /dev/null @@ -1,210 +0,0 @@ -'''tzinfo timezone information for America/Thule.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Thule(DstTzInfo): - '''America/Thule timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Thule' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,28,4,35,8), -d(1991,3,31,6,0,0), -d(1991,9,29,5,0,0), -d(1992,3,29,6,0,0), -d(1992,9,27,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,5,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,5,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,5,0,0), -d(1998,4,5,6,0,0), -d(1998,10,25,5,0,0), -d(1999,4,4,6,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,6,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,6,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,6,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,6,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,6,0,0), -d(2004,10,31,5,0,0), -d(2005,4,3,6,0,0), -d(2005,10,30,5,0,0), -d(2006,4,2,6,0,0), -d(2006,10,29,5,0,0), -d(2007,4,1,6,0,0), -d(2007,10,28,5,0,0), -d(2008,4,6,6,0,0), -d(2008,10,26,5,0,0), -d(2009,4,5,6,0,0), -d(2009,10,25,5,0,0), -d(2010,4,4,6,0,0), -d(2010,10,31,5,0,0), -d(2011,4,3,6,0,0), -d(2011,10,30,5,0,0), -d(2012,4,1,6,0,0), -d(2012,10,28,5,0,0), -d(2013,4,7,6,0,0), -d(2013,10,27,5,0,0), -d(2014,4,6,6,0,0), -d(2014,10,26,5,0,0), -d(2015,4,5,6,0,0), -d(2015,10,25,5,0,0), -d(2016,4,3,6,0,0), -d(2016,10,30,5,0,0), -d(2017,4,2,6,0,0), -d(2017,10,29,5,0,0), -d(2018,4,1,6,0,0), -d(2018,10,28,5,0,0), -d(2019,4,7,6,0,0), -d(2019,10,27,5,0,0), -d(2020,4,5,6,0,0), -d(2020,10,25,5,0,0), -d(2021,4,4,6,0,0), -d(2021,10,31,5,0,0), -d(2022,4,3,6,0,0), -d(2022,10,30,5,0,0), -d(2023,4,2,6,0,0), -d(2023,10,29,5,0,0), -d(2024,4,7,6,0,0), -d(2024,10,27,5,0,0), -d(2025,4,6,6,0,0), -d(2025,10,26,5,0,0), -d(2026,4,5,6,0,0), -d(2026,10,25,5,0,0), -d(2027,4,4,6,0,0), -d(2027,10,31,5,0,0), -d(2028,4,2,6,0,0), -d(2028,10,29,5,0,0), -d(2029,4,1,6,0,0), -d(2029,10,28,5,0,0), -d(2030,4,7,6,0,0), -d(2030,10,27,5,0,0), -d(2031,4,6,6,0,0), -d(2031,10,26,5,0,0), -d(2032,4,4,6,0,0), -d(2032,10,31,5,0,0), -d(2033,4,3,6,0,0), -d(2033,10,30,5,0,0), -d(2034,4,2,6,0,0), -d(2034,10,29,5,0,0), -d(2035,4,1,6,0,0), -d(2035,10,28,5,0,0), -d(2036,4,6,6,0,0), -d(2036,10,26,5,0,0), -d(2037,4,5,6,0,0), -d(2037,10,25,5,0,0), - ] - - _transition_info = [ -i(-16500,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Thule = Thule() - diff --git a/modules/pytz/zoneinfo/America/Thunder_Bay.py b/modules/pytz/zoneinfo/America/Thunder_Bay.py deleted file mode 100644 index 699cad24..00000000 --- a/modules/pytz/zoneinfo/America/Thunder_Bay.py +++ /dev/null @@ -1,296 +0,0 @@ -'''tzinfo timezone information for America/Thunder_Bay.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Thunder_Bay(DstTzInfo): - '''America/Thunder_Bay timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Thunder_Bay' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,1,1,6,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Thunder_Bay = Thunder_Bay() - diff --git a/modules/pytz/zoneinfo/America/Tijuana.py b/modules/pytz/zoneinfo/America/Tijuana.py deleted file mode 100644 index 3f0bdcb7..00000000 --- a/modules/pytz/zoneinfo/America/Tijuana.py +++ /dev/null @@ -1,316 +0,0 @@ -'''tzinfo timezone information for America/Tijuana.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tijuana(DstTzInfo): - '''America/Tijuana timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Tijuana' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,8,0,0), -d(1924,1,1,7,0,0), -d(1927,6,11,7,0,0), -d(1930,11,15,7,0,0), -d(1931,4,1,8,0,0), -d(1931,9,30,7,0,0), -d(1942,4,24,8,0,0), -d(1945,11,12,7,0,0), -d(1948,4,5,8,0,0), -d(1949,1,14,7,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-28080,0,'LMT'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Tijuana = Tijuana() - diff --git a/modules/pytz/zoneinfo/America/Toronto.py b/modules/pytz/zoneinfo/America/Toronto.py deleted file mode 100644 index 25d4ae2f..00000000 --- a/modules/pytz/zoneinfo/America/Toronto.py +++ /dev/null @@ -1,484 +0,0 @@ -'''tzinfo timezone information for America/Toronto.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Toronto(DstTzInfo): - '''America/Toronto timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Toronto' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,7,0,0), -d(1918,10,31,6,0,0), -d(1919,3,31,4,30,0), -d(1919,10,26,4,0,0), -d(1920,5,2,7,0,0), -d(1920,9,26,4,0,0), -d(1921,5,15,7,0,0), -d(1921,9,15,6,0,0), -d(1922,5,14,7,0,0), -d(1922,9,17,6,0,0), -d(1923,5,13,7,0,0), -d(1923,9,16,6,0,0), -d(1924,5,4,7,0,0), -d(1924,9,21,6,0,0), -d(1925,5,3,7,0,0), -d(1925,9,20,6,0,0), -d(1926,5,2,7,0,0), -d(1926,9,19,6,0,0), -d(1927,5,1,7,0,0), -d(1927,9,25,6,0,0), -d(1928,4,29,7,0,0), -d(1928,9,30,6,0,0), -d(1929,4,28,7,0,0), -d(1929,9,29,6,0,0), -d(1930,4,27,7,0,0), -d(1930,9,28,6,0,0), -d(1931,4,26,7,0,0), -d(1931,9,27,6,0,0), -d(1932,5,1,7,0,0), -d(1932,9,25,6,0,0), -d(1933,4,30,7,0,0), -d(1933,10,1,6,0,0), -d(1934,4,29,7,0,0), -d(1934,9,30,6,0,0), -d(1935,4,28,7,0,0), -d(1935,9,29,6,0,0), -d(1936,4,26,7,0,0), -d(1936,9,27,6,0,0), -d(1937,4,25,7,0,0), -d(1937,9,26,6,0,0), -d(1938,4,24,7,0,0), -d(1938,9,25,6,0,0), -d(1939,4,30,7,0,0), -d(1939,9,24,6,0,0), -d(1940,4,28,7,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,5,0,0), -d(1947,9,28,4,0,0), -d(1948,4,25,5,0,0), -d(1948,9,26,4,0,0), -d(1949,4,24,5,0,0), -d(1949,11,27,4,0,0), -d(1950,4,30,7,0,0), -d(1950,11,26,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,9,25,6,0,0), -d(1956,4,29,7,0,0), -d(1956,9,30,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Toronto = Toronto() - diff --git a/modules/pytz/zoneinfo/America/Tortola.py b/modules/pytz/zoneinfo/America/Tortola.py deleted file mode 100644 index 485f3841..00000000 --- a/modules/pytz/zoneinfo/America/Tortola.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Tortola.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tortola(DstTzInfo): - '''America/Tortola timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Tortola' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,18,28), - ] - - _transition_info = [ -i(-15480,0,'LMT'), -i(-14400,0,'AST'), - ] - -Tortola = Tortola() - diff --git a/modules/pytz/zoneinfo/America/Vancouver.py b/modules/pytz/zoneinfo/America/Vancouver.py deleted file mode 100644 index 9ca08a35..00000000 --- a/modules/pytz/zoneinfo/America/Vancouver.py +++ /dev/null @@ -1,398 +0,0 @@ -'''tzinfo timezone information for America/Vancouver.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vancouver(DstTzInfo): - '''America/Vancouver timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Vancouver' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,10,0,0), -d(1918,10,31,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1946,4,28,10,0,0), -d(1946,10,13,9,0,0), -d(1947,4,27,10,0,0), -d(1947,9,28,9,0,0), -d(1948,4,25,10,0,0), -d(1948,9,26,9,0,0), -d(1949,4,24,10,0,0), -d(1949,9,25,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,4,28,10,0,0), -d(1974,10,27,9,0,0), -d(1975,4,27,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Vancouver = Vancouver() - diff --git a/modules/pytz/zoneinfo/America/Virgin.py b/modules/pytz/zoneinfo/America/Virgin.py deleted file mode 100644 index 9d6529ac..00000000 --- a/modules/pytz/zoneinfo/America/Virgin.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for America/Virgin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Virgin(DstTzInfo): - '''America/Virgin timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Virgin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,7,1,4,19,44), - ] - - _transition_info = [ -i(-15600,0,'LMT'), -i(-14400,0,'AST'), - ] - -Virgin = Virgin() - diff --git a/modules/pytz/zoneinfo/America/Whitehorse.py b/modules/pytz/zoneinfo/America/Whitehorse.py deleted file mode 100644 index 6cf824e7..00000000 --- a/modules/pytz/zoneinfo/America/Whitehorse.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for America/Whitehorse.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Whitehorse(DstTzInfo): - '''America/Whitehorse timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Whitehorse' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,11,0,0), -d(1918,10,27,10,0,0), -d(1919,5,25,11,0,0), -d(1919,11,1,8,0,0), -d(1942,2,9,11,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,10,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,9,0,0), -d(1966,7,1,11,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YWT'), -i(-28800,3600,'YPT'), -i(-32400,0,'YST'), -i(-25200,7200,'YDDT'), -i(-32400,0,'YST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Whitehorse = Whitehorse() - diff --git a/modules/pytz/zoneinfo/America/Winnipeg.py b/modules/pytz/zoneinfo/America/Winnipeg.py deleted file mode 100644 index a91a4713..00000000 --- a/modules/pytz/zoneinfo/America/Winnipeg.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for America/Winnipeg.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Winnipeg(DstTzInfo): - '''America/Winnipeg timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Winnipeg' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,23,6,0,0), -d(1916,9,17,5,0,0), -d(1918,4,14,8,0,0), -d(1918,10,31,7,0,0), -d(1937,5,16,8,0,0), -d(1937,9,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,5,12,8,0,0), -d(1946,10,13,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,5,1,8,0,0), -d(1950,9,30,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,9,25,7,0,0), -d(1956,4,29,8,0,0), -d(1956,9,30,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,9,25,7,0,0), -d(1963,4,28,8,0,0), -d(1963,9,22,7,0,0), -d(1966,4,24,8,0,0), -d(1966,10,30,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,4,28,8,0,0), -d(1974,10,27,7,0,0), -d(1975,4,27,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Winnipeg = Winnipeg() - diff --git a/modules/pytz/zoneinfo/America/Yakutat.py b/modules/pytz/zoneinfo/America/Yakutat.py deleted file mode 100644 index b98a6afd..00000000 --- a/modules/pytz/zoneinfo/America/Yakutat.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for America/Yakutat.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yakutat(DstTzInfo): - '''America/Yakutat timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Yakutat' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,11,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,10,0,0), -d(1969,4,27,11,0,0), -d(1969,10,26,10,0,0), -d(1970,4,26,11,0,0), -d(1970,10,25,10,0,0), -d(1971,4,25,11,0,0), -d(1971,10,31,10,0,0), -d(1972,4,30,11,0,0), -d(1972,10,29,10,0,0), -d(1973,4,29,11,0,0), -d(1973,10,28,10,0,0), -d(1974,1,6,11,0,0), -d(1974,10,27,10,0,0), -d(1975,2,23,11,0,0), -d(1975,10,26,10,0,0), -d(1976,4,25,11,0,0), -d(1976,10,31,10,0,0), -d(1977,4,24,11,0,0), -d(1977,10,30,10,0,0), -d(1978,4,30,11,0,0), -d(1978,10,29,10,0,0), -d(1979,4,29,11,0,0), -d(1979,10,28,10,0,0), -d(1980,4,27,11,0,0), -d(1980,10,26,10,0,0), -d(1981,4,26,11,0,0), -d(1981,10,25,10,0,0), -d(1982,4,25,11,0,0), -d(1982,10,31,10,0,0), -d(1983,4,24,11,0,0), -d(1983,10,30,10,0,0), -d(1983,11,30,9,0,0), -d(1984,4,29,11,0,0), -d(1984,10,28,10,0,0), -d(1985,4,28,11,0,0), -d(1985,10,27,10,0,0), -d(1986,4,27,11,0,0), -d(1986,10,26,10,0,0), -d(1987,4,5,11,0,0), -d(1987,10,25,10,0,0), -d(1988,4,3,11,0,0), -d(1988,10,30,10,0,0), -d(1989,4,2,11,0,0), -d(1989,10,29,10,0,0), -d(1990,4,1,11,0,0), -d(1990,10,28,10,0,0), -d(1991,4,7,11,0,0), -d(1991,10,27,10,0,0), -d(1992,4,5,11,0,0), -d(1992,10,25,10,0,0), -d(1993,4,4,11,0,0), -d(1993,10,31,10,0,0), -d(1994,4,3,11,0,0), -d(1994,10,30,10,0,0), -d(1995,4,2,11,0,0), -d(1995,10,29,10,0,0), -d(1996,4,7,11,0,0), -d(1996,10,27,10,0,0), -d(1997,4,6,11,0,0), -d(1997,10,26,10,0,0), -d(1998,4,5,11,0,0), -d(1998,10,25,10,0,0), -d(1999,4,4,11,0,0), -d(1999,10,31,10,0,0), -d(2000,4,2,11,0,0), -d(2000,10,29,10,0,0), -d(2001,4,1,11,0,0), -d(2001,10,28,10,0,0), -d(2002,4,7,11,0,0), -d(2002,10,27,10,0,0), -d(2003,4,6,11,0,0), -d(2003,10,26,10,0,0), -d(2004,4,4,11,0,0), -d(2004,10,31,10,0,0), -d(2005,4,3,11,0,0), -d(2005,10,30,10,0,0), -d(2006,4,2,11,0,0), -d(2006,10,29,10,0,0), -d(2007,3,11,11,0,0), -d(2007,11,4,10,0,0), -d(2008,3,9,11,0,0), -d(2008,11,2,10,0,0), -d(2009,3,8,11,0,0), -d(2009,11,1,10,0,0), -d(2010,3,14,11,0,0), -d(2010,11,7,10,0,0), -d(2011,3,13,11,0,0), -d(2011,11,6,10,0,0), -d(2012,3,11,11,0,0), -d(2012,11,4,10,0,0), -d(2013,3,10,11,0,0), -d(2013,11,3,10,0,0), -d(2014,3,9,11,0,0), -d(2014,11,2,10,0,0), -d(2015,3,8,11,0,0), -d(2015,11,1,10,0,0), -d(2016,3,13,11,0,0), -d(2016,11,6,10,0,0), -d(2017,3,12,11,0,0), -d(2017,11,5,10,0,0), -d(2018,3,11,11,0,0), -d(2018,11,4,10,0,0), -d(2019,3,10,11,0,0), -d(2019,11,3,10,0,0), -d(2020,3,8,11,0,0), -d(2020,11,1,10,0,0), -d(2021,3,14,11,0,0), -d(2021,11,7,10,0,0), -d(2022,3,13,11,0,0), -d(2022,11,6,10,0,0), -d(2023,3,12,11,0,0), -d(2023,11,5,10,0,0), -d(2024,3,10,11,0,0), -d(2024,11,3,10,0,0), -d(2025,3,9,11,0,0), -d(2025,11,2,10,0,0), -d(2026,3,8,11,0,0), -d(2026,11,1,10,0,0), -d(2027,3,14,11,0,0), -d(2027,11,7,10,0,0), -d(2028,3,12,11,0,0), -d(2028,11,5,10,0,0), -d(2029,3,11,11,0,0), -d(2029,11,4,10,0,0), -d(2030,3,10,11,0,0), -d(2030,11,3,10,0,0), -d(2031,3,9,11,0,0), -d(2031,11,2,10,0,0), -d(2032,3,14,11,0,0), -d(2032,11,7,10,0,0), -d(2033,3,13,11,0,0), -d(2033,11,6,10,0,0), -d(2034,3,12,11,0,0), -d(2034,11,5,10,0,0), -d(2035,3,11,11,0,0), -d(2035,11,4,10,0,0), -d(2036,3,9,11,0,0), -d(2036,11,2,10,0,0), -d(2037,3,8,11,0,0), -d(2037,11,1,10,0,0), - ] - - _transition_info = [ -i(-32400,0,'YST'), -i(-28800,3600,'YWT'), -i(-28800,3600,'YPT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), - ] - -Yakutat = Yakutat() - diff --git a/modules/pytz/zoneinfo/America/Yellowknife.py b/modules/pytz/zoneinfo/America/Yellowknife.py deleted file mode 100644 index 90166cd3..00000000 --- a/modules/pytz/zoneinfo/America/Yellowknife.py +++ /dev/null @@ -1,270 +0,0 @@ -'''tzinfo timezone information for America/Yellowknife.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yellowknife(DstTzInfo): - '''America/Yellowknife timezone definition. See datetime.tzinfo for details''' - - zone = 'America/Yellowknife' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,9,0,0), -d(1918,10,27,8,0,0), -d(1919,5,25,9,0,0), -d(1919,11,1,6,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,7,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-18000,7200,'MDDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Yellowknife = Yellowknife() - diff --git a/modules/pytz/zoneinfo/America/__init__.py b/modules/pytz/zoneinfo/America/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Antarctica/Casey.py b/modules/pytz/zoneinfo/Antarctica/Casey.py deleted file mode 100644 index b4bcceb4..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Casey.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Antarctica/Casey.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Casey(DstTzInfo): - '''Antarctica/Casey timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Casey' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,1,1,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(28800,0,'WST'), - ] - -Casey = Casey() - diff --git a/modules/pytz/zoneinfo/Antarctica/Davis.py b/modules/pytz/zoneinfo/Antarctica/Davis.py deleted file mode 100644 index 6c1384fa..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Davis.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Antarctica/Davis.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Davis(DstTzInfo): - '''Antarctica/Davis timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Davis' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1957,1,13,0,0,0), -d(1964,10,31,17,0,0), -d(1969,2,1,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(25200,0,'DAVT'), -i(0,0,'zzz'), -i(25200,0,'DAVT'), - ] - -Davis = Davis() - diff --git a/modules/pytz/zoneinfo/Antarctica/DumontDUrville.py b/modules/pytz/zoneinfo/Antarctica/DumontDUrville.py deleted file mode 100644 index 14af4df3..00000000 --- a/modules/pytz/zoneinfo/Antarctica/DumontDUrville.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Antarctica/DumontDUrville.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class DumontDUrville(DstTzInfo): - '''Antarctica/DumontDUrville timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/DumontDUrville' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1947,1,1,0,0,0), -d(1952,1,13,14,0,0), -d(1956,11,1,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(36000,0,'PMT'), -i(0,0,'zzz'), -i(36000,0,'DDUT'), - ] - -DumontDUrville = DumontDUrville() - diff --git a/modules/pytz/zoneinfo/Antarctica/Mawson.py b/modules/pytz/zoneinfo/Antarctica/Mawson.py deleted file mode 100644 index ea1bc6c2..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Mawson.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Antarctica/Mawson.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mawson(DstTzInfo): - '''Antarctica/Mawson timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Mawson' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1954,2,13,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(21600,0,'MAWT'), - ] - -Mawson = Mawson() - diff --git a/modules/pytz/zoneinfo/Antarctica/McMurdo.py b/modules/pytz/zoneinfo/Antarctica/McMurdo.py deleted file mode 100644 index f7a5f472..00000000 --- a/modules/pytz/zoneinfo/Antarctica/McMurdo.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for Antarctica/McMurdo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class McMurdo(DstTzInfo): - '''Antarctica/McMurdo timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/McMurdo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1956,1,1,0,0,0), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), - ] - -McMurdo = McMurdo() - diff --git a/modules/pytz/zoneinfo/Antarctica/Palmer.py b/modules/pytz/zoneinfo/Antarctica/Palmer.py deleted file mode 100644 index e644670f..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Palmer.py +++ /dev/null @@ -1,282 +0,0 @@ -'''tzinfo timezone information for Antarctica/Palmer.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Palmer(DstTzInfo): - '''Antarctica/Palmer timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Palmer' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1965,1,1,0,0,0), -d(1965,3,1,3,0,0), -d(1965,10,15,4,0,0), -d(1966,3,1,3,0,0), -d(1966,10,15,4,0,0), -d(1967,4,1,3,0,0), -d(1967,10,1,4,0,0), -d(1968,4,7,3,0,0), -d(1968,10,6,4,0,0), -d(1969,4,6,3,0,0), -d(1969,10,5,4,0,0), -d(1974,1,23,3,0,0), -d(1974,5,1,2,0,0), -d(1974,10,6,3,0,0), -d(1975,4,6,2,0,0), -d(1975,10,5,3,0,0), -d(1976,4,4,2,0,0), -d(1976,10,3,3,0,0), -d(1977,4,3,2,0,0), -d(1982,5,1,3,0,0), -d(1982,10,10,4,0,0), -d(1983,3,13,3,0,0), -d(1983,10,9,4,0,0), -d(1984,3,11,3,0,0), -d(1984,10,14,4,0,0), -d(1985,3,10,3,0,0), -d(1985,10,13,4,0,0), -d(1986,3,9,3,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,3,0,0), -d(1987,10,11,4,0,0), -d(1988,3,13,3,0,0), -d(1988,10,9,4,0,0), -d(1989,3,12,3,0,0), -d(1989,10,15,4,0,0), -d(1990,3,11,3,0,0), -d(1990,10,14,4,0,0), -d(1991,3,10,3,0,0), -d(1991,10,13,4,0,0), -d(1992,3,15,3,0,0), -d(1992,10,11,4,0,0), -d(1993,3,14,3,0,0), -d(1993,10,10,4,0,0), -d(1994,3,13,3,0,0), -d(1994,10,9,4,0,0), -d(1995,3,12,3,0,0), -d(1995,10,15,4,0,0), -d(1996,3,10,3,0,0), -d(1996,10,13,4,0,0), -d(1997,3,9,3,0,0), -d(1997,10,12,4,0,0), -d(1998,3,15,3,0,0), -d(1998,9,27,4,0,0), -d(1999,4,4,3,0,0), -d(1999,10,10,4,0,0), -d(2000,3,12,3,0,0), -d(2000,10,15,4,0,0), -d(2001,3,11,3,0,0), -d(2001,10,14,4,0,0), -d(2002,3,10,3,0,0), -d(2002,10,13,4,0,0), -d(2003,3,9,3,0,0), -d(2003,10,12,4,0,0), -d(2004,3,14,3,0,0), -d(2004,10,10,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,9,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,14,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,12,4,0,0), -d(2009,3,15,3,0,0), -d(2009,10,11,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,10,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,9,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,14,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,13,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,12,4,0,0), -d(2015,3,15,3,0,0), -d(2015,10,11,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,9,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,14,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,13,4,0,0), -d(2020,3,15,3,0,0), -d(2020,10,11,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,10,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,9,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,13,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,12,4,0,0), -d(2026,3,15,3,0,0), -d(2026,10,11,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,10,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,14,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,13,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,12,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,10,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,9,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,14,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,12,4,0,0), -d(2037,3,15,3,0,0), -d(2037,10,11,4,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(-10800,-10800,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,3600,'ARST'), -i(-14400,0,'ART'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-7200,3600,'ARST'), -i(-10800,0,'ART'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), - ] - -Palmer = Palmer() - diff --git a/modules/pytz/zoneinfo/Antarctica/Rothera.py b/modules/pytz/zoneinfo/Antarctica/Rothera.py deleted file mode 100644 index ffd20cb4..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Rothera.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Antarctica/Rothera.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rothera(DstTzInfo): - '''Antarctica/Rothera timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Rothera' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1976,12,1,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(-10800,0,'ROTT'), - ] - -Rothera = Rothera() - diff --git a/modules/pytz/zoneinfo/Antarctica/South_Pole.py b/modules/pytz/zoneinfo/Antarctica/South_Pole.py deleted file mode 100644 index 9cbd0ff4..00000000 --- a/modules/pytz/zoneinfo/Antarctica/South_Pole.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for Antarctica/South_Pole.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class South_Pole(DstTzInfo): - '''Antarctica/South_Pole timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/South_Pole' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1956,1,1,0,0,0), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), - ] - -South_Pole = South_Pole() - diff --git a/modules/pytz/zoneinfo/Antarctica/Syowa.py b/modules/pytz/zoneinfo/Antarctica/Syowa.py deleted file mode 100644 index 8941832d..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Syowa.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Antarctica/Syowa.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Syowa(DstTzInfo): - '''Antarctica/Syowa timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Syowa' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1957,1,29,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(10800,0,'SYOT'), - ] - -Syowa = Syowa() - diff --git a/modules/pytz/zoneinfo/Antarctica/Vostok.py b/modules/pytz/zoneinfo/Antarctica/Vostok.py deleted file mode 100644 index 6e2e41ec..00000000 --- a/modules/pytz/zoneinfo/Antarctica/Vostok.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Antarctica/Vostok.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vostok(DstTzInfo): - '''Antarctica/Vostok timezone definition. See datetime.tzinfo for details''' - - zone = 'Antarctica/Vostok' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1957,12,16,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(21600,0,'VOST'), - ] - -Vostok = Vostok() - diff --git a/modules/pytz/zoneinfo/Antarctica/__init__.py b/modules/pytz/zoneinfo/Antarctica/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Arctic/Longyearbyen.py b/modules/pytz/zoneinfo/Arctic/Longyearbyen.py deleted file mode 100644 index 71577cbb..00000000 --- a/modules/pytz/zoneinfo/Arctic/Longyearbyen.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Arctic/Longyearbyen.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Longyearbyen(DstTzInfo): - '''Arctic/Longyearbyen timezone definition. See datetime.tzinfo for details''' - - zone = 'Arctic/Longyearbyen' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,22,0,0,0), -d(1916,9,29,22,0,0), -d(1940,8,10,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,10,1,1,0,0), -d(1959,3,15,1,0,0), -d(1959,9,20,1,0,0), -d(1960,3,20,1,0,0), -d(1960,9,18,1,0,0), -d(1961,3,19,1,0,0), -d(1961,9,17,1,0,0), -d(1962,3,18,1,0,0), -d(1962,9,16,1,0,0), -d(1963,3,17,1,0,0), -d(1963,9,15,1,0,0), -d(1964,3,15,1,0,0), -d(1964,9,20,1,0,0), -d(1965,4,25,1,0,0), -d(1965,9,19,1,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Longyearbyen = Longyearbyen() - diff --git a/modules/pytz/zoneinfo/Arctic/__init__.py b/modules/pytz/zoneinfo/Arctic/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Asia/Aden.py b/modules/pytz/zoneinfo/Asia/Aden.py deleted file mode 100644 index 0d0ac64e..00000000 --- a/modules/pytz/zoneinfo/Asia/Aden.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Aden.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Aden(DstTzInfo): - '''Asia/Aden timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Aden' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1949,12,31,20,59,12), - ] - - _transition_info = [ -i(10860,0,'LMT'), -i(10800,0,'AST'), - ] - -Aden = Aden() - diff --git a/modules/pytz/zoneinfo/Asia/Almaty.py b/modules/pytz/zoneinfo/Asia/Almaty.py deleted file mode 100644 index 9d0df827..00000000 --- a/modules/pytz/zoneinfo/Asia/Almaty.py +++ /dev/null @@ -1,120 +0,0 @@ -'''tzinfo timezone information for Asia/Almaty.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Almaty(DstTzInfo): - '''Asia/Almaty timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Almaty' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,18,52,12), -d(1930,6,20,19,0,0), -d(1981,3,31,18,0,0), -d(1981,9,30,17,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1990,12,31,18,0,0), -d(1992,3,28,17,0,0), -d(1992,9,26,16,0,0), -d(1993,3,27,20,0,0), -d(1993,9,25,20,0,0), -d(1994,3,26,20,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,20,0,0), -d(1995,9,23,20,0,0), -d(1996,3,30,20,0,0), -d(1996,10,26,20,0,0), -d(1997,3,29,20,0,0), -d(1997,10,25,20,0,0), -d(1998,3,28,20,0,0), -d(1998,10,24,20,0,0), -d(1999,3,27,20,0,0), -d(1999,10,30,20,0,0), -d(2000,3,25,20,0,0), -d(2000,10,28,20,0,0), -d(2001,3,24,20,0,0), -d(2001,10,27,20,0,0), -d(2002,3,30,20,0,0), -d(2002,10,26,20,0,0), -d(2003,3,29,20,0,0), -d(2003,10,25,20,0,0), -d(2004,3,27,20,0,0), -d(2004,10,30,20,0,0), -d(2005,3,14,18,0,0), - ] - - _transition_info = [ -i(18480,0,'LMT'), -i(18000,0,'ALMT'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(25200,3600,'ALMST'), -i(21600,0,'ALMT'), -i(21600,0,'ALMT'), - ] - -Almaty = Almaty() - diff --git a/modules/pytz/zoneinfo/Asia/Amman.py b/modules/pytz/zoneinfo/Asia/Amman.py deleted file mode 100644 index fb0a0725..00000000 --- a/modules/pytz/zoneinfo/Asia/Amman.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Asia/Amman.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Amman(DstTzInfo): - '''Asia/Amman timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Amman' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1930,12,31,21,36,16), -d(1973,6,5,22,0,0), -d(1973,9,30,21,0,0), -d(1974,4,30,22,0,0), -d(1974,9,30,21,0,0), -d(1975,4,30,22,0,0), -d(1975,9,30,21,0,0), -d(1976,4,30,22,0,0), -d(1976,10,31,21,0,0), -d(1977,4,30,22,0,0), -d(1977,9,30,21,0,0), -d(1978,4,29,22,0,0), -d(1978,9,29,21,0,0), -d(1985,3,31,22,0,0), -d(1985,9,30,21,0,0), -d(1986,4,3,22,0,0), -d(1986,10,2,21,0,0), -d(1987,4,2,22,0,0), -d(1987,10,1,21,0,0), -d(1988,3,31,22,0,0), -d(1988,10,6,21,0,0), -d(1989,5,7,22,0,0), -d(1989,10,5,21,0,0), -d(1990,4,26,22,0,0), -d(1990,10,4,21,0,0), -d(1991,4,16,22,0,0), -d(1991,9,26,21,0,0), -d(1992,4,9,22,0,0), -d(1992,10,1,21,0,0), -d(1993,4,1,22,0,0), -d(1993,9,30,21,0,0), -d(1994,3,31,22,0,0), -d(1994,9,15,21,0,0), -d(1995,4,6,22,0,0), -d(1995,9,14,22,0,0), -d(1996,4,4,22,0,0), -d(1996,9,19,22,0,0), -d(1997,4,3,22,0,0), -d(1997,9,18,22,0,0), -d(1998,4,2,22,0,0), -d(1998,9,17,22,0,0), -d(1999,6,30,22,0,0), -d(1999,9,29,22,0,0), -d(2000,3,29,22,0,0), -d(2000,9,27,22,0,0), -d(2001,3,28,22,0,0), -d(2001,9,26,22,0,0), -d(2002,3,27,22,0,0), -d(2002,9,25,22,0,0), -d(2003,3,26,22,0,0), -d(2003,10,23,22,0,0), -d(2004,3,24,22,0,0), -d(2004,10,14,22,0,0), -d(2005,3,30,22,0,0), -d(2005,9,29,22,0,0), -d(2006,3,29,22,0,0), -d(2006,9,28,22,0,0), -d(2007,3,28,22,0,0), -d(2007,9,27,22,0,0), -d(2008,3,26,22,0,0), -d(2008,9,25,22,0,0), -d(2009,3,25,22,0,0), -d(2009,9,24,22,0,0), -d(2010,3,24,22,0,0), -d(2010,9,23,22,0,0), -d(2011,3,30,22,0,0), -d(2011,9,29,22,0,0), -d(2012,3,28,22,0,0), -d(2012,9,27,22,0,0), -d(2013,3,27,22,0,0), -d(2013,9,26,22,0,0), -d(2014,3,26,22,0,0), -d(2014,9,25,22,0,0), -d(2015,3,25,22,0,0), -d(2015,9,24,22,0,0), -d(2016,3,30,22,0,0), -d(2016,9,29,22,0,0), -d(2017,3,29,22,0,0), -d(2017,9,28,22,0,0), -d(2018,3,28,22,0,0), -d(2018,9,27,22,0,0), -d(2019,3,27,22,0,0), -d(2019,9,26,22,0,0), -d(2020,3,25,22,0,0), -d(2020,9,24,22,0,0), -d(2021,3,24,22,0,0), -d(2021,9,23,22,0,0), -d(2022,3,30,22,0,0), -d(2022,9,29,22,0,0), -d(2023,3,29,22,0,0), -d(2023,9,28,22,0,0), -d(2024,3,27,22,0,0), -d(2024,9,26,22,0,0), -d(2025,3,26,22,0,0), -d(2025,9,25,22,0,0), -d(2026,3,25,22,0,0), -d(2026,9,24,22,0,0), -d(2027,3,24,22,0,0), -d(2027,9,23,22,0,0), -d(2028,3,29,22,0,0), -d(2028,9,28,22,0,0), -d(2029,3,28,22,0,0), -d(2029,9,27,22,0,0), -d(2030,3,27,22,0,0), -d(2030,9,26,22,0,0), -d(2031,3,26,22,0,0), -d(2031,9,25,22,0,0), -d(2032,3,24,22,0,0), -d(2032,9,23,22,0,0), -d(2033,3,30,22,0,0), -d(2033,9,29,22,0,0), -d(2034,3,29,22,0,0), -d(2034,9,28,22,0,0), -d(2035,3,28,22,0,0), -d(2035,9,27,22,0,0), -d(2036,3,26,22,0,0), -d(2036,9,25,22,0,0), -d(2037,3,25,22,0,0), -d(2037,9,24,22,0,0), - ] - - _transition_info = [ -i(8640,0,'LMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Amman = Amman() - diff --git a/modules/pytz/zoneinfo/Asia/Anadyr.py b/modules/pytz/zoneinfo/Asia/Anadyr.py deleted file mode 100644 index 37b50af9..00000000 --- a/modules/pytz/zoneinfo/Asia/Anadyr.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Anadyr.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Anadyr(DstTzInfo): - '''Asia/Anadyr timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Anadyr' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,12,10,4), -d(1930,6,20,12,0,0), -d(1981,3,31,11,0,0), -d(1981,9,30,10,0,0), -d(1982,3,31,11,0,0), -d(1982,9,30,11,0,0), -d(1983,3,31,12,0,0), -d(1983,9,30,11,0,0), -d(1984,3,31,12,0,0), -d(1984,9,29,14,0,0), -d(1985,3,30,14,0,0), -d(1985,9,28,14,0,0), -d(1986,3,29,14,0,0), -d(1986,9,27,14,0,0), -d(1987,3,28,14,0,0), -d(1987,9,26,14,0,0), -d(1988,3,26,14,0,0), -d(1988,9,24,14,0,0), -d(1989,3,25,14,0,0), -d(1989,9,23,14,0,0), -d(1990,3,24,14,0,0), -d(1990,9,29,14,0,0), -d(1991,3,30,14,0,0), -d(1991,9,28,15,0,0), -d(1992,1,18,15,0,0), -d(1992,3,28,11,0,0), -d(1992,9,26,10,0,0), -d(1993,3,27,14,0,0), -d(1993,9,25,14,0,0), -d(1994,3,26,14,0,0), -d(1994,9,24,14,0,0), -d(1995,3,25,14,0,0), -d(1995,9,23,14,0,0), -d(1996,3,30,14,0,0), -d(1996,10,26,14,0,0), -d(1997,3,29,14,0,0), -d(1997,10,25,14,0,0), -d(1998,3,28,14,0,0), -d(1998,10,24,14,0,0), -d(1999,3,27,14,0,0), -d(1999,10,30,14,0,0), -d(2000,3,25,14,0,0), -d(2000,10,28,14,0,0), -d(2001,3,24,14,0,0), -d(2001,10,27,14,0,0), -d(2002,3,30,14,0,0), -d(2002,10,26,14,0,0), -d(2003,3,29,14,0,0), -d(2003,10,25,14,0,0), -d(2004,3,27,14,0,0), -d(2004,10,30,14,0,0), -d(2005,3,26,14,0,0), -d(2005,10,29,14,0,0), -d(2006,3,25,14,0,0), -d(2006,10,28,14,0,0), -d(2007,3,24,14,0,0), -d(2007,10,27,14,0,0), -d(2008,3,29,14,0,0), -d(2008,10,25,14,0,0), -d(2009,3,28,14,0,0), -d(2009,10,24,14,0,0), -d(2010,3,27,14,0,0), -d(2010,10,30,14,0,0), -d(2011,3,26,14,0,0), -d(2011,10,29,14,0,0), -d(2012,3,24,14,0,0), -d(2012,10,27,14,0,0), -d(2013,3,30,14,0,0), -d(2013,10,26,14,0,0), -d(2014,3,29,14,0,0), -d(2014,10,25,14,0,0), -d(2015,3,28,14,0,0), -d(2015,10,24,14,0,0), -d(2016,3,26,14,0,0), -d(2016,10,29,14,0,0), -d(2017,3,25,14,0,0), -d(2017,10,28,14,0,0), -d(2018,3,24,14,0,0), -d(2018,10,27,14,0,0), -d(2019,3,30,14,0,0), -d(2019,10,26,14,0,0), -d(2020,3,28,14,0,0), -d(2020,10,24,14,0,0), -d(2021,3,27,14,0,0), -d(2021,10,30,14,0,0), -d(2022,3,26,14,0,0), -d(2022,10,29,14,0,0), -d(2023,3,25,14,0,0), -d(2023,10,28,14,0,0), -d(2024,3,30,14,0,0), -d(2024,10,26,14,0,0), -d(2025,3,29,14,0,0), -d(2025,10,25,14,0,0), -d(2026,3,28,14,0,0), -d(2026,10,24,14,0,0), -d(2027,3,27,14,0,0), -d(2027,10,30,14,0,0), -d(2028,3,25,14,0,0), -d(2028,10,28,14,0,0), -d(2029,3,24,14,0,0), -d(2029,10,27,14,0,0), -d(2030,3,30,14,0,0), -d(2030,10,26,14,0,0), -d(2031,3,29,14,0,0), -d(2031,10,25,14,0,0), -d(2032,3,27,14,0,0), -d(2032,10,30,14,0,0), -d(2033,3,26,14,0,0), -d(2033,10,29,14,0,0), -d(2034,3,25,14,0,0), -d(2034,10,28,14,0,0), -d(2035,3,24,14,0,0), -d(2035,10,27,14,0,0), -d(2036,3,29,14,0,0), -d(2036,10,25,14,0,0), -d(2037,3,28,14,0,0), -d(2037,10,24,14,0,0), - ] - - _transition_info = [ -i(42600,0,'LMT'), -i(43200,0,'ANAT'), -i(46800,0,'ANAT'), -i(50400,3600,'ANAST'), -i(46800,0,'ANAT'), -i(46800,0,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(43200,0,'ANAST'), -i(39600,0,'ANAT'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), -i(46800,3600,'ANAST'), -i(43200,0,'ANAT'), - ] - -Anadyr = Anadyr() - diff --git a/modules/pytz/zoneinfo/Asia/Aqtau.py b/modules/pytz/zoneinfo/Asia/Aqtau.py deleted file mode 100644 index 319f007c..00000000 --- a/modules/pytz/zoneinfo/Asia/Aqtau.py +++ /dev/null @@ -1,122 +0,0 @@ -'''tzinfo timezone information for Asia/Aqtau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Aqtau(DstTzInfo): - '''Asia/Aqtau timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Aqtau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,38,56), -d(1930,6,20,20,0,0), -d(1962,12,31,19,0,0), -d(1981,9,30,19,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1990,12,31,19,0,0), -d(1991,12,15,19,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,17,0,0), -d(1993,3,27,21,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,21,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,21,0,0), -d(1995,9,23,22,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,22,0,0), -d(1997,3,29,22,0,0), -d(1997,10,25,22,0,0), -d(1998,3,28,22,0,0), -d(1998,10,24,22,0,0), -d(1999,3,27,22,0,0), -d(1999,10,30,22,0,0), -d(2000,3,25,22,0,0), -d(2000,10,28,22,0,0), -d(2001,3,24,22,0,0), -d(2001,10,27,22,0,0), -d(2002,3,30,22,0,0), -d(2002,10,26,22,0,0), -d(2003,3,29,22,0,0), -d(2003,10,25,22,0,0), -d(2004,3,27,22,0,0), -d(2004,10,30,22,0,0), -d(2005,3,14,20,0,0), - ] - - _transition_info = [ -i(12060,0,'LMT'), -i(14400,0,'FORT'), -i(18000,0,'FORT'), -i(18000,0,'SHET'), -i(21600,0,'SHET'), -i(21600,0,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(21600,3600,'SHEST'), -i(18000,0,'SHET'), -i(18000,0,'SHET'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(18000,0,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,3600,'AQTST'), -i(14400,0,'AQTT'), -i(18000,0,'AQTT'), - ] - -Aqtau = Aqtau() - diff --git a/modules/pytz/zoneinfo/Asia/Aqtobe.py b/modules/pytz/zoneinfo/Asia/Aqtobe.py deleted file mode 100644 index 2169a725..00000000 --- a/modules/pytz/zoneinfo/Asia/Aqtobe.py +++ /dev/null @@ -1,122 +0,0 @@ -'''tzinfo timezone information for Asia/Aqtobe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Aqtobe(DstTzInfo): - '''Asia/Aqtobe timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Aqtobe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,11,20), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1990,12,31,19,0,0), -d(1991,12,15,19,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,17,0,0), -d(1993,3,27,21,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,21,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,21,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,21,0,0), -d(1996,10,26,21,0,0), -d(1997,3,29,21,0,0), -d(1997,10,25,21,0,0), -d(1998,3,28,21,0,0), -d(1998,10,24,21,0,0), -d(1999,3,27,21,0,0), -d(1999,10,30,21,0,0), -d(2000,3,25,21,0,0), -d(2000,10,28,21,0,0), -d(2001,3,24,21,0,0), -d(2001,10,27,21,0,0), -d(2002,3,30,21,0,0), -d(2002,10,26,21,0,0), -d(2003,3,29,21,0,0), -d(2003,10,25,21,0,0), -d(2004,3,27,21,0,0), -d(2004,10,30,21,0,0), -d(2005,3,14,19,0,0), - ] - - _transition_info = [ -i(13740,0,'LMT'), -i(14400,0,'AKTT'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(21600,0,'AKTT'), -i(21600,0,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(21600,3600,'AKTST'), -i(18000,0,'AKTT'), -i(18000,0,'AKTT'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(21600,3600,'AQTST'), -i(18000,0,'AQTT'), -i(18000,0,'AQTT'), - ] - -Aqtobe = Aqtobe() - diff --git a/modules/pytz/zoneinfo/Asia/Ashgabat.py b/modules/pytz/zoneinfo/Asia/Ashgabat.py deleted file mode 100644 index 92137c82..00000000 --- a/modules/pytz/zoneinfo/Asia/Ashgabat.py +++ /dev/null @@ -1,72 +0,0 @@ -'''tzinfo timezone information for Asia/Ashgabat.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ashgabat(DstTzInfo): - '''Asia/Ashgabat timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Ashgabat' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,6,28), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,19,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1991,3,30,21,0,0), -d(1991,9,28,22,0,0), -d(1991,10,26,20,0,0), -d(1992,1,18,22,0,0), - ] - - _transition_info = [ -i(14040,0,'LMT'), -i(14400,0,'ASHT'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(18000,0,'ASHST'), -i(14400,0,'ASHT'), -i(14400,0,'TMT'), -i(18000,0,'TMT'), - ] - -Ashgabat = Ashgabat() - diff --git a/modules/pytz/zoneinfo/Asia/Ashkhabad.py b/modules/pytz/zoneinfo/Asia/Ashkhabad.py deleted file mode 100644 index a99394d9..00000000 --- a/modules/pytz/zoneinfo/Asia/Ashkhabad.py +++ /dev/null @@ -1,72 +0,0 @@ -'''tzinfo timezone information for Asia/Ashkhabad.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ashkhabad(DstTzInfo): - '''Asia/Ashkhabad timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Ashkhabad' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,6,28), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,19,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1991,3,30,21,0,0), -d(1991,9,28,22,0,0), -d(1991,10,26,20,0,0), -d(1992,1,18,22,0,0), - ] - - _transition_info = [ -i(14040,0,'LMT'), -i(14400,0,'ASHT'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(21600,3600,'ASHST'), -i(18000,0,'ASHT'), -i(18000,0,'ASHST'), -i(14400,0,'ASHT'), -i(14400,0,'TMT'), -i(18000,0,'TMT'), - ] - -Ashkhabad = Ashkhabad() - diff --git a/modules/pytz/zoneinfo/Asia/Baghdad.py b/modules/pytz/zoneinfo/Asia/Baghdad.py deleted file mode 100644 index 8492cb21..00000000 --- a/modules/pytz/zoneinfo/Asia/Baghdad.py +++ /dev/null @@ -1,246 +0,0 @@ -'''tzinfo timezone information for Asia/Baghdad.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Baghdad(DstTzInfo): - '''Asia/Baghdad timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Baghdad' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,12,31,21,2,24), -d(1982,4,30,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,30,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,30,20,0,0), -d(1985,3,31,21,0,0), -d(1985,9,28,22,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,22,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,22,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,22,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,22,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,22,0,0), -d(1991,4,1,0,0,0), -d(1991,10,1,0,0,0), -d(1992,4,1,0,0,0), -d(1992,10,1,0,0,0), -d(1993,4,1,0,0,0), -d(1993,10,1,0,0,0), -d(1994,4,1,0,0,0), -d(1994,10,1,0,0,0), -d(1995,4,1,0,0,0), -d(1995,10,1,0,0,0), -d(1996,4,1,0,0,0), -d(1996,10,1,0,0,0), -d(1997,4,1,0,0,0), -d(1997,10,1,0,0,0), -d(1998,4,1,0,0,0), -d(1998,10,1,0,0,0), -d(1999,4,1,0,0,0), -d(1999,10,1,0,0,0), -d(2000,4,1,0,0,0), -d(2000,10,1,0,0,0), -d(2001,4,1,0,0,0), -d(2001,10,1,0,0,0), -d(2002,4,1,0,0,0), -d(2002,10,1,0,0,0), -d(2003,4,1,0,0,0), -d(2003,10,1,0,0,0), -d(2004,4,1,0,0,0), -d(2004,10,1,0,0,0), -d(2005,4,1,0,0,0), -d(2005,10,1,0,0,0), -d(2006,4,1,0,0,0), -d(2006,10,1,0,0,0), -d(2007,4,1,0,0,0), -d(2007,10,1,0,0,0), -d(2008,4,1,0,0,0), -d(2008,10,1,0,0,0), -d(2009,4,1,0,0,0), -d(2009,10,1,0,0,0), -d(2010,4,1,0,0,0), -d(2010,10,1,0,0,0), -d(2011,4,1,0,0,0), -d(2011,10,1,0,0,0), -d(2012,4,1,0,0,0), -d(2012,10,1,0,0,0), -d(2013,4,1,0,0,0), -d(2013,10,1,0,0,0), -d(2014,4,1,0,0,0), -d(2014,10,1,0,0,0), -d(2015,4,1,0,0,0), -d(2015,10,1,0,0,0), -d(2016,4,1,0,0,0), -d(2016,10,1,0,0,0), -d(2017,4,1,0,0,0), -d(2017,10,1,0,0,0), -d(2018,4,1,0,0,0), -d(2018,10,1,0,0,0), -d(2019,4,1,0,0,0), -d(2019,10,1,0,0,0), -d(2020,4,1,0,0,0), -d(2020,10,1,0,0,0), -d(2021,4,1,0,0,0), -d(2021,10,1,0,0,0), -d(2022,4,1,0,0,0), -d(2022,10,1,0,0,0), -d(2023,4,1,0,0,0), -d(2023,10,1,0,0,0), -d(2024,4,1,0,0,0), -d(2024,10,1,0,0,0), -d(2025,4,1,0,0,0), -d(2025,10,1,0,0,0), -d(2026,4,1,0,0,0), -d(2026,10,1,0,0,0), -d(2027,4,1,0,0,0), -d(2027,10,1,0,0,0), -d(2028,4,1,0,0,0), -d(2028,10,1,0,0,0), -d(2029,4,1,0,0,0), -d(2029,10,1,0,0,0), -d(2030,4,1,0,0,0), -d(2030,10,1,0,0,0), -d(2031,4,1,0,0,0), -d(2031,10,1,0,0,0), -d(2032,4,1,0,0,0), -d(2032,10,1,0,0,0), -d(2033,4,1,0,0,0), -d(2033,10,1,0,0,0), -d(2034,4,1,0,0,0), -d(2034,10,1,0,0,0), -d(2035,4,1,0,0,0), -d(2035,10,1,0,0,0), -d(2036,4,1,0,0,0), -d(2036,10,1,0,0,0), -d(2037,4,1,0,0,0), -d(2037,10,1,0,0,0), - ] - - _transition_info = [ -i(10680,0,'BMT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), -i(14400,3600,'ADT'), -i(10800,0,'AST'), - ] - -Baghdad = Baghdad() - diff --git a/modules/pytz/zoneinfo/Asia/Bahrain.py b/modules/pytz/zoneinfo/Asia/Bahrain.py deleted file mode 100644 index 116d4895..00000000 --- a/modules/pytz/zoneinfo/Asia/Bahrain.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Bahrain.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bahrain(DstTzInfo): - '''Asia/Bahrain timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Bahrain' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,20,37,40), -d(1972,5,31,20,0,0), - ] - - _transition_info = [ -i(12120,0,'LMT'), -i(14400,0,'GST'), -i(10800,0,'AST'), - ] - -Bahrain = Bahrain() - diff --git a/modules/pytz/zoneinfo/Asia/Baku.py b/modules/pytz/zoneinfo/Asia/Baku.py deleted file mode 100644 index fde8ee07..00000000 --- a/modules/pytz/zoneinfo/Asia/Baku.py +++ /dev/null @@ -1,246 +0,0 @@ -'''tzinfo timezone information for Asia/Baku.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Baku(DstTzInfo): - '''Asia/Baku timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Baku' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,40,36), -d(1957,2,28,21,0,0), -d(1981,3,31,20,0,0), -d(1981,9,30,19,0,0), -d(1982,3,31,20,0,0), -d(1982,9,30,19,0,0), -d(1983,3,31,20,0,0), -d(1983,9,30,19,0,0), -d(1984,3,31,20,0,0), -d(1984,9,29,22,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,22,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,22,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,22,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,22,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,22,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,22,0,0), -d(1991,3,30,22,0,0), -d(1991,8,29,20,0,0), -d(1991,9,28,23,0,0), -d(1992,3,28,20,0,0), -d(1992,9,26,19,0,0), -d(1995,12,31,20,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1996,12,31,20,0,0), -d(1997,3,30,0,0,0), -d(1997,10,26,0,0,0), -d(1998,3,29,0,0,0), -d(1998,10,25,0,0,0), -d(1999,3,28,0,0,0), -d(1999,10,31,0,0,0), -d(2000,3,26,0,0,0), -d(2000,10,29,0,0,0), -d(2001,3,25,0,0,0), -d(2001,10,28,0,0,0), -d(2002,3,31,0,0,0), -d(2002,10,27,0,0,0), -d(2003,3,30,0,0,0), -d(2003,10,26,0,0,0), -d(2004,3,28,0,0,0), -d(2004,10,31,0,0,0), -d(2005,3,27,0,0,0), -d(2005,10,30,0,0,0), -d(2006,3,26,0,0,0), -d(2006,10,29,0,0,0), -d(2007,3,25,0,0,0), -d(2007,10,28,0,0,0), -d(2008,3,30,0,0,0), -d(2008,10,26,0,0,0), -d(2009,3,29,0,0,0), -d(2009,10,25,0,0,0), -d(2010,3,28,0,0,0), -d(2010,10,31,0,0,0), -d(2011,3,27,0,0,0), -d(2011,10,30,0,0,0), -d(2012,3,25,0,0,0), -d(2012,10,28,0,0,0), -d(2013,3,31,0,0,0), -d(2013,10,27,0,0,0), -d(2014,3,30,0,0,0), -d(2014,10,26,0,0,0), -d(2015,3,29,0,0,0), -d(2015,10,25,0,0,0), -d(2016,3,27,0,0,0), -d(2016,10,30,0,0,0), -d(2017,3,26,0,0,0), -d(2017,10,29,0,0,0), -d(2018,3,25,0,0,0), -d(2018,10,28,0,0,0), -d(2019,3,31,0,0,0), -d(2019,10,27,0,0,0), -d(2020,3,29,0,0,0), -d(2020,10,25,0,0,0), -d(2021,3,28,0,0,0), -d(2021,10,31,0,0,0), -d(2022,3,27,0,0,0), -d(2022,10,30,0,0,0), -d(2023,3,26,0,0,0), -d(2023,10,29,0,0,0), -d(2024,3,31,0,0,0), -d(2024,10,27,0,0,0), -d(2025,3,30,0,0,0), -d(2025,10,26,0,0,0), -d(2026,3,29,0,0,0), -d(2026,10,25,0,0,0), -d(2027,3,28,0,0,0), -d(2027,10,31,0,0,0), -d(2028,3,26,0,0,0), -d(2028,10,29,0,0,0), -d(2029,3,25,0,0,0), -d(2029,10,28,0,0,0), -d(2030,3,31,0,0,0), -d(2030,10,27,0,0,0), -d(2031,3,30,0,0,0), -d(2031,10,26,0,0,0), -d(2032,3,28,0,0,0), -d(2032,10,31,0,0,0), -d(2033,3,27,0,0,0), -d(2033,10,30,0,0,0), -d(2034,3,26,0,0,0), -d(2034,10,29,0,0,0), -d(2035,3,25,0,0,0), -d(2035,10,28,0,0,0), -d(2036,3,30,0,0,0), -d(2036,10,26,0,0,0), -d(2037,3,29,0,0,0), -d(2037,10,25,0,0,0), - ] - - _transition_info = [ -i(11940,0,'LMT'), -i(10800,0,'BAKT'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(18000,3600,'BAKST'), -i(14400,0,'BAKT'), -i(14400,0,'BAKST'), -i(14400,0,'AZST'), -i(10800,0,'AZT'), -i(14400,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), -i(18000,3600,'AZST'), -i(14400,0,'AZT'), - ] - -Baku = Baku() - diff --git a/modules/pytz/zoneinfo/Asia/Bangkok.py b/modules/pytz/zoneinfo/Asia/Bangkok.py deleted file mode 100644 index e133e804..00000000 --- a/modules/pytz/zoneinfo/Asia/Bangkok.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Bangkok.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bangkok(DstTzInfo): - '''Asia/Bangkok timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Bangkok' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,3,31,17,17,56), - ] - - _transition_info = [ -i(24120,0,'BMT'), -i(25200,0,'ICT'), - ] - -Bangkok = Bangkok() - diff --git a/modules/pytz/zoneinfo/Asia/Beirut.py b/modules/pytz/zoneinfo/Asia/Beirut.py deleted file mode 100644 index 5bfad431..00000000 --- a/modules/pytz/zoneinfo/Asia/Beirut.py +++ /dev/null @@ -1,300 +0,0 @@ -'''tzinfo timezone information for Asia/Beirut.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Beirut(DstTzInfo): - '''Asia/Beirut timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Beirut' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,3,27,22,0,0), -d(1920,10,24,21,0,0), -d(1921,4,2,22,0,0), -d(1921,10,2,21,0,0), -d(1922,3,25,22,0,0), -d(1922,10,7,21,0,0), -d(1923,4,21,22,0,0), -d(1923,9,15,21,0,0), -d(1957,4,30,22,0,0), -d(1957,9,30,21,0,0), -d(1958,4,30,22,0,0), -d(1958,9,30,21,0,0), -d(1959,4,30,22,0,0), -d(1959,9,30,21,0,0), -d(1960,4,30,22,0,0), -d(1960,9,30,21,0,0), -d(1961,4,30,22,0,0), -d(1961,9,30,21,0,0), -d(1972,6,21,22,0,0), -d(1972,9,30,21,0,0), -d(1973,4,30,22,0,0), -d(1973,9,30,21,0,0), -d(1974,4,30,22,0,0), -d(1974,9,30,21,0,0), -d(1975,4,30,22,0,0), -d(1975,9,30,21,0,0), -d(1976,4,30,22,0,0), -d(1976,9,30,21,0,0), -d(1977,4,30,22,0,0), -d(1977,9,30,21,0,0), -d(1978,4,29,22,0,0), -d(1978,9,29,21,0,0), -d(1984,4,30,22,0,0), -d(1984,10,15,21,0,0), -d(1985,4,30,22,0,0), -d(1985,10,15,21,0,0), -d(1986,4,30,22,0,0), -d(1986,10,15,21,0,0), -d(1987,4,30,22,0,0), -d(1987,10,15,21,0,0), -d(1988,5,31,22,0,0), -d(1988,10,15,21,0,0), -d(1989,5,9,22,0,0), -d(1989,10,15,21,0,0), -d(1990,4,30,22,0,0), -d(1990,10,15,21,0,0), -d(1991,4,30,22,0,0), -d(1991,10,15,21,0,0), -d(1992,4,30,22,0,0), -d(1992,10,3,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,9,28,21,0,0), -d(1997,3,29,22,0,0), -d(1997,9,27,21,0,0), -d(1998,3,28,22,0,0), -d(1998,9,26,21,0,0), -d(1999,3,27,22,0,0), -d(1999,10,30,21,0,0), -d(2000,3,25,22,0,0), -d(2000,10,28,21,0,0), -d(2001,3,24,22,0,0), -d(2001,10,27,21,0,0), -d(2002,3,30,22,0,0), -d(2002,10,26,21,0,0), -d(2003,3,29,22,0,0), -d(2003,10,25,21,0,0), -d(2004,3,27,22,0,0), -d(2004,10,30,21,0,0), -d(2005,3,26,22,0,0), -d(2005,10,29,21,0,0), -d(2006,3,25,22,0,0), -d(2006,10,28,21,0,0), -d(2007,3,24,22,0,0), -d(2007,10,27,21,0,0), -d(2008,3,29,22,0,0), -d(2008,10,25,21,0,0), -d(2009,3,28,22,0,0), -d(2009,10,24,21,0,0), -d(2010,3,27,22,0,0), -d(2010,10,30,21,0,0), -d(2011,3,26,22,0,0), -d(2011,10,29,21,0,0), -d(2012,3,24,22,0,0), -d(2012,10,27,21,0,0), -d(2013,3,30,22,0,0), -d(2013,10,26,21,0,0), -d(2014,3,29,22,0,0), -d(2014,10,25,21,0,0), -d(2015,3,28,22,0,0), -d(2015,10,24,21,0,0), -d(2016,3,26,22,0,0), -d(2016,10,29,21,0,0), -d(2017,3,25,22,0,0), -d(2017,10,28,21,0,0), -d(2018,3,24,22,0,0), -d(2018,10,27,21,0,0), -d(2019,3,30,22,0,0), -d(2019,10,26,21,0,0), -d(2020,3,28,22,0,0), -d(2020,10,24,21,0,0), -d(2021,3,27,22,0,0), -d(2021,10,30,21,0,0), -d(2022,3,26,22,0,0), -d(2022,10,29,21,0,0), -d(2023,3,25,22,0,0), -d(2023,10,28,21,0,0), -d(2024,3,30,22,0,0), -d(2024,10,26,21,0,0), -d(2025,3,29,22,0,0), -d(2025,10,25,21,0,0), -d(2026,3,28,22,0,0), -d(2026,10,24,21,0,0), -d(2027,3,27,22,0,0), -d(2027,10,30,21,0,0), -d(2028,3,25,22,0,0), -d(2028,10,28,21,0,0), -d(2029,3,24,22,0,0), -d(2029,10,27,21,0,0), -d(2030,3,30,22,0,0), -d(2030,10,26,21,0,0), -d(2031,3,29,22,0,0), -d(2031,10,25,21,0,0), -d(2032,3,27,22,0,0), -d(2032,10,30,21,0,0), -d(2033,3,26,22,0,0), -d(2033,10,29,21,0,0), -d(2034,3,25,22,0,0), -d(2034,10,28,21,0,0), -d(2035,3,24,22,0,0), -d(2035,10,27,21,0,0), -d(2036,3,29,22,0,0), -d(2036,10,25,21,0,0), -d(2037,3,28,22,0,0), -d(2037,10,24,21,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Beirut = Beirut() - diff --git a/modules/pytz/zoneinfo/Asia/Bishkek.py b/modules/pytz/zoneinfo/Asia/Bishkek.py deleted file mode 100644 index e5eb11b4..00000000 --- a/modules/pytz/zoneinfo/Asia/Bishkek.py +++ /dev/null @@ -1,124 +0,0 @@ -'''tzinfo timezone information for Asia/Bishkek.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bishkek(DstTzInfo): - '''Asia/Bishkek timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Bishkek' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,19,1,36), -d(1930,6,20,19,0,0), -d(1981,3,31,18,0,0), -d(1981,9,30,17,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1991,3,30,20,0,0), -d(1991,8,30,20,0,0), -d(1992,4,11,19,0,0), -d(1992,9,26,18,0,0), -d(1993,4,10,19,0,0), -d(1993,9,25,18,0,0), -d(1994,4,9,19,0,0), -d(1994,9,24,18,0,0), -d(1995,4,8,19,0,0), -d(1995,9,23,18,0,0), -d(1996,4,6,19,0,0), -d(1996,9,28,18,0,0), -d(1997,3,29,21,30,0), -d(1997,10,25,20,30,0), -d(1998,3,28,21,30,0), -d(1998,10,24,20,30,0), -d(1999,3,27,21,30,0), -d(1999,10,30,20,30,0), -d(2000,3,25,21,30,0), -d(2000,10,28,20,30,0), -d(2001,3,24,21,30,0), -d(2001,10,27,20,30,0), -d(2002,3,30,21,30,0), -d(2002,10,26,20,30,0), -d(2003,3,29,21,30,0), -d(2003,10,25,20,30,0), -d(2004,3,27,21,30,0), -d(2004,10,30,20,30,0), -d(2005,3,26,21,30,0), -d(2005,8,11,18,0,0), - ] - - _transition_info = [ -i(17880,0,'LMT'), -i(18000,0,'FRUT'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(25200,3600,'FRUST'), -i(21600,0,'FRUT'), -i(21600,0,'FRUST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(18000,0,'KGT'), -i(21600,3600,'KGST'), -i(21600,0,'KGT'), - ] - -Bishkek = Bishkek() - diff --git a/modules/pytz/zoneinfo/Asia/Brunei.py b/modules/pytz/zoneinfo/Asia/Brunei.py deleted file mode 100644 index fbbc5a0d..00000000 --- a/modules/pytz/zoneinfo/Asia/Brunei.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Brunei.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Brunei(DstTzInfo): - '''Asia/Brunei timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Brunei' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1926,2,28,16,20,20), -d(1932,12,31,16,30,0), - ] - - _transition_info = [ -i(27600,0,'LMT'), -i(27000,0,'BNT'), -i(28800,0,'BNT'), - ] - -Brunei = Brunei() - diff --git a/modules/pytz/zoneinfo/Asia/Calcutta.py b/modules/pytz/zoneinfo/Asia/Calcutta.py deleted file mode 100644 index 08e3f934..00000000 --- a/modules/pytz/zoneinfo/Asia/Calcutta.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Calcutta.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Calcutta(DstTzInfo): - '''Asia/Calcutta timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Calcutta' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,9,30,18,6,40), -d(1942,5,14,17,30,0), -d(1942,8,31,18,30,0), -d(1945,10,14,17,30,0), - ] - - _transition_info = [ -i(21180,0,'HMT'), -i(23400,0,'BURT'), -i(19800,0,'IST'), -i(23400,3600,'IST'), -i(19800,0,'IST'), - ] - -Calcutta = Calcutta() - diff --git a/modules/pytz/zoneinfo/Asia/Choibalsan.py b/modules/pytz/zoneinfo/Asia/Choibalsan.py deleted file mode 100644 index 5eeaea75..00000000 --- a/modules/pytz/zoneinfo/Asia/Choibalsan.py +++ /dev/null @@ -1,236 +0,0 @@ -'''tzinfo timezone information for Asia/Choibalsan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Choibalsan(DstTzInfo): - '''Asia/Choibalsan timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Choibalsan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,7,31,16,22,0), -d(1977,12,31,17,0,0), -d(1983,3,31,16,0,0), -d(1983,9,30,14,0,0), -d(1984,3,31,15,0,0), -d(1984,9,29,17,0,0), -d(1985,3,30,17,0,0), -d(1985,9,28,17,0,0), -d(1986,3,29,17,0,0), -d(1986,9,27,17,0,0), -d(1987,3,28,17,0,0), -d(1987,9,26,17,0,0), -d(1988,3,26,17,0,0), -d(1988,9,24,17,0,0), -d(1989,3,25,17,0,0), -d(1989,9,23,17,0,0), -d(1990,3,24,17,0,0), -d(1990,9,29,17,0,0), -d(1991,3,30,17,0,0), -d(1991,9,28,17,0,0), -d(1992,3,28,17,0,0), -d(1992,9,26,17,0,0), -d(1993,3,27,17,0,0), -d(1993,9,25,17,0,0), -d(1994,3,26,17,0,0), -d(1994,9,24,17,0,0), -d(1995,3,25,17,0,0), -d(1995,9,23,17,0,0), -d(1996,3,30,17,0,0), -d(1996,9,28,17,0,0), -d(1997,3,29,17,0,0), -d(1997,9,27,17,0,0), -d(1998,3,28,17,0,0), -d(1998,9,26,17,0,0), -d(2001,4,27,17,0,0), -d(2001,9,28,16,0,0), -d(2002,3,29,17,0,0), -d(2002,9,27,16,0,0), -d(2003,3,28,17,0,0), -d(2003,9,26,16,0,0), -d(2004,3,26,17,0,0), -d(2004,9,24,16,0,0), -d(2005,3,25,17,0,0), -d(2005,9,23,16,0,0), -d(2006,3,24,17,0,0), -d(2006,9,29,16,0,0), -d(2007,3,30,17,0,0), -d(2007,9,28,16,0,0), -d(2008,3,28,17,0,0), -d(2008,9,26,16,0,0), -d(2009,3,27,17,0,0), -d(2009,9,25,16,0,0), -d(2010,3,26,17,0,0), -d(2010,9,24,16,0,0), -d(2011,3,25,17,0,0), -d(2011,9,23,16,0,0), -d(2012,3,30,17,0,0), -d(2012,9,28,16,0,0), -d(2013,3,29,17,0,0), -d(2013,9,27,16,0,0), -d(2014,3,28,17,0,0), -d(2014,9,26,16,0,0), -d(2015,3,27,17,0,0), -d(2015,9,25,16,0,0), -d(2016,3,25,17,0,0), -d(2016,9,23,16,0,0), -d(2017,3,24,17,0,0), -d(2017,9,29,16,0,0), -d(2018,3,30,17,0,0), -d(2018,9,28,16,0,0), -d(2019,3,29,17,0,0), -d(2019,9,27,16,0,0), -d(2020,3,27,17,0,0), -d(2020,9,25,16,0,0), -d(2021,3,26,17,0,0), -d(2021,9,24,16,0,0), -d(2022,3,25,17,0,0), -d(2022,9,23,16,0,0), -d(2023,3,24,17,0,0), -d(2023,9,29,16,0,0), -d(2024,3,29,17,0,0), -d(2024,9,27,16,0,0), -d(2025,3,28,17,0,0), -d(2025,9,26,16,0,0), -d(2026,3,27,17,0,0), -d(2026,9,25,16,0,0), -d(2027,3,26,17,0,0), -d(2027,9,24,16,0,0), -d(2028,3,24,17,0,0), -d(2028,9,29,16,0,0), -d(2029,3,30,17,0,0), -d(2029,9,28,16,0,0), -d(2030,3,29,17,0,0), -d(2030,9,27,16,0,0), -d(2031,3,28,17,0,0), -d(2031,9,26,16,0,0), -d(2032,3,26,17,0,0), -d(2032,9,24,16,0,0), -d(2033,3,25,17,0,0), -d(2033,9,23,16,0,0), -d(2034,3,24,17,0,0), -d(2034,9,29,16,0,0), -d(2035,3,30,17,0,0), -d(2035,9,28,16,0,0), -d(2036,3,28,17,0,0), -d(2036,9,26,16,0,0), -d(2037,3,27,17,0,0), -d(2037,9,25,16,0,0), - ] - - _transition_info = [ -i(27480,0,'LMT'), -i(25200,0,'ULAT'), -i(28800,0,'ULAT'), -i(36000,7200,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), -i(36000,3600,'CHOST'), -i(32400,0,'CHOT'), - ] - -Choibalsan = Choibalsan() - diff --git a/modules/pytz/zoneinfo/Asia/Chongqing.py b/modules/pytz/zoneinfo/Asia/Chongqing.py deleted file mode 100644 index 40f8f629..00000000 --- a/modules/pytz/zoneinfo/Asia/Chongqing.py +++ /dev/null @@ -1,48 +0,0 @@ -'''tzinfo timezone information for Asia/Chongqing.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chongqing(DstTzInfo): - '''Asia/Chongqing timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Chongqing' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,16,53,40), -d(1980,4,30,17,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(25560,0,'LMT'), -i(25200,0,'LONT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Chongqing = Chongqing() - diff --git a/modules/pytz/zoneinfo/Asia/Chungking.py b/modules/pytz/zoneinfo/Asia/Chungking.py deleted file mode 100644 index 7f118aba..00000000 --- a/modules/pytz/zoneinfo/Asia/Chungking.py +++ /dev/null @@ -1,48 +0,0 @@ -'''tzinfo timezone information for Asia/Chungking.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chungking(DstTzInfo): - '''Asia/Chungking timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Chungking' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,16,53,40), -d(1980,4,30,17,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(25560,0,'LMT'), -i(25200,0,'LONT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Chungking = Chungking() - diff --git a/modules/pytz/zoneinfo/Asia/Colombo.py b/modules/pytz/zoneinfo/Asia/Colombo.py deleted file mode 100644 index 061003aa..00000000 --- a/modules/pytz/zoneinfo/Asia/Colombo.py +++ /dev/null @@ -1,32 +0,0 @@ -'''tzinfo timezone information for Asia/Colombo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Colombo(DstTzInfo): - '''Asia/Colombo timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Colombo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,12,31,18,40,28), -d(1942,1,4,18,30,0), -d(1942,8,31,18,0,0), -d(1945,10,15,19,30,0), -d(1996,5,24,18,30,0), -d(1996,10,25,18,0,0), - ] - - _transition_info = [ -i(19200,0,'MMT'), -i(19800,0,'IST'), -i(21600,1800,'IHST'), -i(23400,3600,'IST'), -i(19800,0,'IST'), -i(23400,0,'LKT'), -i(21600,0,'LKT'), - ] - -Colombo = Colombo() - diff --git a/modules/pytz/zoneinfo/Asia/Dacca.py b/modules/pytz/zoneinfo/Asia/Dacca.py deleted file mode 100644 index 3093a3a4..00000000 --- a/modules/pytz/zoneinfo/Asia/Dacca.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Asia/Dacca.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dacca(DstTzInfo): - '''Asia/Dacca timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Dacca' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,9,30,18,6,40), -d(1942,5,14,17,30,0), -d(1942,8,31,18,30,0), -d(1951,9,29,17,30,0), -d(1971,3,25,18,0,0), - ] - - _transition_info = [ -i(21180,0,'HMT'), -i(23400,0,'BURT'), -i(19800,0,'IST'), -i(23400,0,'BURT'), -i(21600,0,'DACT'), -i(21600,0,'BDT'), - ] - -Dacca = Dacca() - diff --git a/modules/pytz/zoneinfo/Asia/Damascus.py b/modules/pytz/zoneinfo/Asia/Damascus.py deleted file mode 100644 index f7a531b6..00000000 --- a/modules/pytz/zoneinfo/Asia/Damascus.py +++ /dev/null @@ -1,322 +0,0 @@ -'''tzinfo timezone information for Asia/Damascus.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Damascus(DstTzInfo): - '''Asia/Damascus timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Damascus' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,21,34,48), -d(1920,4,18,0,0,0), -d(1920,10,2,23,0,0), -d(1921,4,17,0,0,0), -d(1921,10,1,23,0,0), -d(1922,4,16,0,0,0), -d(1922,9,30,23,0,0), -d(1923,4,15,0,0,0), -d(1923,10,6,23,0,0), -d(1962,4,29,0,0,0), -d(1962,9,30,23,0,0), -d(1963,5,1,0,0,0), -d(1963,9,29,23,0,0), -d(1964,5,1,0,0,0), -d(1964,9,30,23,0,0), -d(1965,5,1,0,0,0), -d(1965,9,29,23,0,0), -d(1966,4,24,0,0,0), -d(1966,9,30,23,0,0), -d(1967,5,1,0,0,0), -d(1967,9,30,23,0,0), -d(1968,5,1,0,0,0), -d(1968,9,30,23,0,0), -d(1969,5,1,0,0,0), -d(1969,9,30,23,0,0), -d(1970,5,1,0,0,0), -d(1970,9,30,23,0,0), -d(1971,5,1,0,0,0), -d(1971,9,30,23,0,0), -d(1972,5,1,0,0,0), -d(1972,9,30,23,0,0), -d(1973,5,1,0,0,0), -d(1973,9,30,23,0,0), -d(1974,5,1,0,0,0), -d(1974,9,30,23,0,0), -d(1975,5,1,0,0,0), -d(1975,9,30,23,0,0), -d(1976,5,1,0,0,0), -d(1976,9,30,23,0,0), -d(1977,5,1,0,0,0), -d(1977,8,31,23,0,0), -d(1978,5,1,0,0,0), -d(1978,8,31,23,0,0), -d(1983,4,9,0,0,0), -d(1983,9,30,23,0,0), -d(1984,4,9,0,0,0), -d(1984,9,30,23,0,0), -d(1986,2,16,0,0,0), -d(1986,10,8,23,0,0), -d(1987,3,1,0,0,0), -d(1987,10,30,23,0,0), -d(1988,3,15,0,0,0), -d(1988,10,30,23,0,0), -d(1989,3,31,0,0,0), -d(1989,9,30,23,0,0), -d(1990,4,1,0,0,0), -d(1990,9,29,23,0,0), -d(1991,3,31,22,0,0), -d(1991,9,30,21,0,0), -d(1992,4,7,22,0,0), -d(1992,9,30,21,0,0), -d(1993,3,25,22,0,0), -d(1993,9,24,21,0,0), -d(1994,3,31,22,0,0), -d(1994,9,30,21,0,0), -d(1995,3,31,22,0,0), -d(1995,9,30,21,0,0), -d(1996,3,31,22,0,0), -d(1996,9,30,21,0,0), -d(1997,3,30,22,0,0), -d(1997,9,30,21,0,0), -d(1998,3,29,22,0,0), -d(1998,9,30,21,0,0), -d(1999,3,31,22,0,0), -d(1999,9,30,21,0,0), -d(2000,3,31,22,0,0), -d(2000,9,30,21,0,0), -d(2001,3,31,22,0,0), -d(2001,9,30,21,0,0), -d(2002,3,31,22,0,0), -d(2002,9,30,21,0,0), -d(2003,3,31,22,0,0), -d(2003,9,30,21,0,0), -d(2004,3,31,22,0,0), -d(2004,9,30,21,0,0), -d(2005,3,31,22,0,0), -d(2005,9,30,21,0,0), -d(2006,3,31,22,0,0), -d(2006,9,30,21,0,0), -d(2007,3,31,22,0,0), -d(2007,9,30,21,0,0), -d(2008,3,31,22,0,0), -d(2008,9,30,21,0,0), -d(2009,3,31,22,0,0), -d(2009,9,30,21,0,0), -d(2010,3,31,22,0,0), -d(2010,9,30,21,0,0), -d(2011,3,31,22,0,0), -d(2011,9,30,21,0,0), -d(2012,3,31,22,0,0), -d(2012,9,30,21,0,0), -d(2013,3,31,22,0,0), -d(2013,9,30,21,0,0), -d(2014,3,31,22,0,0), -d(2014,9,30,21,0,0), -d(2015,3,31,22,0,0), -d(2015,9,30,21,0,0), -d(2016,3,31,22,0,0), -d(2016,9,30,21,0,0), -d(2017,3,31,22,0,0), -d(2017,9,30,21,0,0), -d(2018,3,31,22,0,0), -d(2018,9,30,21,0,0), -d(2019,3,31,22,0,0), -d(2019,9,30,21,0,0), -d(2020,3,31,22,0,0), -d(2020,9,30,21,0,0), -d(2021,3,31,22,0,0), -d(2021,9,30,21,0,0), -d(2022,3,31,22,0,0), -d(2022,9,30,21,0,0), -d(2023,3,31,22,0,0), -d(2023,9,30,21,0,0), -d(2024,3,31,22,0,0), -d(2024,9,30,21,0,0), -d(2025,3,31,22,0,0), -d(2025,9,30,21,0,0), -d(2026,3,31,22,0,0), -d(2026,9,30,21,0,0), -d(2027,3,31,22,0,0), -d(2027,9,30,21,0,0), -d(2028,3,31,22,0,0), -d(2028,9,30,21,0,0), -d(2029,3,31,22,0,0), -d(2029,9,30,21,0,0), -d(2030,3,31,22,0,0), -d(2030,9,30,21,0,0), -d(2031,3,31,22,0,0), -d(2031,9,30,21,0,0), -d(2032,3,31,22,0,0), -d(2032,9,30,21,0,0), -d(2033,3,31,22,0,0), -d(2033,9,30,21,0,0), -d(2034,3,31,22,0,0), -d(2034,9,30,21,0,0), -d(2035,3,31,22,0,0), -d(2035,9,30,21,0,0), -d(2036,3,31,22,0,0), -d(2036,9,30,21,0,0), -d(2037,3,31,22,0,0), -d(2037,9,30,21,0,0), - ] - - _transition_info = [ -i(8700,0,'LMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Damascus = Damascus() - diff --git a/modules/pytz/zoneinfo/Asia/Dhaka.py b/modules/pytz/zoneinfo/Asia/Dhaka.py deleted file mode 100644 index 7ccd4d55..00000000 --- a/modules/pytz/zoneinfo/Asia/Dhaka.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Asia/Dhaka.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dhaka(DstTzInfo): - '''Asia/Dhaka timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Dhaka' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,9,30,18,6,40), -d(1942,5,14,17,30,0), -d(1942,8,31,18,30,0), -d(1951,9,29,17,30,0), -d(1971,3,25,18,0,0), - ] - - _transition_info = [ -i(21180,0,'HMT'), -i(23400,0,'BURT'), -i(19800,0,'IST'), -i(23400,0,'BURT'), -i(21600,0,'DACT'), -i(21600,0,'BDT'), - ] - -Dhaka = Dhaka() - diff --git a/modules/pytz/zoneinfo/Asia/Dili.py b/modules/pytz/zoneinfo/Asia/Dili.py deleted file mode 100644 index 75b8df61..00000000 --- a/modules/pytz/zoneinfo/Asia/Dili.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Asia/Dili.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dili(DstTzInfo): - '''Asia/Dili timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Dili' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,15,37,40), -d(1942,2,21,15,0,0), -d(1945,7,31,15,0,0), -d(1976,5,2,15,0,0), -d(2000,9,16,16,0,0), - ] - - _transition_info = [ -i(30120,0,'LMT'), -i(28800,0,'TLT'), -i(32400,0,'JST'), -i(32400,0,'TLT'), -i(28800,0,'CIT'), -i(32400,0,'TLT'), - ] - -Dili = Dili() - diff --git a/modules/pytz/zoneinfo/Asia/Dubai.py b/modules/pytz/zoneinfo/Asia/Dubai.py deleted file mode 100644 index 7bb7471c..00000000 --- a/modules/pytz/zoneinfo/Asia/Dubai.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Dubai.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dubai(DstTzInfo): - '''Asia/Dubai timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Dubai' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,20,18,48), - ] - - _transition_info = [ -i(13260,0,'LMT'), -i(14400,0,'GST'), - ] - -Dubai = Dubai() - diff --git a/modules/pytz/zoneinfo/Asia/Dushanbe.py b/modules/pytz/zoneinfo/Asia/Dushanbe.py deleted file mode 100644 index 4c2eb7c8..00000000 --- a/modules/pytz/zoneinfo/Asia/Dushanbe.py +++ /dev/null @@ -1,68 +0,0 @@ -'''tzinfo timezone information for Asia/Dushanbe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dushanbe(DstTzInfo): - '''Asia/Dushanbe timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Dushanbe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,19,24,48), -d(1930,6,20,19,0,0), -d(1981,3,31,18,0,0), -d(1981,9,30,17,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1991,3,30,20,0,0), -d(1991,9,8,21,0,0), - ] - - _transition_info = [ -i(16500,0,'LMT'), -i(18000,0,'DUST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(25200,3600,'DUSST'), -i(21600,0,'DUST'), -i(21600,0,'DUSST'), -i(18000,0,'TJT'), - ] - -Dushanbe = Dushanbe() - diff --git a/modules/pytz/zoneinfo/Asia/Gaza.py b/modules/pytz/zoneinfo/Asia/Gaza.py deleted file mode 100644 index 3fd5a5ca..00000000 --- a/modules/pytz/zoneinfo/Asia/Gaza.py +++ /dev/null @@ -1,308 +0,0 @@ -'''tzinfo timezone information for Asia/Gaza.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Gaza(DstTzInfo): - '''Asia/Gaza timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Gaza' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,5,31,22,0,0), -d(1942,10,31,21,0,0), -d(1943,4,1,0,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,23,0,0), -d(1946,4,16,0,0,0), -d(1946,10,31,21,0,0), -d(1957,5,9,22,0,0), -d(1957,9,30,21,0,0), -d(1958,4,30,22,0,0), -d(1958,9,30,21,0,0), -d(1959,4,30,23,0,0), -d(1959,9,30,0,0,0), -d(1960,4,30,23,0,0), -d(1960,9,30,0,0,0), -d(1961,4,30,23,0,0), -d(1961,9,30,0,0,0), -d(1962,4,30,23,0,0), -d(1962,9,30,0,0,0), -d(1963,4,30,23,0,0), -d(1963,9,30,0,0,0), -d(1964,4,30,23,0,0), -d(1964,9,30,0,0,0), -d(1965,4,30,23,0,0), -d(1965,9,30,0,0,0), -d(1966,4,30,23,0,0), -d(1966,10,1,0,0,0), -d(1967,4,30,23,0,0), -d(1967,6,4,21,0,0), -d(1974,7,6,22,0,0), -d(1974,10,12,21,0,0), -d(1975,4,19,22,0,0), -d(1975,8,30,21,0,0), -d(1985,4,13,22,0,0), -d(1985,9,14,21,0,0), -d(1986,5,17,22,0,0), -d(1986,9,6,21,0,0), -d(1987,4,14,22,0,0), -d(1987,9,12,21,0,0), -d(1988,4,8,22,0,0), -d(1988,9,2,21,0,0), -d(1989,4,29,22,0,0), -d(1989,9,2,21,0,0), -d(1990,3,24,22,0,0), -d(1990,8,25,21,0,0), -d(1991,3,23,22,0,0), -d(1991,8,31,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,5,21,0,0), -d(1993,4,1,22,0,0), -d(1993,9,4,21,0,0), -d(1994,3,31,22,0,0), -d(1994,8,27,21,0,0), -d(1995,3,30,22,0,0), -d(1995,9,2,21,0,0), -d(1995,12,31,22,0,0), -d(1996,4,4,22,0,0), -d(1996,9,19,22,0,0), -d(1997,4,3,22,0,0), -d(1997,9,18,22,0,0), -d(1998,4,2,22,0,0), -d(1998,9,17,22,0,0), -d(1998,12,31,22,0,0), -d(1999,4,15,22,0,0), -d(1999,10,14,21,0,0), -d(2000,4,20,22,0,0), -d(2000,10,19,21,0,0), -d(2001,4,19,22,0,0), -d(2001,10,18,21,0,0), -d(2002,4,18,22,0,0), -d(2002,10,17,21,0,0), -d(2003,4,17,22,0,0), -d(2003,10,16,21,0,0), -d(2004,4,15,22,0,0), -d(2004,9,30,22,0,0), -d(2005,4,14,22,0,0), -d(2005,10,3,22,0,0), -d(2006,4,20,22,0,0), -d(2006,10,3,22,0,0), -d(2007,4,19,22,0,0), -d(2007,10,3,22,0,0), -d(2008,4,17,22,0,0), -d(2008,10,3,22,0,0), -d(2009,4,16,22,0,0), -d(2009,10,3,22,0,0), -d(2010,4,15,22,0,0), -d(2010,10,3,22,0,0), -d(2011,4,14,22,0,0), -d(2011,10,3,22,0,0), -d(2012,4,19,22,0,0), -d(2012,10,3,22,0,0), -d(2013,4,18,22,0,0), -d(2013,10,3,22,0,0), -d(2014,4,17,22,0,0), -d(2014,10,3,22,0,0), -d(2015,4,16,22,0,0), -d(2015,10,3,22,0,0), -d(2016,4,14,22,0,0), -d(2016,10,3,22,0,0), -d(2017,4,20,22,0,0), -d(2017,10,3,22,0,0), -d(2018,4,19,22,0,0), -d(2018,10,3,22,0,0), -d(2019,4,18,22,0,0), -d(2019,10,3,22,0,0), -d(2020,4,16,22,0,0), -d(2020,10,3,22,0,0), -d(2021,4,15,22,0,0), -d(2021,10,3,22,0,0), -d(2022,4,14,22,0,0), -d(2022,10,3,22,0,0), -d(2023,4,20,22,0,0), -d(2023,10,3,22,0,0), -d(2024,4,18,22,0,0), -d(2024,10,3,22,0,0), -d(2025,4,17,22,0,0), -d(2025,10,3,22,0,0), -d(2026,4,16,22,0,0), -d(2026,10,3,22,0,0), -d(2027,4,15,22,0,0), -d(2027,10,3,22,0,0), -d(2028,4,20,22,0,0), -d(2028,10,3,22,0,0), -d(2029,4,19,22,0,0), -d(2029,10,3,22,0,0), -d(2030,4,18,22,0,0), -d(2030,10,3,22,0,0), -d(2031,4,17,22,0,0), -d(2031,10,3,22,0,0), -d(2032,4,15,22,0,0), -d(2032,10,3,22,0,0), -d(2033,4,14,22,0,0), -d(2033,10,3,22,0,0), -d(2034,4,20,22,0,0), -d(2034,10,3,22,0,0), -d(2035,4,19,22,0,0), -d(2035,10,3,22,0,0), -d(2036,4,17,22,0,0), -d(2036,10,3,22,0,0), -d(2037,4,16,22,0,0), -d(2037,10,3,22,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(10800,3600,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Gaza = Gaza() - diff --git a/modules/pytz/zoneinfo/Asia/Harbin.py b/modules/pytz/zoneinfo/Asia/Harbin.py deleted file mode 100644 index 86941384..00000000 --- a/modules/pytz/zoneinfo/Asia/Harbin.py +++ /dev/null @@ -1,54 +0,0 @@ -'''tzinfo timezone information for Asia/Harbin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Harbin(DstTzInfo): - '''Asia/Harbin timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Harbin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,15,33,16), -d(1932,2,29,15,30,0), -d(1939,12,31,16,0,0), -d(1966,4,30,15,0,0), -d(1980,4,30,15,30,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(30420,0,'LMT'), -i(30600,0,'CHAT'), -i(28800,0,'CST'), -i(32400,0,'CHAT'), -i(30600,0,'CHAT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Harbin = Harbin() - diff --git a/modules/pytz/zoneinfo/Asia/Hong_Kong.py b/modules/pytz/zoneinfo/Asia/Hong_Kong.py deleted file mode 100644 index a17dfbef..00000000 --- a/modules/pytz/zoneinfo/Asia/Hong_Kong.py +++ /dev/null @@ -1,158 +0,0 @@ -'''tzinfo timezone information for Asia/Hong_Kong.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hong_Kong(DstTzInfo): - '''Asia/Hong_Kong timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Hong_Kong' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,10,29,16,23,24), -d(1946,4,19,19,30,0), -d(1946,11,30,18,30,0), -d(1947,4,12,19,30,0), -d(1947,12,29,18,30,0), -d(1948,5,1,19,30,0), -d(1948,10,30,18,30,0), -d(1949,4,2,19,30,0), -d(1949,10,29,18,30,0), -d(1950,4,1,19,30,0), -d(1950,10,28,18,30,0), -d(1951,3,31,19,30,0), -d(1951,10,27,18,30,0), -d(1952,4,5,19,30,0), -d(1952,10,25,18,30,0), -d(1953,4,4,19,30,0), -d(1953,10,31,18,30,0), -d(1954,3,20,19,30,0), -d(1954,10,30,18,30,0), -d(1955,3,19,19,30,0), -d(1955,11,5,18,30,0), -d(1956,3,17,19,30,0), -d(1956,11,3,18,30,0), -d(1957,3,23,19,30,0), -d(1957,11,2,18,30,0), -d(1958,3,22,19,30,0), -d(1958,11,1,18,30,0), -d(1959,3,21,19,30,0), -d(1959,10,31,18,30,0), -d(1960,3,19,19,30,0), -d(1960,11,5,18,30,0), -d(1961,3,18,19,30,0), -d(1961,11,4,18,30,0), -d(1962,3,17,19,30,0), -d(1962,11,3,18,30,0), -d(1963,3,23,19,30,0), -d(1963,11,2,18,30,0), -d(1964,3,21,19,30,0), -d(1964,10,31,18,30,0), -d(1965,4,17,19,30,0), -d(1965,10,16,18,30,0), -d(1966,4,16,19,30,0), -d(1966,10,15,18,30,0), -d(1967,4,15,19,30,0), -d(1967,10,21,18,30,0), -d(1968,4,20,19,30,0), -d(1968,10,19,18,30,0), -d(1969,4,19,19,30,0), -d(1969,10,18,18,30,0), -d(1970,4,18,19,30,0), -d(1970,10,17,18,30,0), -d(1971,4,17,19,30,0), -d(1971,10,16,18,30,0), -d(1972,4,15,19,30,0), -d(1972,10,21,18,30,0), -d(1973,4,21,19,30,0), -d(1973,10,20,18,30,0), -d(1974,4,20,19,30,0), -d(1974,10,19,18,30,0), -d(1975,4,19,19,30,0), -d(1975,10,18,18,30,0), -d(1976,4,17,19,30,0), -d(1976,10,16,18,30,0), -d(1977,4,16,19,30,0), -d(1977,10,15,18,30,0), -d(1979,5,12,19,30,0), -d(1979,10,20,18,30,0), -d(1980,5,10,19,30,0), -d(1980,10,18,18,30,0), - ] - - _transition_info = [ -i(27420,0,'LMT'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), - ] - -Hong_Kong = Hong_Kong() - diff --git a/modules/pytz/zoneinfo/Asia/Hovd.py b/modules/pytz/zoneinfo/Asia/Hovd.py deleted file mode 100644 index 6a841247..00000000 --- a/modules/pytz/zoneinfo/Asia/Hovd.py +++ /dev/null @@ -1,236 +0,0 @@ -'''tzinfo timezone information for Asia/Hovd.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hovd(DstTzInfo): - '''Asia/Hovd timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Hovd' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,7,31,17,53,24), -d(1977,12,31,18,0,0), -d(1983,3,31,17,0,0), -d(1983,9,30,16,0,0), -d(1984,3,31,17,0,0), -d(1984,9,29,19,0,0), -d(1985,3,30,19,0,0), -d(1985,9,28,19,0,0), -d(1986,3,29,19,0,0), -d(1986,9,27,19,0,0), -d(1987,3,28,19,0,0), -d(1987,9,26,19,0,0), -d(1988,3,26,19,0,0), -d(1988,9,24,19,0,0), -d(1989,3,25,19,0,0), -d(1989,9,23,19,0,0), -d(1990,3,24,19,0,0), -d(1990,9,29,19,0,0), -d(1991,3,30,19,0,0), -d(1991,9,28,19,0,0), -d(1992,3,28,19,0,0), -d(1992,9,26,19,0,0), -d(1993,3,27,19,0,0), -d(1993,9,25,19,0,0), -d(1994,3,26,19,0,0), -d(1994,9,24,19,0,0), -d(1995,3,25,19,0,0), -d(1995,9,23,19,0,0), -d(1996,3,30,19,0,0), -d(1996,9,28,19,0,0), -d(1997,3,29,19,0,0), -d(1997,9,27,19,0,0), -d(1998,3,28,19,0,0), -d(1998,9,26,19,0,0), -d(2001,4,27,19,0,0), -d(2001,9,28,18,0,0), -d(2002,3,29,19,0,0), -d(2002,9,27,18,0,0), -d(2003,3,28,19,0,0), -d(2003,9,26,18,0,0), -d(2004,3,26,19,0,0), -d(2004,9,24,18,0,0), -d(2005,3,25,19,0,0), -d(2005,9,23,18,0,0), -d(2006,3,24,19,0,0), -d(2006,9,29,18,0,0), -d(2007,3,30,19,0,0), -d(2007,9,28,18,0,0), -d(2008,3,28,19,0,0), -d(2008,9,26,18,0,0), -d(2009,3,27,19,0,0), -d(2009,9,25,18,0,0), -d(2010,3,26,19,0,0), -d(2010,9,24,18,0,0), -d(2011,3,25,19,0,0), -d(2011,9,23,18,0,0), -d(2012,3,30,19,0,0), -d(2012,9,28,18,0,0), -d(2013,3,29,19,0,0), -d(2013,9,27,18,0,0), -d(2014,3,28,19,0,0), -d(2014,9,26,18,0,0), -d(2015,3,27,19,0,0), -d(2015,9,25,18,0,0), -d(2016,3,25,19,0,0), -d(2016,9,23,18,0,0), -d(2017,3,24,19,0,0), -d(2017,9,29,18,0,0), -d(2018,3,30,19,0,0), -d(2018,9,28,18,0,0), -d(2019,3,29,19,0,0), -d(2019,9,27,18,0,0), -d(2020,3,27,19,0,0), -d(2020,9,25,18,0,0), -d(2021,3,26,19,0,0), -d(2021,9,24,18,0,0), -d(2022,3,25,19,0,0), -d(2022,9,23,18,0,0), -d(2023,3,24,19,0,0), -d(2023,9,29,18,0,0), -d(2024,3,29,19,0,0), -d(2024,9,27,18,0,0), -d(2025,3,28,19,0,0), -d(2025,9,26,18,0,0), -d(2026,3,27,19,0,0), -d(2026,9,25,18,0,0), -d(2027,3,26,19,0,0), -d(2027,9,24,18,0,0), -d(2028,3,24,19,0,0), -d(2028,9,29,18,0,0), -d(2029,3,30,19,0,0), -d(2029,9,28,18,0,0), -d(2030,3,29,19,0,0), -d(2030,9,27,18,0,0), -d(2031,3,28,19,0,0), -d(2031,9,26,18,0,0), -d(2032,3,26,19,0,0), -d(2032,9,24,18,0,0), -d(2033,3,25,19,0,0), -d(2033,9,23,18,0,0), -d(2034,3,24,19,0,0), -d(2034,9,29,18,0,0), -d(2035,3,30,19,0,0), -d(2035,9,28,18,0,0), -d(2036,3,28,19,0,0), -d(2036,9,26,18,0,0), -d(2037,3,27,19,0,0), -d(2037,9,25,18,0,0), - ] - - _transition_info = [ -i(22020,0,'LMT'), -i(21600,0,'HOVT'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), -i(28800,3600,'HOVST'), -i(25200,0,'HOVT'), - ] - -Hovd = Hovd() - diff --git a/modules/pytz/zoneinfo/Asia/Irkutsk.py b/modules/pytz/zoneinfo/Asia/Irkutsk.py deleted file mode 100644 index 8836f46d..00000000 --- a/modules/pytz/zoneinfo/Asia/Irkutsk.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Irkutsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Irkutsk(DstTzInfo): - '''Asia/Irkutsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Irkutsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,1,24,17,2,40), -d(1930,6,20,17,0,0), -d(1981,3,31,16,0,0), -d(1981,9,30,15,0,0), -d(1982,3,31,16,0,0), -d(1982,9,30,15,0,0), -d(1983,3,31,16,0,0), -d(1983,9,30,15,0,0), -d(1984,3,31,16,0,0), -d(1984,9,29,18,0,0), -d(1985,3,30,18,0,0), -d(1985,9,28,18,0,0), -d(1986,3,29,18,0,0), -d(1986,9,27,18,0,0), -d(1987,3,28,18,0,0), -d(1987,9,26,18,0,0), -d(1988,3,26,18,0,0), -d(1988,9,24,18,0,0), -d(1989,3,25,18,0,0), -d(1989,9,23,18,0,0), -d(1990,3,24,18,0,0), -d(1990,9,29,18,0,0), -d(1991,3,30,18,0,0), -d(1991,9,28,19,0,0), -d(1992,1,18,19,0,0), -d(1992,3,28,15,0,0), -d(1992,9,26,14,0,0), -d(1993,3,27,18,0,0), -d(1993,9,25,18,0,0), -d(1994,3,26,18,0,0), -d(1994,9,24,18,0,0), -d(1995,3,25,18,0,0), -d(1995,9,23,18,0,0), -d(1996,3,30,18,0,0), -d(1996,10,26,18,0,0), -d(1997,3,29,18,0,0), -d(1997,10,25,18,0,0), -d(1998,3,28,18,0,0), -d(1998,10,24,18,0,0), -d(1999,3,27,18,0,0), -d(1999,10,30,18,0,0), -d(2000,3,25,18,0,0), -d(2000,10,28,18,0,0), -d(2001,3,24,18,0,0), -d(2001,10,27,18,0,0), -d(2002,3,30,18,0,0), -d(2002,10,26,18,0,0), -d(2003,3,29,18,0,0), -d(2003,10,25,18,0,0), -d(2004,3,27,18,0,0), -d(2004,10,30,18,0,0), -d(2005,3,26,18,0,0), -d(2005,10,29,18,0,0), -d(2006,3,25,18,0,0), -d(2006,10,28,18,0,0), -d(2007,3,24,18,0,0), -d(2007,10,27,18,0,0), -d(2008,3,29,18,0,0), -d(2008,10,25,18,0,0), -d(2009,3,28,18,0,0), -d(2009,10,24,18,0,0), -d(2010,3,27,18,0,0), -d(2010,10,30,18,0,0), -d(2011,3,26,18,0,0), -d(2011,10,29,18,0,0), -d(2012,3,24,18,0,0), -d(2012,10,27,18,0,0), -d(2013,3,30,18,0,0), -d(2013,10,26,18,0,0), -d(2014,3,29,18,0,0), -d(2014,10,25,18,0,0), -d(2015,3,28,18,0,0), -d(2015,10,24,18,0,0), -d(2016,3,26,18,0,0), -d(2016,10,29,18,0,0), -d(2017,3,25,18,0,0), -d(2017,10,28,18,0,0), -d(2018,3,24,18,0,0), -d(2018,10,27,18,0,0), -d(2019,3,30,18,0,0), -d(2019,10,26,18,0,0), -d(2020,3,28,18,0,0), -d(2020,10,24,18,0,0), -d(2021,3,27,18,0,0), -d(2021,10,30,18,0,0), -d(2022,3,26,18,0,0), -d(2022,10,29,18,0,0), -d(2023,3,25,18,0,0), -d(2023,10,28,18,0,0), -d(2024,3,30,18,0,0), -d(2024,10,26,18,0,0), -d(2025,3,29,18,0,0), -d(2025,10,25,18,0,0), -d(2026,3,28,18,0,0), -d(2026,10,24,18,0,0), -d(2027,3,27,18,0,0), -d(2027,10,30,18,0,0), -d(2028,3,25,18,0,0), -d(2028,10,28,18,0,0), -d(2029,3,24,18,0,0), -d(2029,10,27,18,0,0), -d(2030,3,30,18,0,0), -d(2030,10,26,18,0,0), -d(2031,3,29,18,0,0), -d(2031,10,25,18,0,0), -d(2032,3,27,18,0,0), -d(2032,10,30,18,0,0), -d(2033,3,26,18,0,0), -d(2033,10,29,18,0,0), -d(2034,3,25,18,0,0), -d(2034,10,28,18,0,0), -d(2035,3,24,18,0,0), -d(2035,10,27,18,0,0), -d(2036,3,29,18,0,0), -d(2036,10,25,18,0,0), -d(2037,3,28,18,0,0), -d(2037,10,24,18,0,0), - ] - - _transition_info = [ -i(25020,0,'IMT'), -i(25200,0,'IRKT'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(28800,0,'IRKST'), -i(25200,0,'IRKT'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), -i(32400,3600,'IRKST'), -i(28800,0,'IRKT'), - ] - -Irkutsk = Irkutsk() - diff --git a/modules/pytz/zoneinfo/Asia/Istanbul.py b/modules/pytz/zoneinfo/Asia/Istanbul.py deleted file mode 100644 index fb5f8b6d..00000000 --- a/modules/pytz/zoneinfo/Asia/Istanbul.py +++ /dev/null @@ -1,362 +0,0 @@ -'''tzinfo timezone information for Asia/Istanbul.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Istanbul(DstTzInfo): - '''Asia/Istanbul timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Istanbul' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,9,30,22,3,4), -d(1916,4,30,22,0,0), -d(1916,9,30,21,0,0), -d(1920,3,27,22,0,0), -d(1920,10,24,21,0,0), -d(1921,4,2,22,0,0), -d(1921,10,2,21,0,0), -d(1922,3,25,22,0,0), -d(1922,10,7,21,0,0), -d(1924,5,12,22,0,0), -d(1924,9,30,21,0,0), -d(1925,4,30,22,0,0), -d(1925,9,30,21,0,0), -d(1940,6,29,22,0,0), -d(1940,10,4,21,0,0), -d(1940,11,30,22,0,0), -d(1941,9,20,21,0,0), -d(1942,3,31,22,0,0), -d(1942,10,31,21,0,0), -d(1945,4,1,22,0,0), -d(1945,10,7,21,0,0), -d(1946,5,31,22,0,0), -d(1946,9,30,21,0,0), -d(1947,4,19,22,0,0), -d(1947,10,4,21,0,0), -d(1948,4,17,22,0,0), -d(1948,10,2,21,0,0), -d(1949,4,9,22,0,0), -d(1949,10,1,21,0,0), -d(1950,4,18,22,0,0), -d(1950,10,7,21,0,0), -d(1951,4,21,22,0,0), -d(1951,10,7,21,0,0), -d(1962,7,14,22,0,0), -d(1962,10,7,21,0,0), -d(1964,5,14,22,0,0), -d(1964,9,30,21,0,0), -d(1970,5,2,22,0,0), -d(1970,10,3,21,0,0), -d(1971,5,1,22,0,0), -d(1971,10,2,21,0,0), -d(1972,5,6,22,0,0), -d(1972,10,7,21,0,0), -d(1973,6,2,23,0,0), -d(1973,11,4,0,0,0), -d(1974,3,31,0,0,0), -d(1974,11,3,2,0,0), -d(1975,3,29,22,0,0), -d(1975,10,25,21,0,0), -d(1976,5,31,22,0,0), -d(1976,10,30,21,0,0), -d(1977,4,2,22,0,0), -d(1977,10,15,21,0,0), -d(1978,4,1,22,0,0), -d(1978,10,14,21,0,0), -d(1979,10,14,20,0,0), -d(1980,4,6,0,0,0), -d(1980,10,12,20,0,0), -d(1981,3,29,0,0,0), -d(1981,10,11,20,0,0), -d(1982,3,28,0,0,0), -d(1982,10,10,20,0,0), -d(1983,7,30,21,0,0), -d(1983,10,1,20,0,0), -d(1985,4,19,21,0,0), -d(1985,9,27,21,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1988,3,27,0,0,0), -d(1988,9,25,0,0,0), -d(1989,3,26,0,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1990,12,31,22,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7020,0,'IMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(14400,7200,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Istanbul = Istanbul() - diff --git a/modules/pytz/zoneinfo/Asia/Jakarta.py b/modules/pytz/zoneinfo/Asia/Jakarta.py deleted file mode 100644 index 27a42113..00000000 --- a/modules/pytz/zoneinfo/Asia/Jakarta.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for Asia/Jakarta.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jakarta(DstTzInfo): - '''Asia/Jakarta timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Jakarta' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1923,12,31,16,40,0), -d(1932,10,31,16,40,0), -d(1942,3,22,16,30,0), -d(1945,7,31,15,0,0), -d(1948,4,30,16,30,0), -d(1950,4,30,16,0,0), -d(1963,12,31,16,30,0), - ] - - _transition_info = [ -i(25620,0,'JMT'), -i(26400,0,'JAVT'), -i(27000,0,'WIT'), -i(32400,0,'JST'), -i(27000,0,'WIT'), -i(28800,0,'WIT'), -i(27000,0,'WIT'), -i(25200,0,'WIT'), - ] - -Jakarta = Jakarta() - diff --git a/modules/pytz/zoneinfo/Asia/Jayapura.py b/modules/pytz/zoneinfo/Asia/Jayapura.py deleted file mode 100644 index c8760780..00000000 --- a/modules/pytz/zoneinfo/Asia/Jayapura.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Asia/Jayapura.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jayapura(DstTzInfo): - '''Asia/Jayapura timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Jayapura' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1932,10,31,14,37,12), -d(1943,12,31,15,0,0), -d(1963,12,31,14,30,0), - ] - - _transition_info = [ -i(33780,0,'LMT'), -i(32400,0,'EIT'), -i(34200,0,'CST'), -i(32400,0,'EIT'), - ] - -Jayapura = Jayapura() - diff --git a/modules/pytz/zoneinfo/Asia/Jerusalem.py b/modules/pytz/zoneinfo/Asia/Jerusalem.py deleted file mode 100644 index cf3af693..00000000 --- a/modules/pytz/zoneinfo/Asia/Jerusalem.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for Asia/Jerusalem.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jerusalem(DstTzInfo): - '''Asia/Jerusalem timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Jerusalem' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,12,31,21,39,20), -d(1940,5,31,22,0,0), -d(1942,10,31,21,0,0), -d(1943,4,1,0,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,23,0,0), -d(1946,4,16,0,0,0), -d(1946,10,31,21,0,0), -d(1948,5,22,22,0,0), -d(1948,8,31,20,0,0), -d(1948,10,31,23,0,0), -d(1949,4,30,22,0,0), -d(1949,10,31,23,0,0), -d(1950,4,15,22,0,0), -d(1950,9,15,0,0,0), -d(1951,3,31,22,0,0), -d(1951,11,11,0,0,0), -d(1952,4,20,0,0,0), -d(1952,10,19,0,0,0), -d(1953,4,12,0,0,0), -d(1953,9,13,0,0,0), -d(1954,6,12,22,0,0), -d(1954,9,11,21,0,0), -d(1955,6,11,0,0,0), -d(1955,9,10,21,0,0), -d(1956,6,2,22,0,0), -d(1956,9,30,0,0,0), -d(1957,4,29,0,0,0), -d(1957,9,21,21,0,0), -d(1974,7,6,22,0,0), -d(1974,10,12,21,0,0), -d(1975,4,19,22,0,0), -d(1975,8,30,21,0,0), -d(1985,4,13,22,0,0), -d(1985,9,14,21,0,0), -d(1986,5,17,22,0,0), -d(1986,9,6,21,0,0), -d(1987,4,14,22,0,0), -d(1987,9,12,21,0,0), -d(1988,4,8,22,0,0), -d(1988,9,2,21,0,0), -d(1989,4,29,22,0,0), -d(1989,9,2,21,0,0), -d(1990,3,24,22,0,0), -d(1990,8,25,21,0,0), -d(1991,3,23,22,0,0), -d(1991,8,31,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,5,21,0,0), -d(1993,4,1,22,0,0), -d(1993,9,4,21,0,0), -d(1994,3,31,22,0,0), -d(1994,8,27,21,0,0), -d(1995,3,30,22,0,0), -d(1995,9,2,21,0,0), -d(1996,3,14,22,0,0), -d(1996,9,15,21,0,0), -d(1997,3,20,22,0,0), -d(1997,9,13,21,0,0), -d(1998,3,19,22,0,0), -d(1998,9,5,21,0,0), -d(1999,4,2,0,0,0), -d(1999,9,2,23,0,0), -d(2000,4,14,0,0,0), -d(2000,10,5,22,0,0), -d(2001,4,8,23,0,0), -d(2001,9,23,22,0,0), -d(2002,3,28,23,0,0), -d(2002,10,6,22,0,0), -d(2003,3,27,23,0,0), -d(2003,10,2,22,0,0), -d(2004,4,6,23,0,0), -d(2004,9,21,22,0,0), -d(2005,4,1,0,0,0), -d(2005,10,8,23,0,0), -d(2006,3,31,0,0,0), -d(2006,9,30,23,0,0), -d(2007,3,30,0,0,0), -d(2007,9,15,23,0,0), -d(2008,3,28,0,0,0), -d(2008,10,4,23,0,0), -d(2009,3,27,0,0,0), -d(2009,9,26,23,0,0), -d(2010,3,26,0,0,0), -d(2010,9,11,23,0,0), -d(2011,4,1,0,0,0), -d(2011,10,1,23,0,0), -d(2012,3,30,0,0,0), -d(2012,9,22,23,0,0), -d(2013,3,29,0,0,0), -d(2013,9,7,23,0,0), -d(2014,3,28,0,0,0), -d(2014,9,27,23,0,0), -d(2015,3,27,0,0,0), -d(2015,9,19,23,0,0), -d(2016,4,1,0,0,0), -d(2016,10,8,23,0,0), -d(2017,3,31,0,0,0), -d(2017,9,23,23,0,0), -d(2018,3,30,0,0,0), -d(2018,9,15,23,0,0), -d(2019,3,29,0,0,0), -d(2019,10,5,23,0,0), -d(2020,3,27,0,0,0), -d(2020,9,26,23,0,0), -d(2021,3,26,0,0,0), -d(2021,9,11,23,0,0), -d(2022,4,1,0,0,0), -d(2022,10,1,23,0,0), -d(2023,3,31,0,0,0), -d(2023,9,23,23,0,0), -d(2024,3,29,0,0,0), -d(2024,10,5,23,0,0), -d(2025,3,28,0,0,0), -d(2025,9,27,23,0,0), -d(2026,3,27,0,0,0), -d(2026,9,19,23,0,0), -d(2027,3,26,0,0,0), -d(2027,10,9,23,0,0), -d(2028,3,31,0,0,0), -d(2028,9,23,23,0,0), -d(2029,3,30,0,0,0), -d(2029,9,15,23,0,0), -d(2030,3,29,0,0,0), -d(2030,10,5,23,0,0), -d(2031,3,28,0,0,0), -d(2031,9,20,23,0,0), -d(2032,3,26,0,0,0), -d(2032,9,11,23,0,0), -d(2033,4,1,0,0,0), -d(2033,10,1,23,0,0), -d(2034,3,31,0,0,0), -d(2034,9,16,23,0,0), -d(2035,3,30,0,0,0), -d(2035,10,6,23,0,0), -d(2036,3,28,0,0,0), -d(2036,9,27,23,0,0), -d(2037,3,27,0,0,0), -d(2037,9,12,23,0,0), - ] - - _transition_info = [ -i(8460,0,'JMT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(14400,7200,'IDDT'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), - ] - -Jerusalem = Jerusalem() - diff --git a/modules/pytz/zoneinfo/Asia/Kabul.py b/modules/pytz/zoneinfo/Asia/Kabul.py deleted file mode 100644 index c19ff5f5..00000000 --- a/modules/pytz/zoneinfo/Asia/Kabul.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Kabul.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kabul(DstTzInfo): - '''Asia/Kabul timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kabul' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1944,12,31,20,0,0), - ] - - _transition_info = [ -i(14400,0,'AFT'), -i(16200,0,'AFT'), - ] - -Kabul = Kabul() - diff --git a/modules/pytz/zoneinfo/Asia/Kamchatka.py b/modules/pytz/zoneinfo/Asia/Kamchatka.py deleted file mode 100644 index 7b6b9465..00000000 --- a/modules/pytz/zoneinfo/Asia/Kamchatka.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Kamchatka.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kamchatka(DstTzInfo): - '''Asia/Kamchatka timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kamchatka' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,11,9,13,25,24), -d(1930,6,20,13,0,0), -d(1981,3,31,12,0,0), -d(1981,9,30,11,0,0), -d(1982,3,31,12,0,0), -d(1982,9,30,11,0,0), -d(1983,3,31,12,0,0), -d(1983,9,30,11,0,0), -d(1984,3,31,12,0,0), -d(1984,9,29,14,0,0), -d(1985,3,30,14,0,0), -d(1985,9,28,14,0,0), -d(1986,3,29,14,0,0), -d(1986,9,27,14,0,0), -d(1987,3,28,14,0,0), -d(1987,9,26,14,0,0), -d(1988,3,26,14,0,0), -d(1988,9,24,14,0,0), -d(1989,3,25,14,0,0), -d(1989,9,23,14,0,0), -d(1990,3,24,14,0,0), -d(1990,9,29,14,0,0), -d(1991,3,30,14,0,0), -d(1991,9,28,15,0,0), -d(1992,1,18,15,0,0), -d(1992,3,28,11,0,0), -d(1992,9,26,10,0,0), -d(1993,3,27,14,0,0), -d(1993,9,25,14,0,0), -d(1994,3,26,14,0,0), -d(1994,9,24,14,0,0), -d(1995,3,25,14,0,0), -d(1995,9,23,14,0,0), -d(1996,3,30,14,0,0), -d(1996,10,26,14,0,0), -d(1997,3,29,14,0,0), -d(1997,10,25,14,0,0), -d(1998,3,28,14,0,0), -d(1998,10,24,14,0,0), -d(1999,3,27,14,0,0), -d(1999,10,30,14,0,0), -d(2000,3,25,14,0,0), -d(2000,10,28,14,0,0), -d(2001,3,24,14,0,0), -d(2001,10,27,14,0,0), -d(2002,3,30,14,0,0), -d(2002,10,26,14,0,0), -d(2003,3,29,14,0,0), -d(2003,10,25,14,0,0), -d(2004,3,27,14,0,0), -d(2004,10,30,14,0,0), -d(2005,3,26,14,0,0), -d(2005,10,29,14,0,0), -d(2006,3,25,14,0,0), -d(2006,10,28,14,0,0), -d(2007,3,24,14,0,0), -d(2007,10,27,14,0,0), -d(2008,3,29,14,0,0), -d(2008,10,25,14,0,0), -d(2009,3,28,14,0,0), -d(2009,10,24,14,0,0), -d(2010,3,27,14,0,0), -d(2010,10,30,14,0,0), -d(2011,3,26,14,0,0), -d(2011,10,29,14,0,0), -d(2012,3,24,14,0,0), -d(2012,10,27,14,0,0), -d(2013,3,30,14,0,0), -d(2013,10,26,14,0,0), -d(2014,3,29,14,0,0), -d(2014,10,25,14,0,0), -d(2015,3,28,14,0,0), -d(2015,10,24,14,0,0), -d(2016,3,26,14,0,0), -d(2016,10,29,14,0,0), -d(2017,3,25,14,0,0), -d(2017,10,28,14,0,0), -d(2018,3,24,14,0,0), -d(2018,10,27,14,0,0), -d(2019,3,30,14,0,0), -d(2019,10,26,14,0,0), -d(2020,3,28,14,0,0), -d(2020,10,24,14,0,0), -d(2021,3,27,14,0,0), -d(2021,10,30,14,0,0), -d(2022,3,26,14,0,0), -d(2022,10,29,14,0,0), -d(2023,3,25,14,0,0), -d(2023,10,28,14,0,0), -d(2024,3,30,14,0,0), -d(2024,10,26,14,0,0), -d(2025,3,29,14,0,0), -d(2025,10,25,14,0,0), -d(2026,3,28,14,0,0), -d(2026,10,24,14,0,0), -d(2027,3,27,14,0,0), -d(2027,10,30,14,0,0), -d(2028,3,25,14,0,0), -d(2028,10,28,14,0,0), -d(2029,3,24,14,0,0), -d(2029,10,27,14,0,0), -d(2030,3,30,14,0,0), -d(2030,10,26,14,0,0), -d(2031,3,29,14,0,0), -d(2031,10,25,14,0,0), -d(2032,3,27,14,0,0), -d(2032,10,30,14,0,0), -d(2033,3,26,14,0,0), -d(2033,10,29,14,0,0), -d(2034,3,25,14,0,0), -d(2034,10,28,14,0,0), -d(2035,3,24,14,0,0), -d(2035,10,27,14,0,0), -d(2036,3,29,14,0,0), -d(2036,10,25,14,0,0), -d(2037,3,28,14,0,0), -d(2037,10,24,14,0,0), - ] - - _transition_info = [ -i(38100,0,'LMT'), -i(39600,0,'PETT'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(43200,0,'PETST'), -i(39600,0,'PETT'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), -i(46800,3600,'PETST'), -i(43200,0,'PETT'), - ] - -Kamchatka = Kamchatka() - diff --git a/modules/pytz/zoneinfo/Asia/Karachi.py b/modules/pytz/zoneinfo/Asia/Karachi.py deleted file mode 100644 index 838f06b0..00000000 --- a/modules/pytz/zoneinfo/Asia/Karachi.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for Asia/Karachi.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Karachi(DstTzInfo): - '''Asia/Karachi timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Karachi' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,12,31,19,31,48), -d(1942,8,31,18,30,0), -d(1945,10,14,17,30,0), -d(1951,9,29,18,30,0), -d(1971,3,25,19,0,0), -d(2002,4,6,19,1,0), -d(2002,10,5,18,1,0), - ] - - _transition_info = [ -i(16080,0,'LMT'), -i(19800,0,'IST'), -i(23400,3600,'IST'), -i(19800,0,'IST'), -i(18000,0,'KART'), -i(18000,0,'PKT'), -i(21600,3600,'PKST'), -i(18000,0,'PKT'), - ] - -Karachi = Karachi() - diff --git a/modules/pytz/zoneinfo/Asia/Kashgar.py b/modules/pytz/zoneinfo/Asia/Kashgar.py deleted file mode 100644 index 27616b0e..00000000 --- a/modules/pytz/zoneinfo/Asia/Kashgar.py +++ /dev/null @@ -1,50 +0,0 @@ -'''tzinfo timezone information for Asia/Kashgar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kashgar(DstTzInfo): - '''Asia/Kashgar timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kashgar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,18,56,4), -d(1939,12,31,18,30,0), -d(1980,4,30,19,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(18240,0,'LMT'), -i(19800,0,'KAST'), -i(18000,0,'KAST'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Kashgar = Kashgar() - diff --git a/modules/pytz/zoneinfo/Asia/Katmandu.py b/modules/pytz/zoneinfo/Asia/Katmandu.py deleted file mode 100644 index 2f8d1f1a..00000000 --- a/modules/pytz/zoneinfo/Asia/Katmandu.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Katmandu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Katmandu(DstTzInfo): - '''Asia/Katmandu timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Katmandu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,18,18,44), -d(1985,12,31,18,30,0), - ] - - _transition_info = [ -i(20460,0,'LMT'), -i(19800,0,'IST'), -i(20700,0,'NPT'), - ] - -Katmandu = Katmandu() - diff --git a/modules/pytz/zoneinfo/Asia/Krasnoyarsk.py b/modules/pytz/zoneinfo/Asia/Krasnoyarsk.py deleted file mode 100644 index 5cecf765..00000000 --- a/modules/pytz/zoneinfo/Asia/Krasnoyarsk.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Krasnoyarsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Krasnoyarsk(DstTzInfo): - '''Asia/Krasnoyarsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Krasnoyarsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1920,1,5,17,48,40), -d(1930,6,20,18,0,0), -d(1981,3,31,17,0,0), -d(1981,9,30,16,0,0), -d(1982,3,31,17,0,0), -d(1982,9,30,16,0,0), -d(1983,3,31,17,0,0), -d(1983,9,30,16,0,0), -d(1984,3,31,17,0,0), -d(1984,9,29,19,0,0), -d(1985,3,30,19,0,0), -d(1985,9,28,19,0,0), -d(1986,3,29,19,0,0), -d(1986,9,27,19,0,0), -d(1987,3,28,19,0,0), -d(1987,9,26,19,0,0), -d(1988,3,26,19,0,0), -d(1988,9,24,19,0,0), -d(1989,3,25,19,0,0), -d(1989,9,23,19,0,0), -d(1990,3,24,19,0,0), -d(1990,9,29,19,0,0), -d(1991,3,30,19,0,0), -d(1991,9,28,20,0,0), -d(1992,1,18,20,0,0), -d(1992,3,28,16,0,0), -d(1992,9,26,15,0,0), -d(1993,3,27,19,0,0), -d(1993,9,25,19,0,0), -d(1994,3,26,19,0,0), -d(1994,9,24,19,0,0), -d(1995,3,25,19,0,0), -d(1995,9,23,19,0,0), -d(1996,3,30,19,0,0), -d(1996,10,26,19,0,0), -d(1997,3,29,19,0,0), -d(1997,10,25,19,0,0), -d(1998,3,28,19,0,0), -d(1998,10,24,19,0,0), -d(1999,3,27,19,0,0), -d(1999,10,30,19,0,0), -d(2000,3,25,19,0,0), -d(2000,10,28,19,0,0), -d(2001,3,24,19,0,0), -d(2001,10,27,19,0,0), -d(2002,3,30,19,0,0), -d(2002,10,26,19,0,0), -d(2003,3,29,19,0,0), -d(2003,10,25,19,0,0), -d(2004,3,27,19,0,0), -d(2004,10,30,19,0,0), -d(2005,3,26,19,0,0), -d(2005,10,29,19,0,0), -d(2006,3,25,19,0,0), -d(2006,10,28,19,0,0), -d(2007,3,24,19,0,0), -d(2007,10,27,19,0,0), -d(2008,3,29,19,0,0), -d(2008,10,25,19,0,0), -d(2009,3,28,19,0,0), -d(2009,10,24,19,0,0), -d(2010,3,27,19,0,0), -d(2010,10,30,19,0,0), -d(2011,3,26,19,0,0), -d(2011,10,29,19,0,0), -d(2012,3,24,19,0,0), -d(2012,10,27,19,0,0), -d(2013,3,30,19,0,0), -d(2013,10,26,19,0,0), -d(2014,3,29,19,0,0), -d(2014,10,25,19,0,0), -d(2015,3,28,19,0,0), -d(2015,10,24,19,0,0), -d(2016,3,26,19,0,0), -d(2016,10,29,19,0,0), -d(2017,3,25,19,0,0), -d(2017,10,28,19,0,0), -d(2018,3,24,19,0,0), -d(2018,10,27,19,0,0), -d(2019,3,30,19,0,0), -d(2019,10,26,19,0,0), -d(2020,3,28,19,0,0), -d(2020,10,24,19,0,0), -d(2021,3,27,19,0,0), -d(2021,10,30,19,0,0), -d(2022,3,26,19,0,0), -d(2022,10,29,19,0,0), -d(2023,3,25,19,0,0), -d(2023,10,28,19,0,0), -d(2024,3,30,19,0,0), -d(2024,10,26,19,0,0), -d(2025,3,29,19,0,0), -d(2025,10,25,19,0,0), -d(2026,3,28,19,0,0), -d(2026,10,24,19,0,0), -d(2027,3,27,19,0,0), -d(2027,10,30,19,0,0), -d(2028,3,25,19,0,0), -d(2028,10,28,19,0,0), -d(2029,3,24,19,0,0), -d(2029,10,27,19,0,0), -d(2030,3,30,19,0,0), -d(2030,10,26,19,0,0), -d(2031,3,29,19,0,0), -d(2031,10,25,19,0,0), -d(2032,3,27,19,0,0), -d(2032,10,30,19,0,0), -d(2033,3,26,19,0,0), -d(2033,10,29,19,0,0), -d(2034,3,25,19,0,0), -d(2034,10,28,19,0,0), -d(2035,3,24,19,0,0), -d(2035,10,27,19,0,0), -d(2036,3,29,19,0,0), -d(2036,10,25,19,0,0), -d(2037,3,28,19,0,0), -d(2037,10,24,19,0,0), - ] - - _transition_info = [ -i(22260,0,'LMT'), -i(21600,0,'KRAT'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(25200,0,'KRAST'), -i(21600,0,'KRAT'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), -i(28800,3600,'KRAST'), -i(25200,0,'KRAT'), - ] - -Krasnoyarsk = Krasnoyarsk() - diff --git a/modules/pytz/zoneinfo/Asia/Kuala_Lumpur.py b/modules/pytz/zoneinfo/Asia/Kuala_Lumpur.py deleted file mode 100644 index 99f1d829..00000000 --- a/modules/pytz/zoneinfo/Asia/Kuala_Lumpur.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for Asia/Kuala_Lumpur.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kuala_Lumpur(DstTzInfo): - '''Asia/Kuala_Lumpur timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kuala_Lumpur' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,5,31,17,4,35), -d(1932,12,31,17,0,0), -d(1935,12,31,16,40,0), -d(1941,8,31,16,40,0), -d(1942,2,15,16,30,0), -d(1945,9,11,15,0,0), -d(1981,12,31,16,30,0), - ] - - _transition_info = [ -i(24900,0,'SMT'), -i(25200,0,'MALT'), -i(26400,1200,'MALST'), -i(26400,0,'MALT'), -i(27000,0,'MALT'), -i(32400,0,'JST'), -i(27000,0,'MALT'), -i(28800,0,'MYT'), - ] - -Kuala_Lumpur = Kuala_Lumpur() - diff --git a/modules/pytz/zoneinfo/Asia/Kuching.py b/modules/pytz/zoneinfo/Asia/Kuching.py deleted file mode 100644 index e6e7b99e..00000000 --- a/modules/pytz/zoneinfo/Asia/Kuching.py +++ /dev/null @@ -1,58 +0,0 @@ -'''tzinfo timezone information for Asia/Kuching.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kuching(DstTzInfo): - '''Asia/Kuching timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kuching' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1926,2,28,16,38,40), -d(1932,12,31,16,30,0), -d(1935,9,13,16,0,0), -d(1935,12,13,15,40,0), -d(1936,9,13,16,0,0), -d(1936,12,13,15,40,0), -d(1937,9,13,16,0,0), -d(1937,12,13,15,40,0), -d(1938,9,13,16,0,0), -d(1938,12,13,15,40,0), -d(1939,9,13,16,0,0), -d(1939,12,13,15,40,0), -d(1940,9,13,16,0,0), -d(1940,12,13,15,40,0), -d(1941,9,13,16,0,0), -d(1941,12,13,15,40,0), -d(1942,2,15,16,0,0), -d(1945,9,11,15,0,0), -d(1981,12,31,16,0,0), - ] - - _transition_info = [ -i(26460,0,'LMT'), -i(27000,0,'BORT'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(30000,1200,'BORTST'), -i(28800,0,'BORT'), -i(32400,0,'JST'), -i(28800,0,'BORT'), -i(28800,0,'MYT'), - ] - -Kuching = Kuching() - diff --git a/modules/pytz/zoneinfo/Asia/Kuwait.py b/modules/pytz/zoneinfo/Asia/Kuwait.py deleted file mode 100644 index 011d226d..00000000 --- a/modules/pytz/zoneinfo/Asia/Kuwait.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Kuwait.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kuwait(DstTzInfo): - '''Asia/Kuwait timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Kuwait' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1949,12,31,20,48,4), - ] - - _transition_info = [ -i(11520,0,'LMT'), -i(10800,0,'AST'), - ] - -Kuwait = Kuwait() - diff --git a/modules/pytz/zoneinfo/Asia/Macao.py b/modules/pytz/zoneinfo/Asia/Macao.py deleted file mode 100644 index 858c8497..00000000 --- a/modules/pytz/zoneinfo/Asia/Macao.py +++ /dev/null @@ -1,104 +0,0 @@ -'''tzinfo timezone information for Asia/Macao.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Macao(DstTzInfo): - '''Asia/Macao timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Macao' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,16,25,40), -d(1961,3,18,19,30,0), -d(1961,11,4,18,30,0), -d(1962,3,17,19,30,0), -d(1962,11,3,18,30,0), -d(1963,3,16,16,0,0), -d(1963,11,2,18,30,0), -d(1964,3,21,19,30,0), -d(1964,10,31,18,30,0), -d(1965,3,20,16,0,0), -d(1965,10,30,15,0,0), -d(1966,4,16,19,30,0), -d(1966,10,15,18,30,0), -d(1967,4,15,19,30,0), -d(1967,10,21,18,30,0), -d(1968,4,20,19,30,0), -d(1968,10,19,18,30,0), -d(1969,4,19,19,30,0), -d(1969,10,18,18,30,0), -d(1970,4,18,19,30,0), -d(1970,10,17,18,30,0), -d(1971,4,17,19,30,0), -d(1971,10,16,18,30,0), -d(1972,4,15,16,0,0), -d(1972,10,14,15,0,0), -d(1973,4,14,16,0,0), -d(1973,10,20,15,0,0), -d(1974,4,20,16,0,0), -d(1974,10,19,18,30,0), -d(1975,4,19,19,30,0), -d(1975,10,18,18,30,0), -d(1976,4,17,19,30,0), -d(1976,10,16,18,30,0), -d(1977,4,16,19,30,0), -d(1977,10,15,18,30,0), -d(1978,4,15,16,0,0), -d(1978,10,14,15,0,0), -d(1979,4,14,16,0,0), -d(1979,10,20,15,0,0), -d(1980,4,19,16,0,0), -d(1980,10,18,15,0,0), -d(1999,12,19,16,0,0), - ] - - _transition_info = [ -i(27240,0,'LMT'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(28800,0,'CST'), - ] - -Macao = Macao() - diff --git a/modules/pytz/zoneinfo/Asia/Macau.py b/modules/pytz/zoneinfo/Asia/Macau.py deleted file mode 100644 index 6865e5ff..00000000 --- a/modules/pytz/zoneinfo/Asia/Macau.py +++ /dev/null @@ -1,104 +0,0 @@ -'''tzinfo timezone information for Asia/Macau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Macau(DstTzInfo): - '''Asia/Macau timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Macau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,12,31,16,25,40), -d(1961,3,18,19,30,0), -d(1961,11,4,18,30,0), -d(1962,3,17,19,30,0), -d(1962,11,3,18,30,0), -d(1963,3,16,16,0,0), -d(1963,11,2,18,30,0), -d(1964,3,21,19,30,0), -d(1964,10,31,18,30,0), -d(1965,3,20,16,0,0), -d(1965,10,30,15,0,0), -d(1966,4,16,19,30,0), -d(1966,10,15,18,30,0), -d(1967,4,15,19,30,0), -d(1967,10,21,18,30,0), -d(1968,4,20,19,30,0), -d(1968,10,19,18,30,0), -d(1969,4,19,19,30,0), -d(1969,10,18,18,30,0), -d(1970,4,18,19,30,0), -d(1970,10,17,18,30,0), -d(1971,4,17,19,30,0), -d(1971,10,16,18,30,0), -d(1972,4,15,16,0,0), -d(1972,10,14,15,0,0), -d(1973,4,14,16,0,0), -d(1973,10,20,15,0,0), -d(1974,4,20,16,0,0), -d(1974,10,19,18,30,0), -d(1975,4,19,19,30,0), -d(1975,10,18,18,30,0), -d(1976,4,17,19,30,0), -d(1976,10,16,18,30,0), -d(1977,4,16,19,30,0), -d(1977,10,15,18,30,0), -d(1978,4,15,16,0,0), -d(1978,10,14,15,0,0), -d(1979,4,14,16,0,0), -d(1979,10,20,15,0,0), -d(1980,4,19,16,0,0), -d(1980,10,18,15,0,0), -d(1999,12,19,16,0,0), - ] - - _transition_info = [ -i(27240,0,'LMT'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(32400,3600,'MOST'), -i(28800,0,'MOT'), -i(28800,0,'CST'), - ] - -Macau = Macau() - diff --git a/modules/pytz/zoneinfo/Asia/Magadan.py b/modules/pytz/zoneinfo/Asia/Magadan.py deleted file mode 100644 index 673bc1d2..00000000 --- a/modules/pytz/zoneinfo/Asia/Magadan.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Magadan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Magadan(DstTzInfo): - '''Asia/Magadan timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Magadan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,13,56,48), -d(1930,6,20,14,0,0), -d(1981,3,31,13,0,0), -d(1981,9,30,12,0,0), -d(1982,3,31,13,0,0), -d(1982,9,30,12,0,0), -d(1983,3,31,13,0,0), -d(1983,9,30,12,0,0), -d(1984,3,31,13,0,0), -d(1984,9,29,15,0,0), -d(1985,3,30,15,0,0), -d(1985,9,28,15,0,0), -d(1986,3,29,15,0,0), -d(1986,9,27,15,0,0), -d(1987,3,28,15,0,0), -d(1987,9,26,15,0,0), -d(1988,3,26,15,0,0), -d(1988,9,24,15,0,0), -d(1989,3,25,15,0,0), -d(1989,9,23,15,0,0), -d(1990,3,24,15,0,0), -d(1990,9,29,15,0,0), -d(1991,3,30,15,0,0), -d(1991,9,28,16,0,0), -d(1992,1,18,16,0,0), -d(1992,3,28,12,0,0), -d(1992,9,26,11,0,0), -d(1993,3,27,15,0,0), -d(1993,9,25,15,0,0), -d(1994,3,26,15,0,0), -d(1994,9,24,15,0,0), -d(1995,3,25,15,0,0), -d(1995,9,23,15,0,0), -d(1996,3,30,15,0,0), -d(1996,10,26,15,0,0), -d(1997,3,29,15,0,0), -d(1997,10,25,15,0,0), -d(1998,3,28,15,0,0), -d(1998,10,24,15,0,0), -d(1999,3,27,15,0,0), -d(1999,10,30,15,0,0), -d(2000,3,25,15,0,0), -d(2000,10,28,15,0,0), -d(2001,3,24,15,0,0), -d(2001,10,27,15,0,0), -d(2002,3,30,15,0,0), -d(2002,10,26,15,0,0), -d(2003,3,29,15,0,0), -d(2003,10,25,15,0,0), -d(2004,3,27,15,0,0), -d(2004,10,30,15,0,0), -d(2005,3,26,15,0,0), -d(2005,10,29,15,0,0), -d(2006,3,25,15,0,0), -d(2006,10,28,15,0,0), -d(2007,3,24,15,0,0), -d(2007,10,27,15,0,0), -d(2008,3,29,15,0,0), -d(2008,10,25,15,0,0), -d(2009,3,28,15,0,0), -d(2009,10,24,15,0,0), -d(2010,3,27,15,0,0), -d(2010,10,30,15,0,0), -d(2011,3,26,15,0,0), -d(2011,10,29,15,0,0), -d(2012,3,24,15,0,0), -d(2012,10,27,15,0,0), -d(2013,3,30,15,0,0), -d(2013,10,26,15,0,0), -d(2014,3,29,15,0,0), -d(2014,10,25,15,0,0), -d(2015,3,28,15,0,0), -d(2015,10,24,15,0,0), -d(2016,3,26,15,0,0), -d(2016,10,29,15,0,0), -d(2017,3,25,15,0,0), -d(2017,10,28,15,0,0), -d(2018,3,24,15,0,0), -d(2018,10,27,15,0,0), -d(2019,3,30,15,0,0), -d(2019,10,26,15,0,0), -d(2020,3,28,15,0,0), -d(2020,10,24,15,0,0), -d(2021,3,27,15,0,0), -d(2021,10,30,15,0,0), -d(2022,3,26,15,0,0), -d(2022,10,29,15,0,0), -d(2023,3,25,15,0,0), -d(2023,10,28,15,0,0), -d(2024,3,30,15,0,0), -d(2024,10,26,15,0,0), -d(2025,3,29,15,0,0), -d(2025,10,25,15,0,0), -d(2026,3,28,15,0,0), -d(2026,10,24,15,0,0), -d(2027,3,27,15,0,0), -d(2027,10,30,15,0,0), -d(2028,3,25,15,0,0), -d(2028,10,28,15,0,0), -d(2029,3,24,15,0,0), -d(2029,10,27,15,0,0), -d(2030,3,30,15,0,0), -d(2030,10,26,15,0,0), -d(2031,3,29,15,0,0), -d(2031,10,25,15,0,0), -d(2032,3,27,15,0,0), -d(2032,10,30,15,0,0), -d(2033,3,26,15,0,0), -d(2033,10,29,15,0,0), -d(2034,3,25,15,0,0), -d(2034,10,28,15,0,0), -d(2035,3,24,15,0,0), -d(2035,10,27,15,0,0), -d(2036,3,29,15,0,0), -d(2036,10,25,15,0,0), -d(2037,3,28,15,0,0), -d(2037,10,24,15,0,0), - ] - - _transition_info = [ -i(36180,0,'LMT'), -i(36000,0,'MAGT'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(39600,0,'MAGST'), -i(36000,0,'MAGT'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), -i(43200,3600,'MAGST'), -i(39600,0,'MAGT'), - ] - -Magadan = Magadan() - diff --git a/modules/pytz/zoneinfo/Asia/Makassar.py b/modules/pytz/zoneinfo/Asia/Makassar.py deleted file mode 100644 index 421845e2..00000000 --- a/modules/pytz/zoneinfo/Asia/Makassar.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Makassar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Makassar(DstTzInfo): - '''Asia/Makassar timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Makassar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,16,2,24), -d(1932,10,31,16,2,24), -d(1942,2,8,16,0,0), -d(1945,7,31,15,0,0), - ] - - _transition_info = [ -i(28680,0,'LMT'), -i(28680,0,'MMT'), -i(28800,0,'CIT'), -i(32400,0,'JST'), -i(28800,0,'CIT'), - ] - -Makassar = Makassar() - diff --git a/modules/pytz/zoneinfo/Asia/Manila.py b/modules/pytz/zoneinfo/Asia/Manila.py deleted file mode 100644 index 9d2112b7..00000000 --- a/modules/pytz/zoneinfo/Asia/Manila.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Asia/Manila.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Manila(DstTzInfo): - '''Asia/Manila timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Manila' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1936,10,31,16,0,0), -d(1937,1,31,15,0,0), -d(1942,4,30,16,0,0), -d(1944,10,31,15,0,0), -d(1954,4,11,16,0,0), -d(1954,6,30,15,0,0), -d(1978,3,21,16,0,0), -d(1978,9,20,15,0,0), - ] - - _transition_info = [ -i(28800,0,'PHT'), -i(32400,3600,'PHST'), -i(28800,0,'PHT'), -i(32400,0,'JST'), -i(28800,0,'PHT'), -i(32400,3600,'PHST'), -i(28800,0,'PHT'), -i(32400,3600,'PHST'), -i(28800,0,'PHT'), - ] - -Manila = Manila() - diff --git a/modules/pytz/zoneinfo/Asia/Muscat.py b/modules/pytz/zoneinfo/Asia/Muscat.py deleted file mode 100644 index 68bdb138..00000000 --- a/modules/pytz/zoneinfo/Asia/Muscat.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Muscat.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Muscat(DstTzInfo): - '''Asia/Muscat timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Muscat' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,20,5,40), - ] - - _transition_info = [ -i(14040,0,'LMT'), -i(14400,0,'GST'), - ] - -Muscat = Muscat() - diff --git a/modules/pytz/zoneinfo/Asia/Nicosia.py b/modules/pytz/zoneinfo/Asia/Nicosia.py deleted file mode 100644 index 737050f0..00000000 --- a/modules/pytz/zoneinfo/Asia/Nicosia.py +++ /dev/null @@ -1,274 +0,0 @@ -'''tzinfo timezone information for Asia/Nicosia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nicosia(DstTzInfo): - '''Asia/Nicosia timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Nicosia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,11,13,21,46,32), -d(1975,4,12,22,0,0), -d(1975,10,11,21,0,0), -d(1976,5,14,22,0,0), -d(1976,10,10,21,0,0), -d(1977,4,2,22,0,0), -d(1977,9,24,21,0,0), -d(1978,4,1,22,0,0), -d(1978,10,1,21,0,0), -d(1979,3,31,22,0,0), -d(1979,9,29,21,0,0), -d(1980,4,5,22,0,0), -d(1980,9,27,21,0,0), -d(1981,3,28,22,0,0), -d(1981,9,26,21,0,0), -d(1982,3,27,22,0,0), -d(1982,9,25,21,0,0), -d(1983,3,26,22,0,0), -d(1983,9,24,21,0,0), -d(1984,3,24,22,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,21,0,0), -d(1991,3,30,22,0,0), -d(1991,9,28,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,9,28,21,0,0), -d(1997,3,29,22,0,0), -d(1997,9,27,21,0,0), -d(1998,3,28,22,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7980,0,'LMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Nicosia = Nicosia() - diff --git a/modules/pytz/zoneinfo/Asia/Novosibirsk.py b/modules/pytz/zoneinfo/Asia/Novosibirsk.py deleted file mode 100644 index 69e9cbe9..00000000 --- a/modules/pytz/zoneinfo/Asia/Novosibirsk.py +++ /dev/null @@ -1,256 +0,0 @@ -'''tzinfo timezone information for Asia/Novosibirsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Novosibirsk(DstTzInfo): - '''Asia/Novosibirsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Novosibirsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,14,0,28,20), -d(1930,6,20,18,0,0), -d(1981,3,31,17,0,0), -d(1981,9,30,16,0,0), -d(1982,3,31,17,0,0), -d(1982,9,30,16,0,0), -d(1983,3,31,17,0,0), -d(1983,9,30,16,0,0), -d(1984,3,31,17,0,0), -d(1984,9,29,19,0,0), -d(1985,3,30,19,0,0), -d(1985,9,28,19,0,0), -d(1986,3,29,19,0,0), -d(1986,9,27,19,0,0), -d(1987,3,28,19,0,0), -d(1987,9,26,19,0,0), -d(1988,3,26,19,0,0), -d(1988,9,24,19,0,0), -d(1989,3,25,19,0,0), -d(1989,9,23,19,0,0), -d(1990,3,24,19,0,0), -d(1990,9,29,19,0,0), -d(1991,3,30,19,0,0), -d(1991,9,28,20,0,0), -d(1992,1,18,20,0,0), -d(1992,3,28,16,0,0), -d(1992,9,26,15,0,0), -d(1993,3,27,19,0,0), -d(1993,5,22,16,0,0), -d(1993,9,25,20,0,0), -d(1994,3,26,20,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,20,0,0), -d(1995,9,23,20,0,0), -d(1996,3,30,20,0,0), -d(1996,10,26,20,0,0), -d(1997,3,29,20,0,0), -d(1997,10,25,20,0,0), -d(1998,3,28,20,0,0), -d(1998,10,24,20,0,0), -d(1999,3,27,20,0,0), -d(1999,10,30,20,0,0), -d(2000,3,25,20,0,0), -d(2000,10,28,20,0,0), -d(2001,3,24,20,0,0), -d(2001,10,27,20,0,0), -d(2002,3,30,20,0,0), -d(2002,10,26,20,0,0), -d(2003,3,29,20,0,0), -d(2003,10,25,20,0,0), -d(2004,3,27,20,0,0), -d(2004,10,30,20,0,0), -d(2005,3,26,20,0,0), -d(2005,10,29,20,0,0), -d(2006,3,25,20,0,0), -d(2006,10,28,20,0,0), -d(2007,3,24,20,0,0), -d(2007,10,27,20,0,0), -d(2008,3,29,20,0,0), -d(2008,10,25,20,0,0), -d(2009,3,28,20,0,0), -d(2009,10,24,20,0,0), -d(2010,3,27,20,0,0), -d(2010,10,30,20,0,0), -d(2011,3,26,20,0,0), -d(2011,10,29,20,0,0), -d(2012,3,24,20,0,0), -d(2012,10,27,20,0,0), -d(2013,3,30,20,0,0), -d(2013,10,26,20,0,0), -d(2014,3,29,20,0,0), -d(2014,10,25,20,0,0), -d(2015,3,28,20,0,0), -d(2015,10,24,20,0,0), -d(2016,3,26,20,0,0), -d(2016,10,29,20,0,0), -d(2017,3,25,20,0,0), -d(2017,10,28,20,0,0), -d(2018,3,24,20,0,0), -d(2018,10,27,20,0,0), -d(2019,3,30,20,0,0), -d(2019,10,26,20,0,0), -d(2020,3,28,20,0,0), -d(2020,10,24,20,0,0), -d(2021,3,27,20,0,0), -d(2021,10,30,20,0,0), -d(2022,3,26,20,0,0), -d(2022,10,29,20,0,0), -d(2023,3,25,20,0,0), -d(2023,10,28,20,0,0), -d(2024,3,30,20,0,0), -d(2024,10,26,20,0,0), -d(2025,3,29,20,0,0), -d(2025,10,25,20,0,0), -d(2026,3,28,20,0,0), -d(2026,10,24,20,0,0), -d(2027,3,27,20,0,0), -d(2027,10,30,20,0,0), -d(2028,3,25,20,0,0), -d(2028,10,28,20,0,0), -d(2029,3,24,20,0,0), -d(2029,10,27,20,0,0), -d(2030,3,30,20,0,0), -d(2030,10,26,20,0,0), -d(2031,3,29,20,0,0), -d(2031,10,25,20,0,0), -d(2032,3,27,20,0,0), -d(2032,10,30,20,0,0), -d(2033,3,26,20,0,0), -d(2033,10,29,20,0,0), -d(2034,3,25,20,0,0), -d(2034,10,28,20,0,0), -d(2035,3,24,20,0,0), -d(2035,10,27,20,0,0), -d(2036,3,29,20,0,0), -d(2036,10,25,20,0,0), -d(2037,3,28,20,0,0), -d(2037,10,24,20,0,0), - ] - - _transition_info = [ -i(19920,0,'LMT'), -i(21600,0,'NOVT'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(25200,0,'NOVST'), -i(21600,0,'NOVT'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVT'), -i(28800,3600,'NOVST'), -i(25200,0,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), -i(25200,3600,'NOVST'), -i(21600,0,'NOVT'), - ] - -Novosibirsk = Novosibirsk() - diff --git a/modules/pytz/zoneinfo/Asia/Omsk.py b/modules/pytz/zoneinfo/Asia/Omsk.py deleted file mode 100644 index 3c74a39f..00000000 --- a/modules/pytz/zoneinfo/Asia/Omsk.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Omsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Omsk(DstTzInfo): - '''Asia/Omsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Omsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,11,13,19,6,24), -d(1930,6,20,19,0,0), -d(1981,3,31,18,0,0), -d(1981,9,30,17,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1991,3,30,20,0,0), -d(1991,9,28,21,0,0), -d(1992,1,18,21,0,0), -d(1992,3,28,17,0,0), -d(1992,9,26,16,0,0), -d(1993,3,27,20,0,0), -d(1993,9,25,20,0,0), -d(1994,3,26,20,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,20,0,0), -d(1995,9,23,20,0,0), -d(1996,3,30,20,0,0), -d(1996,10,26,20,0,0), -d(1997,3,29,20,0,0), -d(1997,10,25,20,0,0), -d(1998,3,28,20,0,0), -d(1998,10,24,20,0,0), -d(1999,3,27,20,0,0), -d(1999,10,30,20,0,0), -d(2000,3,25,20,0,0), -d(2000,10,28,20,0,0), -d(2001,3,24,20,0,0), -d(2001,10,27,20,0,0), -d(2002,3,30,20,0,0), -d(2002,10,26,20,0,0), -d(2003,3,29,20,0,0), -d(2003,10,25,20,0,0), -d(2004,3,27,20,0,0), -d(2004,10,30,20,0,0), -d(2005,3,26,20,0,0), -d(2005,10,29,20,0,0), -d(2006,3,25,20,0,0), -d(2006,10,28,20,0,0), -d(2007,3,24,20,0,0), -d(2007,10,27,20,0,0), -d(2008,3,29,20,0,0), -d(2008,10,25,20,0,0), -d(2009,3,28,20,0,0), -d(2009,10,24,20,0,0), -d(2010,3,27,20,0,0), -d(2010,10,30,20,0,0), -d(2011,3,26,20,0,0), -d(2011,10,29,20,0,0), -d(2012,3,24,20,0,0), -d(2012,10,27,20,0,0), -d(2013,3,30,20,0,0), -d(2013,10,26,20,0,0), -d(2014,3,29,20,0,0), -d(2014,10,25,20,0,0), -d(2015,3,28,20,0,0), -d(2015,10,24,20,0,0), -d(2016,3,26,20,0,0), -d(2016,10,29,20,0,0), -d(2017,3,25,20,0,0), -d(2017,10,28,20,0,0), -d(2018,3,24,20,0,0), -d(2018,10,27,20,0,0), -d(2019,3,30,20,0,0), -d(2019,10,26,20,0,0), -d(2020,3,28,20,0,0), -d(2020,10,24,20,0,0), -d(2021,3,27,20,0,0), -d(2021,10,30,20,0,0), -d(2022,3,26,20,0,0), -d(2022,10,29,20,0,0), -d(2023,3,25,20,0,0), -d(2023,10,28,20,0,0), -d(2024,3,30,20,0,0), -d(2024,10,26,20,0,0), -d(2025,3,29,20,0,0), -d(2025,10,25,20,0,0), -d(2026,3,28,20,0,0), -d(2026,10,24,20,0,0), -d(2027,3,27,20,0,0), -d(2027,10,30,20,0,0), -d(2028,3,25,20,0,0), -d(2028,10,28,20,0,0), -d(2029,3,24,20,0,0), -d(2029,10,27,20,0,0), -d(2030,3,30,20,0,0), -d(2030,10,26,20,0,0), -d(2031,3,29,20,0,0), -d(2031,10,25,20,0,0), -d(2032,3,27,20,0,0), -d(2032,10,30,20,0,0), -d(2033,3,26,20,0,0), -d(2033,10,29,20,0,0), -d(2034,3,25,20,0,0), -d(2034,10,28,20,0,0), -d(2035,3,24,20,0,0), -d(2035,10,27,20,0,0), -d(2036,3,29,20,0,0), -d(2036,10,25,20,0,0), -d(2037,3,28,20,0,0), -d(2037,10,24,20,0,0), - ] - - _transition_info = [ -i(17640,0,'LMT'), -i(18000,0,'OMST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(21600,0,'OMSST'), -i(18000,0,'OMST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), -i(25200,3600,'OMSST'), -i(21600,0,'OMST'), - ] - -Omsk = Omsk() - diff --git a/modules/pytz/zoneinfo/Asia/Oral.py b/modules/pytz/zoneinfo/Asia/Oral.py deleted file mode 100644 index 92010fff..00000000 --- a/modules/pytz/zoneinfo/Asia/Oral.py +++ /dev/null @@ -1,122 +0,0 @@ -'''tzinfo timezone information for Asia/Oral.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Oral(DstTzInfo): - '''Asia/Oral timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Oral' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,20,34,36), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,22,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,22,0,0), -d(1990,12,31,20,0,0), -d(1991,12,15,20,0,0), -d(1992,3,28,19,0,0), -d(1992,9,26,18,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,22,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,22,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,22,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,22,0,0), -d(1997,3,29,22,0,0), -d(1997,10,25,22,0,0), -d(1998,3,28,22,0,0), -d(1998,10,24,22,0,0), -d(1999,3,27,22,0,0), -d(1999,10,30,22,0,0), -d(2000,3,25,22,0,0), -d(2000,10,28,22,0,0), -d(2001,3,24,22,0,0), -d(2001,10,27,22,0,0), -d(2002,3,30,22,0,0), -d(2002,10,26,22,0,0), -d(2003,3,29,22,0,0), -d(2003,10,25,22,0,0), -d(2004,3,27,22,0,0), -d(2004,10,30,22,0,0), -d(2005,3,14,20,0,0), - ] - - _transition_info = [ -i(12300,0,'LMT'), -i(14400,0,'URAT'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(21600,0,'URAT'), -i(21600,0,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(21600,3600,'URAST'), -i(18000,0,'URAT'), -i(18000,0,'URAST'), -i(14400,0,'URAT'), -i(18000,3600,'URAST'), -i(14400,0,'URAT'), -i(14400,0,'URAT'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,3600,'ORAST'), -i(14400,0,'ORAT'), -i(18000,0,'ORAT'), - ] - -Oral = Oral() - diff --git a/modules/pytz/zoneinfo/Asia/Phnom_Penh.py b/modules/pytz/zoneinfo/Asia/Phnom_Penh.py deleted file mode 100644 index e7377c5c..00000000 --- a/modules/pytz/zoneinfo/Asia/Phnom_Penh.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Phnom_Penh.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Phnom_Penh(DstTzInfo): - '''Asia/Phnom_Penh timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Phnom_Penh' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,6,8,17,0,20), -d(1911,3,10,16,54,40), -d(1912,4,30,17,0,0), -d(1931,4,30,16,0,0), - ] - - _transition_info = [ -i(25200,0,'LMT'), -i(25560,0,'SMT'), -i(25200,0,'ICT'), -i(28800,0,'ICT'), -i(25200,0,'ICT'), - ] - -Phnom_Penh = Phnom_Penh() - diff --git a/modules/pytz/zoneinfo/Asia/Pontianak.py b/modules/pytz/zoneinfo/Asia/Pontianak.py deleted file mode 100644 index 0611e9eb..00000000 --- a/modules/pytz/zoneinfo/Asia/Pontianak.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Asia/Pontianak.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pontianak(DstTzInfo): - '''Asia/Pontianak timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Pontianak' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,4,30,16,42,40), -d(1932,10,31,16,42,40), -d(1942,1,28,16,30,0), -d(1945,7,31,15,0,0), -d(1948,4,30,16,30,0), -d(1950,4,30,16,0,0), -d(1963,12,31,16,30,0), -d(1987,12,31,16,0,0), - ] - - _transition_info = [ -i(26220,0,'LMT'), -i(26220,0,'PMT'), -i(27000,0,'WIT'), -i(32400,0,'JST'), -i(27000,0,'WIT'), -i(28800,0,'WIT'), -i(27000,0,'WIT'), -i(28800,0,'CIT'), -i(25200,0,'WIT'), - ] - -Pontianak = Pontianak() - diff --git a/modules/pytz/zoneinfo/Asia/Pyongyang.py b/modules/pytz/zoneinfo/Asia/Pyongyang.py deleted file mode 100644 index bf203c3d..00000000 --- a/modules/pytz/zoneinfo/Asia/Pyongyang.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Asia/Pyongyang.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pyongyang(DstTzInfo): - '''Asia/Pyongyang timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Pyongyang' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,11,30,15,30,0), -d(1927,12,31,15,0,0), -d(1931,12,31,15,30,0), -d(1954,3,20,15,0,0), -d(1961,8,9,16,0,0), - ] - - _transition_info = [ -i(30600,0,'KST'), -i(32400,0,'KST'), -i(30600,0,'KST'), -i(32400,0,'KST'), -i(28800,0,'KST'), -i(32400,0,'KST'), - ] - -Pyongyang = Pyongyang() - diff --git a/modules/pytz/zoneinfo/Asia/Qatar.py b/modules/pytz/zoneinfo/Asia/Qatar.py deleted file mode 100644 index 746aa5ae..00000000 --- a/modules/pytz/zoneinfo/Asia/Qatar.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Qatar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Qatar(DstTzInfo): - '''Asia/Qatar timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Qatar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,20,33,52), -d(1972,5,31,20,0,0), - ] - - _transition_info = [ -i(12360,0,'LMT'), -i(14400,0,'GST'), -i(10800,0,'AST'), - ] - -Qatar = Qatar() - diff --git a/modules/pytz/zoneinfo/Asia/Qyzylorda.py b/modules/pytz/zoneinfo/Asia/Qyzylorda.py deleted file mode 100644 index 3dd7460a..00000000 --- a/modules/pytz/zoneinfo/Asia/Qyzylorda.py +++ /dev/null @@ -1,124 +0,0 @@ -'''tzinfo timezone information for Asia/Qyzylorda.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Qyzylorda(DstTzInfo): - '''Asia/Qyzylorda timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Qyzylorda' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,19,38,8), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1990,12,31,19,0,0), -d(1991,12,15,19,0,0), -d(1992,1,18,21,0,0), -d(1992,3,28,17,0,0), -d(1992,9,26,16,0,0), -d(1993,3,27,20,0,0), -d(1993,9,25,20,0,0), -d(1994,3,26,20,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,20,0,0), -d(1995,9,23,20,0,0), -d(1996,3,30,20,0,0), -d(1996,10,26,20,0,0), -d(1997,3,29,20,0,0), -d(1997,10,25,20,0,0), -d(1998,3,28,20,0,0), -d(1998,10,24,20,0,0), -d(1999,3,27,20,0,0), -d(1999,10,30,20,0,0), -d(2000,3,25,20,0,0), -d(2000,10,28,20,0,0), -d(2001,3,24,20,0,0), -d(2001,10,27,20,0,0), -d(2002,3,30,20,0,0), -d(2002,10,26,20,0,0), -d(2003,3,29,20,0,0), -d(2003,10,25,20,0,0), -d(2004,3,27,20,0,0), -d(2004,10,30,20,0,0), -d(2005,3,14,18,0,0), - ] - - _transition_info = [ -i(15720,0,'LMT'), -i(14400,0,'KIZT'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(21600,0,'KIZT'), -i(21600,0,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(21600,3600,'KIZST'), -i(18000,0,'KIZT'), -i(18000,0,'KIZT'), -i(18000,0,'QYZT'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(25200,3600,'QYZST'), -i(21600,0,'QYZT'), -i(21600,0,'QYZT'), - ] - -Qyzylorda = Qyzylorda() - diff --git a/modules/pytz/zoneinfo/Asia/Rangoon.py b/modules/pytz/zoneinfo/Asia/Rangoon.py deleted file mode 100644 index d8120d80..00000000 --- a/modules/pytz/zoneinfo/Asia/Rangoon.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Asia/Rangoon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rangoon(DstTzInfo): - '''Asia/Rangoon timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Rangoon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,17,35,24), -d(1942,4,30,17,30,0), -d(1945,5,2,15,0,0), - ] - - _transition_info = [ -i(23100,0,'RMT'), -i(23400,0,'BURT'), -i(32400,0,'JST'), -i(23400,0,'MMT'), - ] - -Rangoon = Rangoon() - diff --git a/modules/pytz/zoneinfo/Asia/Riyadh.py b/modules/pytz/zoneinfo/Asia/Riyadh.py deleted file mode 100644 index fb09cdb1..00000000 --- a/modules/pytz/zoneinfo/Asia/Riyadh.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Asia/Riyadh.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Riyadh(DstTzInfo): - '''Asia/Riyadh timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Riyadh' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1949,12,31,20,53,8), - ] - - _transition_info = [ -i(11220,0,'LMT'), -i(10800,0,'AST'), - ] - -Riyadh = Riyadh() - diff --git a/modules/pytz/zoneinfo/Asia/Saigon.py b/modules/pytz/zoneinfo/Asia/Saigon.py deleted file mode 100644 index a0cfcc72..00000000 --- a/modules/pytz/zoneinfo/Asia/Saigon.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Saigon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Saigon(DstTzInfo): - '''Asia/Saigon timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Saigon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,6,8,16,53,20), -d(1911,3,10,16,54,40), -d(1912,4,30,17,0,0), -d(1931,4,30,16,0,0), - ] - - _transition_info = [ -i(25620,0,'LMT'), -i(25560,0,'SMT'), -i(25200,0,'ICT'), -i(28800,0,'ICT'), -i(25200,0,'ICT'), - ] - -Saigon = Saigon() - diff --git a/modules/pytz/zoneinfo/Asia/Sakhalin.py b/modules/pytz/zoneinfo/Asia/Sakhalin.py deleted file mode 100644 index 45a36720..00000000 --- a/modules/pytz/zoneinfo/Asia/Sakhalin.py +++ /dev/null @@ -1,256 +0,0 @@ -'''tzinfo timezone information for Asia/Sakhalin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sakhalin(DstTzInfo): - '''Asia/Sakhalin timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Sakhalin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,8,22,14,29,12), -d(1937,12,31,15,0,0), -d(1945,8,24,15,0,0), -d(1981,3,31,13,0,0), -d(1981,9,30,12,0,0), -d(1982,3,31,13,0,0), -d(1982,9,30,12,0,0), -d(1983,3,31,13,0,0), -d(1983,9,30,12,0,0), -d(1984,3,31,13,0,0), -d(1984,9,29,15,0,0), -d(1985,3,30,15,0,0), -d(1985,9,28,15,0,0), -d(1986,3,29,15,0,0), -d(1986,9,27,15,0,0), -d(1987,3,28,15,0,0), -d(1987,9,26,15,0,0), -d(1988,3,26,15,0,0), -d(1988,9,24,15,0,0), -d(1989,3,25,15,0,0), -d(1989,9,23,15,0,0), -d(1990,3,24,15,0,0), -d(1990,9,29,15,0,0), -d(1991,3,30,15,0,0), -d(1991,9,28,16,0,0), -d(1992,1,18,16,0,0), -d(1992,3,28,12,0,0), -d(1992,9,26,11,0,0), -d(1993,3,27,15,0,0), -d(1993,9,25,15,0,0), -d(1994,3,26,15,0,0), -d(1994,9,24,15,0,0), -d(1995,3,25,15,0,0), -d(1995,9,23,15,0,0), -d(1996,3,30,15,0,0), -d(1996,10,26,15,0,0), -d(1997,3,29,15,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,10,28,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,3,25,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(34260,0,'LMT'), -i(32400,0,'CJT'), -i(32400,0,'JST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(39600,0,'SAKST'), -i(36000,0,'SAKT'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(43200,3600,'SAKST'), -i(39600,0,'SAKT'), -i(39600,0,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), -i(39600,3600,'SAKST'), -i(36000,0,'SAKT'), - ] - -Sakhalin = Sakhalin() - diff --git a/modules/pytz/zoneinfo/Asia/Samarkand.py b/modules/pytz/zoneinfo/Asia/Samarkand.py deleted file mode 100644 index 85bf71f1..00000000 --- a/modules/pytz/zoneinfo/Asia/Samarkand.py +++ /dev/null @@ -1,76 +0,0 @@ -'''tzinfo timezone information for Asia/Samarkand.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Samarkand(DstTzInfo): - '''Asia/Samarkand timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Samarkand' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,19,32,48), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1991,3,30,20,0,0), -d(1991,8,31,18,0,0), -d(1991,9,28,21,0,0), -d(1991,12,31,19,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,17,0,0), - ] - - _transition_info = [ -i(16020,0,'LMT'), -i(14400,0,'SAMT'), -i(18000,0,'SAMT'), -i(21600,3600,'SAMST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(21600,0,'TASST'), -i(21600,0,'UZST'), -i(18000,0,'UZT'), -i(18000,0,'UZT'), -i(21600,3600,'UZST'), -i(18000,0,'UZT'), - ] - -Samarkand = Samarkand() - diff --git a/modules/pytz/zoneinfo/Asia/Seoul.py b/modules/pytz/zoneinfo/Asia/Seoul.py deleted file mode 100644 index 07b9c92b..00000000 --- a/modules/pytz/zoneinfo/Asia/Seoul.py +++ /dev/null @@ -1,44 +0,0 @@ -'''tzinfo timezone information for Asia/Seoul.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Seoul(DstTzInfo): - '''Asia/Seoul timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Seoul' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,11,30,15,30,0), -d(1927,12,31,15,0,0), -d(1931,12,31,15,30,0), -d(1954,3,20,15,0,0), -d(1960,5,14,16,0,0), -d(1960,9,12,15,0,0), -d(1961,8,9,16,0,0), -d(1968,9,30,15,30,0), -d(1987,5,9,15,0,0), -d(1987,10,10,14,0,0), -d(1988,5,7,15,0,0), -d(1988,10,8,14,0,0), - ] - - _transition_info = [ -i(30600,0,'KST'), -i(32400,0,'KST'), -i(30600,0,'KST'), -i(32400,0,'KST'), -i(28800,0,'KST'), -i(32400,3600,'KDT'), -i(28800,0,'KST'), -i(30600,0,'KST'), -i(32400,0,'KST'), -i(36000,3600,'KDT'), -i(32400,0,'KST'), -i(36000,3600,'KDT'), -i(32400,0,'KST'), - ] - -Seoul = Seoul() - diff --git a/modules/pytz/zoneinfo/Asia/Shanghai.py b/modules/pytz/zoneinfo/Asia/Shanghai.py deleted file mode 100644 index 51f123b8..00000000 --- a/modules/pytz/zoneinfo/Asia/Shanghai.py +++ /dev/null @@ -1,54 +0,0 @@ -'''tzinfo timezone information for Asia/Shanghai.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Shanghai(DstTzInfo): - '''Asia/Shanghai timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Shanghai' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,15,54,8), -d(1940,6,2,16,0,0), -d(1940,9,30,15,0,0), -d(1941,3,15,16,0,0), -d(1941,9,30,15,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(29160,0,'LMT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Shanghai = Shanghai() - diff --git a/modules/pytz/zoneinfo/Asia/Singapore.py b/modules/pytz/zoneinfo/Asia/Singapore.py deleted file mode 100644 index 952f4c9e..00000000 --- a/modules/pytz/zoneinfo/Asia/Singapore.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Asia/Singapore.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Singapore(DstTzInfo): - '''Asia/Singapore timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Singapore' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,5,31,17,4,35), -d(1932,12,31,17,0,0), -d(1935,12,31,16,40,0), -d(1941,8,31,16,40,0), -d(1942,2,15,16,30,0), -d(1945,9,11,15,0,0), -d(1965,8,8,16,30,0), -d(1981,12,31,16,30,0), - ] - - _transition_info = [ -i(24900,0,'SMT'), -i(25200,0,'MALT'), -i(26400,1200,'MALST'), -i(26400,0,'MALT'), -i(27000,0,'MALT'), -i(32400,0,'JST'), -i(27000,0,'MALT'), -i(27000,0,'SGT'), -i(28800,0,'SGT'), - ] - -Singapore = Singapore() - diff --git a/modules/pytz/zoneinfo/Asia/Taipei.py b/modules/pytz/zoneinfo/Asia/Taipei.py deleted file mode 100644 index ae23e777..00000000 --- a/modules/pytz/zoneinfo/Asia/Taipei.py +++ /dev/null @@ -1,100 +0,0 @@ -'''tzinfo timezone information for Asia/Taipei.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Taipei(DstTzInfo): - '''Asia/Taipei timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Taipei' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1945,4,30,16,0,0), -d(1945,9,30,15,0,0), -d(1946,4,30,16,0,0), -d(1946,9,30,15,0,0), -d(1947,4,30,16,0,0), -d(1947,9,30,15,0,0), -d(1948,4,30,16,0,0), -d(1948,9,30,15,0,0), -d(1949,4,30,16,0,0), -d(1949,9,30,15,0,0), -d(1950,4,30,16,0,0), -d(1950,9,30,15,0,0), -d(1951,4,30,16,0,0), -d(1951,9,30,15,0,0), -d(1952,2,29,16,0,0), -d(1952,10,31,15,0,0), -d(1953,3,31,16,0,0), -d(1953,10,31,15,0,0), -d(1954,3,31,16,0,0), -d(1954,10,31,15,0,0), -d(1955,3,31,16,0,0), -d(1955,9,30,15,0,0), -d(1956,3,31,16,0,0), -d(1956,9,30,15,0,0), -d(1957,3,31,16,0,0), -d(1957,9,30,15,0,0), -d(1958,3,31,16,0,0), -d(1958,9,30,15,0,0), -d(1959,3,31,16,0,0), -d(1959,9,30,15,0,0), -d(1960,5,31,16,0,0), -d(1960,9,30,15,0,0), -d(1961,5,31,16,0,0), -d(1961,9,30,15,0,0), -d(1974,3,31,16,0,0), -d(1974,9,30,15,0,0), -d(1975,3,31,16,0,0), -d(1975,9,30,15,0,0), -d(1980,6,29,16,0,0), -d(1980,9,29,15,0,0), - ] - - _transition_info = [ -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Taipei = Taipei() - diff --git a/modules/pytz/zoneinfo/Asia/Tashkent.py b/modules/pytz/zoneinfo/Asia/Tashkent.py deleted file mode 100644 index a5ca2107..00000000 --- a/modules/pytz/zoneinfo/Asia/Tashkent.py +++ /dev/null @@ -1,76 +0,0 @@ -'''tzinfo timezone information for Asia/Tashkent.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tashkent(DstTzInfo): - '''Asia/Tashkent timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Tashkent' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,19,22,48), -d(1930,6,20,19,0,0), -d(1981,3,31,18,0,0), -d(1981,9,30,17,0,0), -d(1982,3,31,18,0,0), -d(1982,9,30,17,0,0), -d(1983,3,31,18,0,0), -d(1983,9,30,17,0,0), -d(1984,3,31,18,0,0), -d(1984,9,29,20,0,0), -d(1985,3,30,20,0,0), -d(1985,9,28,20,0,0), -d(1986,3,29,20,0,0), -d(1986,9,27,20,0,0), -d(1987,3,28,20,0,0), -d(1987,9,26,20,0,0), -d(1988,3,26,20,0,0), -d(1988,9,24,20,0,0), -d(1989,3,25,20,0,0), -d(1989,9,23,20,0,0), -d(1990,3,24,20,0,0), -d(1990,9,29,20,0,0), -d(1991,3,30,20,0,0), -d(1991,8,31,18,0,0), -d(1991,9,28,21,0,0), -d(1991,12,31,19,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,17,0,0), - ] - - _transition_info = [ -i(16620,0,'LMT'), -i(18000,0,'TAST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(25200,3600,'TASST'), -i(21600,0,'TAST'), -i(21600,0,'TASST'), -i(21600,0,'UZST'), -i(18000,0,'UZT'), -i(18000,0,'UZT'), -i(21600,3600,'UZST'), -i(18000,0,'UZT'), - ] - -Tashkent = Tashkent() - diff --git a/modules/pytz/zoneinfo/Asia/Tbilisi.py b/modules/pytz/zoneinfo/Asia/Tbilisi.py deleted file mode 100644 index 739a7513..00000000 --- a/modules/pytz/zoneinfo/Asia/Tbilisi.py +++ /dev/null @@ -1,126 +0,0 @@ -'''tzinfo timezone information for Asia/Tbilisi.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tbilisi(DstTzInfo): - '''Asia/Tbilisi timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Tbilisi' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,21,0,44), -d(1957,2,28,21,0,0), -d(1981,3,31,20,0,0), -d(1981,9,30,19,0,0), -d(1982,3,31,20,0,0), -d(1982,9,30,19,0,0), -d(1983,3,31,20,0,0), -d(1983,9,30,19,0,0), -d(1984,3,31,20,0,0), -d(1984,9,29,22,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,22,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,22,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,22,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,22,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,22,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,22,0,0), -d(1991,3,30,22,0,0), -d(1991,4,8,20,0,0), -d(1991,9,28,23,0,0), -d(1991,12,31,21,0,0), -d(1992,3,28,21,0,0), -d(1992,9,26,20,0,0), -d(1993,3,27,21,0,0), -d(1993,9,25,20,0,0), -d(1994,3,26,21,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,20,0,0), -d(1995,9,23,19,0,0), -d(1996,3,30,20,0,0), -d(1997,3,29,19,0,0), -d(1997,10,25,19,0,0), -d(1998,3,28,20,0,0), -d(1998,10,24,19,0,0), -d(1999,3,27,20,0,0), -d(1999,10,30,19,0,0), -d(2000,3,25,20,0,0), -d(2000,10,28,19,0,0), -d(2001,3,24,20,0,0), -d(2001,10,27,19,0,0), -d(2002,3,30,20,0,0), -d(2002,10,26,19,0,0), -d(2003,3,29,20,0,0), -d(2003,10,25,19,0,0), -d(2004,3,27,20,0,0), -d(2004,6,26,19,0,0), -d(2004,10,30,23,0,0), -d(2005,3,26,23,0,0), - ] - - _transition_info = [ -i(10740,0,'TBMT'), -i(10800,0,'TBIT'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(18000,3600,'TBIST'), -i(14400,0,'TBIT'), -i(14400,0,'TBIST'), -i(14400,0,'GEST'), -i(10800,0,'GET'), -i(10800,0,'GET'), -i(14400,3600,'GEST'), -i(10800,0,'GET'), -i(14400,3600,'GEST'), -i(10800,0,'GET'), -i(14400,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GET'), -i(18000,3600,'GEST'), -i(14400,0,'GEST'), -i(10800,0,'GET'), -i(14400,0,'GET'), - ] - -Tbilisi = Tbilisi() - diff --git a/modules/pytz/zoneinfo/Asia/Tehran.py b/modules/pytz/zoneinfo/Asia/Tehran.py deleted file mode 100644 index 85249fe9..00000000 --- a/modules/pytz/zoneinfo/Asia/Tehran.py +++ /dev/null @@ -1,228 +0,0 @@ -'''tzinfo timezone information for Asia/Tehran.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tehran(DstTzInfo): - '''Asia/Tehran timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Tehran' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,12,31,20,34,16), -d(1945,12,31,20,34,16), -d(1977,10,31,20,30,0), -d(1978,3,20,20,0,0), -d(1978,10,20,19,0,0), -d(1978,12,31,20,0,0), -d(1979,3,20,20,30,0), -d(1979,9,18,19,30,0), -d(1980,3,20,20,30,0), -d(1980,9,22,19,30,0), -d(1991,5,2,20,30,0), -d(1991,9,21,19,30,0), -d(1992,3,21,20,30,0), -d(1992,9,21,19,30,0), -d(1993,3,21,20,30,0), -d(1993,9,21,19,30,0), -d(1994,3,21,20,30,0), -d(1994,9,21,19,30,0), -d(1995,3,21,20,30,0), -d(1995,9,21,19,30,0), -d(1996,3,20,20,30,0), -d(1996,9,20,19,30,0), -d(1997,3,21,20,30,0), -d(1997,9,21,19,30,0), -d(1998,3,21,20,30,0), -d(1998,9,21,19,30,0), -d(1999,3,21,20,30,0), -d(1999,9,21,19,30,0), -d(2000,3,20,20,30,0), -d(2000,9,20,19,30,0), -d(2001,3,21,20,30,0), -d(2001,9,21,19,30,0), -d(2002,3,21,20,30,0), -d(2002,9,21,19,30,0), -d(2003,3,21,20,30,0), -d(2003,9,21,19,30,0), -d(2004,3,20,20,30,0), -d(2004,9,20,19,30,0), -d(2005,3,21,20,30,0), -d(2005,9,21,19,30,0), -d(2006,3,21,20,30,0), -d(2006,9,21,19,30,0), -d(2007,3,21,20,30,0), -d(2007,9,21,19,30,0), -d(2008,3,20,20,30,0), -d(2008,9,20,19,30,0), -d(2009,3,21,20,30,0), -d(2009,9,21,19,30,0), -d(2010,3,21,20,30,0), -d(2010,9,21,19,30,0), -d(2011,3,21,20,30,0), -d(2011,9,21,19,30,0), -d(2012,3,20,20,30,0), -d(2012,9,20,19,30,0), -d(2013,3,21,20,30,0), -d(2013,9,21,19,30,0), -d(2014,3,21,20,30,0), -d(2014,9,21,19,30,0), -d(2015,3,21,20,30,0), -d(2015,9,21,19,30,0), -d(2016,3,20,20,30,0), -d(2016,9,20,19,30,0), -d(2017,3,21,20,30,0), -d(2017,9,21,19,30,0), -d(2018,3,21,20,30,0), -d(2018,9,21,19,30,0), -d(2019,3,21,20,30,0), -d(2019,9,21,19,30,0), -d(2020,3,20,20,30,0), -d(2020,9,20,19,30,0), -d(2021,3,21,20,30,0), -d(2021,9,21,19,30,0), -d(2022,3,21,20,30,0), -d(2022,9,21,19,30,0), -d(2023,3,21,20,30,0), -d(2023,9,21,19,30,0), -d(2024,3,20,20,30,0), -d(2024,9,20,19,30,0), -d(2025,3,21,20,30,0), -d(2025,9,21,19,30,0), -d(2026,3,21,20,30,0), -d(2026,9,21,19,30,0), -d(2027,3,21,20,30,0), -d(2027,9,21,19,30,0), -d(2028,3,20,20,30,0), -d(2028,9,20,19,30,0), -d(2029,3,20,20,30,0), -d(2029,9,20,19,30,0), -d(2030,3,21,20,30,0), -d(2030,9,21,19,30,0), -d(2031,3,21,20,30,0), -d(2031,9,21,19,30,0), -d(2032,3,20,20,30,0), -d(2032,9,20,19,30,0), -d(2033,3,20,20,30,0), -d(2033,9,20,19,30,0), -d(2034,3,21,20,30,0), -d(2034,9,21,19,30,0), -d(2035,3,21,20,30,0), -d(2035,9,21,19,30,0), -d(2036,3,20,20,30,0), -d(2036,9,20,19,30,0), -d(2037,3,20,20,30,0), -d(2037,9,20,19,30,0), - ] - - _transition_info = [ -i(12360,0,'LMT'), -i(12360,0,'TMT'), -i(12600,0,'IRST'), -i(14400,0,'IRST'), -i(18000,3600,'IRDT'), -i(14400,0,'IRST'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), - ] - -Tehran = Tehran() - diff --git a/modules/pytz/zoneinfo/Asia/Tel_Aviv.py b/modules/pytz/zoneinfo/Asia/Tel_Aviv.py deleted file mode 100644 index c02fb2da..00000000 --- a/modules/pytz/zoneinfo/Asia/Tel_Aviv.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for Asia/Tel_Aviv.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tel_Aviv(DstTzInfo): - '''Asia/Tel_Aviv timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Tel_Aviv' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,12,31,21,39,20), -d(1940,5,31,22,0,0), -d(1942,10,31,21,0,0), -d(1943,4,1,0,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,23,0,0), -d(1946,4,16,0,0,0), -d(1946,10,31,21,0,0), -d(1948,5,22,22,0,0), -d(1948,8,31,20,0,0), -d(1948,10,31,23,0,0), -d(1949,4,30,22,0,0), -d(1949,10,31,23,0,0), -d(1950,4,15,22,0,0), -d(1950,9,15,0,0,0), -d(1951,3,31,22,0,0), -d(1951,11,11,0,0,0), -d(1952,4,20,0,0,0), -d(1952,10,19,0,0,0), -d(1953,4,12,0,0,0), -d(1953,9,13,0,0,0), -d(1954,6,12,22,0,0), -d(1954,9,11,21,0,0), -d(1955,6,11,0,0,0), -d(1955,9,10,21,0,0), -d(1956,6,2,22,0,0), -d(1956,9,30,0,0,0), -d(1957,4,29,0,0,0), -d(1957,9,21,21,0,0), -d(1974,7,6,22,0,0), -d(1974,10,12,21,0,0), -d(1975,4,19,22,0,0), -d(1975,8,30,21,0,0), -d(1985,4,13,22,0,0), -d(1985,9,14,21,0,0), -d(1986,5,17,22,0,0), -d(1986,9,6,21,0,0), -d(1987,4,14,22,0,0), -d(1987,9,12,21,0,0), -d(1988,4,8,22,0,0), -d(1988,9,2,21,0,0), -d(1989,4,29,22,0,0), -d(1989,9,2,21,0,0), -d(1990,3,24,22,0,0), -d(1990,8,25,21,0,0), -d(1991,3,23,22,0,0), -d(1991,8,31,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,5,21,0,0), -d(1993,4,1,22,0,0), -d(1993,9,4,21,0,0), -d(1994,3,31,22,0,0), -d(1994,8,27,21,0,0), -d(1995,3,30,22,0,0), -d(1995,9,2,21,0,0), -d(1996,3,14,22,0,0), -d(1996,9,15,21,0,0), -d(1997,3,20,22,0,0), -d(1997,9,13,21,0,0), -d(1998,3,19,22,0,0), -d(1998,9,5,21,0,0), -d(1999,4,2,0,0,0), -d(1999,9,2,23,0,0), -d(2000,4,14,0,0,0), -d(2000,10,5,22,0,0), -d(2001,4,8,23,0,0), -d(2001,9,23,22,0,0), -d(2002,3,28,23,0,0), -d(2002,10,6,22,0,0), -d(2003,3,27,23,0,0), -d(2003,10,2,22,0,0), -d(2004,4,6,23,0,0), -d(2004,9,21,22,0,0), -d(2005,4,1,0,0,0), -d(2005,10,8,23,0,0), -d(2006,3,31,0,0,0), -d(2006,9,30,23,0,0), -d(2007,3,30,0,0,0), -d(2007,9,15,23,0,0), -d(2008,3,28,0,0,0), -d(2008,10,4,23,0,0), -d(2009,3,27,0,0,0), -d(2009,9,26,23,0,0), -d(2010,3,26,0,0,0), -d(2010,9,11,23,0,0), -d(2011,4,1,0,0,0), -d(2011,10,1,23,0,0), -d(2012,3,30,0,0,0), -d(2012,9,22,23,0,0), -d(2013,3,29,0,0,0), -d(2013,9,7,23,0,0), -d(2014,3,28,0,0,0), -d(2014,9,27,23,0,0), -d(2015,3,27,0,0,0), -d(2015,9,19,23,0,0), -d(2016,4,1,0,0,0), -d(2016,10,8,23,0,0), -d(2017,3,31,0,0,0), -d(2017,9,23,23,0,0), -d(2018,3,30,0,0,0), -d(2018,9,15,23,0,0), -d(2019,3,29,0,0,0), -d(2019,10,5,23,0,0), -d(2020,3,27,0,0,0), -d(2020,9,26,23,0,0), -d(2021,3,26,0,0,0), -d(2021,9,11,23,0,0), -d(2022,4,1,0,0,0), -d(2022,10,1,23,0,0), -d(2023,3,31,0,0,0), -d(2023,9,23,23,0,0), -d(2024,3,29,0,0,0), -d(2024,10,5,23,0,0), -d(2025,3,28,0,0,0), -d(2025,9,27,23,0,0), -d(2026,3,27,0,0,0), -d(2026,9,19,23,0,0), -d(2027,3,26,0,0,0), -d(2027,10,9,23,0,0), -d(2028,3,31,0,0,0), -d(2028,9,23,23,0,0), -d(2029,3,30,0,0,0), -d(2029,9,15,23,0,0), -d(2030,3,29,0,0,0), -d(2030,10,5,23,0,0), -d(2031,3,28,0,0,0), -d(2031,9,20,23,0,0), -d(2032,3,26,0,0,0), -d(2032,9,11,23,0,0), -d(2033,4,1,0,0,0), -d(2033,10,1,23,0,0), -d(2034,3,31,0,0,0), -d(2034,9,16,23,0,0), -d(2035,3,30,0,0,0), -d(2035,10,6,23,0,0), -d(2036,3,28,0,0,0), -d(2036,9,27,23,0,0), -d(2037,3,27,0,0,0), -d(2037,9,12,23,0,0), - ] - - _transition_info = [ -i(8460,0,'JMT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(14400,7200,'IDDT'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), - ] - -Tel_Aviv = Tel_Aviv() - diff --git a/modules/pytz/zoneinfo/Asia/Thimbu.py b/modules/pytz/zoneinfo/Asia/Thimbu.py deleted file mode 100644 index adbcb013..00000000 --- a/modules/pytz/zoneinfo/Asia/Thimbu.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Thimbu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Thimbu(DstTzInfo): - '''Asia/Thimbu timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Thimbu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1947,8,14,18,1,24), -d(1987,9,30,18,30,0), - ] - - _transition_info = [ -i(21540,0,'LMT'), -i(19800,0,'IST'), -i(21600,0,'BTT'), - ] - -Thimbu = Thimbu() - diff --git a/modules/pytz/zoneinfo/Asia/Thimphu.py b/modules/pytz/zoneinfo/Asia/Thimphu.py deleted file mode 100644 index 95da5a48..00000000 --- a/modules/pytz/zoneinfo/Asia/Thimphu.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Asia/Thimphu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Thimphu(DstTzInfo): - '''Asia/Thimphu timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Thimphu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1947,8,14,18,1,24), -d(1987,9,30,18,30,0), - ] - - _transition_info = [ -i(21540,0,'LMT'), -i(19800,0,'IST'), -i(21600,0,'BTT'), - ] - -Thimphu = Thimphu() - diff --git a/modules/pytz/zoneinfo/Asia/Tokyo.py b/modules/pytz/zoneinfo/Asia/Tokyo.py deleted file mode 100644 index 887d1307..00000000 --- a/modules/pytz/zoneinfo/Asia/Tokyo.py +++ /dev/null @@ -1,38 +0,0 @@ -'''tzinfo timezone information for Asia/Tokyo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tokyo(DstTzInfo): - '''Asia/Tokyo timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Tokyo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1937,12,31,15,0,0), -d(1948,5,1,17,0,0), -d(1948,9,10,16,0,0), -d(1949,4,2,17,0,0), -d(1949,9,9,16,0,0), -d(1950,5,6,17,0,0), -d(1950,9,8,16,0,0), -d(1951,5,5,17,0,0), -d(1951,9,7,16,0,0), - ] - - _transition_info = [ -i(32400,0,'CJT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), - ] - -Tokyo = Tokyo() - diff --git a/modules/pytz/zoneinfo/Asia/Ujung_Pandang.py b/modules/pytz/zoneinfo/Asia/Ujung_Pandang.py deleted file mode 100644 index d4b8ba26..00000000 --- a/modules/pytz/zoneinfo/Asia/Ujung_Pandang.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Ujung_Pandang.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ujung_Pandang(DstTzInfo): - '''Asia/Ujung_Pandang timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Ujung_Pandang' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,16,2,24), -d(1932,10,31,16,2,24), -d(1942,2,8,16,0,0), -d(1945,7,31,15,0,0), - ] - - _transition_info = [ -i(28680,0,'LMT'), -i(28680,0,'MMT'), -i(28800,0,'CIT'), -i(32400,0,'JST'), -i(28800,0,'CIT'), - ] - -Ujung_Pandang = Ujung_Pandang() - diff --git a/modules/pytz/zoneinfo/Asia/Ulaanbaatar.py b/modules/pytz/zoneinfo/Asia/Ulaanbaatar.py deleted file mode 100644 index eb089c19..00000000 --- a/modules/pytz/zoneinfo/Asia/Ulaanbaatar.py +++ /dev/null @@ -1,236 +0,0 @@ -'''tzinfo timezone information for Asia/Ulaanbaatar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ulaanbaatar(DstTzInfo): - '''Asia/Ulaanbaatar timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Ulaanbaatar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,7,31,16,52,28), -d(1977,12,31,17,0,0), -d(1983,3,31,16,0,0), -d(1983,9,30,15,0,0), -d(1984,3,31,16,0,0), -d(1984,9,29,18,0,0), -d(1985,3,30,18,0,0), -d(1985,9,28,18,0,0), -d(1986,3,29,18,0,0), -d(1986,9,27,18,0,0), -d(1987,3,28,18,0,0), -d(1987,9,26,18,0,0), -d(1988,3,26,18,0,0), -d(1988,9,24,18,0,0), -d(1989,3,25,18,0,0), -d(1989,9,23,18,0,0), -d(1990,3,24,18,0,0), -d(1990,9,29,18,0,0), -d(1991,3,30,18,0,0), -d(1991,9,28,18,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,18,0,0), -d(1993,3,27,18,0,0), -d(1993,9,25,18,0,0), -d(1994,3,26,18,0,0), -d(1994,9,24,18,0,0), -d(1995,3,25,18,0,0), -d(1995,9,23,18,0,0), -d(1996,3,30,18,0,0), -d(1996,9,28,18,0,0), -d(1997,3,29,18,0,0), -d(1997,9,27,18,0,0), -d(1998,3,28,18,0,0), -d(1998,9,26,18,0,0), -d(2001,4,27,18,0,0), -d(2001,9,28,17,0,0), -d(2002,3,29,18,0,0), -d(2002,9,27,17,0,0), -d(2003,3,28,18,0,0), -d(2003,9,26,17,0,0), -d(2004,3,26,18,0,0), -d(2004,9,24,17,0,0), -d(2005,3,25,18,0,0), -d(2005,9,23,17,0,0), -d(2006,3,24,18,0,0), -d(2006,9,29,17,0,0), -d(2007,3,30,18,0,0), -d(2007,9,28,17,0,0), -d(2008,3,28,18,0,0), -d(2008,9,26,17,0,0), -d(2009,3,27,18,0,0), -d(2009,9,25,17,0,0), -d(2010,3,26,18,0,0), -d(2010,9,24,17,0,0), -d(2011,3,25,18,0,0), -d(2011,9,23,17,0,0), -d(2012,3,30,18,0,0), -d(2012,9,28,17,0,0), -d(2013,3,29,18,0,0), -d(2013,9,27,17,0,0), -d(2014,3,28,18,0,0), -d(2014,9,26,17,0,0), -d(2015,3,27,18,0,0), -d(2015,9,25,17,0,0), -d(2016,3,25,18,0,0), -d(2016,9,23,17,0,0), -d(2017,3,24,18,0,0), -d(2017,9,29,17,0,0), -d(2018,3,30,18,0,0), -d(2018,9,28,17,0,0), -d(2019,3,29,18,0,0), -d(2019,9,27,17,0,0), -d(2020,3,27,18,0,0), -d(2020,9,25,17,0,0), -d(2021,3,26,18,0,0), -d(2021,9,24,17,0,0), -d(2022,3,25,18,0,0), -d(2022,9,23,17,0,0), -d(2023,3,24,18,0,0), -d(2023,9,29,17,0,0), -d(2024,3,29,18,0,0), -d(2024,9,27,17,0,0), -d(2025,3,28,18,0,0), -d(2025,9,26,17,0,0), -d(2026,3,27,18,0,0), -d(2026,9,25,17,0,0), -d(2027,3,26,18,0,0), -d(2027,9,24,17,0,0), -d(2028,3,24,18,0,0), -d(2028,9,29,17,0,0), -d(2029,3,30,18,0,0), -d(2029,9,28,17,0,0), -d(2030,3,29,18,0,0), -d(2030,9,27,17,0,0), -d(2031,3,28,18,0,0), -d(2031,9,26,17,0,0), -d(2032,3,26,18,0,0), -d(2032,9,24,17,0,0), -d(2033,3,25,18,0,0), -d(2033,9,23,17,0,0), -d(2034,3,24,18,0,0), -d(2034,9,29,17,0,0), -d(2035,3,30,18,0,0), -d(2035,9,28,17,0,0), -d(2036,3,28,18,0,0), -d(2036,9,26,17,0,0), -d(2037,3,27,18,0,0), -d(2037,9,25,17,0,0), - ] - - _transition_info = [ -i(25680,0,'LMT'), -i(25200,0,'ULAT'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), - ] - -Ulaanbaatar = Ulaanbaatar() - diff --git a/modules/pytz/zoneinfo/Asia/Ulan_Bator.py b/modules/pytz/zoneinfo/Asia/Ulan_Bator.py deleted file mode 100644 index 95f53784..00000000 --- a/modules/pytz/zoneinfo/Asia/Ulan_Bator.py +++ /dev/null @@ -1,236 +0,0 @@ -'''tzinfo timezone information for Asia/Ulan_Bator.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ulan_Bator(DstTzInfo): - '''Asia/Ulan_Bator timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Ulan_Bator' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,7,31,16,52,28), -d(1977,12,31,17,0,0), -d(1983,3,31,16,0,0), -d(1983,9,30,15,0,0), -d(1984,3,31,16,0,0), -d(1984,9,29,18,0,0), -d(1985,3,30,18,0,0), -d(1985,9,28,18,0,0), -d(1986,3,29,18,0,0), -d(1986,9,27,18,0,0), -d(1987,3,28,18,0,0), -d(1987,9,26,18,0,0), -d(1988,3,26,18,0,0), -d(1988,9,24,18,0,0), -d(1989,3,25,18,0,0), -d(1989,9,23,18,0,0), -d(1990,3,24,18,0,0), -d(1990,9,29,18,0,0), -d(1991,3,30,18,0,0), -d(1991,9,28,18,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,18,0,0), -d(1993,3,27,18,0,0), -d(1993,9,25,18,0,0), -d(1994,3,26,18,0,0), -d(1994,9,24,18,0,0), -d(1995,3,25,18,0,0), -d(1995,9,23,18,0,0), -d(1996,3,30,18,0,0), -d(1996,9,28,18,0,0), -d(1997,3,29,18,0,0), -d(1997,9,27,18,0,0), -d(1998,3,28,18,0,0), -d(1998,9,26,18,0,0), -d(2001,4,27,18,0,0), -d(2001,9,28,17,0,0), -d(2002,3,29,18,0,0), -d(2002,9,27,17,0,0), -d(2003,3,28,18,0,0), -d(2003,9,26,17,0,0), -d(2004,3,26,18,0,0), -d(2004,9,24,17,0,0), -d(2005,3,25,18,0,0), -d(2005,9,23,17,0,0), -d(2006,3,24,18,0,0), -d(2006,9,29,17,0,0), -d(2007,3,30,18,0,0), -d(2007,9,28,17,0,0), -d(2008,3,28,18,0,0), -d(2008,9,26,17,0,0), -d(2009,3,27,18,0,0), -d(2009,9,25,17,0,0), -d(2010,3,26,18,0,0), -d(2010,9,24,17,0,0), -d(2011,3,25,18,0,0), -d(2011,9,23,17,0,0), -d(2012,3,30,18,0,0), -d(2012,9,28,17,0,0), -d(2013,3,29,18,0,0), -d(2013,9,27,17,0,0), -d(2014,3,28,18,0,0), -d(2014,9,26,17,0,0), -d(2015,3,27,18,0,0), -d(2015,9,25,17,0,0), -d(2016,3,25,18,0,0), -d(2016,9,23,17,0,0), -d(2017,3,24,18,0,0), -d(2017,9,29,17,0,0), -d(2018,3,30,18,0,0), -d(2018,9,28,17,0,0), -d(2019,3,29,18,0,0), -d(2019,9,27,17,0,0), -d(2020,3,27,18,0,0), -d(2020,9,25,17,0,0), -d(2021,3,26,18,0,0), -d(2021,9,24,17,0,0), -d(2022,3,25,18,0,0), -d(2022,9,23,17,0,0), -d(2023,3,24,18,0,0), -d(2023,9,29,17,0,0), -d(2024,3,29,18,0,0), -d(2024,9,27,17,0,0), -d(2025,3,28,18,0,0), -d(2025,9,26,17,0,0), -d(2026,3,27,18,0,0), -d(2026,9,25,17,0,0), -d(2027,3,26,18,0,0), -d(2027,9,24,17,0,0), -d(2028,3,24,18,0,0), -d(2028,9,29,17,0,0), -d(2029,3,30,18,0,0), -d(2029,9,28,17,0,0), -d(2030,3,29,18,0,0), -d(2030,9,27,17,0,0), -d(2031,3,28,18,0,0), -d(2031,9,26,17,0,0), -d(2032,3,26,18,0,0), -d(2032,9,24,17,0,0), -d(2033,3,25,18,0,0), -d(2033,9,23,17,0,0), -d(2034,3,24,18,0,0), -d(2034,9,29,17,0,0), -d(2035,3,30,18,0,0), -d(2035,9,28,17,0,0), -d(2036,3,28,18,0,0), -d(2036,9,26,17,0,0), -d(2037,3,27,18,0,0), -d(2037,9,25,17,0,0), - ] - - _transition_info = [ -i(25680,0,'LMT'), -i(25200,0,'ULAT'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), -i(32400,3600,'ULAST'), -i(28800,0,'ULAT'), - ] - -Ulan_Bator = Ulan_Bator() - diff --git a/modules/pytz/zoneinfo/Asia/Urumqi.py b/modules/pytz/zoneinfo/Asia/Urumqi.py deleted file mode 100644 index 8d0d686f..00000000 --- a/modules/pytz/zoneinfo/Asia/Urumqi.py +++ /dev/null @@ -1,48 +0,0 @@ -'''tzinfo timezone information for Asia/Urumqi.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Urumqi(DstTzInfo): - '''Asia/Urumqi timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Urumqi' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,18,9,40), -d(1980,4,30,18,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(21000,0,'LMT'), -i(21600,0,'URUT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -Urumqi = Urumqi() - diff --git a/modules/pytz/zoneinfo/Asia/Vientiane.py b/modules/pytz/zoneinfo/Asia/Vientiane.py deleted file mode 100644 index 60f57c66..00000000 --- a/modules/pytz/zoneinfo/Asia/Vientiane.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Asia/Vientiane.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vientiane(DstTzInfo): - '''Asia/Vientiane timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Vientiane' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,6,8,17,9,36), -d(1911,3,10,16,54,40), -d(1912,4,30,17,0,0), -d(1931,4,30,16,0,0), - ] - - _transition_info = [ -i(24600,0,'LMT'), -i(25560,0,'SMT'), -i(25200,0,'ICT'), -i(28800,0,'ICT'), -i(25200,0,'ICT'), - ] - -Vientiane = Vientiane() - diff --git a/modules/pytz/zoneinfo/Asia/Vladivostok.py b/modules/pytz/zoneinfo/Asia/Vladivostok.py deleted file mode 100644 index 95a112ce..00000000 --- a/modules/pytz/zoneinfo/Asia/Vladivostok.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Vladivostok.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vladivostok(DstTzInfo): - '''Asia/Vladivostok timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Vladivostok' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,11,14,15,12,16), -d(1930,6,20,15,0,0), -d(1981,3,31,14,0,0), -d(1981,9,30,13,0,0), -d(1982,3,31,14,0,0), -d(1982,9,30,13,0,0), -d(1983,3,31,14,0,0), -d(1983,9,30,13,0,0), -d(1984,3,31,14,0,0), -d(1984,9,29,16,0,0), -d(1985,3,30,16,0,0), -d(1985,9,28,16,0,0), -d(1986,3,29,16,0,0), -d(1986,9,27,16,0,0), -d(1987,3,28,16,0,0), -d(1987,9,26,16,0,0), -d(1988,3,26,16,0,0), -d(1988,9,24,16,0,0), -d(1989,3,25,16,0,0), -d(1989,9,23,16,0,0), -d(1990,3,24,16,0,0), -d(1990,9,29,16,0,0), -d(1991,3,30,16,0,0), -d(1991,9,28,17,0,0), -d(1992,1,18,17,0,0), -d(1992,3,28,13,0,0), -d(1992,9,26,12,0,0), -d(1993,3,27,16,0,0), -d(1993,9,25,16,0,0), -d(1994,3,26,16,0,0), -d(1994,9,24,16,0,0), -d(1995,3,25,16,0,0), -d(1995,9,23,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,10,28,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,3,25,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(31680,0,'LMT'), -i(32400,0,'VLAT'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(36000,0,'VLASST'), -i(32400,0,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), -i(39600,3600,'VLAST'), -i(36000,0,'VLAT'), - ] - -Vladivostok = Vladivostok() - diff --git a/modules/pytz/zoneinfo/Asia/Yakutsk.py b/modules/pytz/zoneinfo/Asia/Yakutsk.py deleted file mode 100644 index 5283f1fc..00000000 --- a/modules/pytz/zoneinfo/Asia/Yakutsk.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Yakutsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yakutsk(DstTzInfo): - '''Asia/Yakutsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Yakutsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,14,15,21,20), -d(1930,6,20,16,0,0), -d(1981,3,31,15,0,0), -d(1981,9,30,14,0,0), -d(1982,3,31,15,0,0), -d(1982,9,30,14,0,0), -d(1983,3,31,15,0,0), -d(1983,9,30,14,0,0), -d(1984,3,31,15,0,0), -d(1984,9,29,17,0,0), -d(1985,3,30,17,0,0), -d(1985,9,28,17,0,0), -d(1986,3,29,17,0,0), -d(1986,9,27,17,0,0), -d(1987,3,28,17,0,0), -d(1987,9,26,17,0,0), -d(1988,3,26,17,0,0), -d(1988,9,24,17,0,0), -d(1989,3,25,17,0,0), -d(1989,9,23,17,0,0), -d(1990,3,24,17,0,0), -d(1990,9,29,17,0,0), -d(1991,3,30,17,0,0), -d(1991,9,28,18,0,0), -d(1992,1,18,18,0,0), -d(1992,3,28,14,0,0), -d(1992,9,26,13,0,0), -d(1993,3,27,17,0,0), -d(1993,9,25,17,0,0), -d(1994,3,26,17,0,0), -d(1994,9,24,17,0,0), -d(1995,3,25,17,0,0), -d(1995,9,23,17,0,0), -d(1996,3,30,17,0,0), -d(1996,10,26,17,0,0), -d(1997,3,29,17,0,0), -d(1997,10,25,17,0,0), -d(1998,3,28,17,0,0), -d(1998,10,24,17,0,0), -d(1999,3,27,17,0,0), -d(1999,10,30,17,0,0), -d(2000,3,25,17,0,0), -d(2000,10,28,17,0,0), -d(2001,3,24,17,0,0), -d(2001,10,27,17,0,0), -d(2002,3,30,17,0,0), -d(2002,10,26,17,0,0), -d(2003,3,29,17,0,0), -d(2003,10,25,17,0,0), -d(2004,3,27,17,0,0), -d(2004,10,30,17,0,0), -d(2005,3,26,17,0,0), -d(2005,10,29,17,0,0), -d(2006,3,25,17,0,0), -d(2006,10,28,17,0,0), -d(2007,3,24,17,0,0), -d(2007,10,27,17,0,0), -d(2008,3,29,17,0,0), -d(2008,10,25,17,0,0), -d(2009,3,28,17,0,0), -d(2009,10,24,17,0,0), -d(2010,3,27,17,0,0), -d(2010,10,30,17,0,0), -d(2011,3,26,17,0,0), -d(2011,10,29,17,0,0), -d(2012,3,24,17,0,0), -d(2012,10,27,17,0,0), -d(2013,3,30,17,0,0), -d(2013,10,26,17,0,0), -d(2014,3,29,17,0,0), -d(2014,10,25,17,0,0), -d(2015,3,28,17,0,0), -d(2015,10,24,17,0,0), -d(2016,3,26,17,0,0), -d(2016,10,29,17,0,0), -d(2017,3,25,17,0,0), -d(2017,10,28,17,0,0), -d(2018,3,24,17,0,0), -d(2018,10,27,17,0,0), -d(2019,3,30,17,0,0), -d(2019,10,26,17,0,0), -d(2020,3,28,17,0,0), -d(2020,10,24,17,0,0), -d(2021,3,27,17,0,0), -d(2021,10,30,17,0,0), -d(2022,3,26,17,0,0), -d(2022,10,29,17,0,0), -d(2023,3,25,17,0,0), -d(2023,10,28,17,0,0), -d(2024,3,30,17,0,0), -d(2024,10,26,17,0,0), -d(2025,3,29,17,0,0), -d(2025,10,25,17,0,0), -d(2026,3,28,17,0,0), -d(2026,10,24,17,0,0), -d(2027,3,27,17,0,0), -d(2027,10,30,17,0,0), -d(2028,3,25,17,0,0), -d(2028,10,28,17,0,0), -d(2029,3,24,17,0,0), -d(2029,10,27,17,0,0), -d(2030,3,30,17,0,0), -d(2030,10,26,17,0,0), -d(2031,3,29,17,0,0), -d(2031,10,25,17,0,0), -d(2032,3,27,17,0,0), -d(2032,10,30,17,0,0), -d(2033,3,26,17,0,0), -d(2033,10,29,17,0,0), -d(2034,3,25,17,0,0), -d(2034,10,28,17,0,0), -d(2035,3,24,17,0,0), -d(2035,10,27,17,0,0), -d(2036,3,29,17,0,0), -d(2036,10,25,17,0,0), -d(2037,3,28,17,0,0), -d(2037,10,24,17,0,0), - ] - - _transition_info = [ -i(31140,0,'LMT'), -i(28800,0,'YAKT'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(32400,0,'YAKST'), -i(28800,0,'YAKT'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), -i(36000,3600,'YAKST'), -i(32400,0,'YAKT'), - ] - -Yakutsk = Yakutsk() - diff --git a/modules/pytz/zoneinfo/Asia/Yekaterinburg.py b/modules/pytz/zoneinfo/Asia/Yekaterinburg.py deleted file mode 100644 index bc01842c..00000000 --- a/modules/pytz/zoneinfo/Asia/Yekaterinburg.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Asia/Yekaterinburg.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yekaterinburg(DstTzInfo): - '''Asia/Yekaterinburg timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Yekaterinburg' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,7,14,23,57,36), -d(1930,6,20,20,0,0), -d(1981,3,31,19,0,0), -d(1981,9,30,18,0,0), -d(1982,3,31,19,0,0), -d(1982,9,30,18,0,0), -d(1983,3,31,19,0,0), -d(1983,9,30,18,0,0), -d(1984,3,31,19,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,21,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,21,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,21,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,21,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,21,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,21,0,0), -d(1990,9,29,21,0,0), -d(1991,3,30,21,0,0), -d(1991,9,28,22,0,0), -d(1992,1,18,22,0,0), -d(1992,3,28,18,0,0), -d(1992,9,26,17,0,0), -d(1993,3,27,21,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,21,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,21,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,21,0,0), -d(1996,10,26,21,0,0), -d(1997,3,29,21,0,0), -d(1997,10,25,21,0,0), -d(1998,3,28,21,0,0), -d(1998,10,24,21,0,0), -d(1999,3,27,21,0,0), -d(1999,10,30,21,0,0), -d(2000,3,25,21,0,0), -d(2000,10,28,21,0,0), -d(2001,3,24,21,0,0), -d(2001,10,27,21,0,0), -d(2002,3,30,21,0,0), -d(2002,10,26,21,0,0), -d(2003,3,29,21,0,0), -d(2003,10,25,21,0,0), -d(2004,3,27,21,0,0), -d(2004,10,30,21,0,0), -d(2005,3,26,21,0,0), -d(2005,10,29,21,0,0), -d(2006,3,25,21,0,0), -d(2006,10,28,21,0,0), -d(2007,3,24,21,0,0), -d(2007,10,27,21,0,0), -d(2008,3,29,21,0,0), -d(2008,10,25,21,0,0), -d(2009,3,28,21,0,0), -d(2009,10,24,21,0,0), -d(2010,3,27,21,0,0), -d(2010,10,30,21,0,0), -d(2011,3,26,21,0,0), -d(2011,10,29,21,0,0), -d(2012,3,24,21,0,0), -d(2012,10,27,21,0,0), -d(2013,3,30,21,0,0), -d(2013,10,26,21,0,0), -d(2014,3,29,21,0,0), -d(2014,10,25,21,0,0), -d(2015,3,28,21,0,0), -d(2015,10,24,21,0,0), -d(2016,3,26,21,0,0), -d(2016,10,29,21,0,0), -d(2017,3,25,21,0,0), -d(2017,10,28,21,0,0), -d(2018,3,24,21,0,0), -d(2018,10,27,21,0,0), -d(2019,3,30,21,0,0), -d(2019,10,26,21,0,0), -d(2020,3,28,21,0,0), -d(2020,10,24,21,0,0), -d(2021,3,27,21,0,0), -d(2021,10,30,21,0,0), -d(2022,3,26,21,0,0), -d(2022,10,29,21,0,0), -d(2023,3,25,21,0,0), -d(2023,10,28,21,0,0), -d(2024,3,30,21,0,0), -d(2024,10,26,21,0,0), -d(2025,3,29,21,0,0), -d(2025,10,25,21,0,0), -d(2026,3,28,21,0,0), -d(2026,10,24,21,0,0), -d(2027,3,27,21,0,0), -d(2027,10,30,21,0,0), -d(2028,3,25,21,0,0), -d(2028,10,28,21,0,0), -d(2029,3,24,21,0,0), -d(2029,10,27,21,0,0), -d(2030,3,30,21,0,0), -d(2030,10,26,21,0,0), -d(2031,3,29,21,0,0), -d(2031,10,25,21,0,0), -d(2032,3,27,21,0,0), -d(2032,10,30,21,0,0), -d(2033,3,26,21,0,0), -d(2033,10,29,21,0,0), -d(2034,3,25,21,0,0), -d(2034,10,28,21,0,0), -d(2035,3,24,21,0,0), -d(2035,10,27,21,0,0), -d(2036,3,29,21,0,0), -d(2036,10,25,21,0,0), -d(2037,3,28,21,0,0), -d(2037,10,24,21,0,0), - ] - - _transition_info = [ -i(14520,0,'LMT'), -i(14400,0,'SVET'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(21600,3600,'SVEST'), -i(18000,0,'SVET'), -i(18000,0,'SVEST'), -i(14400,0,'SVET'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), -i(21600,3600,'YEKST'), -i(18000,0,'YEKT'), - ] - -Yekaterinburg = Yekaterinburg() - diff --git a/modules/pytz/zoneinfo/Asia/Yerevan.py b/modules/pytz/zoneinfo/Asia/Yerevan.py deleted file mode 100644 index edfd0485..00000000 --- a/modules/pytz/zoneinfo/Asia/Yerevan.py +++ /dev/null @@ -1,252 +0,0 @@ -'''tzinfo timezone information for Asia/Yerevan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yerevan(DstTzInfo): - '''Asia/Yerevan timezone definition. See datetime.tzinfo for details''' - - zone = 'Asia/Yerevan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,21,2,0), -d(1957,2,28,21,0,0), -d(1981,3,31,20,0,0), -d(1981,9,30,19,0,0), -d(1982,3,31,20,0,0), -d(1982,9,30,19,0,0), -d(1983,3,31,20,0,0), -d(1983,9,30,19,0,0), -d(1984,3,31,20,0,0), -d(1984,9,29,22,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,22,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,22,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,22,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,22,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,22,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,22,0,0), -d(1991,3,30,22,0,0), -d(1991,9,22,20,0,0), -d(1991,9,28,23,0,0), -d(1992,3,28,20,0,0), -d(1992,9,26,19,0,0), -d(1993,3,27,23,0,0), -d(1993,9,25,23,0,0), -d(1994,3,26,23,0,0), -d(1994,9,24,23,0,0), -d(1995,3,25,23,0,0), -d(1995,9,23,23,0,0), -d(1996,12,31,20,0,0), -d(1997,3,29,22,0,0), -d(1997,10,25,22,0,0), -d(1998,3,28,22,0,0), -d(1998,10,24,22,0,0), -d(1999,3,27,22,0,0), -d(1999,10,30,22,0,0), -d(2000,3,25,22,0,0), -d(2000,10,28,22,0,0), -d(2001,3,24,22,0,0), -d(2001,10,27,22,0,0), -d(2002,3,30,22,0,0), -d(2002,10,26,22,0,0), -d(2003,3,29,22,0,0), -d(2003,10,25,22,0,0), -d(2004,3,27,22,0,0), -d(2004,10,30,22,0,0), -d(2005,3,26,22,0,0), -d(2005,10,29,22,0,0), -d(2006,3,25,22,0,0), -d(2006,10,28,22,0,0), -d(2007,3,24,22,0,0), -d(2007,10,27,22,0,0), -d(2008,3,29,22,0,0), -d(2008,10,25,22,0,0), -d(2009,3,28,22,0,0), -d(2009,10,24,22,0,0), -d(2010,3,27,22,0,0), -d(2010,10,30,22,0,0), -d(2011,3,26,22,0,0), -d(2011,10,29,22,0,0), -d(2012,3,24,22,0,0), -d(2012,10,27,22,0,0), -d(2013,3,30,22,0,0), -d(2013,10,26,22,0,0), -d(2014,3,29,22,0,0), -d(2014,10,25,22,0,0), -d(2015,3,28,22,0,0), -d(2015,10,24,22,0,0), -d(2016,3,26,22,0,0), -d(2016,10,29,22,0,0), -d(2017,3,25,22,0,0), -d(2017,10,28,22,0,0), -d(2018,3,24,22,0,0), -d(2018,10,27,22,0,0), -d(2019,3,30,22,0,0), -d(2019,10,26,22,0,0), -d(2020,3,28,22,0,0), -d(2020,10,24,22,0,0), -d(2021,3,27,22,0,0), -d(2021,10,30,22,0,0), -d(2022,3,26,22,0,0), -d(2022,10,29,22,0,0), -d(2023,3,25,22,0,0), -d(2023,10,28,22,0,0), -d(2024,3,30,22,0,0), -d(2024,10,26,22,0,0), -d(2025,3,29,22,0,0), -d(2025,10,25,22,0,0), -d(2026,3,28,22,0,0), -d(2026,10,24,22,0,0), -d(2027,3,27,22,0,0), -d(2027,10,30,22,0,0), -d(2028,3,25,22,0,0), -d(2028,10,28,22,0,0), -d(2029,3,24,22,0,0), -d(2029,10,27,22,0,0), -d(2030,3,30,22,0,0), -d(2030,10,26,22,0,0), -d(2031,3,29,22,0,0), -d(2031,10,25,22,0,0), -d(2032,3,27,22,0,0), -d(2032,10,30,22,0,0), -d(2033,3,26,22,0,0), -d(2033,10,29,22,0,0), -d(2034,3,25,22,0,0), -d(2034,10,28,22,0,0), -d(2035,3,24,22,0,0), -d(2035,10,27,22,0,0), -d(2036,3,29,22,0,0), -d(2036,10,25,22,0,0), -d(2037,3,28,22,0,0), -d(2037,10,24,22,0,0), - ] - - _transition_info = [ -i(10680,0,'LMT'), -i(10800,0,'YERT'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(18000,3600,'YERST'), -i(14400,0,'YERT'), -i(14400,0,'YERST'), -i(14400,0,'AMST'), -i(10800,0,'AMT'), -i(14400,3600,'AMST'), -i(10800,0,'AMT'), -i(14400,3600,'AMST'), -i(10800,0,'AMT'), -i(14400,3600,'AMST'), -i(10800,0,'AMT'), -i(14400,3600,'AMST'), -i(14400,0,'AMT'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), -i(18000,3600,'AMST'), -i(14400,0,'AMT'), - ] - -Yerevan = Yerevan() - diff --git a/modules/pytz/zoneinfo/Asia/__init__.py b/modules/pytz/zoneinfo/Asia/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Atlantic/Azores.py b/modules/pytz/zoneinfo/Atlantic/Azores.py deleted file mode 100644 index b2864aa0..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Azores.py +++ /dev/null @@ -1,460 +0,0 @@ -'''tzinfo timezone information for Atlantic/Azores.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Azores(DstTzInfo): - '''Atlantic/Azores timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Azores' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,24,1,54,32), -d(1916,6,18,1,0,0), -d(1916,11,1,2,0,0), -d(1917,3,1,1,0,0), -d(1917,10,15,1,0,0), -d(1918,3,2,1,0,0), -d(1918,10,15,1,0,0), -d(1919,3,1,1,0,0), -d(1919,10,15,1,0,0), -d(1920,3,1,1,0,0), -d(1920,10,15,1,0,0), -d(1921,3,1,1,0,0), -d(1921,10,15,1,0,0), -d(1924,4,17,1,0,0), -d(1924,10,15,1,0,0), -d(1926,4,18,1,0,0), -d(1926,10,3,1,0,0), -d(1927,4,10,1,0,0), -d(1927,10,2,1,0,0), -d(1928,4,15,1,0,0), -d(1928,10,7,1,0,0), -d(1929,4,21,1,0,0), -d(1929,10,6,1,0,0), -d(1931,4,19,1,0,0), -d(1931,10,4,1,0,0), -d(1932,4,3,1,0,0), -d(1932,10,2,1,0,0), -d(1934,4,8,1,0,0), -d(1934,10,7,1,0,0), -d(1935,3,31,1,0,0), -d(1935,10,6,1,0,0), -d(1936,4,19,1,0,0), -d(1936,10,4,1,0,0), -d(1937,4,4,1,0,0), -d(1937,10,3,1,0,0), -d(1938,3,27,1,0,0), -d(1938,10,2,1,0,0), -d(1939,4,16,1,0,0), -d(1939,11,19,1,0,0), -d(1940,2,25,1,0,0), -d(1940,10,6,1,0,0), -d(1941,4,6,1,0,0), -d(1941,10,6,1,0,0), -d(1942,3,15,1,0,0), -d(1942,4,26,0,0,0), -d(1942,8,16,0,0,0), -d(1942,10,25,1,0,0), -d(1943,3,14,1,0,0), -d(1943,4,18,0,0,0), -d(1943,8,29,0,0,0), -d(1943,10,31,1,0,0), -d(1944,3,12,1,0,0), -d(1944,4,23,0,0,0), -d(1944,8,27,0,0,0), -d(1944,10,29,1,0,0), -d(1945,3,11,1,0,0), -d(1945,4,22,0,0,0), -d(1945,8,26,0,0,0), -d(1945,10,28,1,0,0), -d(1946,4,7,1,0,0), -d(1946,10,6,1,0,0), -d(1947,4,6,4,0,0), -d(1947,10,5,4,0,0), -d(1948,4,4,4,0,0), -d(1948,10,3,4,0,0), -d(1949,4,3,4,0,0), -d(1949,10,2,4,0,0), -d(1951,4,1,4,0,0), -d(1951,10,7,4,0,0), -d(1952,4,6,4,0,0), -d(1952,10,5,4,0,0), -d(1953,4,5,4,0,0), -d(1953,10,4,4,0,0), -d(1954,4,4,4,0,0), -d(1954,10,3,4,0,0), -d(1955,4,3,4,0,0), -d(1955,10,2,4,0,0), -d(1956,4,1,4,0,0), -d(1956,10,7,4,0,0), -d(1957,4,7,4,0,0), -d(1957,10,6,4,0,0), -d(1958,4,6,4,0,0), -d(1958,10,5,4,0,0), -d(1959,4,5,4,0,0), -d(1959,10,4,4,0,0), -d(1960,4,3,4,0,0), -d(1960,10,2,4,0,0), -d(1961,4,2,4,0,0), -d(1961,10,1,4,0,0), -d(1962,4,1,4,0,0), -d(1962,10,7,4,0,0), -d(1963,4,7,4,0,0), -d(1963,10,6,4,0,0), -d(1964,4,5,4,0,0), -d(1964,10,4,4,0,0), -d(1965,4,4,4,0,0), -d(1965,10,3,4,0,0), -d(1966,4,3,4,0,0), -d(1977,3,27,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,2,0,0), -d(1980,3,30,1,0,0), -d(1980,9,28,2,0,0), -d(1981,3,29,2,0,0), -d(1981,9,27,2,0,0), -d(1982,3,28,2,0,0), -d(1982,9,26,2,0,0), -d(1983,3,27,3,0,0), -d(1983,9,25,2,0,0), -d(1984,3,25,2,0,0), -d(1984,9,30,2,0,0), -d(1985,3,31,2,0,0), -d(1985,9,29,2,0,0), -d(1986,3,30,2,0,0), -d(1986,9,28,2,0,0), -d(1987,3,29,2,0,0), -d(1987,9,27,2,0,0), -d(1988,3,27,2,0,0), -d(1988,9,25,2,0,0), -d(1989,3,26,2,0,0), -d(1989,9,24,2,0,0), -d(1990,3,25,2,0,0), -d(1990,9,30,2,0,0), -d(1991,3,31,2,0,0), -d(1991,9,29,2,0,0), -d(1992,3,29,2,0,0), -d(1992,9,27,2,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-6900,0,'HMT'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(0,7200,'AZOMT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(0,7200,'AZOMT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(0,7200,'AZOMT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(0,7200,'AZOMT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,3600,'AZOST'), -i(-7200,0,'AZOT'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(0,0,'WET'), -i(0,0,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), -i(0,3600,'AZOST'), -i(-3600,0,'AZOT'), - ] - -Azores = Azores() - diff --git a/modules/pytz/zoneinfo/Atlantic/Bermuda.py b/modules/pytz/zoneinfo/Atlantic/Bermuda.py deleted file mode 100644 index 9c4511f5..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Bermuda.py +++ /dev/null @@ -1,278 +0,0 @@ -'''tzinfo timezone information for Atlantic/Bermuda.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bermuda(DstTzInfo): - '''Atlantic/Bermuda timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Bermuda' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1930,1,1,6,19,4), -d(1974,4,28,6,0,0), -d(1974,10,27,5,0,0), -d(1975,4,27,6,0,0), -d(1975,10,26,5,0,0), -d(1976,4,25,6,0,0), -d(1976,10,31,5,0,0), -d(1977,4,24,6,0,0), -d(1977,10,30,5,0,0), -d(1978,4,30,6,0,0), -d(1978,10,29,5,0,0), -d(1979,4,29,6,0,0), -d(1979,10,28,5,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,6,0,0), -d(1987,10,25,5,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,5,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,5,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,5,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,5,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,5,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,5,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,5,0,0), -d(1998,4,5,6,0,0), -d(1998,10,25,5,0,0), -d(1999,4,4,6,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,6,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,6,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,6,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,6,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,6,0,0), -d(2004,10,31,5,0,0), -d(2005,4,3,6,0,0), -d(2005,10,30,5,0,0), -d(2006,4,2,6,0,0), -d(2006,10,29,5,0,0), -d(2007,4,1,6,0,0), -d(2007,10,28,5,0,0), -d(2008,4,6,6,0,0), -d(2008,10,26,5,0,0), -d(2009,4,5,6,0,0), -d(2009,10,25,5,0,0), -d(2010,4,4,6,0,0), -d(2010,10,31,5,0,0), -d(2011,4,3,6,0,0), -d(2011,10,30,5,0,0), -d(2012,4,1,6,0,0), -d(2012,10,28,5,0,0), -d(2013,4,7,6,0,0), -d(2013,10,27,5,0,0), -d(2014,4,6,6,0,0), -d(2014,10,26,5,0,0), -d(2015,4,5,6,0,0), -d(2015,10,25,5,0,0), -d(2016,4,3,6,0,0), -d(2016,10,30,5,0,0), -d(2017,4,2,6,0,0), -d(2017,10,29,5,0,0), -d(2018,4,1,6,0,0), -d(2018,10,28,5,0,0), -d(2019,4,7,6,0,0), -d(2019,10,27,5,0,0), -d(2020,4,5,6,0,0), -d(2020,10,25,5,0,0), -d(2021,4,4,6,0,0), -d(2021,10,31,5,0,0), -d(2022,4,3,6,0,0), -d(2022,10,30,5,0,0), -d(2023,4,2,6,0,0), -d(2023,10,29,5,0,0), -d(2024,4,7,6,0,0), -d(2024,10,27,5,0,0), -d(2025,4,6,6,0,0), -d(2025,10,26,5,0,0), -d(2026,4,5,6,0,0), -d(2026,10,25,5,0,0), -d(2027,4,4,6,0,0), -d(2027,10,31,5,0,0), -d(2028,4,2,6,0,0), -d(2028,10,29,5,0,0), -d(2029,4,1,6,0,0), -d(2029,10,28,5,0,0), -d(2030,4,7,6,0,0), -d(2030,10,27,5,0,0), -d(2031,4,6,6,0,0), -d(2031,10,26,5,0,0), -d(2032,4,4,6,0,0), -d(2032,10,31,5,0,0), -d(2033,4,3,6,0,0), -d(2033,10,30,5,0,0), -d(2034,4,2,6,0,0), -d(2034,10,29,5,0,0), -d(2035,4,1,6,0,0), -d(2035,10,28,5,0,0), -d(2036,4,6,6,0,0), -d(2036,10,26,5,0,0), -d(2037,4,5,6,0,0), -d(2037,10,25,5,0,0), - ] - - _transition_info = [ -i(-15540,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Bermuda = Bermuda() - diff --git a/modules/pytz/zoneinfo/Atlantic/Canary.py b/modules/pytz/zoneinfo/Atlantic/Canary.py deleted file mode 100644 index e605028e..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Canary.py +++ /dev/null @@ -1,256 +0,0 @@ -'''tzinfo timezone information for Atlantic/Canary.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Canary(DstTzInfo): - '''Atlantic/Canary timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Canary' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,3,1,1,1,36), -d(1946,9,30,2,0,0), -d(1980,4,6,0,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-3720,0,'LMT'), -i(-3600,0,'CANT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -Canary = Canary() - diff --git a/modules/pytz/zoneinfo/Atlantic/Cape_Verde.py b/modules/pytz/zoneinfo/Atlantic/Cape_Verde.py deleted file mode 100644 index 8cb51e71..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Cape_Verde.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Atlantic/Cape_Verde.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cape_Verde(DstTzInfo): - '''Atlantic/Cape_Verde timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Cape_Verde' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1907,1,1,1,34,4), -d(1942,9,1,2,0,0), -d(1945,10,15,1,0,0), -d(1975,11,25,4,0,0), - ] - - _transition_info = [ -i(-5640,0,'LMT'), -i(-7200,0,'CVT'), -i(-3600,3600,'CVST'), -i(-7200,0,'CVT'), -i(-3600,0,'CVT'), - ] - -Cape_Verde = Cape_Verde() - diff --git a/modules/pytz/zoneinfo/Atlantic/Faeroe.py b/modules/pytz/zoneinfo/Atlantic/Faeroe.py deleted file mode 100644 index 4eb16fa3..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Faeroe.py +++ /dev/null @@ -1,250 +0,0 @@ -'''tzinfo timezone information for Atlantic/Faeroe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Faeroe(DstTzInfo): - '''Atlantic/Faeroe timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Faeroe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,1,11,0,27,4), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-1620,0,'LMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -Faeroe = Faeroe() - diff --git a/modules/pytz/zoneinfo/Atlantic/Jan_Mayen.py b/modules/pytz/zoneinfo/Atlantic/Jan_Mayen.py deleted file mode 100644 index 6ba69901..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Jan_Mayen.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Atlantic/Jan_Mayen.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jan_Mayen(DstTzInfo): - '''Atlantic/Jan_Mayen timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Jan_Mayen' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,22,0,0,0), -d(1916,9,29,22,0,0), -d(1940,8,10,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,10,1,1,0,0), -d(1959,3,15,1,0,0), -d(1959,9,20,1,0,0), -d(1960,3,20,1,0,0), -d(1960,9,18,1,0,0), -d(1961,3,19,1,0,0), -d(1961,9,17,1,0,0), -d(1962,3,18,1,0,0), -d(1962,9,16,1,0,0), -d(1963,3,17,1,0,0), -d(1963,9,15,1,0,0), -d(1964,3,15,1,0,0), -d(1964,9,20,1,0,0), -d(1965,4,25,1,0,0), -d(1965,9,19,1,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Jan_Mayen = Jan_Mayen() - diff --git a/modules/pytz/zoneinfo/Atlantic/Madeira.py b/modules/pytz/zoneinfo/Atlantic/Madeira.py deleted file mode 100644 index ace6fc01..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Madeira.py +++ /dev/null @@ -1,460 +0,0 @@ -'''tzinfo timezone information for Atlantic/Madeira.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Madeira(DstTzInfo): - '''Atlantic/Madeira timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Madeira' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,24,1,7,36), -d(1916,6,18,0,0,0), -d(1916,11,1,1,0,0), -d(1917,3,1,0,0,0), -d(1917,10,15,0,0,0), -d(1918,3,2,0,0,0), -d(1918,10,15,0,0,0), -d(1919,3,1,0,0,0), -d(1919,10,15,0,0,0), -d(1920,3,1,0,0,0), -d(1920,10,15,0,0,0), -d(1921,3,1,0,0,0), -d(1921,10,15,0,0,0), -d(1924,4,17,0,0,0), -d(1924,10,15,0,0,0), -d(1926,4,18,0,0,0), -d(1926,10,3,0,0,0), -d(1927,4,10,0,0,0), -d(1927,10,2,0,0,0), -d(1928,4,15,0,0,0), -d(1928,10,7,0,0,0), -d(1929,4,21,0,0,0), -d(1929,10,6,0,0,0), -d(1931,4,19,0,0,0), -d(1931,10,4,0,0,0), -d(1932,4,3,0,0,0), -d(1932,10,2,0,0,0), -d(1934,4,8,0,0,0), -d(1934,10,7,0,0,0), -d(1935,3,31,0,0,0), -d(1935,10,6,0,0,0), -d(1936,4,19,0,0,0), -d(1936,10,4,0,0,0), -d(1937,4,4,0,0,0), -d(1937,10,3,0,0,0), -d(1938,3,27,0,0,0), -d(1938,10,2,0,0,0), -d(1939,4,16,0,0,0), -d(1939,11,19,0,0,0), -d(1940,2,25,0,0,0), -d(1940,10,6,0,0,0), -d(1941,4,6,0,0,0), -d(1941,10,6,0,0,0), -d(1942,3,15,0,0,0), -d(1942,4,25,23,0,0), -d(1942,8,15,23,0,0), -d(1942,10,25,0,0,0), -d(1943,3,14,0,0,0), -d(1943,4,17,23,0,0), -d(1943,8,28,23,0,0), -d(1943,10,31,0,0,0), -d(1944,3,12,0,0,0), -d(1944,4,22,23,0,0), -d(1944,8,26,23,0,0), -d(1944,10,29,0,0,0), -d(1945,3,11,0,0,0), -d(1945,4,21,23,0,0), -d(1945,8,25,23,0,0), -d(1945,10,28,0,0,0), -d(1946,4,7,0,0,0), -d(1946,10,6,0,0,0), -d(1947,4,6,3,0,0), -d(1947,10,5,3,0,0), -d(1948,4,4,3,0,0), -d(1948,10,3,3,0,0), -d(1949,4,3,3,0,0), -d(1949,10,2,3,0,0), -d(1951,4,1,3,0,0), -d(1951,10,7,3,0,0), -d(1952,4,6,3,0,0), -d(1952,10,5,3,0,0), -d(1953,4,5,3,0,0), -d(1953,10,4,3,0,0), -d(1954,4,4,3,0,0), -d(1954,10,3,3,0,0), -d(1955,4,3,3,0,0), -d(1955,10,2,3,0,0), -d(1956,4,1,3,0,0), -d(1956,10,7,3,0,0), -d(1957,4,7,3,0,0), -d(1957,10,6,3,0,0), -d(1958,4,6,3,0,0), -d(1958,10,5,3,0,0), -d(1959,4,5,3,0,0), -d(1959,10,4,3,0,0), -d(1960,4,3,3,0,0), -d(1960,10,2,3,0,0), -d(1961,4,2,3,0,0), -d(1961,10,1,3,0,0), -d(1962,4,1,3,0,0), -d(1962,10,7,3,0,0), -d(1963,4,7,3,0,0), -d(1963,10,6,3,0,0), -d(1964,4,5,3,0,0), -d(1964,10,4,3,0,0), -d(1965,4,4,3,0,0), -d(1965,10,3,3,0,0), -d(1966,4,3,3,0,0), -d(1977,3,27,0,0,0), -d(1977,9,25,0,0,0), -d(1978,4,2,0,0,0), -d(1978,10,1,0,0,0), -d(1979,4,1,0,0,0), -d(1979,9,30,1,0,0), -d(1980,3,30,0,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,2,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-4080,0,'FMT'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(3600,7200,'MADMT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(3600,7200,'MADMT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(3600,7200,'MADMT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(3600,7200,'MADMT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,3600,'MADST'), -i(-3600,0,'MADT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -Madeira = Madeira() - diff --git a/modules/pytz/zoneinfo/Atlantic/Reykjavik.py b/modules/pytz/zoneinfo/Atlantic/Reykjavik.py deleted file mode 100644 index 0d9922b4..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Reykjavik.py +++ /dev/null @@ -1,148 +0,0 @@ -'''tzinfo timezone information for Atlantic/Reykjavik.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Reykjavik(DstTzInfo): - '''Atlantic/Reykjavik timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Reykjavik' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,1,1,1,27,48), -d(1917,2,20,0,0,0), -d(1917,10,21,1,0,0), -d(1918,2,20,0,0,0), -d(1918,11,16,1,0,0), -d(1939,4,30,0,0,0), -d(1939,11,29,2,0,0), -d(1940,2,25,3,0,0), -d(1940,11,3,2,0,0), -d(1941,3,2,2,0,0), -d(1941,11,2,2,0,0), -d(1942,3,8,2,0,0), -d(1942,10,25,2,0,0), -d(1943,3,7,2,0,0), -d(1943,10,24,2,0,0), -d(1944,3,5,2,0,0), -d(1944,10,22,2,0,0), -d(1945,3,4,2,0,0), -d(1945,10,28,2,0,0), -d(1946,3,3,2,0,0), -d(1946,10,27,2,0,0), -d(1947,4,6,2,0,0), -d(1947,10,26,2,0,0), -d(1948,4,4,2,0,0), -d(1948,10,24,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,2,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,1,2,0,0), -d(1951,10,28,2,0,0), -d(1952,4,6,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,5,2,0,0), -d(1953,10,25,2,0,0), -d(1954,4,4,2,0,0), -d(1954,10,24,2,0,0), -d(1955,4,3,2,0,0), -d(1955,10,23,2,0,0), -d(1956,4,1,2,0,0), -d(1956,10,28,2,0,0), -d(1957,4,7,2,0,0), -d(1957,10,27,2,0,0), -d(1958,4,6,2,0,0), -d(1958,10,26,2,0,0), -d(1959,4,5,2,0,0), -d(1959,10,25,2,0,0), -d(1960,4,3,2,0,0), -d(1960,10,23,2,0,0), -d(1961,4,2,2,0,0), -d(1961,10,22,2,0,0), -d(1962,4,1,2,0,0), -d(1962,10,28,2,0,0), -d(1963,4,7,2,0,0), -d(1963,10,27,2,0,0), -d(1964,4,5,2,0,0), -d(1964,10,25,2,0,0), -d(1965,4,4,2,0,0), -d(1965,10,24,2,0,0), -d(1966,4,3,2,0,0), -d(1966,10,23,2,0,0), -d(1967,4,2,2,0,0), -d(1967,10,29,2,0,0), -d(1968,4,7,2,0,0), - ] - - _transition_info = [ -i(-5280,0,'RMT'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,0,'GMT'), - ] - -Reykjavik = Reykjavik() - diff --git a/modules/pytz/zoneinfo/Atlantic/South_Georgia.py b/modules/pytz/zoneinfo/Atlantic/South_Georgia.py deleted file mode 100644 index 73e393cb..00000000 --- a/modules/pytz/zoneinfo/Atlantic/South_Georgia.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Atlantic/South_Georgia.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class South_Georgia(StaticTzInfo): - '''Atlantic/South_Georgia timezone definition. See datetime.tzinfo for details''' - zone = 'Atlantic/South_Georgia' - _utcoffset = timedelta(seconds=-7200) - _tzname = 'GST' - -South_Georgia = South_Georgia() - diff --git a/modules/pytz/zoneinfo/Atlantic/St_Helena.py b/modules/pytz/zoneinfo/Atlantic/St_Helena.py deleted file mode 100644 index 3d372836..00000000 --- a/modules/pytz/zoneinfo/Atlantic/St_Helena.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Atlantic/St_Helena.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class St_Helena(DstTzInfo): - '''Atlantic/St_Helena timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/St_Helena' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1951,1,1,0,22,48), - ] - - _transition_info = [ -i(-1380,0,'JMT'), -i(0,0,'GMT'), - ] - -St_Helena = St_Helena() - diff --git a/modules/pytz/zoneinfo/Atlantic/Stanley.py b/modules/pytz/zoneinfo/Atlantic/Stanley.py deleted file mode 100644 index 3e1ccfcd..00000000 --- a/modules/pytz/zoneinfo/Atlantic/Stanley.py +++ /dev/null @@ -1,266 +0,0 @@ -'''tzinfo timezone information for Atlantic/Stanley.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Stanley(DstTzInfo): - '''Atlantic/Stanley timezone definition. See datetime.tzinfo for details''' - - zone = 'Atlantic/Stanley' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,3,12,3,51,24), -d(1937,9,26,4,0,0), -d(1938,3,20,3,0,0), -d(1938,9,25,4,0,0), -d(1939,3,19,3,0,0), -d(1939,10,1,4,0,0), -d(1940,3,24,3,0,0), -d(1940,9,29,4,0,0), -d(1941,3,23,3,0,0), -d(1941,9,28,4,0,0), -d(1942,3,22,3,0,0), -d(1942,9,27,4,0,0), -d(1943,1,1,3,0,0), -d(1983,5,1,4,0,0), -d(1983,9,25,3,0,0), -d(1984,4,29,2,0,0), -d(1984,9,16,3,0,0), -d(1985,4,28,2,0,0), -d(1985,9,15,3,0,0), -d(1986,4,20,3,0,0), -d(1986,9,14,4,0,0), -d(1987,4,19,3,0,0), -d(1987,9,13,4,0,0), -d(1988,4,17,3,0,0), -d(1988,9,11,4,0,0), -d(1989,4,16,3,0,0), -d(1989,9,10,4,0,0), -d(1990,4,22,3,0,0), -d(1990,9,9,4,0,0), -d(1991,4,21,3,0,0), -d(1991,9,15,4,0,0), -d(1992,4,19,3,0,0), -d(1992,9,13,4,0,0), -d(1993,4,18,3,0,0), -d(1993,9,12,4,0,0), -d(1994,4,17,3,0,0), -d(1994,9,11,4,0,0), -d(1995,4,16,3,0,0), -d(1995,9,10,4,0,0), -d(1996,4,21,3,0,0), -d(1996,9,15,4,0,0), -d(1997,4,20,3,0,0), -d(1997,9,14,4,0,0), -d(1998,4,19,3,0,0), -d(1998,9,13,4,0,0), -d(1999,4,18,3,0,0), -d(1999,9,12,4,0,0), -d(2000,4,16,3,0,0), -d(2000,9,10,4,0,0), -d(2001,4,15,5,0,0), -d(2001,9,2,6,0,0), -d(2002,4,21,5,0,0), -d(2002,9,1,6,0,0), -d(2003,4,20,5,0,0), -d(2003,9,7,6,0,0), -d(2004,4,18,5,0,0), -d(2004,9,5,6,0,0), -d(2005,4,17,5,0,0), -d(2005,9,4,6,0,0), -d(2006,4,16,5,0,0), -d(2006,9,3,6,0,0), -d(2007,4,15,5,0,0), -d(2007,9,2,6,0,0), -d(2008,4,20,5,0,0), -d(2008,9,7,6,0,0), -d(2009,4,19,5,0,0), -d(2009,9,6,6,0,0), -d(2010,4,18,5,0,0), -d(2010,9,5,6,0,0), -d(2011,4,17,5,0,0), -d(2011,9,4,6,0,0), -d(2012,4,15,5,0,0), -d(2012,9,2,6,0,0), -d(2013,4,21,5,0,0), -d(2013,9,1,6,0,0), -d(2014,4,20,5,0,0), -d(2014,9,7,6,0,0), -d(2015,4,19,5,0,0), -d(2015,9,6,6,0,0), -d(2016,4,17,5,0,0), -d(2016,9,4,6,0,0), -d(2017,4,16,5,0,0), -d(2017,9,3,6,0,0), -d(2018,4,15,5,0,0), -d(2018,9,2,6,0,0), -d(2019,4,21,5,0,0), -d(2019,9,1,6,0,0), -d(2020,4,19,5,0,0), -d(2020,9,6,6,0,0), -d(2021,4,18,5,0,0), -d(2021,9,5,6,0,0), -d(2022,4,17,5,0,0), -d(2022,9,4,6,0,0), -d(2023,4,16,5,0,0), -d(2023,9,3,6,0,0), -d(2024,4,21,5,0,0), -d(2024,9,1,6,0,0), -d(2025,4,20,5,0,0), -d(2025,9,7,6,0,0), -d(2026,4,19,5,0,0), -d(2026,9,6,6,0,0), -d(2027,4,18,5,0,0), -d(2027,9,5,6,0,0), -d(2028,4,16,5,0,0), -d(2028,9,3,6,0,0), -d(2029,4,15,5,0,0), -d(2029,9,2,6,0,0), -d(2030,4,21,5,0,0), -d(2030,9,1,6,0,0), -d(2031,4,20,5,0,0), -d(2031,9,7,6,0,0), -d(2032,4,18,5,0,0), -d(2032,9,5,6,0,0), -d(2033,4,17,5,0,0), -d(2033,9,4,6,0,0), -d(2034,4,16,5,0,0), -d(2034,9,3,6,0,0), -d(2035,4,15,5,0,0), -d(2035,9,2,6,0,0), -d(2036,4,20,5,0,0), -d(2036,9,7,6,0,0), -d(2037,4,19,5,0,0), -d(2037,9,6,6,0,0), - ] - - _transition_info = [ -i(-13860,0,'SMT'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,0,'FKT'), -i(-7200,3600,'FKST'), -i(-10800,0,'FKT'), -i(-7200,3600,'FKST'), -i(-10800,0,'FKT'), -i(-10800,0,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), -i(-14400,0,'FKT'), -i(-10800,3600,'FKST'), - ] - -Stanley = Stanley() - diff --git a/modules/pytz/zoneinfo/Atlantic/__init__.py b/modules/pytz/zoneinfo/Atlantic/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Australia/ACT.py b/modules/pytz/zoneinfo/Australia/ACT.py deleted file mode 100644 index 26b80526..00000000 --- a/modules/pytz/zoneinfo/Australia/ACT.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/ACT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class ACT(DstTzInfo): - '''Australia/ACT timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/ACT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,4,3,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,4,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -ACT = ACT() - diff --git a/modules/pytz/zoneinfo/Australia/Adelaide.py b/modules/pytz/zoneinfo/Australia/Adelaide.py deleted file mode 100644 index 3b4056f5..00000000 --- a/modules/pytz/zoneinfo/Australia/Adelaide.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Adelaide.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Adelaide(DstTzInfo): - '''Australia/Adelaide timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Adelaide' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), -d(1971,10,30,16,30,0), -d(1972,2,26,16,30,0), -d(1972,10,28,16,30,0), -d(1973,3,3,16,30,0), -d(1973,10,27,16,30,0), -d(1974,3,2,16,30,0), -d(1974,10,26,16,30,0), -d(1975,3,1,16,30,0), -d(1975,10,25,16,30,0), -d(1976,3,6,16,30,0), -d(1976,10,30,16,30,0), -d(1977,3,5,16,30,0), -d(1977,10,29,16,30,0), -d(1978,3,4,16,30,0), -d(1978,10,28,16,30,0), -d(1979,3,3,16,30,0), -d(1979,10,27,16,30,0), -d(1980,3,1,16,30,0), -d(1980,10,25,16,30,0), -d(1981,2,28,16,30,0), -d(1981,10,24,16,30,0), -d(1982,3,6,16,30,0), -d(1982,10,30,16,30,0), -d(1983,3,5,16,30,0), -d(1983,10,29,16,30,0), -d(1984,3,3,16,30,0), -d(1984,10,27,16,30,0), -d(1985,3,2,16,30,0), -d(1985,10,26,16,30,0), -d(1986,3,15,16,30,0), -d(1986,10,18,16,30,0), -d(1987,3,14,16,30,0), -d(1987,10,24,16,30,0), -d(1988,3,19,16,30,0), -d(1988,10,29,16,30,0), -d(1989,3,18,16,30,0), -d(1989,10,28,16,30,0), -d(1990,3,17,16,30,0), -d(1990,10,27,16,30,0), -d(1991,3,2,16,30,0), -d(1991,10,26,16,30,0), -d(1992,3,21,16,30,0), -d(1992,10,24,16,30,0), -d(1993,3,6,16,30,0), -d(1993,10,30,16,30,0), -d(1994,3,19,16,30,0), -d(1994,10,29,16,30,0), -d(1995,3,25,16,30,0), -d(1995,10,28,16,30,0), -d(1996,3,30,16,30,0), -d(1996,10,26,16,30,0), -d(1997,3,29,16,30,0), -d(1997,10,25,16,30,0), -d(1998,3,28,16,30,0), -d(1998,10,24,16,30,0), -d(1999,3,27,16,30,0), -d(1999,10,30,16,30,0), -d(2000,3,25,16,30,0), -d(2000,10,28,16,30,0), -d(2001,3,24,16,30,0), -d(2001,10,27,16,30,0), -d(2002,3,30,16,30,0), -d(2002,10,26,16,30,0), -d(2003,3,29,16,30,0), -d(2003,10,25,16,30,0), -d(2004,3,27,16,30,0), -d(2004,10,30,16,30,0), -d(2005,3,26,16,30,0), -d(2005,10,29,16,30,0), -d(2006,4,1,16,30,0), -d(2006,10,28,16,30,0), -d(2007,3,24,16,30,0), -d(2007,10,27,16,30,0), -d(2008,3,29,16,30,0), -d(2008,10,25,16,30,0), -d(2009,3,28,16,30,0), -d(2009,10,24,16,30,0), -d(2010,3,27,16,30,0), -d(2010,10,30,16,30,0), -d(2011,3,26,16,30,0), -d(2011,10,29,16,30,0), -d(2012,3,24,16,30,0), -d(2012,10,27,16,30,0), -d(2013,3,30,16,30,0), -d(2013,10,26,16,30,0), -d(2014,3,29,16,30,0), -d(2014,10,25,16,30,0), -d(2015,3,28,16,30,0), -d(2015,10,24,16,30,0), -d(2016,3,26,16,30,0), -d(2016,10,29,16,30,0), -d(2017,3,25,16,30,0), -d(2017,10,28,16,30,0), -d(2018,3,24,16,30,0), -d(2018,10,27,16,30,0), -d(2019,3,30,16,30,0), -d(2019,10,26,16,30,0), -d(2020,3,28,16,30,0), -d(2020,10,24,16,30,0), -d(2021,3,27,16,30,0), -d(2021,10,30,16,30,0), -d(2022,3,26,16,30,0), -d(2022,10,29,16,30,0), -d(2023,3,25,16,30,0), -d(2023,10,28,16,30,0), -d(2024,3,30,16,30,0), -d(2024,10,26,16,30,0), -d(2025,3,29,16,30,0), -d(2025,10,25,16,30,0), -d(2026,3,28,16,30,0), -d(2026,10,24,16,30,0), -d(2027,3,27,16,30,0), -d(2027,10,30,16,30,0), -d(2028,3,25,16,30,0), -d(2028,10,28,16,30,0), -d(2029,3,24,16,30,0), -d(2029,10,27,16,30,0), -d(2030,3,30,16,30,0), -d(2030,10,26,16,30,0), -d(2031,3,29,16,30,0), -d(2031,10,25,16,30,0), -d(2032,3,27,16,30,0), -d(2032,10,30,16,30,0), -d(2033,3,26,16,30,0), -d(2033,10,29,16,30,0), -d(2034,3,25,16,30,0), -d(2034,10,28,16,30,0), -d(2035,3,24,16,30,0), -d(2035,10,27,16,30,0), -d(2036,3,29,16,30,0), -d(2036,10,25,16,30,0), -d(2037,3,28,16,30,0), -d(2037,10,24,16,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), - ] - -Adelaide = Adelaide() - diff --git a/modules/pytz/zoneinfo/Australia/Brisbane.py b/modules/pytz/zoneinfo/Australia/Brisbane.py deleted file mode 100644 index 31303d9b..00000000 --- a/modules/pytz/zoneinfo/Australia/Brisbane.py +++ /dev/null @@ -1,52 +0,0 @@ -'''tzinfo timezone information for Australia/Brisbane.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Brisbane(DstTzInfo): - '''Australia/Brisbane timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Brisbane' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), - ] - -Brisbane = Brisbane() - diff --git a/modules/pytz/zoneinfo/Australia/Broken_Hill.py b/modules/pytz/zoneinfo/Australia/Broken_Hill.py deleted file mode 100644 index dfd7164f..00000000 --- a/modules/pytz/zoneinfo/Australia/Broken_Hill.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for Australia/Broken_Hill.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Broken_Hill(DstTzInfo): - '''Australia/Broken_Hill timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Broken_Hill' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), -d(1971,10,30,16,30,0), -d(1972,2,26,16,30,0), -d(1972,10,28,16,30,0), -d(1973,3,3,16,30,0), -d(1973,10,27,16,30,0), -d(1974,3,2,16,30,0), -d(1974,10,26,16,30,0), -d(1975,3,1,16,30,0), -d(1975,10,25,16,30,0), -d(1976,3,6,16,30,0), -d(1976,10,30,16,30,0), -d(1977,3,5,16,30,0), -d(1977,10,29,16,30,0), -d(1978,3,4,16,30,0), -d(1978,10,28,16,30,0), -d(1979,3,3,16,30,0), -d(1979,10,27,16,30,0), -d(1980,3,1,16,30,0), -d(1980,10,25,16,30,0), -d(1981,2,28,16,30,0), -d(1981,10,24,16,30,0), -d(1982,4,3,16,30,0), -d(1982,10,30,16,30,0), -d(1983,3,5,16,30,0), -d(1983,10,29,16,30,0), -d(1984,3,3,16,30,0), -d(1984,10,27,16,30,0), -d(1985,3,2,16,30,0), -d(1985,10,26,16,30,0), -d(1986,3,15,16,30,0), -d(1986,10,18,16,30,0), -d(1987,3,14,16,30,0), -d(1987,10,24,16,30,0), -d(1988,3,19,16,30,0), -d(1988,10,29,16,30,0), -d(1989,3,18,16,30,0), -d(1989,10,28,16,30,0), -d(1990,3,3,16,30,0), -d(1990,10,27,16,30,0), -d(1991,3,2,16,30,0), -d(1991,10,26,16,30,0), -d(1992,2,29,16,30,0), -d(1992,10,24,16,30,0), -d(1993,3,6,16,30,0), -d(1993,10,30,16,30,0), -d(1994,3,5,16,30,0), -d(1994,10,29,16,30,0), -d(1995,3,4,16,30,0), -d(1995,10,28,16,30,0), -d(1996,3,30,16,30,0), -d(1996,10,26,16,30,0), -d(1997,3,29,16,30,0), -d(1997,10,25,16,30,0), -d(1998,3,28,16,30,0), -d(1998,10,24,16,30,0), -d(1999,3,27,16,30,0), -d(1999,10,30,16,30,0), -d(1999,12,31,13,30,0), -d(2000,3,25,16,30,0), -d(2000,10,28,16,30,0), -d(2001,3,24,16,30,0), -d(2001,10,27,16,30,0), -d(2002,3,30,16,30,0), -d(2002,10,26,16,30,0), -d(2003,3,29,16,30,0), -d(2003,10,25,16,30,0), -d(2004,3,27,16,30,0), -d(2004,10,30,16,30,0), -d(2005,3,26,16,30,0), -d(2005,10,29,16,30,0), -d(2006,4,1,16,30,0), -d(2006,10,28,16,30,0), -d(2007,3,24,16,30,0), -d(2007,10,27,16,30,0), -d(2008,3,29,16,30,0), -d(2008,10,25,16,30,0), -d(2009,3,28,16,30,0), -d(2009,10,24,16,30,0), -d(2010,3,27,16,30,0), -d(2010,10,30,16,30,0), -d(2011,3,26,16,30,0), -d(2011,10,29,16,30,0), -d(2012,3,24,16,30,0), -d(2012,10,27,16,30,0), -d(2013,3,30,16,30,0), -d(2013,10,26,16,30,0), -d(2014,3,29,16,30,0), -d(2014,10,25,16,30,0), -d(2015,3,28,16,30,0), -d(2015,10,24,16,30,0), -d(2016,3,26,16,30,0), -d(2016,10,29,16,30,0), -d(2017,3,25,16,30,0), -d(2017,10,28,16,30,0), -d(2018,3,24,16,30,0), -d(2018,10,27,16,30,0), -d(2019,3,30,16,30,0), -d(2019,10,26,16,30,0), -d(2020,3,28,16,30,0), -d(2020,10,24,16,30,0), -d(2021,3,27,16,30,0), -d(2021,10,30,16,30,0), -d(2022,3,26,16,30,0), -d(2022,10,29,16,30,0), -d(2023,3,25,16,30,0), -d(2023,10,28,16,30,0), -d(2024,3,30,16,30,0), -d(2024,10,26,16,30,0), -d(2025,3,29,16,30,0), -d(2025,10,25,16,30,0), -d(2026,3,28,16,30,0), -d(2026,10,24,16,30,0), -d(2027,3,27,16,30,0), -d(2027,10,30,16,30,0), -d(2028,3,25,16,30,0), -d(2028,10,28,16,30,0), -d(2029,3,24,16,30,0), -d(2029,10,27,16,30,0), -d(2030,3,30,16,30,0), -d(2030,10,26,16,30,0), -d(2031,3,29,16,30,0), -d(2031,10,25,16,30,0), -d(2032,3,27,16,30,0), -d(2032,10,30,16,30,0), -d(2033,3,26,16,30,0), -d(2033,10,29,16,30,0), -d(2034,3,25,16,30,0), -d(2034,10,28,16,30,0), -d(2035,3,24,16,30,0), -d(2035,10,27,16,30,0), -d(2036,3,29,16,30,0), -d(2036,10,25,16,30,0), -d(2037,3,28,16,30,0), -d(2037,10,24,16,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), - ] - -Broken_Hill = Broken_Hill() - diff --git a/modules/pytz/zoneinfo/Australia/Canberra.py b/modules/pytz/zoneinfo/Australia/Canberra.py deleted file mode 100644 index 492137fa..00000000 --- a/modules/pytz/zoneinfo/Australia/Canberra.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Canberra.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Canberra(DstTzInfo): - '''Australia/Canberra timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Canberra' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,4,3,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,4,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Canberra = Canberra() - diff --git a/modules/pytz/zoneinfo/Australia/Currie.py b/modules/pytz/zoneinfo/Australia/Currie.py deleted file mode 100644 index 604b2f75..00000000 --- a/modules/pytz/zoneinfo/Australia/Currie.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Currie.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Currie(DstTzInfo): - '''Australia/Currie timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Currie' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,9,30,16,0,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,3,27,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,26,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,1,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,17,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,30,16,0,0), -d(1991,10,5,16,0,0), -d(1992,3,28,16,0,0), -d(1992,10,3,16,0,0), -d(1993,3,27,16,0,0), -d(1993,10,2,16,0,0), -d(1994,3,26,16,0,0), -d(1994,10,1,16,0,0), -d(1995,3,25,16,0,0), -d(1995,9,30,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,5,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,4,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,3,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,2,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,6,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,5,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,4,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,2,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,1,16,0,0), -d(2006,4,1,16,0,0), -d(2006,9,30,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,6,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,4,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,3,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,2,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,1,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,6,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,5,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,4,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,3,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,1,16,0,0), -d(2017,3,25,16,0,0), -d(2017,9,30,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,6,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,5,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,3,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,2,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,1,16,0,0), -d(2023,3,25,16,0,0), -d(2023,9,30,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,5,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,4,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,3,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,2,16,0,0), -d(2028,3,25,16,0,0), -d(2028,9,30,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,6,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,5,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,4,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,2,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,1,16,0,0), -d(2034,3,25,16,0,0), -d(2034,9,30,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,6,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,4,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,3,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Currie = Currie() - diff --git a/modules/pytz/zoneinfo/Australia/Darwin.py b/modules/pytz/zoneinfo/Australia/Darwin.py deleted file mode 100644 index d5113c80..00000000 --- a/modules/pytz/zoneinfo/Australia/Darwin.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Australia/Darwin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Darwin(DstTzInfo): - '''Australia/Darwin timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Darwin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), - ] - -Darwin = Darwin() - diff --git a/modules/pytz/zoneinfo/Australia/Hobart.py b/modules/pytz/zoneinfo/Australia/Hobart.py deleted file mode 100644 index 63637312..00000000 --- a/modules/pytz/zoneinfo/Australia/Hobart.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for Australia/Hobart.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hobart(DstTzInfo): - '''Australia/Hobart timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Hobart' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,9,30,16,0,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1967,9,30,16,0,0), -d(1968,3,30,16,0,0), -d(1968,10,26,16,0,0), -d(1969,3,8,16,0,0), -d(1969,10,25,16,0,0), -d(1970,3,7,16,0,0), -d(1970,10,24,16,0,0), -d(1971,3,13,16,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,3,27,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,26,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,1,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,17,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,30,16,0,0), -d(1991,10,5,16,0,0), -d(1992,3,28,16,0,0), -d(1992,10,3,16,0,0), -d(1993,3,27,16,0,0), -d(1993,10,2,16,0,0), -d(1994,3,26,16,0,0), -d(1994,10,1,16,0,0), -d(1995,3,25,16,0,0), -d(1995,9,30,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,5,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,4,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,3,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,2,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,6,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,5,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,4,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,2,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,1,16,0,0), -d(2006,4,1,16,0,0), -d(2006,9,30,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,6,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,4,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,3,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,2,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,1,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,6,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,5,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,4,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,3,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,1,16,0,0), -d(2017,3,25,16,0,0), -d(2017,9,30,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,6,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,5,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,3,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,2,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,1,16,0,0), -d(2023,3,25,16,0,0), -d(2023,9,30,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,5,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,4,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,3,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,2,16,0,0), -d(2028,3,25,16,0,0), -d(2028,9,30,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,6,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,5,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,4,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,2,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,1,16,0,0), -d(2034,3,25,16,0,0), -d(2034,9,30,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,6,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,4,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,3,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Hobart = Hobart() - diff --git a/modules/pytz/zoneinfo/Australia/LHI.py b/modules/pytz/zoneinfo/Australia/LHI.py deleted file mode 100644 index 9eabe245..00000000 --- a/modules/pytz/zoneinfo/Australia/LHI.py +++ /dev/null @@ -1,248 +0,0 @@ -'''tzinfo timezone information for Australia/LHI.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class LHI(DstTzInfo): - '''Australia/LHI timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/LHI' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,15,30,0), -d(1982,3,6,14,30,0), -d(1982,10,30,15,30,0), -d(1983,3,5,14,30,0), -d(1983,10,29,15,30,0), -d(1984,3,3,14,30,0), -d(1984,10,27,15,30,0), -d(1985,3,2,14,30,0), -d(1985,10,26,15,30,0), -d(1986,3,15,15,0,0), -d(1986,10,18,15,30,0), -d(1987,3,14,15,0,0), -d(1987,10,24,15,30,0), -d(1988,3,19,15,0,0), -d(1988,10,29,15,30,0), -d(1989,3,18,15,0,0), -d(1989,10,28,15,30,0), -d(1990,3,3,15,0,0), -d(1990,10,27,15,30,0), -d(1991,3,2,15,0,0), -d(1991,10,26,15,30,0), -d(1992,2,29,15,0,0), -d(1992,10,24,15,30,0), -d(1993,3,6,15,0,0), -d(1993,10,30,15,30,0), -d(1994,3,5,15,0,0), -d(1994,10,29,15,30,0), -d(1995,3,4,15,0,0), -d(1995,10,28,15,30,0), -d(1996,3,30,15,0,0), -d(1996,10,26,15,30,0), -d(1997,3,29,15,0,0), -d(1997,10,25,15,30,0), -d(1998,3,28,15,0,0), -d(1998,10,24,15,30,0), -d(1999,3,27,15,0,0), -d(1999,10,30,15,30,0), -d(2000,3,25,15,0,0), -d(2000,8,26,15,30,0), -d(2001,3,24,15,0,0), -d(2001,10,27,15,30,0), -d(2002,3,30,15,0,0), -d(2002,10,26,15,30,0), -d(2003,3,29,15,0,0), -d(2003,10,25,15,30,0), -d(2004,3,27,15,0,0), -d(2004,10,30,15,30,0), -d(2005,3,26,15,0,0), -d(2005,10,29,15,30,0), -d(2006,4,1,15,0,0), -d(2006,10,28,15,30,0), -d(2007,3,24,15,0,0), -d(2007,10,27,15,30,0), -d(2008,3,29,15,0,0), -d(2008,10,25,15,30,0), -d(2009,3,28,15,0,0), -d(2009,10,24,15,30,0), -d(2010,3,27,15,0,0), -d(2010,10,30,15,30,0), -d(2011,3,26,15,0,0), -d(2011,10,29,15,30,0), -d(2012,3,24,15,0,0), -d(2012,10,27,15,30,0), -d(2013,3,30,15,0,0), -d(2013,10,26,15,30,0), -d(2014,3,29,15,0,0), -d(2014,10,25,15,30,0), -d(2015,3,28,15,0,0), -d(2015,10,24,15,30,0), -d(2016,3,26,15,0,0), -d(2016,10,29,15,30,0), -d(2017,3,25,15,0,0), -d(2017,10,28,15,30,0), -d(2018,3,24,15,0,0), -d(2018,10,27,15,30,0), -d(2019,3,30,15,0,0), -d(2019,10,26,15,30,0), -d(2020,3,28,15,0,0), -d(2020,10,24,15,30,0), -d(2021,3,27,15,0,0), -d(2021,10,30,15,30,0), -d(2022,3,26,15,0,0), -d(2022,10,29,15,30,0), -d(2023,3,25,15,0,0), -d(2023,10,28,15,30,0), -d(2024,3,30,15,0,0), -d(2024,10,26,15,30,0), -d(2025,3,29,15,0,0), -d(2025,10,25,15,30,0), -d(2026,3,28,15,0,0), -d(2026,10,24,15,30,0), -d(2027,3,27,15,0,0), -d(2027,10,30,15,30,0), -d(2028,3,25,15,0,0), -d(2028,10,28,15,30,0), -d(2029,3,24,15,0,0), -d(2029,10,27,15,30,0), -d(2030,3,30,15,0,0), -d(2030,10,26,15,30,0), -d(2031,3,29,15,0,0), -d(2031,10,25,15,30,0), -d(2032,3,27,15,0,0), -d(2032,10,30,15,30,0), -d(2033,3,26,15,0,0), -d(2033,10,29,15,30,0), -d(2034,3,25,15,0,0), -d(2034,10,28,15,30,0), -d(2035,3,24,15,0,0), -d(2035,10,27,15,30,0), -d(2036,3,29,15,0,0), -d(2036,10,25,15,30,0), -d(2037,3,28,15,0,0), -d(2037,10,24,15,30,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), - ] - -LHI = LHI() - diff --git a/modules/pytz/zoneinfo/Australia/Lindeman.py b/modules/pytz/zoneinfo/Australia/Lindeman.py deleted file mode 100644 index 8b43a9e4..00000000 --- a/modules/pytz/zoneinfo/Australia/Lindeman.py +++ /dev/null @@ -1,62 +0,0 @@ -'''tzinfo timezone information for Australia/Lindeman.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lindeman(DstTzInfo): - '''Australia/Lindeman timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Lindeman' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,6,30,14,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), - ] - -Lindeman = Lindeman() - diff --git a/modules/pytz/zoneinfo/Australia/Lord_Howe.py b/modules/pytz/zoneinfo/Australia/Lord_Howe.py deleted file mode 100644 index 95acf6bc..00000000 --- a/modules/pytz/zoneinfo/Australia/Lord_Howe.py +++ /dev/null @@ -1,248 +0,0 @@ -'''tzinfo timezone information for Australia/Lord_Howe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lord_Howe(DstTzInfo): - '''Australia/Lord_Howe timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Lord_Howe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,15,30,0), -d(1982,3,6,14,30,0), -d(1982,10,30,15,30,0), -d(1983,3,5,14,30,0), -d(1983,10,29,15,30,0), -d(1984,3,3,14,30,0), -d(1984,10,27,15,30,0), -d(1985,3,2,14,30,0), -d(1985,10,26,15,30,0), -d(1986,3,15,15,0,0), -d(1986,10,18,15,30,0), -d(1987,3,14,15,0,0), -d(1987,10,24,15,30,0), -d(1988,3,19,15,0,0), -d(1988,10,29,15,30,0), -d(1989,3,18,15,0,0), -d(1989,10,28,15,30,0), -d(1990,3,3,15,0,0), -d(1990,10,27,15,30,0), -d(1991,3,2,15,0,0), -d(1991,10,26,15,30,0), -d(1992,2,29,15,0,0), -d(1992,10,24,15,30,0), -d(1993,3,6,15,0,0), -d(1993,10,30,15,30,0), -d(1994,3,5,15,0,0), -d(1994,10,29,15,30,0), -d(1995,3,4,15,0,0), -d(1995,10,28,15,30,0), -d(1996,3,30,15,0,0), -d(1996,10,26,15,30,0), -d(1997,3,29,15,0,0), -d(1997,10,25,15,30,0), -d(1998,3,28,15,0,0), -d(1998,10,24,15,30,0), -d(1999,3,27,15,0,0), -d(1999,10,30,15,30,0), -d(2000,3,25,15,0,0), -d(2000,8,26,15,30,0), -d(2001,3,24,15,0,0), -d(2001,10,27,15,30,0), -d(2002,3,30,15,0,0), -d(2002,10,26,15,30,0), -d(2003,3,29,15,0,0), -d(2003,10,25,15,30,0), -d(2004,3,27,15,0,0), -d(2004,10,30,15,30,0), -d(2005,3,26,15,0,0), -d(2005,10,29,15,30,0), -d(2006,4,1,15,0,0), -d(2006,10,28,15,30,0), -d(2007,3,24,15,0,0), -d(2007,10,27,15,30,0), -d(2008,3,29,15,0,0), -d(2008,10,25,15,30,0), -d(2009,3,28,15,0,0), -d(2009,10,24,15,30,0), -d(2010,3,27,15,0,0), -d(2010,10,30,15,30,0), -d(2011,3,26,15,0,0), -d(2011,10,29,15,30,0), -d(2012,3,24,15,0,0), -d(2012,10,27,15,30,0), -d(2013,3,30,15,0,0), -d(2013,10,26,15,30,0), -d(2014,3,29,15,0,0), -d(2014,10,25,15,30,0), -d(2015,3,28,15,0,0), -d(2015,10,24,15,30,0), -d(2016,3,26,15,0,0), -d(2016,10,29,15,30,0), -d(2017,3,25,15,0,0), -d(2017,10,28,15,30,0), -d(2018,3,24,15,0,0), -d(2018,10,27,15,30,0), -d(2019,3,30,15,0,0), -d(2019,10,26,15,30,0), -d(2020,3,28,15,0,0), -d(2020,10,24,15,30,0), -d(2021,3,27,15,0,0), -d(2021,10,30,15,30,0), -d(2022,3,26,15,0,0), -d(2022,10,29,15,30,0), -d(2023,3,25,15,0,0), -d(2023,10,28,15,30,0), -d(2024,3,30,15,0,0), -d(2024,10,26,15,30,0), -d(2025,3,29,15,0,0), -d(2025,10,25,15,30,0), -d(2026,3,28,15,0,0), -d(2026,10,24,15,30,0), -d(2027,3,27,15,0,0), -d(2027,10,30,15,30,0), -d(2028,3,25,15,0,0), -d(2028,10,28,15,30,0), -d(2029,3,24,15,0,0), -d(2029,10,27,15,30,0), -d(2030,3,30,15,0,0), -d(2030,10,26,15,30,0), -d(2031,3,29,15,0,0), -d(2031,10,25,15,30,0), -d(2032,3,27,15,0,0), -d(2032,10,30,15,30,0), -d(2033,3,26,15,0,0), -d(2033,10,29,15,30,0), -d(2034,3,25,15,0,0), -d(2034,10,28,15,30,0), -d(2035,3,24,15,0,0), -d(2035,10,27,15,30,0), -d(2036,3,29,15,0,0), -d(2036,10,25,15,30,0), -d(2037,3,28,15,0,0), -d(2037,10,24,15,30,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(41400,3600,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), -i(37800,0,'LHST'), -i(39600,1800,'LHST'), - ] - -Lord_Howe = Lord_Howe() - diff --git a/modules/pytz/zoneinfo/Australia/Melbourne.py b/modules/pytz/zoneinfo/Australia/Melbourne.py deleted file mode 100644 index a6cde240..00000000 --- a/modules/pytz/zoneinfo/Australia/Melbourne.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Melbourne.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Melbourne(DstTzInfo): - '''Australia/Melbourne timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Melbourne' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,3,6,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,17,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,17,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,25,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Melbourne = Melbourne() - diff --git a/modules/pytz/zoneinfo/Australia/NSW.py b/modules/pytz/zoneinfo/Australia/NSW.py deleted file mode 100644 index 6a821dfb..00000000 --- a/modules/pytz/zoneinfo/Australia/NSW.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/NSW.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class NSW(DstTzInfo): - '''Australia/NSW timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/NSW' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,4,3,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,4,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -NSW = NSW() - diff --git a/modules/pytz/zoneinfo/Australia/North.py b/modules/pytz/zoneinfo/Australia/North.py deleted file mode 100644 index 5ce0f278..00000000 --- a/modules/pytz/zoneinfo/Australia/North.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Australia/North.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class North(DstTzInfo): - '''Australia/North timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/North' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), - ] - -North = North() - diff --git a/modules/pytz/zoneinfo/Australia/Perth.py b/modules/pytz/zoneinfo/Australia/Perth.py deleted file mode 100644 index 90a536d5..00000000 --- a/modules/pytz/zoneinfo/Australia/Perth.py +++ /dev/null @@ -1,44 +0,0 @@ -'''tzinfo timezone information for Australia/Perth.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Perth(DstTzInfo): - '''Australia/Perth timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Perth' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,16,1,0), -d(1917,3,24,17,0,0), -d(1941,12,31,18,0,0), -d(1942,3,28,17,0,0), -d(1942,9,26,18,0,0), -d(1943,3,27,17,0,0), -d(1974,10,26,18,0,0), -d(1975,3,1,18,0,0), -d(1983,10,29,18,0,0), -d(1984,3,3,18,0,0), -d(1991,11,16,18,0,0), -d(1992,2,29,18,0,0), - ] - - _transition_info = [ -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), - ] - -Perth = Perth() - diff --git a/modules/pytz/zoneinfo/Australia/Queensland.py b/modules/pytz/zoneinfo/Australia/Queensland.py deleted file mode 100644 index 248d5f54..00000000 --- a/modules/pytz/zoneinfo/Australia/Queensland.py +++ /dev/null @@ -1,52 +0,0 @@ -'''tzinfo timezone information for Australia/Queensland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Queensland(DstTzInfo): - '''Australia/Queensland timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Queensland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), - ] - -Queensland = Queensland() - diff --git a/modules/pytz/zoneinfo/Australia/South.py b/modules/pytz/zoneinfo/Australia/South.py deleted file mode 100644 index 040489b2..00000000 --- a/modules/pytz/zoneinfo/Australia/South.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/South.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class South(DstTzInfo): - '''Australia/South timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/South' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), -d(1971,10,30,16,30,0), -d(1972,2,26,16,30,0), -d(1972,10,28,16,30,0), -d(1973,3,3,16,30,0), -d(1973,10,27,16,30,0), -d(1974,3,2,16,30,0), -d(1974,10,26,16,30,0), -d(1975,3,1,16,30,0), -d(1975,10,25,16,30,0), -d(1976,3,6,16,30,0), -d(1976,10,30,16,30,0), -d(1977,3,5,16,30,0), -d(1977,10,29,16,30,0), -d(1978,3,4,16,30,0), -d(1978,10,28,16,30,0), -d(1979,3,3,16,30,0), -d(1979,10,27,16,30,0), -d(1980,3,1,16,30,0), -d(1980,10,25,16,30,0), -d(1981,2,28,16,30,0), -d(1981,10,24,16,30,0), -d(1982,3,6,16,30,0), -d(1982,10,30,16,30,0), -d(1983,3,5,16,30,0), -d(1983,10,29,16,30,0), -d(1984,3,3,16,30,0), -d(1984,10,27,16,30,0), -d(1985,3,2,16,30,0), -d(1985,10,26,16,30,0), -d(1986,3,15,16,30,0), -d(1986,10,18,16,30,0), -d(1987,3,14,16,30,0), -d(1987,10,24,16,30,0), -d(1988,3,19,16,30,0), -d(1988,10,29,16,30,0), -d(1989,3,18,16,30,0), -d(1989,10,28,16,30,0), -d(1990,3,17,16,30,0), -d(1990,10,27,16,30,0), -d(1991,3,2,16,30,0), -d(1991,10,26,16,30,0), -d(1992,3,21,16,30,0), -d(1992,10,24,16,30,0), -d(1993,3,6,16,30,0), -d(1993,10,30,16,30,0), -d(1994,3,19,16,30,0), -d(1994,10,29,16,30,0), -d(1995,3,25,16,30,0), -d(1995,10,28,16,30,0), -d(1996,3,30,16,30,0), -d(1996,10,26,16,30,0), -d(1997,3,29,16,30,0), -d(1997,10,25,16,30,0), -d(1998,3,28,16,30,0), -d(1998,10,24,16,30,0), -d(1999,3,27,16,30,0), -d(1999,10,30,16,30,0), -d(2000,3,25,16,30,0), -d(2000,10,28,16,30,0), -d(2001,3,24,16,30,0), -d(2001,10,27,16,30,0), -d(2002,3,30,16,30,0), -d(2002,10,26,16,30,0), -d(2003,3,29,16,30,0), -d(2003,10,25,16,30,0), -d(2004,3,27,16,30,0), -d(2004,10,30,16,30,0), -d(2005,3,26,16,30,0), -d(2005,10,29,16,30,0), -d(2006,4,1,16,30,0), -d(2006,10,28,16,30,0), -d(2007,3,24,16,30,0), -d(2007,10,27,16,30,0), -d(2008,3,29,16,30,0), -d(2008,10,25,16,30,0), -d(2009,3,28,16,30,0), -d(2009,10,24,16,30,0), -d(2010,3,27,16,30,0), -d(2010,10,30,16,30,0), -d(2011,3,26,16,30,0), -d(2011,10,29,16,30,0), -d(2012,3,24,16,30,0), -d(2012,10,27,16,30,0), -d(2013,3,30,16,30,0), -d(2013,10,26,16,30,0), -d(2014,3,29,16,30,0), -d(2014,10,25,16,30,0), -d(2015,3,28,16,30,0), -d(2015,10,24,16,30,0), -d(2016,3,26,16,30,0), -d(2016,10,29,16,30,0), -d(2017,3,25,16,30,0), -d(2017,10,28,16,30,0), -d(2018,3,24,16,30,0), -d(2018,10,27,16,30,0), -d(2019,3,30,16,30,0), -d(2019,10,26,16,30,0), -d(2020,3,28,16,30,0), -d(2020,10,24,16,30,0), -d(2021,3,27,16,30,0), -d(2021,10,30,16,30,0), -d(2022,3,26,16,30,0), -d(2022,10,29,16,30,0), -d(2023,3,25,16,30,0), -d(2023,10,28,16,30,0), -d(2024,3,30,16,30,0), -d(2024,10,26,16,30,0), -d(2025,3,29,16,30,0), -d(2025,10,25,16,30,0), -d(2026,3,28,16,30,0), -d(2026,10,24,16,30,0), -d(2027,3,27,16,30,0), -d(2027,10,30,16,30,0), -d(2028,3,25,16,30,0), -d(2028,10,28,16,30,0), -d(2029,3,24,16,30,0), -d(2029,10,27,16,30,0), -d(2030,3,30,16,30,0), -d(2030,10,26,16,30,0), -d(2031,3,29,16,30,0), -d(2031,10,25,16,30,0), -d(2032,3,27,16,30,0), -d(2032,10,30,16,30,0), -d(2033,3,26,16,30,0), -d(2033,10,29,16,30,0), -d(2034,3,25,16,30,0), -d(2034,10,28,16,30,0), -d(2035,3,24,16,30,0), -d(2035,10,27,16,30,0), -d(2036,3,29,16,30,0), -d(2036,10,25,16,30,0), -d(2037,3,28,16,30,0), -d(2037,10,24,16,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), - ] - -South = South() - diff --git a/modules/pytz/zoneinfo/Australia/Sydney.py b/modules/pytz/zoneinfo/Australia/Sydney.py deleted file mode 100644 index 0aba0178..00000000 --- a/modules/pytz/zoneinfo/Australia/Sydney.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Sydney.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sydney(DstTzInfo): - '''Australia/Sydney timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Sydney' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,4,3,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,3,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,4,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Sydney = Sydney() - diff --git a/modules/pytz/zoneinfo/Australia/Tasmania.py b/modules/pytz/zoneinfo/Australia/Tasmania.py deleted file mode 100644 index a16d293d..00000000 --- a/modules/pytz/zoneinfo/Australia/Tasmania.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for Australia/Tasmania.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tasmania(DstTzInfo): - '''Australia/Tasmania timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Tasmania' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,9,30,16,0,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1967,9,30,16,0,0), -d(1968,3,30,16,0,0), -d(1968,10,26,16,0,0), -d(1969,3,8,16,0,0), -d(1969,10,25,16,0,0), -d(1970,3,7,16,0,0), -d(1970,10,24,16,0,0), -d(1971,3,13,16,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,3,27,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,26,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,1,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,24,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,17,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,30,16,0,0), -d(1991,10,5,16,0,0), -d(1992,3,28,16,0,0), -d(1992,10,3,16,0,0), -d(1993,3,27,16,0,0), -d(1993,10,2,16,0,0), -d(1994,3,26,16,0,0), -d(1994,10,1,16,0,0), -d(1995,3,25,16,0,0), -d(1995,9,30,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,5,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,4,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,3,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,2,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,6,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,5,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,4,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,2,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,1,16,0,0), -d(2006,4,1,16,0,0), -d(2006,9,30,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,6,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,4,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,3,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,2,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,1,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,6,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,5,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,4,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,3,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,1,16,0,0), -d(2017,3,25,16,0,0), -d(2017,9,30,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,6,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,5,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,3,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,2,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,1,16,0,0), -d(2023,3,25,16,0,0), -d(2023,9,30,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,5,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,4,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,3,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,2,16,0,0), -d(2028,3,25,16,0,0), -d(2028,9,30,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,6,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,5,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,4,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,2,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,1,16,0,0), -d(2034,3,25,16,0,0), -d(2034,9,30,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,6,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,4,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,3,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Tasmania = Tasmania() - diff --git a/modules/pytz/zoneinfo/Australia/Victoria.py b/modules/pytz/zoneinfo/Australia/Victoria.py deleted file mode 100644 index 7ce55b5d..00000000 --- a/modules/pytz/zoneinfo/Australia/Victoria.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Australia/Victoria.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Victoria(DstTzInfo): - '''Australia/Victoria timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Victoria' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,1,0), -d(1917,3,24,15,0,0), -d(1941,12,31,16,0,0), -d(1942,3,28,15,0,0), -d(1942,9,26,16,0,0), -d(1943,3,27,15,0,0), -d(1943,10,2,16,0,0), -d(1944,3,25,15,0,0), -d(1971,10,30,16,0,0), -d(1972,2,26,16,0,0), -d(1972,10,28,16,0,0), -d(1973,3,3,16,0,0), -d(1973,10,27,16,0,0), -d(1974,3,2,16,0,0), -d(1974,10,26,16,0,0), -d(1975,3,1,16,0,0), -d(1975,10,25,16,0,0), -d(1976,3,6,16,0,0), -d(1976,10,30,16,0,0), -d(1977,3,5,16,0,0), -d(1977,10,29,16,0,0), -d(1978,3,4,16,0,0), -d(1978,10,28,16,0,0), -d(1979,3,3,16,0,0), -d(1979,10,27,16,0,0), -d(1980,3,1,16,0,0), -d(1980,10,25,16,0,0), -d(1981,2,28,16,0,0), -d(1981,10,24,16,0,0), -d(1982,3,6,16,0,0), -d(1982,10,30,16,0,0), -d(1983,3,5,16,0,0), -d(1983,10,29,16,0,0), -d(1984,3,3,16,0,0), -d(1984,10,27,16,0,0), -d(1985,3,2,16,0,0), -d(1985,10,26,16,0,0), -d(1986,3,15,16,0,0), -d(1986,10,18,16,0,0), -d(1987,3,14,16,0,0), -d(1987,10,17,16,0,0), -d(1988,3,19,16,0,0), -d(1988,10,29,16,0,0), -d(1989,3,18,16,0,0), -d(1989,10,28,16,0,0), -d(1990,3,17,16,0,0), -d(1990,10,27,16,0,0), -d(1991,3,2,16,0,0), -d(1991,10,26,16,0,0), -d(1992,2,29,16,0,0), -d(1992,10,24,16,0,0), -d(1993,3,6,16,0,0), -d(1993,10,30,16,0,0), -d(1994,3,5,16,0,0), -d(1994,10,29,16,0,0), -d(1995,3,25,16,0,0), -d(1995,10,28,16,0,0), -d(1996,3,30,16,0,0), -d(1996,10,26,16,0,0), -d(1997,3,29,16,0,0), -d(1997,10,25,16,0,0), -d(1998,3,28,16,0,0), -d(1998,10,24,16,0,0), -d(1999,3,27,16,0,0), -d(1999,10,30,16,0,0), -d(2000,3,25,16,0,0), -d(2000,8,26,16,0,0), -d(2001,3,24,16,0,0), -d(2001,10,27,16,0,0), -d(2002,3,30,16,0,0), -d(2002,10,26,16,0,0), -d(2003,3,29,16,0,0), -d(2003,10,25,16,0,0), -d(2004,3,27,16,0,0), -d(2004,10,30,16,0,0), -d(2005,3,26,16,0,0), -d(2005,10,29,16,0,0), -d(2006,4,1,16,0,0), -d(2006,10,28,16,0,0), -d(2007,3,24,16,0,0), -d(2007,10,27,16,0,0), -d(2008,3,29,16,0,0), -d(2008,10,25,16,0,0), -d(2009,3,28,16,0,0), -d(2009,10,24,16,0,0), -d(2010,3,27,16,0,0), -d(2010,10,30,16,0,0), -d(2011,3,26,16,0,0), -d(2011,10,29,16,0,0), -d(2012,3,24,16,0,0), -d(2012,10,27,16,0,0), -d(2013,3,30,16,0,0), -d(2013,10,26,16,0,0), -d(2014,3,29,16,0,0), -d(2014,10,25,16,0,0), -d(2015,3,28,16,0,0), -d(2015,10,24,16,0,0), -d(2016,3,26,16,0,0), -d(2016,10,29,16,0,0), -d(2017,3,25,16,0,0), -d(2017,10,28,16,0,0), -d(2018,3,24,16,0,0), -d(2018,10,27,16,0,0), -d(2019,3,30,16,0,0), -d(2019,10,26,16,0,0), -d(2020,3,28,16,0,0), -d(2020,10,24,16,0,0), -d(2021,3,27,16,0,0), -d(2021,10,30,16,0,0), -d(2022,3,26,16,0,0), -d(2022,10,29,16,0,0), -d(2023,3,25,16,0,0), -d(2023,10,28,16,0,0), -d(2024,3,30,16,0,0), -d(2024,10,26,16,0,0), -d(2025,3,29,16,0,0), -d(2025,10,25,16,0,0), -d(2026,3,28,16,0,0), -d(2026,10,24,16,0,0), -d(2027,3,27,16,0,0), -d(2027,10,30,16,0,0), -d(2028,3,25,16,0,0), -d(2028,10,28,16,0,0), -d(2029,3,24,16,0,0), -d(2029,10,27,16,0,0), -d(2030,3,30,16,0,0), -d(2030,10,26,16,0,0), -d(2031,3,29,16,0,0), -d(2031,10,25,16,0,0), -d(2032,3,27,16,0,0), -d(2032,10,30,16,0,0), -d(2033,3,26,16,0,0), -d(2033,10,29,16,0,0), -d(2034,3,25,16,0,0), -d(2034,10,28,16,0,0), -d(2035,3,24,16,0,0), -d(2035,10,27,16,0,0), -d(2036,3,29,16,0,0), -d(2036,10,25,16,0,0), -d(2037,3,28,16,0,0), -d(2037,10,24,16,0,0), - ] - - _transition_info = [ -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), -i(36000,0,'EST'), -i(39600,3600,'EST'), - ] - -Victoria = Victoria() - diff --git a/modules/pytz/zoneinfo/Australia/West.py b/modules/pytz/zoneinfo/Australia/West.py deleted file mode 100644 index 50e0fe32..00000000 --- a/modules/pytz/zoneinfo/Australia/West.py +++ /dev/null @@ -1,44 +0,0 @@ -'''tzinfo timezone information for Australia/West.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class West(DstTzInfo): - '''Australia/West timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/West' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,16,1,0), -d(1917,3,24,17,0,0), -d(1941,12,31,18,0,0), -d(1942,3,28,17,0,0), -d(1942,9,26,18,0,0), -d(1943,3,27,17,0,0), -d(1974,10,26,18,0,0), -d(1975,3,1,18,0,0), -d(1983,10,29,18,0,0), -d(1984,3,3,18,0,0), -d(1991,11,16,18,0,0), -d(1992,2,29,18,0,0), - ] - - _transition_info = [ -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), -i(32400,3600,'WST'), -i(28800,0,'WST'), - ] - -West = West() - diff --git a/modules/pytz/zoneinfo/Australia/Yancowinna.py b/modules/pytz/zoneinfo/Australia/Yancowinna.py deleted file mode 100644 index 5a0883e9..00000000 --- a/modules/pytz/zoneinfo/Australia/Yancowinna.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for Australia/Yancowinna.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yancowinna(DstTzInfo): - '''Australia/Yancowinna timezone definition. See datetime.tzinfo for details''' - - zone = 'Australia/Yancowinna' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,14,31,0), -d(1917,3,24,15,30,0), -d(1941,12,31,16,30,0), -d(1942,3,28,15,30,0), -d(1942,9,26,16,30,0), -d(1943,3,27,15,30,0), -d(1943,10,2,16,30,0), -d(1944,3,25,15,30,0), -d(1971,10,30,16,30,0), -d(1972,2,26,16,30,0), -d(1972,10,28,16,30,0), -d(1973,3,3,16,30,0), -d(1973,10,27,16,30,0), -d(1974,3,2,16,30,0), -d(1974,10,26,16,30,0), -d(1975,3,1,16,30,0), -d(1975,10,25,16,30,0), -d(1976,3,6,16,30,0), -d(1976,10,30,16,30,0), -d(1977,3,5,16,30,0), -d(1977,10,29,16,30,0), -d(1978,3,4,16,30,0), -d(1978,10,28,16,30,0), -d(1979,3,3,16,30,0), -d(1979,10,27,16,30,0), -d(1980,3,1,16,30,0), -d(1980,10,25,16,30,0), -d(1981,2,28,16,30,0), -d(1981,10,24,16,30,0), -d(1982,4,3,16,30,0), -d(1982,10,30,16,30,0), -d(1983,3,5,16,30,0), -d(1983,10,29,16,30,0), -d(1984,3,3,16,30,0), -d(1984,10,27,16,30,0), -d(1985,3,2,16,30,0), -d(1985,10,26,16,30,0), -d(1986,3,15,16,30,0), -d(1986,10,18,16,30,0), -d(1987,3,14,16,30,0), -d(1987,10,24,16,30,0), -d(1988,3,19,16,30,0), -d(1988,10,29,16,30,0), -d(1989,3,18,16,30,0), -d(1989,10,28,16,30,0), -d(1990,3,3,16,30,0), -d(1990,10,27,16,30,0), -d(1991,3,2,16,30,0), -d(1991,10,26,16,30,0), -d(1992,2,29,16,30,0), -d(1992,10,24,16,30,0), -d(1993,3,6,16,30,0), -d(1993,10,30,16,30,0), -d(1994,3,5,16,30,0), -d(1994,10,29,16,30,0), -d(1995,3,4,16,30,0), -d(1995,10,28,16,30,0), -d(1996,3,30,16,30,0), -d(1996,10,26,16,30,0), -d(1997,3,29,16,30,0), -d(1997,10,25,16,30,0), -d(1998,3,28,16,30,0), -d(1998,10,24,16,30,0), -d(1999,3,27,16,30,0), -d(1999,10,30,16,30,0), -d(1999,12,31,13,30,0), -d(2000,3,25,16,30,0), -d(2000,10,28,16,30,0), -d(2001,3,24,16,30,0), -d(2001,10,27,16,30,0), -d(2002,3,30,16,30,0), -d(2002,10,26,16,30,0), -d(2003,3,29,16,30,0), -d(2003,10,25,16,30,0), -d(2004,3,27,16,30,0), -d(2004,10,30,16,30,0), -d(2005,3,26,16,30,0), -d(2005,10,29,16,30,0), -d(2006,4,1,16,30,0), -d(2006,10,28,16,30,0), -d(2007,3,24,16,30,0), -d(2007,10,27,16,30,0), -d(2008,3,29,16,30,0), -d(2008,10,25,16,30,0), -d(2009,3,28,16,30,0), -d(2009,10,24,16,30,0), -d(2010,3,27,16,30,0), -d(2010,10,30,16,30,0), -d(2011,3,26,16,30,0), -d(2011,10,29,16,30,0), -d(2012,3,24,16,30,0), -d(2012,10,27,16,30,0), -d(2013,3,30,16,30,0), -d(2013,10,26,16,30,0), -d(2014,3,29,16,30,0), -d(2014,10,25,16,30,0), -d(2015,3,28,16,30,0), -d(2015,10,24,16,30,0), -d(2016,3,26,16,30,0), -d(2016,10,29,16,30,0), -d(2017,3,25,16,30,0), -d(2017,10,28,16,30,0), -d(2018,3,24,16,30,0), -d(2018,10,27,16,30,0), -d(2019,3,30,16,30,0), -d(2019,10,26,16,30,0), -d(2020,3,28,16,30,0), -d(2020,10,24,16,30,0), -d(2021,3,27,16,30,0), -d(2021,10,30,16,30,0), -d(2022,3,26,16,30,0), -d(2022,10,29,16,30,0), -d(2023,3,25,16,30,0), -d(2023,10,28,16,30,0), -d(2024,3,30,16,30,0), -d(2024,10,26,16,30,0), -d(2025,3,29,16,30,0), -d(2025,10,25,16,30,0), -d(2026,3,28,16,30,0), -d(2026,10,24,16,30,0), -d(2027,3,27,16,30,0), -d(2027,10,30,16,30,0), -d(2028,3,25,16,30,0), -d(2028,10,28,16,30,0), -d(2029,3,24,16,30,0), -d(2029,10,27,16,30,0), -d(2030,3,30,16,30,0), -d(2030,10,26,16,30,0), -d(2031,3,29,16,30,0), -d(2031,10,25,16,30,0), -d(2032,3,27,16,30,0), -d(2032,10,30,16,30,0), -d(2033,3,26,16,30,0), -d(2033,10,29,16,30,0), -d(2034,3,25,16,30,0), -d(2034,10,28,16,30,0), -d(2035,3,24,16,30,0), -d(2035,10,27,16,30,0), -d(2036,3,29,16,30,0), -d(2036,10,25,16,30,0), -d(2037,3,28,16,30,0), -d(2037,10,24,16,30,0), - ] - - _transition_info = [ -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), -i(34200,0,'CST'), -i(37800,3600,'CST'), - ] - -Yancowinna = Yancowinna() - diff --git a/modules/pytz/zoneinfo/Australia/__init__.py b/modules/pytz/zoneinfo/Australia/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Brazil/Acre.py b/modules/pytz/zoneinfo/Brazil/Acre.py deleted file mode 100644 index e1f86e97..00000000 --- a/modules/pytz/zoneinfo/Brazil/Acre.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for Brazil/Acre.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Acre(DstTzInfo): - '''Brazil/Acre timezone definition. See datetime.tzinfo for details''' - - zone = 'Brazil/Acre' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,31,12), -d(1931,10,3,16,0,0), -d(1932,4,1,4,0,0), -d(1932,10,3,5,0,0), -d(1933,4,1,4,0,0), -d(1949,12,1,5,0,0), -d(1950,4,16,5,0,0), -d(1950,12,1,5,0,0), -d(1951,4,1,4,0,0), -d(1951,12,1,5,0,0), -d(1952,4,1,4,0,0), -d(1952,12,1,5,0,0), -d(1953,3,1,4,0,0), -d(1963,12,9,5,0,0), -d(1964,3,1,4,0,0), -d(1965,1,31,5,0,0), -d(1965,3,31,4,0,0), -d(1965,12,1,5,0,0), -d(1966,3,1,4,0,0), -d(1966,11,1,5,0,0), -d(1967,3,1,4,0,0), -d(1967,11,1,5,0,0), -d(1968,3,1,4,0,0), -d(1985,11,2,5,0,0), -d(1986,3,15,4,0,0), -d(1986,10,25,5,0,0), -d(1987,2,14,4,0,0), -d(1987,10,25,5,0,0), -d(1988,2,7,4,0,0), - ] - - _transition_info = [ -i(-16260,0,'LMT'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), -i(-14400,3600,'ACST'), -i(-18000,0,'ACT'), - ] - -Acre = Acre() - diff --git a/modules/pytz/zoneinfo/Brazil/DeNoronha.py b/modules/pytz/zoneinfo/Brazil/DeNoronha.py deleted file mode 100644 index 240aac55..00000000 --- a/modules/pytz/zoneinfo/Brazil/DeNoronha.py +++ /dev/null @@ -1,98 +0,0 @@ -'''tzinfo timezone information for Brazil/DeNoronha.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class DeNoronha(DstTzInfo): - '''Brazil/DeNoronha timezone definition. See datetime.tzinfo for details''' - - zone = 'Brazil/DeNoronha' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,2,9,40), -d(1931,10,3,13,0,0), -d(1932,4,1,1,0,0), -d(1932,10,3,2,0,0), -d(1933,4,1,1,0,0), -d(1949,12,1,2,0,0), -d(1950,4,16,2,0,0), -d(1950,12,1,2,0,0), -d(1951,4,1,1,0,0), -d(1951,12,1,2,0,0), -d(1952,4,1,1,0,0), -d(1952,12,1,2,0,0), -d(1953,3,1,1,0,0), -d(1963,12,9,2,0,0), -d(1964,3,1,1,0,0), -d(1965,1,31,2,0,0), -d(1965,3,31,1,0,0), -d(1965,12,1,2,0,0), -d(1966,3,1,1,0,0), -d(1966,11,1,2,0,0), -d(1967,3,1,1,0,0), -d(1967,11,1,2,0,0), -d(1968,3,1,1,0,0), -d(1985,11,2,2,0,0), -d(1986,3,15,1,0,0), -d(1986,10,25,2,0,0), -d(1987,2,14,1,0,0), -d(1987,10,25,2,0,0), -d(1988,2,7,1,0,0), -d(1988,10,16,2,0,0), -d(1989,1,29,1,0,0), -d(1989,10,15,2,0,0), -d(1990,2,11,1,0,0), -d(1999,10,3,2,0,0), -d(2000,2,27,1,0,0), -d(2000,10,8,2,0,0), -d(2000,10,15,1,0,0), -d(2001,10,14,2,0,0), -d(2002,2,17,1,0,0), - ] - - _transition_info = [ -i(-7800,0,'LMT'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), -i(-3600,3600,'FNST'), -i(-7200,0,'FNT'), - ] - -DeNoronha = DeNoronha() - diff --git a/modules/pytz/zoneinfo/Brazil/East.py b/modules/pytz/zoneinfo/Brazil/East.py deleted file mode 100644 index 2b824f61..00000000 --- a/modules/pytz/zoneinfo/Brazil/East.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for Brazil/East.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class East(DstTzInfo): - '''Brazil/East timezone definition. See datetime.tzinfo for details''' - - zone = 'Brazil/East' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,3,6,28), -d(1931,10,3,14,0,0), -d(1932,4,1,2,0,0), -d(1932,10,3,3,0,0), -d(1933,4,1,2,0,0), -d(1949,12,1,3,0,0), -d(1950,4,16,3,0,0), -d(1950,12,1,3,0,0), -d(1951,4,1,2,0,0), -d(1951,12,1,3,0,0), -d(1952,4,1,2,0,0), -d(1952,12,1,3,0,0), -d(1953,3,1,2,0,0), -d(1963,10,23,3,0,0), -d(1964,3,1,2,0,0), -d(1965,1,31,3,0,0), -d(1965,3,31,2,0,0), -d(1965,12,1,3,0,0), -d(1966,3,1,2,0,0), -d(1966,11,1,3,0,0), -d(1967,3,1,2,0,0), -d(1967,11,1,3,0,0), -d(1968,3,1,2,0,0), -d(1985,11,2,3,0,0), -d(1986,3,15,2,0,0), -d(1986,10,25,3,0,0), -d(1987,2,14,2,0,0), -d(1987,10,25,3,0,0), -d(1988,2,7,2,0,0), -d(1988,10,16,3,0,0), -d(1989,1,29,2,0,0), -d(1989,10,15,3,0,0), -d(1990,2,11,2,0,0), -d(1990,10,21,3,0,0), -d(1991,2,17,2,0,0), -d(1991,10,20,3,0,0), -d(1992,2,9,2,0,0), -d(1992,10,25,3,0,0), -d(1993,1,31,2,0,0), -d(1993,10,17,3,0,0), -d(1994,2,20,2,0,0), -d(1994,10,16,3,0,0), -d(1995,2,19,2,0,0), -d(1995,10,15,3,0,0), -d(1996,2,11,2,0,0), -d(1996,10,6,3,0,0), -d(1997,2,16,2,0,0), -d(1997,10,6,3,0,0), -d(1998,3,1,2,0,0), -d(1998,10,11,3,0,0), -d(1999,2,21,2,0,0), -d(1999,10,3,3,0,0), -d(2000,2,27,2,0,0), -d(2000,10,8,3,0,0), -d(2001,2,18,2,0,0), -d(2001,10,14,3,0,0), -d(2002,2,17,2,0,0), -d(2002,11,3,3,0,0), -d(2003,2,16,2,0,0), -d(2003,10,19,3,0,0), -d(2004,2,15,2,0,0), -d(2004,11,2,3,0,0), -d(2005,2,20,2,0,0), -d(2005,10,16,3,0,0), -d(2006,2,19,2,0,0), -d(2006,10,15,3,0,0), -d(2007,2,18,2,0,0), -d(2007,10,21,3,0,0), -d(2008,2,17,2,0,0), -d(2008,10,19,3,0,0), -d(2009,2,15,2,0,0), -d(2009,10,18,3,0,0), -d(2010,2,21,2,0,0), -d(2010,10,17,3,0,0), -d(2011,2,20,2,0,0), -d(2011,10,16,3,0,0), -d(2012,2,19,2,0,0), -d(2012,10,21,3,0,0), -d(2013,2,17,2,0,0), -d(2013,10,20,3,0,0), -d(2014,2,16,2,0,0), -d(2014,10,19,3,0,0), -d(2015,2,15,2,0,0), -d(2015,10,18,3,0,0), -d(2016,2,21,2,0,0), -d(2016,10,16,3,0,0), -d(2017,2,19,2,0,0), -d(2017,10,15,3,0,0), -d(2018,2,18,2,0,0), -d(2018,10,21,3,0,0), -d(2019,2,17,2,0,0), -d(2019,10,20,3,0,0), -d(2020,2,16,2,0,0), -d(2020,10,18,3,0,0), -d(2021,2,21,2,0,0), -d(2021,10,17,3,0,0), -d(2022,2,20,2,0,0), -d(2022,10,16,3,0,0), -d(2023,2,19,2,0,0), -d(2023,10,15,3,0,0), -d(2024,2,18,2,0,0), -d(2024,10,20,3,0,0), -d(2025,2,16,2,0,0), -d(2025,10,19,3,0,0), -d(2026,2,15,2,0,0), -d(2026,10,18,3,0,0), -d(2027,2,21,2,0,0), -d(2027,10,17,3,0,0), -d(2028,2,20,2,0,0), -d(2028,10,15,3,0,0), -d(2029,2,18,2,0,0), -d(2029,10,21,3,0,0), -d(2030,2,17,2,0,0), -d(2030,10,20,3,0,0), -d(2031,2,16,2,0,0), -d(2031,10,19,3,0,0), -d(2032,2,15,2,0,0), -d(2032,10,17,3,0,0), -d(2033,2,20,2,0,0), -d(2033,10,16,3,0,0), -d(2034,2,19,2,0,0), -d(2034,10,15,3,0,0), -d(2035,2,18,2,0,0), -d(2035,10,21,3,0,0), -d(2036,2,17,2,0,0), -d(2036,10,19,3,0,0), -d(2037,2,15,2,0,0), -d(2037,10,18,3,0,0), - ] - - _transition_info = [ -i(-11160,0,'LMT'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), -i(-10800,0,'BRT'), -i(-7200,3600,'BRST'), - ] - -East = East() - diff --git a/modules/pytz/zoneinfo/Brazil/West.py b/modules/pytz/zoneinfo/Brazil/West.py deleted file mode 100644 index b18d9313..00000000 --- a/modules/pytz/zoneinfo/Brazil/West.py +++ /dev/null @@ -1,82 +0,0 @@ -'''tzinfo timezone information for Brazil/West.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class West(DstTzInfo): - '''Brazil/West timezone definition. See datetime.tzinfo for details''' - - zone = 'Brazil/West' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,1,1,4,0,4), -d(1931,10,3,15,0,0), -d(1932,4,1,3,0,0), -d(1932,10,3,4,0,0), -d(1933,4,1,3,0,0), -d(1949,12,1,4,0,0), -d(1950,4,16,4,0,0), -d(1950,12,1,4,0,0), -d(1951,4,1,3,0,0), -d(1951,12,1,4,0,0), -d(1952,4,1,3,0,0), -d(1952,12,1,4,0,0), -d(1953,3,1,3,0,0), -d(1963,12,9,4,0,0), -d(1964,3,1,3,0,0), -d(1965,1,31,4,0,0), -d(1965,3,31,3,0,0), -d(1965,12,1,4,0,0), -d(1966,3,1,3,0,0), -d(1966,11,1,4,0,0), -d(1967,3,1,3,0,0), -d(1967,11,1,4,0,0), -d(1968,3,1,3,0,0), -d(1985,11,2,4,0,0), -d(1986,3,15,3,0,0), -d(1986,10,25,4,0,0), -d(1987,2,14,3,0,0), -d(1987,10,25,4,0,0), -d(1988,2,7,3,0,0), -d(1993,10,17,4,0,0), -d(1994,2,20,3,0,0), - ] - - _transition_info = [ -i(-14400,0,'LMT'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), -i(-10800,3600,'AMST'), -i(-14400,0,'AMT'), - ] - -West = West() - diff --git a/modules/pytz/zoneinfo/Brazil/__init__.py b/modules/pytz/zoneinfo/Brazil/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/CET.py b/modules/pytz/zoneinfo/CET.py deleted file mode 100644 index 6de05954..00000000 --- a/modules/pytz/zoneinfo/CET.py +++ /dev/null @@ -1,288 +0,0 @@ -'''tzinfo timezone information for CET.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class CET(DstTzInfo): - '''CET timezone definition. See datetime.tzinfo for details''' - - zone = 'CET' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -CET = CET() - diff --git a/modules/pytz/zoneinfo/CST6CDT.py b/modules/pytz/zoneinfo/CST6CDT.py deleted file mode 100644 index ba53cff0..00000000 --- a/modules/pytz/zoneinfo/CST6CDT.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for CST6CDT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class CST6CDT(DstTzInfo): - '''CST6CDT timezone definition. See datetime.tzinfo for details''' - - zone = 'CST6CDT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -CST6CDT = CST6CDT() - diff --git a/modules/pytz/zoneinfo/Canada/Atlantic.py b/modules/pytz/zoneinfo/Canada/Atlantic.py deleted file mode 100644 index 22c41c59..00000000 --- a/modules/pytz/zoneinfo/Canada/Atlantic.py +++ /dev/null @@ -1,476 +0,0 @@ -'''tzinfo timezone information for Canada/Atlantic.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Atlantic(DstTzInfo): - '''Canada/Atlantic timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Atlantic' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1902,6,15,4,14,24), -d(1916,4,1,4,0,0), -d(1916,10,1,3,0,0), -d(1918,4,14,6,0,0), -d(1918,10,31,5,0,0), -d(1920,5,9,4,0,0), -d(1920,8,29,3,0,0), -d(1921,5,6,4,0,0), -d(1921,9,5,3,0,0), -d(1922,4,30,4,0,0), -d(1922,9,5,3,0,0), -d(1923,5,6,4,0,0), -d(1923,9,4,3,0,0), -d(1924,5,4,4,0,0), -d(1924,9,15,3,0,0), -d(1925,5,3,4,0,0), -d(1925,9,28,3,0,0), -d(1926,5,16,4,0,0), -d(1926,9,13,3,0,0), -d(1927,5,1,4,0,0), -d(1927,9,26,3,0,0), -d(1928,5,13,4,0,0), -d(1928,9,9,3,0,0), -d(1929,5,12,4,0,0), -d(1929,9,3,3,0,0), -d(1930,5,11,4,0,0), -d(1930,9,15,3,0,0), -d(1931,5,10,4,0,0), -d(1931,9,28,3,0,0), -d(1932,5,1,4,0,0), -d(1932,9,26,3,0,0), -d(1933,4,30,4,0,0), -d(1933,10,2,3,0,0), -d(1934,5,20,4,0,0), -d(1934,9,16,3,0,0), -d(1935,6,2,4,0,0), -d(1935,9,30,3,0,0), -d(1936,6,1,4,0,0), -d(1936,9,14,3,0,0), -d(1937,5,2,4,0,0), -d(1937,9,27,3,0,0), -d(1938,5,1,4,0,0), -d(1938,9,26,3,0,0), -d(1939,5,28,4,0,0), -d(1939,9,25,3,0,0), -d(1940,5,5,4,0,0), -d(1940,9,30,3,0,0), -d(1941,5,4,4,0,0), -d(1941,9,29,3,0,0), -d(1942,2,9,6,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,5,0,0), -d(1946,4,28,6,0,0), -d(1946,9,29,5,0,0), -d(1947,4,27,6,0,0), -d(1947,9,28,5,0,0), -d(1948,4,25,6,0,0), -d(1948,9,26,5,0,0), -d(1949,4,24,6,0,0), -d(1949,9,25,5,0,0), -d(1951,4,29,6,0,0), -d(1951,9,30,5,0,0), -d(1952,4,27,6,0,0), -d(1952,9,28,5,0,0), -d(1953,4,26,6,0,0), -d(1953,9,27,5,0,0), -d(1954,4,25,6,0,0), -d(1954,9,26,5,0,0), -d(1956,4,29,6,0,0), -d(1956,9,30,5,0,0), -d(1957,4,28,6,0,0), -d(1957,9,29,5,0,0), -d(1958,4,27,6,0,0), -d(1958,9,28,5,0,0), -d(1959,4,26,6,0,0), -d(1959,9,27,5,0,0), -d(1962,4,29,6,0,0), -d(1962,10,28,5,0,0), -d(1963,4,28,6,0,0), -d(1963,10,27,5,0,0), -d(1964,4,26,6,0,0), -d(1964,10,25,5,0,0), -d(1965,4,25,6,0,0), -d(1965,10,31,5,0,0), -d(1966,4,24,6,0,0), -d(1966,10,30,5,0,0), -d(1967,4,30,6,0,0), -d(1967,10,29,5,0,0), -d(1968,4,28,6,0,0), -d(1968,10,27,5,0,0), -d(1969,4,27,6,0,0), -d(1969,10,26,5,0,0), -d(1970,4,26,6,0,0), -d(1970,10,25,5,0,0), -d(1971,4,25,6,0,0), -d(1971,10,31,5,0,0), -d(1972,4,30,6,0,0), -d(1972,10,29,5,0,0), -d(1973,4,29,6,0,0), -d(1973,10,28,5,0,0), -d(1974,4,28,6,0,0), -d(1974,10,27,5,0,0), -d(1975,4,27,6,0,0), -d(1975,10,26,5,0,0), -d(1976,4,25,6,0,0), -d(1976,10,31,5,0,0), -d(1977,4,24,6,0,0), -d(1977,10,30,5,0,0), -d(1978,4,30,6,0,0), -d(1978,10,29,5,0,0), -d(1979,4,29,6,0,0), -d(1979,10,28,5,0,0), -d(1980,4,27,6,0,0), -d(1980,10,26,5,0,0), -d(1981,4,26,6,0,0), -d(1981,10,25,5,0,0), -d(1982,4,25,6,0,0), -d(1982,10,31,5,0,0), -d(1983,4,24,6,0,0), -d(1983,10,30,5,0,0), -d(1984,4,29,6,0,0), -d(1984,10,28,5,0,0), -d(1985,4,28,6,0,0), -d(1985,10,27,5,0,0), -d(1986,4,27,6,0,0), -d(1986,10,26,5,0,0), -d(1987,4,5,6,0,0), -d(1987,10,25,5,0,0), -d(1988,4,3,6,0,0), -d(1988,10,30,5,0,0), -d(1989,4,2,6,0,0), -d(1989,10,29,5,0,0), -d(1990,4,1,6,0,0), -d(1990,10,28,5,0,0), -d(1991,4,7,6,0,0), -d(1991,10,27,5,0,0), -d(1992,4,5,6,0,0), -d(1992,10,25,5,0,0), -d(1993,4,4,6,0,0), -d(1993,10,31,5,0,0), -d(1994,4,3,6,0,0), -d(1994,10,30,5,0,0), -d(1995,4,2,6,0,0), -d(1995,10,29,5,0,0), -d(1996,4,7,6,0,0), -d(1996,10,27,5,0,0), -d(1997,4,6,6,0,0), -d(1997,10,26,5,0,0), -d(1998,4,5,6,0,0), -d(1998,10,25,5,0,0), -d(1999,4,4,6,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,6,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,6,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,6,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,6,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,6,0,0), -d(2004,10,31,5,0,0), -d(2005,4,3,6,0,0), -d(2005,10,30,5,0,0), -d(2006,4,2,6,0,0), -d(2006,10,29,5,0,0), -d(2007,3,11,6,0,0), -d(2007,11,4,5,0,0), -d(2008,3,9,6,0,0), -d(2008,11,2,5,0,0), -d(2009,3,8,6,0,0), -d(2009,11,1,5,0,0), -d(2010,3,14,6,0,0), -d(2010,11,7,5,0,0), -d(2011,3,13,6,0,0), -d(2011,11,6,5,0,0), -d(2012,3,11,6,0,0), -d(2012,11,4,5,0,0), -d(2013,3,10,6,0,0), -d(2013,11,3,5,0,0), -d(2014,3,9,6,0,0), -d(2014,11,2,5,0,0), -d(2015,3,8,6,0,0), -d(2015,11,1,5,0,0), -d(2016,3,13,6,0,0), -d(2016,11,6,5,0,0), -d(2017,3,12,6,0,0), -d(2017,11,5,5,0,0), -d(2018,3,11,6,0,0), -d(2018,11,4,5,0,0), -d(2019,3,10,6,0,0), -d(2019,11,3,5,0,0), -d(2020,3,8,6,0,0), -d(2020,11,1,5,0,0), -d(2021,3,14,6,0,0), -d(2021,11,7,5,0,0), -d(2022,3,13,6,0,0), -d(2022,11,6,5,0,0), -d(2023,3,12,6,0,0), -d(2023,11,5,5,0,0), -d(2024,3,10,6,0,0), -d(2024,11,3,5,0,0), -d(2025,3,9,6,0,0), -d(2025,11,2,5,0,0), -d(2026,3,8,6,0,0), -d(2026,11,1,5,0,0), -d(2027,3,14,6,0,0), -d(2027,11,7,5,0,0), -d(2028,3,12,6,0,0), -d(2028,11,5,5,0,0), -d(2029,3,11,6,0,0), -d(2029,11,4,5,0,0), -d(2030,3,10,6,0,0), -d(2030,11,3,5,0,0), -d(2031,3,9,6,0,0), -d(2031,11,2,5,0,0), -d(2032,3,14,6,0,0), -d(2032,11,7,5,0,0), -d(2033,3,13,6,0,0), -d(2033,11,6,5,0,0), -d(2034,3,12,6,0,0), -d(2034,11,5,5,0,0), -d(2035,3,11,6,0,0), -d(2035,11,4,5,0,0), -d(2036,3,9,6,0,0), -d(2036,11,2,5,0,0), -d(2037,3,8,6,0,0), -d(2037,11,1,5,0,0), - ] - - _transition_info = [ -i(-15240,0,'LMT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'AWT'), -i(-10800,3600,'APT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), -i(-10800,3600,'ADT'), -i(-14400,0,'AST'), - ] - -Atlantic = Atlantic() - diff --git a/modules/pytz/zoneinfo/Canada/Central.py b/modules/pytz/zoneinfo/Canada/Central.py deleted file mode 100644 index db26a5f3..00000000 --- a/modules/pytz/zoneinfo/Canada/Central.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for Canada/Central.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Central(DstTzInfo): - '''Canada/Central timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Central' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,23,6,0,0), -d(1916,9,17,5,0,0), -d(1918,4,14,8,0,0), -d(1918,10,31,7,0,0), -d(1937,5,16,8,0,0), -d(1937,9,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,5,12,8,0,0), -d(1946,10,13,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,5,1,8,0,0), -d(1950,9,30,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,9,25,7,0,0), -d(1956,4,29,8,0,0), -d(1956,9,30,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,9,25,7,0,0), -d(1963,4,28,8,0,0), -d(1963,9,22,7,0,0), -d(1966,4,24,8,0,0), -d(1966,10,30,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,4,28,8,0,0), -d(1974,10,27,7,0,0), -d(1975,4,27,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Central = Central() - diff --git a/modules/pytz/zoneinfo/Canada/East_minus_Saskatchewan.py b/modules/pytz/zoneinfo/Canada/East_minus_Saskatchewan.py deleted file mode 100644 index 950907d8..00000000 --- a/modules/pytz/zoneinfo/Canada/East_minus_Saskatchewan.py +++ /dev/null @@ -1,126 +0,0 @@ -'''tzinfo timezone information for Canada/East_minus_Saskatchewan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class East_minus_Saskatchewan(DstTzInfo): - '''Canada/East_minus_Saskatchewan timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/East_minus_Saskatchewan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,9,1,6,58,36), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1930,5,4,7,0,0), -d(1930,10,5,6,0,0), -d(1931,5,3,7,0,0), -d(1931,10,4,6,0,0), -d(1932,5,1,7,0,0), -d(1932,10,2,6,0,0), -d(1933,5,7,7,0,0), -d(1933,10,1,6,0,0), -d(1934,5,6,7,0,0), -d(1934,10,7,6,0,0), -d(1937,4,11,7,0,0), -d(1937,10,10,6,0,0), -d(1938,4,10,7,0,0), -d(1938,10,2,6,0,0), -d(1939,4,9,7,0,0), -d(1939,10,8,6,0,0), -d(1940,4,14,7,0,0), -d(1940,10,13,6,0,0), -d(1941,4,13,7,0,0), -d(1941,10,12,6,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1946,4,14,9,0,0), -d(1946,10,13,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1948,4,25,9,0,0), -d(1948,9,26,8,0,0), -d(1949,4,24,9,0,0), -d(1949,9,25,8,0,0), -d(1950,4,30,9,0,0), -d(1950,9,24,8,0,0), -d(1951,4,29,9,0,0), -d(1951,9,30,8,0,0), -d(1952,4,27,9,0,0), -d(1952,9,28,8,0,0), -d(1953,4,26,9,0,0), -d(1953,9,27,8,0,0), -d(1954,4,25,9,0,0), -d(1954,9,26,8,0,0), -d(1955,4,24,9,0,0), -d(1955,9,25,8,0,0), -d(1956,4,29,9,0,0), -d(1956,9,30,8,0,0), -d(1957,4,28,9,0,0), -d(1957,9,29,8,0,0), -d(1959,4,26,9,0,0), -d(1959,10,25,8,0,0), -d(1960,4,24,9,0,0), - ] - - _transition_info = [ -i(-25140,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), - ] - -East_minus_Saskatchewan = East_minus_Saskatchewan() - diff --git a/modules/pytz/zoneinfo/Canada/Eastern.py b/modules/pytz/zoneinfo/Canada/Eastern.py deleted file mode 100644 index 4c30c5f9..00000000 --- a/modules/pytz/zoneinfo/Canada/Eastern.py +++ /dev/null @@ -1,484 +0,0 @@ -'''tzinfo timezone information for Canada/Eastern.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Eastern(DstTzInfo): - '''Canada/Eastern timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Eastern' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,7,0,0), -d(1918,10,31,6,0,0), -d(1919,3,31,4,30,0), -d(1919,10,26,4,0,0), -d(1920,5,2,7,0,0), -d(1920,9,26,4,0,0), -d(1921,5,15,7,0,0), -d(1921,9,15,6,0,0), -d(1922,5,14,7,0,0), -d(1922,9,17,6,0,0), -d(1923,5,13,7,0,0), -d(1923,9,16,6,0,0), -d(1924,5,4,7,0,0), -d(1924,9,21,6,0,0), -d(1925,5,3,7,0,0), -d(1925,9,20,6,0,0), -d(1926,5,2,7,0,0), -d(1926,9,19,6,0,0), -d(1927,5,1,7,0,0), -d(1927,9,25,6,0,0), -d(1928,4,29,7,0,0), -d(1928,9,30,6,0,0), -d(1929,4,28,7,0,0), -d(1929,9,29,6,0,0), -d(1930,4,27,7,0,0), -d(1930,9,28,6,0,0), -d(1931,4,26,7,0,0), -d(1931,9,27,6,0,0), -d(1932,5,1,7,0,0), -d(1932,9,25,6,0,0), -d(1933,4,30,7,0,0), -d(1933,10,1,6,0,0), -d(1934,4,29,7,0,0), -d(1934,9,30,6,0,0), -d(1935,4,28,7,0,0), -d(1935,9,29,6,0,0), -d(1936,4,26,7,0,0), -d(1936,9,27,6,0,0), -d(1937,4,25,7,0,0), -d(1937,9,26,6,0,0), -d(1938,4,24,7,0,0), -d(1938,9,25,6,0,0), -d(1939,4,30,7,0,0), -d(1939,9,24,6,0,0), -d(1940,4,28,7,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,5,0,0), -d(1947,9,28,4,0,0), -d(1948,4,25,5,0,0), -d(1948,9,26,4,0,0), -d(1949,4,24,5,0,0), -d(1949,11,27,4,0,0), -d(1950,4,30,7,0,0), -d(1950,11,26,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,9,25,6,0,0), -d(1956,4,29,7,0,0), -d(1956,9,30,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Eastern = Eastern() - diff --git a/modules/pytz/zoneinfo/Canada/Mountain.py b/modules/pytz/zoneinfo/Canada/Mountain.py deleted file mode 100644 index 375cafdf..00000000 --- a/modules/pytz/zoneinfo/Canada/Mountain.py +++ /dev/null @@ -1,328 +0,0 @@ -'''tzinfo timezone information for Canada/Mountain.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mountain(DstTzInfo): - '''Canada/Mountain timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Mountain' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,9,1,7,33,52), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1919,4,13,9,0,0), -d(1919,5,27,8,0,0), -d(1920,4,25,9,0,0), -d(1920,10,31,8,0,0), -d(1921,4,24,9,0,0), -d(1921,9,25,8,0,0), -d(1922,4,30,9,0,0), -d(1922,9,24,8,0,0), -d(1923,4,29,9,0,0), -d(1923,9,30,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,4,28,9,0,0), -d(1974,10,27,8,0,0), -d(1975,4,27,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-27240,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Mountain = Mountain() - diff --git a/modules/pytz/zoneinfo/Canada/Newfoundland.py b/modules/pytz/zoneinfo/Canada/Newfoundland.py deleted file mode 100644 index e019b0c3..00000000 --- a/modules/pytz/zoneinfo/Canada/Newfoundland.py +++ /dev/null @@ -1,496 +0,0 @@ -'''tzinfo timezone information for Canada/Newfoundland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Newfoundland(DstTzInfo): - '''Canada/Newfoundland timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Newfoundland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,4,8,5,30,52), -d(1917,9,17,4,30,52), -d(1918,4,14,5,30,52), -d(1918,10,31,4,30,52), -d(1919,5,6,2,30,52), -d(1919,8,13,1,30,52), -d(1920,5,3,2,30,52), -d(1920,11,1,1,30,52), -d(1921,5,2,2,30,52), -d(1921,10,31,1,30,52), -d(1922,5,8,2,30,52), -d(1922,10,30,1,30,52), -d(1923,5,7,2,30,52), -d(1923,10,29,1,30,52), -d(1924,5,5,2,30,52), -d(1924,10,27,1,30,52), -d(1925,5,4,2,30,52), -d(1925,10,26,1,30,52), -d(1926,5,3,2,30,52), -d(1926,11,1,1,30,52), -d(1927,5,2,2,30,52), -d(1927,10,31,1,30,52), -d(1928,5,7,2,30,52), -d(1928,10,29,1,30,52), -d(1929,5,6,2,30,52), -d(1929,10,28,1,30,52), -d(1930,5,5,2,30,52), -d(1930,10,27,1,30,52), -d(1931,5,4,2,30,52), -d(1931,10,26,1,30,52), -d(1932,5,2,2,30,52), -d(1932,10,31,1,30,52), -d(1933,5,8,2,30,52), -d(1933,10,30,1,30,52), -d(1934,5,7,2,30,52), -d(1934,10,29,1,30,52), -d(1935,3,30,3,30,52), -d(1935,5,6,2,30,0), -d(1935,10,28,1,30,0), -d(1936,5,11,3,30,0), -d(1936,10,5,2,30,0), -d(1937,5,10,3,30,0), -d(1937,10,4,2,30,0), -d(1938,5,9,3,30,0), -d(1938,10,3,2,30,0), -d(1939,5,15,3,30,0), -d(1939,10,2,2,30,0), -d(1940,5,13,3,30,0), -d(1940,10,7,2,30,0), -d(1941,5,12,3,30,0), -d(1941,10,6,2,30,0), -d(1942,5,11,3,30,0), -d(1945,8,14,23,0,0), -d(1945,9,30,4,30,0), -d(1946,5,12,5,30,0), -d(1946,10,6,4,30,0), -d(1947,5,11,5,30,0), -d(1947,10,5,4,30,0), -d(1948,5,9,5,30,0), -d(1948,10,3,4,30,0), -d(1949,5,8,5,30,0), -d(1949,10,2,4,30,0), -d(1950,5,14,5,30,0), -d(1950,10,8,4,30,0), -d(1951,4,29,5,30,0), -d(1951,9,30,4,30,0), -d(1952,4,27,5,30,0), -d(1952,9,28,4,30,0), -d(1953,4,26,5,30,0), -d(1953,9,27,4,30,0), -d(1954,4,25,5,30,0), -d(1954,9,26,4,30,0), -d(1955,4,24,5,30,0), -d(1955,9,25,4,30,0), -d(1956,4,29,5,30,0), -d(1956,9,30,4,30,0), -d(1957,4,28,5,30,0), -d(1957,9,29,4,30,0), -d(1958,4,27,5,30,0), -d(1958,9,28,4,30,0), -d(1959,4,26,5,30,0), -d(1959,9,27,4,30,0), -d(1960,4,24,5,30,0), -d(1960,10,30,4,30,0), -d(1961,4,30,5,30,0), -d(1961,10,29,4,30,0), -d(1962,4,29,5,30,0), -d(1962,10,28,4,30,0), -d(1963,4,28,5,30,0), -d(1963,10,27,4,30,0), -d(1964,4,26,5,30,0), -d(1964,10,25,4,30,0), -d(1965,4,25,5,30,0), -d(1965,10,31,4,30,0), -d(1966,4,24,5,30,0), -d(1966,10,30,4,30,0), -d(1967,4,30,5,30,0), -d(1967,10,29,4,30,0), -d(1968,4,28,5,30,0), -d(1968,10,27,4,30,0), -d(1969,4,27,5,30,0), -d(1969,10,26,4,30,0), -d(1970,4,26,5,30,0), -d(1970,10,25,4,30,0), -d(1971,4,25,5,30,0), -d(1971,10,31,4,30,0), -d(1972,4,30,5,30,0), -d(1972,10,29,4,30,0), -d(1973,4,29,5,30,0), -d(1973,10,28,4,30,0), -d(1974,4,28,5,30,0), -d(1974,10,27,4,30,0), -d(1975,4,27,5,30,0), -d(1975,10,26,4,30,0), -d(1976,4,25,5,30,0), -d(1976,10,31,4,30,0), -d(1977,4,24,5,30,0), -d(1977,10,30,4,30,0), -d(1978,4,30,5,30,0), -d(1978,10,29,4,30,0), -d(1979,4,29,5,30,0), -d(1979,10,28,4,30,0), -d(1980,4,27,5,30,0), -d(1980,10,26,4,30,0), -d(1981,4,26,5,30,0), -d(1981,10,25,4,30,0), -d(1982,4,25,5,30,0), -d(1982,10,31,4,30,0), -d(1983,4,24,5,30,0), -d(1983,10,30,4,30,0), -d(1984,4,29,5,30,0), -d(1984,10,28,4,30,0), -d(1985,4,28,5,30,0), -d(1985,10,27,4,30,0), -d(1986,4,27,5,30,0), -d(1986,10,26,4,30,0), -d(1987,4,5,3,31,0), -d(1987,10,25,2,31,0), -d(1988,4,3,3,31,0), -d(1988,10,30,1,31,0), -d(1989,4,2,3,31,0), -d(1989,10,29,2,31,0), -d(1990,4,1,3,31,0), -d(1990,10,28,2,31,0), -d(1991,4,7,3,31,0), -d(1991,10,27,2,31,0), -d(1992,4,5,3,31,0), -d(1992,10,25,2,31,0), -d(1993,4,4,3,31,0), -d(1993,10,31,2,31,0), -d(1994,4,3,3,31,0), -d(1994,10,30,2,31,0), -d(1995,4,2,3,31,0), -d(1995,10,29,2,31,0), -d(1996,4,7,3,31,0), -d(1996,10,27,2,31,0), -d(1997,4,6,3,31,0), -d(1997,10,26,2,31,0), -d(1998,4,5,3,31,0), -d(1998,10,25,2,31,0), -d(1999,4,4,3,31,0), -d(1999,10,31,2,31,0), -d(2000,4,2,3,31,0), -d(2000,10,29,2,31,0), -d(2001,4,1,3,31,0), -d(2001,10,28,2,31,0), -d(2002,4,7,3,31,0), -d(2002,10,27,2,31,0), -d(2003,4,6,3,31,0), -d(2003,10,26,2,31,0), -d(2004,4,4,3,31,0), -d(2004,10,31,2,31,0), -d(2005,4,3,3,31,0), -d(2005,10,30,2,31,0), -d(2006,4,2,3,31,0), -d(2006,10,29,2,31,0), -d(2007,4,1,3,31,0), -d(2007,10,28,2,31,0), -d(2008,4,6,3,31,0), -d(2008,10,26,2,31,0), -d(2009,4,5,3,31,0), -d(2009,10,25,2,31,0), -d(2010,4,4,3,31,0), -d(2010,10,31,2,31,0), -d(2011,4,3,3,31,0), -d(2011,10,30,2,31,0), -d(2012,4,1,3,31,0), -d(2012,10,28,2,31,0), -d(2013,4,7,3,31,0), -d(2013,10,27,2,31,0), -d(2014,4,6,3,31,0), -d(2014,10,26,2,31,0), -d(2015,4,5,3,31,0), -d(2015,10,25,2,31,0), -d(2016,4,3,3,31,0), -d(2016,10,30,2,31,0), -d(2017,4,2,3,31,0), -d(2017,10,29,2,31,0), -d(2018,4,1,3,31,0), -d(2018,10,28,2,31,0), -d(2019,4,7,3,31,0), -d(2019,10,27,2,31,0), -d(2020,4,5,3,31,0), -d(2020,10,25,2,31,0), -d(2021,4,4,3,31,0), -d(2021,10,31,2,31,0), -d(2022,4,3,3,31,0), -d(2022,10,30,2,31,0), -d(2023,4,2,3,31,0), -d(2023,10,29,2,31,0), -d(2024,4,7,3,31,0), -d(2024,10,27,2,31,0), -d(2025,4,6,3,31,0), -d(2025,10,26,2,31,0), -d(2026,4,5,3,31,0), -d(2026,10,25,2,31,0), -d(2027,4,4,3,31,0), -d(2027,10,31,2,31,0), -d(2028,4,2,3,31,0), -d(2028,10,29,2,31,0), -d(2029,4,1,3,31,0), -d(2029,10,28,2,31,0), -d(2030,4,7,3,31,0), -d(2030,10,27,2,31,0), -d(2031,4,6,3,31,0), -d(2031,10,26,2,31,0), -d(2032,4,4,3,31,0), -d(2032,10,31,2,31,0), -d(2033,4,3,3,31,0), -d(2033,10,30,2,31,0), -d(2034,4,2,3,31,0), -d(2034,10,29,2,31,0), -d(2035,4,1,3,31,0), -d(2035,10,28,2,31,0), -d(2036,4,6,3,31,0), -d(2036,10,26,2,31,0), -d(2037,4,5,3,31,0), -d(2037,10,25,2,31,0), - ] - - _transition_info = [ -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-9060,3600,'NDT'), -i(-12660,0,'NST'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NWT'), -i(-9000,3600,'NPT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-5400,7200,'NDDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), -i(-9000,3600,'NDT'), -i(-12600,0,'NST'), - ] - -Newfoundland = Newfoundland() - diff --git a/modules/pytz/zoneinfo/Canada/Pacific.py b/modules/pytz/zoneinfo/Canada/Pacific.py deleted file mode 100644 index d97f6324..00000000 --- a/modules/pytz/zoneinfo/Canada/Pacific.py +++ /dev/null @@ -1,398 +0,0 @@ -'''tzinfo timezone information for Canada/Pacific.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pacific(DstTzInfo): - '''Canada/Pacific timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Pacific' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,10,0,0), -d(1918,10,31,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1946,4,28,10,0,0), -d(1946,10,13,9,0,0), -d(1947,4,27,10,0,0), -d(1947,9,28,9,0,0), -d(1948,4,25,10,0,0), -d(1948,9,26,9,0,0), -d(1949,4,24,10,0,0), -d(1949,9,25,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,4,28,10,0,0), -d(1974,10,27,9,0,0), -d(1975,4,27,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Pacific = Pacific() - diff --git a/modules/pytz/zoneinfo/Canada/Saskatchewan.py b/modules/pytz/zoneinfo/Canada/Saskatchewan.py deleted file mode 100644 index 33c7cc09..00000000 --- a/modules/pytz/zoneinfo/Canada/Saskatchewan.py +++ /dev/null @@ -1,126 +0,0 @@ -'''tzinfo timezone information for Canada/Saskatchewan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Saskatchewan(DstTzInfo): - '''Canada/Saskatchewan timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Saskatchewan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,9,1,6,58,36), -d(1918,4,14,9,0,0), -d(1918,10,31,8,0,0), -d(1930,5,4,7,0,0), -d(1930,10,5,6,0,0), -d(1931,5,3,7,0,0), -d(1931,10,4,6,0,0), -d(1932,5,1,7,0,0), -d(1932,10,2,6,0,0), -d(1933,5,7,7,0,0), -d(1933,10,1,6,0,0), -d(1934,5,6,7,0,0), -d(1934,10,7,6,0,0), -d(1937,4,11,7,0,0), -d(1937,10,10,6,0,0), -d(1938,4,10,7,0,0), -d(1938,10,2,6,0,0), -d(1939,4,9,7,0,0), -d(1939,10,8,6,0,0), -d(1940,4,14,7,0,0), -d(1940,10,13,6,0,0), -d(1941,4,13,7,0,0), -d(1941,10,12,6,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1946,4,14,9,0,0), -d(1946,10,13,8,0,0), -d(1947,4,27,9,0,0), -d(1947,9,28,8,0,0), -d(1948,4,25,9,0,0), -d(1948,9,26,8,0,0), -d(1949,4,24,9,0,0), -d(1949,9,25,8,0,0), -d(1950,4,30,9,0,0), -d(1950,9,24,8,0,0), -d(1951,4,29,9,0,0), -d(1951,9,30,8,0,0), -d(1952,4,27,9,0,0), -d(1952,9,28,8,0,0), -d(1953,4,26,9,0,0), -d(1953,9,27,8,0,0), -d(1954,4,25,9,0,0), -d(1954,9,26,8,0,0), -d(1955,4,24,9,0,0), -d(1955,9,25,8,0,0), -d(1956,4,29,9,0,0), -d(1956,9,30,8,0,0), -d(1957,4,28,9,0,0), -d(1957,9,29,8,0,0), -d(1959,4,26,9,0,0), -d(1959,10,25,8,0,0), -d(1960,4,24,9,0,0), - ] - - _transition_info = [ -i(-25140,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), - ] - -Saskatchewan = Saskatchewan() - diff --git a/modules/pytz/zoneinfo/Canada/Yukon.py b/modules/pytz/zoneinfo/Canada/Yukon.py deleted file mode 100644 index c367d938..00000000 --- a/modules/pytz/zoneinfo/Canada/Yukon.py +++ /dev/null @@ -1,272 +0,0 @@ -'''tzinfo timezone information for Canada/Yukon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Yukon(DstTzInfo): - '''Canada/Yukon timezone definition. See datetime.tzinfo for details''' - - zone = 'Canada/Yukon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,14,11,0,0), -d(1918,10,27,10,0,0), -d(1919,5,25,11,0,0), -d(1919,11,1,8,0,0), -d(1942,2,9,11,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,10,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,9,0,0), -d(1966,7,1,11,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YDT'), -i(-32400,0,'YST'), -i(-28800,3600,'YWT'), -i(-28800,3600,'YPT'), -i(-32400,0,'YST'), -i(-25200,7200,'YDDT'), -i(-32400,0,'YST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Yukon = Yukon() - diff --git a/modules/pytz/zoneinfo/Canada/__init__.py b/modules/pytz/zoneinfo/Canada/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Chile/Continental.py b/modules/pytz/zoneinfo/Chile/Continental.py deleted file mode 100644 index 84dde516..00000000 --- a/modules/pytz/zoneinfo/Chile/Continental.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for Chile/Continental.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Continental(DstTzInfo): - '''Chile/Continental timezone definition. See datetime.tzinfo for details''' - - zone = 'Chile/Continental' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,1,1,4,42,40), -d(1918,9,1,5,0,0), -d(1919,7,2,4,0,0), -d(1927,9,1,5,0,0), -d(1928,4,1,4,0,0), -d(1928,9,1,5,0,0), -d(1929,4,1,4,0,0), -d(1929,9,1,5,0,0), -d(1930,4,1,4,0,0), -d(1930,9,1,5,0,0), -d(1931,4,1,4,0,0), -d(1931,9,1,5,0,0), -d(1932,4,1,4,0,0), -d(1932,9,1,5,0,0), -d(1966,10,9,4,0,0), -d(1967,3,12,3,0,0), -d(1967,10,15,4,0,0), -d(1968,3,10,3,0,0), -d(1968,10,13,4,0,0), -d(1969,3,9,3,0,0), -d(1969,10,12,4,0,0), -d(1970,3,15,3,0,0), -d(1970,10,11,4,0,0), -d(1971,3,14,3,0,0), -d(1971,10,10,4,0,0), -d(1972,3,12,3,0,0), -d(1972,10,15,4,0,0), -d(1973,3,11,3,0,0), -d(1973,10,14,4,0,0), -d(1974,3,10,3,0,0), -d(1974,10,13,4,0,0), -d(1975,3,9,3,0,0), -d(1975,10,12,4,0,0), -d(1976,3,14,3,0,0), -d(1976,10,10,4,0,0), -d(1977,3,13,3,0,0), -d(1977,10,9,4,0,0), -d(1978,3,12,3,0,0), -d(1978,10,15,4,0,0), -d(1979,3,11,3,0,0), -d(1979,10,14,4,0,0), -d(1980,3,9,3,0,0), -d(1980,10,12,4,0,0), -d(1981,3,15,3,0,0), -d(1981,10,11,4,0,0), -d(1982,3,14,3,0,0), -d(1982,10,10,4,0,0), -d(1983,3,13,3,0,0), -d(1983,10,9,4,0,0), -d(1984,3,11,3,0,0), -d(1984,10,14,4,0,0), -d(1985,3,10,3,0,0), -d(1985,10,13,4,0,0), -d(1986,3,9,3,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,3,0,0), -d(1987,10,11,4,0,0), -d(1988,3,13,3,0,0), -d(1988,10,9,4,0,0), -d(1989,3,12,3,0,0), -d(1989,10,15,4,0,0), -d(1990,3,11,3,0,0), -d(1990,10,14,4,0,0), -d(1991,3,10,3,0,0), -d(1991,10,13,4,0,0), -d(1992,3,15,3,0,0), -d(1992,10,11,4,0,0), -d(1993,3,14,3,0,0), -d(1993,10,10,4,0,0), -d(1994,3,13,3,0,0), -d(1994,10,9,4,0,0), -d(1995,3,12,3,0,0), -d(1995,10,15,4,0,0), -d(1996,3,10,3,0,0), -d(1996,10,13,4,0,0), -d(1997,3,9,3,0,0), -d(1997,10,12,4,0,0), -d(1998,3,15,3,0,0), -d(1998,9,27,4,0,0), -d(1999,4,4,3,0,0), -d(1999,10,10,4,0,0), -d(2000,3,12,3,0,0), -d(2000,10,15,4,0,0), -d(2001,3,11,3,0,0), -d(2001,10,14,4,0,0), -d(2002,3,10,3,0,0), -d(2002,10,13,4,0,0), -d(2003,3,9,3,0,0), -d(2003,10,12,4,0,0), -d(2004,3,14,3,0,0), -d(2004,10,10,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,9,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,14,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,12,4,0,0), -d(2009,3,15,3,0,0), -d(2009,10,11,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,10,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,9,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,14,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,13,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,12,4,0,0), -d(2015,3,15,3,0,0), -d(2015,10,11,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,9,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,14,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,13,4,0,0), -d(2020,3,15,3,0,0), -d(2020,10,11,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,10,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,9,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,13,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,12,4,0,0), -d(2026,3,15,3,0,0), -d(2026,10,11,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,10,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,14,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,13,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,12,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,10,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,9,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,14,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,12,4,0,0), -d(2037,3,15,3,0,0), -d(2037,10,11,4,0,0), - ] - - _transition_info = [ -i(-16980,0,'SMT'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,3600,'CLST'), -i(-18000,0,'CLT'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), -i(-14400,0,'CLT'), -i(-10800,3600,'CLST'), - ] - -Continental = Continental() - diff --git a/modules/pytz/zoneinfo/Chile/EasterIsland.py b/modules/pytz/zoneinfo/Chile/EasterIsland.py deleted file mode 100644 index 97912ecc..00000000 --- a/modules/pytz/zoneinfo/Chile/EasterIsland.py +++ /dev/null @@ -1,310 +0,0 @@ -'''tzinfo timezone information for Chile/EasterIsland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class EasterIsland(DstTzInfo): - '''Chile/EasterIsland timezone definition. See datetime.tzinfo for details''' - - zone = 'Chile/EasterIsland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1932,9,1,7,17,28), -d(1966,10,9,4,0,0), -d(1967,3,12,3,0,0), -d(1967,10,15,4,0,0), -d(1968,3,10,3,0,0), -d(1968,10,13,4,0,0), -d(1969,3,9,3,0,0), -d(1969,10,12,4,0,0), -d(1970,3,15,3,0,0), -d(1970,10,11,4,0,0), -d(1971,3,14,3,0,0), -d(1971,10,10,4,0,0), -d(1972,3,12,3,0,0), -d(1972,10,15,4,0,0), -d(1973,3,11,3,0,0), -d(1973,10,14,4,0,0), -d(1974,3,10,3,0,0), -d(1974,10,13,4,0,0), -d(1975,3,9,3,0,0), -d(1975,10,12,4,0,0), -d(1976,3,14,3,0,0), -d(1976,10,10,4,0,0), -d(1977,3,13,3,0,0), -d(1977,10,9,4,0,0), -d(1978,3,12,3,0,0), -d(1978,10,15,4,0,0), -d(1979,3,11,3,0,0), -d(1979,10,14,4,0,0), -d(1980,3,9,3,0,0), -d(1980,10,12,4,0,0), -d(1981,3,15,3,0,0), -d(1981,10,11,4,0,0), -d(1982,3,14,3,0,0), -d(1982,3,14,7,0,0), -d(1982,10,10,4,0,0), -d(1983,3,13,3,0,0), -d(1983,10,9,4,0,0), -d(1984,3,11,3,0,0), -d(1984,10,14,4,0,0), -d(1985,3,10,3,0,0), -d(1985,10,13,4,0,0), -d(1986,3,9,3,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,3,0,0), -d(1987,10,11,4,0,0), -d(1988,3,13,3,0,0), -d(1988,10,9,4,0,0), -d(1989,3,12,3,0,0), -d(1989,10,15,4,0,0), -d(1990,3,11,3,0,0), -d(1990,10,14,4,0,0), -d(1991,3,10,3,0,0), -d(1991,10,13,4,0,0), -d(1992,3,15,3,0,0), -d(1992,10,11,4,0,0), -d(1993,3,14,3,0,0), -d(1993,10,10,4,0,0), -d(1994,3,13,3,0,0), -d(1994,10,9,4,0,0), -d(1995,3,12,3,0,0), -d(1995,10,15,4,0,0), -d(1996,3,10,3,0,0), -d(1996,10,13,4,0,0), -d(1997,3,9,3,0,0), -d(1997,10,12,4,0,0), -d(1998,3,15,3,0,0), -d(1998,9,27,4,0,0), -d(1999,4,4,3,0,0), -d(1999,10,10,4,0,0), -d(2000,3,12,3,0,0), -d(2000,10,15,4,0,0), -d(2001,3,11,3,0,0), -d(2001,10,14,4,0,0), -d(2002,3,10,3,0,0), -d(2002,10,13,4,0,0), -d(2003,3,9,3,0,0), -d(2003,10,12,4,0,0), -d(2004,3,14,3,0,0), -d(2004,10,10,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,9,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,14,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,12,4,0,0), -d(2009,3,15,3,0,0), -d(2009,10,11,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,10,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,9,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,14,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,13,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,12,4,0,0), -d(2015,3,15,3,0,0), -d(2015,10,11,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,9,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,14,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,13,4,0,0), -d(2020,3,15,3,0,0), -d(2020,10,11,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,10,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,9,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,13,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,12,4,0,0), -d(2026,3,15,3,0,0), -d(2026,10,11,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,10,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,14,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,13,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,12,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,10,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,9,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,14,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,12,4,0,0), -d(2037,3,15,3,0,0), -d(2037,10,11,4,0,0), - ] - - _transition_info = [ -i(-26220,0,'MMT'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), - ] - -EasterIsland = EasterIsland() - diff --git a/modules/pytz/zoneinfo/Chile/__init__.py b/modules/pytz/zoneinfo/Chile/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Cuba.py b/modules/pytz/zoneinfo/Cuba.py deleted file mode 100644 index 5665bc4b..00000000 --- a/modules/pytz/zoneinfo/Cuba.py +++ /dev/null @@ -1,330 +0,0 @@ -'''tzinfo timezone information for Cuba.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Cuba(DstTzInfo): - '''Cuba timezone definition. See datetime.tzinfo for details''' - - zone = 'Cuba' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1925,7,19,17,29,36), -d(1928,6,10,5,0,0), -d(1928,10,10,4,0,0), -d(1940,6,2,5,0,0), -d(1940,9,1,4,0,0), -d(1941,6,1,5,0,0), -d(1941,9,7,4,0,0), -d(1942,6,7,5,0,0), -d(1942,9,6,4,0,0), -d(1945,6,3,5,0,0), -d(1945,9,2,4,0,0), -d(1946,6,2,5,0,0), -d(1946,9,1,4,0,0), -d(1965,6,1,5,0,0), -d(1965,9,30,4,0,0), -d(1966,5,29,5,0,0), -d(1966,10,2,4,0,0), -d(1967,4,8,5,0,0), -d(1967,9,10,4,0,0), -d(1968,4,14,5,0,0), -d(1968,9,8,4,0,0), -d(1969,4,27,5,0,0), -d(1969,10,26,4,0,0), -d(1970,4,26,5,0,0), -d(1970,10,25,4,0,0), -d(1971,4,25,5,0,0), -d(1971,10,31,4,0,0), -d(1972,4,30,5,0,0), -d(1972,10,8,4,0,0), -d(1973,4,29,5,0,0), -d(1973,10,8,4,0,0), -d(1974,4,28,5,0,0), -d(1974,10,8,4,0,0), -d(1975,4,27,5,0,0), -d(1975,10,26,4,0,0), -d(1976,4,25,5,0,0), -d(1976,10,31,4,0,0), -d(1977,4,24,5,0,0), -d(1977,10,30,4,0,0), -d(1978,5,7,5,0,0), -d(1978,10,8,4,0,0), -d(1979,3,18,5,0,0), -d(1979,10,14,4,0,0), -d(1980,3,16,5,0,0), -d(1980,10,12,4,0,0), -d(1981,5,10,5,0,0), -d(1981,10,11,4,0,0), -d(1982,5,9,5,0,0), -d(1982,10,10,4,0,0), -d(1983,5,8,5,0,0), -d(1983,10,9,4,0,0), -d(1984,5,6,5,0,0), -d(1984,10,14,4,0,0), -d(1985,5,5,5,0,0), -d(1985,10,13,4,0,0), -d(1986,3,16,5,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,5,0,0), -d(1987,10,11,4,0,0), -d(1988,3,20,5,0,0), -d(1988,10,9,4,0,0), -d(1989,3,19,5,0,0), -d(1989,10,8,4,0,0), -d(1990,4,1,5,0,0), -d(1990,10,14,4,0,0), -d(1991,4,7,5,0,0), -d(1991,10,13,5,0,0), -d(1992,4,5,5,0,0), -d(1992,10,11,5,0,0), -d(1993,4,4,5,0,0), -d(1993,10,10,5,0,0), -d(1994,4,3,5,0,0), -d(1994,10,9,5,0,0), -d(1995,4,2,5,0,0), -d(1995,10,8,5,0,0), -d(1996,4,7,5,0,0), -d(1996,10,6,5,0,0), -d(1997,4,6,5,0,0), -d(1997,10,12,5,0,0), -d(1998,3,29,5,0,0), -d(1998,10,25,5,0,0), -d(1999,3,28,5,0,0), -d(1999,10,31,5,0,0), -d(2000,4,2,5,0,0), -d(2000,10,29,5,0,0), -d(2001,4,1,5,0,0), -d(2001,10,28,5,0,0), -d(2002,4,7,5,0,0), -d(2002,10,27,5,0,0), -d(2003,4,6,5,0,0), -d(2003,10,26,5,0,0), -d(2004,4,4,5,0,0), -d(2006,10,29,5,0,0), -d(2007,4,1,5,0,0), -d(2007,10,28,5,0,0), -d(2008,4,6,5,0,0), -d(2008,10,26,5,0,0), -d(2009,4,5,5,0,0), -d(2009,10,25,5,0,0), -d(2010,4,4,5,0,0), -d(2010,10,31,5,0,0), -d(2011,4,3,5,0,0), -d(2011,10,30,5,0,0), -d(2012,4,1,5,0,0), -d(2012,10,28,5,0,0), -d(2013,4,7,5,0,0), -d(2013,10,27,5,0,0), -d(2014,4,6,5,0,0), -d(2014,10,26,5,0,0), -d(2015,4,5,5,0,0), -d(2015,10,25,5,0,0), -d(2016,4,3,5,0,0), -d(2016,10,30,5,0,0), -d(2017,4,2,5,0,0), -d(2017,10,29,5,0,0), -d(2018,4,1,5,0,0), -d(2018,10,28,5,0,0), -d(2019,4,7,5,0,0), -d(2019,10,27,5,0,0), -d(2020,4,5,5,0,0), -d(2020,10,25,5,0,0), -d(2021,4,4,5,0,0), -d(2021,10,31,5,0,0), -d(2022,4,3,5,0,0), -d(2022,10,30,5,0,0), -d(2023,4,2,5,0,0), -d(2023,10,29,5,0,0), -d(2024,4,7,5,0,0), -d(2024,10,27,5,0,0), -d(2025,4,6,5,0,0), -d(2025,10,26,5,0,0), -d(2026,4,5,5,0,0), -d(2026,10,25,5,0,0), -d(2027,4,4,5,0,0), -d(2027,10,31,5,0,0), -d(2028,4,2,5,0,0), -d(2028,10,29,5,0,0), -d(2029,4,1,5,0,0), -d(2029,10,28,5,0,0), -d(2030,4,7,5,0,0), -d(2030,10,27,5,0,0), -d(2031,4,6,5,0,0), -d(2031,10,26,5,0,0), -d(2032,4,4,5,0,0), -d(2032,10,31,5,0,0), -d(2033,4,3,5,0,0), -d(2033,10,30,5,0,0), -d(2034,4,2,5,0,0), -d(2034,10,29,5,0,0), -d(2035,4,1,5,0,0), -d(2035,10,28,5,0,0), -d(2036,4,6,5,0,0), -d(2036,10,26,5,0,0), -d(2037,4,5,5,0,0), -d(2037,10,25,5,0,0), - ] - - _transition_info = [ -i(-19800,0,'HMT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), -i(-14400,3600,'CDT'), -i(-18000,0,'CST'), - ] - -Cuba = Cuba() - diff --git a/modules/pytz/zoneinfo/EET.py b/modules/pytz/zoneinfo/EET.py deleted file mode 100644 index 9f22313f..00000000 --- a/modules/pytz/zoneinfo/EET.py +++ /dev/null @@ -1,264 +0,0 @@ -'''tzinfo timezone information for EET.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class EET(DstTzInfo): - '''EET timezone definition. See datetime.tzinfo for details''' - - zone = 'EET' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -EET = EET() - diff --git a/modules/pytz/zoneinfo/EST.py b/modules/pytz/zoneinfo/EST.py deleted file mode 100644 index cf965783..00000000 --- a/modules/pytz/zoneinfo/EST.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for EST.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class EST(StaticTzInfo): - '''EST timezone definition. See datetime.tzinfo for details''' - zone = 'EST' - _utcoffset = timedelta(seconds=-18000) - _tzname = 'EST' - -EST = EST() - diff --git a/modules/pytz/zoneinfo/EST5EDT.py b/modules/pytz/zoneinfo/EST5EDT.py deleted file mode 100644 index f84da28c..00000000 --- a/modules/pytz/zoneinfo/EST5EDT.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for EST5EDT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class EST5EDT(DstTzInfo): - '''EST5EDT timezone definition. See datetime.tzinfo for details''' - - zone = 'EST5EDT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,7,0,0), -d(1918,10,27,6,0,0), -d(1919,3,30,7,0,0), -d(1919,10,26,6,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -EST5EDT = EST5EDT() - diff --git a/modules/pytz/zoneinfo/Egypt.py b/modules/pytz/zoneinfo/Egypt.py deleted file mode 100644 index 93cc6a86..00000000 --- a/modules/pytz/zoneinfo/Egypt.py +++ /dev/null @@ -1,368 +0,0 @@ -'''tzinfo timezone information for Egypt.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Egypt(DstTzInfo): - '''Egypt timezone definition. See datetime.tzinfo for details''' - - zone = 'Egypt' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,7,14,22,0,0), -d(1940,9,30,21,0,0), -d(1941,4,14,22,0,0), -d(1941,9,15,21,0,0), -d(1942,3,31,22,0,0), -d(1942,10,26,21,0,0), -d(1943,3,31,22,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,21,0,0), -d(1957,5,9,22,0,0), -d(1957,9,30,21,0,0), -d(1958,4,30,22,0,0), -d(1958,9,30,21,0,0), -d(1959,4,30,23,0,0), -d(1959,9,30,0,0,0), -d(1960,4,30,23,0,0), -d(1960,9,30,0,0,0), -d(1961,4,30,23,0,0), -d(1961,9,30,0,0,0), -d(1962,4,30,23,0,0), -d(1962,9,30,0,0,0), -d(1963,4,30,23,0,0), -d(1963,9,30,0,0,0), -d(1964,4,30,23,0,0), -d(1964,9,30,0,0,0), -d(1965,4,30,23,0,0), -d(1965,9,30,0,0,0), -d(1966,4,30,23,0,0), -d(1966,10,1,0,0,0), -d(1967,4,30,23,0,0), -d(1967,10,1,0,0,0), -d(1968,4,30,23,0,0), -d(1968,10,1,0,0,0), -d(1969,4,30,23,0,0), -d(1969,10,1,0,0,0), -d(1970,4,30,23,0,0), -d(1970,10,1,0,0,0), -d(1971,4,30,23,0,0), -d(1971,10,1,0,0,0), -d(1972,4,30,23,0,0), -d(1972,10,1,0,0,0), -d(1973,4,30,23,0,0), -d(1973,10,1,0,0,0), -d(1974,4,30,23,0,0), -d(1974,10,1,0,0,0), -d(1975,4,30,23,0,0), -d(1975,10,1,0,0,0), -d(1976,4,30,23,0,0), -d(1976,10,1,0,0,0), -d(1977,4,30,23,0,0), -d(1977,10,1,0,0,0), -d(1978,4,30,23,0,0), -d(1978,10,1,0,0,0), -d(1979,4,30,23,0,0), -d(1979,10,1,0,0,0), -d(1980,4,30,23,0,0), -d(1980,10,1,0,0,0), -d(1981,4,30,23,0,0), -d(1981,10,1,0,0,0), -d(1982,7,24,23,0,0), -d(1982,10,1,0,0,0), -d(1983,7,11,23,0,0), -d(1983,10,1,0,0,0), -d(1984,4,30,23,0,0), -d(1984,10,1,0,0,0), -d(1985,4,30,23,0,0), -d(1985,10,1,0,0,0), -d(1986,4,30,23,0,0), -d(1986,10,1,0,0,0), -d(1987,4,30,23,0,0), -d(1987,10,1,0,0,0), -d(1988,4,30,23,0,0), -d(1988,10,1,0,0,0), -d(1989,5,5,23,0,0), -d(1989,10,1,0,0,0), -d(1990,4,30,23,0,0), -d(1990,10,1,0,0,0), -d(1991,4,30,23,0,0), -d(1991,10,1,0,0,0), -d(1992,4,30,23,0,0), -d(1992,10,1,0,0,0), -d(1993,4,30,23,0,0), -d(1993,10,1,0,0,0), -d(1994,4,30,23,0,0), -d(1994,10,1,0,0,0), -d(1995,4,27,22,0,0), -d(1995,9,28,21,0,0), -d(1996,4,25,22,0,0), -d(1996,9,26,21,0,0), -d(1997,4,24,22,0,0), -d(1997,9,25,21,0,0), -d(1998,4,23,22,0,0), -d(1998,9,24,21,0,0), -d(1999,4,29,22,0,0), -d(1999,9,30,21,0,0), -d(2000,4,27,22,0,0), -d(2000,9,28,21,0,0), -d(2001,4,26,22,0,0), -d(2001,9,27,21,0,0), -d(2002,4,25,22,0,0), -d(2002,9,26,21,0,0), -d(2003,4,24,22,0,0), -d(2003,9,25,21,0,0), -d(2004,4,29,22,0,0), -d(2004,9,30,21,0,0), -d(2005,4,28,22,0,0), -d(2005,9,29,21,0,0), -d(2006,4,27,22,0,0), -d(2006,9,28,21,0,0), -d(2007,4,26,22,0,0), -d(2007,9,27,21,0,0), -d(2008,4,24,22,0,0), -d(2008,9,25,21,0,0), -d(2009,4,23,22,0,0), -d(2009,9,24,21,0,0), -d(2010,4,29,22,0,0), -d(2010,9,30,21,0,0), -d(2011,4,28,22,0,0), -d(2011,9,29,21,0,0), -d(2012,4,26,22,0,0), -d(2012,9,27,21,0,0), -d(2013,4,25,22,0,0), -d(2013,9,26,21,0,0), -d(2014,4,24,22,0,0), -d(2014,9,25,21,0,0), -d(2015,4,23,22,0,0), -d(2015,9,24,21,0,0), -d(2016,4,28,22,0,0), -d(2016,9,29,21,0,0), -d(2017,4,27,22,0,0), -d(2017,9,28,21,0,0), -d(2018,4,26,22,0,0), -d(2018,9,27,21,0,0), -d(2019,4,25,22,0,0), -d(2019,9,26,21,0,0), -d(2020,4,23,22,0,0), -d(2020,9,24,21,0,0), -d(2021,4,29,22,0,0), -d(2021,9,30,21,0,0), -d(2022,4,28,22,0,0), -d(2022,9,29,21,0,0), -d(2023,4,27,22,0,0), -d(2023,9,28,21,0,0), -d(2024,4,25,22,0,0), -d(2024,9,26,21,0,0), -d(2025,4,24,22,0,0), -d(2025,9,25,21,0,0), -d(2026,4,23,22,0,0), -d(2026,9,24,21,0,0), -d(2027,4,29,22,0,0), -d(2027,9,30,21,0,0), -d(2028,4,27,22,0,0), -d(2028,9,28,21,0,0), -d(2029,4,26,22,0,0), -d(2029,9,27,21,0,0), -d(2030,4,25,22,0,0), -d(2030,9,26,21,0,0), -d(2031,4,24,22,0,0), -d(2031,9,25,21,0,0), -d(2032,4,29,22,0,0), -d(2032,9,30,21,0,0), -d(2033,4,28,22,0,0), -d(2033,9,29,21,0,0), -d(2034,4,27,22,0,0), -d(2034,9,28,21,0,0), -d(2035,4,26,22,0,0), -d(2035,9,27,21,0,0), -d(2036,4,24,22,0,0), -d(2036,9,25,21,0,0), -d(2037,4,23,22,0,0), -d(2037,9,24,21,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Egypt = Egypt() - diff --git a/modules/pytz/zoneinfo/Eire.py b/modules/pytz/zoneinfo/Eire.py deleted file mode 100644 index eb7f4abe..00000000 --- a/modules/pytz/zoneinfo/Eire.py +++ /dev/null @@ -1,478 +0,0 @@ -'''tzinfo timezone information for Eire.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Eire(DstTzInfo): - '''Eire timezone definition. See datetime.tzinfo for details''' - - zone = 'Eire' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,25,21), -d(1916,10,1,2,25,21), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1921,12,6,0,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1946,10,6,1,0,0), -d(1947,3,16,2,0,0), -d(1947,11,2,1,0,0), -d(1948,4,18,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-1500,0,'DMT'), -i(2100,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(3600,0,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), - ] - -Eire = Eire() - diff --git a/modules/pytz/zoneinfo/Etc/GMT.py b/modules/pytz/zoneinfo/Etc/GMT.py deleted file mode 100644 index b91f301f..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT(StaticTzInfo): - '''Etc/GMT timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT = GMT() - diff --git a/modules/pytz/zoneinfo/Etc/GMT0.py b/modules/pytz/zoneinfo/Etc/GMT0.py deleted file mode 100644 index ce857ca0..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT0(StaticTzInfo): - '''Etc/GMT0 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT0 = GMT0() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_0.py b/modules/pytz/zoneinfo/Etc/GMT_minus_0.py deleted file mode 100644 index fb143c9a..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_0(StaticTzInfo): - '''Etc/GMT_minus_0 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT_minus_0 = GMT_minus_0() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_1.py b/modules/pytz/zoneinfo/Etc/GMT_minus_1.py deleted file mode 100644 index b280ae98..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_1.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_1.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_1(StaticTzInfo): - '''Etc/GMT_minus_1 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_1' - _utcoffset = timedelta(seconds=3600) - _tzname = 'GMT-1' - -GMT_minus_1 = GMT_minus_1() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_10.py b/modules/pytz/zoneinfo/Etc/GMT_minus_10.py deleted file mode 100644 index 4c97903f..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_10.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_10.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_10(StaticTzInfo): - '''Etc/GMT_minus_10 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_10' - _utcoffset = timedelta(seconds=36000) - _tzname = 'GMT-10' - -GMT_minus_10 = GMT_minus_10() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_11.py b/modules/pytz/zoneinfo/Etc/GMT_minus_11.py deleted file mode 100644 index 4f7d9d44..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_11.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_11.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_11(StaticTzInfo): - '''Etc/GMT_minus_11 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_11' - _utcoffset = timedelta(seconds=39600) - _tzname = 'GMT-11' - -GMT_minus_11 = GMT_minus_11() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_12.py b/modules/pytz/zoneinfo/Etc/GMT_minus_12.py deleted file mode 100644 index c542dbfe..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_12.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_12.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_12(StaticTzInfo): - '''Etc/GMT_minus_12 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_12' - _utcoffset = timedelta(seconds=43200) - _tzname = 'GMT-12' - -GMT_minus_12 = GMT_minus_12() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_13.py b/modules/pytz/zoneinfo/Etc/GMT_minus_13.py deleted file mode 100644 index 78e23fa8..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_13.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_13.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_13(StaticTzInfo): - '''Etc/GMT_minus_13 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_13' - _utcoffset = timedelta(seconds=46800) - _tzname = 'GMT-13' - -GMT_minus_13 = GMT_minus_13() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_14.py b/modules/pytz/zoneinfo/Etc/GMT_minus_14.py deleted file mode 100644 index b20f9859..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_14.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_14.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_14(StaticTzInfo): - '''Etc/GMT_minus_14 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_14' - _utcoffset = timedelta(seconds=50400) - _tzname = 'GMT-14' - -GMT_minus_14 = GMT_minus_14() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_2.py b/modules/pytz/zoneinfo/Etc/GMT_minus_2.py deleted file mode 100644 index 98aeabbc..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_2.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_2.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_2(StaticTzInfo): - '''Etc/GMT_minus_2 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_2' - _utcoffset = timedelta(seconds=7200) - _tzname = 'GMT-2' - -GMT_minus_2 = GMT_minus_2() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_3.py b/modules/pytz/zoneinfo/Etc/GMT_minus_3.py deleted file mode 100644 index a2d4cd50..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_3.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_3.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_3(StaticTzInfo): - '''Etc/GMT_minus_3 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_3' - _utcoffset = timedelta(seconds=10800) - _tzname = 'GMT-3' - -GMT_minus_3 = GMT_minus_3() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_4.py b/modules/pytz/zoneinfo/Etc/GMT_minus_4.py deleted file mode 100644 index 09575ac2..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_4.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_4.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_4(StaticTzInfo): - '''Etc/GMT_minus_4 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_4' - _utcoffset = timedelta(seconds=14400) - _tzname = 'GMT-4' - -GMT_minus_4 = GMT_minus_4() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_5.py b/modules/pytz/zoneinfo/Etc/GMT_minus_5.py deleted file mode 100644 index 4d93e313..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_5.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_5.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_5(StaticTzInfo): - '''Etc/GMT_minus_5 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_5' - _utcoffset = timedelta(seconds=18000) - _tzname = 'GMT-5' - -GMT_minus_5 = GMT_minus_5() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_6.py b/modules/pytz/zoneinfo/Etc/GMT_minus_6.py deleted file mode 100644 index 02612da4..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_6.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_6.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_6(StaticTzInfo): - '''Etc/GMT_minus_6 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_6' - _utcoffset = timedelta(seconds=21600) - _tzname = 'GMT-6' - -GMT_minus_6 = GMT_minus_6() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_7.py b/modules/pytz/zoneinfo/Etc/GMT_minus_7.py deleted file mode 100644 index b675a696..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_7.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_7.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_7(StaticTzInfo): - '''Etc/GMT_minus_7 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_7' - _utcoffset = timedelta(seconds=25200) - _tzname = 'GMT-7' - -GMT_minus_7 = GMT_minus_7() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_8.py b/modules/pytz/zoneinfo/Etc/GMT_minus_8.py deleted file mode 100644 index 34578205..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_8.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_8.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_8(StaticTzInfo): - '''Etc/GMT_minus_8 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_8' - _utcoffset = timedelta(seconds=28800) - _tzname = 'GMT-8' - -GMT_minus_8 = GMT_minus_8() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_minus_9.py b/modules/pytz/zoneinfo/Etc/GMT_minus_9.py deleted file mode 100644 index 2ab33c50..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_minus_9.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_minus_9.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_9(StaticTzInfo): - '''Etc/GMT_minus_9 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_minus_9' - _utcoffset = timedelta(seconds=32400) - _tzname = 'GMT-9' - -GMT_minus_9 = GMT_minus_9() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_0.py b/modules/pytz/zoneinfo/Etc/GMT_plus_0.py deleted file mode 100644 index 342e2a5d..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_0(StaticTzInfo): - '''Etc/GMT_plus_0 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT_plus_0 = GMT_plus_0() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_1.py b/modules/pytz/zoneinfo/Etc/GMT_plus_1.py deleted file mode 100644 index 9b62d1ed..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_1.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_1.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_1(StaticTzInfo): - '''Etc/GMT_plus_1 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_1' - _utcoffset = timedelta(seconds=-3600) - _tzname = 'GMT+1' - -GMT_plus_1 = GMT_plus_1() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_10.py b/modules/pytz/zoneinfo/Etc/GMT_plus_10.py deleted file mode 100644 index cf7943b4..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_10.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_10.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_10(StaticTzInfo): - '''Etc/GMT_plus_10 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_10' - _utcoffset = timedelta(seconds=-36000) - _tzname = 'GMT+10' - -GMT_plus_10 = GMT_plus_10() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_11.py b/modules/pytz/zoneinfo/Etc/GMT_plus_11.py deleted file mode 100644 index fb9e3e08..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_11.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_11.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_11(StaticTzInfo): - '''Etc/GMT_plus_11 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_11' - _utcoffset = timedelta(seconds=-39600) - _tzname = 'GMT+11' - -GMT_plus_11 = GMT_plus_11() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_12.py b/modules/pytz/zoneinfo/Etc/GMT_plus_12.py deleted file mode 100644 index fcf2a236..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_12.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_12.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_12(StaticTzInfo): - '''Etc/GMT_plus_12 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_12' - _utcoffset = timedelta(seconds=-43200) - _tzname = 'GMT+12' - -GMT_plus_12 = GMT_plus_12() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_2.py b/modules/pytz/zoneinfo/Etc/GMT_plus_2.py deleted file mode 100644 index 672dbb2b..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_2.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_2.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_2(StaticTzInfo): - '''Etc/GMT_plus_2 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_2' - _utcoffset = timedelta(seconds=-7200) - _tzname = 'GMT+2' - -GMT_plus_2 = GMT_plus_2() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_3.py b/modules/pytz/zoneinfo/Etc/GMT_plus_3.py deleted file mode 100644 index 1d7f3837..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_3.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_3.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_3(StaticTzInfo): - '''Etc/GMT_plus_3 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_3' - _utcoffset = timedelta(seconds=-10800) - _tzname = 'GMT+3' - -GMT_plus_3 = GMT_plus_3() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_4.py b/modules/pytz/zoneinfo/Etc/GMT_plus_4.py deleted file mode 100644 index 8f199672..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_4.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_4.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_4(StaticTzInfo): - '''Etc/GMT_plus_4 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_4' - _utcoffset = timedelta(seconds=-14400) - _tzname = 'GMT+4' - -GMT_plus_4 = GMT_plus_4() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_5.py b/modules/pytz/zoneinfo/Etc/GMT_plus_5.py deleted file mode 100644 index e1015637..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_5.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_5.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_5(StaticTzInfo): - '''Etc/GMT_plus_5 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_5' - _utcoffset = timedelta(seconds=-18000) - _tzname = 'GMT+5' - -GMT_plus_5 = GMT_plus_5() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_6.py b/modules/pytz/zoneinfo/Etc/GMT_plus_6.py deleted file mode 100644 index ee30aba6..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_6.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_6.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_6(StaticTzInfo): - '''Etc/GMT_plus_6 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_6' - _utcoffset = timedelta(seconds=-21600) - _tzname = 'GMT+6' - -GMT_plus_6 = GMT_plus_6() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_7.py b/modules/pytz/zoneinfo/Etc/GMT_plus_7.py deleted file mode 100644 index e56b8287..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_7.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_7.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_7(StaticTzInfo): - '''Etc/GMT_plus_7 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_7' - _utcoffset = timedelta(seconds=-25200) - _tzname = 'GMT+7' - -GMT_plus_7 = GMT_plus_7() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_8.py b/modules/pytz/zoneinfo/Etc/GMT_plus_8.py deleted file mode 100644 index 63856c90..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_8.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_8.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_8(StaticTzInfo): - '''Etc/GMT_plus_8 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_8' - _utcoffset = timedelta(seconds=-28800) - _tzname = 'GMT+8' - -GMT_plus_8 = GMT_plus_8() - diff --git a/modules/pytz/zoneinfo/Etc/GMT_plus_9.py b/modules/pytz/zoneinfo/Etc/GMT_plus_9.py deleted file mode 100644 index 6964c544..00000000 --- a/modules/pytz/zoneinfo/Etc/GMT_plus_9.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/GMT_plus_9.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_9(StaticTzInfo): - '''Etc/GMT_plus_9 timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/GMT_plus_9' - _utcoffset = timedelta(seconds=-32400) - _tzname = 'GMT+9' - -GMT_plus_9 = GMT_plus_9() - diff --git a/modules/pytz/zoneinfo/Etc/Greenwich.py b/modules/pytz/zoneinfo/Etc/Greenwich.py deleted file mode 100644 index 74ecf645..00000000 --- a/modules/pytz/zoneinfo/Etc/Greenwich.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/Greenwich.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Greenwich(StaticTzInfo): - '''Etc/Greenwich timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/Greenwich' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -Greenwich = Greenwich() - diff --git a/modules/pytz/zoneinfo/Etc/UCT.py b/modules/pytz/zoneinfo/Etc/UCT.py deleted file mode 100644 index 3c830816..00000000 --- a/modules/pytz/zoneinfo/Etc/UCT.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/UCT.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class UCT(StaticTzInfo): - '''Etc/UCT timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/UCT' - _utcoffset = timedelta(seconds=0) - _tzname = 'UCT' - -UCT = UCT() - diff --git a/modules/pytz/zoneinfo/Etc/UTC.py b/modules/pytz/zoneinfo/Etc/UTC.py deleted file mode 100644 index 80eb784c..00000000 --- a/modules/pytz/zoneinfo/Etc/UTC.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/UTC.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class UTC(StaticTzInfo): - '''Etc/UTC timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/UTC' - _utcoffset = timedelta(seconds=0) - _tzname = 'UTC' - -UTC = UTC() - diff --git a/modules/pytz/zoneinfo/Etc/Universal.py b/modules/pytz/zoneinfo/Etc/Universal.py deleted file mode 100644 index bddf3c45..00000000 --- a/modules/pytz/zoneinfo/Etc/Universal.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/Universal.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Universal(StaticTzInfo): - '''Etc/Universal timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/Universal' - _utcoffset = timedelta(seconds=0) - _tzname = 'UTC' - -Universal = Universal() - diff --git a/modules/pytz/zoneinfo/Etc/Zulu.py b/modules/pytz/zoneinfo/Etc/Zulu.py deleted file mode 100644 index d569a825..00000000 --- a/modules/pytz/zoneinfo/Etc/Zulu.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Etc/Zulu.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Zulu(StaticTzInfo): - '''Etc/Zulu timezone definition. See datetime.tzinfo for details''' - zone = 'Etc/Zulu' - _utcoffset = timedelta(seconds=0) - _tzname = 'UTC' - -Zulu = Zulu() - diff --git a/modules/pytz/zoneinfo/Etc/__init__.py b/modules/pytz/zoneinfo/Etc/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Europe/Amsterdam.py b/modules/pytz/zoneinfo/Europe/Amsterdam.py deleted file mode 100644 index b210f20a..00000000 --- a/modules/pytz/zoneinfo/Europe/Amsterdam.py +++ /dev/null @@ -1,380 +0,0 @@ -'''tzinfo timezone information for Europe/Amsterdam.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Amsterdam(DstTzInfo): - '''Europe/Amsterdam timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Amsterdam' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,23,40,28), -d(1916,9,30,22,40,28), -d(1917,4,16,1,40,28), -d(1917,9,17,1,40,28), -d(1918,4,1,1,40,28), -d(1918,9,30,1,40,28), -d(1919,4,7,1,40,28), -d(1919,9,29,1,40,28), -d(1920,4,5,1,40,28), -d(1920,9,27,1,40,28), -d(1921,4,4,1,40,28), -d(1921,9,26,1,40,28), -d(1922,3,26,1,40,28), -d(1922,10,8,1,40,28), -d(1923,6,1,1,40,28), -d(1923,10,7,1,40,28), -d(1924,3,30,1,40,28), -d(1924,10,5,1,40,28), -d(1925,6,5,1,40,28), -d(1925,10,4,1,40,28), -d(1926,5,15,1,40,28), -d(1926,10,3,1,40,28), -d(1927,5,15,1,40,28), -d(1927,10,2,1,40,28), -d(1928,5,15,1,40,28), -d(1928,10,7,1,40,28), -d(1929,5,15,1,40,28), -d(1929,10,6,1,40,28), -d(1930,5,15,1,40,28), -d(1930,10,5,1,40,28), -d(1931,5,15,1,40,28), -d(1931,10,4,1,40,28), -d(1932,5,22,1,40,28), -d(1932,10,2,1,40,28), -d(1933,5,15,1,40,28), -d(1933,10,8,1,40,28), -d(1934,5,15,1,40,28), -d(1934,10,7,1,40,28), -d(1935,5,15,1,40,28), -d(1935,10,6,1,40,28), -d(1936,5,15,1,40,28), -d(1936,10,4,1,40,28), -d(1937,5,22,1,40,28), -d(1937,6,30,22,40,28), -d(1937,10,3,1,40,0), -d(1938,5,15,1,40,0), -d(1938,10,2,1,40,0), -d(1939,5,15,1,40,0), -d(1939,10,8,1,40,0), -d(1940,5,15,23,40,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,9,16,1,0,0), -d(1976,12,31,23,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(1200,0,'AMT'), -i(4800,3600,'NST'), -i(4800,3600,'NEST'), -i(1200,0,'NET'), -i(4800,3600,'NEST'), -i(1200,0,'NET'), -i(4800,3600,'NEST'), -i(1200,0,'NET'), -i(7200,6000,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Amsterdam = Amsterdam() - diff --git a/modules/pytz/zoneinfo/Europe/Andorra.py b/modules/pytz/zoneinfo/Europe/Andorra.py deleted file mode 100644 index 2f5d03d0..00000000 --- a/modules/pytz/zoneinfo/Europe/Andorra.py +++ /dev/null @@ -1,234 +0,0 @@ -'''tzinfo timezone information for Europe/Andorra.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Andorra(DstTzInfo): - '''Europe/Andorra timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Andorra' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1946,9,30,0,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'WET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Andorra = Andorra() - diff --git a/modules/pytz/zoneinfo/Europe/Athens.py b/modules/pytz/zoneinfo/Europe/Athens.py deleted file mode 100644 index c76b1960..00000000 --- a/modules/pytz/zoneinfo/Europe/Athens.py +++ /dev/null @@ -1,294 +0,0 @@ -'''tzinfo timezone information for Europe/Athens.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Athens(DstTzInfo): - '''Europe/Athens timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Athens' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,27,22,26,8), -d(1932,7,6,22,0,0), -d(1932,8,31,21,0,0), -d(1941,4,6,22,0,0), -d(1941,4,29,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,23,0,0), -d(1943,10,3,22,0,0), -d(1944,4,3,23,0,0), -d(1952,6,30,22,0,0), -d(1952,11,1,21,0,0), -d(1975,4,11,22,0,0), -d(1975,11,25,22,0,0), -d(1976,4,11,0,0,0), -d(1976,10,10,0,0,0), -d(1977,4,3,0,0,0), -d(1977,9,26,0,0,0), -d(1978,4,2,0,0,0), -d(1978,9,24,1,0,0), -d(1979,4,1,7,0,0), -d(1979,9,28,23,0,0), -d(1980,3,31,22,0,0), -d(1980,9,27,21,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5700,0,'AMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Athens = Athens() - diff --git a/modules/pytz/zoneinfo/Europe/Belfast.py b/modules/pytz/zoneinfo/Europe/Belfast.py deleted file mode 100644 index fa9c7b8d..00000000 --- a/modules/pytz/zoneinfo/Europe/Belfast.py +++ /dev/null @@ -1,504 +0,0 @@ -'''tzinfo timezone information for Europe/Belfast.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Belfast(DstTzInfo): - '''Europe/Belfast timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Belfast' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,0,0), -d(1916,10,1,2,0,0), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,1,0,0), -d(1941,8,10,1,0,0), -d(1942,4,5,1,0,0), -d(1942,8,9,1,0,0), -d(1943,4,4,1,0,0), -d(1943,8,15,1,0,0), -d(1944,4,2,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,7,15,1,0,0), -d(1945,10,7,2,0,0), -d(1946,4,14,2,0,0), -d(1946,10,6,2,0,0), -d(1947,3,16,2,0,0), -d(1947,4,13,1,0,0), -d(1947,8,10,1,0,0), -d(1947,11,2,2,0,0), -d(1948,3,14,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(3600,0,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), - ] - -Belfast = Belfast() - diff --git a/modules/pytz/zoneinfo/Europe/Belgrade.py b/modules/pytz/zoneinfo/Europe/Belgrade.py deleted file mode 100644 index 9d363754..00000000 --- a/modules/pytz/zoneinfo/Europe/Belgrade.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Belgrade.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Belgrade(DstTzInfo): - '''Europe/Belgrade timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Belgrade' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,4,18,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,8,1,0,0), -d(1945,9,16,1,0,0), -d(1982,11,26,23,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Belgrade = Belgrade() - diff --git a/modules/pytz/zoneinfo/Europe/Berlin.py b/modules/pytz/zoneinfo/Europe/Berlin.py deleted file mode 100644 index bf588a1c..00000000 --- a/modules/pytz/zoneinfo/Europe/Berlin.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for Europe/Berlin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Berlin(DstTzInfo): - '''Europe/Berlin timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Berlin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,5,24,0,0,0), -d(1945,9,24,0,0,0), -d(1945,11,18,1,0,0), -d(1946,4,14,1,0,0), -d(1946,10,7,1,0,0), -d(1947,4,6,1,0,0), -d(1947,5,11,1,0,0), -d(1947,6,29,0,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,10,1,0,0), -d(1949,10,2,1,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,7200,'CEMT'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,7200,'CEMT'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Berlin = Berlin() - diff --git a/modules/pytz/zoneinfo/Europe/Bratislava.py b/modules/pytz/zoneinfo/Europe/Bratislava.py deleted file mode 100644 index db606b77..00000000 --- a/modules/pytz/zoneinfo/Europe/Bratislava.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Europe/Bratislava.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bratislava(DstTzInfo): - '''Europe/Bratislava timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Bratislava' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,8,1,0,0), -d(1945,11,18,1,0,0), -d(1946,5,6,1,0,0), -d(1946,10,6,1,0,0), -d(1947,4,20,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,9,1,0,0), -d(1949,10,2,1,0,0), -d(1978,12,31,23,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Bratislava = Bratislava() - diff --git a/modules/pytz/zoneinfo/Europe/Brussels.py b/modules/pytz/zoneinfo/Europe/Brussels.py deleted file mode 100644 index 51a28a3f..00000000 --- a/modules/pytz/zoneinfo/Europe/Brussels.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for Europe/Brussels.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Brussels(DstTzInfo): - '''Europe/Brussels timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Brussels' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1914,11,8,0,0,0), -d(1916,4,30,23,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1918,11,11,11,0,0), -d(1919,3,1,23,0,0), -d(1919,10,4,23,0,0), -d(1920,2,14,23,0,0), -d(1920,10,23,23,0,0), -d(1921,3,14,23,0,0), -d(1921,10,25,23,0,0), -d(1922,3,25,23,0,0), -d(1922,10,7,23,0,0), -d(1923,4,21,23,0,0), -d(1923,10,6,23,0,0), -d(1924,3,29,23,0,0), -d(1924,10,4,23,0,0), -d(1925,4,4,23,0,0), -d(1925,10,3,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,3,2,0,0), -d(1932,10,2,2,0,0), -d(1933,3,26,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,8,2,0,0), -d(1934,10,7,2,0,0), -d(1935,3,31,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,4,2,0,0), -d(1937,10,3,2,0,0), -d(1938,3,27,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1940,5,20,2,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,2,22,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,9,16,1,0,0), -d(1946,5,19,1,0,0), -d(1946,10,7,1,0,0), -d(1976,12,31,23,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'WET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Brussels = Brussels() - diff --git a/modules/pytz/zoneinfo/Europe/Bucharest.py b/modules/pytz/zoneinfo/Europe/Bucharest.py deleted file mode 100644 index c565d9ef..00000000 --- a/modules/pytz/zoneinfo/Europe/Bucharest.py +++ /dev/null @@ -1,294 +0,0 @@ -'''tzinfo timezone information for Europe/Bucharest.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Bucharest(DstTzInfo): - '''Europe/Bucharest timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Bucharest' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1931,7,23,22,15,36), -d(1932,5,20,22,0,0), -d(1932,10,1,22,0,0), -d(1933,4,1,22,0,0), -d(1933,9,30,22,0,0), -d(1934,4,7,22,0,0), -d(1934,10,6,22,0,0), -d(1935,4,6,22,0,0), -d(1935,10,5,22,0,0), -d(1936,4,4,22,0,0), -d(1936,10,3,22,0,0), -d(1937,4,3,22,0,0), -d(1937,10,2,22,0,0), -d(1938,4,2,22,0,0), -d(1938,10,1,22,0,0), -d(1939,4,1,22,0,0), -d(1939,9,30,22,0,0), -d(1979,5,26,22,0,0), -d(1979,9,29,21,0,0), -d(1980,4,5,21,0,0), -d(1980,9,27,22,0,0), -d(1981,3,29,0,0,0), -d(1981,9,27,0,0,0), -d(1982,3,28,0,0,0), -d(1982,9,26,0,0,0), -d(1983,3,27,0,0,0), -d(1983,9,25,0,0,0), -d(1984,3,25,0,0,0), -d(1984,9,30,0,0,0), -d(1985,3,31,0,0,0), -d(1985,9,29,0,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1988,3,27,0,0,0), -d(1988,9,25,0,0,0), -d(1989,3,26,0,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1990,12,31,22,0,0), -d(1991,3,30,22,0,0), -d(1991,9,28,22,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,22,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,22,0,0), -d(1993,12,31,22,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,21,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(6240,0,'BMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Bucharest = Bucharest() - diff --git a/modules/pytz/zoneinfo/Europe/Budapest.py b/modules/pytz/zoneinfo/Europe/Budapest.py deleted file mode 100644 index 3421346b..00000000 --- a/modules/pytz/zoneinfo/Europe/Budapest.py +++ /dev/null @@ -1,326 +0,0 @@ -'''tzinfo timezone information for Europe/Budapest.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Budapest(DstTzInfo): - '''Europe/Budapest timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Budapest' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1917,12,31,23,0,0), -d(1918,4,1,2,0,0), -d(1918,9,29,1,0,0), -d(1919,4,15,2,0,0), -d(1919,9,15,1,0,0), -d(1920,4,5,2,0,0), -d(1920,9,30,1,0,0), -d(1941,4,6,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,1,22,0,0), -d(1945,11,2,22,0,0), -d(1946,3,31,1,0,0), -d(1946,10,6,1,0,0), -d(1947,4,6,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,4,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,10,1,0,0), -d(1949,10,2,1,0,0), -d(1950,4,17,1,0,0), -d(1950,10,23,1,0,0), -d(1954,5,22,23,0,0), -d(1954,10,2,22,0,0), -d(1955,5,22,23,0,0), -d(1955,10,2,22,0,0), -d(1956,6,2,23,0,0), -d(1956,9,29,22,0,0), -d(1957,6,2,0,0,0), -d(1957,9,29,1,0,0), -d(1980,4,6,0,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Budapest = Budapest() - diff --git a/modules/pytz/zoneinfo/Europe/Chisinau.py b/modules/pytz/zoneinfo/Europe/Chisinau.py deleted file mode 100644 index a433db39..00000000 --- a/modules/pytz/zoneinfo/Europe/Chisinau.py +++ /dev/null @@ -1,300 +0,0 @@ -'''tzinfo timezone information for Europe/Chisinau.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chisinau(DstTzInfo): - '''Europe/Chisinau timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Chisinau' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,2,14,22,5,0), -d(1931,7,23,22,15,36), -d(1932,5,20,22,0,0), -d(1932,10,1,22,0,0), -d(1933,4,1,22,0,0), -d(1933,9,30,22,0,0), -d(1934,4,7,22,0,0), -d(1934,10,6,22,0,0), -d(1935,4,6,22,0,0), -d(1935,10,5,22,0,0), -d(1936,4,4,22,0,0), -d(1936,10,3,22,0,0), -d(1937,4,3,22,0,0), -d(1937,10,2,22,0,0), -d(1938,4,2,22,0,0), -d(1938,10,1,22,0,0), -d(1939,4,1,22,0,0), -d(1939,9,30,22,0,0), -d(1940,8,14,22,0,0), -d(1941,7,16,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,8,23,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1990,5,5,21,0,0), -d(1991,3,31,0,0,0), -d(1991,9,29,0,0,0), -d(1991,12,31,22,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,21,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(6900,0,'CMT'), -i(6240,0,'BMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Chisinau = Chisinau() - diff --git a/modules/pytz/zoneinfo/Europe/Copenhagen.py b/modules/pytz/zoneinfo/Europe/Copenhagen.py deleted file mode 100644 index 9a0f2b68..00000000 --- a/modules/pytz/zoneinfo/Europe/Copenhagen.py +++ /dev/null @@ -1,286 +0,0 @@ -'''tzinfo timezone information for Europe/Copenhagen.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Copenhagen(DstTzInfo): - '''Europe/Copenhagen timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Copenhagen' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,14,22,0,0), -d(1916,9,30,21,0,0), -d(1940,5,14,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,8,15,1,0,0), -d(1946,5,1,1,0,0), -d(1946,9,1,1,0,0), -d(1947,5,4,1,0,0), -d(1947,8,10,1,0,0), -d(1948,5,9,1,0,0), -d(1948,8,8,1,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Copenhagen = Copenhagen() - diff --git a/modules/pytz/zoneinfo/Europe/Dublin.py b/modules/pytz/zoneinfo/Europe/Dublin.py deleted file mode 100644 index 845c206d..00000000 --- a/modules/pytz/zoneinfo/Europe/Dublin.py +++ /dev/null @@ -1,478 +0,0 @@ -'''tzinfo timezone information for Europe/Dublin.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Dublin(DstTzInfo): - '''Europe/Dublin timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Dublin' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,25,21), -d(1916,10,1,2,25,21), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1921,12,6,0,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1946,10,6,1,0,0), -d(1947,3,16,2,0,0), -d(1947,11,2,1,0,0), -d(1948,4,18,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-1500,0,'DMT'), -i(2100,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(3600,0,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), -i(3600,3600,'IST'), -i(0,0,'GMT'), - ] - -Dublin = Dublin() - diff --git a/modules/pytz/zoneinfo/Europe/Gibraltar.py b/modules/pytz/zoneinfo/Europe/Gibraltar.py deleted file mode 100644 index b0598e8d..00000000 --- a/modules/pytz/zoneinfo/Europe/Gibraltar.py +++ /dev/null @@ -1,414 +0,0 @@ -'''tzinfo timezone information for Europe/Gibraltar.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Gibraltar(DstTzInfo): - '''Europe/Gibraltar timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Gibraltar' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,0,0), -d(1916,10,1,2,0,0), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,1,0,0), -d(1941,8,10,1,0,0), -d(1942,4,5,1,0,0), -d(1942,8,9,1,0,0), -d(1943,4,4,1,0,0), -d(1943,8,15,1,0,0), -d(1944,4,2,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,7,15,1,0,0), -d(1945,10,7,2,0,0), -d(1946,4,14,2,0,0), -d(1946,10,6,2,0,0), -d(1947,3,16,2,0,0), -d(1947,4,13,1,0,0), -d(1947,8,10,1,0,0), -d(1947,11,2,2,0,0), -d(1948,3,14,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Gibraltar = Gibraltar() - diff --git a/modules/pytz/zoneinfo/Europe/Helsinki.py b/modules/pytz/zoneinfo/Europe/Helsinki.py deleted file mode 100644 index eefbebbc..00000000 --- a/modules/pytz/zoneinfo/Europe/Helsinki.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Europe/Helsinki.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Helsinki(DstTzInfo): - '''Europe/Helsinki timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Helsinki' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,4,30,22,20,8), -d(1942,4,2,22,0,0), -d(1942,10,2,21,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(6000,0,'HMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Helsinki = Helsinki() - diff --git a/modules/pytz/zoneinfo/Europe/Istanbul.py b/modules/pytz/zoneinfo/Europe/Istanbul.py deleted file mode 100644 index 7f02cca9..00000000 --- a/modules/pytz/zoneinfo/Europe/Istanbul.py +++ /dev/null @@ -1,362 +0,0 @@ -'''tzinfo timezone information for Europe/Istanbul.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Istanbul(DstTzInfo): - '''Europe/Istanbul timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Istanbul' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,9,30,22,3,4), -d(1916,4,30,22,0,0), -d(1916,9,30,21,0,0), -d(1920,3,27,22,0,0), -d(1920,10,24,21,0,0), -d(1921,4,2,22,0,0), -d(1921,10,2,21,0,0), -d(1922,3,25,22,0,0), -d(1922,10,7,21,0,0), -d(1924,5,12,22,0,0), -d(1924,9,30,21,0,0), -d(1925,4,30,22,0,0), -d(1925,9,30,21,0,0), -d(1940,6,29,22,0,0), -d(1940,10,4,21,0,0), -d(1940,11,30,22,0,0), -d(1941,9,20,21,0,0), -d(1942,3,31,22,0,0), -d(1942,10,31,21,0,0), -d(1945,4,1,22,0,0), -d(1945,10,7,21,0,0), -d(1946,5,31,22,0,0), -d(1946,9,30,21,0,0), -d(1947,4,19,22,0,0), -d(1947,10,4,21,0,0), -d(1948,4,17,22,0,0), -d(1948,10,2,21,0,0), -d(1949,4,9,22,0,0), -d(1949,10,1,21,0,0), -d(1950,4,18,22,0,0), -d(1950,10,7,21,0,0), -d(1951,4,21,22,0,0), -d(1951,10,7,21,0,0), -d(1962,7,14,22,0,0), -d(1962,10,7,21,0,0), -d(1964,5,14,22,0,0), -d(1964,9,30,21,0,0), -d(1970,5,2,22,0,0), -d(1970,10,3,21,0,0), -d(1971,5,1,22,0,0), -d(1971,10,2,21,0,0), -d(1972,5,6,22,0,0), -d(1972,10,7,21,0,0), -d(1973,6,2,23,0,0), -d(1973,11,4,0,0,0), -d(1974,3,31,0,0,0), -d(1974,11,3,2,0,0), -d(1975,3,29,22,0,0), -d(1975,10,25,21,0,0), -d(1976,5,31,22,0,0), -d(1976,10,30,21,0,0), -d(1977,4,2,22,0,0), -d(1977,10,15,21,0,0), -d(1978,4,1,22,0,0), -d(1978,10,14,21,0,0), -d(1979,10,14,20,0,0), -d(1980,4,6,0,0,0), -d(1980,10,12,20,0,0), -d(1981,3,29,0,0,0), -d(1981,10,11,20,0,0), -d(1982,3,28,0,0,0), -d(1982,10,10,20,0,0), -d(1983,7,30,21,0,0), -d(1983,10,1,20,0,0), -d(1985,4,19,21,0,0), -d(1985,9,27,21,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1988,3,27,0,0,0), -d(1988,9,25,0,0,0), -d(1989,3,26,0,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1990,12,31,22,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7020,0,'IMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(14400,7200,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Istanbul = Istanbul() - diff --git a/modules/pytz/zoneinfo/Europe/Kaliningrad.py b/modules/pytz/zoneinfo/Europe/Kaliningrad.py deleted file mode 100644 index a0fe042c..00000000 --- a/modules/pytz/zoneinfo/Europe/Kaliningrad.py +++ /dev/null @@ -1,280 +0,0 @@ -'''tzinfo timezone information for Europe/Kaliningrad.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kaliningrad(DstTzInfo): - '''Europe/Kaliningrad timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Kaliningrad' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1944,12,31,23,0,0), -d(1945,4,28,22,0,0), -d(1945,10,31,21,0,0), -d(1945,12,31,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1992,3,28,21,0,0), -d(1992,9,26,20,0,0), -d(1993,3,28,0,0,0), -d(1993,9,26,0,0,0), -d(1994,3,27,0,0,0), -d(1994,9,25,0,0,0), -d(1995,3,26,0,0,0), -d(1995,9,24,0,0,0), -d(1996,3,31,0,0,0), -d(1996,10,27,0,0,0), -d(1997,3,30,0,0,0), -d(1997,10,26,0,0,0), -d(1998,3,29,0,0,0), -d(1998,10,25,0,0,0), -d(1999,3,28,0,0,0), -d(1999,10,31,0,0,0), -d(2000,3,26,0,0,0), -d(2000,10,29,0,0,0), -d(2001,3,25,0,0,0), -d(2001,10,28,0,0,0), -d(2002,3,31,0,0,0), -d(2002,10,27,0,0,0), -d(2003,3,30,0,0,0), -d(2003,10,26,0,0,0), -d(2004,3,28,0,0,0), -d(2004,10,31,0,0,0), -d(2005,3,27,0,0,0), -d(2005,10,30,0,0,0), -d(2006,3,26,0,0,0), -d(2006,10,29,0,0,0), -d(2007,3,25,0,0,0), -d(2007,10,28,0,0,0), -d(2008,3,30,0,0,0), -d(2008,10,26,0,0,0), -d(2009,3,29,0,0,0), -d(2009,10,25,0,0,0), -d(2010,3,28,0,0,0), -d(2010,10,31,0,0,0), -d(2011,3,27,0,0,0), -d(2011,10,30,0,0,0), -d(2012,3,25,0,0,0), -d(2012,10,28,0,0,0), -d(2013,3,31,0,0,0), -d(2013,10,27,0,0,0), -d(2014,3,30,0,0,0), -d(2014,10,26,0,0,0), -d(2015,3,29,0,0,0), -d(2015,10,25,0,0,0), -d(2016,3,27,0,0,0), -d(2016,10,30,0,0,0), -d(2017,3,26,0,0,0), -d(2017,10,29,0,0,0), -d(2018,3,25,0,0,0), -d(2018,10,28,0,0,0), -d(2019,3,31,0,0,0), -d(2019,10,27,0,0,0), -d(2020,3,29,0,0,0), -d(2020,10,25,0,0,0), -d(2021,3,28,0,0,0), -d(2021,10,31,0,0,0), -d(2022,3,27,0,0,0), -d(2022,10,30,0,0,0), -d(2023,3,26,0,0,0), -d(2023,10,29,0,0,0), -d(2024,3,31,0,0,0), -d(2024,10,27,0,0,0), -d(2025,3,30,0,0,0), -d(2025,10,26,0,0,0), -d(2026,3,29,0,0,0), -d(2026,10,25,0,0,0), -d(2027,3,28,0,0,0), -d(2027,10,31,0,0,0), -d(2028,3,26,0,0,0), -d(2028,10,29,0,0,0), -d(2029,3,25,0,0,0), -d(2029,10,28,0,0,0), -d(2030,3,31,0,0,0), -d(2030,10,27,0,0,0), -d(2031,3,30,0,0,0), -d(2031,10,26,0,0,0), -d(2032,3,28,0,0,0), -d(2032,10,31,0,0,0), -d(2033,3,27,0,0,0), -d(2033,10,30,0,0,0), -d(2034,3,26,0,0,0), -d(2034,10,29,0,0,0), -d(2035,3,25,0,0,0), -d(2035,10,28,0,0,0), -d(2036,3,30,0,0,0), -d(2036,10,26,0,0,0), -d(2037,3,29,0,0,0), -d(2037,10,25,0,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'CET'), -i(10800,3600,'CEST'), -i(7200,0,'CET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Kaliningrad = Kaliningrad() - diff --git a/modules/pytz/zoneinfo/Europe/Kiev.py b/modules/pytz/zoneinfo/Europe/Kiev.py deleted file mode 100644 index 6219010a..00000000 --- a/modules/pytz/zoneinfo/Europe/Kiev.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Kiev.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kiev(DstTzInfo): - '''Europe/Kiev timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Kiev' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,21,57,56), -d(1930,6,20,22,0,0), -d(1941,9,19,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1943,11,5,23,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1990,6,30,23,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7320,0,'KMT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Kiev = Kiev() - diff --git a/modules/pytz/zoneinfo/Europe/Lisbon.py b/modules/pytz/zoneinfo/Europe/Lisbon.py deleted file mode 100644 index a522a5e6..00000000 --- a/modules/pytz/zoneinfo/Europe/Lisbon.py +++ /dev/null @@ -1,462 +0,0 @@ -'''tzinfo timezone information for Europe/Lisbon.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Lisbon(DstTzInfo): - '''Europe/Lisbon timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Lisbon' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,36,32), -d(1916,6,17,23,0,0), -d(1916,11,1,0,0,0), -d(1917,2,28,23,0,0), -d(1917,10,14,23,0,0), -d(1918,3,1,23,0,0), -d(1918,10,14,23,0,0), -d(1919,2,28,23,0,0), -d(1919,10,14,23,0,0), -d(1920,2,29,23,0,0), -d(1920,10,14,23,0,0), -d(1921,2,28,23,0,0), -d(1921,10,14,23,0,0), -d(1924,4,16,23,0,0), -d(1924,10,14,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,4,20,23,0,0), -d(1929,10,5,23,0,0), -d(1931,4,18,23,0,0), -d(1931,10,3,23,0,0), -d(1932,4,2,23,0,0), -d(1932,10,1,23,0,0), -d(1934,4,7,23,0,0), -d(1934,10,6,23,0,0), -d(1935,3,30,23,0,0), -d(1935,10,5,23,0,0), -d(1936,4,18,23,0,0), -d(1936,10,3,23,0,0), -d(1937,4,3,23,0,0), -d(1937,10,2,23,0,0), -d(1938,3,26,23,0,0), -d(1938,10,1,23,0,0), -d(1939,4,15,23,0,0), -d(1939,11,18,23,0,0), -d(1940,2,24,23,0,0), -d(1940,10,5,23,0,0), -d(1941,4,5,23,0,0), -d(1941,10,5,23,0,0), -d(1942,3,14,23,0,0), -d(1942,4,25,22,0,0), -d(1942,8,15,22,0,0), -d(1942,10,24,23,0,0), -d(1943,3,13,23,0,0), -d(1943,4,17,22,0,0), -d(1943,8,28,22,0,0), -d(1943,10,30,23,0,0), -d(1944,3,11,23,0,0), -d(1944,4,22,22,0,0), -d(1944,8,26,22,0,0), -d(1944,10,28,23,0,0), -d(1945,3,10,23,0,0), -d(1945,4,21,22,0,0), -d(1945,8,25,22,0,0), -d(1945,10,27,23,0,0), -d(1946,4,6,23,0,0), -d(1946,10,5,23,0,0), -d(1947,4,6,2,0,0), -d(1947,10,5,2,0,0), -d(1948,4,4,2,0,0), -d(1948,10,3,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,2,2,0,0), -d(1951,4,1,2,0,0), -d(1951,10,7,2,0,0), -d(1952,4,6,2,0,0), -d(1952,10,5,2,0,0), -d(1953,4,5,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,4,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,3,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,1,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,7,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,6,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,5,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,3,2,0,0), -d(1960,10,2,2,0,0), -d(1961,4,2,2,0,0), -d(1961,10,1,2,0,0), -d(1962,4,1,2,0,0), -d(1962,10,7,2,0,0), -d(1963,4,7,2,0,0), -d(1963,10,6,2,0,0), -d(1964,4,5,2,0,0), -d(1964,10,4,2,0,0), -d(1965,4,4,2,0,0), -d(1965,10,3,2,0,0), -d(1966,4,3,2,0,0), -d(1976,9,26,0,0,0), -d(1977,3,27,0,0,0), -d(1977,9,25,0,0,0), -d(1978,4,2,0,0,0), -d(1978,10,1,0,0,0), -d(1979,4,1,0,0,0), -d(1979,9,30,1,0,0), -d(1980,3,30,0,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,2,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-2220,0,'LMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -Lisbon = Lisbon() - diff --git a/modules/pytz/zoneinfo/Europe/Ljubljana.py b/modules/pytz/zoneinfo/Europe/Ljubljana.py deleted file mode 100644 index adf954f0..00000000 --- a/modules/pytz/zoneinfo/Europe/Ljubljana.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Ljubljana.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Ljubljana(DstTzInfo): - '''Europe/Ljubljana timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Ljubljana' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,4,18,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,8,1,0,0), -d(1945,9,16,1,0,0), -d(1982,11,26,23,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Ljubljana = Ljubljana() - diff --git a/modules/pytz/zoneinfo/Europe/London.py b/modules/pytz/zoneinfo/Europe/London.py deleted file mode 100644 index 9eff5985..00000000 --- a/modules/pytz/zoneinfo/Europe/London.py +++ /dev/null @@ -1,504 +0,0 @@ -'''tzinfo timezone information for Europe/London.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class London(DstTzInfo): - '''Europe/London timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/London' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,0,0), -d(1916,10,1,2,0,0), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,1,0,0), -d(1941,8,10,1,0,0), -d(1942,4,5,1,0,0), -d(1942,8,9,1,0,0), -d(1943,4,4,1,0,0), -d(1943,8,15,1,0,0), -d(1944,4,2,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,7,15,1,0,0), -d(1945,10,7,2,0,0), -d(1946,4,14,2,0,0), -d(1946,10,6,2,0,0), -d(1947,3,16,2,0,0), -d(1947,4,13,1,0,0), -d(1947,8,10,1,0,0), -d(1947,11,2,2,0,0), -d(1948,3,14,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(3600,0,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), - ] - -London = London() - diff --git a/modules/pytz/zoneinfo/Europe/Luxembourg.py b/modules/pytz/zoneinfo/Europe/Luxembourg.py deleted file mode 100644 index 89884ecd..00000000 --- a/modules/pytz/zoneinfo/Europe/Luxembourg.py +++ /dev/null @@ -1,388 +0,0 @@ -'''tzinfo timezone information for Europe/Luxembourg.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Luxembourg(DstTzInfo): - '''Europe/Luxembourg timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Luxembourg' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,5,31,23,35,24), -d(1916,5,14,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,28,22,0,0), -d(1917,9,16,23,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1918,11,24,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,5,2,0,0), -d(1920,2,14,23,0,0), -d(1920,10,24,1,0,0), -d(1921,3,14,23,0,0), -d(1921,10,26,1,0,0), -d(1922,3,25,23,0,0), -d(1922,10,8,0,0,0), -d(1923,4,21,23,0,0), -d(1923,10,7,1,0,0), -d(1924,3,29,23,0,0), -d(1924,10,5,0,0,0), -d(1925,4,5,23,0,0), -d(1925,10,4,0,0,0), -d(1926,4,17,23,0,0), -d(1926,10,3,0,0,0), -d(1927,4,9,23,0,0), -d(1927,10,2,0,0,0), -d(1928,4,14,23,0,0), -d(1928,10,7,0,0,0), -d(1929,4,20,23,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,3,2,0,0), -d(1932,10,2,2,0,0), -d(1933,3,26,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,8,2,0,0), -d(1934,10,7,2,0,0), -d(1935,3,31,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,4,2,0,0), -d(1937,10,3,2,0,0), -d(1938,3,27,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1940,5,14,2,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,18,1,0,0), -d(1945,4,2,1,0,0), -d(1945,9,16,1,0,0), -d(1946,5,19,1,0,0), -d(1946,10,7,1,0,0), -d(1976,12,31,23,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(1500,0,'LMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEST'), -i(3600,0,'WET'), -i(7200,3600,'WEST'), -i(3600,0,'WET'), -i(7200,3600,'WEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Luxembourg = Luxembourg() - diff --git a/modules/pytz/zoneinfo/Europe/Madrid.py b/modules/pytz/zoneinfo/Europe/Madrid.py deleted file mode 100644 index 9d86ecfe..00000000 --- a/modules/pytz/zoneinfo/Europe/Madrid.py +++ /dev/null @@ -1,346 +0,0 @@ -'''tzinfo timezone information for Europe/Madrid.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Madrid(DstTzInfo): - '''Europe/Madrid timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Madrid' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,5,5,23,0,0), -d(1917,10,6,23,0,0), -d(1918,4,15,23,0,0), -d(1918,10,6,23,0,0), -d(1919,4,5,23,0,0), -d(1919,10,6,23,0,0), -d(1924,4,16,23,0,0), -d(1924,10,4,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,4,20,23,0,0), -d(1929,10,5,23,0,0), -d(1937,5,22,23,0,0), -d(1937,10,2,23,0,0), -d(1938,3,22,23,0,0), -d(1938,10,1,23,0,0), -d(1939,4,15,23,0,0), -d(1939,10,7,23,0,0), -d(1940,3,16,23,0,0), -d(1942,5,2,22,0,0), -d(1942,9,1,22,0,0), -d(1943,4,17,22,0,0), -d(1943,10,3,22,0,0), -d(1944,4,15,22,0,0), -d(1944,10,10,22,0,0), -d(1945,4,14,22,0,0), -d(1945,9,29,23,0,0), -d(1946,4,13,22,0,0), -d(1946,9,29,22,0,0), -d(1949,4,30,22,0,0), -d(1949,9,29,23,0,0), -d(1974,4,13,22,0,0), -d(1974,10,5,23,0,0), -d(1975,4,19,22,0,0), -d(1975,10,4,23,0,0), -d(1976,3,27,22,0,0), -d(1976,9,25,23,0,0), -d(1977,4,2,22,0,0), -d(1977,9,24,23,0,0), -d(1978,4,2,22,0,0), -d(1978,9,30,23,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Madrid = Madrid() - diff --git a/modules/pytz/zoneinfo/Europe/Malta.py b/modules/pytz/zoneinfo/Europe/Malta.py deleted file mode 100644 index e361bfc5..00000000 --- a/modules/pytz/zoneinfo/Europe/Malta.py +++ /dev/null @@ -1,356 +0,0 @@ -'''tzinfo timezone information for Europe/Malta.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Malta(DstTzInfo): - '''Europe/Malta timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Malta' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,6,2,23,0,0), -d(1916,9,30,23,0,0), -d(1917,3,31,23,0,0), -d(1917,9,29,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,5,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,4,23,0,0), -d(1920,3,20,23,0,0), -d(1920,9,18,23,0,0), -d(1940,6,14,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,9,14,23,0,0), -d(1946,3,17,1,0,0), -d(1946,10,6,1,0,0), -d(1947,3,15,23,0,0), -d(1947,10,4,23,0,0), -d(1948,2,29,1,0,0), -d(1948,10,3,1,0,0), -d(1966,5,21,23,0,0), -d(1966,9,24,22,0,0), -d(1967,5,27,23,0,0), -d(1967,9,23,22,0,0), -d(1968,5,25,23,0,0), -d(1968,9,21,22,0,0), -d(1969,5,31,23,0,0), -d(1969,9,27,22,0,0), -d(1970,5,30,23,0,0), -d(1970,9,26,22,0,0), -d(1971,5,22,23,0,0), -d(1971,9,25,23,0,0), -d(1972,5,27,23,0,0), -d(1972,9,30,22,0,0), -d(1973,3,30,23,0,0), -d(1973,9,28,23,0,0), -d(1974,4,20,23,0,0), -d(1974,9,15,23,0,0), -d(1975,4,20,1,0,0), -d(1975,9,21,0,0,0), -d(1976,4,18,1,0,0), -d(1976,9,19,0,0,0), -d(1977,4,17,1,0,0), -d(1977,9,18,0,0,0), -d(1978,4,16,1,0,0), -d(1978,9,17,0,0,0), -d(1979,4,15,1,0,0), -d(1979,9,16,0,0,0), -d(1980,3,31,1,0,0), -d(1980,9,21,0,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Malta = Malta() - diff --git a/modules/pytz/zoneinfo/Europe/Mariehamn.py b/modules/pytz/zoneinfo/Europe/Mariehamn.py deleted file mode 100644 index cd8bb70f..00000000 --- a/modules/pytz/zoneinfo/Europe/Mariehamn.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Europe/Mariehamn.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mariehamn(DstTzInfo): - '''Europe/Mariehamn timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Mariehamn' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,4,30,22,20,8), -d(1942,4,2,22,0,0), -d(1942,10,2,21,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(6000,0,'HMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Mariehamn = Mariehamn() - diff --git a/modules/pytz/zoneinfo/Europe/Minsk.py b/modules/pytz/zoneinfo/Europe/Minsk.py deleted file mode 100644 index 2a1bb6da..00000000 --- a/modules/pytz/zoneinfo/Europe/Minsk.py +++ /dev/null @@ -1,262 +0,0 @@ -'''tzinfo timezone information for Europe/Minsk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Minsk(DstTzInfo): - '''Europe/Minsk timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Minsk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,22,10,0), -d(1930,6,20,22,0,0), -d(1941,6,27,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,7,2,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,22,0,0), -d(1993,3,28,0,0,0), -d(1993,9,26,0,0,0), -d(1994,3,27,0,0,0), -d(1994,9,25,0,0,0), -d(1995,3,26,0,0,0), -d(1995,9,24,0,0,0), -d(1996,3,31,0,0,0), -d(1996,10,27,0,0,0), -d(1997,3,30,0,0,0), -d(1997,10,26,0,0,0), -d(1998,3,29,0,0,0), -d(1998,10,25,0,0,0), -d(1999,3,28,0,0,0), -d(1999,10,31,0,0,0), -d(2000,3,26,0,0,0), -d(2000,10,29,0,0,0), -d(2001,3,25,0,0,0), -d(2001,10,28,0,0,0), -d(2002,3,31,0,0,0), -d(2002,10,27,0,0,0), -d(2003,3,30,0,0,0), -d(2003,10,26,0,0,0), -d(2004,3,28,0,0,0), -d(2004,10,31,0,0,0), -d(2005,3,27,0,0,0), -d(2005,10,30,0,0,0), -d(2006,3,26,0,0,0), -d(2006,10,29,0,0,0), -d(2007,3,25,0,0,0), -d(2007,10,28,0,0,0), -d(2008,3,30,0,0,0), -d(2008,10,26,0,0,0), -d(2009,3,29,0,0,0), -d(2009,10,25,0,0,0), -d(2010,3,28,0,0,0), -d(2010,10,31,0,0,0), -d(2011,3,27,0,0,0), -d(2011,10,30,0,0,0), -d(2012,3,25,0,0,0), -d(2012,10,28,0,0,0), -d(2013,3,31,0,0,0), -d(2013,10,27,0,0,0), -d(2014,3,30,0,0,0), -d(2014,10,26,0,0,0), -d(2015,3,29,0,0,0), -d(2015,10,25,0,0,0), -d(2016,3,27,0,0,0), -d(2016,10,30,0,0,0), -d(2017,3,26,0,0,0), -d(2017,10,29,0,0,0), -d(2018,3,25,0,0,0), -d(2018,10,28,0,0,0), -d(2019,3,31,0,0,0), -d(2019,10,27,0,0,0), -d(2020,3,29,0,0,0), -d(2020,10,25,0,0,0), -d(2021,3,28,0,0,0), -d(2021,10,31,0,0,0), -d(2022,3,27,0,0,0), -d(2022,10,30,0,0,0), -d(2023,3,26,0,0,0), -d(2023,10,29,0,0,0), -d(2024,3,31,0,0,0), -d(2024,10,27,0,0,0), -d(2025,3,30,0,0,0), -d(2025,10,26,0,0,0), -d(2026,3,29,0,0,0), -d(2026,10,25,0,0,0), -d(2027,3,28,0,0,0), -d(2027,10,31,0,0,0), -d(2028,3,26,0,0,0), -d(2028,10,29,0,0,0), -d(2029,3,25,0,0,0), -d(2029,10,28,0,0,0), -d(2030,3,31,0,0,0), -d(2030,10,27,0,0,0), -d(2031,3,30,0,0,0), -d(2031,10,26,0,0,0), -d(2032,3,28,0,0,0), -d(2032,10,31,0,0,0), -d(2033,3,27,0,0,0), -d(2033,10,30,0,0,0), -d(2034,3,26,0,0,0), -d(2034,10,29,0,0,0), -d(2035,3,25,0,0,0), -d(2035,10,28,0,0,0), -d(2036,3,30,0,0,0), -d(2036,10,26,0,0,0), -d(2037,3,29,0,0,0), -d(2037,10,25,0,0,0), - ] - - _transition_info = [ -i(6600,0,'MMT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Minsk = Minsk() - diff --git a/modules/pytz/zoneinfo/Europe/Monaco.py b/modules/pytz/zoneinfo/Europe/Monaco.py deleted file mode 100644 index 4884ef22..00000000 --- a/modules/pytz/zoneinfo/Europe/Monaco.py +++ /dev/null @@ -1,388 +0,0 @@ -'''tzinfo timezone information for Europe/Monaco.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Monaco(DstTzInfo): - '''Europe/Monaco timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Monaco' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,3,10,23,50,39), -d(1916,6,14,23,0,0), -d(1916,10,1,23,0,0), -d(1917,3,24,23,0,0), -d(1917,10,7,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,6,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,5,23,0,0), -d(1920,2,14,23,0,0), -d(1920,10,23,23,0,0), -d(1921,3,14,23,0,0), -d(1921,10,25,23,0,0), -d(1922,3,25,23,0,0), -d(1922,10,7,23,0,0), -d(1923,5,26,23,0,0), -d(1923,10,6,23,0,0), -d(1924,3,29,23,0,0), -d(1924,10,4,23,0,0), -d(1925,4,4,23,0,0), -d(1925,10,3,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,4,20,23,0,0), -d(1929,10,5,23,0,0), -d(1930,4,12,23,0,0), -d(1930,10,4,23,0,0), -d(1931,4,18,23,0,0), -d(1931,10,3,23,0,0), -d(1932,4,2,23,0,0), -d(1932,10,1,23,0,0), -d(1933,3,25,23,0,0), -d(1933,10,7,23,0,0), -d(1934,4,7,23,0,0), -d(1934,10,6,23,0,0), -d(1935,3,30,23,0,0), -d(1935,10,5,23,0,0), -d(1936,4,18,23,0,0), -d(1936,10,3,23,0,0), -d(1937,4,3,23,0,0), -d(1937,10,2,23,0,0), -d(1938,3,26,23,0,0), -d(1938,10,1,23,0,0), -d(1939,4,15,23,0,0), -d(1939,11,18,23,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,23,0,0), -d(1941,10,5,22,0,0), -d(1942,3,8,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,7,23,0,0), -d(1945,4,2,1,0,0), -d(1945,9,16,1,0,0), -d(1976,3,28,0,0,0), -d(1976,9,25,23,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(540,0,'PMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Monaco = Monaco() - diff --git a/modules/pytz/zoneinfo/Europe/Moscow.py b/modules/pytz/zoneinfo/Europe/Moscow.py deleted file mode 100644 index 943112d0..00000000 --- a/modules/pytz/zoneinfo/Europe/Moscow.py +++ /dev/null @@ -1,278 +0,0 @@ -'''tzinfo timezone information for Europe/Moscow.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Moscow(DstTzInfo): - '''Europe/Moscow timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Moscow' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,2,21,30,0), -d(1917,7,1,20,29,12), -d(1917,12,27,20,29,12), -d(1918,5,31,19,29,12), -d(1918,9,15,20,29,12), -d(1919,5,31,19,29,12), -d(1919,6,30,21,29,12), -d(1919,8,15,20,0,0), -d(1921,2,14,20,0,0), -d(1921,3,20,19,0,0), -d(1921,8,31,19,0,0), -d(1921,9,30,20,0,0), -d(1922,9,30,21,0,0), -d(1930,6,20,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1992,1,19,0,0,0), -d(1992,3,28,20,0,0), -d(1992,9,26,19,0,0), -d(1993,3,27,23,0,0), -d(1993,9,25,23,0,0), -d(1994,3,26,23,0,0), -d(1994,9,24,23,0,0), -d(1995,3,25,23,0,0), -d(1995,9,23,23,0,0), -d(1996,3,30,23,0,0), -d(1996,10,26,23,0,0), -d(1997,3,29,23,0,0), -d(1997,10,25,23,0,0), -d(1998,3,28,23,0,0), -d(1998,10,24,23,0,0), -d(1999,3,27,23,0,0), -d(1999,10,30,23,0,0), -d(2000,3,25,23,0,0), -d(2000,10,28,23,0,0), -d(2001,3,24,23,0,0), -d(2001,10,27,23,0,0), -d(2002,3,30,23,0,0), -d(2002,10,26,23,0,0), -d(2003,3,29,23,0,0), -d(2003,10,25,23,0,0), -d(2004,3,27,23,0,0), -d(2004,10,30,23,0,0), -d(2005,3,26,23,0,0), -d(2005,10,29,23,0,0), -d(2006,3,25,23,0,0), -d(2006,10,28,23,0,0), -d(2007,3,24,23,0,0), -d(2007,10,27,23,0,0), -d(2008,3,29,23,0,0), -d(2008,10,25,23,0,0), -d(2009,3,28,23,0,0), -d(2009,10,24,23,0,0), -d(2010,3,27,23,0,0), -d(2010,10,30,23,0,0), -d(2011,3,26,23,0,0), -d(2011,10,29,23,0,0), -d(2012,3,24,23,0,0), -d(2012,10,27,23,0,0), -d(2013,3,30,23,0,0), -d(2013,10,26,23,0,0), -d(2014,3,29,23,0,0), -d(2014,10,25,23,0,0), -d(2015,3,28,23,0,0), -d(2015,10,24,23,0,0), -d(2016,3,26,23,0,0), -d(2016,10,29,23,0,0), -d(2017,3,25,23,0,0), -d(2017,10,28,23,0,0), -d(2018,3,24,23,0,0), -d(2018,10,27,23,0,0), -d(2019,3,30,23,0,0), -d(2019,10,26,23,0,0), -d(2020,3,28,23,0,0), -d(2020,10,24,23,0,0), -d(2021,3,27,23,0,0), -d(2021,10,30,23,0,0), -d(2022,3,26,23,0,0), -d(2022,10,29,23,0,0), -d(2023,3,25,23,0,0), -d(2023,10,28,23,0,0), -d(2024,3,30,23,0,0), -d(2024,10,26,23,0,0), -d(2025,3,29,23,0,0), -d(2025,10,25,23,0,0), -d(2026,3,28,23,0,0), -d(2026,10,24,23,0,0), -d(2027,3,27,23,0,0), -d(2027,10,30,23,0,0), -d(2028,3,25,23,0,0), -d(2028,10,28,23,0,0), -d(2029,3,24,23,0,0), -d(2029,10,27,23,0,0), -d(2030,3,30,23,0,0), -d(2030,10,26,23,0,0), -d(2031,3,29,23,0,0), -d(2031,10,25,23,0,0), -d(2032,3,27,23,0,0), -d(2032,10,30,23,0,0), -d(2033,3,26,23,0,0), -d(2033,10,29,23,0,0), -d(2034,3,25,23,0,0), -d(2034,10,28,23,0,0), -d(2035,3,24,23,0,0), -d(2035,10,27,23,0,0), -d(2036,3,29,23,0,0), -d(2036,10,25,23,0,0), -d(2037,3,28,23,0,0), -d(2037,10,24,23,0,0), - ] - - _transition_info = [ -i(9000,0,'MMT'), -i(9060,0,'MMT'), -i(12660,3600,'MST'), -i(9060,0,'MMT'), -i(16260,7200,'MDST'), -i(12660,3600,'MST'), -i(16260,7200,'MDST'), -i(14400,5340,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(18000,7200,'MSD'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), - ] - -Moscow = Moscow() - diff --git a/modules/pytz/zoneinfo/Europe/Nicosia.py b/modules/pytz/zoneinfo/Europe/Nicosia.py deleted file mode 100644 index 0eb3bc8f..00000000 --- a/modules/pytz/zoneinfo/Europe/Nicosia.py +++ /dev/null @@ -1,274 +0,0 @@ -'''tzinfo timezone information for Europe/Nicosia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nicosia(DstTzInfo): - '''Europe/Nicosia timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Nicosia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,11,13,21,46,32), -d(1975,4,12,22,0,0), -d(1975,10,11,21,0,0), -d(1976,5,14,22,0,0), -d(1976,10,10,21,0,0), -d(1977,4,2,22,0,0), -d(1977,9,24,21,0,0), -d(1978,4,1,22,0,0), -d(1978,10,1,21,0,0), -d(1979,3,31,22,0,0), -d(1979,9,29,21,0,0), -d(1980,4,5,22,0,0), -d(1980,9,27,21,0,0), -d(1981,3,28,22,0,0), -d(1981,9,26,21,0,0), -d(1982,3,27,22,0,0), -d(1982,9,25,21,0,0), -d(1983,3,26,22,0,0), -d(1983,9,24,21,0,0), -d(1984,3,24,22,0,0), -d(1984,9,29,21,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,21,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,21,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,21,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,21,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,21,0,0), -d(1990,3,24,22,0,0), -d(1990,9,29,21,0,0), -d(1991,3,30,22,0,0), -d(1991,9,28,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,9,28,21,0,0), -d(1997,3,29,22,0,0), -d(1997,9,27,21,0,0), -d(1998,3,28,22,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7980,0,'LMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Nicosia = Nicosia() - diff --git a/modules/pytz/zoneinfo/Europe/Oslo.py b/modules/pytz/zoneinfo/Europe/Oslo.py deleted file mode 100644 index f2e47949..00000000 --- a/modules/pytz/zoneinfo/Europe/Oslo.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Europe/Oslo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Oslo(DstTzInfo): - '''Europe/Oslo timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Oslo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,22,0,0,0), -d(1916,9,29,22,0,0), -d(1940,8,10,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,10,1,1,0,0), -d(1959,3,15,1,0,0), -d(1959,9,20,1,0,0), -d(1960,3,20,1,0,0), -d(1960,9,18,1,0,0), -d(1961,3,19,1,0,0), -d(1961,9,17,1,0,0), -d(1962,3,18,1,0,0), -d(1962,9,16,1,0,0), -d(1963,3,17,1,0,0), -d(1963,9,15,1,0,0), -d(1964,3,15,1,0,0), -d(1964,9,20,1,0,0), -d(1965,4,25,1,0,0), -d(1965,9,19,1,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Oslo = Oslo() - diff --git a/modules/pytz/zoneinfo/Europe/Paris.py b/modules/pytz/zoneinfo/Europe/Paris.py deleted file mode 100644 index 59892b45..00000000 --- a/modules/pytz/zoneinfo/Europe/Paris.py +++ /dev/null @@ -1,386 +0,0 @@ -'''tzinfo timezone information for Europe/Paris.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Paris(DstTzInfo): - '''Europe/Paris timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Paris' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,3,10,23,51,39), -d(1916,6,14,23,0,0), -d(1916,10,1,23,0,0), -d(1917,3,24,23,0,0), -d(1917,10,7,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,6,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,5,23,0,0), -d(1920,2,14,23,0,0), -d(1920,10,23,23,0,0), -d(1921,3,14,23,0,0), -d(1921,10,25,23,0,0), -d(1922,3,25,23,0,0), -d(1922,10,7,23,0,0), -d(1923,5,26,23,0,0), -d(1923,10,6,23,0,0), -d(1924,3,29,23,0,0), -d(1924,10,4,23,0,0), -d(1925,4,4,23,0,0), -d(1925,10,3,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,4,20,23,0,0), -d(1929,10,5,23,0,0), -d(1930,4,12,23,0,0), -d(1930,10,4,23,0,0), -d(1931,4,18,23,0,0), -d(1931,10,3,23,0,0), -d(1932,4,2,23,0,0), -d(1932,10,1,23,0,0), -d(1933,3,25,23,0,0), -d(1933,10,7,23,0,0), -d(1934,4,7,23,0,0), -d(1934,10,6,23,0,0), -d(1935,3,30,23,0,0), -d(1935,10,5,23,0,0), -d(1936,4,18,23,0,0), -d(1936,10,3,23,0,0), -d(1937,4,3,23,0,0), -d(1937,10,2,23,0,0), -d(1938,3,26,23,0,0), -d(1938,10,1,23,0,0), -d(1939,4,15,23,0,0), -d(1939,11,18,23,0,0), -d(1940,2,25,2,0,0), -d(1940,6,14,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,8,24,22,0,0), -d(1944,10,7,23,0,0), -d(1945,4,2,1,0,0), -d(1945,9,16,1,0,0), -d(1976,3,28,0,0,0), -d(1976,9,25,23,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(540,0,'PMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'WEMT'), -i(3600,0,'WEST'), -i(7200,3600,'WEMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Paris = Paris() - diff --git a/modules/pytz/zoneinfo/Europe/Prague.py b/modules/pytz/zoneinfo/Europe/Prague.py deleted file mode 100644 index 9c7f982b..00000000 --- a/modules/pytz/zoneinfo/Europe/Prague.py +++ /dev/null @@ -1,302 +0,0 @@ -'''tzinfo timezone information for Europe/Prague.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Prague(DstTzInfo): - '''Europe/Prague timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Prague' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,8,1,0,0), -d(1945,11,18,1,0,0), -d(1946,5,6,1,0,0), -d(1946,10,6,1,0,0), -d(1947,4,20,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,9,1,0,0), -d(1949,10,2,1,0,0), -d(1978,12,31,23,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Prague = Prague() - diff --git a/modules/pytz/zoneinfo/Europe/Riga.py b/modules/pytz/zoneinfo/Europe/Riga.py deleted file mode 100644 index 45b59725..00000000 --- a/modules/pytz/zoneinfo/Europe/Riga.py +++ /dev/null @@ -1,274 +0,0 @@ -'''tzinfo timezone information for Europe/Riga.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Riga(DstTzInfo): - '''Europe/Riga timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Riga' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,4,15,0,23,36), -d(1918,9,16,0,23,36), -d(1919,4,1,0,23,36), -d(1919,5,22,0,23,36), -d(1926,5,10,22,23,36), -d(1940,8,4,22,0,0), -d(1941,6,30,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1944,10,12,23,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1991,3,31,0,0,0), -d(1991,9,29,0,0,0), -d(1992,3,29,0,0,0), -d(1992,9,27,0,0,0), -d(1993,3,28,0,0,0), -d(1993,9,26,0,0,0), -d(1994,3,27,0,0,0), -d(1994,9,25,0,0,0), -d(1995,3,26,0,0,0), -d(1995,9,24,0,0,0), -d(1996,3,31,0,0,0), -d(1996,9,29,0,0,0), -d(1997,1,20,22,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,2,28,22,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5760,0,'RMT'), -i(9360,3600,'LST'), -i(5760,0,'RMT'), -i(9360,3600,'LST'), -i(5760,0,'RMT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Riga = Riga() - diff --git a/modules/pytz/zoneinfo/Europe/Rome.py b/modules/pytz/zoneinfo/Europe/Rome.py deleted file mode 100644 index 758a6ed8..00000000 --- a/modules/pytz/zoneinfo/Europe/Rome.py +++ /dev/null @@ -1,360 +0,0 @@ -'''tzinfo timezone information for Europe/Rome.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rome(DstTzInfo): - '''Europe/Rome timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Rome' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,6,2,23,0,0), -d(1916,9,30,23,0,0), -d(1917,3,31,23,0,0), -d(1917,9,29,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,5,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,4,23,0,0), -d(1920,3,20,23,0,0), -d(1920,9,18,23,0,0), -d(1940,6,14,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,6,30,22,0,0), -d(1944,9,16,23,0,0), -d(1945,4,2,1,0,0), -d(1945,9,14,23,0,0), -d(1946,3,17,1,0,0), -d(1946,10,6,1,0,0), -d(1947,3,15,23,0,0), -d(1947,10,4,23,0,0), -d(1948,2,29,1,0,0), -d(1948,10,3,1,0,0), -d(1966,5,21,23,0,0), -d(1966,9,24,22,0,0), -d(1967,5,27,23,0,0), -d(1967,9,23,22,0,0), -d(1968,5,25,23,0,0), -d(1968,9,21,22,0,0), -d(1969,5,31,23,0,0), -d(1969,9,27,22,0,0), -d(1970,5,30,23,0,0), -d(1970,9,26,22,0,0), -d(1971,5,22,23,0,0), -d(1971,9,25,23,0,0), -d(1972,5,27,23,0,0), -d(1972,9,30,22,0,0), -d(1973,6,2,23,0,0), -d(1973,9,29,22,0,0), -d(1974,5,25,23,0,0), -d(1974,9,28,22,0,0), -d(1975,5,31,23,0,0), -d(1975,9,27,23,0,0), -d(1976,5,29,23,0,0), -d(1976,9,25,23,0,0), -d(1977,5,21,23,0,0), -d(1977,9,24,23,0,0), -d(1978,5,27,23,0,0), -d(1978,9,30,23,0,0), -d(1979,5,26,23,0,0), -d(1979,9,29,23,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Rome = Rome() - diff --git a/modules/pytz/zoneinfo/Europe/Samara.py b/modules/pytz/zoneinfo/Europe/Samara.py deleted file mode 100644 index 9be132a3..00000000 --- a/modules/pytz/zoneinfo/Europe/Samara.py +++ /dev/null @@ -1,254 +0,0 @@ -'''tzinfo timezone information for Europe/Samara.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Samara(DstTzInfo): - '''Europe/Samara timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Samara' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,6,30,22,39,24), -d(1930,6,20,21,0,0), -d(1981,3,31,20,0,0), -d(1981,9,30,19,0,0), -d(1982,3,31,20,0,0), -d(1982,9,30,19,0,0), -d(1983,3,31,20,0,0), -d(1983,9,30,19,0,0), -d(1984,3,31,20,0,0), -d(1984,9,29,22,0,0), -d(1985,3,30,22,0,0), -d(1985,9,28,22,0,0), -d(1986,3,29,22,0,0), -d(1986,9,27,22,0,0), -d(1987,3,28,22,0,0), -d(1987,9,26,22,0,0), -d(1988,3,26,22,0,0), -d(1988,9,24,22,0,0), -d(1989,3,25,22,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1991,10,20,0,0,0), -d(1992,3,28,19,0,0), -d(1992,9,26,18,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,22,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,22,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,22,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,22,0,0), -d(1997,3,29,22,0,0), -d(1997,10,25,22,0,0), -d(1998,3,28,22,0,0), -d(1998,10,24,22,0,0), -d(1999,3,27,22,0,0), -d(1999,10,30,22,0,0), -d(2000,3,25,22,0,0), -d(2000,10,28,22,0,0), -d(2001,3,24,22,0,0), -d(2001,10,27,22,0,0), -d(2002,3,30,22,0,0), -d(2002,10,26,22,0,0), -d(2003,3,29,22,0,0), -d(2003,10,25,22,0,0), -d(2004,3,27,22,0,0), -d(2004,10,30,22,0,0), -d(2005,3,26,22,0,0), -d(2005,10,29,22,0,0), -d(2006,3,25,22,0,0), -d(2006,10,28,22,0,0), -d(2007,3,24,22,0,0), -d(2007,10,27,22,0,0), -d(2008,3,29,22,0,0), -d(2008,10,25,22,0,0), -d(2009,3,28,22,0,0), -d(2009,10,24,22,0,0), -d(2010,3,27,22,0,0), -d(2010,10,30,22,0,0), -d(2011,3,26,22,0,0), -d(2011,10,29,22,0,0), -d(2012,3,24,22,0,0), -d(2012,10,27,22,0,0), -d(2013,3,30,22,0,0), -d(2013,10,26,22,0,0), -d(2014,3,29,22,0,0), -d(2014,10,25,22,0,0), -d(2015,3,28,22,0,0), -d(2015,10,24,22,0,0), -d(2016,3,26,22,0,0), -d(2016,10,29,22,0,0), -d(2017,3,25,22,0,0), -d(2017,10,28,22,0,0), -d(2018,3,24,22,0,0), -d(2018,10,27,22,0,0), -d(2019,3,30,22,0,0), -d(2019,10,26,22,0,0), -d(2020,3,28,22,0,0), -d(2020,10,24,22,0,0), -d(2021,3,27,22,0,0), -d(2021,10,30,22,0,0), -d(2022,3,26,22,0,0), -d(2022,10,29,22,0,0), -d(2023,3,25,22,0,0), -d(2023,10,28,22,0,0), -d(2024,3,30,22,0,0), -d(2024,10,26,22,0,0), -d(2025,3,29,22,0,0), -d(2025,10,25,22,0,0), -d(2026,3,28,22,0,0), -d(2026,10,24,22,0,0), -d(2027,3,27,22,0,0), -d(2027,10,30,22,0,0), -d(2028,3,25,22,0,0), -d(2028,10,28,22,0,0), -d(2029,3,24,22,0,0), -d(2029,10,27,22,0,0), -d(2030,3,30,22,0,0), -d(2030,10,26,22,0,0), -d(2031,3,29,22,0,0), -d(2031,10,25,22,0,0), -d(2032,3,27,22,0,0), -d(2032,10,30,22,0,0), -d(2033,3,26,22,0,0), -d(2033,10,29,22,0,0), -d(2034,3,25,22,0,0), -d(2034,10,28,22,0,0), -d(2035,3,24,22,0,0), -d(2035,10,27,22,0,0), -d(2036,3,29,22,0,0), -d(2036,10,25,22,0,0), -d(2037,3,28,22,0,0), -d(2037,10,24,22,0,0), - ] - - _transition_info = [ -i(12060,0,'LMT'), -i(10800,0,'KUYT'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(18000,3600,'KUYST'), -i(14400,0,'KUYT'), -i(14400,0,'KUYST'), -i(10800,0,'KUYT'), -i(14400,3600,'KUYST'), -i(10800,0,'KUYT'), -i(10800,0,'KUYST'), -i(10800,0,'KUYT'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), -i(18000,3600,'SAMST'), -i(14400,0,'SAMT'), - ] - -Samara = Samara() - diff --git a/modules/pytz/zoneinfo/Europe/San_Marino.py b/modules/pytz/zoneinfo/Europe/San_Marino.py deleted file mode 100644 index dae62535..00000000 --- a/modules/pytz/zoneinfo/Europe/San_Marino.py +++ /dev/null @@ -1,360 +0,0 @@ -'''tzinfo timezone information for Europe/San_Marino.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class San_Marino(DstTzInfo): - '''Europe/San_Marino timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/San_Marino' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,6,2,23,0,0), -d(1916,9,30,23,0,0), -d(1917,3,31,23,0,0), -d(1917,9,29,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,5,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,4,23,0,0), -d(1920,3,20,23,0,0), -d(1920,9,18,23,0,0), -d(1940,6,14,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,6,30,22,0,0), -d(1944,9,16,23,0,0), -d(1945,4,2,1,0,0), -d(1945,9,14,23,0,0), -d(1946,3,17,1,0,0), -d(1946,10,6,1,0,0), -d(1947,3,15,23,0,0), -d(1947,10,4,23,0,0), -d(1948,2,29,1,0,0), -d(1948,10,3,1,0,0), -d(1966,5,21,23,0,0), -d(1966,9,24,22,0,0), -d(1967,5,27,23,0,0), -d(1967,9,23,22,0,0), -d(1968,5,25,23,0,0), -d(1968,9,21,22,0,0), -d(1969,5,31,23,0,0), -d(1969,9,27,22,0,0), -d(1970,5,30,23,0,0), -d(1970,9,26,22,0,0), -d(1971,5,22,23,0,0), -d(1971,9,25,23,0,0), -d(1972,5,27,23,0,0), -d(1972,9,30,22,0,0), -d(1973,6,2,23,0,0), -d(1973,9,29,22,0,0), -d(1974,5,25,23,0,0), -d(1974,9,28,22,0,0), -d(1975,5,31,23,0,0), -d(1975,9,27,23,0,0), -d(1976,5,29,23,0,0), -d(1976,9,25,23,0,0), -d(1977,5,21,23,0,0), -d(1977,9,24,23,0,0), -d(1978,5,27,23,0,0), -d(1978,9,30,23,0,0), -d(1979,5,26,23,0,0), -d(1979,9,29,23,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -San_Marino = San_Marino() - diff --git a/modules/pytz/zoneinfo/Europe/Sarajevo.py b/modules/pytz/zoneinfo/Europe/Sarajevo.py deleted file mode 100644 index 2b7d7540..00000000 --- a/modules/pytz/zoneinfo/Europe/Sarajevo.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Sarajevo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sarajevo(DstTzInfo): - '''Europe/Sarajevo timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Sarajevo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,4,18,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,8,1,0,0), -d(1945,9,16,1,0,0), -d(1982,11,26,23,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Sarajevo = Sarajevo() - diff --git a/modules/pytz/zoneinfo/Europe/Simferopol.py b/modules/pytz/zoneinfo/Europe/Simferopol.py deleted file mode 100644 index 63b47f9a..00000000 --- a/modules/pytz/zoneinfo/Europe/Simferopol.py +++ /dev/null @@ -1,266 +0,0 @@ -'''tzinfo timezone information for Europe/Simferopol.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Simferopol(DstTzInfo): - '''Europe/Simferopol timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Simferopol' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,21,44,0), -d(1930,6,20,22,0,0), -d(1941,10,31,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,4,12,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1990,6,30,23,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,4,30,21,0,0), -d(1994,9,24,20,0,0), -d(1995,3,25,21,0,0), -d(1995,9,23,20,0,0), -d(1996,3,30,21,0,0), -d(1996,3,31,0,0,0), -d(1996,10,27,0,0,0), -d(1996,12,31,21,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(8160,0,'SMT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(14400,7200,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Simferopol = Simferopol() - diff --git a/modules/pytz/zoneinfo/Europe/Skopje.py b/modules/pytz/zoneinfo/Europe/Skopje.py deleted file mode 100644 index c37e0328..00000000 --- a/modules/pytz/zoneinfo/Europe/Skopje.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Skopje.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Skopje(DstTzInfo): - '''Europe/Skopje timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Skopje' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,4,18,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,8,1,0,0), -d(1945,9,16,1,0,0), -d(1982,11,26,23,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Skopje = Skopje() - diff --git a/modules/pytz/zoneinfo/Europe/Sofia.py b/modules/pytz/zoneinfo/Europe/Sofia.py deleted file mode 100644 index 528daf7d..00000000 --- a/modules/pytz/zoneinfo/Europe/Sofia.py +++ /dev/null @@ -1,270 +0,0 @@ -'''tzinfo timezone information for Europe/Sofia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Sofia(DstTzInfo): - '''Europe/Sofia timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Sofia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,2,0,0), -d(1979,3,31,21,0,0), -d(1979,9,30,22,0,0), -d(1980,4,5,21,0,0), -d(1980,9,28,22,0,0), -d(1981,4,4,21,0,0), -d(1981,9,26,23,0,0), -d(1982,4,3,21,0,0), -d(1982,9,26,0,0,0), -d(1983,3,27,0,0,0), -d(1983,9,25,0,0,0), -d(1984,3,25,0,0,0), -d(1984,9,30,0,0,0), -d(1985,3,31,0,0,0), -d(1985,9,29,0,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1988,3,27,0,0,0), -d(1988,9,25,0,0,0), -d(1989,3,26,0,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1990,12,31,22,0,0), -d(1991,3,30,22,0,0), -d(1991,9,28,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,21,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Sofia = Sofia() - diff --git a/modules/pytz/zoneinfo/Europe/Stockholm.py b/modules/pytz/zoneinfo/Europe/Stockholm.py deleted file mode 100644 index f9abbe6a..00000000 --- a/modules/pytz/zoneinfo/Europe/Stockholm.py +++ /dev/null @@ -1,256 +0,0 @@ -'''tzinfo timezone information for Europe/Stockholm.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Stockholm(DstTzInfo): - '''Europe/Stockholm timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Stockholm' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,14,22,0,0), -d(1916,9,30,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Stockholm = Stockholm() - diff --git a/modules/pytz/zoneinfo/Europe/Tallinn.py b/modules/pytz/zoneinfo/Europe/Tallinn.py deleted file mode 100644 index 95e569ac..00000000 --- a/modules/pytz/zoneinfo/Europe/Tallinn.py +++ /dev/null @@ -1,268 +0,0 @@ -'''tzinfo timezone information for Europe/Tallinn.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tallinn(DstTzInfo): - '''Europe/Tallinn timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Tallinn' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,1,31,22,21,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1919,6,30,23,0,0), -d(1921,4,30,22,21,0), -d(1940,8,5,22,0,0), -d(1941,9,14,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,21,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1991,3,31,0,0,0), -d(1991,9,29,0,0,0), -d(1992,3,29,0,0,0), -d(1992,9,27,0,0,0), -d(1993,3,28,0,0,0), -d(1993,9,26,0,0,0), -d(1994,3,27,0,0,0), -d(1994,9,25,0,0,0), -d(1995,3,26,0,0,0), -d(1995,9,24,0,0,0), -d(1996,3,31,0,0,0), -d(1996,10,27,0,0,0), -d(1997,3,30,0,0,0), -d(1997,10,26,0,0,0), -d(1998,3,29,0,0,0), -d(1998,9,21,21,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(1999,10,31,22,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5940,0,'TMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(5940,0,'TMT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Tallinn = Tallinn() - diff --git a/modules/pytz/zoneinfo/Europe/Tirane.py b/modules/pytz/zoneinfo/Europe/Tirane.py deleted file mode 100644 index 4dba9c25..00000000 --- a/modules/pytz/zoneinfo/Europe/Tirane.py +++ /dev/null @@ -1,286 +0,0 @@ -'''tzinfo timezone information for Europe/Tirane.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tirane(DstTzInfo): - '''Europe/Tirane timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Tirane' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1913,12,31,22,40,40), -d(1940,6,15,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,4,10,1,0,0), -d(1974,5,3,23,0,0), -d(1974,10,1,22,0,0), -d(1975,4,30,23,0,0), -d(1975,10,1,22,0,0), -d(1976,5,1,23,0,0), -d(1976,10,2,22,0,0), -d(1977,5,7,23,0,0), -d(1977,10,1,22,0,0), -d(1978,5,5,23,0,0), -d(1978,9,30,22,0,0), -d(1979,5,4,23,0,0), -d(1979,9,29,22,0,0), -d(1980,5,2,23,0,0), -d(1980,10,3,22,0,0), -d(1981,4,25,23,0,0), -d(1981,9,26,22,0,0), -d(1982,5,1,23,0,0), -d(1982,10,2,22,0,0), -d(1983,4,17,23,0,0), -d(1983,9,30,22,0,0), -d(1984,3,31,23,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(4740,0,'LMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Tirane = Tirane() - diff --git a/modules/pytz/zoneinfo/Europe/Tiraspol.py b/modules/pytz/zoneinfo/Europe/Tiraspol.py deleted file mode 100644 index 7663b8c2..00000000 --- a/modules/pytz/zoneinfo/Europe/Tiraspol.py +++ /dev/null @@ -1,300 +0,0 @@ -'''tzinfo timezone information for Europe/Tiraspol.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tiraspol(DstTzInfo): - '''Europe/Tiraspol timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Tiraspol' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,2,14,22,5,0), -d(1931,7,23,22,15,36), -d(1932,5,20,22,0,0), -d(1932,10,1,22,0,0), -d(1933,4,1,22,0,0), -d(1933,9,30,22,0,0), -d(1934,4,7,22,0,0), -d(1934,10,6,22,0,0), -d(1935,4,6,22,0,0), -d(1935,10,5,22,0,0), -d(1936,4,4,22,0,0), -d(1936,10,3,22,0,0), -d(1937,4,3,22,0,0), -d(1937,10,2,22,0,0), -d(1938,4,2,22,0,0), -d(1938,10,1,22,0,0), -d(1939,4,1,22,0,0), -d(1939,9,30,22,0,0), -d(1940,8,14,22,0,0), -d(1941,7,16,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,8,23,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1990,5,5,21,0,0), -d(1991,3,31,0,0,0), -d(1991,9,29,0,0,0), -d(1991,12,31,22,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,25,22,0,0), -d(1995,9,23,21,0,0), -d(1996,3,30,22,0,0), -d(1996,10,26,21,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(6900,0,'CMT'), -i(6240,0,'BMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Tiraspol = Tiraspol() - diff --git a/modules/pytz/zoneinfo/Europe/Uzhgorod.py b/modules/pytz/zoneinfo/Europe/Uzhgorod.py deleted file mode 100644 index 9da017f6..00000000 --- a/modules/pytz/zoneinfo/Europe/Uzhgorod.py +++ /dev/null @@ -1,262 +0,0 @@ -'''tzinfo timezone information for Europe/Uzhgorod.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Uzhgorod(DstTzInfo): - '''Europe/Uzhgorod timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Uzhgorod' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,30,22,0,0), -d(1944,10,25,22,0,0), -d(1945,6,28,23,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1989,12,31,21,0,0), -d(1990,6,30,23,0,0), -d(1991,3,31,2,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'MSK'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Uzhgorod = Uzhgorod() - diff --git a/modules/pytz/zoneinfo/Europe/Vaduz.py b/modules/pytz/zoneinfo/Europe/Vaduz.py deleted file mode 100644 index c4af9b35..00000000 --- a/modules/pytz/zoneinfo/Europe/Vaduz.py +++ /dev/null @@ -1,248 +0,0 @@ -'''tzinfo timezone information for Europe/Vaduz.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vaduz(DstTzInfo): - '''Europe/Vaduz timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Vaduz' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Vaduz = Vaduz() - diff --git a/modules/pytz/zoneinfo/Europe/Vatican.py b/modules/pytz/zoneinfo/Europe/Vatican.py deleted file mode 100644 index 1806de2a..00000000 --- a/modules/pytz/zoneinfo/Europe/Vatican.py +++ /dev/null @@ -1,360 +0,0 @@ -'''tzinfo timezone information for Europe/Vatican.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vatican(DstTzInfo): - '''Europe/Vatican timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Vatican' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,6,2,23,0,0), -d(1916,9,30,23,0,0), -d(1917,3,31,23,0,0), -d(1917,9,29,23,0,0), -d(1918,3,9,23,0,0), -d(1918,10,5,23,0,0), -d(1919,3,1,23,0,0), -d(1919,10,4,23,0,0), -d(1920,3,20,23,0,0), -d(1920,9,18,23,0,0), -d(1940,6,14,23,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,6,30,22,0,0), -d(1944,9,16,23,0,0), -d(1945,4,2,1,0,0), -d(1945,9,14,23,0,0), -d(1946,3,17,1,0,0), -d(1946,10,6,1,0,0), -d(1947,3,15,23,0,0), -d(1947,10,4,23,0,0), -d(1948,2,29,1,0,0), -d(1948,10,3,1,0,0), -d(1966,5,21,23,0,0), -d(1966,9,24,22,0,0), -d(1967,5,27,23,0,0), -d(1967,9,23,22,0,0), -d(1968,5,25,23,0,0), -d(1968,9,21,22,0,0), -d(1969,5,31,23,0,0), -d(1969,9,27,22,0,0), -d(1970,5,30,23,0,0), -d(1970,9,26,22,0,0), -d(1971,5,22,23,0,0), -d(1971,9,25,23,0,0), -d(1972,5,27,23,0,0), -d(1972,9,30,22,0,0), -d(1973,6,2,23,0,0), -d(1973,9,29,22,0,0), -d(1974,5,25,23,0,0), -d(1974,9,28,22,0,0), -d(1975,5,31,23,0,0), -d(1975,9,27,23,0,0), -d(1976,5,29,23,0,0), -d(1976,9,25,23,0,0), -d(1977,5,21,23,0,0), -d(1977,9,24,23,0,0), -d(1978,5,27,23,0,0), -d(1978,9,30,23,0,0), -d(1979,5,26,23,0,0), -d(1979,9,29,23,0,0), -d(1979,12,31,23,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Vatican = Vatican() - diff --git a/modules/pytz/zoneinfo/Europe/Vienna.py b/modules/pytz/zoneinfo/Europe/Vienna.py deleted file mode 100644 index 5933d9d9..00000000 --- a/modules/pytz/zoneinfo/Europe/Vienna.py +++ /dev/null @@ -1,300 +0,0 @@ -'''tzinfo timezone information for Europe/Vienna.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vienna(DstTzInfo): - '''Europe/Vienna timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Vienna' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1919,12,31,23,0,0), -d(1920,4,5,1,0,0), -d(1920,9,13,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,4,2,1,0,0), -d(1945,4,12,1,0,0), -d(1945,12,31,23,0,0), -d(1946,4,14,1,0,0), -d(1946,10,6,1,0,0), -d(1947,4,6,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1980,4,5,23,0,0), -d(1980,9,27,22,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Vienna = Vienna() - diff --git a/modules/pytz/zoneinfo/Europe/Vilnius.py b/modules/pytz/zoneinfo/Europe/Vilnius.py deleted file mode 100644 index 51e3f435..00000000 --- a/modules/pytz/zoneinfo/Europe/Vilnius.py +++ /dev/null @@ -1,262 +0,0 @@ -'''tzinfo timezone information for Europe/Vilnius.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Vilnius(DstTzInfo): - '''Europe/Vilnius timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Vilnius' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,12,31,22,36,0), -d(1919,10,9,22,24,24), -d(1920,7,11,23,0,0), -d(1920,10,8,22,0,0), -d(1940,8,2,23,0,0), -d(1941,6,23,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,7,31,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1992,3,29,0,0,0), -d(1992,9,27,0,0,0), -d(1993,3,28,0,0,0), -d(1993,9,26,0,0,0), -d(1994,3,27,0,0,0), -d(1994,9,25,0,0,0), -d(1995,3,26,0,0,0), -d(1995,9,24,0,0,0), -d(1996,3,31,0,0,0), -d(1996,10,27,0,0,0), -d(1997,3,30,0,0,0), -d(1997,10,26,0,0,0), -d(1997,12,31,22,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2002,12,31,22,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5040,0,'WMT'), -i(5760,0,'KMT'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(7200,0,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Vilnius = Vilnius() - diff --git a/modules/pytz/zoneinfo/Europe/Warsaw.py b/modules/pytz/zoneinfo/Europe/Warsaw.py deleted file mode 100644 index 1a888871..00000000 --- a/modules/pytz/zoneinfo/Europe/Warsaw.py +++ /dev/null @@ -1,352 +0,0 @@ -'''tzinfo timezone information for Europe/Warsaw.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Warsaw(DstTzInfo): - '''Europe/Warsaw timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Warsaw' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,8,4,22,36,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1919,4,15,0,0,0), -d(1919,9,16,0,0,0), -d(1922,5,31,22,0,0), -d(1940,6,23,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,30,22,0,0), -d(1945,4,28,23,0,0), -d(1945,10,31,22,0,0), -d(1946,4,13,23,0,0), -d(1946,10,7,1,0,0), -d(1947,5,4,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,10,1,0,0), -d(1949,10,2,1,0,0), -d(1957,6,2,0,0,0), -d(1957,9,29,0,0,0), -d(1958,3,30,0,0,0), -d(1958,9,28,0,0,0), -d(1959,5,31,0,0,0), -d(1959,10,4,0,0,0), -d(1960,4,3,0,0,0), -d(1960,10,2,0,0,0), -d(1961,5,28,0,0,0), -d(1961,10,1,0,0,0), -d(1962,5,27,0,0,0), -d(1962,9,30,0,0,0), -d(1963,5,26,0,0,0), -d(1963,9,29,0,0,0), -d(1964,5,31,0,0,0), -d(1964,9,27,0,0,0), -d(1976,12,31,23,0,0), -d(1977,4,3,0,0,0), -d(1977,9,25,0,0,0), -d(1978,4,2,0,0,0), -d(1978,10,1,0,0,0), -d(1979,4,1,0,0,0), -d(1979,9,30,0,0,0), -d(1980,4,6,0,0,0), -d(1980,9,28,0,0,0), -d(1981,3,29,0,0,0), -d(1981,9,27,0,0,0), -d(1982,3,28,0,0,0), -d(1982,9,26,0,0,0), -d(1983,3,27,0,0,0), -d(1983,9,25,0,0,0), -d(1984,3,25,0,0,0), -d(1984,9,30,0,0,0), -d(1985,3,31,0,0,0), -d(1985,9,29,0,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1987,12,31,23,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5040,0,'WMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Warsaw = Warsaw() - diff --git a/modules/pytz/zoneinfo/Europe/Zagreb.py b/modules/pytz/zoneinfo/Europe/Zagreb.py deleted file mode 100644 index 18d5f3a5..00000000 --- a/modules/pytz/zoneinfo/Europe/Zagreb.py +++ /dev/null @@ -1,258 +0,0 @@ -'''tzinfo timezone information for Europe/Zagreb.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Zagreb(DstTzInfo): - '''Europe/Zagreb timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Zagreb' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1941,4,18,22,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1945,5,8,1,0,0), -d(1945,9,16,1,0,0), -d(1982,11,26,23,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Zagreb = Zagreb() - diff --git a/modules/pytz/zoneinfo/Europe/Zaporozhye.py b/modules/pytz/zoneinfo/Europe/Zaporozhye.py deleted file mode 100644 index 51d09179..00000000 --- a/modules/pytz/zoneinfo/Europe/Zaporozhye.py +++ /dev/null @@ -1,262 +0,0 @@ -'''tzinfo timezone information for Europe/Zaporozhye.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Zaporozhye(DstTzInfo): - '''Europe/Zaporozhye timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Zaporozhye' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1924,5,1,21,40,0), -d(1930,6,20,22,0,0), -d(1941,8,24,21,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1943,10,24,23,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,28,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,26,21,0,0), -d(1993,3,27,22,0,0), -d(1993,9,25,21,0,0), -d(1994,3,26,22,0,0), -d(1994,9,24,21,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(8400,0,'CUT'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(7200,-3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Zaporozhye = Zaporozhye() - diff --git a/modules/pytz/zoneinfo/Europe/Zurich.py b/modules/pytz/zoneinfo/Europe/Zurich.py deleted file mode 100644 index 62ee715a..00000000 --- a/modules/pytz/zoneinfo/Europe/Zurich.py +++ /dev/null @@ -1,260 +0,0 @@ -'''tzinfo timezone information for Europe/Zurich.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Zurich(DstTzInfo): - '''Europe/Zurich timezone definition. See datetime.tzinfo for details''' - - zone = 'Europe/Zurich' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,11,1,23,0,0), -d(1940,12,30,22,0,0), -d(1941,5,4,1,0,0), -d(1941,10,4,22,0,0), -d(1942,5,3,1,0,0), -d(1942,10,3,22,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Zurich = Zurich() - diff --git a/modules/pytz/zoneinfo/Europe/__init__.py b/modules/pytz/zoneinfo/Europe/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/GB.py b/modules/pytz/zoneinfo/GB.py deleted file mode 100644 index 559ae59d..00000000 --- a/modules/pytz/zoneinfo/GB.py +++ /dev/null @@ -1,504 +0,0 @@ -'''tzinfo timezone information for GB.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class GB(DstTzInfo): - '''GB timezone definition. See datetime.tzinfo for details''' - - zone = 'GB' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,0,0), -d(1916,10,1,2,0,0), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,1,0,0), -d(1941,8,10,1,0,0), -d(1942,4,5,1,0,0), -d(1942,8,9,1,0,0), -d(1943,4,4,1,0,0), -d(1943,8,15,1,0,0), -d(1944,4,2,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,7,15,1,0,0), -d(1945,10,7,2,0,0), -d(1946,4,14,2,0,0), -d(1946,10,6,2,0,0), -d(1947,3,16,2,0,0), -d(1947,4,13,1,0,0), -d(1947,8,10,1,0,0), -d(1947,11,2,2,0,0), -d(1948,3,14,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(3600,0,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), - ] - -GB = GB() - diff --git a/modules/pytz/zoneinfo/GB_minus_Eire.py b/modules/pytz/zoneinfo/GB_minus_Eire.py deleted file mode 100644 index 629bd90f..00000000 --- a/modules/pytz/zoneinfo/GB_minus_Eire.py +++ /dev/null @@ -1,504 +0,0 @@ -'''tzinfo timezone information for GB_minus_Eire.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class GB_minus_Eire(DstTzInfo): - '''GB_minus_Eire timezone definition. See datetime.tzinfo for details''' - - zone = 'GB_minus_Eire' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,5,21,2,0,0), -d(1916,10,1,2,0,0), -d(1917,4,8,2,0,0), -d(1917,9,17,2,0,0), -d(1918,3,24,2,0,0), -d(1918,9,30,2,0,0), -d(1919,3,30,2,0,0), -d(1919,9,29,2,0,0), -d(1920,3,28,2,0,0), -d(1920,10,25,2,0,0), -d(1921,4,3,2,0,0), -d(1921,10,3,2,0,0), -d(1922,3,26,2,0,0), -d(1922,10,8,2,0,0), -d(1923,4,22,2,0,0), -d(1923,9,16,2,0,0), -d(1924,4,13,2,0,0), -d(1924,9,21,2,0,0), -d(1925,4,19,2,0,0), -d(1925,10,4,2,0,0), -d(1926,4,18,2,0,0), -d(1926,10,3,2,0,0), -d(1927,4,10,2,0,0), -d(1927,10,2,2,0,0), -d(1928,4,22,2,0,0), -d(1928,10,7,2,0,0), -d(1929,4,21,2,0,0), -d(1929,10,6,2,0,0), -d(1930,4,13,2,0,0), -d(1930,10,5,2,0,0), -d(1931,4,19,2,0,0), -d(1931,10,4,2,0,0), -d(1932,4,17,2,0,0), -d(1932,10,2,2,0,0), -d(1933,4,9,2,0,0), -d(1933,10,8,2,0,0), -d(1934,4,22,2,0,0), -d(1934,10,7,2,0,0), -d(1935,4,14,2,0,0), -d(1935,10,6,2,0,0), -d(1936,4,19,2,0,0), -d(1936,10,4,2,0,0), -d(1937,4,18,2,0,0), -d(1937,10,3,2,0,0), -d(1938,4,10,2,0,0), -d(1938,10,2,2,0,0), -d(1939,4,16,2,0,0), -d(1939,11,19,2,0,0), -d(1940,2,25,2,0,0), -d(1941,5,4,1,0,0), -d(1941,8,10,1,0,0), -d(1942,4,5,1,0,0), -d(1942,8,9,1,0,0), -d(1943,4,4,1,0,0), -d(1943,8,15,1,0,0), -d(1944,4,2,1,0,0), -d(1944,9,17,1,0,0), -d(1945,4,2,1,0,0), -d(1945,7,15,1,0,0), -d(1945,10,7,2,0,0), -d(1946,4,14,2,0,0), -d(1946,10,6,2,0,0), -d(1947,3,16,2,0,0), -d(1947,4,13,1,0,0), -d(1947,8,10,1,0,0), -d(1947,11,2,2,0,0), -d(1948,3,14,2,0,0), -d(1948,10,31,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,16,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,15,2,0,0), -d(1951,10,21,2,0,0), -d(1952,4,20,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,19,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,11,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,17,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,22,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,14,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,20,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,19,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,10,2,0,0), -d(1960,10,2,2,0,0), -d(1961,3,26,2,0,0), -d(1961,10,29,2,0,0), -d(1962,3,25,2,0,0), -d(1962,10,28,2,0,0), -d(1963,3,31,2,0,0), -d(1963,10,27,2,0,0), -d(1964,3,22,2,0,0), -d(1964,10,25,2,0,0), -d(1965,3,21,2,0,0), -d(1965,10,24,2,0,0), -d(1966,3,20,2,0,0), -d(1966,10,23,2,0,0), -d(1967,3,19,2,0,0), -d(1967,10,29,2,0,0), -d(1968,2,18,2,0,0), -d(1968,10,26,23,0,0), -d(1971,10,31,2,0,0), -d(1972,3,19,2,0,0), -d(1972,10,29,2,0,0), -d(1973,3,18,2,0,0), -d(1973,10,28,2,0,0), -d(1974,3,17,2,0,0), -d(1974,10,27,2,0,0), -d(1975,3,16,2,0,0), -d(1975,10,26,2,0,0), -d(1976,3,21,2,0,0), -d(1976,10,24,2,0,0), -d(1977,3,20,2,0,0), -d(1977,10,23,2,0,0), -d(1978,3,19,2,0,0), -d(1978,10,29,2,0,0), -d(1979,3,18,2,0,0), -d(1979,10,28,2,0,0), -d(1980,3,16,2,0,0), -d(1980,10,26,2,0,0), -d(1981,3,29,1,0,0), -d(1981,10,25,1,0,0), -d(1982,3,28,1,0,0), -d(1982,10,24,1,0,0), -d(1983,3,27,1,0,0), -d(1983,10,23,1,0,0), -d(1984,3,25,1,0,0), -d(1984,10,28,1,0,0), -d(1985,3,31,1,0,0), -d(1985,10,27,1,0,0), -d(1986,3,30,1,0,0), -d(1986,10,26,1,0,0), -d(1987,3,29,1,0,0), -d(1987,10,25,1,0,0), -d(1988,3,27,1,0,0), -d(1988,10,23,1,0,0), -d(1989,3,26,1,0,0), -d(1989,10,29,1,0,0), -d(1990,3,25,1,0,0), -d(1990,10,28,1,0,0), -d(1991,3,31,1,0,0), -d(1991,10,27,1,0,0), -d(1992,3,29,1,0,0), -d(1992,10,25,1,0,0), -d(1993,3,28,1,0,0), -d(1993,10,24,1,0,0), -d(1994,3,27,1,0,0), -d(1994,10,23,1,0,0), -d(1995,3,26,1,0,0), -d(1995,10,22,1,0,0), -d(1996,1,1,0,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(7200,7200,'BDST'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(3600,0,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), -i(3600,3600,'BST'), -i(0,0,'GMT'), - ] - -GB_minus_Eire = GB_minus_Eire() - diff --git a/modules/pytz/zoneinfo/GMT.py b/modules/pytz/zoneinfo/GMT.py deleted file mode 100644 index d9252ca0..00000000 --- a/modules/pytz/zoneinfo/GMT.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for GMT.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT(StaticTzInfo): - '''GMT timezone definition. See datetime.tzinfo for details''' - zone = 'GMT' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT = GMT() - diff --git a/modules/pytz/zoneinfo/GMT0.py b/modules/pytz/zoneinfo/GMT0.py deleted file mode 100644 index c67b1550..00000000 --- a/modules/pytz/zoneinfo/GMT0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for GMT0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT0(StaticTzInfo): - '''GMT0 timezone definition. See datetime.tzinfo for details''' - zone = 'GMT0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT0 = GMT0() - diff --git a/modules/pytz/zoneinfo/GMT_minus_0.py b/modules/pytz/zoneinfo/GMT_minus_0.py deleted file mode 100644 index 1504d569..00000000 --- a/modules/pytz/zoneinfo/GMT_minus_0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for GMT_minus_0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_minus_0(StaticTzInfo): - '''GMT_minus_0 timezone definition. See datetime.tzinfo for details''' - zone = 'GMT_minus_0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT_minus_0 = GMT_minus_0() - diff --git a/modules/pytz/zoneinfo/GMT_plus_0.py b/modules/pytz/zoneinfo/GMT_plus_0.py deleted file mode 100644 index 543f8566..00000000 --- a/modules/pytz/zoneinfo/GMT_plus_0.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for GMT_plus_0.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class GMT_plus_0(StaticTzInfo): - '''GMT_plus_0 timezone definition. See datetime.tzinfo for details''' - zone = 'GMT_plus_0' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -GMT_plus_0 = GMT_plus_0() - diff --git a/modules/pytz/zoneinfo/Greenwich.py b/modules/pytz/zoneinfo/Greenwich.py deleted file mode 100644 index 46174f74..00000000 --- a/modules/pytz/zoneinfo/Greenwich.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Greenwich.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Greenwich(StaticTzInfo): - '''Greenwich timezone definition. See datetime.tzinfo for details''' - zone = 'Greenwich' - _utcoffset = timedelta(seconds=0) - _tzname = 'GMT' - -Greenwich = Greenwich() - diff --git a/modules/pytz/zoneinfo/HST.py b/modules/pytz/zoneinfo/HST.py deleted file mode 100644 index ee3d5d23..00000000 --- a/modules/pytz/zoneinfo/HST.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for HST.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class HST(StaticTzInfo): - '''HST timezone definition. See datetime.tzinfo for details''' - zone = 'HST' - _utcoffset = timedelta(seconds=-36000) - _tzname = 'HST' - -HST = HST() - diff --git a/modules/pytz/zoneinfo/Hongkong.py b/modules/pytz/zoneinfo/Hongkong.py deleted file mode 100644 index a9aa0c40..00000000 --- a/modules/pytz/zoneinfo/Hongkong.py +++ /dev/null @@ -1,158 +0,0 @@ -'''tzinfo timezone information for Hongkong.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hongkong(DstTzInfo): - '''Hongkong timezone definition. See datetime.tzinfo for details''' - - zone = 'Hongkong' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,10,29,16,23,24), -d(1946,4,19,19,30,0), -d(1946,11,30,18,30,0), -d(1947,4,12,19,30,0), -d(1947,12,29,18,30,0), -d(1948,5,1,19,30,0), -d(1948,10,30,18,30,0), -d(1949,4,2,19,30,0), -d(1949,10,29,18,30,0), -d(1950,4,1,19,30,0), -d(1950,10,28,18,30,0), -d(1951,3,31,19,30,0), -d(1951,10,27,18,30,0), -d(1952,4,5,19,30,0), -d(1952,10,25,18,30,0), -d(1953,4,4,19,30,0), -d(1953,10,31,18,30,0), -d(1954,3,20,19,30,0), -d(1954,10,30,18,30,0), -d(1955,3,19,19,30,0), -d(1955,11,5,18,30,0), -d(1956,3,17,19,30,0), -d(1956,11,3,18,30,0), -d(1957,3,23,19,30,0), -d(1957,11,2,18,30,0), -d(1958,3,22,19,30,0), -d(1958,11,1,18,30,0), -d(1959,3,21,19,30,0), -d(1959,10,31,18,30,0), -d(1960,3,19,19,30,0), -d(1960,11,5,18,30,0), -d(1961,3,18,19,30,0), -d(1961,11,4,18,30,0), -d(1962,3,17,19,30,0), -d(1962,11,3,18,30,0), -d(1963,3,23,19,30,0), -d(1963,11,2,18,30,0), -d(1964,3,21,19,30,0), -d(1964,10,31,18,30,0), -d(1965,4,17,19,30,0), -d(1965,10,16,18,30,0), -d(1966,4,16,19,30,0), -d(1966,10,15,18,30,0), -d(1967,4,15,19,30,0), -d(1967,10,21,18,30,0), -d(1968,4,20,19,30,0), -d(1968,10,19,18,30,0), -d(1969,4,19,19,30,0), -d(1969,10,18,18,30,0), -d(1970,4,18,19,30,0), -d(1970,10,17,18,30,0), -d(1971,4,17,19,30,0), -d(1971,10,16,18,30,0), -d(1972,4,15,19,30,0), -d(1972,10,21,18,30,0), -d(1973,4,21,19,30,0), -d(1973,10,20,18,30,0), -d(1974,4,20,19,30,0), -d(1974,10,19,18,30,0), -d(1975,4,19,19,30,0), -d(1975,10,18,18,30,0), -d(1976,4,17,19,30,0), -d(1976,10,16,18,30,0), -d(1977,4,16,19,30,0), -d(1977,10,15,18,30,0), -d(1979,5,12,19,30,0), -d(1979,10,20,18,30,0), -d(1980,5,10,19,30,0), -d(1980,10,18,18,30,0), - ] - - _transition_info = [ -i(27420,0,'LMT'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), -i(32400,3600,'HKST'), -i(28800,0,'HKT'), - ] - -Hongkong = Hongkong() - diff --git a/modules/pytz/zoneinfo/Iceland.py b/modules/pytz/zoneinfo/Iceland.py deleted file mode 100644 index e62b5968..00000000 --- a/modules/pytz/zoneinfo/Iceland.py +++ /dev/null @@ -1,148 +0,0 @@ -'''tzinfo timezone information for Iceland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Iceland(DstTzInfo): - '''Iceland timezone definition. See datetime.tzinfo for details''' - - zone = 'Iceland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1908,1,1,1,27,48), -d(1917,2,20,0,0,0), -d(1917,10,21,1,0,0), -d(1918,2,20,0,0,0), -d(1918,11,16,1,0,0), -d(1939,4,30,0,0,0), -d(1939,11,29,2,0,0), -d(1940,2,25,3,0,0), -d(1940,11,3,2,0,0), -d(1941,3,2,2,0,0), -d(1941,11,2,2,0,0), -d(1942,3,8,2,0,0), -d(1942,10,25,2,0,0), -d(1943,3,7,2,0,0), -d(1943,10,24,2,0,0), -d(1944,3,5,2,0,0), -d(1944,10,22,2,0,0), -d(1945,3,4,2,0,0), -d(1945,10,28,2,0,0), -d(1946,3,3,2,0,0), -d(1946,10,27,2,0,0), -d(1947,4,6,2,0,0), -d(1947,10,26,2,0,0), -d(1948,4,4,2,0,0), -d(1948,10,24,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,30,2,0,0), -d(1950,4,2,2,0,0), -d(1950,10,22,2,0,0), -d(1951,4,1,2,0,0), -d(1951,10,28,2,0,0), -d(1952,4,6,2,0,0), -d(1952,10,26,2,0,0), -d(1953,4,5,2,0,0), -d(1953,10,25,2,0,0), -d(1954,4,4,2,0,0), -d(1954,10,24,2,0,0), -d(1955,4,3,2,0,0), -d(1955,10,23,2,0,0), -d(1956,4,1,2,0,0), -d(1956,10,28,2,0,0), -d(1957,4,7,2,0,0), -d(1957,10,27,2,0,0), -d(1958,4,6,2,0,0), -d(1958,10,26,2,0,0), -d(1959,4,5,2,0,0), -d(1959,10,25,2,0,0), -d(1960,4,3,2,0,0), -d(1960,10,23,2,0,0), -d(1961,4,2,2,0,0), -d(1961,10,22,2,0,0), -d(1962,4,1,2,0,0), -d(1962,10,28,2,0,0), -d(1963,4,7,2,0,0), -d(1963,10,27,2,0,0), -d(1964,4,5,2,0,0), -d(1964,10,25,2,0,0), -d(1965,4,4,2,0,0), -d(1965,10,24,2,0,0), -d(1966,4,3,2,0,0), -d(1966,10,23,2,0,0), -d(1967,4,2,2,0,0), -d(1967,10,29,2,0,0), -d(1968,4,7,2,0,0), - ] - - _transition_info = [ -i(-5280,0,'RMT'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,3600,'ISST'), -i(-3600,0,'IST'), -i(0,0,'GMT'), - ] - -Iceland = Iceland() - diff --git a/modules/pytz/zoneinfo/Indian/Antananarivo.py b/modules/pytz/zoneinfo/Indian/Antananarivo.py deleted file mode 100644 index 05663b9d..00000000 --- a/modules/pytz/zoneinfo/Indian/Antananarivo.py +++ /dev/null @@ -1,26 +0,0 @@ -'''tzinfo timezone information for Indian/Antananarivo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Antananarivo(DstTzInfo): - '''Indian/Antananarivo timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Antananarivo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,6,30,20,49,56), -d(1954,2,27,20,0,0), -d(1954,5,29,20,0,0), - ] - - _transition_info = [ -i(11400,0,'LMT'), -i(10800,0,'EAT'), -i(14400,3600,'EAST'), -i(10800,0,'EAT'), - ] - -Antananarivo = Antananarivo() - diff --git a/modules/pytz/zoneinfo/Indian/Chagos.py b/modules/pytz/zoneinfo/Indian/Chagos.py deleted file mode 100644 index 3ea97289..00000000 --- a/modules/pytz/zoneinfo/Indian/Chagos.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Indian/Chagos.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chagos(DstTzInfo): - '''Indian/Chagos timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Chagos' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,12,31,19,10,20), -d(1995,12,31,19,0,0), - ] - - _transition_info = [ -i(17400,0,'LMT'), -i(18000,0,'IOT'), -i(21600,0,'IOT'), - ] - -Chagos = Chagos() - diff --git a/modules/pytz/zoneinfo/Indian/Christmas.py b/modules/pytz/zoneinfo/Indian/Christmas.py deleted file mode 100644 index a6a2e0b9..00000000 --- a/modules/pytz/zoneinfo/Indian/Christmas.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Indian/Christmas.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Christmas(StaticTzInfo): - '''Indian/Christmas timezone definition. See datetime.tzinfo for details''' - zone = 'Indian/Christmas' - _utcoffset = timedelta(seconds=25200) - _tzname = 'CXT' - -Christmas = Christmas() - diff --git a/modules/pytz/zoneinfo/Indian/Cocos.py b/modules/pytz/zoneinfo/Indian/Cocos.py deleted file mode 100644 index 5ffe4706..00000000 --- a/modules/pytz/zoneinfo/Indian/Cocos.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Indian/Cocos.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Cocos(StaticTzInfo): - '''Indian/Cocos timezone definition. See datetime.tzinfo for details''' - zone = 'Indian/Cocos' - _utcoffset = timedelta(seconds=23400) - _tzname = 'CCT' - -Cocos = Cocos() - diff --git a/modules/pytz/zoneinfo/Indian/Comoro.py b/modules/pytz/zoneinfo/Indian/Comoro.py deleted file mode 100644 index 98c6948f..00000000 --- a/modules/pytz/zoneinfo/Indian/Comoro.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Comoro.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Comoro(DstTzInfo): - '''Indian/Comoro timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Comoro' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,6,30,21,6,56), - ] - - _transition_info = [ -i(10380,0,'LMT'), -i(10800,0,'EAT'), - ] - -Comoro = Comoro() - diff --git a/modules/pytz/zoneinfo/Indian/Kerguelen.py b/modules/pytz/zoneinfo/Indian/Kerguelen.py deleted file mode 100644 index edc6ab21..00000000 --- a/modules/pytz/zoneinfo/Indian/Kerguelen.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Kerguelen.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kerguelen(DstTzInfo): - '''Indian/Kerguelen timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Kerguelen' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1950,1,1,0,0,0), - ] - - _transition_info = [ -i(0,0,'zzz'), -i(18000,0,'TFT'), - ] - -Kerguelen = Kerguelen() - diff --git a/modules/pytz/zoneinfo/Indian/Mahe.py b/modules/pytz/zoneinfo/Indian/Mahe.py deleted file mode 100644 index 0bd7ee36..00000000 --- a/modules/pytz/zoneinfo/Indian/Mahe.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Mahe.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mahe(DstTzInfo): - '''Indian/Mahe timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Mahe' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,5,31,20,18,12), - ] - - _transition_info = [ -i(13320,0,'LMT'), -i(14400,0,'SCT'), - ] - -Mahe = Mahe() - diff --git a/modules/pytz/zoneinfo/Indian/Maldives.py b/modules/pytz/zoneinfo/Indian/Maldives.py deleted file mode 100644 index 3f84d43d..00000000 --- a/modules/pytz/zoneinfo/Indian/Maldives.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Maldives.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Maldives(DstTzInfo): - '''Indian/Maldives timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Maldives' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1959,12,31,19,6,0), - ] - - _transition_info = [ -i(17640,0,'MMT'), -i(18000,0,'MVT'), - ] - -Maldives = Maldives() - diff --git a/modules/pytz/zoneinfo/Indian/Mauritius.py b/modules/pytz/zoneinfo/Indian/Mauritius.py deleted file mode 100644 index 0e170a6a..00000000 --- a/modules/pytz/zoneinfo/Indian/Mauritius.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Mauritius.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mauritius(DstTzInfo): - '''Indian/Mauritius timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Mauritius' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1906,12,31,20,10,0), - ] - - _transition_info = [ -i(13800,0,'LMT'), -i(14400,0,'MUT'), - ] - -Mauritius = Mauritius() - diff --git a/modules/pytz/zoneinfo/Indian/Mayotte.py b/modules/pytz/zoneinfo/Indian/Mayotte.py deleted file mode 100644 index 20df3bb2..00000000 --- a/modules/pytz/zoneinfo/Indian/Mayotte.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Mayotte.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mayotte(DstTzInfo): - '''Indian/Mayotte timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Mayotte' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,6,30,20,59,4), - ] - - _transition_info = [ -i(10860,0,'LMT'), -i(10800,0,'EAT'), - ] - -Mayotte = Mayotte() - diff --git a/modules/pytz/zoneinfo/Indian/Reunion.py b/modules/pytz/zoneinfo/Indian/Reunion.py deleted file mode 100644 index 11fb08f8..00000000 --- a/modules/pytz/zoneinfo/Indian/Reunion.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Indian/Reunion.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Reunion(DstTzInfo): - '''Indian/Reunion timezone definition. See datetime.tzinfo for details''' - - zone = 'Indian/Reunion' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,5,31,20,18,8), - ] - - _transition_info = [ -i(13320,0,'LMT'), -i(14400,0,'RET'), - ] - -Reunion = Reunion() - diff --git a/modules/pytz/zoneinfo/Indian/__init__.py b/modules/pytz/zoneinfo/Indian/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Iran.py b/modules/pytz/zoneinfo/Iran.py deleted file mode 100644 index 75fbcb96..00000000 --- a/modules/pytz/zoneinfo/Iran.py +++ /dev/null @@ -1,228 +0,0 @@ -'''tzinfo timezone information for Iran.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Iran(DstTzInfo): - '''Iran timezone definition. See datetime.tzinfo for details''' - - zone = 'Iran' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,12,31,20,34,16), -d(1945,12,31,20,34,16), -d(1977,10,31,20,30,0), -d(1978,3,20,20,0,0), -d(1978,10,20,19,0,0), -d(1978,12,31,20,0,0), -d(1979,3,20,20,30,0), -d(1979,9,18,19,30,0), -d(1980,3,20,20,30,0), -d(1980,9,22,19,30,0), -d(1991,5,2,20,30,0), -d(1991,9,21,19,30,0), -d(1992,3,21,20,30,0), -d(1992,9,21,19,30,0), -d(1993,3,21,20,30,0), -d(1993,9,21,19,30,0), -d(1994,3,21,20,30,0), -d(1994,9,21,19,30,0), -d(1995,3,21,20,30,0), -d(1995,9,21,19,30,0), -d(1996,3,20,20,30,0), -d(1996,9,20,19,30,0), -d(1997,3,21,20,30,0), -d(1997,9,21,19,30,0), -d(1998,3,21,20,30,0), -d(1998,9,21,19,30,0), -d(1999,3,21,20,30,0), -d(1999,9,21,19,30,0), -d(2000,3,20,20,30,0), -d(2000,9,20,19,30,0), -d(2001,3,21,20,30,0), -d(2001,9,21,19,30,0), -d(2002,3,21,20,30,0), -d(2002,9,21,19,30,0), -d(2003,3,21,20,30,0), -d(2003,9,21,19,30,0), -d(2004,3,20,20,30,0), -d(2004,9,20,19,30,0), -d(2005,3,21,20,30,0), -d(2005,9,21,19,30,0), -d(2006,3,21,20,30,0), -d(2006,9,21,19,30,0), -d(2007,3,21,20,30,0), -d(2007,9,21,19,30,0), -d(2008,3,20,20,30,0), -d(2008,9,20,19,30,0), -d(2009,3,21,20,30,0), -d(2009,9,21,19,30,0), -d(2010,3,21,20,30,0), -d(2010,9,21,19,30,0), -d(2011,3,21,20,30,0), -d(2011,9,21,19,30,0), -d(2012,3,20,20,30,0), -d(2012,9,20,19,30,0), -d(2013,3,21,20,30,0), -d(2013,9,21,19,30,0), -d(2014,3,21,20,30,0), -d(2014,9,21,19,30,0), -d(2015,3,21,20,30,0), -d(2015,9,21,19,30,0), -d(2016,3,20,20,30,0), -d(2016,9,20,19,30,0), -d(2017,3,21,20,30,0), -d(2017,9,21,19,30,0), -d(2018,3,21,20,30,0), -d(2018,9,21,19,30,0), -d(2019,3,21,20,30,0), -d(2019,9,21,19,30,0), -d(2020,3,20,20,30,0), -d(2020,9,20,19,30,0), -d(2021,3,21,20,30,0), -d(2021,9,21,19,30,0), -d(2022,3,21,20,30,0), -d(2022,9,21,19,30,0), -d(2023,3,21,20,30,0), -d(2023,9,21,19,30,0), -d(2024,3,20,20,30,0), -d(2024,9,20,19,30,0), -d(2025,3,21,20,30,0), -d(2025,9,21,19,30,0), -d(2026,3,21,20,30,0), -d(2026,9,21,19,30,0), -d(2027,3,21,20,30,0), -d(2027,9,21,19,30,0), -d(2028,3,20,20,30,0), -d(2028,9,20,19,30,0), -d(2029,3,20,20,30,0), -d(2029,9,20,19,30,0), -d(2030,3,21,20,30,0), -d(2030,9,21,19,30,0), -d(2031,3,21,20,30,0), -d(2031,9,21,19,30,0), -d(2032,3,20,20,30,0), -d(2032,9,20,19,30,0), -d(2033,3,20,20,30,0), -d(2033,9,20,19,30,0), -d(2034,3,21,20,30,0), -d(2034,9,21,19,30,0), -d(2035,3,21,20,30,0), -d(2035,9,21,19,30,0), -d(2036,3,20,20,30,0), -d(2036,9,20,19,30,0), -d(2037,3,20,20,30,0), -d(2037,9,20,19,30,0), - ] - - _transition_info = [ -i(12360,0,'LMT'), -i(12360,0,'TMT'), -i(12600,0,'IRST'), -i(14400,0,'IRST'), -i(18000,3600,'IRDT'), -i(14400,0,'IRST'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), -i(16200,3600,'IRDT'), -i(12600,0,'IRST'), - ] - -Iran = Iran() - diff --git a/modules/pytz/zoneinfo/Israel.py b/modules/pytz/zoneinfo/Israel.py deleted file mode 100644 index 14b0bbbb..00000000 --- a/modules/pytz/zoneinfo/Israel.py +++ /dev/null @@ -1,304 +0,0 @@ -'''tzinfo timezone information for Israel.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Israel(DstTzInfo): - '''Israel timezone definition. See datetime.tzinfo for details''' - - zone = 'Israel' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1917,12,31,21,39,20), -d(1940,5,31,22,0,0), -d(1942,10,31,21,0,0), -d(1943,4,1,0,0,0), -d(1943,10,31,21,0,0), -d(1944,3,31,22,0,0), -d(1944,10,31,21,0,0), -d(1945,4,15,22,0,0), -d(1945,10,31,23,0,0), -d(1946,4,16,0,0,0), -d(1946,10,31,21,0,0), -d(1948,5,22,22,0,0), -d(1948,8,31,20,0,0), -d(1948,10,31,23,0,0), -d(1949,4,30,22,0,0), -d(1949,10,31,23,0,0), -d(1950,4,15,22,0,0), -d(1950,9,15,0,0,0), -d(1951,3,31,22,0,0), -d(1951,11,11,0,0,0), -d(1952,4,20,0,0,0), -d(1952,10,19,0,0,0), -d(1953,4,12,0,0,0), -d(1953,9,13,0,0,0), -d(1954,6,12,22,0,0), -d(1954,9,11,21,0,0), -d(1955,6,11,0,0,0), -d(1955,9,10,21,0,0), -d(1956,6,2,22,0,0), -d(1956,9,30,0,0,0), -d(1957,4,29,0,0,0), -d(1957,9,21,21,0,0), -d(1974,7,6,22,0,0), -d(1974,10,12,21,0,0), -d(1975,4,19,22,0,0), -d(1975,8,30,21,0,0), -d(1985,4,13,22,0,0), -d(1985,9,14,21,0,0), -d(1986,5,17,22,0,0), -d(1986,9,6,21,0,0), -d(1987,4,14,22,0,0), -d(1987,9,12,21,0,0), -d(1988,4,8,22,0,0), -d(1988,9,2,21,0,0), -d(1989,4,29,22,0,0), -d(1989,9,2,21,0,0), -d(1990,3,24,22,0,0), -d(1990,8,25,21,0,0), -d(1991,3,23,22,0,0), -d(1991,8,31,21,0,0), -d(1992,3,28,22,0,0), -d(1992,9,5,21,0,0), -d(1993,4,1,22,0,0), -d(1993,9,4,21,0,0), -d(1994,3,31,22,0,0), -d(1994,8,27,21,0,0), -d(1995,3,30,22,0,0), -d(1995,9,2,21,0,0), -d(1996,3,14,22,0,0), -d(1996,9,15,21,0,0), -d(1997,3,20,22,0,0), -d(1997,9,13,21,0,0), -d(1998,3,19,22,0,0), -d(1998,9,5,21,0,0), -d(1999,4,2,0,0,0), -d(1999,9,2,23,0,0), -d(2000,4,14,0,0,0), -d(2000,10,5,22,0,0), -d(2001,4,8,23,0,0), -d(2001,9,23,22,0,0), -d(2002,3,28,23,0,0), -d(2002,10,6,22,0,0), -d(2003,3,27,23,0,0), -d(2003,10,2,22,0,0), -d(2004,4,6,23,0,0), -d(2004,9,21,22,0,0), -d(2005,4,1,0,0,0), -d(2005,10,8,23,0,0), -d(2006,3,31,0,0,0), -d(2006,9,30,23,0,0), -d(2007,3,30,0,0,0), -d(2007,9,15,23,0,0), -d(2008,3,28,0,0,0), -d(2008,10,4,23,0,0), -d(2009,3,27,0,0,0), -d(2009,9,26,23,0,0), -d(2010,3,26,0,0,0), -d(2010,9,11,23,0,0), -d(2011,4,1,0,0,0), -d(2011,10,1,23,0,0), -d(2012,3,30,0,0,0), -d(2012,9,22,23,0,0), -d(2013,3,29,0,0,0), -d(2013,9,7,23,0,0), -d(2014,3,28,0,0,0), -d(2014,9,27,23,0,0), -d(2015,3,27,0,0,0), -d(2015,9,19,23,0,0), -d(2016,4,1,0,0,0), -d(2016,10,8,23,0,0), -d(2017,3,31,0,0,0), -d(2017,9,23,23,0,0), -d(2018,3,30,0,0,0), -d(2018,9,15,23,0,0), -d(2019,3,29,0,0,0), -d(2019,10,5,23,0,0), -d(2020,3,27,0,0,0), -d(2020,9,26,23,0,0), -d(2021,3,26,0,0,0), -d(2021,9,11,23,0,0), -d(2022,4,1,0,0,0), -d(2022,10,1,23,0,0), -d(2023,3,31,0,0,0), -d(2023,9,23,23,0,0), -d(2024,3,29,0,0,0), -d(2024,10,5,23,0,0), -d(2025,3,28,0,0,0), -d(2025,9,27,23,0,0), -d(2026,3,27,0,0,0), -d(2026,9,19,23,0,0), -d(2027,3,26,0,0,0), -d(2027,10,9,23,0,0), -d(2028,3,31,0,0,0), -d(2028,9,23,23,0,0), -d(2029,3,30,0,0,0), -d(2029,9,15,23,0,0), -d(2030,3,29,0,0,0), -d(2030,10,5,23,0,0), -d(2031,3,28,0,0,0), -d(2031,9,20,23,0,0), -d(2032,3,26,0,0,0), -d(2032,9,11,23,0,0), -d(2033,4,1,0,0,0), -d(2033,10,1,23,0,0), -d(2034,3,31,0,0,0), -d(2034,9,16,23,0,0), -d(2035,3,30,0,0,0), -d(2035,10,6,23,0,0), -d(2036,3,28,0,0,0), -d(2036,9,27,23,0,0), -d(2037,3,27,0,0,0), -d(2037,9,12,23,0,0), - ] - - _transition_info = [ -i(8460,0,'JMT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(14400,7200,'IDDT'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), -i(10800,3600,'IDT'), -i(7200,0,'IST'), - ] - -Israel = Israel() - diff --git a/modules/pytz/zoneinfo/Jamaica.py b/modules/pytz/zoneinfo/Jamaica.py deleted file mode 100644 index f166a375..00000000 --- a/modules/pytz/zoneinfo/Jamaica.py +++ /dev/null @@ -1,62 +0,0 @@ -'''tzinfo timezone information for Jamaica.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Jamaica(DstTzInfo): - '''Jamaica timezone definition. See datetime.tzinfo for details''' - - zone = 'Jamaica' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,2,1,5,7,12), -d(1974,4,28,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), - ] - - _transition_info = [ -i(-18420,0,'KMT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Jamaica = Jamaica() - diff --git a/modules/pytz/zoneinfo/Japan.py b/modules/pytz/zoneinfo/Japan.py deleted file mode 100644 index e3030074..00000000 --- a/modules/pytz/zoneinfo/Japan.py +++ /dev/null @@ -1,38 +0,0 @@ -'''tzinfo timezone information for Japan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Japan(DstTzInfo): - '''Japan timezone definition. See datetime.tzinfo for details''' - - zone = 'Japan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1937,12,31,15,0,0), -d(1948,5,1,17,0,0), -d(1948,9,10,16,0,0), -d(1949,4,2,17,0,0), -d(1949,9,9,16,0,0), -d(1950,5,6,17,0,0), -d(1950,9,8,16,0,0), -d(1951,5,5,17,0,0), -d(1951,9,7,16,0,0), - ] - - _transition_info = [ -i(32400,0,'CJT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), -i(36000,3600,'JDT'), -i(32400,0,'JST'), - ] - -Japan = Japan() - diff --git a/modules/pytz/zoneinfo/Kwajalein.py b/modules/pytz/zoneinfo/Kwajalein.py deleted file mode 100644 index edab84d1..00000000 --- a/modules/pytz/zoneinfo/Kwajalein.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Kwajalein.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kwajalein(DstTzInfo): - '''Kwajalein timezone definition. See datetime.tzinfo for details''' - - zone = 'Kwajalein' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,9,30,13,0,0), -d(1993,8,20,12,0,0), - ] - - _transition_info = [ -i(39600,0,'MHT'), -i(-43200,0,'KWAT'), -i(43200,0,'MHT'), - ] - -Kwajalein = Kwajalein() - diff --git a/modules/pytz/zoneinfo/Libya.py b/modules/pytz/zoneinfo/Libya.py deleted file mode 100644 index 3ab8dbca..00000000 --- a/modules/pytz/zoneinfo/Libya.py +++ /dev/null @@ -1,78 +0,0 @@ -'''tzinfo timezone information for Libya.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Libya(DstTzInfo): - '''Libya timezone definition. See datetime.tzinfo for details''' - - zone = 'Libya' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1919,12,31,23,7,16), -d(1951,10,14,1,0,0), -d(1951,12,31,22,0,0), -d(1953,10,9,1,0,0), -d(1953,12,31,22,0,0), -d(1955,9,29,23,0,0), -d(1955,12,31,22,0,0), -d(1958,12,31,23,0,0), -d(1981,12,31,22,0,0), -d(1982,3,31,23,0,0), -d(1982,9,30,22,0,0), -d(1983,3,31,23,0,0), -d(1983,9,30,22,0,0), -d(1984,3,31,23,0,0), -d(1984,9,30,22,0,0), -d(1985,4,5,23,0,0), -d(1985,9,30,22,0,0), -d(1986,4,3,23,0,0), -d(1986,10,2,22,0,0), -d(1987,3,31,23,0,0), -d(1987,9,30,22,0,0), -d(1988,3,31,23,0,0), -d(1988,9,30,22,0,0), -d(1989,3,31,23,0,0), -d(1989,9,30,22,0,0), -d(1990,5,3,23,0,0), -d(1996,9,29,22,0,0), -d(1997,4,3,23,0,0), -d(1997,10,3,22,0,0), - ] - - _transition_info = [ -i(3180,0,'LMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,0,'EET'), - ] - -Libya = Libya() - diff --git a/modules/pytz/zoneinfo/MET.py b/modules/pytz/zoneinfo/MET.py deleted file mode 100644 index 09009209..00000000 --- a/modules/pytz/zoneinfo/MET.py +++ /dev/null @@ -1,288 +0,0 @@ -'''tzinfo timezone information for MET.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class MET(DstTzInfo): - '''MET timezone definition. See datetime.tzinfo for details''' - - zone = 'MET' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1940,4,1,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,10,2,1,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), -i(7200,3600,'MEST'), -i(3600,0,'MET'), - ] - -MET = MET() - diff --git a/modules/pytz/zoneinfo/MST.py b/modules/pytz/zoneinfo/MST.py deleted file mode 100644 index 6a9cc946..00000000 --- a/modules/pytz/zoneinfo/MST.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for MST.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class MST(StaticTzInfo): - '''MST timezone definition. See datetime.tzinfo for details''' - zone = 'MST' - _utcoffset = timedelta(seconds=-25200) - _tzname = 'MST' - -MST = MST() - diff --git a/modules/pytz/zoneinfo/MST7MDT.py b/modules/pytz/zoneinfo/MST7MDT.py deleted file mode 100644 index baad8bec..00000000 --- a/modules/pytz/zoneinfo/MST7MDT.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for MST7MDT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class MST7MDT(DstTzInfo): - '''MST7MDT timezone definition. See datetime.tzinfo for details''' - - zone = 'MST7MDT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -MST7MDT = MST7MDT() - diff --git a/modules/pytz/zoneinfo/Mexico/BajaNorte.py b/modules/pytz/zoneinfo/Mexico/BajaNorte.py deleted file mode 100644 index c3778436..00000000 --- a/modules/pytz/zoneinfo/Mexico/BajaNorte.py +++ /dev/null @@ -1,316 +0,0 @@ -'''tzinfo timezone information for Mexico/BajaNorte.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class BajaNorte(DstTzInfo): - '''Mexico/BajaNorte timezone definition. See datetime.tzinfo for details''' - - zone = 'Mexico/BajaNorte' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,8,0,0), -d(1924,1,1,7,0,0), -d(1927,6,11,7,0,0), -d(1930,11,15,7,0,0), -d(1931,4,1,8,0,0), -d(1931,9,30,7,0,0), -d(1942,4,24,8,0,0), -d(1945,11,12,7,0,0), -d(1948,4,5,8,0,0), -d(1949,1,14,7,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,4,1,10,0,0), -d(2007,10,28,9,0,0), -d(2008,4,6,10,0,0), -d(2008,10,26,9,0,0), -d(2009,4,5,10,0,0), -d(2009,10,25,9,0,0), -d(2010,4,4,10,0,0), -d(2010,10,31,9,0,0), -d(2011,4,3,10,0,0), -d(2011,10,30,9,0,0), -d(2012,4,1,10,0,0), -d(2012,10,28,9,0,0), -d(2013,4,7,10,0,0), -d(2013,10,27,9,0,0), -d(2014,4,6,10,0,0), -d(2014,10,26,9,0,0), -d(2015,4,5,10,0,0), -d(2015,10,25,9,0,0), -d(2016,4,3,10,0,0), -d(2016,10,30,9,0,0), -d(2017,4,2,10,0,0), -d(2017,10,29,9,0,0), -d(2018,4,1,10,0,0), -d(2018,10,28,9,0,0), -d(2019,4,7,10,0,0), -d(2019,10,27,9,0,0), -d(2020,4,5,10,0,0), -d(2020,10,25,9,0,0), -d(2021,4,4,10,0,0), -d(2021,10,31,9,0,0), -d(2022,4,3,10,0,0), -d(2022,10,30,9,0,0), -d(2023,4,2,10,0,0), -d(2023,10,29,9,0,0), -d(2024,4,7,10,0,0), -d(2024,10,27,9,0,0), -d(2025,4,6,10,0,0), -d(2025,10,26,9,0,0), -d(2026,4,5,10,0,0), -d(2026,10,25,9,0,0), -d(2027,4,4,10,0,0), -d(2027,10,31,9,0,0), -d(2028,4,2,10,0,0), -d(2028,10,29,9,0,0), -d(2029,4,1,10,0,0), -d(2029,10,28,9,0,0), -d(2030,4,7,10,0,0), -d(2030,10,27,9,0,0), -d(2031,4,6,10,0,0), -d(2031,10,26,9,0,0), -d(2032,4,4,10,0,0), -d(2032,10,31,9,0,0), -d(2033,4,3,10,0,0), -d(2033,10,30,9,0,0), -d(2034,4,2,10,0,0), -d(2034,10,29,9,0,0), -d(2035,4,1,10,0,0), -d(2035,10,28,9,0,0), -d(2036,4,6,10,0,0), -d(2036,10,26,9,0,0), -d(2037,4,5,10,0,0), -d(2037,10,25,9,0,0), - ] - - _transition_info = [ -i(-28080,0,'LMT'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -BajaNorte = BajaNorte() - diff --git a/modules/pytz/zoneinfo/Mexico/BajaSur.py b/modules/pytz/zoneinfo/Mexico/BajaSur.py deleted file mode 100644 index 22da0533..00000000 --- a/modules/pytz/zoneinfo/Mexico/BajaSur.py +++ /dev/null @@ -1,206 +0,0 @@ -'''tzinfo timezone information for Mexico/BajaSur.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class BajaSur(DstTzInfo): - '''Mexico/BajaSur timezone definition. See datetime.tzinfo for details''' - - zone = 'Mexico/BajaSur' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1942,4,24,6,0,0), -d(1949,1,14,7,0,0), -d(1970,1,1,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,5,6,9,0,0), -d(2001,9,30,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,4,1,9,0,0), -d(2007,10,28,8,0,0), -d(2008,4,6,9,0,0), -d(2008,10,26,8,0,0), -d(2009,4,5,9,0,0), -d(2009,10,25,8,0,0), -d(2010,4,4,9,0,0), -d(2010,10,31,8,0,0), -d(2011,4,3,9,0,0), -d(2011,10,30,8,0,0), -d(2012,4,1,9,0,0), -d(2012,10,28,8,0,0), -d(2013,4,7,9,0,0), -d(2013,10,27,8,0,0), -d(2014,4,6,9,0,0), -d(2014,10,26,8,0,0), -d(2015,4,5,9,0,0), -d(2015,10,25,8,0,0), -d(2016,4,3,9,0,0), -d(2016,10,30,8,0,0), -d(2017,4,2,9,0,0), -d(2017,10,29,8,0,0), -d(2018,4,1,9,0,0), -d(2018,10,28,8,0,0), -d(2019,4,7,9,0,0), -d(2019,10,27,8,0,0), -d(2020,4,5,9,0,0), -d(2020,10,25,8,0,0), -d(2021,4,4,9,0,0), -d(2021,10,31,8,0,0), -d(2022,4,3,9,0,0), -d(2022,10,30,8,0,0), -d(2023,4,2,9,0,0), -d(2023,10,29,8,0,0), -d(2024,4,7,9,0,0), -d(2024,10,27,8,0,0), -d(2025,4,6,9,0,0), -d(2025,10,26,8,0,0), -d(2026,4,5,9,0,0), -d(2026,10,25,8,0,0), -d(2027,4,4,9,0,0), -d(2027,10,31,8,0,0), -d(2028,4,2,9,0,0), -d(2028,10,29,8,0,0), -d(2029,4,1,9,0,0), -d(2029,10,28,8,0,0), -d(2030,4,7,9,0,0), -d(2030,10,27,8,0,0), -d(2031,4,6,9,0,0), -d(2031,10,26,8,0,0), -d(2032,4,4,9,0,0), -d(2032,10,31,8,0,0), -d(2033,4,3,9,0,0), -d(2033,10,30,8,0,0), -d(2034,4,2,9,0,0), -d(2034,10,29,8,0,0), -d(2035,4,1,9,0,0), -d(2035,10,28,8,0,0), -d(2036,4,6,9,0,0), -d(2036,10,26,8,0,0), -d(2037,4,5,9,0,0), -d(2037,10,25,8,0,0), - ] - - _transition_info = [ -i(-25560,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-28800,0,'PST'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -BajaSur = BajaSur() - diff --git a/modules/pytz/zoneinfo/Mexico/General.py b/modules/pytz/zoneinfo/Mexico/General.py deleted file mode 100644 index 9a224612..00000000 --- a/modules/pytz/zoneinfo/Mexico/General.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for Mexico/General.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class General(DstTzInfo): - '''Mexico/General timezone definition. See datetime.tzinfo for details''' - - zone = 'Mexico/General' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1922,1,1,7,0,0), -d(1927,6,11,6,0,0), -d(1930,11,15,6,0,0), -d(1931,5,2,6,0,0), -d(1931,10,1,6,0,0), -d(1932,4,1,7,0,0), -d(1939,2,5,6,0,0), -d(1939,6,25,5,0,0), -d(1940,12,9,6,0,0), -d(1941,4,1,5,0,0), -d(1943,12,16,6,0,0), -d(1944,5,1,5,0,0), -d(1950,2,12,6,0,0), -d(1950,7,30,5,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,5,6,8,0,0), -d(2001,9,30,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,4,1,8,0,0), -d(2007,10,28,7,0,0), -d(2008,4,6,8,0,0), -d(2008,10,26,7,0,0), -d(2009,4,5,8,0,0), -d(2009,10,25,7,0,0), -d(2010,4,4,8,0,0), -d(2010,10,31,7,0,0), -d(2011,4,3,8,0,0), -d(2011,10,30,7,0,0), -d(2012,4,1,8,0,0), -d(2012,10,28,7,0,0), -d(2013,4,7,8,0,0), -d(2013,10,27,7,0,0), -d(2014,4,6,8,0,0), -d(2014,10,26,7,0,0), -d(2015,4,5,8,0,0), -d(2015,10,25,7,0,0), -d(2016,4,3,8,0,0), -d(2016,10,30,7,0,0), -d(2017,4,2,8,0,0), -d(2017,10,29,7,0,0), -d(2018,4,1,8,0,0), -d(2018,10,28,7,0,0), -d(2019,4,7,8,0,0), -d(2019,10,27,7,0,0), -d(2020,4,5,8,0,0), -d(2020,10,25,7,0,0), -d(2021,4,4,8,0,0), -d(2021,10,31,7,0,0), -d(2022,4,3,8,0,0), -d(2022,10,30,7,0,0), -d(2023,4,2,8,0,0), -d(2023,10,29,7,0,0), -d(2024,4,7,8,0,0), -d(2024,10,27,7,0,0), -d(2025,4,6,8,0,0), -d(2025,10,26,7,0,0), -d(2026,4,5,8,0,0), -d(2026,10,25,7,0,0), -d(2027,4,4,8,0,0), -d(2027,10,31,7,0,0), -d(2028,4,2,8,0,0), -d(2028,10,29,7,0,0), -d(2029,4,1,8,0,0), -d(2029,10,28,7,0,0), -d(2030,4,7,8,0,0), -d(2030,10,27,7,0,0), -d(2031,4,6,8,0,0), -d(2031,10,26,7,0,0), -d(2032,4,4,8,0,0), -d(2032,10,31,7,0,0), -d(2033,4,3,8,0,0), -d(2033,10,30,7,0,0), -d(2034,4,2,8,0,0), -d(2034,10,29,7,0,0), -d(2035,4,1,8,0,0), -d(2035,10,28,7,0,0), -d(2036,4,6,8,0,0), -d(2036,10,26,7,0,0), -d(2037,4,5,8,0,0), -d(2037,10,25,7,0,0), - ] - - _transition_info = [ -i(-23820,0,'LMT'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-25200,0,'MST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -General = General() - diff --git a/modules/pytz/zoneinfo/Mexico/__init__.py b/modules/pytz/zoneinfo/Mexico/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/NZ.py b/modules/pytz/zoneinfo/NZ.py deleted file mode 100644 index 8e80f819..00000000 --- a/modules/pytz/zoneinfo/NZ.py +++ /dev/null @@ -1,330 +0,0 @@ -'''tzinfo timezone information for NZ.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class NZ(DstTzInfo): - '''NZ timezone definition. See datetime.tzinfo for details''' - - zone = 'NZ' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,11,5,14,30,0), -d(1928,3,3,13,30,0), -d(1928,10,13,14,30,0), -d(1929,3,16,14,0,0), -d(1929,10,12,14,30,0), -d(1930,3,15,14,0,0), -d(1930,10,11,14,30,0), -d(1931,3,14,14,0,0), -d(1931,10,10,14,30,0), -d(1932,3,19,14,0,0), -d(1932,10,8,14,30,0), -d(1933,3,18,14,0,0), -d(1933,10,7,14,30,0), -d(1934,4,28,14,0,0), -d(1934,9,29,14,30,0), -d(1935,4,27,14,0,0), -d(1935,9,28,14,30,0), -d(1936,4,25,14,0,0), -d(1936,9,26,14,30,0), -d(1937,4,24,14,0,0), -d(1937,9,25,14,30,0), -d(1938,4,23,14,0,0), -d(1938,9,24,14,30,0), -d(1939,4,29,14,0,0), -d(1939,9,23,14,30,0), -d(1940,4,27,14,0,0), -d(1940,9,28,14,30,0), -d(1945,12,31,12,0,0), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(41400,0,'NZMT'), -i(45000,3600,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), - ] - -NZ = NZ() - diff --git a/modules/pytz/zoneinfo/NZ_minus_CHAT.py b/modules/pytz/zoneinfo/NZ_minus_CHAT.py deleted file mode 100644 index 4cbbb3ee..00000000 --- a/modules/pytz/zoneinfo/NZ_minus_CHAT.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for NZ_minus_CHAT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class NZ_minus_CHAT(DstTzInfo): - '''NZ_minus_CHAT timezone definition. See datetime.tzinfo for details''' - - zone = 'NZ_minus_CHAT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1956,12,31,11,46,12), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(44040,0,'LMT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), - ] - -NZ_minus_CHAT = NZ_minus_CHAT() - diff --git a/modules/pytz/zoneinfo/Navajo.py b/modules/pytz/zoneinfo/Navajo.py deleted file mode 100644 index 793142ec..00000000 --- a/modules/pytz/zoneinfo/Navajo.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for Navajo.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Navajo(DstTzInfo): - '''Navajo timezone definition. See datetime.tzinfo for details''' - - zone = 'Navajo' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1920,3,28,9,0,0), -d(1920,10,31,8,0,0), -d(1921,3,27,9,0,0), -d(1921,5,22,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,8,0,0), -d(1966,4,24,9,0,0), -d(1966,10,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Navajo = Navajo() - diff --git a/modules/pytz/zoneinfo/PRC.py b/modules/pytz/zoneinfo/PRC.py deleted file mode 100644 index 872a94da..00000000 --- a/modules/pytz/zoneinfo/PRC.py +++ /dev/null @@ -1,54 +0,0 @@ -'''tzinfo timezone information for PRC.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class PRC(DstTzInfo): - '''PRC timezone definition. See datetime.tzinfo for details''' - - zone = 'PRC' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,12,31,15,54,8), -d(1940,6,2,16,0,0), -d(1940,9,30,15,0,0), -d(1941,3,15,16,0,0), -d(1941,9,30,15,0,0), -d(1986,5,3,16,0,0), -d(1986,9,13,15,0,0), -d(1987,4,11,16,0,0), -d(1987,9,12,15,0,0), -d(1988,4,9,16,0,0), -d(1988,9,10,15,0,0), -d(1989,4,15,16,0,0), -d(1989,9,16,15,0,0), -d(1990,4,14,16,0,0), -d(1990,9,15,15,0,0), -d(1991,4,13,16,0,0), -d(1991,9,14,15,0,0), - ] - - _transition_info = [ -i(29160,0,'LMT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -PRC = PRC() - diff --git a/modules/pytz/zoneinfo/PST8PDT.py b/modules/pytz/zoneinfo/PST8PDT.py deleted file mode 100644 index b4ef54d6..00000000 --- a/modules/pytz/zoneinfo/PST8PDT.py +++ /dev/null @@ -1,318 +0,0 @@ -'''tzinfo timezone information for PST8PDT.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class PST8PDT(DstTzInfo): - '''PST8PDT timezone definition. See datetime.tzinfo for details''' - - zone = 'PST8PDT' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,10,0,0), -d(1918,10,27,9,0,0), -d(1919,3,30,10,0,0), -d(1919,10,26,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,1,6,10,0,0), -d(1974,10,27,9,0,0), -d(1975,2,23,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,3,11,10,0,0), -d(2007,11,4,9,0,0), -d(2008,3,9,10,0,0), -d(2008,11,2,9,0,0), -d(2009,3,8,10,0,0), -d(2009,11,1,9,0,0), -d(2010,3,14,10,0,0), -d(2010,11,7,9,0,0), -d(2011,3,13,10,0,0), -d(2011,11,6,9,0,0), -d(2012,3,11,10,0,0), -d(2012,11,4,9,0,0), -d(2013,3,10,10,0,0), -d(2013,11,3,9,0,0), -d(2014,3,9,10,0,0), -d(2014,11,2,9,0,0), -d(2015,3,8,10,0,0), -d(2015,11,1,9,0,0), -d(2016,3,13,10,0,0), -d(2016,11,6,9,0,0), -d(2017,3,12,10,0,0), -d(2017,11,5,9,0,0), -d(2018,3,11,10,0,0), -d(2018,11,4,9,0,0), -d(2019,3,10,10,0,0), -d(2019,11,3,9,0,0), -d(2020,3,8,10,0,0), -d(2020,11,1,9,0,0), -d(2021,3,14,10,0,0), -d(2021,11,7,9,0,0), -d(2022,3,13,10,0,0), -d(2022,11,6,9,0,0), -d(2023,3,12,10,0,0), -d(2023,11,5,9,0,0), -d(2024,3,10,10,0,0), -d(2024,11,3,9,0,0), -d(2025,3,9,10,0,0), -d(2025,11,2,9,0,0), -d(2026,3,8,10,0,0), -d(2026,11,1,9,0,0), -d(2027,3,14,10,0,0), -d(2027,11,7,9,0,0), -d(2028,3,12,10,0,0), -d(2028,11,5,9,0,0), -d(2029,3,11,10,0,0), -d(2029,11,4,9,0,0), -d(2030,3,10,10,0,0), -d(2030,11,3,9,0,0), -d(2031,3,9,10,0,0), -d(2031,11,2,9,0,0), -d(2032,3,14,10,0,0), -d(2032,11,7,9,0,0), -d(2033,3,13,10,0,0), -d(2033,11,6,9,0,0), -d(2034,3,12,10,0,0), -d(2034,11,5,9,0,0), -d(2035,3,11,10,0,0), -d(2035,11,4,9,0,0), -d(2036,3,9,10,0,0), -d(2036,11,2,9,0,0), -d(2037,3,8,10,0,0), -d(2037,11,1,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -PST8PDT = PST8PDT() - diff --git a/modules/pytz/zoneinfo/Pacific/Apia.py b/modules/pytz/zoneinfo/Pacific/Apia.py deleted file mode 100644 index 05cb54a0..00000000 --- a/modules/pytz/zoneinfo/Pacific/Apia.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Apia.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Apia(DstTzInfo): - '''Pacific/Apia timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Apia' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,1,1,11,26,56), -d(1950,1,1,11,30,0), - ] - - _transition_info = [ -i(-41220,0,'LMT'), -i(-41400,0,'SAMT'), -i(-39600,0,'WST'), - ] - -Apia = Apia() - diff --git a/modules/pytz/zoneinfo/Pacific/Auckland.py b/modules/pytz/zoneinfo/Pacific/Auckland.py deleted file mode 100644 index a257d229..00000000 --- a/modules/pytz/zoneinfo/Pacific/Auckland.py +++ /dev/null @@ -1,330 +0,0 @@ -'''tzinfo timezone information for Pacific/Auckland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Auckland(DstTzInfo): - '''Pacific/Auckland timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Auckland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1927,11,5,14,30,0), -d(1928,3,3,13,30,0), -d(1928,10,13,14,30,0), -d(1929,3,16,14,0,0), -d(1929,10,12,14,30,0), -d(1930,3,15,14,0,0), -d(1930,10,11,14,30,0), -d(1931,3,14,14,0,0), -d(1931,10,10,14,30,0), -d(1932,3,19,14,0,0), -d(1932,10,8,14,30,0), -d(1933,3,18,14,0,0), -d(1933,10,7,14,30,0), -d(1934,4,28,14,0,0), -d(1934,9,29,14,30,0), -d(1935,4,27,14,0,0), -d(1935,9,28,14,30,0), -d(1936,4,25,14,0,0), -d(1936,9,26,14,30,0), -d(1937,4,24,14,0,0), -d(1937,9,25,14,30,0), -d(1938,4,23,14,0,0), -d(1938,9,24,14,30,0), -d(1939,4,29,14,0,0), -d(1939,9,23,14,30,0), -d(1940,4,27,14,0,0), -d(1940,9,28,14,30,0), -d(1945,12,31,12,0,0), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(41400,0,'NZMT'), -i(45000,3600,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(41400,0,'NZMT'), -i(43200,1800,'NZST'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), -i(43200,0,'NZST'), -i(46800,3600,'NZDT'), - ] - -Auckland = Auckland() - diff --git a/modules/pytz/zoneinfo/Pacific/Chatham.py b/modules/pytz/zoneinfo/Pacific/Chatham.py deleted file mode 100644 index 8b78fdd1..00000000 --- a/modules/pytz/zoneinfo/Pacific/Chatham.py +++ /dev/null @@ -1,276 +0,0 @@ -'''tzinfo timezone information for Pacific/Chatham.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Chatham(DstTzInfo): - '''Pacific/Chatham timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Chatham' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1956,12,31,11,46,12), -d(1974,11,2,14,0,0), -d(1975,2,22,14,0,0), -d(1975,10,25,14,0,0), -d(1976,3,6,14,0,0), -d(1976,10,30,14,0,0), -d(1977,3,5,14,0,0), -d(1977,10,29,14,0,0), -d(1978,3,4,14,0,0), -d(1978,10,28,14,0,0), -d(1979,3,3,14,0,0), -d(1979,10,27,14,0,0), -d(1980,3,1,14,0,0), -d(1980,10,25,14,0,0), -d(1981,2,28,14,0,0), -d(1981,10,24,14,0,0), -d(1982,3,6,14,0,0), -d(1982,10,30,14,0,0), -d(1983,3,5,14,0,0), -d(1983,10,29,14,0,0), -d(1984,3,3,14,0,0), -d(1984,10,27,14,0,0), -d(1985,3,2,14,0,0), -d(1985,10,26,14,0,0), -d(1986,3,1,14,0,0), -d(1986,10,25,14,0,0), -d(1987,2,28,14,0,0), -d(1987,10,24,14,0,0), -d(1988,3,5,14,0,0), -d(1988,10,29,14,0,0), -d(1989,3,4,14,0,0), -d(1989,10,7,14,0,0), -d(1990,3,17,14,0,0), -d(1990,10,6,14,0,0), -d(1991,3,16,14,0,0), -d(1991,10,5,14,0,0), -d(1992,3,14,14,0,0), -d(1992,10,3,14,0,0), -d(1993,3,20,14,0,0), -d(1993,10,2,14,0,0), -d(1994,3,19,14,0,0), -d(1994,10,1,14,0,0), -d(1995,3,18,14,0,0), -d(1995,9,30,14,0,0), -d(1996,3,16,14,0,0), -d(1996,10,5,14,0,0), -d(1997,3,15,14,0,0), -d(1997,10,4,14,0,0), -d(1998,3,14,14,0,0), -d(1998,10,3,14,0,0), -d(1999,3,20,14,0,0), -d(1999,10,2,14,0,0), -d(2000,3,18,14,0,0), -d(2000,9,30,14,0,0), -d(2001,3,17,14,0,0), -d(2001,10,6,14,0,0), -d(2002,3,16,14,0,0), -d(2002,10,5,14,0,0), -d(2003,3,15,14,0,0), -d(2003,10,4,14,0,0), -d(2004,3,20,14,0,0), -d(2004,10,2,14,0,0), -d(2005,3,19,14,0,0), -d(2005,10,1,14,0,0), -d(2006,3,18,14,0,0), -d(2006,9,30,14,0,0), -d(2007,3,17,14,0,0), -d(2007,10,6,14,0,0), -d(2008,3,15,14,0,0), -d(2008,10,4,14,0,0), -d(2009,3,14,14,0,0), -d(2009,10,3,14,0,0), -d(2010,3,20,14,0,0), -d(2010,10,2,14,0,0), -d(2011,3,19,14,0,0), -d(2011,10,1,14,0,0), -d(2012,3,17,14,0,0), -d(2012,10,6,14,0,0), -d(2013,3,16,14,0,0), -d(2013,10,5,14,0,0), -d(2014,3,15,14,0,0), -d(2014,10,4,14,0,0), -d(2015,3,14,14,0,0), -d(2015,10,3,14,0,0), -d(2016,3,19,14,0,0), -d(2016,10,1,14,0,0), -d(2017,3,18,14,0,0), -d(2017,9,30,14,0,0), -d(2018,3,17,14,0,0), -d(2018,10,6,14,0,0), -d(2019,3,16,14,0,0), -d(2019,10,5,14,0,0), -d(2020,3,14,14,0,0), -d(2020,10,3,14,0,0), -d(2021,3,20,14,0,0), -d(2021,10,2,14,0,0), -d(2022,3,19,14,0,0), -d(2022,10,1,14,0,0), -d(2023,3,18,14,0,0), -d(2023,9,30,14,0,0), -d(2024,3,16,14,0,0), -d(2024,10,5,14,0,0), -d(2025,3,15,14,0,0), -d(2025,10,4,14,0,0), -d(2026,3,14,14,0,0), -d(2026,10,3,14,0,0), -d(2027,3,20,14,0,0), -d(2027,10,2,14,0,0), -d(2028,3,18,14,0,0), -d(2028,9,30,14,0,0), -d(2029,3,17,14,0,0), -d(2029,10,6,14,0,0), -d(2030,3,16,14,0,0), -d(2030,10,5,14,0,0), -d(2031,3,15,14,0,0), -d(2031,10,4,14,0,0), -d(2032,3,20,14,0,0), -d(2032,10,2,14,0,0), -d(2033,3,19,14,0,0), -d(2033,10,1,14,0,0), -d(2034,3,18,14,0,0), -d(2034,9,30,14,0,0), -d(2035,3,17,14,0,0), -d(2035,10,6,14,0,0), -d(2036,3,15,14,0,0), -d(2036,10,4,14,0,0), -d(2037,3,14,14,0,0), -d(2037,10,3,14,0,0), - ] - - _transition_info = [ -i(44040,0,'LMT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), -i(45900,0,'CHAST'), -i(49500,3600,'CHADT'), - ] - -Chatham = Chatham() - diff --git a/modules/pytz/zoneinfo/Pacific/Easter.py b/modules/pytz/zoneinfo/Pacific/Easter.py deleted file mode 100644 index 5b725e6c..00000000 --- a/modules/pytz/zoneinfo/Pacific/Easter.py +++ /dev/null @@ -1,310 +0,0 @@ -'''tzinfo timezone information for Pacific/Easter.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Easter(DstTzInfo): - '''Pacific/Easter timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Easter' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1932,9,1,7,17,28), -d(1966,10,9,4,0,0), -d(1967,3,12,3,0,0), -d(1967,10,15,4,0,0), -d(1968,3,10,3,0,0), -d(1968,10,13,4,0,0), -d(1969,3,9,3,0,0), -d(1969,10,12,4,0,0), -d(1970,3,15,3,0,0), -d(1970,10,11,4,0,0), -d(1971,3,14,3,0,0), -d(1971,10,10,4,0,0), -d(1972,3,12,3,0,0), -d(1972,10,15,4,0,0), -d(1973,3,11,3,0,0), -d(1973,10,14,4,0,0), -d(1974,3,10,3,0,0), -d(1974,10,13,4,0,0), -d(1975,3,9,3,0,0), -d(1975,10,12,4,0,0), -d(1976,3,14,3,0,0), -d(1976,10,10,4,0,0), -d(1977,3,13,3,0,0), -d(1977,10,9,4,0,0), -d(1978,3,12,3,0,0), -d(1978,10,15,4,0,0), -d(1979,3,11,3,0,0), -d(1979,10,14,4,0,0), -d(1980,3,9,3,0,0), -d(1980,10,12,4,0,0), -d(1981,3,15,3,0,0), -d(1981,10,11,4,0,0), -d(1982,3,14,3,0,0), -d(1982,3,14,7,0,0), -d(1982,10,10,4,0,0), -d(1983,3,13,3,0,0), -d(1983,10,9,4,0,0), -d(1984,3,11,3,0,0), -d(1984,10,14,4,0,0), -d(1985,3,10,3,0,0), -d(1985,10,13,4,0,0), -d(1986,3,9,3,0,0), -d(1986,10,12,4,0,0), -d(1987,3,15,3,0,0), -d(1987,10,11,4,0,0), -d(1988,3,13,3,0,0), -d(1988,10,9,4,0,0), -d(1989,3,12,3,0,0), -d(1989,10,15,4,0,0), -d(1990,3,11,3,0,0), -d(1990,10,14,4,0,0), -d(1991,3,10,3,0,0), -d(1991,10,13,4,0,0), -d(1992,3,15,3,0,0), -d(1992,10,11,4,0,0), -d(1993,3,14,3,0,0), -d(1993,10,10,4,0,0), -d(1994,3,13,3,0,0), -d(1994,10,9,4,0,0), -d(1995,3,12,3,0,0), -d(1995,10,15,4,0,0), -d(1996,3,10,3,0,0), -d(1996,10,13,4,0,0), -d(1997,3,9,3,0,0), -d(1997,10,12,4,0,0), -d(1998,3,15,3,0,0), -d(1998,9,27,4,0,0), -d(1999,4,4,3,0,0), -d(1999,10,10,4,0,0), -d(2000,3,12,3,0,0), -d(2000,10,15,4,0,0), -d(2001,3,11,3,0,0), -d(2001,10,14,4,0,0), -d(2002,3,10,3,0,0), -d(2002,10,13,4,0,0), -d(2003,3,9,3,0,0), -d(2003,10,12,4,0,0), -d(2004,3,14,3,0,0), -d(2004,10,10,4,0,0), -d(2005,3,13,3,0,0), -d(2005,10,9,4,0,0), -d(2006,3,12,3,0,0), -d(2006,10,15,4,0,0), -d(2007,3,11,3,0,0), -d(2007,10,14,4,0,0), -d(2008,3,9,3,0,0), -d(2008,10,12,4,0,0), -d(2009,3,15,3,0,0), -d(2009,10,11,4,0,0), -d(2010,3,14,3,0,0), -d(2010,10,10,4,0,0), -d(2011,3,13,3,0,0), -d(2011,10,9,4,0,0), -d(2012,3,11,3,0,0), -d(2012,10,14,4,0,0), -d(2013,3,10,3,0,0), -d(2013,10,13,4,0,0), -d(2014,3,9,3,0,0), -d(2014,10,12,4,0,0), -d(2015,3,15,3,0,0), -d(2015,10,11,4,0,0), -d(2016,3,13,3,0,0), -d(2016,10,9,4,0,0), -d(2017,3,12,3,0,0), -d(2017,10,15,4,0,0), -d(2018,3,11,3,0,0), -d(2018,10,14,4,0,0), -d(2019,3,10,3,0,0), -d(2019,10,13,4,0,0), -d(2020,3,15,3,0,0), -d(2020,10,11,4,0,0), -d(2021,3,14,3,0,0), -d(2021,10,10,4,0,0), -d(2022,3,13,3,0,0), -d(2022,10,9,4,0,0), -d(2023,3,12,3,0,0), -d(2023,10,15,4,0,0), -d(2024,3,10,3,0,0), -d(2024,10,13,4,0,0), -d(2025,3,9,3,0,0), -d(2025,10,12,4,0,0), -d(2026,3,15,3,0,0), -d(2026,10,11,4,0,0), -d(2027,3,14,3,0,0), -d(2027,10,10,4,0,0), -d(2028,3,12,3,0,0), -d(2028,10,15,4,0,0), -d(2029,3,11,3,0,0), -d(2029,10,14,4,0,0), -d(2030,3,10,3,0,0), -d(2030,10,13,4,0,0), -d(2031,3,9,3,0,0), -d(2031,10,12,4,0,0), -d(2032,3,14,3,0,0), -d(2032,10,10,4,0,0), -d(2033,3,13,3,0,0), -d(2033,10,9,4,0,0), -d(2034,3,12,3,0,0), -d(2034,10,15,4,0,0), -d(2035,3,11,3,0,0), -d(2035,10,14,4,0,0), -d(2036,3,9,3,0,0), -d(2036,10,12,4,0,0), -d(2037,3,15,3,0,0), -d(2037,10,11,4,0,0), - ] - - _transition_info = [ -i(-26220,0,'MMT'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,3600,'EASST'), -i(-25200,0,'EAST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), -i(-21600,0,'EAST'), -i(-18000,3600,'EASST'), - ] - -Easter = Easter() - diff --git a/modules/pytz/zoneinfo/Pacific/Efate.py b/modules/pytz/zoneinfo/Pacific/Efate.py deleted file mode 100644 index 51421914..00000000 --- a/modules/pytz/zoneinfo/Pacific/Efate.py +++ /dev/null @@ -1,62 +0,0 @@ -'''tzinfo timezone information for Pacific/Efate.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Efate(DstTzInfo): - '''Pacific/Efate timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Efate' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,12,12,46,44), -d(1983,9,24,13,0,0), -d(1984,3,24,12,0,0), -d(1984,10,22,13,0,0), -d(1985,3,23,12,0,0), -d(1985,9,28,13,0,0), -d(1986,3,22,12,0,0), -d(1986,9,27,13,0,0), -d(1987,3,28,12,0,0), -d(1987,9,26,13,0,0), -d(1988,3,26,12,0,0), -d(1988,9,24,13,0,0), -d(1989,3,25,12,0,0), -d(1989,9,23,13,0,0), -d(1990,3,24,12,0,0), -d(1990,9,22,13,0,0), -d(1991,3,23,12,0,0), -d(1991,9,28,13,0,0), -d(1992,1,25,12,0,0), -d(1992,10,24,13,0,0), -d(1993,1,23,12,0,0), - ] - - _transition_info = [ -i(40380,0,'LMT'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), -i(43200,3600,'VUST'), -i(39600,0,'VUT'), - ] - -Efate = Efate() - diff --git a/modules/pytz/zoneinfo/Pacific/Enderbury.py b/modules/pytz/zoneinfo/Pacific/Enderbury.py deleted file mode 100644 index 4c7d28f5..00000000 --- a/modules/pytz/zoneinfo/Pacific/Enderbury.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Enderbury.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Enderbury(DstTzInfo): - '''Pacific/Enderbury timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Enderbury' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1979,10,1,12,0,0), -d(1995,1,1,11,0,0), - ] - - _transition_info = [ -i(-43200,0,'PHOT'), -i(-39600,0,'PHOT'), -i(46800,0,'PHOT'), - ] - -Enderbury = Enderbury() - diff --git a/modules/pytz/zoneinfo/Pacific/Fakaofo.py b/modules/pytz/zoneinfo/Pacific/Fakaofo.py deleted file mode 100644 index 6d39db7f..00000000 --- a/modules/pytz/zoneinfo/Pacific/Fakaofo.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Fakaofo.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Fakaofo(StaticTzInfo): - '''Pacific/Fakaofo timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Fakaofo' - _utcoffset = timedelta(seconds=-36000) - _tzname = 'TKT' - -Fakaofo = Fakaofo() - diff --git a/modules/pytz/zoneinfo/Pacific/Fiji.py b/modules/pytz/zoneinfo/Pacific/Fiji.py deleted file mode 100644 index 8f416d9e..00000000 --- a/modules/pytz/zoneinfo/Pacific/Fiji.py +++ /dev/null @@ -1,30 +0,0 @@ -'''tzinfo timezone information for Pacific/Fiji.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Fiji(DstTzInfo): - '''Pacific/Fiji timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Fiji' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,10,25,12,6,20), -d(1998,10,31,14,0,0), -d(1999,2,27,14,0,0), -d(1999,11,6,14,0,0), -d(2000,2,26,14,0,0), - ] - - _transition_info = [ -i(42840,0,'LMT'), -i(43200,0,'FJT'), -i(46800,3600,'FJST'), -i(43200,0,'FJT'), -i(46800,3600,'FJST'), -i(43200,0,'FJT'), - ] - -Fiji = Fiji() - diff --git a/modules/pytz/zoneinfo/Pacific/Funafuti.py b/modules/pytz/zoneinfo/Pacific/Funafuti.py deleted file mode 100644 index 9801538c..00000000 --- a/modules/pytz/zoneinfo/Pacific/Funafuti.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Funafuti.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Funafuti(StaticTzInfo): - '''Pacific/Funafuti timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Funafuti' - _utcoffset = timedelta(seconds=43200) - _tzname = 'TVT' - -Funafuti = Funafuti() - diff --git a/modules/pytz/zoneinfo/Pacific/Galapagos.py b/modules/pytz/zoneinfo/Pacific/Galapagos.py deleted file mode 100644 index 9102a8e8..00000000 --- a/modules/pytz/zoneinfo/Pacific/Galapagos.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Galapagos.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Galapagos(DstTzInfo): - '''Pacific/Galapagos timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Galapagos' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1931,1,1,5,58,24), -d(1986,1,1,5,0,0), - ] - - _transition_info = [ -i(-21480,0,'LMT'), -i(-18000,0,'ECT'), -i(-21600,0,'GALT'), - ] - -Galapagos = Galapagos() - diff --git a/modules/pytz/zoneinfo/Pacific/Gambier.py b/modules/pytz/zoneinfo/Pacific/Gambier.py deleted file mode 100644 index fd04b894..00000000 --- a/modules/pytz/zoneinfo/Pacific/Gambier.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Gambier.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Gambier(DstTzInfo): - '''Pacific/Gambier timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Gambier' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,10,1,8,59,48), - ] - - _transition_info = [ -i(-32400,0,'LMT'), -i(-32400,0,'GAMT'), - ] - -Gambier = Gambier() - diff --git a/modules/pytz/zoneinfo/Pacific/Guadalcanal.py b/modules/pytz/zoneinfo/Pacific/Guadalcanal.py deleted file mode 100644 index e88689c7..00000000 --- a/modules/pytz/zoneinfo/Pacific/Guadalcanal.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Guadalcanal.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guadalcanal(DstTzInfo): - '''Pacific/Guadalcanal timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Guadalcanal' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,9,30,13,20,12), - ] - - _transition_info = [ -i(38400,0,'LMT'), -i(39600,0,'SBT'), - ] - -Guadalcanal = Guadalcanal() - diff --git a/modules/pytz/zoneinfo/Pacific/Guam.py b/modules/pytz/zoneinfo/Pacific/Guam.py deleted file mode 100644 index 7ea7b706..00000000 --- a/modules/pytz/zoneinfo/Pacific/Guam.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Guam.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Guam(DstTzInfo): - '''Pacific/Guam timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Guam' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(2000,12,22,14,0,0), - ] - - _transition_info = [ -i(36000,0,'GST'), -i(36000,0,'ChST'), - ] - -Guam = Guam() - diff --git a/modules/pytz/zoneinfo/Pacific/Honolulu.py b/modules/pytz/zoneinfo/Pacific/Honolulu.py deleted file mode 100644 index e32cc01a..00000000 --- a/modules/pytz/zoneinfo/Pacific/Honolulu.py +++ /dev/null @@ -1,32 +0,0 @@ -'''tzinfo timezone information for Pacific/Honolulu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Honolulu(DstTzInfo): - '''Pacific/Honolulu timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Honolulu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1933,4,30,12,30,0), -d(1933,5,21,11,30,0), -d(1942,2,9,12,30,0), -d(1945,8,14,23,0,0), -d(1945,9,30,11,30,0), -d(1947,6,8,12,30,0), - ] - - _transition_info = [ -i(-37800,0,'HST'), -i(-34200,3600,'HDT'), -i(-37800,0,'HST'), -i(-34200,3600,'HWT'), -i(-34200,3600,'HPT'), -i(-37800,0,'HST'), -i(-36000,0,'HST'), - ] - -Honolulu = Honolulu() - diff --git a/modules/pytz/zoneinfo/Pacific/Johnston.py b/modules/pytz/zoneinfo/Pacific/Johnston.py deleted file mode 100644 index a4a29579..00000000 --- a/modules/pytz/zoneinfo/Pacific/Johnston.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Johnston.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Johnston(StaticTzInfo): - '''Pacific/Johnston timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Johnston' - _utcoffset = timedelta(seconds=-36000) - _tzname = 'HST' - -Johnston = Johnston() - diff --git a/modules/pytz/zoneinfo/Pacific/Kiritimati.py b/modules/pytz/zoneinfo/Pacific/Kiritimati.py deleted file mode 100644 index f1e45643..00000000 --- a/modules/pytz/zoneinfo/Pacific/Kiritimati.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Kiritimati.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kiritimati(DstTzInfo): - '''Pacific/Kiritimati timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Kiritimati' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1979,10,1,10,40,0), -d(1995,1,1,10,0,0), - ] - - _transition_info = [ -i(-38400,0,'LINT'), -i(-36000,0,'LINT'), -i(50400,0,'LINT'), - ] - -Kiritimati = Kiritimati() - diff --git a/modules/pytz/zoneinfo/Pacific/Kosrae.py b/modules/pytz/zoneinfo/Pacific/Kosrae.py deleted file mode 100644 index 76e694c9..00000000 --- a/modules/pytz/zoneinfo/Pacific/Kosrae.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Kosrae.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kosrae(DstTzInfo): - '''Pacific/Kosrae timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Kosrae' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,9,30,13,0,0), -d(1998,12,31,12,0,0), - ] - - _transition_info = [ -i(39600,0,'KOST'), -i(43200,0,'KOST'), -i(39600,0,'KOST'), - ] - -Kosrae = Kosrae() - diff --git a/modules/pytz/zoneinfo/Pacific/Kwajalein.py b/modules/pytz/zoneinfo/Pacific/Kwajalein.py deleted file mode 100644 index 65c4b031..00000000 --- a/modules/pytz/zoneinfo/Pacific/Kwajalein.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Kwajalein.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Kwajalein(DstTzInfo): - '''Pacific/Kwajalein timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Kwajalein' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,9,30,13,0,0), -d(1993,8,20,12,0,0), - ] - - _transition_info = [ -i(39600,0,'MHT'), -i(-43200,0,'KWAT'), -i(43200,0,'MHT'), - ] - -Kwajalein = Kwajalein() - diff --git a/modules/pytz/zoneinfo/Pacific/Majuro.py b/modules/pytz/zoneinfo/Pacific/Majuro.py deleted file mode 100644 index e2c09901..00000000 --- a/modules/pytz/zoneinfo/Pacific/Majuro.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Majuro.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Majuro(DstTzInfo): - '''Pacific/Majuro timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Majuro' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,9,30,13,0,0), - ] - - _transition_info = [ -i(39600,0,'MHT'), -i(43200,0,'MHT'), - ] - -Majuro = Majuro() - diff --git a/modules/pytz/zoneinfo/Pacific/Marquesas.py b/modules/pytz/zoneinfo/Pacific/Marquesas.py deleted file mode 100644 index 943211a7..00000000 --- a/modules/pytz/zoneinfo/Pacific/Marquesas.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Marquesas.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Marquesas(DstTzInfo): - '''Pacific/Marquesas timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Marquesas' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,10,1,9,18,0), - ] - - _transition_info = [ -i(-33480,0,'LMT'), -i(-34200,0,'MART'), - ] - -Marquesas = Marquesas() - diff --git a/modules/pytz/zoneinfo/Pacific/Midway.py b/modules/pytz/zoneinfo/Pacific/Midway.py deleted file mode 100644 index 04570f01..00000000 --- a/modules/pytz/zoneinfo/Pacific/Midway.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Pacific/Midway.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Midway(DstTzInfo): - '''Pacific/Midway timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Midway' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1956,6,3,11,0,0), -d(1956,9,2,10,0,0), -d(1967,4,1,11,0,0), -d(1983,11,30,11,0,0), - ] - - _transition_info = [ -i(-39600,0,'NST'), -i(-36000,3600,'NDT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-39600,0,'SST'), - ] - -Midway = Midway() - diff --git a/modules/pytz/zoneinfo/Pacific/Nauru.py b/modules/pytz/zoneinfo/Pacific/Nauru.py deleted file mode 100644 index 97ddde30..00000000 --- a/modules/pytz/zoneinfo/Pacific/Nauru.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Pacific/Nauru.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Nauru(DstTzInfo): - '''Pacific/Nauru timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Nauru' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1921,1,14,12,52,20), -d(1942,3,14,12,30,0), -d(1944,8,14,15,0,0), -d(1979,4,30,12,30,0), - ] - - _transition_info = [ -i(40080,0,'LMT'), -i(41400,0,'NRT'), -i(32400,0,'JST'), -i(41400,0,'NRT'), -i(43200,0,'NRT'), - ] - -Nauru = Nauru() - diff --git a/modules/pytz/zoneinfo/Pacific/Niue.py b/modules/pytz/zoneinfo/Pacific/Niue.py deleted file mode 100644 index 6449e84f..00000000 --- a/modules/pytz/zoneinfo/Pacific/Niue.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Niue.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Niue(DstTzInfo): - '''Pacific/Niue timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Niue' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1951,1,1,11,20,0), -d(1978,10,1,11,30,0), - ] - - _transition_info = [ -i(-40800,0,'NUT'), -i(-41400,0,'NUT'), -i(-39600,0,'NUT'), - ] - -Niue = Niue() - diff --git a/modules/pytz/zoneinfo/Pacific/Norfolk.py b/modules/pytz/zoneinfo/Pacific/Norfolk.py deleted file mode 100644 index 8eda51a2..00000000 --- a/modules/pytz/zoneinfo/Pacific/Norfolk.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Norfolk.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Norfolk(DstTzInfo): - '''Pacific/Norfolk timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Norfolk' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1950,12,31,12,48,0), - ] - - _transition_info = [ -i(40320,0,'NMT'), -i(41400,0,'NFT'), - ] - -Norfolk = Norfolk() - diff --git a/modules/pytz/zoneinfo/Pacific/Noumea.py b/modules/pytz/zoneinfo/Pacific/Noumea.py deleted file mode 100644 index 32efeea0..00000000 --- a/modules/pytz/zoneinfo/Pacific/Noumea.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for Pacific/Noumea.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Noumea(DstTzInfo): - '''Pacific/Noumea timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Noumea' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,12,12,54,12), -d(1977,12,3,13,0,0), -d(1978,2,26,12,0,0), -d(1978,12,2,13,0,0), -d(1979,2,26,12,0,0), -d(1996,11,30,15,0,0), -d(1997,3,1,15,0,0), - ] - - _transition_info = [ -i(39960,0,'LMT'), -i(39600,0,'NCT'), -i(43200,3600,'NCST'), -i(39600,0,'NCT'), -i(43200,3600,'NCST'), -i(39600,0,'NCT'), -i(43200,3600,'NCST'), -i(39600,0,'NCT'), - ] - -Noumea = Noumea() - diff --git a/modules/pytz/zoneinfo/Pacific/Pago_Pago.py b/modules/pytz/zoneinfo/Pacific/Pago_Pago.py deleted file mode 100644 index d0fa9c02..00000000 --- a/modules/pytz/zoneinfo/Pacific/Pago_Pago.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Pacific/Pago_Pago.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pago_Pago(DstTzInfo): - '''Pacific/Pago_Pago timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Pago_Pago' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,1,1,11,22,48), -d(1950,1,1,11,30,0), -d(1967,4,1,11,0,0), -d(1983,11,30,11,0,0), - ] - - _transition_info = [ -i(-40980,0,'LMT'), -i(-41400,0,'SAMT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-39600,0,'SST'), - ] - -Pago_Pago = Pago_Pago() - diff --git a/modules/pytz/zoneinfo/Pacific/Palau.py b/modules/pytz/zoneinfo/Pacific/Palau.py deleted file mode 100644 index b873d880..00000000 --- a/modules/pytz/zoneinfo/Pacific/Palau.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Palau.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Palau(StaticTzInfo): - '''Pacific/Palau timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Palau' - _utcoffset = timedelta(seconds=32400) - _tzname = 'PWT' - -Palau = Palau() - diff --git a/modules/pytz/zoneinfo/Pacific/Pitcairn.py b/modules/pytz/zoneinfo/Pacific/Pitcairn.py deleted file mode 100644 index 125b8a8e..00000000 --- a/modules/pytz/zoneinfo/Pacific/Pitcairn.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Pitcairn.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pitcairn(DstTzInfo): - '''Pacific/Pitcairn timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Pitcairn' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1998,4,27,8,30,0), - ] - - _transition_info = [ -i(-30600,0,'PNT'), -i(-28800,0,'PST'), - ] - -Pitcairn = Pitcairn() - diff --git a/modules/pytz/zoneinfo/Pacific/Ponape.py b/modules/pytz/zoneinfo/Pacific/Ponape.py deleted file mode 100644 index 4cd6ad8e..00000000 --- a/modules/pytz/zoneinfo/Pacific/Ponape.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Ponape.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Ponape(StaticTzInfo): - '''Pacific/Ponape timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Ponape' - _utcoffset = timedelta(seconds=39600) - _tzname = 'PONT' - -Ponape = Ponape() - diff --git a/modules/pytz/zoneinfo/Pacific/Port_Moresby.py b/modules/pytz/zoneinfo/Pacific/Port_Moresby.py deleted file mode 100644 index 8510d854..00000000 --- a/modules/pytz/zoneinfo/Pacific/Port_Moresby.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Port_Moresby.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Port_Moresby(StaticTzInfo): - '''Pacific/Port_Moresby timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Port_Moresby' - _utcoffset = timedelta(seconds=36000) - _tzname = 'PGT' - -Port_Moresby = Port_Moresby() - diff --git a/modules/pytz/zoneinfo/Pacific/Rarotonga.py b/modules/pytz/zoneinfo/Pacific/Rarotonga.py deleted file mode 100644 index d6106e9c..00000000 --- a/modules/pytz/zoneinfo/Pacific/Rarotonga.py +++ /dev/null @@ -1,72 +0,0 @@ -'''tzinfo timezone information for Pacific/Rarotonga.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Rarotonga(DstTzInfo): - '''Pacific/Rarotonga timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Rarotonga' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1978,11,12,10,30,0), -d(1979,3,4,9,30,0), -d(1979,10,28,10,0,0), -d(1980,3,2,9,30,0), -d(1980,10,26,10,0,0), -d(1981,3,1,9,30,0), -d(1981,10,25,10,0,0), -d(1982,3,7,9,30,0), -d(1982,10,31,10,0,0), -d(1983,3,6,9,30,0), -d(1983,10,30,10,0,0), -d(1984,3,4,9,30,0), -d(1984,10,28,10,0,0), -d(1985,3,3,9,30,0), -d(1985,10,27,10,0,0), -d(1986,3,2,9,30,0), -d(1986,10,26,10,0,0), -d(1987,3,1,9,30,0), -d(1987,10,25,10,0,0), -d(1988,3,6,9,30,0), -d(1988,10,30,10,0,0), -d(1989,3,5,9,30,0), -d(1989,10,29,10,0,0), -d(1990,3,4,9,30,0), -d(1990,10,28,10,0,0), -d(1991,3,3,9,30,0), - ] - - _transition_info = [ -i(-37800,0,'CKT'), -i(-34200,3600,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), -i(-34200,1800,'CKHST'), -i(-36000,0,'CKT'), - ] - -Rarotonga = Rarotonga() - diff --git a/modules/pytz/zoneinfo/Pacific/Saipan.py b/modules/pytz/zoneinfo/Pacific/Saipan.py deleted file mode 100644 index 9c1e93ec..00000000 --- a/modules/pytz/zoneinfo/Pacific/Saipan.py +++ /dev/null @@ -1,24 +0,0 @@ -'''tzinfo timezone information for Pacific/Saipan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Saipan(DstTzInfo): - '''Pacific/Saipan timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Saipan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1969,9,30,15,0,0), -d(2000,12,22,14,0,0), - ] - - _transition_info = [ -i(32400,0,'MPT'), -i(36000,0,'MPT'), -i(36000,0,'ChST'), - ] - -Saipan = Saipan() - diff --git a/modules/pytz/zoneinfo/Pacific/Samoa.py b/modules/pytz/zoneinfo/Pacific/Samoa.py deleted file mode 100644 index 91f1ab54..00000000 --- a/modules/pytz/zoneinfo/Pacific/Samoa.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for Pacific/Samoa.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Samoa(DstTzInfo): - '''Pacific/Samoa timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Samoa' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,1,1,11,22,48), -d(1950,1,1,11,30,0), -d(1967,4,1,11,0,0), -d(1983,11,30,11,0,0), - ] - - _transition_info = [ -i(-40980,0,'LMT'), -i(-41400,0,'SAMT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-39600,0,'SST'), - ] - -Samoa = Samoa() - diff --git a/modules/pytz/zoneinfo/Pacific/Tahiti.py b/modules/pytz/zoneinfo/Pacific/Tahiti.py deleted file mode 100644 index e930a5bf..00000000 --- a/modules/pytz/zoneinfo/Pacific/Tahiti.py +++ /dev/null @@ -1,22 +0,0 @@ -'''tzinfo timezone information for Pacific/Tahiti.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tahiti(DstTzInfo): - '''Pacific/Tahiti timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Tahiti' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,10,1,9,58,16), - ] - - _transition_info = [ -i(-35880,0,'LMT'), -i(-36000,0,'TAHT'), - ] - -Tahiti = Tahiti() - diff --git a/modules/pytz/zoneinfo/Pacific/Tarawa.py b/modules/pytz/zoneinfo/Pacific/Tarawa.py deleted file mode 100644 index 70a1ea4c..00000000 --- a/modules/pytz/zoneinfo/Pacific/Tarawa.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Tarawa.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Tarawa(StaticTzInfo): - '''Pacific/Tarawa timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Tarawa' - _utcoffset = timedelta(seconds=43200) - _tzname = 'GILT' - -Tarawa = Tarawa() - diff --git a/modules/pytz/zoneinfo/Pacific/Tongatapu.py b/modules/pytz/zoneinfo/Pacific/Tongatapu.py deleted file mode 100644 index 85e3d258..00000000 --- a/modules/pytz/zoneinfo/Pacific/Tongatapu.py +++ /dev/null @@ -1,34 +0,0 @@ -'''tzinfo timezone information for Pacific/Tongatapu.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Tongatapu(DstTzInfo): - '''Pacific/Tongatapu timezone definition. See datetime.tzinfo for details''' - - zone = 'Pacific/Tongatapu' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1940,12,31,11,40,0), -d(1999,10,6,13,0,0), -d(2000,3,18,13,0,0), -d(2000,11,4,13,0,0), -d(2001,1,27,12,0,0), -d(2001,11,3,13,0,0), -d(2002,1,26,12,0,0), - ] - - _transition_info = [ -i(44400,0,'TOT'), -i(46800,0,'TOT'), -i(50400,3600,'TOST'), -i(46800,0,'TOT'), -i(50400,3600,'TOST'), -i(46800,0,'TOT'), -i(50400,3600,'TOST'), -i(46800,0,'TOT'), - ] - -Tongatapu = Tongatapu() - diff --git a/modules/pytz/zoneinfo/Pacific/Truk.py b/modules/pytz/zoneinfo/Pacific/Truk.py deleted file mode 100644 index e6631a2b..00000000 --- a/modules/pytz/zoneinfo/Pacific/Truk.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Truk.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Truk(StaticTzInfo): - '''Pacific/Truk timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Truk' - _utcoffset = timedelta(seconds=36000) - _tzname = 'TRUT' - -Truk = Truk() - diff --git a/modules/pytz/zoneinfo/Pacific/Wake.py b/modules/pytz/zoneinfo/Pacific/Wake.py deleted file mode 100644 index a7e296c7..00000000 --- a/modules/pytz/zoneinfo/Pacific/Wake.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Wake.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Wake(StaticTzInfo): - '''Pacific/Wake timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Wake' - _utcoffset = timedelta(seconds=43200) - _tzname = 'WAKT' - -Wake = Wake() - diff --git a/modules/pytz/zoneinfo/Pacific/Wallis.py b/modules/pytz/zoneinfo/Pacific/Wallis.py deleted file mode 100644 index 76f52519..00000000 --- a/modules/pytz/zoneinfo/Pacific/Wallis.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Wallis.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Wallis(StaticTzInfo): - '''Pacific/Wallis timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Wallis' - _utcoffset = timedelta(seconds=43200) - _tzname = 'WFT' - -Wallis = Wallis() - diff --git a/modules/pytz/zoneinfo/Pacific/Yap.py b/modules/pytz/zoneinfo/Pacific/Yap.py deleted file mode 100644 index 98152b50..00000000 --- a/modules/pytz/zoneinfo/Pacific/Yap.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Pacific/Yap.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Yap(StaticTzInfo): - '''Pacific/Yap timezone definition. See datetime.tzinfo for details''' - zone = 'Pacific/Yap' - _utcoffset = timedelta(seconds=36000) - _tzname = 'TRUT' - -Yap = Yap() - diff --git a/modules/pytz/zoneinfo/Pacific/__init__.py b/modules/pytz/zoneinfo/Pacific/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Poland.py b/modules/pytz/zoneinfo/Poland.py deleted file mode 100644 index 3ea36299..00000000 --- a/modules/pytz/zoneinfo/Poland.py +++ /dev/null @@ -1,352 +0,0 @@ -'''tzinfo timezone information for Poland.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Poland(DstTzInfo): - '''Poland timezone definition. See datetime.tzinfo for details''' - - zone = 'Poland' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1915,8,4,22,36,0), -d(1916,4,30,22,0,0), -d(1916,9,30,23,0,0), -d(1917,4,16,1,0,0), -d(1917,9,17,1,0,0), -d(1918,4,15,1,0,0), -d(1918,9,16,1,0,0), -d(1919,4,15,0,0,0), -d(1919,9,16,0,0,0), -d(1922,5,31,22,0,0), -d(1940,6,23,1,0,0), -d(1942,11,2,1,0,0), -d(1943,3,29,1,0,0), -d(1943,10,4,1,0,0), -d(1944,4,3,1,0,0), -d(1944,9,30,22,0,0), -d(1945,4,28,23,0,0), -d(1945,10,31,22,0,0), -d(1946,4,13,23,0,0), -d(1946,10,7,1,0,0), -d(1947,5,4,1,0,0), -d(1947,10,5,1,0,0), -d(1948,4,18,1,0,0), -d(1948,10,3,1,0,0), -d(1949,4,10,1,0,0), -d(1949,10,2,1,0,0), -d(1957,6,2,0,0,0), -d(1957,9,29,0,0,0), -d(1958,3,30,0,0,0), -d(1958,9,28,0,0,0), -d(1959,5,31,0,0,0), -d(1959,10,4,0,0,0), -d(1960,4,3,0,0,0), -d(1960,10,2,0,0,0), -d(1961,5,28,0,0,0), -d(1961,10,1,0,0,0), -d(1962,5,27,0,0,0), -d(1962,9,30,0,0,0), -d(1963,5,26,0,0,0), -d(1963,9,29,0,0,0), -d(1964,5,31,0,0,0), -d(1964,9,27,0,0,0), -d(1976,12,31,23,0,0), -d(1977,4,3,0,0,0), -d(1977,9,25,0,0,0), -d(1978,4,2,0,0,0), -d(1978,10,1,0,0,0), -d(1979,4,1,0,0,0), -d(1979,9,30,0,0,0), -d(1980,4,6,0,0,0), -d(1980,9,28,0,0,0), -d(1981,3,29,0,0,0), -d(1981,9,27,0,0,0), -d(1982,3,28,0,0,0), -d(1982,9,26,0,0,0), -d(1983,3,27,0,0,0), -d(1983,9,25,0,0,0), -d(1984,3,25,0,0,0), -d(1984,9,30,0,0,0), -d(1985,3,31,0,0,0), -d(1985,9,29,0,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1987,12,31,23,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(5040,0,'WMT'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), - ] - -Poland = Poland() - diff --git a/modules/pytz/zoneinfo/Portugal.py b/modules/pytz/zoneinfo/Portugal.py deleted file mode 100644 index 24cb4801..00000000 --- a/modules/pytz/zoneinfo/Portugal.py +++ /dev/null @@ -1,462 +0,0 @@ -'''tzinfo timezone information for Portugal.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Portugal(DstTzInfo): - '''Portugal timezone definition. See datetime.tzinfo for details''' - - zone = 'Portugal' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1912,1,1,0,36,32), -d(1916,6,17,23,0,0), -d(1916,11,1,0,0,0), -d(1917,2,28,23,0,0), -d(1917,10,14,23,0,0), -d(1918,3,1,23,0,0), -d(1918,10,14,23,0,0), -d(1919,2,28,23,0,0), -d(1919,10,14,23,0,0), -d(1920,2,29,23,0,0), -d(1920,10,14,23,0,0), -d(1921,2,28,23,0,0), -d(1921,10,14,23,0,0), -d(1924,4,16,23,0,0), -d(1924,10,14,23,0,0), -d(1926,4,17,23,0,0), -d(1926,10,2,23,0,0), -d(1927,4,9,23,0,0), -d(1927,10,1,23,0,0), -d(1928,4,14,23,0,0), -d(1928,10,6,23,0,0), -d(1929,4,20,23,0,0), -d(1929,10,5,23,0,0), -d(1931,4,18,23,0,0), -d(1931,10,3,23,0,0), -d(1932,4,2,23,0,0), -d(1932,10,1,23,0,0), -d(1934,4,7,23,0,0), -d(1934,10,6,23,0,0), -d(1935,3,30,23,0,0), -d(1935,10,5,23,0,0), -d(1936,4,18,23,0,0), -d(1936,10,3,23,0,0), -d(1937,4,3,23,0,0), -d(1937,10,2,23,0,0), -d(1938,3,26,23,0,0), -d(1938,10,1,23,0,0), -d(1939,4,15,23,0,0), -d(1939,11,18,23,0,0), -d(1940,2,24,23,0,0), -d(1940,10,5,23,0,0), -d(1941,4,5,23,0,0), -d(1941,10,5,23,0,0), -d(1942,3,14,23,0,0), -d(1942,4,25,22,0,0), -d(1942,8,15,22,0,0), -d(1942,10,24,23,0,0), -d(1943,3,13,23,0,0), -d(1943,4,17,22,0,0), -d(1943,8,28,22,0,0), -d(1943,10,30,23,0,0), -d(1944,3,11,23,0,0), -d(1944,4,22,22,0,0), -d(1944,8,26,22,0,0), -d(1944,10,28,23,0,0), -d(1945,3,10,23,0,0), -d(1945,4,21,22,0,0), -d(1945,8,25,22,0,0), -d(1945,10,27,23,0,0), -d(1946,4,6,23,0,0), -d(1946,10,5,23,0,0), -d(1947,4,6,2,0,0), -d(1947,10,5,2,0,0), -d(1948,4,4,2,0,0), -d(1948,10,3,2,0,0), -d(1949,4,3,2,0,0), -d(1949,10,2,2,0,0), -d(1951,4,1,2,0,0), -d(1951,10,7,2,0,0), -d(1952,4,6,2,0,0), -d(1952,10,5,2,0,0), -d(1953,4,5,2,0,0), -d(1953,10,4,2,0,0), -d(1954,4,4,2,0,0), -d(1954,10,3,2,0,0), -d(1955,4,3,2,0,0), -d(1955,10,2,2,0,0), -d(1956,4,1,2,0,0), -d(1956,10,7,2,0,0), -d(1957,4,7,2,0,0), -d(1957,10,6,2,0,0), -d(1958,4,6,2,0,0), -d(1958,10,5,2,0,0), -d(1959,4,5,2,0,0), -d(1959,10,4,2,0,0), -d(1960,4,3,2,0,0), -d(1960,10,2,2,0,0), -d(1961,4,2,2,0,0), -d(1961,10,1,2,0,0), -d(1962,4,1,2,0,0), -d(1962,10,7,2,0,0), -d(1963,4,7,2,0,0), -d(1963,10,6,2,0,0), -d(1964,4,5,2,0,0), -d(1964,10,4,2,0,0), -d(1965,4,4,2,0,0), -d(1965,10,3,2,0,0), -d(1966,4,3,2,0,0), -d(1976,9,26,0,0,0), -d(1977,3,27,0,0,0), -d(1977,9,25,0,0,0), -d(1978,4,2,0,0,0), -d(1978,10,1,0,0,0), -d(1979,4,1,0,0,0), -d(1979,9,30,1,0,0), -d(1980,3,30,0,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,2,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(-2220,0,'LMT'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(7200,7200,'WEMT'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,0,'CET'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(7200,3600,'CEST'), -i(3600,0,'CET'), -i(3600,0,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -Portugal = Portugal() - diff --git a/modules/pytz/zoneinfo/ROC.py b/modules/pytz/zoneinfo/ROC.py deleted file mode 100644 index 6aad5b5d..00000000 --- a/modules/pytz/zoneinfo/ROC.py +++ /dev/null @@ -1,100 +0,0 @@ -'''tzinfo timezone information for ROC.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class ROC(DstTzInfo): - '''ROC timezone definition. See datetime.tzinfo for details''' - - zone = 'ROC' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1945,4,30,16,0,0), -d(1945,9,30,15,0,0), -d(1946,4,30,16,0,0), -d(1946,9,30,15,0,0), -d(1947,4,30,16,0,0), -d(1947,9,30,15,0,0), -d(1948,4,30,16,0,0), -d(1948,9,30,15,0,0), -d(1949,4,30,16,0,0), -d(1949,9,30,15,0,0), -d(1950,4,30,16,0,0), -d(1950,9,30,15,0,0), -d(1951,4,30,16,0,0), -d(1951,9,30,15,0,0), -d(1952,2,29,16,0,0), -d(1952,10,31,15,0,0), -d(1953,3,31,16,0,0), -d(1953,10,31,15,0,0), -d(1954,3,31,16,0,0), -d(1954,10,31,15,0,0), -d(1955,3,31,16,0,0), -d(1955,9,30,15,0,0), -d(1956,3,31,16,0,0), -d(1956,9,30,15,0,0), -d(1957,3,31,16,0,0), -d(1957,9,30,15,0,0), -d(1958,3,31,16,0,0), -d(1958,9,30,15,0,0), -d(1959,3,31,16,0,0), -d(1959,9,30,15,0,0), -d(1960,5,31,16,0,0), -d(1960,9,30,15,0,0), -d(1961,5,31,16,0,0), -d(1961,9,30,15,0,0), -d(1974,3,31,16,0,0), -d(1974,9,30,15,0,0), -d(1975,3,31,16,0,0), -d(1975,9,30,15,0,0), -d(1980,6,29,16,0,0), -d(1980,9,29,15,0,0), - ] - - _transition_info = [ -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), -i(32400,3600,'CDT'), -i(28800,0,'CST'), - ] - -ROC = ROC() - diff --git a/modules/pytz/zoneinfo/ROK.py b/modules/pytz/zoneinfo/ROK.py deleted file mode 100644 index 6c867718..00000000 --- a/modules/pytz/zoneinfo/ROK.py +++ /dev/null @@ -1,44 +0,0 @@ -'''tzinfo timezone information for ROK.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class ROK(DstTzInfo): - '''ROK timezone definition. See datetime.tzinfo for details''' - - zone = 'ROK' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1904,11,30,15,30,0), -d(1927,12,31,15,0,0), -d(1931,12,31,15,30,0), -d(1954,3,20,15,0,0), -d(1960,5,14,16,0,0), -d(1960,9,12,15,0,0), -d(1961,8,9,16,0,0), -d(1968,9,30,15,30,0), -d(1987,5,9,15,0,0), -d(1987,10,10,14,0,0), -d(1988,5,7,15,0,0), -d(1988,10,8,14,0,0), - ] - - _transition_info = [ -i(30600,0,'KST'), -i(32400,0,'KST'), -i(30600,0,'KST'), -i(32400,0,'KST'), -i(28800,0,'KST'), -i(32400,3600,'KDT'), -i(28800,0,'KST'), -i(30600,0,'KST'), -i(32400,0,'KST'), -i(36000,3600,'KDT'), -i(32400,0,'KST'), -i(36000,3600,'KDT'), -i(32400,0,'KST'), - ] - -ROK = ROK() - diff --git a/modules/pytz/zoneinfo/Singapore.py b/modules/pytz/zoneinfo/Singapore.py deleted file mode 100644 index a5780315..00000000 --- a/modules/pytz/zoneinfo/Singapore.py +++ /dev/null @@ -1,36 +0,0 @@ -'''tzinfo timezone information for Singapore.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Singapore(DstTzInfo): - '''Singapore timezone definition. See datetime.tzinfo for details''' - - zone = 'Singapore' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,5,31,17,4,35), -d(1932,12,31,17,0,0), -d(1935,12,31,16,40,0), -d(1941,8,31,16,40,0), -d(1942,2,15,16,30,0), -d(1945,9,11,15,0,0), -d(1965,8,8,16,30,0), -d(1981,12,31,16,30,0), - ] - - _transition_info = [ -i(24900,0,'SMT'), -i(25200,0,'MALT'), -i(26400,1200,'MALST'), -i(26400,0,'MALT'), -i(27000,0,'MALT'), -i(32400,0,'JST'), -i(27000,0,'MALT'), -i(27000,0,'SGT'), -i(28800,0,'SGT'), - ] - -Singapore = Singapore() - diff --git a/modules/pytz/zoneinfo/SystemV/__init__.py b/modules/pytz/zoneinfo/SystemV/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/Turkey.py b/modules/pytz/zoneinfo/Turkey.py deleted file mode 100644 index 70303e34..00000000 --- a/modules/pytz/zoneinfo/Turkey.py +++ /dev/null @@ -1,362 +0,0 @@ -'''tzinfo timezone information for Turkey.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Turkey(DstTzInfo): - '''Turkey timezone definition. See datetime.tzinfo for details''' - - zone = 'Turkey' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1910,9,30,22,3,4), -d(1916,4,30,22,0,0), -d(1916,9,30,21,0,0), -d(1920,3,27,22,0,0), -d(1920,10,24,21,0,0), -d(1921,4,2,22,0,0), -d(1921,10,2,21,0,0), -d(1922,3,25,22,0,0), -d(1922,10,7,21,0,0), -d(1924,5,12,22,0,0), -d(1924,9,30,21,0,0), -d(1925,4,30,22,0,0), -d(1925,9,30,21,0,0), -d(1940,6,29,22,0,0), -d(1940,10,4,21,0,0), -d(1940,11,30,22,0,0), -d(1941,9,20,21,0,0), -d(1942,3,31,22,0,0), -d(1942,10,31,21,0,0), -d(1945,4,1,22,0,0), -d(1945,10,7,21,0,0), -d(1946,5,31,22,0,0), -d(1946,9,30,21,0,0), -d(1947,4,19,22,0,0), -d(1947,10,4,21,0,0), -d(1948,4,17,22,0,0), -d(1948,10,2,21,0,0), -d(1949,4,9,22,0,0), -d(1949,10,1,21,0,0), -d(1950,4,18,22,0,0), -d(1950,10,7,21,0,0), -d(1951,4,21,22,0,0), -d(1951,10,7,21,0,0), -d(1962,7,14,22,0,0), -d(1962,10,7,21,0,0), -d(1964,5,14,22,0,0), -d(1964,9,30,21,0,0), -d(1970,5,2,22,0,0), -d(1970,10,3,21,0,0), -d(1971,5,1,22,0,0), -d(1971,10,2,21,0,0), -d(1972,5,6,22,0,0), -d(1972,10,7,21,0,0), -d(1973,6,2,23,0,0), -d(1973,11,4,0,0,0), -d(1974,3,31,0,0,0), -d(1974,11,3,2,0,0), -d(1975,3,29,22,0,0), -d(1975,10,25,21,0,0), -d(1976,5,31,22,0,0), -d(1976,10,30,21,0,0), -d(1977,4,2,22,0,0), -d(1977,10,15,21,0,0), -d(1978,4,1,22,0,0), -d(1978,10,14,21,0,0), -d(1979,10,14,20,0,0), -d(1980,4,6,0,0,0), -d(1980,10,12,20,0,0), -d(1981,3,29,0,0,0), -d(1981,10,11,20,0,0), -d(1982,3,28,0,0,0), -d(1982,10,10,20,0,0), -d(1983,7,30,21,0,0), -d(1983,10,1,20,0,0), -d(1985,4,19,21,0,0), -d(1985,9,27,21,0,0), -d(1986,3,30,0,0,0), -d(1986,9,28,0,0,0), -d(1987,3,29,0,0,0), -d(1987,9,27,0,0,0), -d(1988,3,27,0,0,0), -d(1988,9,25,0,0,0), -d(1989,3,26,0,0,0), -d(1989,9,24,0,0,0), -d(1990,3,25,0,0,0), -d(1990,9,30,0,0,0), -d(1990,12,31,22,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(7020,0,'IMT'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(14400,7200,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(14400,3600,'TRST'), -i(10800,0,'TRT'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), -i(10800,3600,'EEST'), -i(7200,0,'EET'), - ] - -Turkey = Turkey() - diff --git a/modules/pytz/zoneinfo/UCT.py b/modules/pytz/zoneinfo/UCT.py deleted file mode 100644 index 1d62aff0..00000000 --- a/modules/pytz/zoneinfo/UCT.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for UCT.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class UCT(StaticTzInfo): - '''UCT timezone definition. See datetime.tzinfo for details''' - zone = 'UCT' - _utcoffset = timedelta(seconds=0) - _tzname = 'UCT' - -UCT = UCT() - diff --git a/modules/pytz/zoneinfo/US/Alaska.py b/modules/pytz/zoneinfo/US/Alaska.py deleted file mode 100644 index be9f68b8..00000000 --- a/modules/pytz/zoneinfo/US/Alaska.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for US/Alaska.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Alaska(DstTzInfo): - '''US/Alaska timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Alaska' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,12,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,11,0,0), -d(1967,4,1,10,0,0), -d(1969,4,27,12,0,0), -d(1969,10,26,11,0,0), -d(1970,4,26,12,0,0), -d(1970,10,25,11,0,0), -d(1971,4,25,12,0,0), -d(1971,10,31,11,0,0), -d(1972,4,30,12,0,0), -d(1972,10,29,11,0,0), -d(1973,4,29,12,0,0), -d(1973,10,28,11,0,0), -d(1974,1,6,12,0,0), -d(1974,10,27,11,0,0), -d(1975,2,23,12,0,0), -d(1975,10,26,11,0,0), -d(1976,4,25,12,0,0), -d(1976,10,31,11,0,0), -d(1977,4,24,12,0,0), -d(1977,10,30,11,0,0), -d(1978,4,30,12,0,0), -d(1978,10,29,11,0,0), -d(1979,4,29,12,0,0), -d(1979,10,28,11,0,0), -d(1980,4,27,12,0,0), -d(1980,10,26,11,0,0), -d(1981,4,26,12,0,0), -d(1981,10,25,11,0,0), -d(1982,4,25,12,0,0), -d(1982,10,31,11,0,0), -d(1983,4,24,12,0,0), -d(1983,10,30,11,0,0), -d(1983,11,30,9,0,0), -d(1984,4,29,11,0,0), -d(1984,10,28,10,0,0), -d(1985,4,28,11,0,0), -d(1985,10,27,10,0,0), -d(1986,4,27,11,0,0), -d(1986,10,26,10,0,0), -d(1987,4,5,11,0,0), -d(1987,10,25,10,0,0), -d(1988,4,3,11,0,0), -d(1988,10,30,10,0,0), -d(1989,4,2,11,0,0), -d(1989,10,29,10,0,0), -d(1990,4,1,11,0,0), -d(1990,10,28,10,0,0), -d(1991,4,7,11,0,0), -d(1991,10,27,10,0,0), -d(1992,4,5,11,0,0), -d(1992,10,25,10,0,0), -d(1993,4,4,11,0,0), -d(1993,10,31,10,0,0), -d(1994,4,3,11,0,0), -d(1994,10,30,10,0,0), -d(1995,4,2,11,0,0), -d(1995,10,29,10,0,0), -d(1996,4,7,11,0,0), -d(1996,10,27,10,0,0), -d(1997,4,6,11,0,0), -d(1997,10,26,10,0,0), -d(1998,4,5,11,0,0), -d(1998,10,25,10,0,0), -d(1999,4,4,11,0,0), -d(1999,10,31,10,0,0), -d(2000,4,2,11,0,0), -d(2000,10,29,10,0,0), -d(2001,4,1,11,0,0), -d(2001,10,28,10,0,0), -d(2002,4,7,11,0,0), -d(2002,10,27,10,0,0), -d(2003,4,6,11,0,0), -d(2003,10,26,10,0,0), -d(2004,4,4,11,0,0), -d(2004,10,31,10,0,0), -d(2005,4,3,11,0,0), -d(2005,10,30,10,0,0), -d(2006,4,2,11,0,0), -d(2006,10,29,10,0,0), -d(2007,3,11,11,0,0), -d(2007,11,4,10,0,0), -d(2008,3,9,11,0,0), -d(2008,11,2,10,0,0), -d(2009,3,8,11,0,0), -d(2009,11,1,10,0,0), -d(2010,3,14,11,0,0), -d(2010,11,7,10,0,0), -d(2011,3,13,11,0,0), -d(2011,11,6,10,0,0), -d(2012,3,11,11,0,0), -d(2012,11,4,10,0,0), -d(2013,3,10,11,0,0), -d(2013,11,3,10,0,0), -d(2014,3,9,11,0,0), -d(2014,11,2,10,0,0), -d(2015,3,8,11,0,0), -d(2015,11,1,10,0,0), -d(2016,3,13,11,0,0), -d(2016,11,6,10,0,0), -d(2017,3,12,11,0,0), -d(2017,11,5,10,0,0), -d(2018,3,11,11,0,0), -d(2018,11,4,10,0,0), -d(2019,3,10,11,0,0), -d(2019,11,3,10,0,0), -d(2020,3,8,11,0,0), -d(2020,11,1,10,0,0), -d(2021,3,14,11,0,0), -d(2021,11,7,10,0,0), -d(2022,3,13,11,0,0), -d(2022,11,6,10,0,0), -d(2023,3,12,11,0,0), -d(2023,11,5,10,0,0), -d(2024,3,10,11,0,0), -d(2024,11,3,10,0,0), -d(2025,3,9,11,0,0), -d(2025,11,2,10,0,0), -d(2026,3,8,11,0,0), -d(2026,11,1,10,0,0), -d(2027,3,14,11,0,0), -d(2027,11,7,10,0,0), -d(2028,3,12,11,0,0), -d(2028,11,5,10,0,0), -d(2029,3,11,11,0,0), -d(2029,11,4,10,0,0), -d(2030,3,10,11,0,0), -d(2030,11,3,10,0,0), -d(2031,3,9,11,0,0), -d(2031,11,2,10,0,0), -d(2032,3,14,11,0,0), -d(2032,11,7,10,0,0), -d(2033,3,13,11,0,0), -d(2033,11,6,10,0,0), -d(2034,3,12,11,0,0), -d(2034,11,5,10,0,0), -d(2035,3,11,11,0,0), -d(2035,11,4,10,0,0), -d(2036,3,9,11,0,0), -d(2036,11,2,10,0,0), -d(2037,3,8,11,0,0), -d(2037,11,1,10,0,0), - ] - - _transition_info = [ -i(-36000,0,'CAT'), -i(-32400,3600,'CAWT'), -i(-32400,3600,'CAWT'), -i(-36000,0,'CAT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-36000,0,'AHST'), -i(-32400,3600,'AHDT'), -i(-32400,0,'YST'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), -i(-28800,3600,'AKDT'), -i(-32400,0,'AKST'), - ] - -Alaska = Alaska() - diff --git a/modules/pytz/zoneinfo/US/Aleutian.py b/modules/pytz/zoneinfo/US/Aleutian.py deleted file mode 100644 index 64f7fdc0..00000000 --- a/modules/pytz/zoneinfo/US/Aleutian.py +++ /dev/null @@ -1,306 +0,0 @@ -'''tzinfo timezone information for US/Aleutian.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Aleutian(DstTzInfo): - '''US/Aleutian timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Aleutian' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1942,2,9,13,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,12,0,0), -d(1967,4,1,11,0,0), -d(1969,4,27,13,0,0), -d(1969,10,26,12,0,0), -d(1970,4,26,13,0,0), -d(1970,10,25,12,0,0), -d(1971,4,25,13,0,0), -d(1971,10,31,12,0,0), -d(1972,4,30,13,0,0), -d(1972,10,29,12,0,0), -d(1973,4,29,13,0,0), -d(1973,10,28,12,0,0), -d(1974,1,6,13,0,0), -d(1974,10,27,12,0,0), -d(1975,2,23,13,0,0), -d(1975,10,26,12,0,0), -d(1976,4,25,13,0,0), -d(1976,10,31,12,0,0), -d(1977,4,24,13,0,0), -d(1977,10,30,12,0,0), -d(1978,4,30,13,0,0), -d(1978,10,29,12,0,0), -d(1979,4,29,13,0,0), -d(1979,10,28,12,0,0), -d(1980,4,27,13,0,0), -d(1980,10,26,12,0,0), -d(1981,4,26,13,0,0), -d(1981,10,25,12,0,0), -d(1982,4,25,13,0,0), -d(1982,10,31,12,0,0), -d(1983,4,24,13,0,0), -d(1983,10,30,12,0,0), -d(1983,11,30,10,0,0), -d(1984,4,29,12,0,0), -d(1984,10,28,11,0,0), -d(1985,4,28,12,0,0), -d(1985,10,27,11,0,0), -d(1986,4,27,12,0,0), -d(1986,10,26,11,0,0), -d(1987,4,5,12,0,0), -d(1987,10,25,11,0,0), -d(1988,4,3,12,0,0), -d(1988,10,30,11,0,0), -d(1989,4,2,12,0,0), -d(1989,10,29,11,0,0), -d(1990,4,1,12,0,0), -d(1990,10,28,11,0,0), -d(1991,4,7,12,0,0), -d(1991,10,27,11,0,0), -d(1992,4,5,12,0,0), -d(1992,10,25,11,0,0), -d(1993,4,4,12,0,0), -d(1993,10,31,11,0,0), -d(1994,4,3,12,0,0), -d(1994,10,30,11,0,0), -d(1995,4,2,12,0,0), -d(1995,10,29,11,0,0), -d(1996,4,7,12,0,0), -d(1996,10,27,11,0,0), -d(1997,4,6,12,0,0), -d(1997,10,26,11,0,0), -d(1998,4,5,12,0,0), -d(1998,10,25,11,0,0), -d(1999,4,4,12,0,0), -d(1999,10,31,11,0,0), -d(2000,4,2,12,0,0), -d(2000,10,29,11,0,0), -d(2001,4,1,12,0,0), -d(2001,10,28,11,0,0), -d(2002,4,7,12,0,0), -d(2002,10,27,11,0,0), -d(2003,4,6,12,0,0), -d(2003,10,26,11,0,0), -d(2004,4,4,12,0,0), -d(2004,10,31,11,0,0), -d(2005,4,3,12,0,0), -d(2005,10,30,11,0,0), -d(2006,4,2,12,0,0), -d(2006,10,29,11,0,0), -d(2007,3,11,12,0,0), -d(2007,11,4,11,0,0), -d(2008,3,9,12,0,0), -d(2008,11,2,11,0,0), -d(2009,3,8,12,0,0), -d(2009,11,1,11,0,0), -d(2010,3,14,12,0,0), -d(2010,11,7,11,0,0), -d(2011,3,13,12,0,0), -d(2011,11,6,11,0,0), -d(2012,3,11,12,0,0), -d(2012,11,4,11,0,0), -d(2013,3,10,12,0,0), -d(2013,11,3,11,0,0), -d(2014,3,9,12,0,0), -d(2014,11,2,11,0,0), -d(2015,3,8,12,0,0), -d(2015,11,1,11,0,0), -d(2016,3,13,12,0,0), -d(2016,11,6,11,0,0), -d(2017,3,12,12,0,0), -d(2017,11,5,11,0,0), -d(2018,3,11,12,0,0), -d(2018,11,4,11,0,0), -d(2019,3,10,12,0,0), -d(2019,11,3,11,0,0), -d(2020,3,8,12,0,0), -d(2020,11,1,11,0,0), -d(2021,3,14,12,0,0), -d(2021,11,7,11,0,0), -d(2022,3,13,12,0,0), -d(2022,11,6,11,0,0), -d(2023,3,12,12,0,0), -d(2023,11,5,11,0,0), -d(2024,3,10,12,0,0), -d(2024,11,3,11,0,0), -d(2025,3,9,12,0,0), -d(2025,11,2,11,0,0), -d(2026,3,8,12,0,0), -d(2026,11,1,11,0,0), -d(2027,3,14,12,0,0), -d(2027,11,7,11,0,0), -d(2028,3,12,12,0,0), -d(2028,11,5,11,0,0), -d(2029,3,11,12,0,0), -d(2029,11,4,11,0,0), -d(2030,3,10,12,0,0), -d(2030,11,3,11,0,0), -d(2031,3,9,12,0,0), -d(2031,11,2,11,0,0), -d(2032,3,14,12,0,0), -d(2032,11,7,11,0,0), -d(2033,3,13,12,0,0), -d(2033,11,6,11,0,0), -d(2034,3,12,12,0,0), -d(2034,11,5,11,0,0), -d(2035,3,11,12,0,0), -d(2035,11,4,11,0,0), -d(2036,3,9,12,0,0), -d(2036,11,2,11,0,0), -d(2037,3,8,12,0,0), -d(2037,11,1,11,0,0), - ] - - _transition_info = [ -i(-39600,0,'NST'), -i(-36000,3600,'NWT'), -i(-36000,3600,'NPT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-39600,0,'BST'), -i(-36000,3600,'BDT'), -i(-36000,0,'AHST'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), -i(-32400,3600,'HADT'), -i(-36000,0,'HAST'), - ] - -Aleutian = Aleutian() - diff --git a/modules/pytz/zoneinfo/US/Arizona.py b/modules/pytz/zoneinfo/US/Arizona.py deleted file mode 100644 index d4ffa5a7..00000000 --- a/modules/pytz/zoneinfo/US/Arizona.py +++ /dev/null @@ -1,40 +0,0 @@ -'''tzinfo timezone information for US/Arizona.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Arizona(DstTzInfo): - '''US/Arizona timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Arizona' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1942,2,9,9,0,0), -d(1944,1,1,6,1,0), -d(1944,4,1,7,1,0), -d(1944,10,1,6,1,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Arizona = Arizona() - diff --git a/modules/pytz/zoneinfo/US/Central.py b/modules/pytz/zoneinfo/US/Central.py deleted file mode 100644 index b7776bef..00000000 --- a/modules/pytz/zoneinfo/US/Central.py +++ /dev/null @@ -1,490 +0,0 @@ -'''tzinfo timezone information for US/Central.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Central(DstTzInfo): - '''US/Central timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Central' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1920,6,13,8,0,0), -d(1920,10,31,7,0,0), -d(1921,3,27,8,0,0), -d(1921,10,30,7,0,0), -d(1922,4,30,8,0,0), -d(1922,9,24,7,0,0), -d(1923,4,29,8,0,0), -d(1923,9,30,7,0,0), -d(1924,4,27,8,0,0), -d(1924,9,28,7,0,0), -d(1925,4,26,8,0,0), -d(1925,9,27,7,0,0), -d(1926,4,25,8,0,0), -d(1926,9,26,7,0,0), -d(1927,4,24,8,0,0), -d(1927,9,25,7,0,0), -d(1928,4,29,8,0,0), -d(1928,9,30,7,0,0), -d(1929,4,28,8,0,0), -d(1929,9,29,7,0,0), -d(1930,4,27,8,0,0), -d(1930,9,28,7,0,0), -d(1931,4,26,8,0,0), -d(1931,9,27,7,0,0), -d(1932,4,24,8,0,0), -d(1932,9,25,7,0,0), -d(1933,4,30,8,0,0), -d(1933,9,24,7,0,0), -d(1934,4,29,8,0,0), -d(1934,9,30,7,0,0), -d(1935,4,28,8,0,0), -d(1935,9,29,7,0,0), -d(1936,3,1,8,0,0), -d(1936,11,15,7,0,0), -d(1937,4,25,8,0,0), -d(1937,9,26,7,0,0), -d(1938,4,24,8,0,0), -d(1938,9,25,7,0,0), -d(1939,4,30,8,0,0), -d(1939,9,24,7,0,0), -d(1940,4,28,8,0,0), -d(1940,9,29,7,0,0), -d(1941,4,27,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,10,30,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,10,27,7,0,0), -d(1958,4,27,8,0,0), -d(1958,10,26,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,10,29,7,0,0), -d(1962,4,29,8,0,0), -d(1962,10,28,7,0,0), -d(1963,4,28,8,0,0), -d(1963,10,27,7,0,0), -d(1964,4,26,8,0,0), -d(1964,10,25,7,0,0), -d(1965,4,25,8,0,0), -d(1965,10,31,7,0,0), -d(1966,4,24,8,0,0), -d(1966,10,30,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(1992,4,5,8,0,0), -d(1992,10,25,7,0,0), -d(1993,4,4,8,0,0), -d(1993,10,31,7,0,0), -d(1994,4,3,8,0,0), -d(1994,10,30,7,0,0), -d(1995,4,2,8,0,0), -d(1995,10,29,7,0,0), -d(1996,4,7,8,0,0), -d(1996,10,27,7,0,0), -d(1997,4,6,8,0,0), -d(1997,10,26,7,0,0), -d(1998,4,5,8,0,0), -d(1998,10,25,7,0,0), -d(1999,4,4,8,0,0), -d(1999,10,31,7,0,0), -d(2000,4,2,8,0,0), -d(2000,10,29,7,0,0), -d(2001,4,1,8,0,0), -d(2001,10,28,7,0,0), -d(2002,4,7,8,0,0), -d(2002,10,27,7,0,0), -d(2003,4,6,8,0,0), -d(2003,10,26,7,0,0), -d(2004,4,4,8,0,0), -d(2004,10,31,7,0,0), -d(2005,4,3,8,0,0), -d(2005,10,30,7,0,0), -d(2006,4,2,8,0,0), -d(2006,10,29,7,0,0), -d(2007,3,11,8,0,0), -d(2007,11,4,7,0,0), -d(2008,3,9,8,0,0), -d(2008,11,2,7,0,0), -d(2009,3,8,8,0,0), -d(2009,11,1,7,0,0), -d(2010,3,14,8,0,0), -d(2010,11,7,7,0,0), -d(2011,3,13,8,0,0), -d(2011,11,6,7,0,0), -d(2012,3,11,8,0,0), -d(2012,11,4,7,0,0), -d(2013,3,10,8,0,0), -d(2013,11,3,7,0,0), -d(2014,3,9,8,0,0), -d(2014,11,2,7,0,0), -d(2015,3,8,8,0,0), -d(2015,11,1,7,0,0), -d(2016,3,13,8,0,0), -d(2016,11,6,7,0,0), -d(2017,3,12,8,0,0), -d(2017,11,5,7,0,0), -d(2018,3,11,8,0,0), -d(2018,11,4,7,0,0), -d(2019,3,10,8,0,0), -d(2019,11,3,7,0,0), -d(2020,3,8,8,0,0), -d(2020,11,1,7,0,0), -d(2021,3,14,8,0,0), -d(2021,11,7,7,0,0), -d(2022,3,13,8,0,0), -d(2022,11,6,7,0,0), -d(2023,3,12,8,0,0), -d(2023,11,5,7,0,0), -d(2024,3,10,8,0,0), -d(2024,11,3,7,0,0), -d(2025,3,9,8,0,0), -d(2025,11,2,7,0,0), -d(2026,3,8,8,0,0), -d(2026,11,1,7,0,0), -d(2027,3,14,8,0,0), -d(2027,11,7,7,0,0), -d(2028,3,12,8,0,0), -d(2028,11,5,7,0,0), -d(2029,3,11,8,0,0), -d(2029,11,4,7,0,0), -d(2030,3,10,8,0,0), -d(2030,11,3,7,0,0), -d(2031,3,9,8,0,0), -d(2031,11,2,7,0,0), -d(2032,3,14,8,0,0), -d(2032,11,7,7,0,0), -d(2033,3,13,8,0,0), -d(2033,11,6,7,0,0), -d(2034,3,12,8,0,0), -d(2034,11,5,7,0,0), -d(2035,3,11,8,0,0), -d(2035,11,4,7,0,0), -d(2036,3,9,8,0,0), -d(2036,11,2,7,0,0), -d(2037,3,8,8,0,0), -d(2037,11,1,7,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), - ] - -Central = Central() - diff --git a/modules/pytz/zoneinfo/US/East_minus_Indiana.py b/modules/pytz/zoneinfo/US/East_minus_Indiana.py deleted file mode 100644 index f1d6c37d..00000000 --- a/modules/pytz/zoneinfo/US/East_minus_Indiana.py +++ /dev/null @@ -1,216 +0,0 @@ -'''tzinfo timezone information for US/East_minus_Indiana.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class East_minus_Indiana(DstTzInfo): - '''US/East_minus_Indiana timezone definition. See datetime.tzinfo for details''' - - zone = 'US/East_minus_Indiana' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1941,6,22,8,0,0), -d(1941,9,28,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1946,4,28,8,0,0), -d(1946,9,29,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -East_minus_Indiana = East_minus_Indiana() - diff --git a/modules/pytz/zoneinfo/US/Eastern.py b/modules/pytz/zoneinfo/US/Eastern.py deleted file mode 100644 index 7399d286..00000000 --- a/modules/pytz/zoneinfo/US/Eastern.py +++ /dev/null @@ -1,490 +0,0 @@ -'''tzinfo timezone information for US/Eastern.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Eastern(DstTzInfo): - '''US/Eastern timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Eastern' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,7,0,0), -d(1918,10,27,6,0,0), -d(1919,3,30,7,0,0), -d(1919,10,26,6,0,0), -d(1920,3,28,7,0,0), -d(1920,10,31,6,0,0), -d(1921,4,24,7,0,0), -d(1921,9,25,6,0,0), -d(1922,4,30,7,0,0), -d(1922,9,24,6,0,0), -d(1923,4,29,7,0,0), -d(1923,9,30,6,0,0), -d(1924,4,27,7,0,0), -d(1924,9,28,6,0,0), -d(1925,4,26,7,0,0), -d(1925,9,27,6,0,0), -d(1926,4,25,7,0,0), -d(1926,9,26,6,0,0), -d(1927,4,24,7,0,0), -d(1927,9,25,6,0,0), -d(1928,4,29,7,0,0), -d(1928,9,30,6,0,0), -d(1929,4,28,7,0,0), -d(1929,9,29,6,0,0), -d(1930,4,27,7,0,0), -d(1930,9,28,6,0,0), -d(1931,4,26,7,0,0), -d(1931,9,27,6,0,0), -d(1932,4,24,7,0,0), -d(1932,9,25,6,0,0), -d(1933,4,30,7,0,0), -d(1933,9,24,6,0,0), -d(1934,4,29,7,0,0), -d(1934,9,30,6,0,0), -d(1935,4,28,7,0,0), -d(1935,9,29,6,0,0), -d(1936,4,26,7,0,0), -d(1936,9,27,6,0,0), -d(1937,4,25,7,0,0), -d(1937,9,26,6,0,0), -d(1938,4,24,7,0,0), -d(1938,9,25,6,0,0), -d(1939,4,30,7,0,0), -d(1939,9,24,6,0,0), -d(1940,4,28,7,0,0), -d(1940,9,29,6,0,0), -d(1941,4,27,7,0,0), -d(1941,9,28,6,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,7,0,0), -d(1947,9,28,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1949,4,24,7,0,0), -d(1949,9,25,6,0,0), -d(1950,4,30,7,0,0), -d(1950,9,24,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,10,30,6,0,0), -d(1956,4,29,7,0,0), -d(1956,10,28,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Eastern = Eastern() - diff --git a/modules/pytz/zoneinfo/US/Hawaii.py b/modules/pytz/zoneinfo/US/Hawaii.py deleted file mode 100644 index 626ac1bb..00000000 --- a/modules/pytz/zoneinfo/US/Hawaii.py +++ /dev/null @@ -1,32 +0,0 @@ -'''tzinfo timezone information for US/Hawaii.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Hawaii(DstTzInfo): - '''US/Hawaii timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Hawaii' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1933,4,30,12,30,0), -d(1933,5,21,11,30,0), -d(1942,2,9,12,30,0), -d(1945,8,14,23,0,0), -d(1945,9,30,11,30,0), -d(1947,6,8,12,30,0), - ] - - _transition_info = [ -i(-37800,0,'HST'), -i(-34200,3600,'HDT'), -i(-37800,0,'HST'), -i(-34200,3600,'HWT'), -i(-34200,3600,'HPT'), -i(-37800,0,'HST'), -i(-36000,0,'HST'), - ] - -Hawaii = Hawaii() - diff --git a/modules/pytz/zoneinfo/US/Indiana_minus_Starke.py b/modules/pytz/zoneinfo/US/Indiana_minus_Starke.py deleted file mode 100644 index e48867e6..00000000 --- a/modules/pytz/zoneinfo/US/Indiana_minus_Starke.py +++ /dev/null @@ -1,326 +0,0 @@ -'''tzinfo timezone information for US/Indiana_minus_Starke.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Indiana_minus_Starke(DstTzInfo): - '''US/Indiana_minus_Starke timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Indiana_minus_Starke' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,8,0,0), -d(1918,10,27,7,0,0), -d(1919,3,30,8,0,0), -d(1919,10,26,7,0,0), -d(1942,2,9,8,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,7,0,0), -d(1947,4,27,8,0,0), -d(1947,9,28,7,0,0), -d(1948,4,25,8,0,0), -d(1948,9,26,7,0,0), -d(1949,4,24,8,0,0), -d(1949,9,25,7,0,0), -d(1950,4,30,8,0,0), -d(1950,9,24,7,0,0), -d(1951,4,29,8,0,0), -d(1951,9,30,7,0,0), -d(1952,4,27,8,0,0), -d(1952,9,28,7,0,0), -d(1953,4,26,8,0,0), -d(1953,9,27,7,0,0), -d(1954,4,25,8,0,0), -d(1954,9,26,7,0,0), -d(1955,4,24,8,0,0), -d(1955,10,30,7,0,0), -d(1956,4,29,8,0,0), -d(1956,10,28,7,0,0), -d(1957,4,28,8,0,0), -d(1957,9,29,7,0,0), -d(1958,4,27,8,0,0), -d(1958,9,28,7,0,0), -d(1959,4,26,8,0,0), -d(1959,10,25,7,0,0), -d(1960,4,24,8,0,0), -d(1960,10,30,7,0,0), -d(1961,4,30,8,0,0), -d(1961,10,29,7,0,0), -d(1962,4,29,8,0,0), -d(1963,10,27,7,0,0), -d(1967,4,30,8,0,0), -d(1967,10,29,7,0,0), -d(1968,4,28,8,0,0), -d(1968,10,27,7,0,0), -d(1969,4,27,8,0,0), -d(1969,10,26,7,0,0), -d(1970,4,26,8,0,0), -d(1970,10,25,7,0,0), -d(1971,4,25,8,0,0), -d(1971,10,31,7,0,0), -d(1972,4,30,8,0,0), -d(1972,10,29,7,0,0), -d(1973,4,29,8,0,0), -d(1973,10,28,7,0,0), -d(1974,1,6,8,0,0), -d(1974,10,27,7,0,0), -d(1975,2,23,8,0,0), -d(1975,10,26,7,0,0), -d(1976,4,25,8,0,0), -d(1976,10,31,7,0,0), -d(1977,4,24,8,0,0), -d(1977,10,30,7,0,0), -d(1978,4,30,8,0,0), -d(1978,10,29,7,0,0), -d(1979,4,29,8,0,0), -d(1979,10,28,7,0,0), -d(1980,4,27,8,0,0), -d(1980,10,26,7,0,0), -d(1981,4,26,8,0,0), -d(1981,10,25,7,0,0), -d(1982,4,25,8,0,0), -d(1982,10,31,7,0,0), -d(1983,4,24,8,0,0), -d(1983,10,30,7,0,0), -d(1984,4,29,8,0,0), -d(1984,10,28,7,0,0), -d(1985,4,28,8,0,0), -d(1985,10,27,7,0,0), -d(1986,4,27,8,0,0), -d(1986,10,26,7,0,0), -d(1987,4,5,8,0,0), -d(1987,10,25,7,0,0), -d(1988,4,3,8,0,0), -d(1988,10,30,7,0,0), -d(1989,4,2,8,0,0), -d(1989,10,29,7,0,0), -d(1990,4,1,8,0,0), -d(1990,10,28,7,0,0), -d(1991,4,7,8,0,0), -d(1991,10,27,7,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CWT'), -i(-18000,3600,'CPT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-21600,0,'CST'), -i(-18000,3600,'CDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Indiana_minus_Starke = Indiana_minus_Starke() - diff --git a/modules/pytz/zoneinfo/US/Michigan.py b/modules/pytz/zoneinfo/US/Michigan.py deleted file mode 100644 index e4126b52..00000000 --- a/modules/pytz/zoneinfo/US/Michigan.py +++ /dev/null @@ -1,298 +0,0 @@ -'''tzinfo timezone information for US/Michigan.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Michigan(DstTzInfo): - '''US/Michigan timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Michigan' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1905,1,1,5,32,11), -d(1915,5,15,8,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1967,6,14,7,0,0), -d(1967,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,4,27,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-19920,0,'LMT'), -i(-21600,0,'CST'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -Michigan = Michigan() - diff --git a/modules/pytz/zoneinfo/US/Mountain.py b/modules/pytz/zoneinfo/US/Mountain.py deleted file mode 100644 index ab6b1b68..00000000 --- a/modules/pytz/zoneinfo/US/Mountain.py +++ /dev/null @@ -1,334 +0,0 @@ -'''tzinfo timezone information for US/Mountain.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Mountain(DstTzInfo): - '''US/Mountain timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Mountain' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,9,0,0), -d(1918,10,27,8,0,0), -d(1919,3,30,9,0,0), -d(1919,10,26,8,0,0), -d(1920,3,28,9,0,0), -d(1920,10,31,8,0,0), -d(1921,3,27,9,0,0), -d(1921,5,22,8,0,0), -d(1942,2,9,9,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,8,0,0), -d(1965,4,25,9,0,0), -d(1965,10,31,8,0,0), -d(1966,4,24,9,0,0), -d(1966,10,30,8,0,0), -d(1967,4,30,9,0,0), -d(1967,10,29,8,0,0), -d(1968,4,28,9,0,0), -d(1968,10,27,8,0,0), -d(1969,4,27,9,0,0), -d(1969,10,26,8,0,0), -d(1970,4,26,9,0,0), -d(1970,10,25,8,0,0), -d(1971,4,25,9,0,0), -d(1971,10,31,8,0,0), -d(1972,4,30,9,0,0), -d(1972,10,29,8,0,0), -d(1973,4,29,9,0,0), -d(1973,10,28,8,0,0), -d(1974,1,6,9,0,0), -d(1974,10,27,8,0,0), -d(1975,2,23,9,0,0), -d(1975,10,26,8,0,0), -d(1976,4,25,9,0,0), -d(1976,10,31,8,0,0), -d(1977,4,24,9,0,0), -d(1977,10,30,8,0,0), -d(1978,4,30,9,0,0), -d(1978,10,29,8,0,0), -d(1979,4,29,9,0,0), -d(1979,10,28,8,0,0), -d(1980,4,27,9,0,0), -d(1980,10,26,8,0,0), -d(1981,4,26,9,0,0), -d(1981,10,25,8,0,0), -d(1982,4,25,9,0,0), -d(1982,10,31,8,0,0), -d(1983,4,24,9,0,0), -d(1983,10,30,8,0,0), -d(1984,4,29,9,0,0), -d(1984,10,28,8,0,0), -d(1985,4,28,9,0,0), -d(1985,10,27,8,0,0), -d(1986,4,27,9,0,0), -d(1986,10,26,8,0,0), -d(1987,4,5,9,0,0), -d(1987,10,25,8,0,0), -d(1988,4,3,9,0,0), -d(1988,10,30,8,0,0), -d(1989,4,2,9,0,0), -d(1989,10,29,8,0,0), -d(1990,4,1,9,0,0), -d(1990,10,28,8,0,0), -d(1991,4,7,9,0,0), -d(1991,10,27,8,0,0), -d(1992,4,5,9,0,0), -d(1992,10,25,8,0,0), -d(1993,4,4,9,0,0), -d(1993,10,31,8,0,0), -d(1994,4,3,9,0,0), -d(1994,10,30,8,0,0), -d(1995,4,2,9,0,0), -d(1995,10,29,8,0,0), -d(1996,4,7,9,0,0), -d(1996,10,27,8,0,0), -d(1997,4,6,9,0,0), -d(1997,10,26,8,0,0), -d(1998,4,5,9,0,0), -d(1998,10,25,8,0,0), -d(1999,4,4,9,0,0), -d(1999,10,31,8,0,0), -d(2000,4,2,9,0,0), -d(2000,10,29,8,0,0), -d(2001,4,1,9,0,0), -d(2001,10,28,8,0,0), -d(2002,4,7,9,0,0), -d(2002,10,27,8,0,0), -d(2003,4,6,9,0,0), -d(2003,10,26,8,0,0), -d(2004,4,4,9,0,0), -d(2004,10,31,8,0,0), -d(2005,4,3,9,0,0), -d(2005,10,30,8,0,0), -d(2006,4,2,9,0,0), -d(2006,10,29,8,0,0), -d(2007,3,11,9,0,0), -d(2007,11,4,8,0,0), -d(2008,3,9,9,0,0), -d(2008,11,2,8,0,0), -d(2009,3,8,9,0,0), -d(2009,11,1,8,0,0), -d(2010,3,14,9,0,0), -d(2010,11,7,8,0,0), -d(2011,3,13,9,0,0), -d(2011,11,6,8,0,0), -d(2012,3,11,9,0,0), -d(2012,11,4,8,0,0), -d(2013,3,10,9,0,0), -d(2013,11,3,8,0,0), -d(2014,3,9,9,0,0), -d(2014,11,2,8,0,0), -d(2015,3,8,9,0,0), -d(2015,11,1,8,0,0), -d(2016,3,13,9,0,0), -d(2016,11,6,8,0,0), -d(2017,3,12,9,0,0), -d(2017,11,5,8,0,0), -d(2018,3,11,9,0,0), -d(2018,11,4,8,0,0), -d(2019,3,10,9,0,0), -d(2019,11,3,8,0,0), -d(2020,3,8,9,0,0), -d(2020,11,1,8,0,0), -d(2021,3,14,9,0,0), -d(2021,11,7,8,0,0), -d(2022,3,13,9,0,0), -d(2022,11,6,8,0,0), -d(2023,3,12,9,0,0), -d(2023,11,5,8,0,0), -d(2024,3,10,9,0,0), -d(2024,11,3,8,0,0), -d(2025,3,9,9,0,0), -d(2025,11,2,8,0,0), -d(2026,3,8,9,0,0), -d(2026,11,1,8,0,0), -d(2027,3,14,9,0,0), -d(2027,11,7,8,0,0), -d(2028,3,12,9,0,0), -d(2028,11,5,8,0,0), -d(2029,3,11,9,0,0), -d(2029,11,4,8,0,0), -d(2030,3,10,9,0,0), -d(2030,11,3,8,0,0), -d(2031,3,9,9,0,0), -d(2031,11,2,8,0,0), -d(2032,3,14,9,0,0), -d(2032,11,7,8,0,0), -d(2033,3,13,9,0,0), -d(2033,11,6,8,0,0), -d(2034,3,12,9,0,0), -d(2034,11,5,8,0,0), -d(2035,3,11,9,0,0), -d(2035,11,4,8,0,0), -d(2036,3,9,9,0,0), -d(2036,11,2,8,0,0), -d(2037,3,8,9,0,0), -d(2037,11,1,8,0,0), - ] - - _transition_info = [ -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MWT'), -i(-21600,3600,'MPT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), -i(-21600,3600,'MDT'), -i(-25200,0,'MST'), - ] - -Mountain = Mountain() - diff --git a/modules/pytz/zoneinfo/US/Pacific.py b/modules/pytz/zoneinfo/US/Pacific.py deleted file mode 100644 index f41984bd..00000000 --- a/modules/pytz/zoneinfo/US/Pacific.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for US/Pacific.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pacific(DstTzInfo): - '''US/Pacific timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Pacific' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,10,0,0), -d(1918,10,27,9,0,0), -d(1919,3,30,10,0,0), -d(1919,10,26,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1948,3,14,10,0,0), -d(1949,1,1,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,1,6,10,0,0), -d(1974,10,27,9,0,0), -d(1975,2,23,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,3,11,10,0,0), -d(2007,11,4,9,0,0), -d(2008,3,9,10,0,0), -d(2008,11,2,9,0,0), -d(2009,3,8,10,0,0), -d(2009,11,1,9,0,0), -d(2010,3,14,10,0,0), -d(2010,11,7,9,0,0), -d(2011,3,13,10,0,0), -d(2011,11,6,9,0,0), -d(2012,3,11,10,0,0), -d(2012,11,4,9,0,0), -d(2013,3,10,10,0,0), -d(2013,11,3,9,0,0), -d(2014,3,9,10,0,0), -d(2014,11,2,9,0,0), -d(2015,3,8,10,0,0), -d(2015,11,1,9,0,0), -d(2016,3,13,10,0,0), -d(2016,11,6,9,0,0), -d(2017,3,12,10,0,0), -d(2017,11,5,9,0,0), -d(2018,3,11,10,0,0), -d(2018,11,4,9,0,0), -d(2019,3,10,10,0,0), -d(2019,11,3,9,0,0), -d(2020,3,8,10,0,0), -d(2020,11,1,9,0,0), -d(2021,3,14,10,0,0), -d(2021,11,7,9,0,0), -d(2022,3,13,10,0,0), -d(2022,11,6,9,0,0), -d(2023,3,12,10,0,0), -d(2023,11,5,9,0,0), -d(2024,3,10,10,0,0), -d(2024,11,3,9,0,0), -d(2025,3,9,10,0,0), -d(2025,11,2,9,0,0), -d(2026,3,8,10,0,0), -d(2026,11,1,9,0,0), -d(2027,3,14,10,0,0), -d(2027,11,7,9,0,0), -d(2028,3,12,10,0,0), -d(2028,11,5,9,0,0), -d(2029,3,11,10,0,0), -d(2029,11,4,9,0,0), -d(2030,3,10,10,0,0), -d(2030,11,3,9,0,0), -d(2031,3,9,10,0,0), -d(2031,11,2,9,0,0), -d(2032,3,14,10,0,0), -d(2032,11,7,9,0,0), -d(2033,3,13,10,0,0), -d(2033,11,6,9,0,0), -d(2034,3,12,10,0,0), -d(2034,11,5,9,0,0), -d(2035,3,11,10,0,0), -d(2035,11,4,9,0,0), -d(2036,3,9,10,0,0), -d(2036,11,2,9,0,0), -d(2037,3,8,10,0,0), -d(2037,11,1,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Pacific = Pacific() - diff --git a/modules/pytz/zoneinfo/US/Pacific_minus_New.py b/modules/pytz/zoneinfo/US/Pacific_minus_New.py deleted file mode 100644 index 38c25efe..00000000 --- a/modules/pytz/zoneinfo/US/Pacific_minus_New.py +++ /dev/null @@ -1,390 +0,0 @@ -'''tzinfo timezone information for US/Pacific_minus_New.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Pacific_minus_New(DstTzInfo): - '''US/Pacific_minus_New timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Pacific_minus_New' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,10,0,0), -d(1918,10,27,9,0,0), -d(1919,3,30,10,0,0), -d(1919,10,26,9,0,0), -d(1942,2,9,10,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,9,0,0), -d(1948,3,14,10,0,0), -d(1949,1,1,9,0,0), -d(1950,4,30,10,0,0), -d(1950,9,24,9,0,0), -d(1951,4,29,10,0,0), -d(1951,9,30,9,0,0), -d(1952,4,27,10,0,0), -d(1952,9,28,9,0,0), -d(1953,4,26,10,0,0), -d(1953,9,27,9,0,0), -d(1954,4,25,10,0,0), -d(1954,9,26,9,0,0), -d(1955,4,24,10,0,0), -d(1955,9,25,9,0,0), -d(1956,4,29,10,0,0), -d(1956,9,30,9,0,0), -d(1957,4,28,10,0,0), -d(1957,9,29,9,0,0), -d(1958,4,27,10,0,0), -d(1958,9,28,9,0,0), -d(1959,4,26,10,0,0), -d(1959,9,27,9,0,0), -d(1960,4,24,10,0,0), -d(1960,9,25,9,0,0), -d(1961,4,30,10,0,0), -d(1961,9,24,9,0,0), -d(1962,4,29,10,0,0), -d(1962,10,28,9,0,0), -d(1963,4,28,10,0,0), -d(1963,10,27,9,0,0), -d(1964,4,26,10,0,0), -d(1964,10,25,9,0,0), -d(1965,4,25,10,0,0), -d(1965,10,31,9,0,0), -d(1966,4,24,10,0,0), -d(1966,10,30,9,0,0), -d(1967,4,30,10,0,0), -d(1967,10,29,9,0,0), -d(1968,4,28,10,0,0), -d(1968,10,27,9,0,0), -d(1969,4,27,10,0,0), -d(1969,10,26,9,0,0), -d(1970,4,26,10,0,0), -d(1970,10,25,9,0,0), -d(1971,4,25,10,0,0), -d(1971,10,31,9,0,0), -d(1972,4,30,10,0,0), -d(1972,10,29,9,0,0), -d(1973,4,29,10,0,0), -d(1973,10,28,9,0,0), -d(1974,1,6,10,0,0), -d(1974,10,27,9,0,0), -d(1975,2,23,10,0,0), -d(1975,10,26,9,0,0), -d(1976,4,25,10,0,0), -d(1976,10,31,9,0,0), -d(1977,4,24,10,0,0), -d(1977,10,30,9,0,0), -d(1978,4,30,10,0,0), -d(1978,10,29,9,0,0), -d(1979,4,29,10,0,0), -d(1979,10,28,9,0,0), -d(1980,4,27,10,0,0), -d(1980,10,26,9,0,0), -d(1981,4,26,10,0,0), -d(1981,10,25,9,0,0), -d(1982,4,25,10,0,0), -d(1982,10,31,9,0,0), -d(1983,4,24,10,0,0), -d(1983,10,30,9,0,0), -d(1984,4,29,10,0,0), -d(1984,10,28,9,0,0), -d(1985,4,28,10,0,0), -d(1985,10,27,9,0,0), -d(1986,4,27,10,0,0), -d(1986,10,26,9,0,0), -d(1987,4,5,10,0,0), -d(1987,10,25,9,0,0), -d(1988,4,3,10,0,0), -d(1988,10,30,9,0,0), -d(1989,4,2,10,0,0), -d(1989,10,29,9,0,0), -d(1990,4,1,10,0,0), -d(1990,10,28,9,0,0), -d(1991,4,7,10,0,0), -d(1991,10,27,9,0,0), -d(1992,4,5,10,0,0), -d(1992,10,25,9,0,0), -d(1993,4,4,10,0,0), -d(1993,10,31,9,0,0), -d(1994,4,3,10,0,0), -d(1994,10,30,9,0,0), -d(1995,4,2,10,0,0), -d(1995,10,29,9,0,0), -d(1996,4,7,10,0,0), -d(1996,10,27,9,0,0), -d(1997,4,6,10,0,0), -d(1997,10,26,9,0,0), -d(1998,4,5,10,0,0), -d(1998,10,25,9,0,0), -d(1999,4,4,10,0,0), -d(1999,10,31,9,0,0), -d(2000,4,2,10,0,0), -d(2000,10,29,9,0,0), -d(2001,4,1,10,0,0), -d(2001,10,28,9,0,0), -d(2002,4,7,10,0,0), -d(2002,10,27,9,0,0), -d(2003,4,6,10,0,0), -d(2003,10,26,9,0,0), -d(2004,4,4,10,0,0), -d(2004,10,31,9,0,0), -d(2005,4,3,10,0,0), -d(2005,10,30,9,0,0), -d(2006,4,2,10,0,0), -d(2006,10,29,9,0,0), -d(2007,3,11,10,0,0), -d(2007,11,4,9,0,0), -d(2008,3,9,10,0,0), -d(2008,11,2,9,0,0), -d(2009,3,8,10,0,0), -d(2009,11,1,9,0,0), -d(2010,3,14,10,0,0), -d(2010,11,7,9,0,0), -d(2011,3,13,10,0,0), -d(2011,11,6,9,0,0), -d(2012,3,11,10,0,0), -d(2012,11,4,9,0,0), -d(2013,3,10,10,0,0), -d(2013,11,3,9,0,0), -d(2014,3,9,10,0,0), -d(2014,11,2,9,0,0), -d(2015,3,8,10,0,0), -d(2015,11,1,9,0,0), -d(2016,3,13,10,0,0), -d(2016,11,6,9,0,0), -d(2017,3,12,10,0,0), -d(2017,11,5,9,0,0), -d(2018,3,11,10,0,0), -d(2018,11,4,9,0,0), -d(2019,3,10,10,0,0), -d(2019,11,3,9,0,0), -d(2020,3,8,10,0,0), -d(2020,11,1,9,0,0), -d(2021,3,14,10,0,0), -d(2021,11,7,9,0,0), -d(2022,3,13,10,0,0), -d(2022,11,6,9,0,0), -d(2023,3,12,10,0,0), -d(2023,11,5,9,0,0), -d(2024,3,10,10,0,0), -d(2024,11,3,9,0,0), -d(2025,3,9,10,0,0), -d(2025,11,2,9,0,0), -d(2026,3,8,10,0,0), -d(2026,11,1,9,0,0), -d(2027,3,14,10,0,0), -d(2027,11,7,9,0,0), -d(2028,3,12,10,0,0), -d(2028,11,5,9,0,0), -d(2029,3,11,10,0,0), -d(2029,11,4,9,0,0), -d(2030,3,10,10,0,0), -d(2030,11,3,9,0,0), -d(2031,3,9,10,0,0), -d(2031,11,2,9,0,0), -d(2032,3,14,10,0,0), -d(2032,11,7,9,0,0), -d(2033,3,13,10,0,0), -d(2033,11,6,9,0,0), -d(2034,3,12,10,0,0), -d(2034,11,5,9,0,0), -d(2035,3,11,10,0,0), -d(2035,11,4,9,0,0), -d(2036,3,9,10,0,0), -d(2036,11,2,9,0,0), -d(2037,3,8,10,0,0), -d(2037,11,1,9,0,0), - ] - - _transition_info = [ -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PWT'), -i(-25200,3600,'PPT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), -i(-25200,3600,'PDT'), -i(-28800,0,'PST'), - ] - -Pacific_minus_New = Pacific_minus_New() - diff --git a/modules/pytz/zoneinfo/US/Samoa.py b/modules/pytz/zoneinfo/US/Samoa.py deleted file mode 100644 index 66c6b091..00000000 --- a/modules/pytz/zoneinfo/US/Samoa.py +++ /dev/null @@ -1,28 +0,0 @@ -'''tzinfo timezone information for US/Samoa.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class Samoa(DstTzInfo): - '''US/Samoa timezone definition. See datetime.tzinfo for details''' - - zone = 'US/Samoa' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1911,1,1,11,22,48), -d(1950,1,1,11,30,0), -d(1967,4,1,11,0,0), -d(1983,11,30,11,0,0), - ] - - _transition_info = [ -i(-40980,0,'LMT'), -i(-41400,0,'SAMT'), -i(-39600,0,'NST'), -i(-39600,0,'BST'), -i(-39600,0,'SST'), - ] - -Samoa = Samoa() - diff --git a/modules/pytz/zoneinfo/US/__init__.py b/modules/pytz/zoneinfo/US/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/UTC.py b/modules/pytz/zoneinfo/UTC.py deleted file mode 100644 index fdb84339..00000000 --- a/modules/pytz/zoneinfo/UTC.py +++ /dev/null @@ -1,2 +0,0 @@ -'''tzinfo timezone information for UTC.''' -from pytz import UTC diff --git a/modules/pytz/zoneinfo/Universal.py b/modules/pytz/zoneinfo/Universal.py deleted file mode 100644 index 0ed335fd..00000000 --- a/modules/pytz/zoneinfo/Universal.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Universal.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Universal(StaticTzInfo): - '''Universal timezone definition. See datetime.tzinfo for details''' - zone = 'Universal' - _utcoffset = timedelta(seconds=0) - _tzname = 'UTC' - -Universal = Universal() - diff --git a/modules/pytz/zoneinfo/WET.py b/modules/pytz/zoneinfo/WET.py deleted file mode 100644 index a721990d..00000000 --- a/modules/pytz/zoneinfo/WET.py +++ /dev/null @@ -1,264 +0,0 @@ -'''tzinfo timezone information for WET.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class WET(DstTzInfo): - '''WET timezone definition. See datetime.tzinfo for details''' - - zone = 'WET' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1977,4,3,1,0,0), -d(1977,9,25,1,0,0), -d(1978,4,2,1,0,0), -d(1978,10,1,1,0,0), -d(1979,4,1,1,0,0), -d(1979,9,30,1,0,0), -d(1980,4,6,1,0,0), -d(1980,9,28,1,0,0), -d(1981,3,29,1,0,0), -d(1981,9,27,1,0,0), -d(1982,3,28,1,0,0), -d(1982,9,26,1,0,0), -d(1983,3,27,1,0,0), -d(1983,9,25,1,0,0), -d(1984,3,25,1,0,0), -d(1984,9,30,1,0,0), -d(1985,3,31,1,0,0), -d(1985,9,29,1,0,0), -d(1986,3,30,1,0,0), -d(1986,9,28,1,0,0), -d(1987,3,29,1,0,0), -d(1987,9,27,1,0,0), -d(1988,3,27,1,0,0), -d(1988,9,25,1,0,0), -d(1989,3,26,1,0,0), -d(1989,9,24,1,0,0), -d(1990,3,25,1,0,0), -d(1990,9,30,1,0,0), -d(1991,3,31,1,0,0), -d(1991,9,29,1,0,0), -d(1992,3,29,1,0,0), -d(1992,9,27,1,0,0), -d(1993,3,28,1,0,0), -d(1993,9,26,1,0,0), -d(1994,3,27,1,0,0), -d(1994,9,25,1,0,0), -d(1995,3,26,1,0,0), -d(1995,9,24,1,0,0), -d(1996,3,31,1,0,0), -d(1996,10,27,1,0,0), -d(1997,3,30,1,0,0), -d(1997,10,26,1,0,0), -d(1998,3,29,1,0,0), -d(1998,10,25,1,0,0), -d(1999,3,28,1,0,0), -d(1999,10,31,1,0,0), -d(2000,3,26,1,0,0), -d(2000,10,29,1,0,0), -d(2001,3,25,1,0,0), -d(2001,10,28,1,0,0), -d(2002,3,31,1,0,0), -d(2002,10,27,1,0,0), -d(2003,3,30,1,0,0), -d(2003,10,26,1,0,0), -d(2004,3,28,1,0,0), -d(2004,10,31,1,0,0), -d(2005,3,27,1,0,0), -d(2005,10,30,1,0,0), -d(2006,3,26,1,0,0), -d(2006,10,29,1,0,0), -d(2007,3,25,1,0,0), -d(2007,10,28,1,0,0), -d(2008,3,30,1,0,0), -d(2008,10,26,1,0,0), -d(2009,3,29,1,0,0), -d(2009,10,25,1,0,0), -d(2010,3,28,1,0,0), -d(2010,10,31,1,0,0), -d(2011,3,27,1,0,0), -d(2011,10,30,1,0,0), -d(2012,3,25,1,0,0), -d(2012,10,28,1,0,0), -d(2013,3,31,1,0,0), -d(2013,10,27,1,0,0), -d(2014,3,30,1,0,0), -d(2014,10,26,1,0,0), -d(2015,3,29,1,0,0), -d(2015,10,25,1,0,0), -d(2016,3,27,1,0,0), -d(2016,10,30,1,0,0), -d(2017,3,26,1,0,0), -d(2017,10,29,1,0,0), -d(2018,3,25,1,0,0), -d(2018,10,28,1,0,0), -d(2019,3,31,1,0,0), -d(2019,10,27,1,0,0), -d(2020,3,29,1,0,0), -d(2020,10,25,1,0,0), -d(2021,3,28,1,0,0), -d(2021,10,31,1,0,0), -d(2022,3,27,1,0,0), -d(2022,10,30,1,0,0), -d(2023,3,26,1,0,0), -d(2023,10,29,1,0,0), -d(2024,3,31,1,0,0), -d(2024,10,27,1,0,0), -d(2025,3,30,1,0,0), -d(2025,10,26,1,0,0), -d(2026,3,29,1,0,0), -d(2026,10,25,1,0,0), -d(2027,3,28,1,0,0), -d(2027,10,31,1,0,0), -d(2028,3,26,1,0,0), -d(2028,10,29,1,0,0), -d(2029,3,25,1,0,0), -d(2029,10,28,1,0,0), -d(2030,3,31,1,0,0), -d(2030,10,27,1,0,0), -d(2031,3,30,1,0,0), -d(2031,10,26,1,0,0), -d(2032,3,28,1,0,0), -d(2032,10,31,1,0,0), -d(2033,3,27,1,0,0), -d(2033,10,30,1,0,0), -d(2034,3,26,1,0,0), -d(2034,10,29,1,0,0), -d(2035,3,25,1,0,0), -d(2035,10,28,1,0,0), -d(2036,3,30,1,0,0), -d(2036,10,26,1,0,0), -d(2037,3,29,1,0,0), -d(2037,10,25,1,0,0), - ] - - _transition_info = [ -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), -i(3600,3600,'WEST'), -i(0,0,'WET'), - ] - -WET = WET() - diff --git a/modules/pytz/zoneinfo/W_minus_SU.py b/modules/pytz/zoneinfo/W_minus_SU.py deleted file mode 100644 index a897cbde..00000000 --- a/modules/pytz/zoneinfo/W_minus_SU.py +++ /dev/null @@ -1,278 +0,0 @@ -'''tzinfo timezone information for W_minus_SU.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class W_minus_SU(DstTzInfo): - '''W_minus_SU timezone definition. See datetime.tzinfo for details''' - - zone = 'W_minus_SU' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1916,7,2,21,30,0), -d(1917,7,1,20,29,12), -d(1917,12,27,20,29,12), -d(1918,5,31,19,29,12), -d(1918,9,15,20,29,12), -d(1919,5,31,19,29,12), -d(1919,6,30,21,29,12), -d(1919,8,15,20,0,0), -d(1921,2,14,20,0,0), -d(1921,3,20,19,0,0), -d(1921,8,31,19,0,0), -d(1921,9,30,20,0,0), -d(1922,9,30,21,0,0), -d(1930,6,20,22,0,0), -d(1981,3,31,21,0,0), -d(1981,9,30,20,0,0), -d(1982,3,31,21,0,0), -d(1982,9,30,20,0,0), -d(1983,3,31,21,0,0), -d(1983,9,30,20,0,0), -d(1984,3,31,21,0,0), -d(1984,9,29,23,0,0), -d(1985,3,30,23,0,0), -d(1985,9,28,23,0,0), -d(1986,3,29,23,0,0), -d(1986,9,27,23,0,0), -d(1987,3,28,23,0,0), -d(1987,9,26,23,0,0), -d(1988,3,26,23,0,0), -d(1988,9,24,23,0,0), -d(1989,3,25,23,0,0), -d(1989,9,23,23,0,0), -d(1990,3,24,23,0,0), -d(1990,9,29,23,0,0), -d(1991,3,30,23,0,0), -d(1991,9,29,0,0,0), -d(1992,1,19,0,0,0), -d(1992,3,28,20,0,0), -d(1992,9,26,19,0,0), -d(1993,3,27,23,0,0), -d(1993,9,25,23,0,0), -d(1994,3,26,23,0,0), -d(1994,9,24,23,0,0), -d(1995,3,25,23,0,0), -d(1995,9,23,23,0,0), -d(1996,3,30,23,0,0), -d(1996,10,26,23,0,0), -d(1997,3,29,23,0,0), -d(1997,10,25,23,0,0), -d(1998,3,28,23,0,0), -d(1998,10,24,23,0,0), -d(1999,3,27,23,0,0), -d(1999,10,30,23,0,0), -d(2000,3,25,23,0,0), -d(2000,10,28,23,0,0), -d(2001,3,24,23,0,0), -d(2001,10,27,23,0,0), -d(2002,3,30,23,0,0), -d(2002,10,26,23,0,0), -d(2003,3,29,23,0,0), -d(2003,10,25,23,0,0), -d(2004,3,27,23,0,0), -d(2004,10,30,23,0,0), -d(2005,3,26,23,0,0), -d(2005,10,29,23,0,0), -d(2006,3,25,23,0,0), -d(2006,10,28,23,0,0), -d(2007,3,24,23,0,0), -d(2007,10,27,23,0,0), -d(2008,3,29,23,0,0), -d(2008,10,25,23,0,0), -d(2009,3,28,23,0,0), -d(2009,10,24,23,0,0), -d(2010,3,27,23,0,0), -d(2010,10,30,23,0,0), -d(2011,3,26,23,0,0), -d(2011,10,29,23,0,0), -d(2012,3,24,23,0,0), -d(2012,10,27,23,0,0), -d(2013,3,30,23,0,0), -d(2013,10,26,23,0,0), -d(2014,3,29,23,0,0), -d(2014,10,25,23,0,0), -d(2015,3,28,23,0,0), -d(2015,10,24,23,0,0), -d(2016,3,26,23,0,0), -d(2016,10,29,23,0,0), -d(2017,3,25,23,0,0), -d(2017,10,28,23,0,0), -d(2018,3,24,23,0,0), -d(2018,10,27,23,0,0), -d(2019,3,30,23,0,0), -d(2019,10,26,23,0,0), -d(2020,3,28,23,0,0), -d(2020,10,24,23,0,0), -d(2021,3,27,23,0,0), -d(2021,10,30,23,0,0), -d(2022,3,26,23,0,0), -d(2022,10,29,23,0,0), -d(2023,3,25,23,0,0), -d(2023,10,28,23,0,0), -d(2024,3,30,23,0,0), -d(2024,10,26,23,0,0), -d(2025,3,29,23,0,0), -d(2025,10,25,23,0,0), -d(2026,3,28,23,0,0), -d(2026,10,24,23,0,0), -d(2027,3,27,23,0,0), -d(2027,10,30,23,0,0), -d(2028,3,25,23,0,0), -d(2028,10,28,23,0,0), -d(2029,3,24,23,0,0), -d(2029,10,27,23,0,0), -d(2030,3,30,23,0,0), -d(2030,10,26,23,0,0), -d(2031,3,29,23,0,0), -d(2031,10,25,23,0,0), -d(2032,3,27,23,0,0), -d(2032,10,30,23,0,0), -d(2033,3,26,23,0,0), -d(2033,10,29,23,0,0), -d(2034,3,25,23,0,0), -d(2034,10,28,23,0,0), -d(2035,3,24,23,0,0), -d(2035,10,27,23,0,0), -d(2036,3,29,23,0,0), -d(2036,10,25,23,0,0), -d(2037,3,28,23,0,0), -d(2037,10,24,23,0,0), - ] - - _transition_info = [ -i(9000,0,'MMT'), -i(9060,0,'MMT'), -i(12660,3600,'MST'), -i(9060,0,'MMT'), -i(16260,7200,'MDST'), -i(12660,3600,'MST'), -i(16260,7200,'MDST'), -i(14400,5340,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(18000,7200,'MSD'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(10800,0,'EEST'), -i(7200,0,'EET'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), -i(14400,3600,'MSD'), -i(10800,0,'MSK'), - ] - -W_minus_SU = W_minus_SU() - diff --git a/modules/pytz/zoneinfo/Zulu.py b/modules/pytz/zoneinfo/Zulu.py deleted file mode 100644 index 4d6142a5..00000000 --- a/modules/pytz/zoneinfo/Zulu.py +++ /dev/null @@ -1,12 +0,0 @@ -'''tzinfo timezone information for Zulu.''' -from pytz.tzinfo import StaticTzInfo -from pytz.tzinfo import memorized_timedelta as timedelta - -class Zulu(StaticTzInfo): - '''Zulu timezone definition. See datetime.tzinfo for details''' - zone = 'Zulu' - _utcoffset = timedelta(seconds=0) - _tzname = 'UTC' - -Zulu = Zulu() - diff --git a/modules/pytz/zoneinfo/__init__.py b/modules/pytz/zoneinfo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/pytz/zoneinfo/posixrules.py b/modules/pytz/zoneinfo/posixrules.py deleted file mode 100644 index dd34e6e1..00000000 --- a/modules/pytz/zoneinfo/posixrules.py +++ /dev/null @@ -1,490 +0,0 @@ -'''tzinfo timezone information for posixrules.''' -from pytz.tzinfo import DstTzInfo -from pytz.tzinfo import memorized_datetime as d -from pytz.tzinfo import memorized_ttinfo as i - -class posixrules(DstTzInfo): - '''posixrules timezone definition. See datetime.tzinfo for details''' - - zone = 'posixrules' - - _utc_transition_times = [ -d(1,1,1,0,0,0), -d(1918,3,31,7,0,0), -d(1918,10,27,6,0,0), -d(1919,3,30,7,0,0), -d(1919,10,26,6,0,0), -d(1920,3,28,7,0,0), -d(1920,10,31,6,0,0), -d(1921,4,24,7,0,0), -d(1921,9,25,6,0,0), -d(1922,4,30,7,0,0), -d(1922,9,24,6,0,0), -d(1923,4,29,7,0,0), -d(1923,9,30,6,0,0), -d(1924,4,27,7,0,0), -d(1924,9,28,6,0,0), -d(1925,4,26,7,0,0), -d(1925,9,27,6,0,0), -d(1926,4,25,7,0,0), -d(1926,9,26,6,0,0), -d(1927,4,24,7,0,0), -d(1927,9,25,6,0,0), -d(1928,4,29,7,0,0), -d(1928,9,30,6,0,0), -d(1929,4,28,7,0,0), -d(1929,9,29,6,0,0), -d(1930,4,27,7,0,0), -d(1930,9,28,6,0,0), -d(1931,4,26,7,0,0), -d(1931,9,27,6,0,0), -d(1932,4,24,7,0,0), -d(1932,9,25,6,0,0), -d(1933,4,30,7,0,0), -d(1933,9,24,6,0,0), -d(1934,4,29,7,0,0), -d(1934,9,30,6,0,0), -d(1935,4,28,7,0,0), -d(1935,9,29,6,0,0), -d(1936,4,26,7,0,0), -d(1936,9,27,6,0,0), -d(1937,4,25,7,0,0), -d(1937,9,26,6,0,0), -d(1938,4,24,7,0,0), -d(1938,9,25,6,0,0), -d(1939,4,30,7,0,0), -d(1939,9,24,6,0,0), -d(1940,4,28,7,0,0), -d(1940,9,29,6,0,0), -d(1941,4,27,7,0,0), -d(1941,9,28,6,0,0), -d(1942,2,9,7,0,0), -d(1945,8,14,23,0,0), -d(1945,9,30,6,0,0), -d(1946,4,28,7,0,0), -d(1946,9,29,6,0,0), -d(1947,4,27,7,0,0), -d(1947,9,28,6,0,0), -d(1948,4,25,7,0,0), -d(1948,9,26,6,0,0), -d(1949,4,24,7,0,0), -d(1949,9,25,6,0,0), -d(1950,4,30,7,0,0), -d(1950,9,24,6,0,0), -d(1951,4,29,7,0,0), -d(1951,9,30,6,0,0), -d(1952,4,27,7,0,0), -d(1952,9,28,6,0,0), -d(1953,4,26,7,0,0), -d(1953,9,27,6,0,0), -d(1954,4,25,7,0,0), -d(1954,9,26,6,0,0), -d(1955,4,24,7,0,0), -d(1955,10,30,6,0,0), -d(1956,4,29,7,0,0), -d(1956,10,28,6,0,0), -d(1957,4,28,7,0,0), -d(1957,10,27,6,0,0), -d(1958,4,27,7,0,0), -d(1958,10,26,6,0,0), -d(1959,4,26,7,0,0), -d(1959,10,25,6,0,0), -d(1960,4,24,7,0,0), -d(1960,10,30,6,0,0), -d(1961,4,30,7,0,0), -d(1961,10,29,6,0,0), -d(1962,4,29,7,0,0), -d(1962,10,28,6,0,0), -d(1963,4,28,7,0,0), -d(1963,10,27,6,0,0), -d(1964,4,26,7,0,0), -d(1964,10,25,6,0,0), -d(1965,4,25,7,0,0), -d(1965,10,31,6,0,0), -d(1966,4,24,7,0,0), -d(1966,10,30,6,0,0), -d(1967,4,30,7,0,0), -d(1967,10,29,6,0,0), -d(1968,4,28,7,0,0), -d(1968,10,27,6,0,0), -d(1969,4,27,7,0,0), -d(1969,10,26,6,0,0), -d(1970,4,26,7,0,0), -d(1970,10,25,6,0,0), -d(1971,4,25,7,0,0), -d(1971,10,31,6,0,0), -d(1972,4,30,7,0,0), -d(1972,10,29,6,0,0), -d(1973,4,29,7,0,0), -d(1973,10,28,6,0,0), -d(1974,1,6,7,0,0), -d(1974,10,27,6,0,0), -d(1975,2,23,7,0,0), -d(1975,10,26,6,0,0), -d(1976,4,25,7,0,0), -d(1976,10,31,6,0,0), -d(1977,4,24,7,0,0), -d(1977,10,30,6,0,0), -d(1978,4,30,7,0,0), -d(1978,10,29,6,0,0), -d(1979,4,29,7,0,0), -d(1979,10,28,6,0,0), -d(1980,4,27,7,0,0), -d(1980,10,26,6,0,0), -d(1981,4,26,7,0,0), -d(1981,10,25,6,0,0), -d(1982,4,25,7,0,0), -d(1982,10,31,6,0,0), -d(1983,4,24,7,0,0), -d(1983,10,30,6,0,0), -d(1984,4,29,7,0,0), -d(1984,10,28,6,0,0), -d(1985,4,28,7,0,0), -d(1985,10,27,6,0,0), -d(1986,4,27,7,0,0), -d(1986,10,26,6,0,0), -d(1987,4,5,7,0,0), -d(1987,10,25,6,0,0), -d(1988,4,3,7,0,0), -d(1988,10,30,6,0,0), -d(1989,4,2,7,0,0), -d(1989,10,29,6,0,0), -d(1990,4,1,7,0,0), -d(1990,10,28,6,0,0), -d(1991,4,7,7,0,0), -d(1991,10,27,6,0,0), -d(1992,4,5,7,0,0), -d(1992,10,25,6,0,0), -d(1993,4,4,7,0,0), -d(1993,10,31,6,0,0), -d(1994,4,3,7,0,0), -d(1994,10,30,6,0,0), -d(1995,4,2,7,0,0), -d(1995,10,29,6,0,0), -d(1996,4,7,7,0,0), -d(1996,10,27,6,0,0), -d(1997,4,6,7,0,0), -d(1997,10,26,6,0,0), -d(1998,4,5,7,0,0), -d(1998,10,25,6,0,0), -d(1999,4,4,7,0,0), -d(1999,10,31,6,0,0), -d(2000,4,2,7,0,0), -d(2000,10,29,6,0,0), -d(2001,4,1,7,0,0), -d(2001,10,28,6,0,0), -d(2002,4,7,7,0,0), -d(2002,10,27,6,0,0), -d(2003,4,6,7,0,0), -d(2003,10,26,6,0,0), -d(2004,4,4,7,0,0), -d(2004,10,31,6,0,0), -d(2005,4,3,7,0,0), -d(2005,10,30,6,0,0), -d(2006,4,2,7,0,0), -d(2006,10,29,6,0,0), -d(2007,3,11,7,0,0), -d(2007,11,4,6,0,0), -d(2008,3,9,7,0,0), -d(2008,11,2,6,0,0), -d(2009,3,8,7,0,0), -d(2009,11,1,6,0,0), -d(2010,3,14,7,0,0), -d(2010,11,7,6,0,0), -d(2011,3,13,7,0,0), -d(2011,11,6,6,0,0), -d(2012,3,11,7,0,0), -d(2012,11,4,6,0,0), -d(2013,3,10,7,0,0), -d(2013,11,3,6,0,0), -d(2014,3,9,7,0,0), -d(2014,11,2,6,0,0), -d(2015,3,8,7,0,0), -d(2015,11,1,6,0,0), -d(2016,3,13,7,0,0), -d(2016,11,6,6,0,0), -d(2017,3,12,7,0,0), -d(2017,11,5,6,0,0), -d(2018,3,11,7,0,0), -d(2018,11,4,6,0,0), -d(2019,3,10,7,0,0), -d(2019,11,3,6,0,0), -d(2020,3,8,7,0,0), -d(2020,11,1,6,0,0), -d(2021,3,14,7,0,0), -d(2021,11,7,6,0,0), -d(2022,3,13,7,0,0), -d(2022,11,6,6,0,0), -d(2023,3,12,7,0,0), -d(2023,11,5,6,0,0), -d(2024,3,10,7,0,0), -d(2024,11,3,6,0,0), -d(2025,3,9,7,0,0), -d(2025,11,2,6,0,0), -d(2026,3,8,7,0,0), -d(2026,11,1,6,0,0), -d(2027,3,14,7,0,0), -d(2027,11,7,6,0,0), -d(2028,3,12,7,0,0), -d(2028,11,5,6,0,0), -d(2029,3,11,7,0,0), -d(2029,11,4,6,0,0), -d(2030,3,10,7,0,0), -d(2030,11,3,6,0,0), -d(2031,3,9,7,0,0), -d(2031,11,2,6,0,0), -d(2032,3,14,7,0,0), -d(2032,11,7,6,0,0), -d(2033,3,13,7,0,0), -d(2033,11,6,6,0,0), -d(2034,3,12,7,0,0), -d(2034,11,5,6,0,0), -d(2035,3,11,7,0,0), -d(2035,11,4,6,0,0), -d(2036,3,9,7,0,0), -d(2036,11,2,6,0,0), -d(2037,3,8,7,0,0), -d(2037,11,1,6,0,0), - ] - - _transition_info = [ -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EWT'), -i(-14400,3600,'EPT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), -i(-14400,3600,'EDT'), -i(-18000,0,'EST'), - ] - -posixrules = posixrules() - diff --git a/otp/src/ai/AIBaseGlobal.py b/otp/src/ai/AIBaseGlobal.py index 3fee7309..937f95f2 100644 --- a/otp/src/ai/AIBaseGlobal.py +++ b/otp/src/ai/AIBaseGlobal.py @@ -1,7 +1,7 @@ """instantiate global ShowBase object""" -from AIBase import * +from .AIBase import * # guard against AI files being imported on the client assert game.process != 'client' diff --git a/otp/src/ai/AIDistrict.py b/otp/src/ai/AIDistrict.py index 021fe2df..660def97 100644 --- a/otp/src/ai/AIDistrict.py +++ b/otp/src/ai/AIDistrict.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from otp.otpbase import OTPGlobals -from AIMsgTypes import * +from .AIMsgTypes import * from direct.showbase.PythonUtil import Functor, randUint32 from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM @@ -26,12 +26,12 @@ def __init__( districtId, districtName, districtType, serverId, minChannel, maxChannel, dcSuffix = 'AI'): assert self.notify.debugStateCall(self) - + # Save the district Id (needed for calculations in AIRepository code) self.districtId = districtId self.districtName = districtName self.districtType = districtType - + AIRepository.__init__( self, mdip, mdport, esip, esport, dcFileNames, serverId, @@ -100,6 +100,7 @@ def getGameDoId(self): def incrementPopulation(self): self._population += 1 + def decrementPopulation(self): if __dev__: assert self._population > 0 @@ -157,7 +158,7 @@ def enterPlayGame(self): from otp.distributed import DistributedTestObjectAI self.testObject = DistributedTestObjectAI.DistributedTestObjectAI(self) self.testObject.generateOtpObject(self.getGameDoId(), 3) - + taskMgr.doMethodLater(300, self.printPopulationToLog, self.uniqueName("printPopulationTask")) @@ -275,14 +276,14 @@ def readerPollUntilEmpty(self, task): try: return AIRepository.readerPollUntilEmpty(self, task) - except Exception, e: + except Exception as e: appendStr(e, '\nSENDER ID: %s' % self.getAvatarIdFromSender()) raise def handleReaderOverflow(self): # may as well delete the shard at this point self.deleteDistrict(self.districtId) - raise StandardError, ("incoming-datagram buffer overflowed, " + raise Exception("incoming-datagram buffer overflowed, " "aborting AI process") ##### General Purpose functions ##### @@ -386,11 +387,11 @@ def registerShardDownMessage(self, stateserverid): datagram.addChannel(self.ourChannel) # schedule for execution on socket close self.addPostSocketClose(datagram) - + def sendSetZone(self, distobj, zoneId): datagram = PyDatagram() datagram.addServerHeader( - distobj.doId, self.ourChannel, STATESERVER_OBJECT_SET_ZONE) + distobj.doId, self.ourChannel, STATESERVER_OBJECT_SET_ZONE) # Add the zone parent id # HACK: parentId = oldParentId = self.districtId @@ -427,8 +428,8 @@ def makeFriends(self, avatarAId, avatarBId, flags, context): """ datagram = PyDatagram() datagram.addServerHeader( - DBSERVER_ID, self.ourChannel, DBSERVER_MAKE_FRIENDS) - + DBSERVER_ID, self.ourChannel, DBSERVER_MAKE_FRIENDS) + # Indicate the two avatars who are making friends datagram.addUint32(avatarAId) datagram.addUint32(avatarBId) @@ -450,8 +451,8 @@ def requestSecret(self, requesterId): """ datagram = PyDatagram() datagram.addServerHeader( - DBSERVER_ID,self.ourChannel,DBSERVER_REQUEST_SECRET) - + DBSERVER_ID,self.ourChannel,DBSERVER_REQUEST_SECRET) + # Indicate the number we want to associate with the new secret. datagram.addUint32(requesterId) # Send it off! diff --git a/otp/src/ai/AIMsgTypes.py b/otp/src/ai/AIMsgTypes.py index 18de7d6d..f8f467cd 100644 --- a/otp/src/ai/AIMsgTypes.py +++ b/otp/src/ai/AIMsgTypes.py @@ -108,11 +108,13 @@ AIMsgId2Names = invertDictLossless(AIMsgName2Id) # put msg names in module scope, assigned to msg value -for name, value in AIMsgName2Id.items(): - exec '%s = %s' % (name, value) +for name, value in list(AIMsgName2Id.items()): + exec('%s = %s' % (name, value)) del name, value # The ID number of the database server. The above direct-to-dbserver # transactions are sent to this ID. DBSERVER_ID = 4003 +# District +STATESERVER_UPDATE_SHARD = 2091 \ No newline at end of file diff --git a/otp/src/ai/AIRepository.py b/otp/src/ai/AIRepository.py index 4bbce7e5..eebbbd75 100644 --- a/otp/src/ai/AIRepository.py +++ b/otp/src/ai/AIRepository.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from otp.otpbase import OTPGlobals -from AIMsgTypes import * +from .AIMsgTypes import * from direct.showbase.PythonUtil import Functor from direct.directnotify.DirectNotifyGlobal import directNotify from direct.fsm import ClassicFSM @@ -29,14 +29,14 @@ class AIRepository(ConnectionRepository): """ The new AIRepository base class - + It does not have: - district or shard code (see AIDistrict.py) - friends or secret friends code - a collision traverser - + of course, a derived class may add those. - + It does have: + object creation code + channel listening code @@ -52,17 +52,17 @@ def __init__( minChannel, maxChannel, dcSuffix = 'AI'): assert self.notify.debugStateCall(self) self._channels={} - self.AIRunningNetYield = simbase.config.GetBool('ai-running-net-yield', 0) - + self.AIRunningNetYield = simbase.config.GetBool('ai-running-net-yield', 0) + self._msgBundleNames = [] # doId->requestDeleted object self._requestDeletedDOs = {} - + ConnectionRepository.__init__( self, ConnectionRepository.CM_NATIVE, simbase.config) self.dcSuffix = dcSuffix - + simbase.setupCpuAffinities(minChannel) self.distributedObjectRequests=set() @@ -90,7 +90,7 @@ def __init__( # UDP socket for sending events to the event server. self.udpSock = None - + if not self.esurl.empty(): udpEventServer = SocketAddress() if not udpEventServer.setHost(self.esurl.getServer(), self.esurl.getPort()): @@ -154,23 +154,18 @@ def __init__( # in. However, in the normal AI repository, we should do # these things. self.doLiveUpdates = 1 - + #for generating unqiue names for non-dos, manly used for tasks self.keyCounter = 0 - - self.MaxEpockSpeed = self.config.GetFloat('ai-net-yield-epoch', 1.0/30.0) - + + self.MaxEpockSpeed = self.config.GetFloat('ai-net-yield-epoch', 1.0/30.0) + if self.AIRunningNetYield : taskMgr.doYield =self.taskManagerDoYieldNetwork - # use this for time yields without sleeps + # use this for time yields without sleeps #taskMgr.doYield = self.taskManagerDoYield - # Used for moderation of report-a-player feature - self.centralLogger = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_CENTRAL_LOGGER, - "CentralLogger") - self.garbageLeakLogger = GarbageLeakServerEventAggregatorAI(self) taskMgr.add(self._checkBundledMsgs, 'checkBundledMsgs', priority=-100) @@ -252,12 +247,12 @@ def _handleLeak(self, container, containerName): fastRepr(container, maxLen=1, strFactor=50))) def getPlayerAvatars(self): - return [i for i in self.doId2do.values() + return [i for i in list(self.doId2do.values()) if isinstance(i, DistributedPlayerAI)] def uniqueName(self, desc): return desc+"-"+str(self.serverId) - + def trueUniqueName(self, desc): self.keyCounter += 1 return desc+"-"+str(self.serverId)+"-"+str(self.keyCounter) @@ -329,7 +324,7 @@ def writeServerEvent(self, eventType, who, description, serverId=None): break breakCount += 1 - + def writeServerStatus(self, who, avatar_count, object_count): """ Sends the Status Packet to the event server via UDP for @@ -463,19 +458,19 @@ def handlePlayGame(self, msgType, di): def handleAvatarUsage(self, di): """ - Should only be handled by the UD process containing the AvatarManagerUD + Should only be handled by the UD process containing the AvatarManagerUD """ pass - + def handleAccountUsage(self, di): """ - Should only be handled by the UD process containing the AvatarManagerUD + Should only be handled by the UD process containing the AvatarManagerUD """ pass - + def handleObjectDeleteDisk(self, di): pass - + def handleObjectQueryField(self, di): assert self.notify.debugStateCall(self) @@ -496,7 +491,7 @@ def handleObjectQueryField(self, di): value = packer.unpackObject() messenger.send( "doFieldResponse-%s"%(context,), [context, value]) - + def handleObjectQueryFields(self, di): assert self.notify.debugStateCall(self) @@ -541,15 +536,15 @@ def handleServerPing(self, di): datagram = PyDatagram() sender=self.getMsgSender() datagram.addServerHeader( - sender, self.ourChannel, SERVER_PING) + sender, self.ourChannel, SERVER_PING) # A context that can be used to index the response if needed datagram.addUint32(sec) datagram.addUint32(usec) datagram.addString(url) datagram.addUint32(channel) self.send(datagram) - - + + def handleMessageType(self, msgType, di): if msgType == CLIENT_GET_STATE_RESP: @@ -605,11 +600,11 @@ def handleMessageType(self, msgType, di): if __dev__: import pdb pdb.set_trace() - + def exitPlayGame(self): self.handler = None self.stopReaderPollTask() - + self.deleteDistributedObjects() cleanupAsyncRequests() @@ -624,12 +619,12 @@ def exitPlayGame(self): # These tasks are ok continue else: - print taskMgr + print(taskMgr) self.notify.error("You can't leave otp until you clean up your tasks.") # Make sure there are no event hooks still hanging. if not messenger.isEmpty(): - print messenger + print(messenger) self.notify.error("Messenger should not have any events in it.") ##### NoConnection ##### @@ -697,8 +692,8 @@ def postGenerate(self, context, distObj): self.distributedObjectRequests.discard(doId) distObj.setLocation(parentId, zoneId) self.writeServerEvent('distObjEnter', doId, '') - - def handleDistObjEnter(self, di): + + def handleDistObjEnter(self, di): assert self.notify.debugStateCall(self) context = di.getUint32() parentId = di.getUint32() @@ -708,7 +703,7 @@ def handleDistObjEnter(self, di): # Look up the dclass dclass = self.dclassesByNumber[classId] # Is it in our dictionary? - if self.doId2do.has_key(doId): + if doId in self.doId2do: self.notify.warning("Object Entered " + str(doId) + " re-entered without exiting") # Create a new distributed object @@ -727,7 +722,7 @@ def handleDistObjEnter(self, di): ## self.notify.error("Avatar %s re-entered without exiting" % doId) - def handleDistObjEnterZone(self, di): + def handleDistObjEnterZone(self, di): assert self.notify.debugStateCall(self) parentId = di.getUint32() zoneId = di.getUint32() @@ -736,7 +731,7 @@ def handleDistObjEnterZone(self, di): # Look up the dclass dclass = self.dclassesByNumber[classId] # Is it in our dictionary? - if self.doId2do.has_key(doId): + if doId in self.doId2do: self.notify.warning("Object Entered " + str(doId) + " re-entered without exiting") # Create a new distributed object @@ -817,7 +812,7 @@ def _announceDistObjExit(self, doId): pass def _generateFromDatagram(self, parentId, zoneId, dclass, doId, di, addToTables=True): - if (self.doId2do.has_key(doId)): + if (doId in self.doId2do): # added to prevent objects already generated from being generated again (was # happening with some traded inventory objects, quests specfically) return self.doId2do[doId] @@ -825,7 +820,7 @@ def _generateFromDatagram(self, parentId, zoneId, dclass, doId, di, addToTables= classDef = dclass.getClassDef() try: distObj = classDef(self) - except TypeError, e: + except TypeError as e: self.notify.error('%s (class %s, parentId %d, zoneId %d, doId %d)' % \ (e, dclass.getName(), parentId, zoneId, doId)) distObj.dclass = dclass @@ -906,7 +901,7 @@ def sendUpdate(self, do, fieldName, args): #print args dg = do.dclass.aiFormatUpdate( fieldName, do.doId, do.doId, self.ourChannel, args) - self.sendDatagram(dg) + self.sendDatagram(dg) def sendUpdateToDoId(self, dclassName, fieldName, doId, args, channelId=None): @@ -915,7 +910,7 @@ def sendUpdateToDoId(self, dclassName, fieldName, doId, args, airecv, ownrecv, broadcast, etc. If you don't include a channelId or if channelId == doId, then the normal broadcast options will be used. - + See Also: def queryObjectField """ dclass=self.dclassesByName.get(dclassName+self.dcSuffix) @@ -934,7 +929,7 @@ def createDgUpdateToDoId(self, dclassName, fieldName, doId, args, airecv, ownrecv, broadcast, etc. If you don't include a channelId or if channelId == doId, then the normal broadcast options will be used. - + This is just like sendUpdateToDoId, but just returns the datagram instead of immediately sending it. """ @@ -959,7 +954,7 @@ def sendUpdateToGlobalDoId(self, dclassName, fieldName, doId, args): dg = dclass.aiFormatUpdate( fieldName, doId, doId, self.ourChannel, args) self.send(dg) - + def sendUpdateToChannel(self, do, channelId, fieldName, args): dg = do.dclass.aiFormatUpdate( fieldName, do.doId, channelId, self.ourChannel, args) @@ -992,7 +987,7 @@ def _checkBundledMsgs(self, task=None): self.abandonMessageBundles() self.notify.error('message bundling leak, see warnings above (most recent first)') return task.cont - + def registerForChannel(self, channelNumber): if self._channels.get(channelNumber): # We are already registered for this channel. @@ -1004,19 +999,19 @@ def registerForChannel(self, channelNumber): datagram.addInt8(1) datagram.addChannel(CONTROL_MESSAGE) datagram.addUint16(CONTROL_SET_CHANNEL) - + datagram.addChannel(channelNumber) self.send(datagram) def addPostSocketClose(self, themessage): # Time to send a register for channel message to the msgDirector datagram = PyDatagram() -# datagram.addServerControlHeader(CONTROL_ADD_POST_REMOVE) +# datagram.addServerControlHeader(CONTROL_ADD_POST_REMOVE) datagram.addInt8(1) datagram.addChannel(CONTROL_MESSAGE) datagram.addUint16(CONTROL_ADD_POST_REMOVE) - datagram.addString(themessage.getMessage()) + datagram.addBlob(themessage.getMessage()) self.send(datagram) def addPostSocketCloseUD(self, dclassName, fieldName, doId, args): @@ -1033,7 +1028,7 @@ def unregisterForChannel(self, channelNumber): del self._channels[channelNumber] # Time to send a unregister for channel message to the msgDirector datagram = PyDatagram() -# datagram.addServerControlHeader(CONTROL_REMOVE_CHANNEL) +# datagram.addServerControlHeader(CONTROL_REMOVE_CHANNEL) datagram.addInt8(1) datagram.addChannel(CONTROL_MESSAGE) datagram.addUint16(CONTROL_REMOVE_CHANNEL) @@ -1042,20 +1037,20 @@ def unregisterForChannel(self, channelNumber): self.send(datagram) #---------------------------------- - + def addAvatarToChannels(self, avatarId, listOfChannels): """ avatarId is a 32 bit doId """ assert self.notify.debugCall() - self.addConnectionToChannels((1L<<32)+avatarId, listOfChannels) + self.addConnectionToChannels((1<<32)+avatarId, listOfChannels) def removeAvatarFromChannels(self, avatarId, listOfChannels): """ avatarId is a 32 bit doId """ assert self.notify.debugCall() - self.removeConnectionToChannels((1L<<32)+avatarId, listOfChannels) + self.removeConnectionToChannels((1<<32)+avatarId, listOfChannels) def addConnectionToChannels(self, targetConnection, listOfChannels): """ @@ -1064,7 +1059,7 @@ def addConnectionToChannels(self, targetConnection, listOfChannels): assert self.notify.debugCall() dg = PyDatagram() dg.addServerHeader( - targetConnection, self.serverId, CLIENT_AGENT_OPEN_CHANNEL) + targetConnection, self.serverId, CLIENT_AGENT_OPEN_CHANNEL) for i in listOfChannels: dg.addUint64(i) self.send(dg) @@ -1076,7 +1071,7 @@ def removeConnectionToChannels(self, targetConnection, listOfChannels): assert self.notify.debugCall() dg = PyDatagram() dg.addServerHeader( - targetConnection, self.serverId, CLIENT_AGENT_CLOSE_CHANNEL) + targetConnection, self.serverId, CLIENT_AGENT_CLOSE_CHANNEL) for i in listOfChannels: dg.addUint64(i) self.send(dg) @@ -1099,7 +1094,7 @@ def addInterestToConnection(self, targetConnection, interestId, dg.addUint32(contextId) dg.addUint32(parentDoId) dg.addUint32(contextId) - if isinstance(zoneIdList, types.ListType): + if isinstance(zoneIdList, list): # sort and remove repeated entries zIdSet = set(zoneIdList) for zoneId in zIdSet: @@ -1123,7 +1118,7 @@ def removeInterestFromConnection(self, targetConnection, interestId, # the AI and not the client dg.addUint16((1<<15)+interestId) dg.addUint32(contextId) - self.send(dg) + self.send(dg) def setAllowClientSend(self, avatarId, dObject, fieldNameList = []): @@ -1143,7 +1138,7 @@ def setAllowClientSend(self, avatarId, # Set the high bit to indicate that the interest is being governed by # the AI and not the client dg.addUint32(dObject.doId) - assert isinstance(fieldNameList, types.ListType) + assert isinstance(fieldNameList, list) dclass = dObject.dclass # sort and remove repeated entries as we discover the field @@ -1153,23 +1148,23 @@ def setAllowClientSend(self, avatarId, # insert the fieldIds into the datagram for fieldId in sorted(fieldIdSet): - dg.addUint16(fieldId) + dg.addUint16(fieldId) self.send(dg) def clearAllowClientSend(self, avatarId, dObject): self.setAllowClientSend(avatarId, dObject) - + # ---------------------------------- - + def setConnectionName(self, name): self.connectionName = name # Time to send a register for channel message to the msgDirector datagram = PyDatagram() - # datagram.addServerControlHeader(CONTROL_SET_CON_NAME) + # datagram.addServerControlHeader(CONTROL_SET_CON_NAME) datagram.addInt8(1) datagram.addChannel(CONTROL_MESSAGE) datagram.addUint16(CONTROL_SET_CON_NAME) - + datagram.addString(name) self.send(datagram) @@ -1177,11 +1172,11 @@ def setConnectionURL(self, url): self.connectionURL = url # Time to send a register for channel message to the msgDirector datagram = PyDatagram() - # datagram.addServerControlHeader(CONTROL_SET_CON_NAME) + # datagram.addServerControlHeader(CONTROL_SET_CON_NAME) datagram.addInt8(1) datagram.addChannel(CONTROL_MESSAGE) datagram.addUint16(CONTROL_SET_CON_URL) - + datagram.addString(url) self.send(datagram) @@ -1198,7 +1193,7 @@ def deleteObjects(self): def allocateChannel(self): channel=self.channelAllocator.allocate() if channel==-1: - raise RuntimeError, "channelAllocator.allocate() is out of channels" + raise RuntimeError("channelAllocator.allocate() is out of channels") if self.channelAllocator.fractionUsed()>0.75: # There is some debate about how bad it is to run out of # channels. Being ignorant about what exactly will happen @@ -1214,7 +1209,7 @@ def allocateChannel(self): # of freed ids and sleep or flag an error as apropriate. See him # for details (esp. if you want to write a cross-platform version # of said feature). - raise RuntimeError, "Dangerously low on channels." + raise RuntimeError("Dangerously low on channels.") # Sanity check assert (channel >= self.minChannel) and (channel <= self.maxChannel) @@ -1224,12 +1219,12 @@ def allocateChannel(self): self.debug_dictionary = {} __builtins__["debug_dictionary"] = self.debug_dictionary - for id in self.debug_dictionary.keys(): - if not self.doId2do.has_key(id): - print "--------------------- Not In DOID table" - print id + for id in list(self.debug_dictionary.keys()): + if id not in self.doId2do: + print("--------------------- Not In DOID table") + print(id) #traceback.print_list(self.debug_dictionary[id]) - print self.debug_dictionary[id] + print(self.debug_dictionary[id]) del self.debug_dictionary[id] # never report it again .. self.debug_dictionary[channel] = traceback.extract_stack(None,7) @@ -1255,7 +1250,7 @@ def getMaxDynamicZone(self): def allocateZone(self): zoneId=self.zoneAllocator.allocate() if zoneId==-1: - raise RuntimeError, "zoneAllocator.allocate() is out of zoneIds" + raise RuntimeError("zoneAllocator.allocate() is out of zoneIds") # Sanity check assert (zoneId >= self.minZone) and (zoneId <= self.maxZone) return zoneId @@ -1301,7 +1296,7 @@ def sendClearOwnerDoId(self, doId): doId, self.ourChannel, STATESERVER_OBJECT_SET_OWNER_RECV) datagram.addChannel(0) self.send(datagram) - + def sendSetZone(self, distobj, zoneId): self.notify.error("non-district types should not call sendSetZone") @@ -1321,7 +1316,7 @@ def getRequestDeletedDOs(self): # returns list of (obj, age of delete request), sorted by descending age response = [] now = globalClock.getRealTime() - for obj, requestTime in self._requestDeletedDOs.values(): + for obj, requestTime in list(self._requestDeletedDOs.values()): # calculate how long it has been since delete was requested age = now - requestTime index = 0 @@ -1337,7 +1332,7 @@ def requestDelete(self, distobj): # Create a message datagram = PyDatagram() datagram.addServerHeader( - distobj.doId, self.ourChannel, STATESERVER_OBJECT_DELETE_RAM) + distobj.doId, self.ourChannel, STATESERVER_OBJECT_DELETE_RAM) # The Id of the object in question datagram.addUint32(distobj.doId) self.send(datagram) @@ -1347,7 +1342,7 @@ def requestDeleteDoId(self, doId): # Create a message datagram = PyDatagram() datagram.addServerHeader( - doId, self.ourChannel, STATESERVER_OBJECT_DELETE_RAM) + doId, self.ourChannel, STATESERVER_OBJECT_DELETE_RAM) # The Id of the object in question datagram.addUint32(doId) self.send(datagram) @@ -1374,7 +1369,7 @@ def _handleDatabaseGenerateResponse(self, di): (context, doId)) messenger.send( self.getDatabaseGenerateResponseEvent(context), [doId]) - + def getDatabaseIdForClassName(self, className): assert 0 # You probably want to override this to return something better. @@ -1408,14 +1403,14 @@ def requestDatabaseGenerate( # (classId, context)) if ownerChannel == 0 and ownerAvId is not None: ownerChannel = (1<<32) + ownerAvId - if self.dclassesByNumber.has_key(classId): + if classId in self.dclassesByNumber: dclass = self.dclassesByNumber[classId] else: - if self.dclassesByName.has_key(classId): + if classId in self.dclassesByName: dclass = self.dclassesByName[classId] - elif self.dclassesByName.has_key(classId+self.dcSuffix): + elif classId+self.dcSuffix in self.dclassesByName: dclass = self.dclassesByName[classId+self.dcSuffix] - elif self.dclassesByName.has_key(classId+'AI'): + elif classId+'AI' in self.dclassesByName: dclass = self.dclassesByName[classId+'AI'] else: self.notify.warning("dclass not found %s"%(classId,)) @@ -1435,7 +1430,7 @@ def requestDatabaseGenerate( self.send(dg) else: packer = DCPacker() - packer.rawPackUint8(1) + packer.rawPackUint8(1) packer.rawPackUint64(databaseId) packer.rawPackUint64(self.ourChannel) packer.rawPackUint16( @@ -1463,7 +1458,7 @@ def requestDatabaseGenerate( packer.packDefaultValue() else: if not field.packArgs(packer, value): - raise StandardError + raise Exception packer.endPack() else: value = values.get(field.getName(), None) @@ -1487,18 +1482,18 @@ def requestDatabaseGenerate( packer.endPack() if packer.hadError(): - raise StandardError + raise Exception dg = Datagram(packer.getString()) self.send(dg) - + def lostConnection(self): ConnectionRepository.lostConnection(self) sys.exit() def handleDatagram(self, di): if self.notify.getDebug(): - print "AIRepository received datagram:" + print("AIRepository received datagram:") di.getDatagram().dumpHex(ostream) channel=self.getMsgChannel() @@ -1526,7 +1521,7 @@ def sendAnotherGenerate(self, distObj, toChannel): distObj, distObj.doId, distObj.parentId, distObj.zoneId, toChannel, self.ourChannel, []) self.send(dg) - + def generateWithRequired(self, distObj, parentId, zoneId, optionalFields=[]): assert self.notify.debugStateCall(self) # Assign it an id @@ -1552,7 +1547,7 @@ def generateWithRequiredAndId( self.addDOToTables(distObj, location = (parentId,zoneId)) # Send a generate message distObj.sendGenerateWithRequired(self, parentId, zoneId, optionalFields) - + def queryObjectAll(self, doId, context=0): """ Get a one-time snapshot look at the object. @@ -1561,7 +1556,7 @@ def queryObjectAll(self, doId, context=0): # Create a message datagram = PyDatagram() datagram.addServerHeader( - doId, self.ourChannel, STATESERVER_QUERY_OBJECT_ALL) + doId, self.ourChannel, STATESERVER_QUERY_OBJECT_ALL) # A context that can be used to index the response if needed datagram.addUint32(context) self.send(datagram) @@ -1573,14 +1568,14 @@ def queryObjectZoneIds(self, stateServerId, obj2ZoneDict): # { objId : [zoneId, zoneId, ...], # objId : [zoneId, zoneId, ...], # } - assert self.notify.debugStateCall(self) + assert self.notify.debugStateCall(self) # Create a message datagram = PyDatagram() datagram.addServerHeader( stateServerId, self.ourChannel, STATESERVER_QUERY_ZONE_OBJECT_ALL) - numObjs = len(obj2ZoneDict.keys()) + numObjs = len(list(obj2ZoneDict.keys())) datagram.addUint16(numObjs) - for objId, zoneIds in obj2ZoneDict.values(): + for objId, zoneIds in list(obj2ZoneDict.values()): datagram.addUint32(objId) datagram.addUint16(len(zoneIds)) for zoneId in zoneIds: @@ -1593,7 +1588,7 @@ def queryObjectZoneIds(self, stateServerId, obj2ZoneDict): self.flush() def queryObjectChildrenLocal(self, parentId, context=0): - assert self.notify.debugStateCall(self) + assert self.notify.debugStateCall(self) # Create a message datagram = PyDatagram() datagram.addServerHeader( @@ -1627,7 +1622,7 @@ def queryObjectFieldId(self, doId, fieldId, context=0): # Create a message datagram = PyDatagram() datagram.addServerHeader( - doId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELD) + doId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELD) datagram.addUint32(doId) datagram.addUint16(fieldId) # A context that can be used to index the response if needed @@ -1646,7 +1641,7 @@ def queryObjectFieldIds(self, doId, fieldIds, context=0): # Create a message datagram = PyDatagram() datagram.addServerHeader( - doId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELDS) + doId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELDS) datagram.addUint32(doId) datagram.addUint32(context) for x in fieldIds: @@ -1665,7 +1660,7 @@ def queryObjectStringFieldIds(self, dbId, objString, fieldIds, context=0): # Create a message dg = PyDatagram() dg.addServerHeader( - dbId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELDS_STRING) + dbId, self.ourChannel, STATESERVER_OBJECT_QUERY_FIELDS_STRING) dg.addString(objString) dg.addUint32(context) for x in fieldIds: @@ -1753,9 +1748,9 @@ def queryObjectFields(self, dclassName, fieldNames, doId, context=0): self.queryObjectFieldIds(doId, fieldIds, context) else: assert self.notify.error( - "queryObjectFields invalid field in %s, %s"%(doId, `fieldNames`)) - - + "queryObjectFields invalid field in %s, %s"%(doId, repr(fieldNames))) + + def requestDistributedObject(self, doId): """ Ask for the object to be added to the private @@ -1764,7 +1759,7 @@ def requestDistributedObject(self, doId): Normally a query object all does not actually enter the object returned into the doId2do table. This function will change a query request to a distributed object that is part of the normal set of - objects on this server. + objects on this server. """ assert self.notify.debugCall() distObj = self.doId2do.get(doId) @@ -1778,7 +1773,7 @@ def requestDistributedObject(self, doId): self.distributedObjectRequests.add(doId) context=self.allocateContext() self.acceptOnce( - "doRequestResponse-%s"%(context,), + "doRequestResponse-%s"%(context,), self.postGenerate, []) self.registerForChannel(doId) self.queryObjectAll(doId, context) @@ -1788,7 +1783,7 @@ def setAIReceiver(self, objectId, aiChannel=None): # Create a message datagram = PyDatagram() datagram.addServerHeader( - self.ourChannel, self.ourChannel, STATESERVER_ADD_AI_RECV) + self.ourChannel, self.ourChannel, STATESERVER_ADD_AI_RECV) # The Id of the object in question datagram.addUint32(objectId) if aiChannel is None: @@ -1859,7 +1854,7 @@ def getAvatarIdFromSender(self): """ only works on the dc updates from the client agent """ - return self.getMsgSender() & 0xffffffffL + return self.getMsgSender() & 0xffffffff def getSenderReturnChannel(self): return self.getMsgSender() @@ -1871,43 +1866,43 @@ def taskManagerDoYieldNetwork(self , frameStartTime, nextScheuledTaksTime): minFinTime = frameStartTime + self.MaxEpockSpeed if nextScheuledTaksTime > 0 and nextScheuledTaksTime < minFinTime: minFinTime = nextScheuledTaksTime - - self.networkBasedReaderAndYielder(self.handleDatagram,globalClock,minFinTime) + + self.networkBasedReaderAndYielder(self.handleDatagram,globalClock,minFinTime) if not self.isConnected(): self.stopReaderPollTask() self.lostConnection() - - ############################################################### + + ############################################################### # Optimized version of old behavior.. def readerPollUntilEmpty(self, task): - self.checkDatagramAi(self.handleDatagram) + self.checkDatagramAi(self.handleDatagram) if not self.isConnected(): self.stopReaderPollTask() self.lostConnection() return Task.cont - - ############################################################### + + ############################################################### # This can be used to do time based yielding instead of the sleep task. def taskManagerDoYield(self , frameStartTime, nextScheuledTaksTime): minFinTime = frameStartTime + self.MaxEpockSpeed if nextScheuledTaksTime > 0 and nextScheuledTaksTime < minFinTime: minFinTime = nextScheuledTaksTime - + delta = minFinTime - globalClock.getRealTime() while(delta > 0.002): - time.sleep(delta) + time.sleep(delta) delta = minFinTime - globalClock.getRealTime() - - - ############################################################### + + + ############################################################### # This can be used to do time based yielding instead of the sleep task. def startReaderPollTask(self): if not self.AIRunningNetYield: ConnectionRepository.startReaderPollTask(self) - else: - print '########## startReaderPollTask New ' + else: + print('########## startReaderPollTask New ') self.stopReaderPollTask() self.accept(CConnectionRepository.getOverflowEventName(),self.handleReaderOverflow) diff --git a/otp/src/ai/AIZoneData.py b/otp/src/ai/AIZoneData.py index 1d299657..8d5e4f51 100644 --- a/otp/src/ai/AIZoneData.py +++ b/otp/src/ai/AIZoneData.py @@ -50,7 +50,7 @@ def __str__(self): output += '\n' totalColliders = 0 totalTraversers = 0 - for currCollTrav in self._collTravs.values(): + for currCollTrav in list(self._collTravs.values()): totalTraversers += 1 totalColliders += currCollTrav.getNumColliders() output += 'Num traversers: %s Num total colliders: %s'%(totalTraversers,totalColliders) @@ -128,7 +128,7 @@ def getCollTrav(self, name=None): self._collTravs[name] = CollisionTraverser('cTrav-%s-%s-%s' % (name, self._parentId, self._zoneId)) return self._collTravs[name] def removeCollTrav(self, name): - if (self._collTravs.has_key(name)): + if (name in self._collTravs): del self._collTravs[name] def _getCTravTaskName(self, name=None): @@ -216,7 +216,7 @@ def __init__(self): # table of (parentId, zoneId) -> AIZoneDataObj self._zone2data = {} def destroy(self): - for zone, data in self._zone2data.items(): + for zone, data in list(self._zone2data.items()): data.destroy() del self._zone2data def hasDataForZone(self, parentId, zoneId): diff --git a/otp/src/ai/BanManagerAI.py b/otp/src/ai/BanManagerAI.py index 8dea8f57..cad0a075 100644 --- a/otp/src/ai/BanManagerAI.py +++ b/otp/src/ai/BanManagerAI.py @@ -3,7 +3,7 @@ # Purpose: Module to ban avatars while inside the game and kick # them out of the game ################################################################# -import urllib +import urllib.request, urllib.parse, urllib.error import os from pandac.PandaModules import HTTPClient, Ramfile from direct.directnotify import DirectNotifyGlobal @@ -39,7 +39,7 @@ def ban(self, avatarId, dislid, comment): parameters += "&event_name=%s" % self.EventName commentWithAvatarId = "avId-%s " % avatarId commentWithAvatarId += comment - parameters += "&comments=%s" % urllib.quote(str(commentWithAvatarId)) + parameters += "&comments=%s" % urllib.parse.quote(str(commentWithAvatarId)) # get the base ban url from the environment variable first baseUrlToUse = self.BanUrl diff --git a/otp/src/ai/GarbageLeakServerEventAggregator.py b/otp/src/ai/GarbageLeakServerEventAggregator.py index 4a30759e..fd6945c9 100644 --- a/otp/src/ai/GarbageLeakServerEventAggregator.py +++ b/otp/src/ai/GarbageLeakServerEventAggregator.py @@ -31,7 +31,7 @@ def _stopSending(self): self._doLaterName = None def _sendLeaks(self, task=None): - for desc, curNum in self._curLeakDesc2num.iteritems(): + for desc, curNum in self._curLeakDesc2num.items(): # only send the number of occurrences of each leak that # we haven't already sent self._sentLeakDesc2num.setdefault(desc, 0) diff --git a/otp/src/ai/GarbageLeakServerEventAggregatorAI.py b/otp/src/ai/GarbageLeakServerEventAggregatorAI.py index b00ad33b..9e9a4a1e 100644 --- a/otp/src/ai/GarbageLeakServerEventAggregatorAI.py +++ b/otp/src/ai/GarbageLeakServerEventAggregatorAI.py @@ -50,7 +50,7 @@ def _stopSending(self): def _sendLeaks(self, task=None): # only send the number of occurences of each leak that # we haven't already sent - for desc, curNum in self._curLeakDesc2num.iteritems(): + for desc, curNum in self._curLeakDesc2num.items(): self._sentLeakDesc2num.setdefault(desc, 0) num = curNum - self._sentLeakDesc2num[desc] if num > 0: @@ -79,7 +79,7 @@ def _stopSendingClientLeaks(self): def _sendClientLeaks(self, task=None): # only send the number of occurences of each leak that # we haven't already sent - for desc, curNum in self._curClientDesc2num.iteritems(): + for desc, curNum in self._curClientDesc2num.items(): self._sentClientDesc2num.setdefault(desc, 0) num = curNum - self._sentClientDesc2num[desc] if num > 0: diff --git a/otp/src/ai/MagicWordManager.py b/otp/src/ai/MagicWordManager.py index 32542273..02f314da 100644 --- a/otp/src/ai/MagicWordManager.py +++ b/otp/src/ai/MagicWordManager.py @@ -75,7 +75,7 @@ def getWordIs(self, word): def doMagicWord(self, word, avId, zoneId): wordIs = self.getWordIs(word) - print word + print(word) if wordIs("~oobe"): base.oobe() elif wordIs("~oobeCull"): @@ -180,7 +180,7 @@ def doMagicWord(self, word, avId, zoneId): elif wordIs("~badname"): # ~badname with an argument becomes ~for ... ~badname word = "~for %s ~badname" % (word[9:]) - print "word is %s" % (word) + print("word is %s" % (word)) self.forAnother(word, avId, zoneId) elif wordIs('~avId'): @@ -448,11 +448,11 @@ def doMagicWord(self, word, avId, zoneId): type2count.setdefault(tn, 0) type2count[tn] += 1 count2type = invertDictLossless(type2count) - counts = count2type.keys() + counts = list(count2type.keys()) counts.sort() counts.reverse() for count in counts: - print '%s: %s' % (count, count2type[count]) + print('%s: %s' % (count, count2type[count])) self.setMagicWordResponse('~aiobjecthg complete') elif wordIs('~containers'): @@ -589,11 +589,11 @@ def leakTask(task): self.setMagicWordResponse('logging client distributed object count...') elif wordIs('~taskmgr'): - print taskMgr + print(taskMgr) self.setMagicWordResponse('logging client taskMgr...') elif wordIs('~jobmgr'): - print jobMgr + print(jobMgr) self.setMagicWordResponse('logging client jobMgr...') elif wordIs('~jobtime'): @@ -636,7 +636,7 @@ def leakTask(task): self.setMagicWordResponse(response) elif wordIs('~messenger'): - print messenger + print(messenger) self.setMagicWordResponse('logging client messenger...') elif wordIs('~clientcrash'): @@ -689,7 +689,7 @@ def leakTask(task): ############## ts = time.time() - for i in xrange(1000000): + for i in range(1000000): ### code to be timed ### p.set(1,2,3) @@ -698,7 +698,7 @@ def leakTask(task): tf = time.time() dt = tf - ts response = 'prof(%s): %s secs' % (name, dt) - print response + print(response) self.setMagicWordResponse(response) elif wordIs('~gptc'): @@ -815,7 +815,7 @@ def identifyDistributedObjects(self, name): result = [] lowerName = string.lower(name) - for obj in self.cr.doId2do.values(): + for obj in list(self.cr.doId2do.values()): className = obj.__class__.__name__ try: name = obj.getName() @@ -905,7 +905,7 @@ def getCSBitmask(self, str): # might not be an integer. Is there a better way # to check? bitmask |= BitMask32.bit(int(w)) - print bitmask + print(bitmask) except ValueError: invalid += " " + w if invalid: @@ -1112,5 +1112,5 @@ def garbageReportDone(self, garbageReport): def magicWord(mw): messenger.send('magicWord', [mw]) -import __builtin__ -__builtin__.magicWord = magicWord +import builtins +builtins.magicWord = magicWord diff --git a/otp/src/ai/MagicWordManagerAI.py b/otp/src/ai/MagicWordManagerAI.py index 9cdbab0e..044c7ded 100644 --- a/otp/src/ai/MagicWordManagerAI.py +++ b/otp/src/ai/MagicWordManagerAI.py @@ -1,4 +1,4 @@ -from AIBaseGlobal import * +from .AIBaseGlobal import * from pandac.PandaModules import * from direct.distributed import DistributedObjectAI from direct.directnotify import DirectNotifyGlobal @@ -6,11 +6,11 @@ from direct.showbase import PythonUtil, GarbageReport, ContainerReport, MessengerLeakDetector from direct.showbase import ContainerLeakDetector from direct.showbase.PythonUtil import Functor, DelayedCall, formatTimeCompact -import fpformat import string import time import re from direct.task import Task +from otp.avatar.DistributedPlayerAI import DistributedPlayerAI class MagicWordManagerAI(DistributedObjectAI.DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("MagicWordManagerAI") @@ -28,7 +28,7 @@ class MagicWordManagerAI(DistributedObjectAI.DistributedObjectAI): def __init__(self, air): DistributedObjectAI.DistributedObjectAI.__init__(self, air) - def setMagicWord(self, word, avId, zoneId, signature): + def setMagicWord(self, word, avId, zoneId): senderId = self.air.getAvatarIdFromSender() sender = self.air.doId2do.get(senderId, None) @@ -40,9 +40,9 @@ def setMagicWord(self, word, avId, zoneId, signature): else: sender = "Unknown avatar %d" % (senderId) - self.notify.info("%s (%s) just said the magic word: %s" % (sender, signature, word)) - self.air.writeServerEvent('magic-word', senderId, "%s|%s|%s" % (sender, signature, word)) - if self.air.doId2do.has_key(avId): + self.notify.info("%s just said the magic word: %s" % (sender, word)) + self.air.writeServerEvent('magic-word', senderId, "%s|%s" % (sender, word)) + if avId in self.air.doId2do: av = self.air.doId2do[avId] try: @@ -73,7 +73,7 @@ def doMagicWord(self, word, av, zoneId, senderId): response = "No name." else: av.d_setName(name) - + elif wordIs("~badname"): self.notify.warning("Renaming inappropriately named toon %s (doId %d)." % (av.name, av.doId)) name = "toon%d" % (av.doId % 1000000) @@ -115,7 +115,7 @@ def doMagicWord(self, word, av, zoneId, senderId): elif wordIs("~who all"): str = '' - for obj in self.air.doId2do.values(): + for obj in list(self.air.doId2do.values()): if hasattr(obj, "accountName"): str += '%s %s\n' % (obj.accountName, obj.name) if not str: @@ -131,7 +131,7 @@ def doMagicWord(self, word, av, zoneId, senderId): self.notify.debug("Only 1 hp for " + av.name) elif wordIs("~sad"): av.b_setHp(0) - self.notify.debug("Only 0 hp for " + av.name) + self.notify.debug("Only 0 hp for " + av.name) elif wordIs("~dead"): av.takeDamage(av.hp) self.notify.debug(av.name + " is dead") @@ -205,7 +205,7 @@ def doMagicWord(self, word, av, zoneId, senderId): elif wordIs('~ud'): # Execute an arbitrary Python command on the ud. - print word + print(word) channel,command = re.match("~ud ([0-9]+) (.+)", word).groups() channel = int(channel) if(simbase.air.doId2do.get(channel)): @@ -247,11 +247,11 @@ def doMagicWord(self, word, av, zoneId, senderId): type2count.setdefault(tn, 0) type2count[tn] += 1 count2type = invertDictLossless(type2count) - counts = count2type.keys() + counts = list(count2type.keys()) counts.sort() counts.reverse() for count in counts: - print '%s: %s' % (count, count2type[count]) + print('%s: %s' % (count, count2type[count])) self.down_setMagicWordResponse(senderId, '~aiobjecthg complete') elif wordIs('~aicrash'): @@ -399,11 +399,11 @@ def leakTask(task): self.down_setMagicWordResponse(senderId, 'logging AI distributed object count...') elif wordIs('~aitaskmgr'): - print taskMgr + print(taskMgr) self.down_setMagicWordResponse(senderId, 'logging AI taskMgr...') elif wordIs('~aijobmgr'): - print jobMgr + print(jobMgr) self.down_setMagicWordResponse(senderId, 'logging AI jobMgr...') elif wordIs('~aijobtime'): @@ -447,7 +447,7 @@ def leakTask(task): self.down_setMagicWordResponse(senderId, response) elif wordIs('~aimessenger'): - print messenger + print(messenger) self.down_setMagicWordResponse(senderId, 'logging AI messenger...') elif wordIs('~requestdeleted'): @@ -481,6 +481,17 @@ def leakTask(task): else: self.down_setMagicWordResponse(senderId, 'error') + elif wordIs('~system') or wordIs('~smsg'): + args = word.split() + message = ' '.join(x for x in args[1:]) + + for doId, do in list(simbase.air.doId2do.items()): + if isinstance(do, DistributedPlayerAI): + if doId != simbase.air.districtId and do.isPlayerControlled(): + do.d_setSystemMessage(0, f'{do.getName()}: {message}') + + self.down_setMagicWordResponse(senderId, 'Broadcasted message to shard.') + else: # The word is not an AI-side magic word. If the sender is # different than the target avatar, then pass the magic @@ -511,7 +522,7 @@ def doDna(self, word, av, zoneId, senderId): response = "%s" % (dna.asTuple(),) self.down_setMagicWordResponse(senderId, response) - """ + """ def _handleGPTCfinished(self, senderId, ct, gptcJob): self.down_setMagicWordResponse(senderId, 'aigptc(%s) finished' % ct) @@ -522,7 +533,7 @@ def _handleGPTCNfinished(self, senderId, cn, gptcnJob): def __execMessage(self, message): if not self.ExecNamespace: # Import some useful variables into the ExecNamespace initially. - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) #self.importExecNamespace() # Now try to evaluate the expression using ChatInputNormal.ExecNamespace as @@ -535,7 +546,7 @@ def __execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), self.ExecNamespace + exec(message, globals(), self.ExecNamespace) return 'ok' except: exception = sys.exc_info()[0] @@ -571,7 +582,7 @@ def setWho(self, avIds): str += '%s %s\n' % (obj.accountName, obj.name) if not str: str = "No avatars." - + senderId = self.air.getAvatarIdFromSender() self.down_setMagicWordResponse(senderId, str) @@ -593,5 +604,5 @@ def magicWord(mw, av=None, zoneId=0, senderId=0): av = FakeAv(senderId) simbase.air.magicWordManager.doMagicWord(mw, av, zoneId, senderId) -import __builtin__ -__builtin__.magicWord = magicWord +import builtins +builtins.magicWord = magicWord diff --git a/otp/src/ai/TimeManager.py b/otp/src/ai/TimeManager.py index 61620dac..6a8cc74f 100644 --- a/otp/src/ai/TimeManager.py +++ b/otp/src/ai/TimeManager.py @@ -313,7 +313,7 @@ def sendCpuInfo(self): '%0.03f,%0.03f' % cpuSpeed, '%d,%d' % (numCpuCores, numLogicalCpus)) - print "cpu info: %s" % (info) + print("cpu info: %s" % (info)) self.sendUpdate("setCpuInfo", [info, cacheStatus]) @@ -418,7 +418,7 @@ def d_setFrameRate(self, fps, deviation, numAvs, pageFaultCount, '%s.%d.%d.%d' % osInfo, '%0.03f,%0.03f' % cpuSpeed, '%d,%d' % (numCpuCores, numLogicalCpus), apiName) - print "frame rate: %s" % (info) + print("frame rate: %s" % (info)) self.sendUpdate("setFrameRate", [ fps, deviation, numAvs, locationCode, @@ -478,7 +478,7 @@ def getMacOsInfo(self, defaultOsInfo): bugfix, # what do we put for platform id? major, minor) - except Exception, e: + except Exception as e: self.notify.debug("getMacOsInfo %s" % str(e)) self.notify.debug('getMacOsInfo returning %s' % str(result)) return result diff --git a/otp/src/ai/TimeManagerAI.py b/otp/src/ai/TimeManagerAI.py index 8b432ff7..6103de27 100644 --- a/otp/src/ai/TimeManagerAI.py +++ b/otp/src/ai/TimeManagerAI.py @@ -1,4 +1,4 @@ -from AIBaseGlobal import * +from .AIBaseGlobal import * from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.task import Task diff --git a/otp/src/avatar/AvatarPanel.py b/otp/src/avatar/AvatarPanel.py index b0cb5ff7..7b0a7b78 100644 --- a/otp/src/avatar/AvatarPanel.py +++ b/otp/src/avatar/AvatarPanel.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from direct.gui.DirectGui import * from direct.showbase import DirectObject -import Avatar +from . import Avatar from direct.distributed import DistributedObject class AvatarPanel(DirectObject.DirectObject): @@ -42,7 +42,7 @@ def __init__(self, avatar, FriendsListPanel = None): # If we have an actual DistributedObject for this avatar, use # that one instead of whatever we're given. - if base.cr.doId2do.has_key(self.avId): + if self.avId in base.cr.doId2do: self.avatar = base.cr.doId2do[self.avId] else: self.avDisableName = None diff --git a/otp/src/avatar/DistributedAvatar.py b/otp/src/avatar/DistributedAvatar.py index a7a7c4cb..1ffa77a3 100644 --- a/otp/src/avatar/DistributedAvatar.py +++ b/otp/src/avatar/DistributedAvatar.py @@ -17,8 +17,8 @@ import random -from Avatar import Avatar -import AvatarDNA +from .Avatar import Avatar +from . import AvatarDNA class DistributedAvatar(DistributedActor, Avatar): diff --git a/otp/src/avatar/DistributedAvatarAI.py b/otp/src/avatar/DistributedAvatarAI.py index 65b6a3e3..dac906db 100644 --- a/otp/src/avatar/DistributedAvatarAI.py +++ b/otp/src/avatar/DistributedAvatarAI.py @@ -53,14 +53,14 @@ def getHp(self): return self.hp #---------------------------------- - + def b_setLocationName(self, locationName): self.d_setLocationName(locationName) self.setLocationName(locationName) def d_setLocationName(self, locationName): pass - + def setLocationName(self, locationName): self.locationName = locationName @@ -68,7 +68,7 @@ def getLocationName(self): return self.locationName #---------------------------------- - + def b_setActivity(self, activity): self.d_setActivity(activity) self.setActivity(activity) @@ -83,7 +83,7 @@ def getActivity(self): return self.activity #---------------------------------- - + def toonUp(self, num): # The default toonup is HP recharge. If other games want # a more involved toonup, they can redefine this function @@ -94,10 +94,13 @@ def toonUp(self, num): def getRadius(self): return OTPGlobals.AvatarDefaultRadius - + def checkAvOnShard(self, avId): senderId = self.air.getAvatarIdFromSender() onShard = False if simbase.air.doId2do.get(avId): onShard = True self.sendUpdateToAvatarId(senderId,"confirmAvOnShard",[avId, onShard]) + + def d_friendsNotify(self, avId, status): + self.sendUpdate("friendsNotify", [avId, status]) diff --git a/otp/src/avatar/DistributedPlayer.py b/otp/src/avatar/DistributedPlayer.py index 6183dd13..1b2bd66e 100644 --- a/otp/src/avatar/DistributedPlayer.py +++ b/otp/src/avatar/DistributedPlayer.py @@ -172,7 +172,7 @@ def displayWhisper(self, fromId, chatString, whisperType): name from within setWhisper and expect the derived function to override it. """ - print "Whisper type %s from %s: %s" % (whisperType, fromId, chatString) + print("Whisper type %s from %s: %s" % (whisperType, fromId, chatString)) def displayWhisperPlayer(self, playerId, chatString, whisperType): @@ -182,7 +182,7 @@ def displayWhisperPlayer(self, playerId, chatString, whisperType): name from within setWhisper and expect the derived function to override it. """ - print "WhisperPlayer type %s from %s: %s" % (whisperType, playerId, chatString) + print("WhisperPlayer type %s from %s: %s" % (whisperType, playerId, chatString)) ### setWhisperSC ### @@ -273,7 +273,7 @@ def whisperSCEmoteTo(self, emoteId, sendToId, toPlayer): Sends a speedchat whisper message to the indicated toon, prefixed with our own name. """ - print("whisperSCEmoteTo %s %s %s" % (emoteId, sendToId, toPlayer)) + print(("whisperSCEmoteTo %s %s %s" % (emoteId, sendToId, toPlayer))) if toPlayer: base.cr.playerFriendsManager.sendSCEmoteWhisper(sendToId, emoteId) return @@ -366,7 +366,7 @@ def displayTalkWhisper(self, fromId, avatarName, chatString, mods): name from within setWhisper and expect the derived function to override it. """ - print "TalkWhisper from %s: %s" % (fromId, chatString) + print("TalkWhisper from %s: %s" % (fromId, chatString)) def scrubTalk(self, chat, mods): """ diff --git a/otp/src/avatar/DistributedPlayerAI.py b/otp/src/avatar/DistributedPlayerAI.py index 4c5f6074..2a73c4d0 100644 --- a/otp/src/avatar/DistributedPlayerAI.py +++ b/otp/src/avatar/DistributedPlayerAI.py @@ -21,13 +21,6 @@ def announceGenerate(self): DistributedAvatarAI.DistributedAvatarAI.announceGenerate(self) self._doPlayerEnter() - def _announceArrival(self): - self.sendUpdate('arrivedOnDistrict', [self.air.districtId]) - - def _announceExit(self): - # clear out the 'arrivedOnDistrict' field - self.sendUpdate('arrivedOnDistrict', [0]) - def _sendExitServerEvent(self): """call this in your delete() function. This would be an override of delete(), but player classes typically use @@ -54,7 +47,7 @@ def delete(self): def isPlayerControlled(self): return True - + def setLocation(self, parentId, zoneId, teleport=0): DistributedAvatarAI.DistributedAvatarAI.setLocation(self, parentId, zoneId, teleport) if self.isPlayerControlled(): @@ -65,14 +58,14 @@ def setLocation(self, parentId, zoneId, teleport=0): self.air.writeServerEvent('suspicious', self.doId, 'invalid setLocation: (%s, %s)' % (parentId, zoneId)) self.requestDelete() - + def _doPlayerEnter(self): self.incrementPopulation() - self._announceArrival() + simbase.air.sendShardInfo() def _doPlayerExit(self): - self._announceExit() self.decrementPopulation() + simbase.air.sendShardInfo() # override if you don't want to affect the population count for a # particular PlayerAI @@ -120,8 +113,11 @@ def setAccountName(self, accountName): def getAccountName(self): return self.accountName - def setDISLid(self, id): - self.DISLid = id + def setOwningAccount(self, accountId): + self.accountId = accountId + + def getOwningAccount(self, accountId): + return self.accountId def d_setFriendsList(self, friendsList): self.sendUpdate("setFriendsList", [friendsList]) @@ -144,7 +140,7 @@ def extendFriendsList(self, friendId, friendCode): for i in range(len(self.friendsList)): friendPair = self.friendsList[i] if friendPair[0] == friendId: - # We did. Update the code. + # We did. Update the code. self.friendsList[i] = (friendId, friendCode) return @@ -154,5 +150,4 @@ def extendFriendsList(self, friendId, friendCode): # Note that if an avatar *breaks* a friendship, the AI never # hears about it. So our friends list will not be 100% # up-to-date, but it will at least be good enough for the - # quest manager. - + # quest manager. \ No newline at end of file diff --git a/otp/src/avatar/Emote.py b/otp/src/avatar/Emote.py index 88894449..ddc132c5 100644 --- a/otp/src/avatar/Emote.py +++ b/otp/src/avatar/Emote.py @@ -17,7 +17,7 @@ def __init__(self): def isEnabled(self, index): # find the emotes index if we are given a string - if isinstance(index, types.StringType): + if isinstance(index, bytes): index = OTPLocalizer.EmoteFuncDict[index] if self.emoteFunc == None: diff --git a/otp/src/avatar/LocalAvatar.py b/otp/src/avatar/LocalAvatar.py index c1601137..a8a61d3c 100644 --- a/otp/src/avatar/LocalAvatar.py +++ b/otp/src/avatar/LocalAvatar.py @@ -8,11 +8,11 @@ from direct.showbase.InputStateGlobal import inputState from pandac.PandaModules import * -import Avatar +from . import Avatar from direct.controls import ControlManager -import DistributedAvatar +from . import DistributedAvatar from direct.task import Task -import PositionExaminer +from . import PositionExaminer from otp.otpbase import OTPGlobals from otp.otpbase import OTPRender import math @@ -921,20 +921,20 @@ def removeCameraPosition(self): self.nextCameraPos(1) def printCameraPositions(self): - print '[' + print('[') for i in range(len(self.cameraPositions)): self.printCameraPosition(i) - print ',' - print ']' + print(',') + print(']') def printCameraPosition(self, index): cp = self.cameraPositions[index] - print '(Point3(%0.2f, %0.2f, %0.2f),' % (cp[0][0],cp[0][1],cp[0][2]) - print 'Point3(%0.2f, %0.2f, %0.2f),' % (cp[1][0],cp[1][1],cp[1][2]) - print 'Point3(%0.2f, %0.2f, %0.2f),' % (cp[2][0],cp[2][1],cp[2][2]) - print 'Point3(%0.2f, %0.2f, %0.2f),' % (cp[3][0],cp[3][1],cp[3][2]) - print '%d,' % cp[4] - print ')', + print('(Point3(%0.2f, %0.2f, %0.2f),' % (cp[0][0],cp[0][1],cp[0][2])) + print('Point3(%0.2f, %0.2f, %0.2f),' % (cp[1][0],cp[1][1],cp[1][2])) + print('Point3(%0.2f, %0.2f, %0.2f),' % (cp[2][0],cp[2][1],cp[2][2])) + print('Point3(%0.2f, %0.2f, %0.2f),' % (cp[3][0],cp[3][1],cp[3][2])) + print('%d,' % cp[4]) + print(')', end=' ') def posCamera(self, lerp, time): """posCamera(self, boolean, float) @@ -1929,7 +1929,7 @@ def printCamPos(self): node = base.camera.getParent() pos = base.cam.getPos(node) hpr = base.cam.getHpr(node) - print 'cam pos = ',`pos`,', cam hpr = ',`hpr` + print('cam pos = ',repr(pos),', cam hpr = ',repr(hpr)) def d_broadcastPositionNow(self): """ diff --git a/otp/src/chat/ChatInputNormal.py b/otp/src/chat/ChatInputNormal.py index 7ef5c2dc..981b4d0c 100644 --- a/otp/src/chat/ChatInputNormal.py +++ b/otp/src/chat/ChatInputNormal.py @@ -136,7 +136,7 @@ def __execMessage(self, message): if not ChatInputNormal.ExecNamespace: # Import some useful variables into the ExecNamespace initially. ChatInputNormal.ExecNamespace = { } - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) self.importExecNamespace() # Now try to evaluate the expression using ChatInputNormal.ExecNamespace as @@ -149,7 +149,7 @@ def __execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), ChatInputNormal.ExecNamespace + exec(message, globals(), ChatInputNormal.ExecNamespace) return 'ok' except: exception = sys.exc_info()[0] diff --git a/otp/src/chat/ChatInputTyped.py b/otp/src/chat/ChatInputTyped.py index 999138a1..cdb19cc8 100644 --- a/otp/src/chat/ChatInputTyped.py +++ b/otp/src/chat/ChatInputTyped.py @@ -178,7 +178,7 @@ def __execMessage(self, message): if not ChatInputTyped.ExecNamespace: # Import some useful variables into the ExecNamespace initially. ChatInputTyped.ExecNamespace = { } - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) self.importExecNamespace() # Now try to evaluate the expression using ChatInputTyped.ExecNamespace as @@ -191,7 +191,7 @@ def __execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), ChatInputTyped.ExecNamespace + exec(message, globals(), ChatInputTyped.ExecNamespace) return 'ok' except: exception = sys.exc_info()[0] diff --git a/otp/src/chat/ChatInputWhiteList.py b/otp/src/chat/ChatInputWhiteList.py index b9f8635f..93c7b15c 100644 --- a/otp/src/chat/ChatInputWhiteList.py +++ b/otp/src/chat/ChatInputWhiteList.py @@ -305,11 +305,11 @@ def importExecNamespace(self): pass def __execMessage(self, message): - print ("_execMessage %s" % (message)) + print(("_execMessage %s" % (message))) if not ChatInputTyped.ExecNamespace: # Import some useful variables into the ExecNamespace initially. ChatInputTyped.ExecNamespace = { } - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) self.importExecNamespace() # Now try to evaluate the expression using ChatInputTyped.ExecNamespace as @@ -322,7 +322,7 @@ def __execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), ChatInputTyped.ExecNamespace + exec(message, globals(), ChatInputTyped.ExecNamespace) return 'ok' except: exception = sys.exc_info()[0] diff --git a/otp/src/chat/ChatInputWhiteListFrame.py b/otp/src/chat/ChatInputWhiteListFrame.py index 28da44d5..993036a6 100644 --- a/otp/src/chat/ChatInputWhiteListFrame.py +++ b/otp/src/chat/ChatInputWhiteListFrame.py @@ -361,7 +361,7 @@ def __execMessage(self, message): if not ChatInputTyped.ExecNamespace: # Import some useful variables into the ExecNamespace initially. ChatInputTyped.ExecNamespace = { } - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) self.importExecNamespace() # Now try to evaluate the expression using ChatInputTyped.ExecNamespace as @@ -374,7 +374,7 @@ def __execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), ChatInputTyped.ExecNamespace + exec(message, globals(), ChatInputTyped.ExecNamespace) return 'ok' except: exception = sys.exc_info()[0] diff --git a/otp/src/chat/ChatManager.py b/otp/src/chat/ChatManager.py index e8151aea..99d1385f 100644 --- a/otp/src/chat/ChatManager.py +++ b/otp/src/chat/ChatManager.py @@ -465,7 +465,7 @@ def enterWhisper(self, avatarName, avatarId, playerId = None): chatToToon = 1 #set to 0 to chat to player online = 0 - if self.cr.doId2do.has_key(avatarId): + if avatarId in self.cr.doId2do: # The avatar is online, and in fact, nearby. online = 1 elif self.cr.isFriend(avatarId): @@ -493,7 +493,7 @@ def enterWhisper(self, avatarName, avatarId, playerId = None): ## This is less true now, but still possible. if playerId: - if base.cr.playerFriendsManager.playerId2Info.has_key(playerId): + if playerId in base.cr.playerFriendsManager.playerId2Info: playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId) playerName = playerInfo.playerName online = 1 diff --git a/otp/src/chat/TalkAssistant.py b/otp/src/chat/TalkAssistant.py index 3a4b06e9..4f6255cf 100644 --- a/otp/src/chat/TalkAssistant.py +++ b/otp/src/chat/TalkAssistant.py @@ -178,7 +178,7 @@ def addToHistoryDoId(self, message, doId, scrubbed = 0): self.lastWhisperDoId = doId self.lastWhisper = self.lastWhisperDoId - if not self.historyByDoId.has_key(doId): + if doId not in self.historyByDoId: self.historyByDoId[doId] = [] self.historyByDoId[doId].append(message) @@ -186,7 +186,7 @@ def addToHistoryDoId(self, message, doId, scrubbed = 0): self.doWhiteListWarning() self.shownWhiteListWarning = 1 - if not self.floodDataByDoId.has_key(doId): + if doId not in self.floodDataByDoId: self.floodDataByDoId[doId] = [0.0, self.stampTime(), message] #floodRating, lastTime, message else: oldTime = self.floodDataByDoId[doId][1] @@ -219,7 +219,7 @@ def addToHistoryDISLId(self, message, dISLId, scrubbed = 0): if (message.getTalkType() == TALK_ACCOUNT) and (dISLId != base.cr.accountDetailRecord.playerAccountId): self.lastWhisperPlayerId = dISLId self.lastWhisper = self.lastWhisperPlayerId - if not self.historyByDISLId.has_key(dISLId): + if dISLId not in self.historyByDISLId: self.historyByDISLId[dISLId] = [] self.historyByDISLId[dISLId].append(message) @@ -348,7 +348,7 @@ def fillWithTestText(self): def printHistoryComplete(self): print("HISTORY COMPLETE") for message in self.historyComplete: - print("%s %s %s\n%s\n" % (message.getTimeStamp(), message.getSenderAvatarName(), message.getSenderAccountName(), message.getBody())) + print(("%s %s %s\n%s\n" % (message.getTimeStamp(), message.getSenderAvatarName(), message.getSenderAccountName(), message.getBody()))) #################################### # Exec-chat functions @@ -359,11 +359,11 @@ def importExecNamespace(self): pass def execMessage(self, message): - print ("execMessage %s" % (message)) + print(("execMessage %s" % (message))) if not TalkAssistant.ExecNamespace: # Import some useful variables into the ExecNamespace initially. TalkAssistant.ExecNamespace = { } - exec 'from pandac.PandaModules import *' in globals(), self.ExecNamespace + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) self.importExecNamespace() # Now try to evaluate the expression using ChatInputTyped.ExecNamespace as @@ -377,7 +377,7 @@ def execMessage(self, message): # "import math". These aren't expressions, so eval() # fails, but they can be exec'ed. try: - exec message in globals(), TalkAssistant.ExecNamespace + exec(message, globals(), TalkAssistant.ExecNamespace) return "ok" except: exception = sys.exc_info()[0] @@ -526,7 +526,7 @@ def receiveOpenTalk(self, avatarId, avatarName, accountId, accountName, message, def receiveWhisperTalk(self, avatarId, avatarName, accountId, accountName, toId, toName, message, scrubbed = 0): error = None - print ("receiveWhisperTalk %s %s %s %s %s" % (avatarId, avatarName, accountId, accountName, message)) + print(("receiveWhisperTalk %s %s %s %s %s" % (avatarId, avatarName, accountId, accountName, message))) if (not avatarName) and (avatarId): avatarName = self.findAvatarName(avatarId) if (not accountName) and (accountId): @@ -1017,7 +1017,7 @@ def sendGuildTalk(self, message): # Guild chat is sent through the guildManager base.cr.guildManager.sendTalk(message) else: - print "Guild chat error" + print("Guild chat error") error = ERROR_NO_GUILD_CHAT return error @@ -1132,7 +1132,7 @@ def sendGuildSpeedChat(self, type, msgIndex): if self.checkGuildSpeedChat(): base.cr.guildManager.sendSC(msgIndex) else: - print "Guild Speedchat error" + print("Guild Speedchat error") error = ERROR_NO_GUILD_CHAT return error diff --git a/otp/src/distributed/CentralLogger.py b/otp/src/distributed/CentralLogger.py index 54ed5b8a..add24eec 100644 --- a/otp/src/distributed/CentralLogger.py +++ b/otp/src/distributed/CentralLogger.py @@ -17,7 +17,7 @@ class CentralLogger(DistributedObjectGlobal): def hasReportedPlayer(self, targetDISLId, targetAvId): # Has this playerId, avatarId already been reported this session? - return self.PlayersReportedThisSession.has_key((targetDISLId, targetAvId)) + return (targetDISLId, targetAvId) in self.PlayersReportedThisSession def reportPlayer(self, category, targetDISLId, targetAvId, description = "None"): # You can only report another player once per session. diff --git a/otp/src/distributed/DistributedDirectoryAI.py b/otp/src/distributed/DistributedDirectoryAI.py index e0223b1f..28bc19ec 100644 --- a/otp/src/distributed/DistributedDirectoryAI.py +++ b/otp/src/distributed/DistributedDirectoryAI.py @@ -7,4 +7,16 @@ class DistributedDirectoryAI(DistributedObjectAI): is still needed. It is used as a parent for the individual games. The dc system uses the parenting rules as if this object existed. """ - pass + def __init__(self, air): + DistributedObjectAI.__init__(self, air) + + self.name = '' + + def setParentingRules(self, todo0, todo1): + pass + + def setName(self, name): + self.name = name + + def getName(self): + return self.name \ No newline at end of file diff --git a/otp/src/distributed/DistributedDistrict.py b/otp/src/distributed/DistributedDistrict.py index 172f27b1..98a89217 100644 --- a/otp/src/distributed/DistributedDistrict.py +++ b/otp/src/distributed/DistributedDistrict.py @@ -24,7 +24,7 @@ def announceGenerate(self): def delete(self): if base.cr.distributedDistrict is self: base.cr.distributedDistrict = None - if self.cr.activeDistrictMap.has_key(self.doId): + if self.doId in self.cr.activeDistrictMap: del self.cr.activeDistrictMap[self.doId] DistributedObject.delete(self) messenger.send('shardInfoUpdated') diff --git a/otp/src/distributed/DistributedInterestOpener.py b/otp/src/distributed/DistributedInterestOpener.py index dbe3b605..3a7586ef 100644 --- a/otp/src/distributed/DistributedInterestOpener.py +++ b/otp/src/distributed/DistributedInterestOpener.py @@ -12,7 +12,7 @@ def __init__(self, cr): def generate(self): DistributedObject.generate(self) self.childInterest = None - print 'DistributedInterestOpener.generate' + print('DistributedInterestOpener.generate') def disable(self): self._removeInterest() @@ -24,7 +24,7 @@ def setChildZones(self, childZones): def setRequiredDoIds(self, requiredDoIds): self.requiredDoIds = requiredDoIds - print 'DistributedInterestOpener.setRequiredDoIds' + print('DistributedInterestOpener.setRequiredDoIds') if self.childInterest is None: self.getObject(self.requiredDoIds, self._openInterest) else: @@ -32,19 +32,19 @@ def setRequiredDoIds(self, requiredDoIds): self.getObject(self.requiredDoIds, self._alterInterest) def _openInterest(self): - print 'DistributedInterestOpener._openInterest: %s' % self.getDoId() + print('DistributedInterestOpener._openInterest: %s' % self.getDoId()) self.childInterest = self.cr.addInterest( self.getDoId(), self.childZones, self.uniqueName('interestOpener')) def _alterInterest(self): - print 'DistributedInterestOpener._alterInterest' + print('DistributedInterestOpener._alterInterest') self.cr.alterInterest(self.childInterest, self.getDoId(), self.childZones, self.uniqueName('interestOpenerAlter')) def _removeInterest(self): - print 'DistributedInterestOpener._removeInterest' + print('DistributedInterestOpener._removeInterest') if self.childInterest is not None: self.getRepository().removeInterest(self.childInterest) self.childInterest = None diff --git a/otp/src/distributed/DistributedInterestOpenerAI.py b/otp/src/distributed/DistributedInterestOpenerAI.py index 03bdc2f1..7dc8076b 100644 --- a/otp/src/distributed/DistributedInterestOpenerAI.py +++ b/otp/src/distributed/DistributedInterestOpenerAI.py @@ -18,7 +18,7 @@ def __init__(self, air, requiredDoIds, zones=None): def announceGenerate(self): DistributedObjectAI.announceGenerate(self) - print 'DistributedInterestOpenerAI.announceGenerate: %s' % self.doId + print('DistributedInterestOpenerAI.announceGenerate: %s' % self.doId) def setRequiredDoIds(self, requiredDoIds): # call this to change the list of required doIds diff --git a/modules/pytz/zoneinfo/Africa/__init__.py b/otp/src/distributed/DistributedPuppeteerAI.py similarity index 100% rename from modules/pytz/zoneinfo/Africa/__init__.py rename to otp/src/distributed/DistributedPuppeteerAI.py diff --git a/otp/src/distributed/OTPClientRepository.py b/otp/src/distributed/OTPClientRepository.py index e795bbaa..6380ba1c 100644 --- a/otp/src/distributed/OTPClientRepository.py +++ b/otp/src/distributed/OTPClientRepository.py @@ -49,7 +49,7 @@ from otp.distributed import OtpDoGlobals from otp.ai.GarbageLeakServerEventAggregator import GarbageLeakServerEventAggregator -from PotentialAvatar import PotentialAvatar +from .PotentialAvatar import PotentialAvatar class OTPClientRepository(ClientRepositoryBase): # Create a notify category @@ -189,7 +189,7 @@ def __init__(self, serverVersion, launcher = None, playGame = None): ) self.DISLToken += ("&WL_CHAT_ENABLED=%s" % config.GetString('fake-DISL-WLChatEnabled','YES') + "&valid=true") - print self.DISLToken + print(self.DISLToken) # Find out what kind of login we are supposed to used and let # us know if it's not found: @@ -693,7 +693,7 @@ def gotoFirstScreen(self): # attempt to grab the account server constants try: self.accountServerConstants = AccountServerConstants.AccountServerConstants(self) - except TTAccount.TTAccountException, e: + except TTAccount.TTAccountException as e: self.notify.debug(str(e)) self.loginFSM.request('failedToGetServerConstants', [e]) return @@ -1063,7 +1063,7 @@ def exitWaitForShardList(self): def _shardsAreReady(self): # make sure there's at least one shard up #print self.activeDistrictMap - for shard in self.activeDistrictMap.values(): + for shard in list(self.activeDistrictMap.values()): if shard.available: return True else: @@ -1198,8 +1198,7 @@ def enterNoConnection(self): gameUsername = launcher.getValue('GAME_USERNAME', base.cr.userName) # Look for a good explanation to display for the user. - if self.bootedIndex != None and OTPLocalizer.CRBootedReasons.has_key( - self.bootedIndex): + if self.bootedIndex != None and self.bootedIndex in OTPLocalizer.CRBootedReasons: # We've got a standard reason code for the boot from the server. message = (OTPLocalizer.CRBootedReasons[self.bootedIndex]) % {'name' : gameUsername} @@ -1813,10 +1812,10 @@ def detectLeakedTasks(self, extraTasks=None): continue else: if hasattr(task, "debugInitTraceback"): - print task.debugInitTraceback + print(task.debugInitTraceback) problems.append(task.name) if problems: - print taskMgr + print(taskMgr) msg = "You can't leave until you clean up your tasks: {" for task in problems: msg += "\n " + task @@ -1876,7 +1875,7 @@ def detectLeakedEvents(self, extraHooks=None): # there are so many ways this could fail that it's in a try block value = whoAccepts[obj] callback = value[0] - guiObj = callback.im_self + guiObj = callback.__self__ if hasattr(guiObj, 'getCreationStackTraceCompactStr'): msg += '\n CREATIONSTACKTRACE:%s' % guiObj.getCreationStackTraceCompactStr() except: @@ -1891,7 +1890,7 @@ def detectLeakedIntervals(self): # Make sure there are no leftover intervals that shouldn't be here. numIvals = ivalMgr.getNumIntervals() if numIvals > 0: - print "You can't leave until you clean up your intervals: {" + print("You can't leave until you clean up your intervals: {") for i in range(ivalMgr.getMaxIndex()): # We go through some effort to print each interval in # detail. This means we need to find the interval. @@ -1904,12 +1903,12 @@ def detectLeakedIntervals(self): if ival == None: ival = ivalMgr.getCInterval(i) if ival: - print ival + print(ival) if hasattr(ival, "debugName"): - print ival.debugName + print(ival.debugName) if hasattr(ival, "debugInitTraceback"): - print ival.debugInitTraceback - print "}" + print(ival.debugInitTraceback) + print("}") self.notify.info( "You can't leave until you clean up your intervals.") return numIvals @@ -2159,7 +2158,7 @@ def _removeLocalAvFromStateServer(self): @report(types = ['args', 'deltaStamp'], dConfigParam = 'teleport') def _removeAllOV(self): # force delete for all owner-view objects, OTP server has done the same on its end - ownerDoIds = self.doId2ownerView.keys() + ownerDoIds = list(self.doId2ownerView.keys()) for doId in ownerDoIds: self.disableDoId(doId, ownerView=True) @@ -2342,7 +2341,7 @@ def moveOnFromUberZone(self): def handlePlayGame(self, msgType, di): assert self.notify.debugStateCall(self, 'loginFSM', 'gameFSM') if self.notify.getDebug(): - self.notify.debug("handle play game got message type: " + `msgType`) + self.notify.debug("handle play game got message type: " + repr(msgType)) if msgType == CLIENT_CREATE_OBJECT_REQUIRED: self.handleGenerateWithRequired(di) elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER: @@ -2584,7 +2583,7 @@ def getStartingDistrict(self): """ district = None - if len(self.activeDistrictMap.keys()) == 0: + if len(list(self.activeDistrictMap.keys())) == 0: self.notify.info('no shards') return None @@ -2594,7 +2593,7 @@ def getStartingDistrict(self): lowPop, midPop, highPop = base.getShardPopLimits() self.notify.debug('low: %s mid: %s high: %s' % (lowPop, midPop, highPop)) - for s in self.activeDistrictMap.values(): + for s in list(self.activeDistrictMap.values()): if s.available and s.avatarCount < lowPop: self.notify.debug('%s: pop %s' % (s.name, s.avatarCount)) @@ -2615,7 +2614,7 @@ def getStartingDistrict(self): if district is None: self.notify.debug( 'all shards over cutoff, picking lowest-population shard') - for s in self.activeDistrictMap.values(): + for s in list(self.activeDistrictMap.values()): if s.available: self.notify.debug('%s: pop %s' % (s.name, s.avatarCount)) @@ -2658,7 +2657,7 @@ def listActiveShards(self): """ assert self.notify.debugStateCall(self, 'loginFSM', 'gameFSM') list = [] - for s in self.activeDistrictMap.values(): + for s in list(self.activeDistrictMap.values()): if s.available: list.append( (s.doId, s.name, s.avatarCount, @@ -2670,7 +2669,7 @@ def listActiveShards(self): ######### General senders and handlers ######### def getPlayerAvatars(self): - return [i for i in self.doId2do.values() + return [i for i in list(self.doId2do.values()) if isinstance(i, DistributedPlayer)] if 0: @@ -2826,7 +2825,7 @@ def refreshAccountServerDate(self, forceRefresh=0): assert self.notify.debugStateCall(self, 'loginFSM', 'gameFSM') try: self.accountServerDate.grabDate(force=forceRefresh) - except TTAccount.TTAccountException, e: + except TTAccount.TTAccountException as e: self.notify.debug(str(e)) return 1 @@ -3064,7 +3063,7 @@ def replayDeferredGenerate(self, msgType, extra): @exceptionLogged(append=False) def handleDatagram(self, di): if self.notify.getDebug(): - print "ClientRepository received datagram:" + print("ClientRepository received datagram:") di.getDatagram().dumpHex(ostream) diff --git a/otp/src/distributed/ObjectServerAI.py b/otp/src/distributed/ObjectServerAI.py index bd6e97ba..58b09d93 100644 --- a/otp/src/distributed/ObjectServerAI.py +++ b/otp/src/distributed/ObjectServerAI.py @@ -27,8 +27,8 @@ def setName(self, name): def setDcHash(self, dcHash): self.dcHash=dcHash if dcHash != self.air.hashVal: - print "\nBad DC Version compare -- hash value mismatch (district %s, otp_server %s)"%( - (self.air.hashVal, dcHash)) + print("\nBad DC Version compare -- hash value mismatch (district %s, otp_server %s)"%( + (self.air.hashVal, dcHash))) sys.exit() else: - print "DC hash matches." + print("DC hash matches.") diff --git a/otp/src/distributed/ObjectServerUD.py b/otp/src/distributed/ObjectServerUD.py index ca64aecc..d9632900 100644 --- a/otp/src/distributed/ObjectServerUD.py +++ b/otp/src/distributed/ObjectServerUD.py @@ -27,8 +27,8 @@ def setName(self, name): def setDcHash(self, dcHash): self.dcHash=dcHash if dcHash != self.air.hashVal: - print "\nBad DC Version compare -- hash value mismatch (district %s, otp_server %s)"%( - (self.air.hashVal, dcHash)) + print("\nBad DC Version compare -- hash value mismatch (district %s, otp_server %s)"%( + (self.air.hashVal, dcHash))) sys.exit() else: - print "DC hash matches." + print("DC hash matches.") diff --git a/otp/src/distributed/OtpDoGlobals.py b/otp/src/distributed/OtpDoGlobals.py index d4137353..4e8ab82c 100644 --- a/otp/src/distributed/OtpDoGlobals.py +++ b/otp/src/distributed/OtpDoGlobals.py @@ -28,10 +28,10 @@ OTP_NET_MSGR_CHANNEL_ID_UBER_DOG =4606 OTP_NET_MSGR_CHANNEL_ID_AI_ONLY = 4607 -OTP_DO_ID_COMMON = 4615 # Global objects shared across toontwon, pirates, et al. +OTP_DO_ID_COMMON = 4610 # Global objects shared across toontwon, pirates, et al. OTP_DO_ID_GATEWAY = 4616 # Root of Gateway OTP_DO_ID_PIRATES = 4617 # Root of Pirates -OTP_DO_ID_TOONTOWN = 4618 # Root of Toontown +OTP_DO_ID_TOONTOWN = 4615 # Root of Toontown OTP_DO_ID_FAIRIES = 4619 # Root of Fairies OTP_DO_ID_CARS = 4620 # Root of Cars diff --git a/otp/src/friends/AvatarFriendsDB.py b/otp/src/friends/AvatarFriendsDB.py index 7e3392e4..38b31576 100644 --- a/otp/src/friends/AvatarFriendsDB.py +++ b/otp/src/friends/AvatarFriendsDB.py @@ -30,7 +30,7 @@ def __init__(self,host,port,user,passwd,dbname): port=port, user=user, passwd=passwd) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if __debug__: self.notify.warning("Failed to connect to MySQL at %s:%d. Avatar friends DB is disabled."%(host,port)) self.sqlAvailable = 0 @@ -46,7 +46,7 @@ def __init__(self,host,port,user,passwd,dbname): cursor.execute("CREATE DATABASE `%s`"%self.dbname) if __debug__: self.notify.info("Database '%s' did not exist, created a new one!"%self.dbname) - except _mysql_exceptions.ProgrammingError,e: + except _mysql_exceptions.ProgrammingError as e: pass cursor.execute("USE `%s`"%self.dbname) @@ -66,7 +66,7 @@ def __init__(self,host,port,user,passwd,dbname): """) if __debug__: self.notify.info("Table avatarfriends did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: pass def reconnect(self): @@ -96,7 +96,7 @@ def getFriends(self,avatarId): cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("SELECT * FROM avatarfriends WHERE friendId1=%s OR friendId2=%s",(avatarId,avatarId)) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if e[0] == SERVER_GONE_ERROR or e[0] == SERVER_LOST: self.reconnect() cursor = MySQLdb.cursors.DictCursor(self.db) @@ -123,7 +123,7 @@ def addFriendship(self,avatarId1,avatarId2,openChat=0): cursor.execute("INSERT INTO avatarfriends (friendId1,friendId2,openChatYesNo) VALUES (%s,%s,%s)",(avatarId1,avatarId2,openChat)) else: cursor.execute("INSERT INTO avatarfriends (friendId1,friendId2,openChatYesNo) VALUES (%s,%s,%s)",(avatarId2,avatarId1,openChat)) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if e[0] == SERVER_GONE_ERROR or e[0] == SERVER_LOST: self.reconnect() cursor = MySQLdb.cursors.DictCursor(self.db) @@ -145,7 +145,7 @@ def removeFriendship(self,avatarId1,avatarId2): cursor.execute("DELETE FROM avatarfriends where friendId1=%s AND friendId2=%s",(avatarId1,avatarId2)) else: cursor.execute("DELETE FROM avatarfriends where friendId1=%s AND friendId2=%s",(avatarId2,avatarId1)) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if e[0] == SERVER_GONE_ERROR or e[0] == SERVER_LOST: # 'Lost connection to MySQL server during query' self.reconnect() cursor = MySQLdb.cursors.DictCursor(self.db) diff --git a/otp/src/friends/AvatarFriendsManagerUD.py b/otp/src/friends/AvatarFriendsManagerUD.py index 48dde8bc..e7a9d929 100644 --- a/otp/src/friends/AvatarFriendsManagerUD.py +++ b/otp/src/friends/AvatarFriendsManagerUD.py @@ -66,7 +66,7 @@ def announceGenerate(self): def delete(self): assert self.notify.debugCall() self.ignoreAll() - for i in self.asyncRequests.values(): + for i in list(self.asyncRequests.values()): i.delete() DistributedObjectGlobalUD.delete(self) @@ -79,10 +79,10 @@ def avatarOnlinePlusAccountInfo(self,avatarId,accountId,playerName, assert avatarId self.notify.debug("avatarOnlinePlusAccountInfo") - if self.isAvatarOnline.has_key(avatarId): + if avatarId in self.isAvatarOnline: assert self.notify.debug( "\n\nWe got a duplicate avatar online notice %s"%(avatarId,)) - if avatarId and not self.isAvatarOnline.has_key(avatarId): + if avatarId and avatarId not in self.isAvatarOnline: self.isAvatarOnline[avatarId]=True self.avatarId2Info[avatarId] = AvatarFriendInfo(avatarName=str(avatarId), playerName = playerName, @@ -100,20 +100,20 @@ def avatarOnlinePlusAccountInfo(self,avatarId,accountId,playerName, # Callback function for asynchronous avatar name fetch def setName(avatarId, avatarId2info, friends, context, name): - if avatarId2info.has_key(avatarId): + if avatarId in avatarId2info: avatarId2info[avatarId].avatarName = name[0] for friendId in friends: - if self.isAvatarOnline.has_key(friendId): + if friendId in self.isAvatarOnline: if (friendId in self.avatarId2FriendsList) and (avatarId in self.avatarId2FriendsList[friendId]): self.sendUpdateToAvatarId(friendId,"updateAvatarFriend", [avatarId,self.getFriendView(friendId,avatarId)]) self.sendExtraUpdates(friendId,avatarId) # Get my friends' info to me - for friend in friends.keys(): + for friend in list(friends.keys()): friendId = friend - if not self.isAvatarOnline.has_key(friendId): - if not self.avatarId2Info.has_key(friendId): + if friendId not in self.isAvatarOnline: + if friendId not in self.avatarId2Info: self.avatarId2Info[friendId] = AvatarFriendInfo() #fetch this friend's name from the gameDB since we don't have it yet context=self.air.allocateContext() @@ -127,7 +127,7 @@ def setName(avatarId, avatarId2info, friends, context, name): self.sendUpdateToAvatarId(avatarId,"updateAvatarFriend",[friendId,self.getFriendView(avatarId,friendId)]) self.sendExtraUpdates(avatarId,friendId) else: - assert self.avatarId2Info.has_key(friendId) + assert friendId in self.avatarId2Info self.sendUpdateToAvatarId(avatarId,"updateAvatarFriend",[friendId,self.getFriendView(avatarId,friendId)]) self.sendExtraUpdates(avatarId,friendId) @@ -138,14 +138,14 @@ def setName(avatarId, avatarId2info, friends, context, name): self.air.contextToClassName[context]=dclassName self.acceptOnce( "doFieldResponse-%s"%(context,), - setName, [avatarId, self.avatarId2Info, friends.keys()]) + setName, [avatarId, self.avatarId2Info, list(friends.keys())]) self.air.queryObjectField( dclassName, "setName", avatarId, context) def getFriendView(self, viewerId, friendId): info = self.avatarId2Info[friendId] - assert self.avatarId2FriendsList.has_key(viewerId), "avatarId2FriendsList has no key %d" % viewerId - assert self.avatarId2FriendsList[viewerId].has_key(friendId), "avatarId2FriendsList[%d] has no key %d" % (viewerId, friendId) + assert viewerId in self.avatarId2FriendsList, "avatarId2FriendsList has no key %d" % viewerId + assert friendId in self.avatarId2FriendsList[viewerId], "avatarId2FriendsList[%d] has no key %d" % (viewerId, friendId) info.openChatFriendshipYesNo = self.avatarId2FriendsList[viewerId][friendId] if info.openChatFriendshipYesNo or \ (info.openChatEnabledYesNo and \ @@ -169,12 +169,12 @@ def avatarOffline(self, avatarId): assert self.notify.debugCall() self.isAvatarOnline.pop(avatarId,None) - if self.avatarId2Info.has_key(avatarId): + if avatarId in self.avatarId2Info: self.avatarId2Info[avatarId].onlineYesNo = 0 if avatarId: friendsList = self.avatarId2FriendsList.get(avatarId, None) - if friendsList is not None and self.avatarId2Info.has_key(avatarId): + if friendsList is not None and avatarId in self.avatarId2Info: for friend in friendsList: self.sendUpdateToAvatarId( friend, "updateAvatarFriend", [avatarId,self.avatarId2Info[avatarId]]) @@ -243,7 +243,7 @@ def reject(reason): assert otherAvatarId not in invitations self.avatarId2FriendsList[avatarId][otherAvatarId] = 0 - if self.avatarId2FriendsList.has_key(otherAvatarId): + if otherAvatarId in self.avatarId2FriendsList: self.avatarId2FriendsList[otherAvatarId][avatarId] = 0 #update the friends database @@ -319,9 +319,9 @@ def reject(reason): if otherAvatarId not in friendsList: reject(RejectCode.ALREADY_NOT_YOUR_FRIEND) else: - if self.avatarId2FriendsList.has_key(avatarId): + if avatarId in self.avatarId2FriendsList: self.avatarId2FriendsList[avatarId].pop(otherAvatarId,None) - if self.avatarId2FriendsList.has_key(otherAvatarId): + if otherAvatarId in self.avatarId2FriendsList: self.avatarId2FriendsList[otherAvatarId].pop(avatarId,None) self.db.removeFriendship(avatarId,otherAvatarId) self.sendUpdateToAvatarId(avatarId,"removeAvatarFriend",[otherAvatarId]) @@ -329,11 +329,11 @@ def reject(reason): def updateAvatarName(self, avatarId, avatarName): - if self.avatarId2Info.has_key(avatarId): + if avatarId in self.avatarId2Info: self.avatarId2Info[avatarId].avatarName = avatarName friends = self.avatarId2FriendsList.get(avatarId,[]) for friendId in friends: - if self.isAvatarOnline.has_key(friendId): + if friendId in self.isAvatarOnline: self.sendUpdateToAvatarId(friendId,"updateAvatarFriend", [avatarId,self.getFriendView(friendId,avatarId)]) self.sendExtraUpdates(friendId,avatarId) diff --git a/otp/src/friends/EmailInvite.py b/otp/src/friends/EmailInvite.py index a03bf65e..91dcb430 100644 --- a/otp/src/friends/EmailInvite.py +++ b/otp/src/friends/EmailInvite.py @@ -62,7 +62,7 @@ def sendEmailInvite(self, fromAddr, toAddr, subject, fromAvName, inviteCode): # Now send the message outbound = msg.as_string() - print 'The ougoing message is: %s' % (outbound) + print('The ougoing message is: %s' % (outbound)) try: self.mailServer.sendmail(fromAddr, [toAddr], outbound) diff --git a/otp/src/friends/FriendManagerAI.py b/otp/src/friends/FriendManagerAI.py index 6a6df84d..9a3082bc 100644 --- a/otp/src/friends/FriendManagerAI.py +++ b/otp/src/friends/FriendManagerAI.py @@ -1,571 +1,570 @@ -## from otp.ai.AIBaseGlobal import * -## from pandac.PandaModules import * +from otp.ai.AIBaseGlobal import * +from pandac.PandaModules import * from direct.distributed import DistributedObjectAI -## from direct.directnotify import DirectNotifyGlobal -## from otp.avatar import DistributedAvatarAI +from direct.directnotify import DirectNotifyGlobal +from otp.avatar import DistributedAvatarAI # all of this is commented out because the friend manager was moved # to the OTP server # we need something for the AI DC parser to load class FriendManagerAI(DistributedObjectAI.DistributedObjectAI): - pass -## # These structures record the invitations currently being handled. -## nextContext = 0 -## invites = {} -## inviters = {} -## invitees = {} - -## # This is the length of time, in seconds, to sit on a secret guess -## # before processing it. This serves to make it difficult to guess -## # passwords at random. -## SecretDelay = 1.0 - -## # This is the length of time that should elapse before we start to -## # forget who has declined friendships from whom. -## DeclineFriendshipTimeout = 600.0 - -## notify = DirectNotifyGlobal.directNotify.newCategory("FriendManagerAI") - -## # This subclass is used to record currently outstanding -## # in-the-game invitation requests. -## class Invite: -## def __init__(self, context, inviterId, inviteeId): -## self.context = context -## self.inviterId = inviterId -## self.inviteeId = inviteeId -## self.inviter = None -## self.invitee = None -## self.inviteeKnows = 0 -## self.sendSpecialResponse = 0 - -## def __init__(self, air): -## DistributedObjectAI.DistributedObjectAI.__init__(self, air) - -## # We maintain two maps of toons who have declined -## # friendships. We add entries to map1, and every ten -## # minutes, we roll map1 into map2. This provides a -## # timeout of ten to twenty minutes for a particular -## # rejection, and also prevents the maps from growing very -## # large in memory. -## self.declineFriends1 = {} -## self.declineFriends2 = {} -## self.lastRollTime = 0 - -## def generate(self): -## DistributedObjectAI.DistributedObjectAI.generate(self) - -## # The FriendManagerAI always listens for these events, which -## # will be sent in response to secret requests to the database, -## # via the AIR. -## self.accept("makeFriendsReply", self.makeFriendsReply) -## self.accept("requestSecretReply", self.__requestSecretReply) -## self.accept("submitSecretReply", self.__submitSecretReply) - -## def delete(self): -## self.ignore("makeFriendsReply") -## self.ignore("requestSecretReply") -## self.ignore("submitSecretReply") - -## # Clean up all outstanding secret request tasks. -## taskMgr.removeTasksMatching("secret-*") - -## DistributedObjectAI.DistributedObjectAI.delete(self) - - -## ### Messages sent from inviter client to AI - -## def friendQuery(self, inviteeId): -## """friendQuery(self, int inviterId, int inviteeId) - -## Sent by the inviter to the AI to initiate a friendship -## request. -## """ -## inviterId = self.air.getAvatarIdFromSender() -## invitee = self.air.doId2do.get(inviteeId) - -## # see if the inviteeId is valid -## if not invitee: -## self.air.writeServerEvent('suspicious', inviteeId, 'FriendManagerAI.friendQuery not on list') -## return + # These structures record the invitations currently being handled. + nextContext = 0 + invites = {} + inviters = {} + invitees = {} + + # This is the length of time, in seconds, to sit on a secret guess + # before processing it. This serves to make it difficult to guess + # passwords at random. + SecretDelay = 1.0 + + # This is the length of time that should elapse before we start to + # forget who has declined friendships from whom. + DeclineFriendshipTimeout = 600.0 + + notify = DirectNotifyGlobal.directNotify.newCategory("FriendManagerAI") + + # This subclass is used to record currently outstanding + # in-the-game invitation requests. + class Invite: + def __init__(self, context, inviterId, inviteeId): + self.context = context + self.inviterId = inviterId + self.inviteeId = inviteeId + self.inviter = None + self.invitee = None + self.inviteeKnows = 0 + self.sendSpecialResponse = 0 + + def __init__(self, air): + DistributedObjectAI.DistributedObjectAI.__init__(self, air) + + # We maintain two maps of toons who have declined + # friendships. We add entries to map1, and every ten + # minutes, we roll map1 into map2. This provides a + # timeout of ten to twenty minutes for a particular + # rejection, and also prevents the maps from growing very + # large in memory. + self.declineFriends1 = {} + self.declineFriends2 = {} + self.lastRollTime = 0 + + def generate(self): + DistributedObjectAI.DistributedObjectAI.generate(self) + + # The FriendManagerAI always listens for these events, which + # will be sent in response to secret requests to the database, + # via the AIR. + self.accept("makeFriendsReply", self.makeFriendsReply) + self.accept("requestSecretReply", self.__requestSecretReply) + self.accept("submitSecretReply", self.__submitSecretReply) + + def delete(self): + self.ignore("makeFriendsReply") + self.ignore("requestSecretReply") + self.ignore("submitSecretReply") + + # Clean up all outstanding secret request tasks. + taskMgr.removeTasksMatching("secret-*") + + DistributedObjectAI.DistributedObjectAI.delete(self) + + + #Messages sent from inviter client to AI + + def friendQuery(self, inviteeId): + """friendQuery(self, int inviterId, int inviteeId) + + Sent by the inviter to the AI to initiate a friendship + request. + """ + inviterId = self.air.getAvatarIdFromSender() + invitee = self.air.doId2do.get(inviteeId) + + # see if the inviteeId is valid + if not invitee: + self.air.writeServerEvent('suspicious', inviteeId, 'FriendManagerAI.friendQuery not on list') + return -## self.notify.debug("AI: friendQuery(%d, %d)" % (inviterId, inviteeId)) -## self.newInvite(inviterId, inviteeId) + self.notify.debug("AI: friendQuery(%d, %d)" % (inviterId, inviteeId)) + self.newInvite(inviterId, inviteeId) -## def cancelFriendQuery(self, context): -## """cancelFriendQuery(self, int context) + def cancelFriendQuery(self, context): + """cancelFriendQuery(self, int context) -## Sent by the inviter to the AI to cancel a pending friendship -## request. -## """ + Sent by the inviter to the AI to cancel a pending friendship + request. + """ -## avId = self.air.getAvatarIdFromSender() -## self.notify.debug("AI: cancelFriendQuery(%d)" % (context)) - -## try: -## invite = FriendManagerAI.invites[context] -## except: -## # The client might legitimately try to cancel a context -## # that has already been cancelled. -## #self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.cancelFriendQuery unknown context') -## #FriendManagerAI.notify.warning('Message for unknown context ' + `context`) -## return - -## self.cancelInvite(invite) - - -## ### Messages sent from invitee client to AI - -## def inviteeFriendConsidering(self, response, context): -## """inviteeFriendConsidering(self, int response, int context) - -## Sent by the invitee to the AI to indicate whether the invitee -## is able to consider the request right now. + avId = self.air.getAvatarIdFromSender() + self.notify.debug("AI: cancelFriendQuery(%d)" % (context)) + + try: + invite = FriendManagerAI.invites[context] + except: + # The client might legitimately try to cancel a context + # that has already been cancelled. + #self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.cancelFriendQuery unknown context') + #FriendManagerAI.notify.warning('Message for unknown context ' + `context`) + return + + self.cancelInvite(invite) + + + #Messages sent from invitee client to AI + + def inviteeFriendConsidering(self, response, context): + """inviteeFriendConsidering(self, int response, int context) + + Sent by the invitee to the AI to indicate whether the invitee + is able to consider the request right now. -## The responses are: -## 0 - no -## 1 - yes -## 4 - the invitee is ignoring you. -## """ -## self.notify.debug("AI: inviteeFriendConsidering(%d, %d)" % (response, context)) -## avId = self.air.getAvatarIdFromSender() + The responses are: + 0 - no + 1 - yes + 4 - the invitee is ignoring you. + """ + self.notify.debug("AI: inviteeFriendConsidering(%d, %d)" % (response, context)) + avId = self.air.getAvatarIdFromSender() -## try: -## invite = FriendManagerAI.invites[context] -## except: -## self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeFriendConsidering unknown context') -## FriendManagerAI.notify.warning('Message for unknown context ' + `context`) -## return - -## if response == 1: -## self.inviteeAvailable(invite) -## else: -## self.inviteeUnavailable(invite, response) - -## def inviteeFriendResponse(self, yesNoMaybe, context): -## """inviteeFriendResponse(self, int yesNoMaybe, int context) - -## Sent by the invitee to the AI, following an affirmative -## response in inviteeFriendConsidering, to indicate whether or -## not the user decided to accept the friendship. -## """ - -## self.notify.debug("AI: inviteeFriendResponse(%d, %d)" % (yesNoMaybe, context)) -## avId = self.air.getAvatarIdFromSender() - -## try: -## invite = FriendManagerAI.invites[context] -## except: -## self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeFriendResponse unknown context') -## FriendManagerAI.notify.warning('Message for unknown context ' + `context`) -## return + try: + invite = FriendManagerAI.invites[context] + except: + self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeFriendConsidering unknown context') + FriendManagerAI.notify.warning('Message for unknown context ' + repr(context)) + return + + if response == 1: + self.inviteeAvailable(invite) + else: + self.inviteeUnavailable(invite, response) + + def inviteeFriendResponse(self, yesNoMaybe, context): + """inviteeFriendResponse(self, int yesNoMaybe, int context) + + Sent by the invitee to the AI, following an affirmative + response in inviteeFriendConsidering, to indicate whether or + not the user decided to accept the friendship. + """ + + self.notify.debug("AI: inviteeFriendResponse(%d, %d)" % (yesNoMaybe, context)) + avId = self.air.getAvatarIdFromSender() + + try: + invite = FriendManagerAI.invites[context] + except: + self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeFriendResponse unknown context') + FriendManagerAI.notify.warning('Message for unknown context ' + repr(context)) + return -## if yesNoMaybe == 1: -## self.makeFriends(invite) -## else: -## self.noFriends(invite, yesNoMaybe) + if yesNoMaybe == 1: + self.makeFriends(invite) + else: + self.noFriends(invite, yesNoMaybe) -## def inviteeAcknowledgeCancel(self, context): -## """inviteeAcknowledgeCancel(self, int context) + def inviteeAcknowledgeCancel(self, context): + """inviteeAcknowledgeCancel(self, int context) -## Sent by the invitee to the AI, in response to an -## inviteeCancelFriendQuery message. This simply acknowledges -## receipt of the message and tells the AI that it is safe to -## clean up the context. -## """ + Sent by the invitee to the AI, in response to an + inviteeCancelFriendQuery message. This simply acknowledges + receipt of the message and tells the AI that it is safe to + clean up the context. + """ -## self.notify.debug("AI: inviteeAcknowledgeCancel(%d)" % (context)) -## avId = self.air.getAvatarIdFromSender() + self.notify.debug("AI: inviteeAcknowledgeCancel(%d)" % (context)) + avId = self.air.getAvatarIdFromSender() -## try: -## invite = FriendManagerAI.invites[context] -## except: -## # The client might legitimately try to cancel a context -## # that has already been cancelled. -## #self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeAcknowledgeCancel unknown context') -## #FriendManagerAI.notify.warning('Message for unknown context ' + `context`) -## return + try: + invite = FriendManagerAI.invites[context] + except: + # The client might legitimately try to cancel a context + # that has already been cancelled. + #self.air.writeServerEvent('suspicious', avId, 'FriendManagerAI.inviteeAcknowledgeCancel unknown context') + #FriendManagerAI.notify.warning('Message for unknown context ' + `context`) + return -## self.clearInvite(invite) + self.clearInvite(invite) -## ### Messages sent from AI to inviter client + #Messages sent from AI to inviter client -## def down_friendConsidering(self, recipient, yesNoAlready, context): -## """friendConsidering(self, DistributedObject recipient, -## int yesNoAlready, int context) + def down_friendConsidering(self, recipient, yesNoAlready, context): + """friendConsidering(self, DistributedObject recipient, + int yesNoAlready, int context) -## Sent by the AI to the inviter client to indicate whether the -## invitee is able to consider the request right now. + Sent by the AI to the inviter client to indicate whether the + invitee is able to consider the request right now. -## The responses are: -## # 0 - the invitee is busy -## # 2 - the invitee is already your friend -## # 3 - the invitee is yourself -## # 4 - the invitee is ignoring you. -## # 6 - the invitee not accepting friends -## """ - -## self.sendUpdateToAvatarId(recipient, "friendConsidering", [yesNoAlready, context]) -## self.notify.debug("AI: friendConsidering(%d, %d)" % (yesNoAlready, context)) + The responses are: + # 0 - the invitee is busy + # 2 - the invitee is already your friend + # 3 - the invitee is yourself + # 4 - the invitee is ignoring you. + # 6 - the invitee not accepting friends + """ + + self.sendUpdateToAvatarId(recipient, "friendConsidering", [yesNoAlready, context]) + self.notify.debug("AI: friendConsidering(%d, %d)" % (yesNoAlready, context)) -## def down_friendResponse(self, recipient, yesNoMaybe, context): -## """friendResponse(self, DistributedOBject recipient, -## int yesNoMaybe, int context) + def down_friendResponse(self, recipient, yesNoMaybe, context): + """friendResponse(self, DistributedOBject recipient, + int yesNoMaybe, int context) -## Sent by the AI to the inviter client, following an affirmitive -## response in friendConsidering, to indicate whether or not the -## user decided to accept the friendship. -## """ - -## self.sendUpdateToAvatarId(recipient, "friendResponse", [yesNoMaybe, context]) -## self.notify.debug("AI: friendResponse(%d, %d)" % (yesNoMaybe, context)) - - - -## ### Messages sent from AI to invitee client + Sent by the AI to the inviter client, following an affirmitive + response in friendConsidering, to indicate whether or not the + user decided to accept the friendship. + """ + + self.sendUpdateToAvatarId(recipient, "friendResponse", [yesNoMaybe, context]) + self.notify.debug("AI: friendResponse(%d, %d)" % (yesNoMaybe, context)) + + + + #Messages sent from AI to invitee client -## def down_inviteeFriendQuery(self, recipient, inviterId, inviterName, -## inviterDna, context): -## """inviteeFriendQuery(self, DistributedObject recipient, -## int inviterId, string inviterName, -## AvatarDNA inviterDna, int context) + def down_inviteeFriendQuery(self, recipient, inviterId, inviterName, + inviterDna, context): + """inviteeFriendQuery(self, DistributedObject recipient, + int inviterId, string inviterName, + AvatarDNA inviterDna, int context) -## Sent by the AI to the invitee client to initiate a friendship -## request from the indiciated inviter. The invitee client -## should respond immediately with inviteeFriendConsidering, to -## indicate whether the invitee is able to consider the -## invitation right now. -## """ + Sent by the AI to the invitee client to initiate a friendship + request from the indiciated inviter. The invitee client + should respond immediately with inviteeFriendConsidering, to + indicate whether the invitee is able to consider the + invitation right now. + """ -## self.sendUpdateToAvatarId(recipient, "inviteeFriendQuery", -## [inviterId, inviterName, -## inviterDna.makeNetString(), context]) -## self.notify.debug("AI: inviteeFriendQuery(%d, %s, dna, %d)" % (inviterId, inviterName, context)) + self.sendUpdateToAvatarId(recipient, "inviteeFriendQuery", + [inviterId, inviterName, + inviterDna.makeNetString(), context]) + self.notify.debug("AI: inviteeFriendQuery(%d, %s, dna, %d)" % (inviterId, inviterName, context)) -## def down_inviteeCancelFriendQuery(self, recipient, context): -## """inviteeCancelFriendQuery(self, DistributedObject recipient, -## int context) + def down_inviteeCancelFriendQuery(self, recipient, context): + """inviteeCancelFriendQuery(self, DistributedObject recipient, + int context) -## Sent by the AI to the invitee client to initiate that the -## inviter has rescinded his/her previous invitation by clicking -## the cancel button. -## """ + Sent by the AI to the invitee client to initiate that the + inviter has rescinded his/her previous invitation by clicking + the cancel button. + """ -## self.sendUpdateToAvatarId(recipient, "inviteeCancelFriendQuery", [context]) -## self.notify.debug("AI: inviteeCancelFriendQuery(%d)" % (context)) + self.sendUpdateToAvatarId(recipient, "inviteeCancelFriendQuery", [context]) + self.notify.debug("AI: inviteeCancelFriendQuery(%d)" % (context)) -## ### Messages involving secrets + #Messages involving secrets -## def requestSecret(self): -## """requestSecret(self) + def requestSecret(self): + """requestSecret(self) -## Sent by the client to the AI to request a new "secret" for the -## user. -## """ -## avId = self.air.getAvatarIdFromSender() -## self.air.requestSecret(avId) + Sent by the client to the AI to request a new "secret" for the + user. + """ + avId = self.air.getAvatarIdFromSender() + self.air.requestSecret(avId) -## def down_requestSecretResponse(self, recipient, result, secret): -## """requestSecret(self, int8 result, string secret) + def down_requestSecretResponse(self, recipient, result, secret): + """requestSecret(self, int8 result, string secret) -## Sent by the AI to the client in response to requestSecret(). -## result is one of: + Sent by the AI to the client in response to requestSecret(). + result is one of: -## 0 - Too many secrets outstanding. Try again later. -## 1 - Success. The new secret is supplied. + 0 - Too many secrets outstanding. Try again later. + 1 - Success. The new secret is supplied. -## """ -## self.sendUpdateToAvatarId(recipient, 'requestSecretResponse', [result, secret]) + """ + self.sendUpdateToAvatarId(recipient, 'requestSecretResponse', [result, secret]) -## def submitSecret(self, secret): -## """submitSecret(self, string secret) + def submitSecret(self, secret): + """submitSecret(self, string secret) -## Sent by the client to the AI to submit a "secret" typed in by -## the user. -## """ -## avId = self.air.getAvatarIdFromSender() + Sent by the client to the AI to submit a "secret" typed in by + the user. + """ + avId = self.air.getAvatarIdFromSender() -## # We have to sit on this request for a few seconds before -## # processing it. This delay is solely to discourage password -## # guessing. -## taskName = "secret-" + str(avId) -## taskMgr.remove(taskName) -## if FriendManagerAI.SecretDelay: -## taskMgr.doMethodLater(FriendManagerAI.SecretDelay, -## self.continueSubmission, -## taskName, -## extraArgs = (avId, secret)) -## else: -## # No delay -## self.continueSubmission(avId, secret) - -## def continueSubmission(self, avId, secret): -## """continueSubmission(self, avId, secret) -## Finishes the work of submitSecret, a short time later. -## """ -## self.air.submitSecret(avId, secret) - -## def down_submitSecretResponse(self, recipient, result, avId): -## """submitSecret(self, int8 result, int32 avId) - -## Sent by the AI to the client in response to submitSecret(). -## result is one of: - -## 0 - Failure. The secret is unknown or has timed out. -## 1 - Success. You are now friends with the indicated avId. -## 2 - Failure. One of the avatars has too many friends already. -## 3 - Failure. You just used up your own secret. - -## """ -## self.sendUpdateToAvatarId(recipient, 'submitSecretResponse', [result, avId]) - - -## ### Support methods - -## def newInvite(self, inviterId, inviteeId): -## context = FriendManagerAI.nextContext -## FriendManagerAI.nextContext += 1 - -## invite = FriendManagerAI.Invite(context, inviterId, inviteeId) -## FriendManagerAI.invites[context] = invite - -## # If the invitee has previously (recently) declined a -## # friendship from this inviter, don't ask again. -## previous = self.__previousResponse(inviteeId, inviterId) -## if previous != None: -## self.inviteeUnavailable(invite, previous + 10) -## return - -## # If the invitee is presently being invited by someone else, -## # we don't even have to bother him. -## if FriendManagerAI.invitees.has_key(inviteeId): -## self.inviteeUnavailable(invite, 0) -## return - -## if invite.inviterId == invite.inviteeId: -## # You can't be friends with yourself. -## self.inviteeUnavailable(invite, 3) -## return - -## # If the inviter is already involved in some other context, -## # that one is now void. -## if FriendManagerAI.inviters.has_key(inviterId): -## self.cancelInvite(FriendManagerAI.inviters[inviterId]) - -## FriendManagerAI.inviters[inviterId] = invite -## FriendManagerAI.invitees[inviteeId] = invite - -## #self.air.queryObject(inviteeId, self.gotInvitee, invite) -## #self.air.queryObject(inviterId, self.gotInviter, invite) -## invite.inviter = self.air.doId2do.get(inviterId) -## invite.invitee = self.air.doId2do.get(inviteeId) -## if invite.inviter and invite.invitee: -## self.beginInvite(invite) - - -## # def gotInviter(self, handle, invite): -## # if not invite.inviter: -## # invite.inviter = handle -## # if invite.invitee: -## # self.beginInvite(invite) - -## # def gotInvitee(self, handle, invite): -## # if not invite.invitee: -## # invite.invitee = handle -## # if invite.inviter: -## # self.beginInvite(invite) - -## def beginInvite(self, invite): -## # Ask the invitee if he is available to consider being -## # someone's friend--that is, that he's not busy playing a -## # minigame or something. - -## invite.inviteeKnows = 1 -## self.down_inviteeFriendQuery(invite.inviteeId, invite.inviterId, -## invite.inviter.getName(), -## invite.inviter.dna, invite.context) - -## def inviteeUnavailable(self, invite, code): -## # Cannot make the request for one of these reasons: -## # -## # 0 - the invitee is busy -## # 2 - the invitee is already your friend -## # 3 - the invitee is yourself -## # 4 - the invitee is ignoring you. -## # 6 - the invitee not accepting friends -## self.down_friendConsidering(invite.inviterId, code, invite.context) - -## # That ends the invitation. -## self.clearInvite(invite) - -## def inviteeAvailable(self, invite): -## # The invitee is considering our friendship request. -## self.down_friendConsidering(invite.inviterId, 1, invite.context) - - -## def noFriends(self, invite, yesNoMaybe): -## # The invitee declined to make friends. -## # -## # 0 - no -## # 2 - unable to answer; e.g. entered a minigame or something. -## # 3 - the invitee has too many friends already. - -## if yesNoMaybe == 0 or yesNoMaybe == 3: -## # The user explictly said no or has too many friends. -## # Disallow this guy from asking again for the next ten -## # minutes or so. - -## if not self.declineFriends1.has_key(invite.inviteeId): -## self.declineFriends1[invite.inviteeId] = {} -## self.declineFriends1[invite.inviteeId][invite.inviterId] = yesNoMaybe - -## self.down_friendResponse(invite.inviterId, yesNoMaybe, invite.context) -## self.clearInvite(invite) - -## def makeFriends(self, invite): -## # The invitee agreed to make friends. -## self.air.makeFriends(invite.inviteeId, invite.inviterId, 0, -## invite.context) -## self.down_friendResponse(invite.inviterId, 1, invite.context) -## # The reply will clear the context out when it comes in. - -## def makeSpecialFriends(self, requesterId, avId): -## # The "requester" has typed in a codeword that successfully -## # matches a friend in the world. Attempt to make the -## # friendship (with chat permission), and send back a code -## # indicating success or failure. - -## # Get a special Invite structure just for this purpose. -## context = FriendManagerAI.nextContext -## FriendManagerAI.nextContext += 1 - -## invite = FriendManagerAI.Invite(context, requesterId, avId) -## FriendManagerAI.invites[context] = invite - -## invite.sendSpecialResponse = 1 - -## self.air.makeFriends(invite.inviteeId, invite.inviterId, 1, -## invite.context) - -## def clearInvite(self, invite): -## try: -## del FriendManagerAI.invites[invite.context] -## except: -## pass - -## try: -## del FriendManagerAI.inviters[invite.inviterId] -## except: -## pass - -## try: -## del FriendManagerAI.invitees[invite.inviteeId] -## except: -## pass - -## def cancelInvite(self, invite): -## if invite.inviteeKnows: -## self.down_inviteeCancelFriendQuery(invite.inviteeId, invite.context) - -## invite.inviteeKnows = 0 - - -## def makeFriendsReply(self, result, context): -## try: -## invite = FriendManagerAI.invites[context] -## except: -## FriendManagerAI.notify.warning('Message for unknown context ' + `context`) -## return - -## if result: -## # By now, the server has OK'ed the friends transaction. -## # Update our internal bookkeeping so we remember who's -## # friends with whom. This is mainly useful for correct -## # accounting of the make-a-friend quest. -## invitee = self.air.doId2do.get(invite.inviteeId) -## inviter = self.air.doId2do.get(invite.inviterId) -## if invitee != None: -## invitee.extendFriendsList(invite.inviterId, invite.sendSpecialResponse) -## self.air.questManager.toonMadeFriend(invitee, inviter) - -## #inviter = self.air.doId2do.get(invite.inviterId) -## if inviter != None: -## inviter.extendFriendsList(invite.inviteeId, invite.sendSpecialResponse) -## self.air.questManager.toonMadeFriend(inviter, invitee) - -## if invite.sendSpecialResponse: -## # If this flag is set, the "invite" was generated via the -## # codeword system, instead of through the normal path. In -## # this case, we need to send the acknowledgement back to -## # the client. - -## if result: -## # Success! Send a result code of 1. -## result = 1 -## else: -## # Failure, some friends list problem. Result code of 2. -## result = 2 - -## self.down_submitSecretResponse(invite.inviterId, result, -## invite.inviteeId) - -## # Also send a notification to the other avatar, if he's on. -## avatar = DistributedAvatarAI.DistributedAvatarAI(self.air) -## avatar.doId = invite.inviteeId -## avatar.d_friendsNotify(invite.inviterId, 2) - -## self.clearInvite(invite) - - - -## def __requestSecretReply(self, result, secret, requesterId): -## self.notify.debug("request secret result = %d, secret = '%s', requesterId = %d" % (result, secret, requesterId)) -## self.down_requestSecretResponse(requesterId, result, secret) - - -## def __submitSecretReply(self, result, secret, requesterId, avId): -## self.notify.debug("submit secret result = %d, secret = '%s', requesterId = %d, avId = %d" % (result, secret, requesterId, avId)) -## if result == 1: -## # We successfully matched the secret, so we should do a -## # few more sanity checks and then try to make friends. -## if avId == requesterId: -## # This is the requester's own secret! -## result = 3 -## else: -## # Ok, make us special friends. -## self.makeSpecialFriends(requesterId, avId) - -## # In this case, the response gets sent after the -## # friends transaction completes. -## return - -## self.down_submitSecretResponse(requesterId, result, avId) - -## def __previousResponse(self, inviteeId, inviterId): -## # Return the previous rejection code if this invitee has -## # previously (recently) declined a friendship from this -## # inviter, or None if there was no previous rejection. - -## now = globalClock.getRealTime() -## if now - self.lastRollTime >= self.DeclineFriendshipTimeout: -## self.declineFriends2 = self.declineFriends1 -## self.declineFriends1 = {} - -## # Now, is the invitee/inviter combination present in either -## # map? -## previous = None -## if self.declineFriends1.has_key(inviteeId): -## previous = self.declineFriends1[inviteeId].get(inviterId) -## if previous != None: -## return previous - -## if self.declineFriends2.has_key(inviteeId): -## previous = self.declineFriends2[inviteeId].get(inviterId) -## if previous != None: -## return previous - -## # Nope, go ahead and ask. -## return None + # We have to sit on this request for a few seconds before + # processing it. This delay is solely to discourage password + # guessing. + taskName = "secret-" + str(avId) + taskMgr.remove(taskName) + if FriendManagerAI.SecretDelay: + taskMgr.doMethodLater(FriendManagerAI.SecretDelay, + self.continueSubmission, + taskName, + extraArgs = (avId, secret)) + else: + # No delay + self.continueSubmission(avId, secret) + + def continueSubmission(self, avId, secret): + """continueSubmission(self, avId, secret) + Finishes the work of submitSecret, a short time later. + """ + self.air.submitSecret(avId, secret) + + def down_submitSecretResponse(self, recipient, result, avId): + """submitSecret(self, int8 result, int32 avId) + + Sent by the AI to the client in response to submitSecret(). + result is one of: + + 0 - Failure. The secret is unknown or has timed out. + 1 - Success. You are now friends with the indicated avId. + 2 - Failure. One of the avatars has too many friends already. + 3 - Failure. You just used up your own secret. + + """ + self.sendUpdateToAvatarId(recipient, 'submitSecretResponse', [result, avId]) + + + #Support methods + + def newInvite(self, inviterId, inviteeId): + context = FriendManagerAI.nextContext + FriendManagerAI.nextContext += 1 + + invite = FriendManagerAI.Invite(context, inviterId, inviteeId) + FriendManagerAI.invites[context] = invite + + # If the invitee has previously (recently) declined a + # friendship from this inviter, don't ask again. + previous = self.__previousResponse(inviteeId, inviterId) + if previous != None: + self.inviteeUnavailable(invite, previous + 10) + return + + # If the invitee is presently being invited by someone else, + # we don't even have to bother him. + if inviteeId in FriendManagerAI.invitees: + self.inviteeUnavailable(invite, 0) + return + + if invite.inviterId == invite.inviteeId: + # You can't be friends with yourself. + self.inviteeUnavailable(invite, 3) + return + + # If the inviter is already involved in some other context, + # that one is now void. + if inviterId in FriendManagerAI.inviters: + self.cancelInvite(FriendManagerAI.inviters[inviterId]) + + FriendManagerAI.inviters[inviterId] = invite + FriendManagerAI.invitees[inviteeId] = invite + + #self.air.queryObject(inviteeId, self.gotInvitee, invite) + #self.air.queryObject(inviterId, self.gotInviter, invite) + invite.inviter = self.air.doId2do.get(inviterId) + invite.invitee = self.air.doId2do.get(inviteeId) + if invite.inviter and invite.invitee: + self.beginInvite(invite) + + +# def gotInviter(self, handle, invite): +# if not invite.inviter: +# invite.inviter = handle +# if invite.invitee: +# self.beginInvite(invite) + +# def gotInvitee(self, handle, invite): +# if not invite.invitee: +# invite.invitee = handle +# if invite.inviter: +# self.beginInvite(invite) + + def beginInvite(self, invite): + # Ask the invitee if he is available to consider being + # someone's friend--that is, that he's not busy playing a + # minigame or something. + + invite.inviteeKnows = 1 + self.down_inviteeFriendQuery(invite.inviteeId, invite.inviterId, + invite.inviter.getName(), + invite.inviter.dna, invite.context) + + def inviteeUnavailable(self, invite, code): + # Cannot make the request for one of these reasons: + # + # 0 - the invitee is busy + # 2 - the invitee is already your friend + # 3 - the invitee is yourself + # 4 - the invitee is ignoring you. + # 6 - the invitee not accepting friends + self.down_friendConsidering(invite.inviterId, code, invite.context) + + # That ends the invitation. + self.clearInvite(invite) + + def inviteeAvailable(self, invite): + # The invitee is considering our friendship request. + self.down_friendConsidering(invite.inviterId, 1, invite.context) + + + def noFriends(self, invite, yesNoMaybe): + # The invitee declined to make friends. + # + # 0 - no + # 2 - unable to answer; e.g. entered a minigame or something. + # 3 - the invitee has too many friends already. + + if yesNoMaybe == 0 or yesNoMaybe == 3: + # The user explictly said no or has too many friends. + # Disallow this guy from asking again for the next ten + # minutes or so. + + if invite.inviteeId not in self.declineFriends1: + self.declineFriends1[invite.inviteeId] = {} + self.declineFriends1[invite.inviteeId][invite.inviterId] = yesNoMaybe + + self.down_friendResponse(invite.inviterId, yesNoMaybe, invite.context) + self.clearInvite(invite) + + def makeFriends(self, invite): + # The invitee agreed to make friends. + self.air.makeFriends(invite.inviteeId, invite.inviterId, 0, + invite.context) + self.down_friendResponse(invite.inviterId, 1, invite.context) + # The reply will clear the context out when it comes in. + + def makeSpecialFriends(self, requesterId, avId): + # The "requester" has typed in a codeword that successfully + # matches a friend in the world. Attempt to make the + # friendship (with chat permission), and send back a code + # indicating success or failure. + + # Get a special Invite structure just for this purpose. + context = FriendManagerAI.nextContext + FriendManagerAI.nextContext += 1 + + invite = FriendManagerAI.Invite(context, requesterId, avId) + FriendManagerAI.invites[context] = invite + + invite.sendSpecialResponse = 1 + + self.air.makeFriends(invite.inviteeId, invite.inviterId, 1, + invite.context) + + def clearInvite(self, invite): + try: + del FriendManagerAI.invites[invite.context] + except: + pass + + try: + del FriendManagerAI.inviters[invite.inviterId] + except: + pass + + try: + del FriendManagerAI.invitees[invite.inviteeId] + except: + pass + + def cancelInvite(self, invite): + if invite.inviteeKnows: + self.down_inviteeCancelFriendQuery(invite.inviteeId, invite.context) + + invite.inviteeKnows = 0 + + + def makeFriendsReply(self, result, context): + try: + invite = FriendManagerAI.invites[context] + except: + FriendManagerAI.notify.warning('Message for unknown context ' + repr(context)) + return + + if result: + # By now, the server has OK'ed the friends transaction. + # Update our internal bookkeeping so we remember who's + # friends with whom. This is mainly useful for correct + # accounting of the make-a-friend quest. + invitee = self.air.doId2do.get(invite.inviteeId) + inviter = self.air.doId2do.get(invite.inviterId) + if invitee != None: + invitee.extendFriendsList(invite.inviterId, invite.sendSpecialResponse) + self.air.questManager.toonMadeFriend(invitee, inviter) + + #inviter = self.air.doId2do.get(invite.inviterId) + if inviter != None: + inviter.extendFriendsList(invite.inviteeId, invite.sendSpecialResponse) + self.air.questManager.toonMadeFriend(inviter, invitee) + + if invite.sendSpecialResponse: + # If this flag is set, the "invite" was generated via the + # codeword system, instead of through the normal path. In + # this case, we need to send the acknowledgement back to + # the client. + + if result: + # Success! Send a result code of 1. + result = 1 + else: + # Failure, some friends list problem. Result code of 2. + result = 2 + + self.down_submitSecretResponse(invite.inviterId, result, + invite.inviteeId) + + # Also send a notification to the other avatar, if he's on. + avatar = DistributedAvatarAI.DistributedAvatarAI(self.air) + avatar.doId = invite.inviteeId + avatar.d_friendsNotify(invite.inviterId, 2) + + self.clearInvite(invite) + + + + def __requestSecretReply(self, result, secret, requesterId): + self.notify.debug("request secret result = %d, secret = '%s', requesterId = %d" % (result, secret, requesterId)) + self.down_requestSecretResponse(requesterId, result, secret) + + + def __submitSecretReply(self, result, secret, requesterId, avId): + self.notify.debug("submit secret result = %d, secret = '%s', requesterId = %d, avId = %d" % (result, secret, requesterId, avId)) + if result == 1: + # We successfully matched the secret, so we should do a + # few more sanity checks and then try to make friends. + if avId == requesterId: + # This is the requester's own secret! + result = 3 + else: + # Ok, make us special friends. + self.makeSpecialFriends(requesterId, avId) + + # In this case, the response gets sent after the + # friends transaction completes. + return + + self.down_submitSecretResponse(requesterId, result, avId) + + def __previousResponse(self, inviteeId, inviterId): + # Return the previous rejection code if this invitee has + # previously (recently) declined a friendship from this + # inviter, or None if there was no previous rejection. + + now = globalClock.getRealTime() + if now - self.lastRollTime >= self.DeclineFriendshipTimeout: + self.declineFriends2 = self.declineFriends1 + self.declineFriends1 = {} + + # Now, is the invitee/inviter combination present in either + # map? + previous = None + if inviteeId in self.declineFriends1: + previous = self.declineFriends1[inviteeId].get(inviterId) + if previous != None: + return previous + + if inviteeId in self.declineFriends2: + previous = self.declineFriends2[inviteeId].get(inviterId) + if previous != None: + return previous + + # Nope, go ahead and ask. + return None diff --git a/otp/src/friends/FriendSecret.py b/otp/src/friends/FriendSecret.py index 465f8b9e..a7b5f56f 100644 --- a/otp/src/friends/FriendSecret.py +++ b/otp/src/friends/FriendSecret.py @@ -788,7 +788,7 @@ def __gotAccountSecret(self, secret): def __rejectAccountSecret(self, reason): assert self.notify.debugCall() - print "## rejectAccountSecret: reason = ", reason + print("## rejectAccountSecret: reason = ", reason) self.ignore(OTPGlobals.PlayerFriendNewSecretEvent) self.ignore(OTPGlobals.PlayerFriendRejectNewSecretEvent) # TODO: handle more reasons @@ -901,7 +901,7 @@ def __useAccountSecret(self, avId, friendInfo): def __rejectUseAccountSecret(self, reason): assert self.notify.debugCall("reason = %s" % reason) - print "## rejectUseAccountSecret: reason = ", reason + print("## rejectUseAccountSecret: reason = ", reason) self.ignore(OTPGlobals.PlayerFriendUpdateEvent) self.ignore(OTPGlobals.PlayerFriendRejectUseSecretEvent) diff --git a/otp/src/friends/GuildDB.py b/otp/src/friends/GuildDB.py index c19cdeb5..a0872271 100644 --- a/otp/src/friends/GuildDB.py +++ b/otp/src/friends/GuildDB.py @@ -86,7 +86,7 @@ def __init__(self,host,port,user,passwd,dbname): cursor.execute("CREATE DATABASE `%s`" % self.dbname) if __debug__: self.notify.debug("Database '%s' did not exist, created a new one!" % self.dbname) - except _mysql_exceptions.ProgrammingError,e: + except _mysql_exceptions.ProgrammingError as e: pass cursor.execute("USE `%s`" % self.dbname) @@ -97,14 +97,14 @@ def __init__(self,host,port,user,passwd,dbname): cursor.execute("CREATE TABLE `guildinfo` (`gid` INT(32) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(21), `wantname` VARCHAR(21), `namestatus` INT(8), `create_date` DATETIME)") if __debug__: self.notify.debug("Table guildinfo did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: pass try: cursor.execute("CREATE TABLE `member` (`gid` INT(32) UNSIGNED NOT NULL, `avid` INT(32) UNSIGNED NOT NULL PRIMARY KEY, `rank` INT(8) NOT NULL, FOREIGN KEY (`gid`) REFERENCES `guildinfo` (`gid`))") if __debug__: self.notify.debug("Table member did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: pass try: @@ -113,7 +113,7 @@ def __init__(self,host,port,user,passwd,dbname): cursor.execute("CREATE INDEX `avatarid` on guildtokens (avid)") if __debug__: self.notify.debug("Table guildtokens did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: pass # Commented out next table create function for the time being. @@ -164,13 +164,13 @@ def createGuild(self, avId, isRetry=False): guildId = cursor.fetchall()[0][0] self.addMember(guildId, avId, 3) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry: raise e else: self.reconnect() self.createGuild(avId,True) - except _mysql_exceptions.IntegrityError,e: + except _mysql_exceptions.IntegrityError as e: self.notify.warning("IntegrityError creating new guild for avId %s: %s. Rolling back." % (avId,e)) from direct.showbase import PythonUtil self.notify.warning(str(PythonUtil.StackTrace())) @@ -178,7 +178,7 @@ def createGuild(self, avId, isRetry=False): def memberCount(self, guildId): if not self.sqlAvailable: - print "Guild DB Unavailable" + print("Guild DB Unavailable") return 99999 try: @@ -186,16 +186,16 @@ def memberCount(self, guildId): cursor.execute("SELECT * FROM `member` where `gid` = %s" , guildId) stuff = cursor.fetchall() return len(stuff) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() return self.memberCount(guildId) - print "Guild DB failed member Count for ", guildId + print("Guild DB failed member Count for ", guildId) return 9999 def verifyGuild(self, guildId): if not self.sqlAvailable: - print "Guild DB Unavailable" + print("Guild DB Unavailable") return False try: @@ -206,14 +206,14 @@ def verifyGuild(self, guildId): return True else: return False - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() return self.verifyGuild(guildId) def queryStatus(self, avatarId): if not self.sqlAvailable: - print "Guild DB Unavailable" + print("Guild DB Unavailable") return 0, "DB Unavailable", 0 try: @@ -243,7 +243,7 @@ def queryStatus(self, avatarId): change = 3 else: change = 0 - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() return self.queryStatus(avatarId) @@ -259,7 +259,7 @@ def getName(self, guildId): cursor.execute("SELECT * FROM `guildinfo` where `gid` = %s" , guildId) stuff = cursor.fetchall() return stuff[0][1] - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.getName(guildId) @@ -304,7 +304,7 @@ def setWantName(self, guildId, wantname): self.db.commit() return success - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() return self.setWantName(guildId, wantname) @@ -318,7 +318,7 @@ def getWantName(self, guildId): cursor.execute("SELECT * FROM `guildinfo` where `gid` = %s" , guildId) stuff = cursor.fetchall() return stuff[0][2] - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.getWantName(guildId) @@ -337,7 +337,7 @@ def approveName(self, guildId): cursor.execute("UPDATE `guildinfo` SET `name` = %s WHERE `gid` = %s" , (wantname, guildId)) cursor.execute("UPDATE `guildinfo` SET `namestatus` = %s WHERE `gid` = %s" , (APPROVE_FLAG, guildId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.approveName(guildId) @@ -354,7 +354,7 @@ def rejectName(self, guildId): cursor.execute("UPDATE `guildinfo` SET `wantname` = 'Rejected' WHERE `gid` = %s" , (guildId)) cursor.execute("UPDATE `guildinfo` SET `namestatus` = %s WHERE `gid` = %s" , (DENY_FLAG, guildId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.rejectName(guildId) @@ -367,7 +367,7 @@ def nameProcessed(self, guildId, newval): try: cursor.execute("UPDATE `guildinfo` SET `namestatus` = %s WHERE `gid` = %s" , (newval, guildId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.nameProcessed(guildId, newval) @@ -384,12 +384,12 @@ def addMember(self, guildId, avId, rank): cursor = self.db.cursor() cursor.execute("INSERT INTO `member` VALUES (%s, %s, %s)" , (guildId, avId, rank)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "GuildDB::addMember - reconnect" + print("GuildDB::addMember - reconnect") self.addMember(guildId, avId, rank) return - except _mysql_exceptions.IntegrityError,e: + except _mysql_exceptions.IntegrityError as e: self.notify.warning("IntegrityError adding avId %s to guild %s: %s. Rolling back." % (avId,guildId,e)) from direct.showbase import PythonUtil self.notify.warning(str(PythonUtil.StackTrace())) @@ -409,7 +409,7 @@ def removeMember(self, avId, guildId, guildRank): cursor.execute("UPDATE `guildinfo` SET `wantname` = %s WHERE `gid` = %s" , (0, guildId)) cursor.execute("UPDATE `guildinfo` SET `namestatus` = %s WHERE `gid` = %s" , (NOACTION_FLAG, guildId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.removeMember(avId) return @@ -424,7 +424,7 @@ def removeGuild(self, guildId): cursor.execute("DELETE FROM `guildtokens` WHERE `gid` = %s" , guildId) cursor.execute("DELETE FROM `guildinfo` WHERE `gid` = %s", guildId) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.removeGuild(guildId) return @@ -438,7 +438,7 @@ def changeRank(self, avId, rank): try: cursor.execute("UPDATE `member` SET `rank` = %s WHERE `avId` = %s" , (rank, avId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.changeRank(avId, rank) @@ -454,9 +454,9 @@ def getMembers(self, guildId): cursor.execute("SELECT * FROM `member` where `gid` = %s" , guildId) members = cursor.fetchall() return members - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error" + print("DEBUG - Operational Error") return self.getMembers(guildId) def genToken(self): @@ -486,9 +486,9 @@ def isTokenUnique(self, token): return 1 else: return 0 - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error" + print("DEBUG - Operational Error") return self.isTokenUnique(token) def redeemToken(self, token, avId): @@ -507,9 +507,9 @@ def redeemToken(self, token, avId): pass else: raise Exception("INVALID_TOKEN") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error" + print("DEBUG - Operational Error") return self.redeemToken(token, avId) @@ -554,7 +554,7 @@ def deleteFriendToken(self, token): cursor = self.db.cursor() cursor.execute("DELETE FROM `guildtokens` WHERE `tokenid` = %s" , token) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.deleteFriendToken(token) return @@ -580,9 +580,9 @@ def checkForTooManyTokens(self, avId): else: return False - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error - Checking for Too Many Tokens from AVID" + print("DEBUG - Operational Error - Checking for Too Many Tokens from AVID") return self.checkForTooManyTokens(avId) def getFriendToken(self, guildId, avId, ttl = 10): @@ -638,9 +638,9 @@ def getFriendToken(self, guildId, avId, ttl = 10): cursor = self.db.cursor() cursor.execute("INSERT INTO `guildtokens` VALUES (%s, %s, %s, %s, %s, NULL)", (ourToken, date_time, ttl, guildId, avId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "GuildDB::getFriendToken Error " + print("GuildDB::getFriendToken Error ") self.getFriendToken(guildId, avId, ttl) # Step Four: @@ -656,7 +656,7 @@ def changeTokenRValue(self, avatarId, tokenString, rValue): cursor = self.db.cursor() cursor.execute("UPDATE `guildtokens` SET `rcount` = %s WHERE `avid` = %s AND `tokenid` = %s", (rValue, avatarId, tokenString)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.changeTokenRValue(avatarId, tokenString, rValue) self.notify.debug('Guild Token (%s) rValue (%s) Updated for %s' % (tokenString, rValue, avatarId)) @@ -669,7 +669,7 @@ def decRCountInDB(self, token, avId, newRCount): try: cursor.execute("UPDATE `guildtokens` SET `rcount` = %s WHERE `tokenid` = %s AND `avid` = %s", (newRCount, token, avId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() self.decRCountInDB(token, avId, newRCount) @@ -690,9 +690,9 @@ def tokenDeleteSQLCall(self, task): cursor.execute("DELETE FROM `guildtokens` WHERE(`createtime` + INTERVAL `ttl` DAY) < NOW() AND `rcount` = NULL ORDER BY `createtime` LIMIT 100") self.db.commit() self.notify.debug('Executing expired token cleanup in DB. Deleting up to 100 expired/old tokens') - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "GuildDB::tokenDeleteSQLCall Error " + print("GuildDB::tokenDeleteSQLCall Error ") self.tokenDeleteSQLCall(task) return Task.again @@ -713,9 +713,9 @@ def checkForUnlimitedUseToken(self, avId): else: return entries[0][0] - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error - checkForUnlimitedUseToken" + print("DEBUG - Operational Error - checkForUnlimitedUseToken") return self.checkForUnlimitedUseToken(avId) def returnLimitedUseTokens(self, avId): @@ -733,9 +733,9 @@ def returnLimitedUseTokens(self, avId): entries = cursor.fetchall() recCount = len(entries) return recCount - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Operational Error - returnLimitedUseTokens" + print("DEBUG - Operational Error - returnLimitedUseTokens") return self.returnLimitedUseTokens(avId) def clearLimitedUseTokens(self, avId): @@ -748,9 +748,9 @@ def clearLimitedUseTokens(self, avId): try: cursor.execute("DELETE FROM `guildtokens` WHERE `avid` = %s AND (`rcount` != -1 OR `rcount` IS NULL)", (avId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Error in clearLimitedUseTokens - reconnecting to DB" + print("DEBUG - Error in clearLimitedUseTokens - reconnecting to DB") self.clearLimitedUseTokens(avId) return @@ -764,9 +764,9 @@ def clearPermUseTokens(self, avId): try: cursor.execute("DELETE FROM `guildtokens` WHERE `avid` = %s AND `rcount` = -1", (avId)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - Error in clearPermUseTokens - reconnecting to DB" + print("DEBUG - Error in clearPermUseTokens - reconnecting to DB") self.clearPermUseTokens(avId) return @@ -781,9 +781,9 @@ def suspendToken(self, avId, token): try: cursor.execute("UPDATE `guildtokens` SET `rcount` = -2 WHERE `avid` = %s AND `tokenid` = %s", (avId, token)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - reconnecting to DB in suspendToken" + print("DEBUG - reconnecting to DB in suspendToken") self.suspendToken(avId, token) return @@ -798,9 +798,9 @@ def reEnableToken(self, avId, token): try: cursor.execute("UPDATE `guildtokens` SET `rcount` = -1 WHERE `avid` = %s AND `tokenid` = %s", (avId, token)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.reconnect() - print "DEBUG - reconnecting to DB in reEnableToken" + print("DEBUG - reconnecting to DB in reEnableToken") self.reEnableToken(avId, token) return diff --git a/otp/src/friends/GuildManager.py b/otp/src/friends/GuildManager.py index a2b47860..01582948 100644 --- a/otp/src/friends/GuildManager.py +++ b/otp/src/friends/GuildManager.py @@ -11,7 +11,7 @@ GUILDRANK_MEMBER = 1 -import Queue +import queue class GuildMemberInfo(AvatarHandle): def __init__(self, name, isOnline, rank, bandId): @@ -279,19 +279,19 @@ def guildNameChange(self, guildName, changeStatus): base.localAvatar.guildNameChange(guildName, changeStatus) def guildNameUpdate(self, avatarId, guildName): - print "DEBUG - guildNameUpdate for ", avatarId, " to ", guildName + print("DEBUG - guildNameUpdate for ", avatarId, " to ", guildName) def invitationFrom(self, avatarId, avatarName, guildId, guildName): - print "GM invitationFrom %s(%d)" % (avatarName,avatarId) + print("GM invitationFrom %s(%d)" % (avatarName,avatarId)) if hasattr(base, "localAvatar"): base.localAvatar.guiMgr.handleGuildInvitation(avatarId, avatarName, guildId, guildName) def retractInvite(self,avatarId): - print "GM retraction" + print("GM retraction") def guildAcceptInvite(self, avatarId): # Tell ourselves the person we are inviting accepted us - print "sending accept event" + print("sending accept event") messenger.send(OTPGlobals.GuildAcceptInviteEvent,[avatarId]) def leaderboardTopTen(self, stuff): diff --git a/otp/src/friends/GuildManagerUD.py b/otp/src/friends/GuildManagerUD.py index 79388e4b..77737682 100644 --- a/otp/src/friends/GuildManagerUD.py +++ b/otp/src/friends/GuildManagerUD.py @@ -1,4 +1,4 @@ -from itertools import izip + from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobalUD from otp.distributed import OtpDoGlobals from otp.ai import AIMsgTypes @@ -100,14 +100,14 @@ def __init__(self, air): def tallyFunction(self,funcName): if funcName not in self.funcTally: self.funcTally[funcName] = 1 - funcs = self.funcTally.keys() + funcs = list(self.funcTally.keys()) funcs.sort() self.notify.info("funcs tallied: %s" % funcs) else: self.funcTally[funcName] += 1 def logFuncTally(self,task): - funcs = self.funcTally.keys() + funcs = list(self.funcTally.keys()) funcs.sort() str = ["%s" % self.funcTally[f] for f in funcs] str = string.join(str," ") @@ -127,7 +127,7 @@ def announceGenerate(self): def delete(self): assert self.notify.debugCall() self.ignoreAll() - for i in self.asyncRequests.values(): + for i in list(self.asyncRequests.values()): i.delete() DistributedObjectGlobalUD.delete(self) @@ -193,7 +193,7 @@ def _sendFinishedList(self, player): if guildInfo: if 0: # alternate coolness - guildmates, haveData = izip(*guildInfo) + guildmates, haveData = zip(*guildInfo) else: guildmates = [x[0] for x in guildInfo] haveData = [x[1] for x in guildInfo] @@ -233,7 +233,7 @@ def _sendFinishedLists(self, arrivingPlayer): that list. """ finishedLists = [] - for player,guildInfo in self.pendingSends.iteritems(): + for player,guildInfo in self.pendingSends.items(): send = True for infoItem in guildInfo: [(guildId,avId,rank), haveData] = infoItem @@ -294,7 +294,7 @@ def memberInfoFailure(self, avatarId, context): self.db.removeMember(avatarId, gId, rank) - for recipientId in self.pendingSends.keys(): + for recipientId in list(self.pendingSends.keys()): info = self.pendingSends.get(recipientId,[]) newInfo = [] rep = False @@ -319,7 +319,7 @@ def memberList(self): # queue us a member list send haveData = [(avId in self.avatarName) for guildId,avId,rank in guildfolk] - self.pendingSends[avatarId] = [[x,y] for x,y in izip(guildfolk,haveData)] + self.pendingSends[avatarId] = [[x,y] for x,y in zip(guildfolk,haveData)] if False not in haveData: self._sendFinishedLists(avatarId) @@ -531,7 +531,7 @@ def requestInvite(self, otherAvatarId): self.air.writeServerEvent('requestGuildInvite', avatarId, '%s|%s' % (otherAvatarId, name)) guildid, guildname, guildrank, change = self.db.queryStatus(avatarId) - print "DEBUG, query came back: ", guildid, " ", guildname + print("DEBUG, query came back: ", guildid, " ", guildname) otherguild, othername, otherrank, otherchange = self.db.queryStatus(otherAvatarId) if guildrank < GUILDRANK_OFFICER: @@ -578,7 +578,7 @@ def requestLeaderboardTopTen(self): self.air.send(dg) def testThis(self, args): - print "DEBUG: sending setValue and getValuesRespondTo" + print("DEBUG: sending setValue and getValuesRespondTo") dcfile = self.air.getDcFile() dclass = dcfile.getClassByName('LeaderBoard') @@ -599,7 +599,7 @@ def testThis(self, args): def getValuesResponce(self, contest, stuff): # This should automatically get called in response by the dclass object # No additional catch/subscribe required - print "DEBUG: GuildManagerUD:getValuesResponce" + print("DEBUG: GuildManagerUD:getValuesResponce") import pdb; pdb.set_trace(); def getTopTenResponce(self, contest, stuff): @@ -728,7 +728,7 @@ def sendTokenForJoinRequest(self, token, name): try: results = self.db.redeemToken(token, avatarId) - except Exception,e: + except Exception as e: if e.args[0] == "INVALID_TOKEN": guildName = '***ERROR - GUILD CODE INVALID***' self.sendTokenRedeemMessage(requestId, guildName) diff --git a/otp/src/friends/PlayerFriendsManager.py b/otp/src/friends/PlayerFriendsManager.py index 3672dbc9..0643e380 100644 --- a/otp/src/friends/PlayerFriendsManager.py +++ b/otp/src/friends/PlayerFriendsManager.py @@ -32,7 +32,7 @@ def delete(self): self.ignoreAll() def sendRequestInvite(self,playerId): - print ("PFM sendRequestInvite id:%s" % (playerId)) + print(("PFM sendRequestInvite id:%s" % (playerId))) assert self.notify.debugCall() self.sendUpdate("requestInvite", [0,playerId,True]) @@ -104,17 +104,17 @@ def rejectRemove(self,playerId,reason): messenger.send(OTPGlobals.PlayerFriendRejectRemoveEvent,[playerId,reason]) def secretResponse(self,secret): - print ("secretResponse %s"%(secret)) + print(("secretResponse %s"%(secret))) assert self.notify.debugCall() messenger.send(OTPGlobals.PlayerFriendNewSecretEvent,[secret]) def rejectSecret(self,reason): - print ("rejectSecret %s"%(reason)) + print(("rejectSecret %s"%(reason))) assert self.notify.debugCall() messenger.send(OTPGlobals.PlayerFriendRejectNewSecretEvent,[reason]) def rejectUseSecret(self,reason): - print ("rejectUseSecret %s"%(reason)) + print(("rejectUseSecret %s"%(reason))) assert self.notify.debugCall() messenger.send(OTPGlobals.PlayerFriendRejectUseSecretEvent,[reason]) @@ -140,7 +140,7 @@ def updatePlayerFriend(self,id,info,isNewFriend): self.playerId2Info[id] = info messenger.send(OTPGlobals.PlayerFriendAddEvent,[id,info,isNewFriend]) #need to detect if the playerFriend is coming online so we can send a message - elif self.playerId2Info.has_key(id): + elif id in self.playerId2Info: if (not self.playerId2Info[id].onlineYesNo) and info.onlineYesNo: #send "coming online message" self.playerId2Info[id] = info @@ -221,11 +221,11 @@ def findPlayerInfoFromAvId(self, avId): def askAvatarOnline(self, avId): returnValue = 0 - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: returnValue = 1 - if self.playerAvId2avInfo.has_key(avId): + if avId in self.playerAvId2avInfo: playerId = self.findPlayerIdFromAvId(avId) - if self.playerId2Info.has_key(playerId): + if playerId in self.playerId2Info: playerInfo = self.playerId2Info[playerId] if playerInfo.onlineYesNo: returnValue = 1 @@ -239,7 +239,7 @@ def countTrueFriends(self): return count def askTransientFriend(self, avId): - if self.playerAvId2avInfo.has_key(avId) and not base.cr.isAvatarFriend(avId): + if avId in self.playerAvId2avInfo and not base.cr.isAvatarFriend(avId): return 1 else: return 0 @@ -257,7 +257,7 @@ def askAvatarKnownElseWhere(self, avId): return 0 def askAvatarKnownHere(self, avId): - if self.playerAvId2avInfo.has_key(avId): + if avId in self.playerAvId2avInfo: return 1 else: return 0 @@ -274,7 +274,7 @@ def __handleFriendHandles(self, handleList): messenger.send('friendsListChanged') def getAvHandleFromId(self, avId): - if self.playerAvId2avInfo.has_key(avId): + if avId in self.playerAvId2avInfo: return self.playerAvId2avInfo[avId] else: return None @@ -300,7 +300,7 @@ def identifyAvatar(self, doId): Returns either an avatar or a FriendHandle, whichever we can find, to reference the indicated doId. """ - if base.cr.doId2do.has_key(doId): + if doId in base.cr.doId2do: return base.cr.doId2do[doId] else: return self.identifyFriend(doId) diff --git a/otp/src/friends/PlayerFriendsManagerUD.py b/otp/src/friends/PlayerFriendsManagerUD.py index 1e3b921c..f9134be1 100644 --- a/otp/src/friends/PlayerFriendsManagerUD.py +++ b/otp/src/friends/PlayerFriendsManagerUD.py @@ -171,11 +171,11 @@ def recvFriendsUpdate(self,accountId,accountInfo,friends): accountInfo.openChatEnabledYesNo) if accountInfo.onlineYesNo: - self.sendUpdateToChannel((3L<<32)+accountId, + self.sendUpdateToChannel((3<<32)+accountId, "updatePlayerFriend", [friendId,friendInfo,0]) - self.sendUpdateToChannel((3L<<32)+friend[0], + self.sendUpdateToChannel((3<<32)+friend[0], "updatePlayerFriend", [accountId,accountInfo,0]) @@ -215,28 +215,28 @@ def requestRemove(self, senderId, otherAccountId): self.removeFriendship(accountId,otherAccountId) def recvInviteNotice(self, inviteeId, inviterId, inviterAvName): - self.sendUpdateToChannel((3L<<32)+inviteeId, "invitationFrom", [inviterId,inviterAvName]) + self.sendUpdateToChannel((3<<32)+inviteeId, "invitationFrom", [inviterId,inviterAvName]) def recvInviteRetracted(self, inviteeId, inviterId): - self.sendUpdateToChannel((3L<<32)+inviteeId, "retractInvite", [inviterId]) + self.sendUpdateToChannel((3<<32)+inviteeId, "retractInvite", [inviterId]) def recvInviteRejected(self, inviterId, inviteeId, reason): - self.sendUpdateToChannel((3L<<32)+inviterId, "rejectInvite", [inviteeId, reason]) + self.sendUpdateToChannel((3<<32)+inviterId, "rejectInvite", [inviteeId, reason]) def recvFriendshipRemoved(self,accountId,otherAccountId): self.notify.debug("recvFriendshipRemoved on %d,%d"%(accountId,otherAccountId)) - self.sendUpdateToChannel((3L<<32)+accountId,"removePlayerFriend",[otherAccountId]) - self.sendUpdateToChannel((3L<<32)+otherAccountId,"removePlayerFriend",[accountId]) + self.sendUpdateToChannel((3<<32)+accountId,"removePlayerFriend",[otherAccountId]) + self.sendUpdateToChannel((3<<32)+otherAccountId,"removePlayerFriend",[accountId]) # SECRETS def requestUnlimitedSecret(self,senderId): - print "# got unlimited secret request" + print("# got unlimited secret request") self.sendSecretRequest(senderId) def requestLimitedSecret(self,senderId,parentUsername,parentPassword): - print "# got limited secret request" + print("# got limited secret request") self.sendSecretRequest(senderId,parentUsername,parentPassword) def requestUseUnlimitedSecret(self,senderId,secret): @@ -246,16 +246,16 @@ def requestUseLimitedSecret(self,senderId,secret,parentUsername,parentPassword): self.sendSecretRedeem(senderId,secret,parentUsername,parentPassword) def recvAddFriendshipError(self,playerId,error): - self.sendUpdateToChannel((3L<<32)+playerId,"rejectInvite",[error]) + self.sendUpdateToChannel((3<<32)+playerId,"rejectInvite",[error]) def recvSecretGenerated(self,playerId,secret): - self.sendUpdateToChannel((3L<<32)+playerId,"secretResponse",[secret]) + self.sendUpdateToChannel((3<<32)+playerId,"secretResponse",[secret]) def recvSecretRequestError(self,playerId,error): - self.sendUpdateToChannel((3L<<32)+playerId,"rejectSecret",[error]) + self.sendUpdateToChannel((3<<32)+playerId,"rejectSecret",[error]) def recvSecretRedeemError(self,playerId,error): - self.sendUpdateToChannel((3L<<32)+playerId,"rejectUseSecret",[error]) + self.sendUpdateToChannel((3<<32)+playerId,"rejectUseSecret",[error]) # WHISPERS @@ -371,15 +371,15 @@ def whisperSCQuestTo(self,senderId,playerId,msgData): def recvWhisper(self,recipientId,senderId,msgText): self.log.debug("Received open whisper from %d to %d: %s" % (senderId,recipientId,msgText)) - self.sendUpdateToChannel((3L<<32)+recipientId,"whisperFrom",[senderId,msgText]) + self.sendUpdateToChannel((3<<32)+recipientId,"whisperFrom",[senderId,msgText]) def recvWLWhisper(self,recipientId,senderId,msgText): self.log.debug("Received WLwhisper from %d to %d: %s" % (senderId,recipientId,msgText)) - self.sendUpdateToChannel((3L<<32)+recipientId,"whisperWLFrom",[senderId,msgText]) + self.sendUpdateToChannel((3<<32)+recipientId,"whisperWLFrom",[senderId,msgText]) def recvSCWhisper(self,recipientId,senderId,msgText): self.log.debug("Received SCwhisper from %d to %d: %s" % (senderId,recipientId,msgText)) - self.sendUpdateToChannel((3L<<32)+recipientId,"whisperSCFrom",[senderId,msgText]) + self.sendUpdateToChannel((3<<32)+recipientId,"whisperSCFrom",[senderId,msgText]) def recvEnterPlayer(self,playerId,playerInfo,friendsList): self.log.debug("Saw player %d enter."%playerId) @@ -392,7 +392,7 @@ def recvEnterPlayer(self,playerId,playerInfo,friendsList): playerInfo.understandableYesNo = friendInfo.openChatFriendshipYesNo or \ (friendInfo.openChatEnabledYesNo and \ playerInfo.openChatEnabledYesNo) - self.sendUpdateToChannel((3L<<32)+friend, + self.sendUpdateToChannel((3<<32)+friend, "updatePlayerFriend", [playerId,playerInfo,0]) @@ -408,7 +408,7 @@ def recvExitPlayer(self,playerId,playerInfo,friendsList): playerInfo.understandableYesNo = friendInfo.openChatFriendshipYesNo or \ (friendInfo.openChatEnabledYesNo and \ playerInfo.openChatEnabledYesNo) - self.sendUpdateToChannel((3L<<32)+friend, + self.sendUpdateToChannel((3<<32)+friend, "updatePlayerFriend", [playerId,playerInfo,0]) @@ -418,12 +418,12 @@ def recvExitPlayer(self,playerId,playerInfo,friendsList): def _getFriendView(self, viewerId, friendId, info=None): if info is None: info = self.accountId2Info[friendId] - if self.accountId2Friends.has_key(viewerId): + if viewerId in self.accountId2Friends: if [friendId,True] in self.accountId2Friends[viewerId]: info.openChatFriendshipYesNo = 1 else: info.openChatFriendshipYesNo = 0 - elif self.accountId2Friends.has_key(friendId): + elif friendId in self.accountId2Friends: if [viewerId,True] in self.accountId2Friends[friendId]: info.openChatFriendshipYesNo = 1 else: diff --git a/otp/src/launcher/DummyLauncherBase.py b/otp/src/launcher/DummyLauncherBase.py index 25723b23..21aa070a 100644 --- a/otp/src/launcher/DummyLauncherBase.py +++ b/otp/src/launcher/DummyLauncherBase.py @@ -136,7 +136,7 @@ def fakeDownloadPhaseTask(self, task): self.setPhaseComplete(task.phase, percentComplete) messenger.send("launcherPercentPhaseComplete", [task.phase, percentComplete, 0, 0]) if (percentComplete >= 100.0): - messenger.send('phaseComplete-' + `task.phase`) + messenger.send('phaseComplete-' + repr(task.phase)) return Task.done else: return Task.cont diff --git a/otp/src/launcher/LauncherBase.py b/otp/src/launcher/LauncherBase.py index fb3224d1..aa3ee39b 100644 --- a/otp/src/launcher/LauncherBase.py +++ b/otp/src/launcher/LauncherBase.py @@ -9,7 +9,7 @@ import os import time import string -import __builtin__ +import builtins from pandac.libpandaexpressModules import * # Import DIRECT files from direct.showbase.MessengerGlobal import * @@ -138,7 +138,7 @@ def __init__(self): # This line is to ensure that Python is running in opt mode -OO. if __debug__: - print "WARNING: Client should run Python optimized -OO" + print("WARNING: Client should run Python optimized -OO") self.taskMgrStarted = False @@ -196,16 +196,16 @@ def __init__(self): os.system('/sbin/ifconfig -a >>' + logfile) # Write to the log - print "\n\nStarting %s..." % self.GameName - print ("Current time: " + time.asctime(time.localtime(time.time())) - + " " + time.tzname[0]) - print "sys.path = ", sys.path - print "sys.argv = ", sys.argv - print "os.environ = ", os.environ + print("\n\nStarting %s..." % self.GameName) + print(("Current time: " + time.asctime(time.localtime(time.time())) + + " " + time.tzname[0])) + print("sys.path = ", sys.path) + print("sys.argv = ", sys.argv) + print("os.environ = ", os.environ) if(len(sys.argv)>=self.ArgCount): Configrc_args = sys.argv[self.ArgCount-1] - print("generating configrc using: '" + Configrc_args + "'") + print(("generating configrc using: '" + Configrc_args + "'")) else: Configrc_args = "" print("generating standard configrc") @@ -216,9 +216,9 @@ def __init__(self): # arguments to pass to Configrc.exe, but the use of Configrc.exe # itself is a stopgap until we can replace that system with the newer # signed prc file system. - if os.environ.has_key("PRC_EXECUTABLE_ARGS"): - print "PRC_EXECUTABLE_ARGS is set to: " + os.environ["PRC_EXECUTABLE_ARGS"] - print "Resetting PRC_EXECUTABLE_ARGS" + if "PRC_EXECUTABLE_ARGS" in os.environ: + print("PRC_EXECUTABLE_ARGS is set to: " + os.environ["PRC_EXECUTABLE_ARGS"]) + print("Resetting PRC_EXECUTABLE_ARGS") # Cannot assign to os.environ here; we have to use # ExecutionEnvironment to make the low-level prc respect it. @@ -227,9 +227,9 @@ def __init__(self): # Actually, we still have to set CONFIG_CONFIG too, since Configrc.exe # itself expects that. - if os.environ.has_key("CONFIG_CONFIG"): - print "CONFIG_CONFIG is set to: " + os.environ["CONFIG_CONFIG"] - print "Resetting CONFIG_CONFIG" + if "CONFIG_CONFIG" in os.environ: + print("CONFIG_CONFIG is set to: " + os.environ["CONFIG_CONFIG"]) + print("Resetting CONFIG_CONFIG") os.environ["CONFIG_CONFIG"] = ":_:configdir_.:configpath_:configname_Configrc.exe:configexe_1:configargs_-stdout " + Configrc_args # Now reload the Configrc file. We've actually already run it @@ -239,7 +239,7 @@ def __init__(self): # This is our config object until we get the show running launcherConfig = getConfigExpress() - __builtin__.config = launcherConfig + builtins.config = launcherConfig # We'll need a MiniTaskManager to manage our download tasks # before we've downloaded enough to start the real one. @@ -363,7 +363,7 @@ def __init__(self): self.fromCD = 0 else: self.fromCD = tmpVal - self.notify.info('patch directory is ' + `self.fromCD`) + self.notify.info('patch directory is ' + repr(self.fromCD)) assert self.notify.debug("init: Launcher found install dir: " + self.topDir.cStr()) @@ -424,7 +424,7 @@ def __init__(self): phaseIdx = 0 for phase in self.LauncherPhases: # Clear the registry on each phase's percentage completion - percentPhaseCompleteKey = "PERCENT_PHASE_COMPLETE_" + `phase` + percentPhaseCompleteKey = "PERCENT_PHASE_COMPLETE_" + repr(phase) self.setRegistry(percentPhaseCompleteKey, 0) # Initialize self.phaseComplete[phase] = 0 @@ -1443,7 +1443,7 @@ def getProgressSum(self, phase): # given the phase lookup its sum sum = 0 - for i in xrange(0,len(self.linesInProgress)): + for i in range(0,len(self.linesInProgress)): # search for phase and sum the sizes for each if self.linesInProgress[i].find(phase) > -1: #split it, find the size, add to the sum @@ -1474,7 +1474,7 @@ def readProgressFile(self): self.progressSum = self.getProgressSum(token) # deduct phase_2 files, I don't think this is downloaded self.progressSum -= self.getProgressSum(token + '2') - self.notify.info('total phases to be downloaded = ' + `self.progressSum`) + self.notify.info('total phases to be downloaded = ' + repr(self.progressSum)) # done reading the file, now carry on with client download self.checkClientDbExists() @@ -1621,7 +1621,7 @@ def maybeStartGame(self): # Go into the background now since Panda will be fired up shortly self.background() # Put ourselves in the global dict - __builtin__.launcher = self + builtins.launcher = self # Start the show self.startGame() @@ -1703,7 +1703,7 @@ def mainLoop(self): sys.exit() def updatePhase(self, phase): - self.notify.info('Updating multifiles in phase: ' + `phase`) + self.notify.info('Updating multifiles in phase: ' + repr(phase)) # Phase may need downloading, clear the percentage to 0 self.setPercentPhaseComplete(self.currentPhase, 0) assert(self.dldb) @@ -1732,7 +1732,7 @@ def updateNextMultifile(self): for i in range(self.dldb.getServerNumMultifiles()): mfname = self.dldb.getServerMultifileName(i) phase = self.dldb.getServerMultifilePhase(mfname) - print i, mfname, phase + print(i, mfname, phase) # This will exit self.handleGenericMultifileError() @@ -1758,14 +1758,14 @@ def updateNextMultifile(self): # Phase all done, now set the percent to really be 100 self.setPercentPhaseComplete(self.currentPhase, 100) # Now we are done updating all the multifiles for this phase - self.notify.info('Done updating multifiles in phase: ' + `self.currentPhase`) + self.notify.info('Done updating multifiles in phase: ' + repr(self.currentPhase)) # Also update the overall progress bar self.progressSoFar += int(round(self.phaseOverallMap[self.currentPhase]*100)) - self.notify.info('progress so far ' + `self.progressSoFar`) + self.notify.info('progress so far ' + repr(self.progressSoFar)) #self.forceSleep() # Send the phase complete event in case anybody cares - messenger.send('phaseComplete-' + `self.currentPhase`) + messenger.send('phaseComplete-' + repr(self.currentPhase)) if nextIndex < len(self.LauncherPhases): # go to the next phase self.currentPhase = self.LauncherPhases[nextIndex] @@ -2123,7 +2123,7 @@ def getPatchFilename(self, fname, currentVersion): # Example: # fname = foo.rgb.v1 # patch = foo.rgb.v1.pch - return (fname + '.v' + `currentVersion` + '.' + self.patchExtension) + return (fname + '.v' + repr(currentVersion) + '.' + self.patchExtension) #============================================================ # Patching functions @@ -2155,7 +2155,7 @@ def downloadPatches(self): else: # Now we are done applying all patches for this multifile self.notify.info('applyNextPatch: Done patching multifile: ' - + `self.currentPhase`) + + repr(self.currentPhase)) # Ok, we are done patching. Lets run through the patchAndHash step # again to make sure we are all clean. If it decides we are, it will # move on to the next multifile @@ -2173,7 +2173,7 @@ def downloadPatchDone(self): def decompressPatchDone(self): self.notify.info('decompressPatchDone: Patching file: ' + self.currentPatchee - + ' from ver: ' + `self.currentPatchVersion`) + + ' from ver: ' + repr(self.currentPatchVersion)) # Determine the filenames patchFile = Filename(self.patchDir, Filename(self.currentPatch)) patchFile.setBinary() @@ -2199,7 +2199,7 @@ def patchDone(self): def startReextractingFiles(self): # See if there are any files to patch - self.notify.info('startReextractingFiles: Reextracting ' + `len(self.reextractList)` + self.notify.info('startReextractingFiles: Reextracting ' + repr(len(self.reextractList)) + ' files for multifile: ' + self.currentMfname) self.launcherMessage(self.Localizer.LauncherRecoverFiles) # read in the multifile @@ -2221,7 +2221,7 @@ def reextractNextFile(self): failure = 1 else: self.notify.warning('reextractNextFile: File not found in multifile: ' - + `currentReextractFile`) + + repr(currentReextractFile)) failure = 1 if failure: @@ -2230,7 +2230,7 @@ def reextractNextFile(self): # Now we are done extracting files for this multifile self.notify.info('reextractNextFile: Done reextracting files for multifile: ' - + `self.currentPhase`) + + repr(self.currentPhase)) # Ok, now move on to the next multifile del self.currentMfile self.updateMultifileDone() @@ -2280,7 +2280,7 @@ def patchMultifile(self): elif (clientVer > 1): self.notify.info('patchMultifile: Old version for multifile: ' + - self.currentMfname + ' Client ver: ' + `clientVer`) + self.currentMfname + ' Client ver: ' + repr(clientVer)) self.maybeStartGame() self.totalPatchDownload = 0 self.patchDownloadSoFar = 0 @@ -2292,7 +2292,7 @@ def patchMultifile(self): # sum the file size to totalPatchDownload (phase_3 only) if (self.currentPhase == 3): self.totalPatchDownload += self.getProgressSum(patch) - self.notify.info('total patch to be downloaded = ' + `self.totalPatchDownload`) + self.notify.info('total patch to be downloaded = ' + repr(self.totalPatchDownload)) self.downloadPatches() return @@ -2486,7 +2486,7 @@ def getReferrerCode(self): return self.getValue(self.ReferrerKey, None) def getPhaseComplete(self, phase): - assert(self.phaseComplete.has_key(phase)) + assert(phase in self.phaseComplete) percentDone = self.phaseComplete[phase] return (percentDone == 100) @@ -2501,7 +2501,7 @@ def setPercentPhaseComplete(self, phase, percent): messenger.send("launcherPercentPhaseComplete", [phase, percent, self.getBandwidth(), self.byteRate]) # Also set the value in the registry - percentPhaseCompleteKey = "PERCENT_PHASE_COMPLETE_" + `phase` + percentPhaseCompleteKey = "PERCENT_PHASE_COMPLETE_" + repr(phase) self.setRegistry(percentPhaseCompleteKey, percent) # now calculate an overall percenatage @@ -2614,7 +2614,7 @@ def increaseBandwidth(self, targetBandwidth = None): # if we have a long way to go. self.bandwidthIndex += 1 assert self.notify.debug('increaseBandwidth: Increasing bandwidth to: ' - + `self.getBandwidth()`) + + repr(self.getBandwidth())) self.everIncreasedBandwidth = 1 self.setBandwidth() return 1 @@ -2661,7 +2661,7 @@ def decreaseBandwidth(self, targetBandwidth = None): self.bandwidthIndex -= 1 assert self.notify.debug('decreaseBandwidth: Decreasing bandwidth to: ' - + `self.getBandwidth()`) + + repr(self.getBandwidth())) self.setBandwidth() return 1 @@ -2775,7 +2775,7 @@ def increaseBandwidth(self, targetBandwidth = None): # if we have a long way to go. self.bandwidthIndex += 1 assert self.notify.debug('increaseBandwidth: Increasing bandwidth to: ' - + `self.getBandwidth()`) + + repr(self.getBandwidth())) self.everIncreasedBandwidth = 1 self.setBandwidth() return 1 @@ -2822,7 +2822,7 @@ def decreaseBandwidth(self, targetBandwidth = None): self.bandwidthIndex -= 1 assert self.notify.debug('decreaseBandwidth: Decreasing bandwidth to: ' - + `self.getBandwidth()`) + + repr(self.getBandwidth())) self.setBandwidth() return 1 @@ -2876,7 +2876,7 @@ def cleanup(self): def scanForHacks(self): if not self.WIN32: return - import _winreg + import winreg hacksInstalled = {} hacksRunning = {} hackName = [ @@ -2889,26 +2889,26 @@ def scanForHacks(self): # knownHacksRegistryKeys = { hackName[0]:[ - [_winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Run\\!xSpeed'], - [_winreg.HKEY_CURRENT_USER,'Software\\!xSpeednethy'], - [_winreg.HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Start Menu\\Programs\\!xSpeednet'], - [_winreg.HKEY_LOCAL_MACHINE,'Software\\Gentee\\Paths\\!xSpeednet'], - [_winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\!xSpeed.net 2.0'], + [winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Run\\!xSpeed'], + [winreg.HKEY_CURRENT_USER,'Software\\!xSpeednethy'], + [winreg.HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Start Menu\\Programs\\!xSpeednet'], + [winreg.HKEY_LOCAL_MACHINE,'Software\\Gentee\\Paths\\!xSpeednet'], + [winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\!xSpeed.net 2.0'], ], hackName[1]:[ - [_winreg.HKEY_CURRENT_USER,'Software\\aspeeder'], - [_winreg.HKEY_LOCAL_MACHINE,'Software\\aspeeder'], - [_winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\aspeeder'], + [winreg.HKEY_CURRENT_USER,'Software\\aspeeder'], + [winreg.HKEY_LOCAL_MACHINE,'Software\\aspeeder'], + [winreg.HKEY_LOCAL_MACHINE,'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\aspeeder'], ], } try: - for prog in knownHacksRegistryKeys.keys(): + for prog in list(knownHacksRegistryKeys.keys()): for key in knownHacksRegistryKeys[prog]: try: - h = _winreg.OpenKey(key[0], key[1]) + h = winreg.OpenKey(key[0], key[1]) #print 'found %s in registry %s' % (prog,key[1]) hacksInstalled[prog] = 1 - _winreg.CloseKey(h) + winreg.CloseKey(h) break # next program when any registry entry found except: pass @@ -2926,9 +2926,9 @@ def scanForHacks(self): } i = 0 try: - rh = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Windows\\ShellNoRoam\\MUICache') + rh = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Windows\\ShellNoRoam\\MUICache') while 1: - name,value,type = _winreg.EnumValue(rh, i) + name,value,type = winreg.EnumValue(rh, i) i += 1 if type == 1: val = value.lower() @@ -2937,7 +2937,7 @@ def scanForHacks(self): #print "found %s in MUICache:%s" % (knownHacksMUI[hackprog], val.encode('utf-8')) hacksInstalled[knownHacksMUI[hackprog]] = 1 break - _winreg.CloseKey(rh) + winreg.CloseKey(rh) except: #print "%s: stopped at %d" % (sys.exc_info()[0], i) pass @@ -2959,19 +2959,19 @@ def scanForHacks(self): try: for p in procapi.getProcessList(): pname = p.name - if knownHacksExe.has_key(pname): + if pname in knownHacksExe: hacksRunning[knownHacksExe[pname]] = 1 except: pass if len(hacksInstalled) > 0: self.notify.info('Third party programs installed:') - for hack in hacksInstalled.keys(): + for hack in list(hacksInstalled.keys()): self.notify.info(hack) if len(hacksRunning) > 0: self.notify.info('Third party programs running:') - for hack in hacksRunning.keys(): + for hack in list(hacksRunning.keys()): self.notify.info(hack) # quit out because 3rd party program hack detected and is running self.setPandaErrorCode(8) diff --git a/otp/src/launcher/WebLauncherBase.py b/otp/src/launcher/WebLauncherBase.py index 6a8ca136..cf9ff3d8 100644 --- a/otp/src/launcher/WebLauncherBase.py +++ b/otp/src/launcher/WebLauncherBase.py @@ -8,7 +8,7 @@ import time import os import subprocess -import __builtin__ +import builtins class WebLauncherBase(DirectObject): @@ -79,7 +79,7 @@ def __nextCallback(self, currentCallback, currentTaskChain): del self.postProcessCallbacks[0] if taskChain != currentTaskChain: # Switch to the next task chain. - print "switching to %s" % (taskChain) + print("switching to %s" % (taskChain)) taskMgr.add(self.__nextCallback, 'phaseCallback-%s' % (self.phase), taskChain = taskChain, extraArgs = [callback, taskChain]) return @@ -91,7 +91,7 @@ def __nextCallback(self, currentCallback, currentTaskChain): def __init__(self, appRunner): self.appRunner = appRunner - __builtin__.launcher = self + builtins.launcher = self appRunner.exceptionHandler = self.exceptionHandler @@ -137,12 +137,12 @@ class DummyGameInfo: self.notify.info("isTestServer: %s" % (self.testServerFlag)) # Write to the log - print "\n\nStarting %s..." % self.GameName - print ("Current time: " + time.asctime(time.localtime(time.time())) - + " " + time.tzname[0]) - print "sys.argv = ", sys.argv - print "tokens = ", appRunner.tokens - print "gameInfo = ", self.gameInfo + print("\n\nStarting %s..." % self.GameName) + print(("Current time: " + time.asctime(time.localtime(time.time())) + + " " + time.tzname[0])) + print("sys.argv = ", sys.argv) + print("tokens = ", appRunner.tokens) + print("gameInfo = ", self.gameInfo) # Run an external command to get the system hardware # information into a log file. First, we have to change the @@ -186,14 +186,14 @@ def __gotPhaseComplete(self): # Already sent. return - for phaseData in self.phaseData.values(): + for phaseData in list(self.phaseData.values()): if not phaseData.complete: # More to come later. return # All phases are now complete. Tell the world. self.allPhasesComplete = True - print "launcherAllPhasesComplete" + print("launcherAllPhasesComplete") messenger.send("launcherAllPhasesComplete", taskChain = 'default') @@ -471,7 +471,7 @@ def packageFinished(self, package, success): PackageInstaller.packageFinished(self, package, success) if not success: - print "Failed to download %s" % (package.packageName) + print("Failed to download %s" % (package.packageName)) self.launcher.setPandaErrorCode(6) sys.exit() @@ -489,7 +489,7 @@ def downloadFinished(self, success): PackageInstaller.downloadFinished(self, success) if not success: - print "Failed to download all packages." + print("Failed to download all packages.") # We don't immediately trigger launcherAllPhasesComplete here, # because we might still be waiting on one or more diff --git a/otp/src/level/AmbientSound.py b/otp/src/level/AmbientSound.py index 7c3897ff..c1e556f6 100644 --- a/otp/src/level/AmbientSound.py +++ b/otp/src/level/AmbientSound.py @@ -1,8 +1,9 @@ from direct.interval.IntervalGlobal import * -import BasicEntities -import random +import BasicEntities, random class AmbientSound(BasicEntities.NodePathEntity): + __module__ = __name__ + def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) self.initSound() @@ -19,10 +20,10 @@ def initSound(self): self.sound = base.loadSfx(self.soundPath) if self.sound is None: return - self.soundIval = SoundInterval(self.sound, node=self, - volume=self.volume) + self.soundIval = SoundInterval(self.sound, node=self, volume=self.volume) self.soundIval.loop() self.soundIval.setT(random.random() * self.sound.length()) + return def destroySound(self): if hasattr(self, 'soundIval'): @@ -32,6 +33,7 @@ def destroySound(self): del self.sound if __dev__: + def attribChanged(self, *args): self.destroySound() - self.initSound() + self.initSound() \ No newline at end of file diff --git a/otp/src/level/BasicEntities.py b/otp/src/level/BasicEntities.py index 82a2d5fc..2bfdff6b 100644 --- a/otp/src/level/BasicEntities.py +++ b/otp/src/level/BasicEntities.py @@ -1,28 +1,14 @@ -"""BasicEntities module: contains fundamental entity types and base classes""" - -import Entity -import DistributedEntity +from . import Entity, DistributedEntity from pandac.PandaModules import NodePath -# base class for entities that support NodePath attributes -# *** Don't derive directly from this class; derive from the appropriate -# specialized class from the classes defined below. class NodePathEntityBase: - # we don't call this __init__ because it doesn't have to be called - # upon object init + def initNodePathAttribs(self, doReparent=1): - """Call this after the entity has been initialized""" - self.callSetters('pos','x','y','z', - 'hpr','h','p','r', - 'scale','sx','sy','sz') + self.callSetters('pos', 'x', 'y', 'z', 'hpr', 'h', 'p', 'r', 'scale', 'sx', 'sy', 'sz') if doReparent: self.callSetters('parentEntId') - - self.getNodePath().setName('%s-%s' % - (self.__class__.__name__, self.entId)) - + self.getNodePath().setName('%s-%s' % (self.__class__.__name__, self.entId)) if __dev__: - # for the editor self.getNodePath().setTag('entity', '1') def setParentEntId(self, parentEntId): @@ -31,12 +17,11 @@ def setParentEntId(self, parentEntId): def destroy(self): if __dev__: - # for the editor self.getNodePath().clearTag('entity') -# Entities that already derive from NodePath and Entity should derive -# from this class + class NodePathAttribs(NodePathEntityBase): + def initNodePathAttribs(self, doReparent=1): NodePathEntityBase.initNodePathAttribs(self, doReparent) @@ -46,9 +31,9 @@ def destroy(self): def getNodePath(self): return self -# Entities that already derive from Entity, and do not derive from NodePath, -# but want to be a NodePath, should derive from this. + class NodePathAndAttribs(NodePathEntityBase, NodePath): + def __init__(self): node = hidden.attachNewNode('EntityNodePath') NodePath.__init__(self, node) @@ -62,41 +47,58 @@ def destroy(self): def getNodePath(self): return self - -# Entities that already derive from Entity, and do not derive from NodePath, -# but HAVE a NodePath that they want to represent them, should derive from -# this. They must define getNodePath(), which should return their 'proxy' -# NodePath instance. + + class NodePathAttribsProxy(NodePathEntityBase): + def initNodePathAttribs(self, doReparent=1): - """Call this after the entity has been initialized""" NodePathEntityBase.initNodePathAttribs(self, doReparent) - assert self.getNodePath() != self def destroy(self): NodePathEntityBase.destroy(self) - def setPos(self, *args): self.getNodePath().setPos(*args) - def setX(self, *args): self.getNodePath().setX(*args) - def setY(self, *args): self.getNodePath().setY(*args) - def setZ(self, *args): self.getNodePath().setZ(*args) - - def setHpr(self, *args): self.getNodePath().setHpr(*args) - def setH(self, *args): self.getNodePath().setH(*args) - def setP(self, *args): self.getNodePath().setP(*args) - def setR(self, *args): self.getNodePath().setR(*args) - - def setScale(self, *args): self.getNodePath().setScale(*args) - def setSx(self, *args): self.getNodePath().setSx(*args) - def setSy(self, *args): self.getNodePath().setSy(*args) - def setSz(self, *args): self.getNodePath().setSz(*args) - - def reparentTo(self, *args): self.getNodePath().reparentTo(*args) - -# This is an entity that represents a NodePath on the client. -# It may be instantiated directly or used as a base class for other -# entity types that 'are' NodePaths. + def setPos(self, *args): + self.getNodePath().setPos(*args) + + def setX(self, *args): + self.getNodePath().setX(*args) + + def setY(self, *args): + self.getNodePath().setY(*args) + + def setZ(self, *args): + self.getNodePath().setZ(*args) + + def setHpr(self, *args): + self.getNodePath().setHpr(*args) + + def setH(self, *args): + self.getNodePath().setH(*args) + + def setP(self, *args): + self.getNodePath().setP(*args) + + def setR(self, *args): + self.getNodePath().setR(*args) + + def setScale(self, *args): + self.getNodePath().setScale(*args) + + def setSx(self, *args): + self.getNodePath().setSx(*args) + + def setSy(self, *args): + self.getNodePath().setSy(*args) + + def setSz(self, *args): + self.getNodePath().setSz(*args) + + def reparentTo(self, *args): + self.getNodePath().reparentTo(*args) + + class NodePathEntity(Entity.Entity, NodePath, NodePathAttribs): + def __init__(self, level, entId): node = hidden.attachNewNode('NodePathEntity') NodePath.__init__(self, node) @@ -108,11 +110,10 @@ def destroy(self): Entity.Entity.destroy(self) self.removeNode() -# This is a distributed version of NodePathEntity. It should not -# be instantiated directly; distributed entities that are also NodePaths -# may derive from this instead of DistributedEntity. -class DistributedNodePathEntity(DistributedEntity.DistributedEntity, - NodePath, NodePathAttribs): + +class DistributedNodePathEntity(DistributedEntity.DistributedEntity, NodePath, NodePathAttribs): + __module__ = __name__ + def __init__(self, cr): DistributedEntity.DistributedEntity.__init__(self, cr) @@ -127,4 +128,4 @@ def announceGenerate(self): def delete(self): self.removeNode() - DistributedEntity.DistributedEntity.delete(self) + DistributedEntity.DistributedEntity.delete(self) \ No newline at end of file diff --git a/otp/src/level/CollisionSolidEntity.py b/otp/src/level/CollisionSolidEntity.py index 5046bd84..26e2e128 100644 --- a/otp/src/level/CollisionSolidEntity.py +++ b/otp/src/level/CollisionSolidEntity.py @@ -1,16 +1,18 @@ from pandac.PandaModules import * from otp.otpbase import OTPGlobals from direct.directnotify import DirectNotifyGlobal -import BasicEntities +from . import BasicEntities class CollisionSolidEntity(BasicEntities.NodePathEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('CollisionSolidEntity') def __init__(self, level, entId): self.collNodePath = None BasicEntities.NodePathEntity.__init__(self, level, entId) self.initSolid() - + return + def destroy(self): self.destroySolid() BasicEntities.NodePathEntity.destroy(self) @@ -35,9 +37,10 @@ def destroySolid(self): if self.collNodePath is not None: self.collNodePath.removeNode() self.collNodePath = None + return if __dev__: + def attribChanged(self, attrib, value): - print 'attribChanged' - self.initSolid() - + print('attribChanged') + self.initSolid() \ No newline at end of file diff --git a/otp/src/level/CutScene.py b/otp/src/level/CutScene.py index 67c77297..91a47018 100644 --- a/otp/src/level/CutScene.py +++ b/otp/src/level/CutScene.py @@ -1,189 +1,97 @@ -"""CutScene.py""" - - from direct.showbase import DirectObject from direct.directnotify import DirectNotifyGlobal -import BasicEntities - -from pandac.PandaModules import * +from . import BasicEntities from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -#import DistributedInteractiveEntity - -# effects # +from direct.distributed import DelayDelete def nothing(self, track, subjectNodePath, duration): - assert self.debugPrint( - "nothing(track=%s, subjectNodePath=%s, duration=%s)"%( - track, subjectNodePath, duration)) return track + def irisInOut(self, track, subjectNodePath, duration): - assert self.debugPrint( - "irisInOut(track=%s, subjectNodePath=%s, duration=%s)"%( - track, subjectNodePath, duration)) - track.append(Sequence( - Func(base.transitions.irisOut, 0.5), - Func(base.transitions.irisIn, 1.5), - Wait(duration), - Func(base.transitions.irisOut, 1.0), - Func(base.transitions.irisIn, 0.5), - )) + track.append(Sequence(Func(base.transitions.irisOut, 0.5), Func(base.transitions.irisIn, 1.5), Wait(duration), Func(base.transitions.irisOut, 1.0), Func(base.transitions.irisIn, 0.5))) return track + def letterBox(self, track, subjectNodePath, duration): - assert self.debugPrint( - "letterBox(track=%s, subjectNodePath=%s, duration=%s)"%( - track, subjectNodePath, duration)) - track.append(Sequence( - #Func(base.transitions.letterBox, 0.5), - Wait(duration), - #Func(base.transitions.letterBox, 0.5), - )) + track.append(Sequence(Wait(duration))) return track -# motions # def foo1(self, track, subjectNodePath, duration): - assert self.debugPrint( - "foo1(track=%s, subjectNodePath=%s, duration=%s)"%( - track, subjectNodePath, duration)) - track.append(Sequence( - Func(base.localAvatar.stopUpdateSmartCamera), - PosHprInterval( - camera, - other=subjectNodePath, - pos=Point3(-2, -35, 7.5), - hpr=VBase3(-7, 0, 0)), - LerpPosHprInterval( - nodePath=camera, - other=subjectNodePath, - duration=duration, - pos=Point3(2, -22, 7.5), - hpr=VBase3(4, 0, 0), - blendType="easeInOut"), - PosHprInterval( - camera, - other=subjectNodePath, - pos=Point3(0, -28, 7.5), - hpr=VBase3(0, 0, 0)), - Func(base.localAvatar.startUpdateSmartCamera), - )) + track.append(Sequence(Func(base.localAvatar.stopUpdateSmartCamera), PosHprInterval(camera, other=subjectNodePath, pos=Point3(-2, -35, 7.5), hpr=VBase3(-7, 0, 0)), LerpPosHprInterval(nodePath=camera, other=subjectNodePath, duration=duration, pos=Point3(2, -22, 7.5), hpr=VBase3(4, 0, 0), blendType='easeInOut'), PosHprInterval(camera, other=subjectNodePath, pos=Point3(0, -28, 7.5), hpr=VBase3(0, 0, 0)), Func(base.localAvatar.startUpdateSmartCamera))) return track + def doorUnlock(self, track, subjectNodePath, duration): - assert self.debugPrint( - "doorUnlock(track=%s, subjectNodePath=%s, duration=%s)"%( - track, subjectNodePath, duration)) - track.append(Sequence( - Func(base.localAvatar.stopUpdateSmartCamera), - PosHprInterval( - camera, - other=self, - pos=Point3(-2, -35, 7.5), - hpr=VBase3(-7, 0, 0)), - LerpPosHprInterval( - nodePath=camera, - other=self, - duration=duration, - pos=Point3(2, -22, 7.5), - hpr=VBase3(4, 0, 0), - blendType="easeInOut"), - PosHprInterval( - camera, - other=self, - pos=Point3(0, -28, 7.5), - hpr=VBase3(0, 0, 0)), - Func(base.localAvatar.startUpdateSmartCamera), - )) + track.append(Sequence(Func(base.localAvatar.stopUpdateSmartCamera), PosHprInterval(camera, other=self, pos=Point3(-2, -35, 7.5), hpr=VBase3(-7, 0, 0)), LerpPosHprInterval(nodePath=camera, other=self, duration=duration, pos=Point3(2, -22, 7.5), hpr=VBase3(4, 0, 0), blendType='easeInOut'), PosHprInterval(camera, other=self, pos=Point3(0, -28, 7.5), hpr=VBase3(0, 0, 0)), Func(base.localAvatar.startUpdateSmartCamera))) return track class CutScene(BasicEntities.NodePathEntity, DirectObject.DirectObject): - notify = DirectNotifyGlobal.directNotify.newCategory('CutScene') - - effects={ - "nothing": nothing, - "irisInOut": irisInOut, - "letterBox": letterBox, - } - - motions={ - "foo1": foo1, - "doorUnlock": doorUnlock, - } + __module__ = __name__ + effects = {'nothing': nothing, 'irisInOut': irisInOut, 'letterBox': letterBox} + motions = {'foo1': foo1, 'doorUnlock': doorUnlock} def __init__(self, level, entId): - assert self.debugPrint( - "CutScene(level=%s, entId=%s)"%(level, entId)) DirectObject.DirectObject.__init__(self) BasicEntities.NodePathEntity.__init__(self, level, entId) self.track = None self.setEffect(self.effect) self.setMotion(self.motion) - self.subjectNodePath = render.attachNewNode("CutScene") + self.subjectNodePath = render.attachNewNode('CutScene') self.subjectNodePath.setPos(self.pos) self.subjectNodePath.setHpr(self.hpr) - #self.setSubjectNodePath(self.subjectNodePath) self.setStartStop(self.startStopEvent) + return def destroy(self): - assert self.debugPrint("destroy()") self.ignore(self.startStopEvent) self.startStopEvent = None BasicEntities.NodePathEntity.destroy(self) - #DirectObject.DirectObject.destroy(self) - + return + def setEffect(self, effect): - assert self.debugPrint("setEffect(effect=%s)"%(effect,)) - self.effect=effect - assert self.effects[effect] - self.getEffect=self.effects[effect] - + self.effect = effect + self.getEffect = self.effects[effect] + def setMotion(self, motion): - assert self.debugPrint("setMotion(motion=%s)"%(motion,)) - self.motionType=motion - assert self.motions[motion] - self.getMotion=self.motions[motion] - + self.motionType = motion + self.getMotion = self.motions[motion] + def setSubjectNodePath(self, subjectNodePath): - assert self.debugPrint( - "setSubjectNodePath(subjectNodePath=%s)"%(subjectNodePath,)) - self.subjectNodePath=subjectNodePath - + self.subjectNodePath = subjectNodePath + def startOrStop(self, start): - assert self.debugPrint("startOrStop(start=%s)"%(start,)) - trackName = "cutSceneTrack-%d" % (id(self),) + trackName = 'cutSceneTrack-%d' % (id(self),) if start: if self.track: self.track.finish() self.track = None - track = Parallel(name = trackName) + track = Parallel(name=trackName) track = self.getEffect(self, track, self.subjectNodePath, self.duration) track = self.getMotion(self, track, self.subjectNodePath, self.duration) track = Sequence(Wait(0.4), track) track.start(0.0) - assert self.debugPrint("starting track=%s"%(track,)) self.track = track - else: - if self.track: - self.track.pause() - self.track = None - base.localAvatar.startUpdateSmartCamera() - + elif self.track: + self.track.pause() + self.track = None + base.localAvatar.startUpdateSmartCamera() + return + def setStartStop(self, event): - assert self.debugPrint("setStartStop(event=%s)"%(event,)) if self.startStopEvent: self.ignore(self.startStopEvent) self.startStopEvent = self.getOutputEventName(event) if self.startStopEvent: self.accept(self.startStopEvent, self.startOrStop) - + def getName(self): - #return "CutScene-%s"%(self.entId,) - return "switch-%s"%(self.entId,) + return 'switch-%s' % (self.entId,) \ No newline at end of file diff --git a/otp/src/level/DistributedEntity.py b/otp/src/level/DistributedEntity.py index 1306a3f6..083723a2 100644 --- a/otp/src/level/DistributedEntity.py +++ b/otp/src/level/DistributedEntity.py @@ -1,23 +1,22 @@ from direct.distributed import DistributedObject -import Entity +from . import Entity from direct.directnotify import DirectNotifyGlobal class DistributedEntity(DistributedObject.DistributedObject, Entity.Entity): - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedEntity') + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedEntity') def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) Entity.Entity.__init__(self) - self.levelDoId = 0 self.entId = 0 self.level = None + return def generateInit(self): DistributedEntity.notify.debug('generateInit') DistributedObject.DistributedObject.generateInit(self) - # load stuff def generate(self): DistributedEntity.notify.debug('generate') @@ -32,34 +31,21 @@ def setEntId(self, entId): self.entId = entId def announceGenerate(self): - ### - ### THIS IS WHERE CLIENT-SIDE DISTRIBUTED ENTITIES GET THEIR - ### ATTRIBUTES SET - ### DistributedEntity.notify.debug('announceGenerate (%s)' % self.entId) - - # ask our level obj for our spec data if self.levelDoId != 0: level = base.cr.doId2do[self.levelDoId] self.initializeEntity(level, self.entId) - # announce our presence (Level does this for non-distributed entities) self.level.onEntityCreate(self.entId) - else: - # We don't have a level. This probably indicates an - # intention to create an Entity unassociated with any - # particular level (e.g. a Goon). self.level = None - DistributedObject.DistributedObject.announceGenerate(self) + return def disable(self): DistributedEntity.notify.debug('disable (%s)' % self.entId) - # stop things self.destroy() DistributedObject.DistributedObject.disable(self) def delete(self): DistributedEntity.notify.debug('delete') - # unload things - DistributedObject.DistributedObject.delete(self) + DistributedObject.DistributedObject.delete(self) \ No newline at end of file diff --git a/otp/src/level/DistributedEntityAI.py b/otp/src/level/DistributedEntityAI.py index 84c8ddda..ea49b357 100644 --- a/otp/src/level/DistributedEntityAI.py +++ b/otp/src/level/DistributedEntityAI.py @@ -1,5 +1,5 @@ from direct.distributed import DistributedObjectAI -import Entity +from . import Entity from direct.directnotify import DirectNotifyGlobal class DistributedEntityAI(DistributedObjectAI.DistributedObjectAI, diff --git a/otp/src/level/DistributedInteractiveEntity.py b/otp/src/level/DistributedInteractiveEntity.py index 3379ef04..68f5707a 100644 --- a/otp/src/level/DistributedInteractiveEntity.py +++ b/otp/src/level/DistributedInteractiveEntity.py @@ -1,147 +1,75 @@ -""" DistributedInteractiveEntity module: contains the DistributedInteractiveEntity - class, the client side representation of a 'landmark door'.""" - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.distributed.ClockDelta import * - from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedEntity +from . import DistributedEntity class DistributedInteractiveEntity(DistributedEntity.DistributedEntity): - """ - DistributedInteractiveEntity class: The client side representation of any - simple animated prop. - """ - - notify = DirectNotifyGlobal.directNotify.newCategory('DistributedInteractiveEntity') + __module__ = __name__ def __init__(self, cr): - """constructor for the DistributedInteractiveEntity""" DistributedEntity.DistributedEntity.__init__(self, cr) - assert self.debugPrint("DistributedInteractiveEntity()") - - self.fsm = ClassicFSM.ClassicFSM('DistributedInteractiveEntity', - [State.State('off', - self.enterOff, - self.exitOff, - ['playing', - 'attract']), - State.State('attract', - self.enterAttract, - self.exitAttract, - ['playing']), - State.State('playing', - self.enterPlaying, - self.exitPlaying, - ['attract'])], - # Initial State - 'off', - # Final State - 'off', - ) + self.fsm = ClassicFSM.ClassicFSM('DistributedInteractiveEntity', [ + State.State('off', self.enterOff, self.exitOff, [ + 'playing', 'attract']), + State.State('attract', self.enterAttract, self.exitAttract, [ + 'playing']), + State.State('playing', self.enterPlaying, self.exitPlaying, [ + 'attract'])], 'off', 'off') self.fsm.enterInitialState() - # self.generate will be called automatically. - + def generate(self): - """ - This method is called when the DistributedEntity is introduced - to the world, either for the first time or from the cache. - """ - assert self.debugPrint("generate()") DistributedEntity.DistributedEntity.generate(self) def disable(self): - assert self.debugPrint("disable()") - # Go to the off state when the object is put in the cache - self.fsm.request("off") + self.fsm.request('off') DistributedEntity.DistributedEntity.disable(self) - # self.delete() will automatically be called. - + def delete(self): - assert self.debugPrint("delete()") del self.fsm DistributedEntity.DistributedEntity.delete(self) - + def setAvatarInteract(self, avatarId): - """ - required dc field. - """ - assert self.debugPrint("setAvatarInteract(%s)"%(avatarId,)) - assert not self.__dict__.has_key(avatarId) - self.avatarId=avatarId - + self.avatarId = avatarId + def setOwnerDoId(self, ownerDoId): - """ - required dc field. - """ - assert self.debugPrint("setOwnerDoId(%s)"%(ownerDoId,)) - assert not self.__dict__.has_key("ownerDoId") - self.ownerDoId=ownerDoId - + self.ownerDoId = ownerDoId + def setState(self, state, timestamp): - assert self.debugPrint("setState(%s, %d)" % (state, timestamp)) if self.isGenerated(): self.fsm.request(state, [globalClockDelta.localElapsedTime(timestamp)]) else: self.initialState = state self.initialStateTimestamp = timestamp - - #def __getPropNodePath(self): - # assert self.debugPrint("__getPropNodePath()") - # if (not self.__dict__.has_key('propNodePath')): - # self.propNodePath=self.cr.playGame.hood.loader.geom.find( - # "**/prop"+self.entID+":*_DNARoot") - # return self.propNodePath - + def enterTrigger(self, args=None): - assert self.debugPrint("enterTrigger(args="+str(args)+")") - messenger.send("DistributedInteractiveEntity_enterTrigger") - self.sendUpdate("requestInteract") - # the AI server will reply with toonInteract or rejectInteract. - + messenger.send('DistributedInteractiveEntity_enterTrigger') + self.sendUpdate('requestInteract') + def exitTrigger(self, args=None): - assert self.debugPrint("exitTrigger(args="+str(args)+")") - messenger.send("DistributedInteractiveEntity_exitTrigger") - self.sendUpdate("requestExit") - # the AI server will reply with avatarExit. - + messenger.send('DistributedInteractiveEntity_exitTrigger') + self.sendUpdate('requestExit') + def rejectInteract(self): - """ - Server doesn't let the avatar interact with prop. - """ - assert self.debugPrint("rejectInteract()") self.cr.playGame.getPlace().setState('walk') - + def avatarExit(self, avatarId): - assert self.debugPrint("avatarExit(avatarId=%s)"%(avatarId,)) - - ##### off state ##### - + pass + def enterOff(self): - assert self.debugPrint("enterOff()") - + pass + def exitOff(self): - assert self.debugPrint("exitOff()") - - ##### attract state ##### - + pass + def enterAttract(self, ts): - assert self.debugPrint("enterAttract()") - + pass + def exitAttract(self): - assert self.debugPrint("exitAttract()") - - ##### playing state ##### - + pass + def enterPlaying(self, ts): - assert self.debugPrint("enterPlaying()") - + pass + def exitPlaying(self): - assert self.debugPrint("exitPlaying()") - - if __debug__: - def debugPrint(self, message): - """for debugging""" - return self.notify.debug( - str(self.__dict__.get('entId', '?'))+' '+message) + pass \ No newline at end of file diff --git a/otp/src/level/DistributedInteractiveEntityAI.py b/otp/src/level/DistributedInteractiveEntityAI.py index 160193f0..096fe963 100644 --- a/otp/src/level/DistributedInteractiveEntityAI.py +++ b/otp/src/level/DistributedInteractiveEntityAI.py @@ -8,7 +8,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedEntityAI +from . import DistributedEntityAI from direct.fsm import State diff --git a/otp/src/level/DistributedLevel.py b/otp/src/level/DistributedLevel.py index e0f606be..b35baa0a 100644 --- a/otp/src/level/DistributedLevel.py +++ b/otp/src/level/DistributedLevel.py @@ -1,5 +1,3 @@ -"""DistributedLevel.py: contains the DistributedLevel class""" - from direct.distributed.ClockDelta import * from pandac.PandaModules import * from direct.showbase.PythonUtil import Functor, sameElements, list2dict, uniqueElements @@ -8,33 +6,21 @@ from toontown.toonbase import ToontownGlobals from otp.otpbase import OTPGlobals from direct.distributed import DistributedObject -import Level -import LevelConstants +from . import Level, LevelConstants from direct.directnotify import DirectNotifyGlobal -import EntityCreator +from . import EntityCreator from direct.gui import OnscreenText from direct.task import Task -import LevelUtil -import random +import LevelUtil, random -class DistributedLevel(DistributedObject.DistributedObject, - Level.Level): - """DistributedLevel""" +class DistributedLevel(DistributedObject.DistributedObject, Level.Level): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLevel') - WantVisibility = config.GetBool('level-visibility', 1) - # set this to true to get all distrib objs when showing hidden zones ColorZonesAllDOs = 0 - - # TODO: move level-model stuff to LevelMgr or FactoryLevelMgr? FloorCollPrefix = 'zoneFloor' - OuchTaskName = 'ouchTask' VisChangeTaskName = 'visChange' - - # Override and set this to False to prevent the level from placing - # the avatar at the origin of a random zone in the absence of an - # entrancePoint entity. EmulateEntrancePoint = True def __init__(self, cr): @@ -42,66 +28,27 @@ def __init__(self, cr): Level.Level.__init__(self) self.lastToonZone = None self.lastCamZone = 0 - self.titleColor = (1,1,1,1) - self.titleText = OnscreenText.OnscreenText( - "", - fg = self.titleColor, - shadow = (0,0,0,1), - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.5), - scale = 0.16, - drawOrder = 0, - mayChange = 1, - ) - - self.smallTitleText = OnscreenText.OnscreenText( - "", - fg = self.titleColor, - font = ToontownGlobals.getSuitFont(), - pos = (0.65,0.9), - scale = 0.08, - drawOrder = 0, - mayChange = 1, - bg = (.5,.5,.5,.5), - align = TextNode.ARight, - ) + self.titleColor = (1, 1, 1, 1) + self.titleText = OnscreenText.OnscreenText('', fg=self.titleColor, shadow=(0, 0, 0, 1), font=ToontownGlobals.getSuitFont(), pos=(0, -0.5), scale=0.16, drawOrder=0, mayChange=1) + self.smallTitleText = OnscreenText.OnscreenText('', fg=self.titleColor, font=ToontownGlobals.getSuitFont(), pos=(0.65, 0.9), scale=0.08, drawOrder=0, mayChange=1, bg=(0.5, 0.5, 0.5, 0.5), align=TextNode.ARight) self.zonesEnteredList = [] self.fColorZones = 0 self.scenarioIndex = 0 + return def generate(self): DistributedLevel.notify.debug('generate') DistributedObject.DistributedObject.generate(self) - - # this dict stores entity reparents if the parent hasn't been - # created yet self.parent2pendingChildren = {} - - # if the AI sends us a full spec, it will be put here self.curSpec = None + base.cr.timeManager.synchronize('DistributedLevel.generate') + return - # Most (if not all) of the timed entities of levels - # run on looping intervals that are started once based on - # the level's start time. - # This sync request is *NOT* guaranteed to finish by the time - # the entities get created. - # We should listen for any and all time-sync events and re-sync - # all our entities at that time. - if base.cr.timeManager is not None: - base.cr.timeManager.synchronize('DistributedLevel.generate') - else: - self.notify.warning('generate(): no TimeManager!') - - - # the real required fields def setLevelZoneId(self, zoneId): - # this is the zone that the level is in; we should listen to this - # zone the entire time we're in here self.levelZone = zoneId def setPlayerIds(self, avIdList): self.avIdList = avIdList - assert base.localAvatar.doId in self.avIdList def setEntranceId(self, entranceId): self.entranceId = entranceId @@ -109,79 +56,50 @@ def setEntranceId(self, entranceId): def getEntranceId(self): return self.entranceId - # "required" fields (these ought to be required fields, but - # the AI level obj doesn't know the data values until it has been - # generated.) def setZoneIds(self, zoneIds): DistributedLevel.notify.debug('setZoneIds: %s' % zoneIds) self.zoneIds = zoneIds def setStartTimestamp(self, timestamp): DistributedLevel.notify.debug('setStartTimestamp: %s' % timestamp) - self.startTime = globalClockDelta.networkToLocalTime(timestamp,bits=32) - - # ugly hack: we treat a few DC fields as if they were required, - # and use 'levelAnnounceGenerate()' in place of regular old - # announceGenerate(). Note that we have to call - # gotAllRequired() in the last 'faux-required' DC update - # handler. If you add another field, move this to the last one. + self.startTime = globalClockDelta.networkToLocalTime(timestamp, bits=32) self.privGotAllRequired() - """ - # this is no longer used - def setScenarioIndex(self, scenarioIndex): - self.scenarioIndex = scenarioIndex - - # ugly hack: we treat a few DC fields as if they were required, - # and use 'levelAnnounceGenerate()' in place of regular old - # announceGenerate(). Note that we have to call - # gotAllRequired() in the last 'faux-required' DC update - # handler. If you add another field, move this to the last one. - self.privGotAllRequired() - """ - def privGotAllRequired(self): self.levelAnnounceGenerate() + def levelAnnounceGenerate(self): pass def initializeLevel(self, levelSpec): - """subclass should call this as soon as it's located its level spec. - Must be called after obj has been generated.""" if __dev__: - # if we're in dev, give the server the opportunity to send us - # a full spec self.candidateSpec = levelSpec - self.sendUpdate('requestCurrentLevelSpec', - [hash(levelSpec), - levelSpec.entTypeReg.getHashStr()]) + self.sendUpdate('requestCurrentLevelSpec', [ + hash(levelSpec), levelSpec.entTypeReg.getHashStr()]) else: self.privGotSpec(levelSpec) if __dev__: + def reportModelSpecSyncError(self, msg): - DistributedLevel.notify.error( - '%s\n' - '\n' - 'your spec does not match the level model\n' - 'use SpecUtil.updateSpec, then restart your AI and client' % - (msg)) + DistributedLevel.notify.error('%s\n\nyour spec does not match the level model\nuse SpecUtil.updateSpec, then restart your AI and client' % msg) def setSpecDeny(self, reason): DistributedLevel.notify.error(reason) - + def setSpecSenderDoId(self, doId): DistributedLevel.notify.debug('setSpecSenderDoId: %s' % doId) blobSender = base.cr.doId2do[doId] def setSpecBlob(specBlob, blobSender=blobSender, self=self): blobSender.sendAck() - from LevelSpec import LevelSpec + from .LevelSpec import LevelSpec spec = eval(specBlob) if spec is None: spec = self.candidateSpec del self.candidateSpec self.privGotSpec(spec) + return if blobSender.isComplete(): setSpecBlob(blobSender.getBlob()) @@ -191,172 +109,112 @@ def setSpecBlob(specBlob, blobSender=blobSender, self=self): self.acceptOnce(evtName, setSpecBlob) def privGotSpec(self, levelSpec): - Level.Level.initializeLevel(self, self.doId, levelSpec, - self.scenarioIndex) - - # all of the local entities have been created now. - # TODO: have any of the distributed entities been created at this point? - - # there should not be any pending reparents left at this point - # TODO: is it possible for a local entity to be parented to a - # distributed entity? I think so! - # Yes, it is. Don't do this check. - #assert len(self.parent2pendingChildren) == 0 - # make sure the zoneNums from the model match the zoneNums from - # the zone entities + Level.Level.initializeLevel(self, self.doId, levelSpec, self.scenarioIndex) modelZoneNums = self.zoneNums - specZoneNums = self.zoneNum2zoneId.keys() + specZoneNums = list(self.zoneNum2zoneId.keys()) if not sameElements(modelZoneNums, specZoneNums): - self.reportModelSpecSyncError( - 'model zone nums (%s) do not match spec zone nums (%s)' % - (modelZoneNums, specZoneNums)) - - # load stuff + self.reportModelSpecSyncError('model zone nums (%s) do not match spec zone nums (%s)' % (modelZoneNums, specZoneNums)) self.initVisibility() self.placeLocalToon() def announceLeaving(self): - """call this just before leaving the level; this may result in - the factory being destroyed on the AI""" DistributedLevel.notify.debug('announceLeaving') self.doneBarrier() - def placeLocalToon(self, moveLocalAvatar=True): + def placeLocalToon(self): initialZoneEnt = None - # the entrancePoint entities register themselves with us if self.entranceId in self.entranceId2entity: epEnt = self.entranceId2entity[self.entranceId] - if moveLocalAvatar: - epEnt.placeToon(base.localAvatar, - self.avIdList.index(base.localAvatar.doId), - len(self.avIdList)) + epEnt.placeToon(base.localAvatar, self.avIdList.index(base.localAvatar.doId), len(self.avIdList)) initialZoneEnt = self.getEntity(epEnt.getZoneEntId()) elif self.EmulateEntrancePoint: self.notify.debug('unknown entranceId %s' % self.entranceId) - if moveLocalAvatar: - base.localAvatar.reparentTo(render) - base.localAvatar.setPosHpr(0,0,0,0,0,0) + base.localAvatar.reparentTo(render) + base.localAvatar.setPosHpr(0, 0, 0, 0, 0, 0) self.notify.debug('showing all zones') self.setColorZones(1) - # put the toon in a random zone to start zoneEntIds = list(self.entType2ids['zone']) zoneEntIds.remove(LevelConstants.UberZoneEntId) if len(zoneEntIds): zoneEntId = random.choice(zoneEntIds) initialZoneEnt = self.getEntity(zoneEntId) - if moveLocalAvatar: - base.localAvatar.setPos( - render, - initialZoneEnt.getZoneNode().getPos(render)) + base.localAvatar.setPos(render, initialZoneEnt.getZoneNode().getPos(render)) else: - initialZoneEnt = self.getEntity( - LevelConstants.UberZoneEntId) - if moveLocalAvatar: - base.localAvatar.setPos(render,0,0,0) - + initialZoneEnt = self.getEntity(LevelConstants.UberZoneEntId) + base.localAvatar.setPos(render, 0, 0, 0) if initialZoneEnt is not None: - # kickstart the visibility self.enterZone(initialZoneEnt.entId) + return def createEntityCreator(self): - """Create the object that will be used to create Entities. - Inheritors, override if desired.""" return EntityCreator.EntityCreator(level=self) def onEntityTypePostCreate(self, entType): - """listen for certain entity types to be created""" Level.Level.onEntityTypePostCreate(self, entType) - # NOTE: these handlers are private in order to avoid overriding - # similar handlers in base classes if entType == 'levelMgr': self.__handleLevelMgrCreated() def __handleLevelMgrCreated(self): - # as soon as the levelMgr has been created, load up the model - # and extract zone info. We need to do this before any entities - # get parented to the level! levelMgr = self.getEntity(LevelConstants.LevelMgrEntId) self.geom = levelMgr.geom - - # find the zones in the model and fix them up self.zoneNum2node = LevelUtil.getZoneNum2Node(self.geom) - - self.zoneNums = self.zoneNum2node.keys() + self.zoneNums = list(self.zoneNum2node.keys()) self.zoneNums.sort() self.zoneNumDict = list2dict(self.zoneNums) DistributedLevel.notify.debug('zones from model: %s' % self.zoneNums) - - # give the level a chance to muck with the model before the entities - # get placed self.fixupLevelModel() - + def fixupLevelModel(self): - # fix up the floor collisions for walkable zones *before* - # any entities get put under the model - for zoneNum,zoneNode in self.zoneNum2node.items(): - # don't do this to the uberzone + for (zoneNum, zoneNode) in list(self.zoneNum2node.items()): if zoneNum == LevelConstants.UberZoneEntId: continue - # if this is a walkable zone, fix up the model - allColls = zoneNode.findAllMatches('**/+CollisionNode') - # which of them, if any, are floors? + allColls = zoneNode.findAllMatches('**/+CollisionNode').asList() floorColls = [] for coll in allColls: bitmask = coll.node().getIntoCollideMask() if not (bitmask & ToontownGlobals.FloorBitmask).isZero(): floorColls.append(coll) + if len(floorColls) > 0: - # rename the floor collision nodes, and make sure no other - # nodes under the ZoneNode have that name - floorCollName = '%s%s' % (DistributedLevel.FloorCollPrefix, - zoneNum) - others = zoneNode.findAllMatches( - '**/%s' % floorCollName) + floorCollName = '%s%s' % (DistributedLevel.FloorCollPrefix, zoneNum) + others = zoneNode.findAllMatches('**/%s' % floorCollName).asList() for other in others: other.setName('%s_renamed' % floorCollName) + for floorColl in floorColls: floorColl.setName(floorCollName) - # listen for zone enter events from floor collisions - def handleZoneEnter(collisionEntry, - self=self, zoneNum=zoneNum): + def handleZoneEnter(collisionEntry, self=self, zoneNum=zoneNum): self.toonEnterZone(zoneNum) floorNode = collisionEntry.getIntoNode() if floorNode.hasTag('ouch'): ouchLevel = int(self.getFloorOuchLevel()) self.startOuch(ouchLevel) + self.accept('enter%s' % floorCollName, handleZoneEnter) - # also listen for zone exit events for the sake of the - # ouch system - def handleZoneExit(collisionEntry, - self=self, zoneNum=zoneNum): + def handleZoneExit(collisionEntry, self=self, zoneNum=zoneNum): floorNode = collisionEntry.getIntoNode() if floorNode.hasTag('ouch'): self.stopOuch() + self.accept('exit%s' % floorCollName, handleZoneExit) def getFloorOuchLevel(self): - # override this to make dangerous ground do more damage return 1 - + def announceGenerate(self): DistributedLevel.notify.debug('announceGenerate') DistributedObject.DistributedObject.announceGenerate(self) def disable(self): DistributedLevel.notify.debug('disable') - - # geom is owned by the levelMgr if hasattr(self, 'geom'): del self.geom - self.shutdownVisibility() self.destroyLevel() self.ignoreAll() - - # NOTE: this should be moved to FactoryInterior - taskMgr.remove(self.uniqueName("titleText")) + taskMgr.remove(self.uniqueName('titleText')) if self.smallTitleText: self.smallTitleText.cleanup() self.smallTitleText = None @@ -364,71 +222,54 @@ def disable(self): self.titleText.cleanup() self.titleText = None self.zonesEnteredList = [] - DistributedObject.DistributedObject.disable(self) + return def delete(self): DistributedLevel.notify.debug('delete') DistributedObject.DistributedObject.delete(self) - # make sure the ouch task is stopped self.stopOuch() - + def requestReparent(self, entity, parentId, wrt=False): - if __debug__: - # some things (like cogs) are not actually entities yet; - # they don't have an entId. Big deal, let it go through. - if hasattr(entity, 'entId'): - assert entity.entId != parentId parent = self.getEntity(parentId) if parent is not None: - # parent has already been created if wrt: entity.wrtReparentTo(parent.getNodePath()) else: entity.reparentTo(parent.getNodePath()) else: - # parent hasn't been created yet; schedule the reparent - DistributedLevel.notify.debug( - 'entity %s requesting reparent to %s, not yet created' % - (entity, parentId)) - + DistributedLevel.notify.debug('entity %s requesting reparent to %s, not yet created' % (entity, parentId)) entity.reparentTo(hidden) - - # if this parent doesn't already have another child pending, - # do some setup - if not self.parent2pendingChildren.has_key(parentId): + if parentId not in self.parent2pendingChildren: self.parent2pendingChildren[parentId] = [] - # do the reparent(s) once the parent is initialized def doReparent(parentId=parentId, self=self, wrt=wrt): - assert self.parent2pendingChildren.has_key(parentId) - parent=self.getEntity(parentId) + parent = self.getEntity(parentId) for child in self.parent2pendingChildren[parentId]: - DistributedLevel.notify.debug( - 'performing pending reparent of %s to %s' % - (child, parent)) + DistributedLevel.notify.debug('performing pending reparent of %s to %s' % (child, parent)) if wrt: child.wrtReparentTo(parent.getNodePath()) else: child.reparentTo(parent.getNodePath()) + del self.parent2pendingChildren[parentId] self.ignore(self.getEntityCreateEvent(parentId)) - - self.accept(self.getEntityCreateEvent(parentId), doReparent) + self.accept(self.getEntityCreateEvent(parentId), doReparent) self.parent2pendingChildren[parentId].append(entity) - + return + def getZoneNode(self, zoneEntId): return self.zoneNum2node.get(zoneEntId) def warpToZone(self, zoneNum): - """put avatar at the origin of the given zone""" zoneNode = self.getZoneNode(zoneNum) if zoneNode is None: return - base.localAvatar.setPos(zoneNode,0,0,0) - base.localAvatar.setHpr(zoneNode,0,0,0) + base.localAvatar.setPos(zoneNode, 0, 0, 0) + base.localAvatar.setHpr(zoneNode, 0, 0, 0) self.enterZone(zoneNum) + return def showZone(self, zoneNum): zone = self.getZoneNode(zoneNum) @@ -446,7 +287,7 @@ def hideZone(self, zoneNum): zone = self.getZoneNode(zoneNum) if self.fColorZones: zone.unstash() - zone.setColor(1,0,0) + zone.setColor(1, 0, 0) else: zone.stash() @@ -457,174 +298,101 @@ def setTransparency(self, alpha, zone=None): else: node = self.getZoneNode(zoneNum) node.setAlphaScale(alpha) + return def initVisibility(self): - # start out with every zone visible, since none of the zones have - # been hidden self.curVisibleZoneNums = list2dict(self.zoneNums) - # the UberZone is always visible, so it's not included in the - # zones' viz lists del self.curVisibleZoneNums[LevelConstants.UberZoneEntId] - # we have not entered any zone yet self.curZoneNum = None - self.visChangedThisFrame = 0 self.fForceSetZoneThisFrame = 0 - # listen for camera-ray/floor collision events def handleCameraRayFloorCollision(collEntry, self=self): name = collEntry.getIntoNode().getName() self.notify.debug('camera floor ray collided with: %s' % name) prefixLen = len(DistributedLevel.FloorCollPrefix) - if (name[:prefixLen] == DistributedLevel.FloorCollPrefix): + if name[:prefixLen] == DistributedLevel.FloorCollPrefix: try: zoneNum = int(name[prefixLen:]) except: - DistributedLevel.notify.warning( - 'Invalid zone floor collision node: %s' - % name) + DistributedLevel.notify.warning('Invalid zone floor collision node: %s' % name) else: self.camEnterZone(zoneNum) - self.accept('on-floor', handleCameraRayFloorCollision) - # if no viz, listen to all the zones + self.accept('on-floor', handleCameraRayFloorCollision) if not DistributedLevel.WantVisibility: zoneNums = list(self.zoneNums) zoneNums.remove(LevelConstants.UberZoneEntId) - # make sure a setZone goes out on the first frame self.forceSetZoneThisFrame() self.setVisibility(zoneNums) - - # send out any zone changes at the end of the frame, just before - # rendering - taskMgr.add(self.visChangeTask, - self.uniqueName(DistributedLevel.VisChangeTaskName), - priority=49) + taskMgr.add(self.visChangeTask, self.uniqueName(DistributedLevel.VisChangeTaskName), priority=49) + return def shutdownVisibility(self): taskMgr.remove(self.uniqueName(DistributedLevel.VisChangeTaskName)) def toonEnterZone(self, zoneNum, ouchLevel=None): - """ - zoneNum is an int. - ouchLevel is a ??. - - The avatar (and not necessarily the camera) has entered - a zone. - See camEnterZone() - """ DistributedLevel.notify.debug('toonEnterZone%s' % zoneNum) - if zoneNum != self.lastToonZone: self.lastToonZone = zoneNum - self.notify.debug("toon is standing in zone %s" % zoneNum) - messenger.send("factoryZoneChanged", [zoneNum]) + self.notify.debug('toon is standing in zone %s' % zoneNum) + messenger.send('factoryZoneChanged', [zoneNum]) def camEnterZone(self, zoneNum): - """ - zoneNum is an int. - - The camera (and not necessarily the avatar) has entered - a zone. - See toonEnterZone() - """ DistributedLevel.notify.debug('camEnterZone%s' % zoneNum) self.enterZone(zoneNum) - if zoneNum != self.lastCamZone: self.lastCamZone = zoneNum self.smallTitleText.hide() self.spawnTitleText() def lockVisibility(self, zoneNum=None, zoneId=None): - """call this to lock the visibility to a particular zone - pass in either network zoneId or zoneNum - - this was added for battles in the HQ factories; if you engage a suit - in zone A with your camera in zone B, and you don't call this func, - your client will remain in zone B. If there's a door between A and B, - and it closes, zone B might disappear, along with the suit and the - battle objects. - """ - assert zoneNum is None or zoneId is None - assert not ((zoneNum is None) and (zoneId is None)) if zoneId is not None: zoneNum = self.getZoneNumFromId(zoneId) - self.notify.debug('lockVisibility to zoneNum %s' % zoneNum) self.lockVizZone = zoneNum self.enterZone(self.lockVizZone) + return def unlockVisibility(self): - """release the visibility lock""" self.notify.debug('unlockVisibility') if not hasattr(self, 'lockVizZone'): self.notify.warning('visibility already unlocked') else: del self.lockVizZone self.updateVisibility() - def enterZone(self, zoneNum): - DistributedLevel.notify.debug("entering zone %s" % zoneNum) - + DistributedLevel.notify.debug('entering zone %s' % zoneNum) if not DistributedLevel.WantVisibility: return - if zoneNum == self.curZoneNum: return - if zoneNum not in self.zoneNumDict: - DistributedLevel.notify.error( - 'no ZoneEntity for this zone (%s)!!' % zoneNum) - + DistributedLevel.notify.error('no ZoneEntity for this zone (%s)!!' % zoneNum) self.updateVisibility(zoneNum) def updateVisibility(self, zoneNum=None): - """update the visibility assuming that we're in the specified - zone; don't check to see if it's the zone we're already in""" - #self.notify.debug('updateVisibility %s' % globalClock.getFrameCount()) if zoneNum is None: zoneNum = self.curZoneNum if zoneNum is None: return if hasattr(self, 'lockVizZone'): zoneNum = self.lockVizZone - zoneEnt = self.getEntity(zoneNum) - # use dicts to efficiently ensure that there are no duplicates visibleZoneNums = list2dict([zoneNum]) visibleZoneNums.update(list2dict(zoneEnt.getVisibleZoneNums())) - if not __debug__: - # HACK - # make sure that the visibility list includes the zone that the toon - # is standing in if self.lastToonZone not in visibleZoneNums: - # make sure there IS a last zone if self.lastToonZone is not None: - self.notify.warning( - 'adding zoneNum %s to visibility list ' - 'because toon is standing in that zone!' % - self.lastToonZone) + self.notify.warning('adding zoneNum %s to visibility list because toon is standing in that zone!' % self.lastToonZone) visibleZoneNums.update(list2dict([self.lastToonZone])) - - # we should not have the uberZone in the list at this point - zoneEntIds = list(self.entType2ids['zone']) - zoneEntIds.remove(LevelConstants.UberZoneEntId) - if len(zoneEntIds): - assert not LevelConstants.UberZoneEntId in visibleZoneNums - - # this flag will prevent a network msg from being sent if - # the list of visible zones has not changed vizZonesChanged = 1 - # figure out which zones are new and which are going invisible - # use dicts because 'x in dict' is faster than 'x in list' addedZoneNums = [] removedZoneNums = [] allVZ = dict(visibleZoneNums) allVZ.update(self.curVisibleZoneNums) - for vz,dummy in allVZ.items(): + for (vz, dummy) in list(allVZ.items()): new = vz in visibleZoneNums old = vz in self.curVisibleZoneNums if new and old: @@ -634,218 +402,133 @@ def updateVisibility(self, zoneNum=None): else: removedZoneNums.append(vz) - if (not addedZoneNums) and (not removedZoneNums): - DistributedLevel.notify.debug( - 'visible zone list has not changed') + if not addedZoneNums and not removedZoneNums: + DistributedLevel.notify.debug('visible zone list has not changed') vizZonesChanged = 0 - else: - # show the new, hide the old - DistributedLevel.notify.debug('showing zones %s' % - addedZoneNums) - for az in addedZoneNums: - self.showZone(az) - DistributedLevel.notify.debug('hiding zones %s' % - removedZoneNums) - for rz in removedZoneNums: - self.hideZone(rz) - - # it's important for us to send a setZone request on the first - # frame, whether or not the visibility is different from what - # we already have + DistributedLevel.notify.debug('showing zones %s' % addedZoneNums) + for az in addedZoneNums: + self.showZone(az) + + DistributedLevel.notify.debug('hiding zones %s' % removedZoneNums) + for rz in removedZoneNums: + self.hideZone(rz) + if vizZonesChanged or self.fForceSetZoneThisFrame: - self.setVisibility(visibleZoneNums.keys()) + self.setVisibility(list(visibleZoneNums.keys())) self.fForceSetZoneThisFrame = 0 - self.curZoneNum = zoneNum self.curVisibleZoneNums = visibleZoneNums + return def setVisibility(self, vizList): - """ - vizList is a list of visible zone numbers. - """ - # if we're showing all zones, get all the DOs if self.fColorZones and DistributedLevel.ColorZonesAllDOs: vizList = list(self.zoneNums) vizList.remove(LevelConstants.UberZoneEntId) - # convert the zone numbers into their actual zoneIds - # always include Toontown and factory uberZones uberZone = self.getZoneId(LevelConstants.UberZoneEntId) - # the level itself is in the 'level zone' - visibleZoneIds = [OTPGlobals.UberZone, self.levelZone, uberZone] + visibleZoneIds = [ + OTPGlobals.UberZone, self.levelZone, uberZone] for vz in vizList: - if vz is not LevelConstants.UberZoneEntId: - visibleZoneIds.append(self.getZoneId(vz)) - assert uniqueElements(visibleZoneIds) - DistributedLevel.notify.debug('new viz list: %s' % visibleZoneIds) + visibleZoneIds.append(self.getZoneId(vz)) + DistributedLevel.notify.debug('new viz list: %s' % visibleZoneIds) base.cr.sendSetZoneMsg(self.levelZone, visibleZoneIds) def resetVisibility(self): - # start out with every zone visible, since none of the zones have - # been hidden self.curVisibleZoneNums = list2dict(self.zoneNums) - # the UberZone is always visible, so it's not included in the - # zones' viz lists del self.curVisibleZoneNums[LevelConstants.UberZoneEntId] - # Make sure every zone is visible - for vz,dummy in self.curVisibleZoneNums.items(): + for (vz, dummy) in list(self.curVisibleZoneNums.items()): self.showZone(vz) - # Redo visibility using current zone num + self.updateVisibility() def handleVisChange(self): - """the zone visibility lists have changed on-the-fly""" Level.Level.handleVisChange(self) self.visChangedThisFrame = 1 def forceSetZoneThisFrame(self): - # call this to ensure that a setZone call will be generated this frame self.fForceSetZoneThisFrame = 1 def visChangeTask(self, task): - # this runs just before igLoop; if viz lists have changed - # this frame, updates the visibility and sends out a setZoneMsg if self.visChangedThisFrame or self.fForceSetZoneThisFrame: self.updateVisibility() self.visChangedThisFrame = 0 return Task.cont if __dev__: - # level editing stuff + def setAttribChange(self, entId, attribName, valueStr, username): - """every time the spec is edited, we get this message - from the AI""" value = eval(valueStr) self.levelSpec.setAttribChange(entId, attribName, value, username) def spawnTitleText(self): + def getDescription(zoneNum, self=self): ent = self.entities.get(zoneNum) if ent and hasattr(ent, 'description'): return ent.description return None + return description = getDescription(self.lastCamZone) if description and description != '': - taskMgr.remove(self.uniqueName("titleText")) + taskMgr.remove(self.uniqueName('titleText')) self.smallTitleText.setText(description) self.titleText.setText(description) self.titleText.setColor(Vec4(*self.titleColor)) self.titleText.setFg(self.titleColor) - - # Only show the big title once per session. - # If we've already seen it, just show the small title - titleSeq = None if not self.lastCamZone in self.zonesEnteredList: self.zonesEnteredList.append(self.lastCamZone) - titleSeq = Task.sequence( - Task.Task(self.hideSmallTitleTextTask), - Task.Task(self.showTitleTextTask), - Task.pause(0.1), - Task.pause(6.0), - self.titleText.lerpColor(Vec4(self.titleColor[0], - self.titleColor[1], - self.titleColor[2], - self.titleColor[3]), - Vec4(self.titleColor[0], - self.titleColor[1], - self.titleColor[2], - 0.0), - 0.5), - ) - smallTitleSeq = Task.sequence(Task.Task(self.hideTitleTextTask), - Task.Task(self.showSmallTitleTask)) + titleSeq = Task.sequence(Task.Task(self.hideSmallTitleTextTask), Task.Task(self.showTitleTextTask), Task.pause(0.1), Task.pause(6.0), self.titleText.lerpColor(Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], self.titleColor[3]), Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], 0.0), 0.5)) + smallTitleSeq = Task.sequence(Task.Task(self.hideTitleTextTask), Task.Task(self.showSmallTitleTask)) if titleSeq: seq = Task.sequence(titleSeq, smallTitleSeq) else: seq = smallTitleSeq - taskMgr.add(seq, self.uniqueName("titleText")) - - - def showInfoText(self, text = "hello world"): - description = text - if description and description != '': - taskMgr.remove(self.uniqueName("titleText")) - self.smallTitleText.setText(description) - self.titleText.setText(description) - self.titleText.setColor(Vec4(*self.titleColor)) - self.titleText.setFg(self.titleColor) + taskMgr.add(seq, self.uniqueName('titleText')) + return - # Only show the big title once per session. - # If we've already seen it, just show the small title - - titleSeq = None - titleSeq = Task.sequence( - Task.Task(self.hideSmallTitleTextTask), - Task.Task(self.showTitleTextTask), - Task.pause(0.1), - Task.pause(3.0), - self.titleText.lerpColor(Vec4(self.titleColor[0], - self.titleColor[1], - self.titleColor[2], - self.titleColor[3]), - Vec4(self.titleColor[0], - self.titleColor[1], - self.titleColor[2], - 0.0), - 0.5), - ) - - if titleSeq: - seq = Task.sequence(titleSeq) - taskMgr.add(seq, self.uniqueName("titleText")) - def showTitleTextTask(self, task): - assert DistributedLevel.notify.debug("hideTitleTextTask()") self.titleText.show() return Task.done def hideTitleTextTask(self, task): - assert DistributedLevel.notify.debug("hideTitleTextTask()") if self.titleText: self.titleText.hide() return Task.done def showSmallTitleTask(self, task): - # make sure large title is hidden if self.titleText: self.titleText.hide() - # show the small title self.smallTitleText.show() return Task.done - + def hideSmallTitleTextTask(self, task): - assert DistributedLevel.notify.debug("hideTitleTextTask()") if self.smallTitleText: self.smallTitleText.hide() return Task.done - # Ouch! def startOuch(self, ouchLevel, period=2): self.notify.debug('startOuch %s' % ouchLevel) if not hasattr(self, 'doingOuch'): + def doOuch(task, self=self, ouchLevel=ouchLevel, period=period): self.b_setOuch(ouchLevel) self.lastOuchTime = globalClock.getFrameTime() - taskMgr.doMethodLater(period, doOuch, - DistributedLevel.OuchTaskName) + taskMgr.doMethodLater(period, doOuch, DistributedLevel.OuchTaskName) - # check to make sure we haven't done an ouch too recently delay = 0 if hasattr(self, 'lastOuchTime'): curFrameTime = globalClock.getFrameTime() - timeSinceLastOuch = (curFrameTime - self.lastOuchTime) + timeSinceLastOuch = curFrameTime - self.lastOuchTime if timeSinceLastOuch < period: delay = period - timeSinceLastOuch - if delay > 0: - taskMgr.doMethodLater( - period, doOuch, - DistributedLevel.OuchTaskName) + taskMgr.doMethodLater(period, doOuch, DistributedLevel.OuchTaskName) else: doOuch(None) self.doingOuch = 1 + return def stopOuch(self): if hasattr(self, 'doingOuch'): @@ -855,26 +538,18 @@ def stopOuch(self): def b_setOuch(self, penalty, anim=None): self.notify.debug('b_setOuch %s' % penalty) av = base.localAvatar - - # play the stun track (flashing toon) if not av.isStunned: self.d_setOuch(penalty) self.setOuch(penalty, anim) def d_setOuch(self, penalty): - self.sendUpdate("setOuch", [penalty]) - - def setOuch(self, penalty, anim = None): - if anim == "Squish": - if base.cr.playGame.getPlace(): - base.cr.playGame.getPlace().fsm.request('squished') - elif anim == "Fall": - if base.cr.playGame.getPlace(): - base.cr.playGame.getPlace().fsm.request('fallDown') - + self.sendUpdate('setOuch', [penalty]) + + def setOuch(self, penalty, anim=None): + if anim == 'Squish': + base.cr.playGame.getPlace().fsm.request('squished') + elif anim == 'Fall': + base.cr.playGame.getPlace().fsm.request('fallDown') av = base.localAvatar av.stunToon() - av.playDialogueForString("!") - - def complexVis(self): - return 1 + av.playDialogueForString('!') \ No newline at end of file diff --git a/otp/src/level/DistributedLevelAI.py b/otp/src/level/DistributedLevelAI.py index 3dc2f7e9..0933b2d5 100644 --- a/otp/src/level/DistributedLevelAI.py +++ b/otp/src/level/DistributedLevelAI.py @@ -3,9 +3,9 @@ from otp.ai.AIBaseGlobal import * from direct.distributed.ClockDelta import * from direct.distributed import DistributedObjectAI -import Level +from . import Level from direct.directnotify import DirectNotifyGlobal -import EntityCreatorAI +from . import EntityCreatorAI from direct.showbase.PythonUtil import Functor, weightedChoice class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI, @@ -87,8 +87,8 @@ def initializeLevel(self, levelSpec): # choose a scenario # make list of lists: [(weight, scenarioIndex), ...] - lol = zip([1] * levelSpec.getNumScenarios(), - range(levelSpec.getNumScenarios())) + lol = list(zip([1] * levelSpec.getNumScenarios(), + list(range(levelSpec.getNumScenarios())))) scenarioIndex = weightedChoice(lol) Level.Level.initializeLevel(self, self.doId, levelSpec, scenarioIndex) diff --git a/otp/src/level/EditMgr.py b/otp/src/level/EditMgr.py index a5cea0be..c548a914 100644 --- a/otp/src/level/EditMgr.py +++ b/otp/src/level/EditMgr.py @@ -1,7 +1,4 @@ -"""EditMgr module: contains the EditMgr class""" - -import EditMgrBase +from . import EditMgrBase class EditMgr(EditMgrBase.EditMgrBase): - """This class handles client-side editor-specific functionality""" - pass + __module__ = __name__ \ No newline at end of file diff --git a/otp/src/level/EditMgrAI.py b/otp/src/level/EditMgrAI.py index db2cf775..22944053 100644 --- a/otp/src/level/EditMgrAI.py +++ b/otp/src/level/EditMgrAI.py @@ -1,9 +1,9 @@ """EditMgrAI module: contains the EditMgrAI class""" -import EditMgrBase +from . import EditMgrBase if __dev__: from direct.showbase.PythonUtil import list2dict - import EditorGlobals + from . import EditorGlobals class EditMgrAI(EditMgrBase.EditMgrBase): """This class handles AI-side editor-specific functionality""" @@ -26,8 +26,8 @@ def setRequestNewEntity(self, data): while not idChosen: # linear search for an unused entId starting with the # last-allocated id - for id in xrange(self.lastAllocatedEntId, allocRange[1]): - print id + for id in range(self.lastAllocatedEntId, allocRange[1]): + print(id) if not id in entIdDict: idChosen = 1 break diff --git a/otp/src/level/EditMgrBase.py b/otp/src/level/EditMgrBase.py index 78bbf5a7..40b009e5 100644 --- a/otp/src/level/EditMgrBase.py +++ b/otp/src/level/EditMgrBase.py @@ -1,11 +1,10 @@ -"""EditMgrBase module: contains the EditMgrBase class""" - -import Entity +from . import Entity from direct.directnotify import DirectNotifyGlobal class EditMgrBase(Entity.Entity): - """This class contains EditMgr code shared between AI and client""" - notify = DirectNotifyGlobal.directNotify.newCategory("EditMgr") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('EditMgr') + def __init__(self, level, entId): Entity.Entity.__init__(self, level, entId) @@ -14,21 +13,14 @@ def destroy(self): self.ignoreAll() if __dev__: + def setInsertEntity(self, data): - # tell the level who created this entity self.level.setEntityCreatorUsername(data['entId'], data['username']) - # create the entity - self.level.levelSpec.insertEntity(data['entId'], - data['entType'], - data['parentEntId'], - ) - # clear out the attrib, it shouldn't be kept in the spec - self.level.levelSpec.doSetAttrib(self.entId, 'insertEntity', - None) + self.level.levelSpec.insertEntity(data['entId'], data['entType'], data['parentEntId']) + self.level.levelSpec.doSetAttrib(self.entId, 'insertEntity', None) + return def setRemoveEntity(self, data): - self.level.levelSpec.removeEntity(data['entId'], - ) - # clear out the attrib, it shouldn't be kept in the spec - self.level.levelSpec.doSetAttrib(self.entId, 'removeEntity', - None) + self.level.levelSpec.removeEntity(data['entId']) + self.level.levelSpec.doSetAttrib(self.entId, 'removeEntity', None) + return \ No newline at end of file diff --git a/otp/src/level/EditorGlobals.py b/otp/src/level/EditorGlobals.py index 30b303b7..23c702c2 100644 --- a/otp/src/level/EditorGlobals.py +++ b/otp/src/level/EditorGlobals.py @@ -21,7 +21,7 @@ 'jloehrle':10*EntIdRange, 'rurbino' :11*EntIdRange, } -assert uniqueElements(username2entIdBase.values()) +assert uniqueElements(list(username2entIdBase.values())) usernameConfigVar = 'level-edit-username' undefinedUsername = 'UNDEFINED_USERNAME' diff --git a/otp/src/level/Entity.py b/otp/src/level/Entity.py index 66b55b0d..f6b02c23 100644 --- a/otp/src/level/Entity.py +++ b/otp/src/level/Entity.py @@ -1,116 +1,75 @@ -"""Entity.py: contains the Entity class""" - -from direct.showbase.DirectObject import DirectObject +from direct.showbase.DirectObject import * from direct.showbase.PythonUtil import lineInfo -import string from direct.directnotify import DirectNotifyGlobal class Entity(DirectObject): - """ - Entity is the base class for all objects that exist in a Level - and can be edited with the LevelEditor. - """ notify = DirectNotifyGlobal.directNotify.newCategory('Entity') def __init__(self, level=None, entId=None): self.initializeEntity(level, entId) def initializeEntity(self, level, entId): - ### - ### THIS IS WHERE ENTITIES GET THEIR ATTRIBUTES SET - ### - """ - Distributed entities on the client don't know their level or - entId values until they've been generated, so they call this - after they've been generated. At that point, the entity is good - to go. - """ self.level = level self.entId = entId - if (self.level is not None) and (self.entId is not None): + if self.level is not None and self.entId is not None: self.level.initializeEntity(self) + return def __str__(self): - if hasattr(self, 'level') and self.level: + if self.level: return 'ent%s(%s)' % (self.entId, self.level.getEntityType(self.entId)) - elif hasattr(self, 'name'): - return self.name - elif hasattr(self, 'entId'): - return '%s-%s' % (self.__class__.__name__, self.entId) else: - return self.__class__.__name__ - + return self.name + def destroy(self): - """ - This is called when the level wants this entity to go away. - Once this is called, the Entity should be considered defunct. - NOTE: distributed entities are still valid distributed objects - after this is called, but they are no longer valid entities. - Distributed entities ought to be disabled and/or deleted shortly - after this is called. - """ Entity.notify.debug('Entity.destroy() %s' % self.entId) - # client-side distributed entities might be doing this after - # the level has been been destroyed...? if self.level: if self.level.isInitialized(): self.level.onEntityDestroy(self.entId) else: - Entity.notify.warning('Entity %s destroyed after level??' % - self.entId) + Entity.notify.warning('Entity %s destroyed after level??' % self.entId) self.ignoreAll() del self.level del self.entId - + def getUniqueName(self, name, entId=None): - """returns a name that is unique for a particular entity; - defaults to this entity""" if entId is None: entId = self.entId return '%s-%s-%s' % (name, self.level.levelId, entId) + return def getParentToken(self): - """returns a value that uniquely identifies this entity for purposes - of distributed parenting""" - # give the level the option of modifying our entId, to handle instances - # where there are multiple levels present on the client simultaneously return self.level.getParentTokenForEntity(self.entId) def getOutputEventName(self, entId=None): - """returns the event generated by an entity; defaults to this entity""" if entId is None: entId = self.entId return self.getUniqueName('entityOutput', entId) + return def getZoneEntId(self): - """returns entId of zone that contains this entity""" return self.level.getEntityZoneEntId(self.entId) def getZoneEntity(self): - """returns zone entity for zone that contains this entity""" return self.level.getEntity(self.getZoneEntId()) def getZoneNode(self): - """returns zoneNode for zone that contains this entity""" return self.getZoneEntity().getNodePath() def privGetSetter(self, attrib): - setFuncName = 'set%s%s' % (string.upper(attrib[0]), attrib[1:]) + setFuncName = 'set%s%s' % (attrib[0].upper(), attrib[1:]) if hasattr(self, setFuncName): return getattr(self, setFuncName) return None + return def callSetters(self, *attribs): - """call this with a list of attribs, and any that exist on the - entity and have setters will be passed to their setter""" self.privCallSetters(0, *attribs) def callSettersAndDelete(self, *attribs): - """same as callSetters, but also removes attribs from entity""" self.privCallSetters(1, *attribs) def privCallSetters(self, doDelete, *attribs): - """common implementation of callSetters and callSettersAndDelete""" for attrib in attribs: if hasattr(self, attrib): setter = self.privGetSetter(attrib) @@ -120,44 +79,21 @@ def privCallSetters(self, doDelete, *attribs): delattr(self, attrib) setter(value) - # this will be called with each item of our spec data on initialization + return + def setAttribInit(self, attrib, value): -## if __debug__: -## if hasattr(self, attrib): -## Entity.notify.warning( -## '%s already has member %s in setAttribInit' % -## (self, attrib)) - # TODO: we should probably put this crep in a dictionary - # rather than dump it into the entity's namespace self.__dict__[attrib] = value - if __debug__: - def debugPrint(self, message): - """for debugging""" - return self.notify.debug( - str(self.__dict__.get('entId', '?'))+' '+message) - if __dev__: - # support for level editing + def handleAttribChange(self, attrib, value): - # call callback function if it exists - # otherwise set attrib directly and call notify func setter = self.privGetSetter(attrib) if setter is not None: - # call the setter setter(value) else: - # set the attrib directly self.__dict__[attrib] = value - # and call the notify func self.attribChanged(attrib, value) + return def attribChanged(self, attrib, value): - """ - This is called when a parameter is tweaked and no setter - is called; i.e. the value is set directly on the object. - Some Entities might want to completely reset every time anything - is tweaked; this is the place to do it, just override this func - in your derived class - """ - pass + pass \ No newline at end of file diff --git a/otp/src/level/EntityCreator.py b/otp/src/level/EntityCreator.py index a8305f7c..80d5dbf8 100644 --- a/otp/src/level/EntityCreator.py +++ b/otp/src/level/EntityCreator.py @@ -1,61 +1,22 @@ -"""EntityCreator module: contains the EntityCreator class""" - -import CutScene -import EntityCreatorBase -import BasicEntities +import CutScene, EntityCreatorBase, BasicEntities from direct.directnotify import DirectNotifyGlobal -import EditMgr -import EntrancePoint -import LevelMgr -import LogicGate -import ZoneEntity -import ModelEntity -import PathEntity -import VisibilityExtender -import PropSpinner -import AmbientSound -import LocatorEntity -import CollisionSolidEntity +import EditMgr, EntrancePoint, LevelMgr, LogicGate, ZoneEntity, ModelEntity, PathEntity, VisibilityExtender, PropSpinner, AmbientSound, LocatorEntity, CollisionSolidEntity -# some useful constructor functions -# ctor functions must take (level, entId) -# and they must return the entity that was created, or 'nothing' def nothing(*args): - """For entities that don't exist on the client at all""" return 'nothing' + def nonlocal(*args): - """For entities that don't need to be created by the client and will - show up independently (they're distributed and created by the AI)""" return 'nonlocal' + class EntityCreator(EntityCreatorBase.EntityCreatorBase): - """ - This class is responsible for creating instances of Entities on the - client. It can be subclassed to handle more Entity types. - """ - + __module__ = __name__ + def __init__(self, level): EntityCreatorBase.EntityCreatorBase.__init__(self, level) self.level = level - self.privRegisterTypes({ - 'attribModifier': nothing, - 'ambientSound': AmbientSound.AmbientSound, - 'collisionSolid': CollisionSolidEntity.CollisionSolidEntity, - 'cutScene': CutScene.CutScene, - 'editMgr': EditMgr.EditMgr, - 'entityGroup': nothing, - 'entrancePoint': EntrancePoint.EntrancePoint, - 'levelMgr': LevelMgr.LevelMgr, - 'locator': LocatorEntity.LocatorEntity, - 'logicGate': LogicGate.LogicGate, - 'model': ModelEntity.ModelEntity, - 'nodepath': BasicEntities.NodePathEntity, - 'path': PathEntity.PathEntity, - 'propSpinner': PropSpinner.PropSpinner, - 'visibilityExtender': VisibilityExtender.VisibilityExtender, - 'zone': ZoneEntity.ZoneEntity, - }) + self.privRegisterTypes({'attribModifier': nothing, 'ambientSound': AmbientSound.AmbientSound, 'collisionSolid': CollisionSolidEntity.CollisionSolidEntity, 'cutScene': CutScene.CutScene, 'editMgr': EditMgr.EditMgr, 'entityGroup': nothing, 'entrancePoint': EntrancePoint.EntrancePoint, 'levelMgr': LevelMgr.LevelMgr, 'locator': LocatorEntity.LocatorEntity, 'logicGate': LogicGate.LogicGate, 'model': ModelEntity.ModelEntity, 'nodepath': BasicEntities.NodePathEntity, 'path': PathEntity.PathEntity, 'propSpinner': PropSpinner.PropSpinner, 'visibilityExtender': VisibilityExtender.VisibilityExtender, 'zone': ZoneEntity.ZoneEntity}) def doCreateEntity(self, ctor, entId): - return ctor(self.level, entId) + return ctor(self.level, entId) \ No newline at end of file diff --git a/otp/src/level/EntityCreatorAI.py b/otp/src/level/EntityCreatorAI.py index a84eb14c..ca0d20a9 100644 --- a/otp/src/level/EntityCreatorAI.py +++ b/otp/src/level/EntityCreatorAI.py @@ -1,10 +1,10 @@ """EntityCreatorAI module: contains the EntityCreatorAI class""" -import EntityCreatorBase -import LogicGate -import EditMgrAI -import LevelMgrAI -import ZoneEntityAI +from . import EntityCreatorBase +from . import LogicGate +from . import EditMgrAI +from . import LevelMgrAI +from . import ZoneEntityAI from direct.showbase.PythonUtil import Functor # some useful constructor functions diff --git a/otp/src/level/EntityCreatorBase.py b/otp/src/level/EntityCreatorBase.py index 57643f06..6ffe8e66 100644 --- a/otp/src/level/EntityCreatorBase.py +++ b/otp/src/level/EntityCreatorBase.py @@ -1,11 +1,7 @@ -"""EntityCreatorBase module: contains the EntityCreatorBase class""" - from direct.directnotify import DirectNotifyGlobal class EntityCreatorBase: - """This class is responsible for creating instances of Entities on the - AI and on the client. It must be subclassed to specify what entity - types it can create, and to provide the creation implementation.""" + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('EntityCreator') def __init__(self, level): @@ -14,27 +10,19 @@ def __init__(self, level): def createEntity(self, entId): entType = self.level.getEntityType(entId) - - if not self.entType2Ctor.has_key(entType): - self.notify.error('unknown entity type: %s (ent%s)' % - (entType, entId)) - - # inheritor must define doCreateEntity + if entType not in self.entType2Ctor: + self.notify.error('unknown entity type: %s (ent%s)' % (entType, entId)) ent = self.doCreateEntity(self.entType2Ctor[entType], entId) - assert ent is not None # must be Entity or 'nothing' return ent def getEntityTypes(self): - """by definition, this object knows the full list of entity types - that may exist within the level""" - return self.entType2Ctor.keys() + return list(self.entType2Ctor.keys()) def privRegisterType(self, entType, ctor): - if self.entType2Ctor.has_key(entType): - self.notify.debug('replacing %s ctor %s with %s' % - (entType, self.entType2Ctor[entType], ctor)) + if entType in self.entType2Ctor: + self.notify.debug('replacing %s ctor %s with %s' % (entType, self.entType2Ctor[entType], ctor)) self.entType2Ctor[entType] = ctor def privRegisterTypes(self, type2ctor): - for entType, ctor in type2ctor.items(): - self.privRegisterType(entType, ctor) + for (entType, ctor) in list(type2ctor.items()): + self.privRegisterType(entType, ctor) \ No newline at end of file diff --git a/otp/src/level/EntityTypeDesc.py b/otp/src/level/EntityTypeDesc.py index 0ddb3db2..0f5a00ab 100644 --- a/otp/src/level/EntityTypeDesc.py +++ b/otp/src/level/EntityTypeDesc.py @@ -1,7 +1,7 @@ """EntityTypeDesc module: contains the EntityTypeDesc class""" from direct.directnotify import DirectNotifyGlobal -import AttribDesc +from . import AttribDesc from direct.showbase.PythonUtil import mostDerivedLast class EntityTypeDesc: @@ -27,12 +27,12 @@ def __init__(self): def isConcrete(self): """ means that entity of this exact type can be created """ - return not self.__class__.__dict__.has_key('abstract') + return 'abstract' not in self.__class__.__dict__ def isPermanent(self): """ means that entity of this exact type cannot be inserted or removed in the editor """ - return self.__class__.__dict__.has_key('permanent') + return 'permanent' in self.__class__.__dict__ def getOutputType(self): return self.output @@ -48,7 +48,7 @@ def getAttribDescDict(self): def getAttribsOfType(self, type): """returns list of attrib names of the given type""" names = [] - for attribName, desc in self.attribDescDict.items(): + for attribName, desc in list(self.attribDescDict.items()): if desc.getDatatype() == type: names.append(attribName) return names @@ -59,7 +59,7 @@ def privCompileAttribDescs(entTypeClass): passed in. The attribute descriptors describe the properties of each of the Entity type's attributes""" # has someone already compiled the info? - if entTypeClass.__dict__.has_key('_attribDescs'): + if '_attribDescs' in entTypeClass.__dict__: return c = entTypeClass @@ -99,7 +99,7 @@ def privCompileAttribDescs(entTypeClass): # now that we have all of the descriptors from our base classes, # add the descriptors from this class attribDescs = [] - if c.__dict__.has_key('attribs'): + if 'attribs' in c.__dict__: for attrib in c.attribs: desc = AttribDesc.AttribDesc(*attrib) diff --git a/otp/src/level/EntityTypeRegistry.py b/otp/src/level/EntityTypeRegistry.py index debe8442..316641e2 100644 --- a/otp/src/level/EntityTypeRegistry.py +++ b/otp/src/level/EntityTypeRegistry.py @@ -3,11 +3,12 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal import types -import AttribDesc -import EntityTypeDesc +from . import AttribDesc +from . import EntityTypeDesc from direct.showbase.PythonUtil import mostDerivedLast import os import string +import importlib class EntityTypeRegistry: notify = DirectNotifyGlobal.directNotify.newCategory('EntityTypeRegistry') @@ -18,9 +19,9 @@ def __init__(self, entityTypeModule): # compute the hash of the source modules as of the time of creation hv = HashVal() - import EntityTypes - reload(EntityTypes) - reload(self.entTypeModule) + from . import EntityTypes + importlib.reload(EntityTypes) + importlib.reload(self.entTypeModule) # Convert a pyc or pyo to a py # If the client runs genPyCode -n then ihooks will not be installed @@ -53,8 +54,8 @@ def getPyExtVersion(filename): # get a list of the EntityTypeDesc classes in the type module classes = [] - for key, value in entityTypeModule.__dict__.items(): - if type(value) is types.ClassType: + for key, value in list(entityTypeModule.__dict__.items()): + if type(value) is type: if issubclass(value, EntityTypeDesc.EntityTypeDesc): classes.append(value) @@ -64,8 +65,8 @@ def getPyExtVersion(filename): # make sure that derived classes come after bases mostDerivedLast(classes) for c in classes: - if c.__dict__.has_key('type'): - if self.entTypeName2typeDesc.has_key(c.type): + if 'type' in c.__dict__: + if c.type in self.entTypeName2typeDesc: # a more-derived class is replacing a less-derived class # to implement a particular entity type EntityTypeRegistry.notify.debug( @@ -77,7 +78,7 @@ def getPyExtVersion(filename): # create mapping of entity output types to list of concrete entity # typenames with that output type self.output2typeNames = {} - for typename, typeDesc in self.entTypeName2typeDesc.items(): + for typename, typeDesc in list(self.entTypeName2typeDesc.items()): if typeDesc.isConcrete(): if hasattr(typeDesc, 'output'): outputType = typeDesc.output @@ -87,7 +88,7 @@ def getPyExtVersion(filename): # create list of permanent entity typenames (entity types that cannot # be inserted or removed in the editor) self.permanentTypeNames = [] - for typename, typeDesc in self.entTypeName2typeDesc.items(): + for typename, typeDesc in list(self.entTypeName2typeDesc.items()): if typeDesc.isPermanent(): assert typeDesc.isConcrete() self.permanentTypeNames.append(typename) @@ -96,16 +97,16 @@ def getPyExtVersion(filename): # of entity typenames are concrete and are of that type or derive # from that type self.typeName2derivedTypeNames = {} - for typename, typeDesc in self.entTypeName2typeDesc.items(): + for typename, typeDesc in list(self.entTypeName2typeDesc.items()): typenames = [] - for tn, td in self.entTypeName2typeDesc.items(): + for tn, td in list(self.entTypeName2typeDesc.items()): if td.isConcrete(): if issubclass(td.__class__, typeDesc.__class__): typenames.append(tn) self.typeName2derivedTypeNames[typename] = typenames def getAllTypeNames(self): - return self.entTypeName2typeDesc.keys() + return list(self.entTypeName2typeDesc.keys()) def getTypeDesc(self, entTypeName): """returns EntityTypeDesc instance for concrete Entity type""" diff --git a/otp/src/level/EntityTypes.py b/otp/src/level/EntityTypes.py index 8f6648f3..124a3629 100644 --- a/otp/src/level/EntityTypes.py +++ b/otp/src/level/EntityTypes.py @@ -1,154 +1,113 @@ -"""EntityTypes module: contains classes that describe Entity types""" - -from EntityTypeDesc import EntityTypeDesc +from .EntityTypeDesc import EntityTypeDesc from toontown.coghq.SpecImports import * class Entity(EntityTypeDesc): + __module__ = __name__ abstract = 1 type = 'entity' - attribs = ( - ('type', None, 'const'), - ('name', '', 'string'), - ('comment', '', 'string'), - ('parentEntId', 0, 'entId'), - ) + attribs = (('type', None, 'const'), ('name', '', 'string'), ('comment', '', 'string'), ('parentEntId', 0, 'entId')) + class LevelMgr(Entity): + __module__ = __name__ type = 'levelMgr' permanent = 1 - attribs = ( - ('name', 'LevelMgr', 'const'), - ('parentEntId', 0, 'const'), - ('modelFilename', '', 'const'), - ) + attribs = (('name', 'LevelMgr', 'const'), ('parentEntId', 0, 'const'), ('modelFilename', '', 'const')) + class EditMgr(Entity): + __module__ = __name__ type = 'editMgr' permanent = 1 - blockAttribs = ( - 'comment', - ) + blockAttribs = ('comment',) attribs = ( - ('name', 'LevelMgr', 'const'), - ('parentEntId', 0, 'const'), - ('requestSave', None, 'const'), - ('requestNewEntity', None, 'const'), - ('insertEntity', None, 'const'), - ('removeEntity', None, 'const'), - ) + ( + 'name', 'LevelMgr', 'const'), ('parentEntId', 0, 'const'), ('requestSave', None, 'const'), ('requestNewEntity', None, 'const'), ('insertEntity', None, 'const'), ('removeEntity', None, 'const')) + class AttribModifier(Entity): + __module__ = __name__ type = 'attribModifier' - attribs = ( - ('recursive', 0, 'bool'), - ('typeName', '', 'string'), - ('attribName', '', 'string'), - ('value', '', 'string'), - ) + attribs = (('recursive', 0, 'bool'), ('typeName', '', 'string'), ('attribName', '', 'string'), ('value', '', 'string')) + class Locator(Entity): - type='locator' - attribs = ( - ('searchPath', '', 'string'), - ) + __module__ = __name__ + type = 'locator' + attribs = (('searchPath', '', 'string'),) + class Nodepath(Entity): + __module__ = __name__ type = 'nodepath' - attribs = ( - ('parentEntId', 0, 'entId', {'type':'nodepath'}), - ('pos', Point3(0,0,0), 'pos'), - ('hpr', Vec3(0,0,0), 'hpr'), - ('scale', 1, 'scale'), - ) + attribs = (('parentEntId', 0, 'entId', {'type': 'nodepath'}), ('pos', Point3(0, 0, 0), 'pos'), ('hpr', Vec3(0, 0, 0), 'hpr'), ('scale', 1, 'scale')) + class Zone(Nodepath): + __module__ = __name__ type = 'zone' permanent = 1 - blockAttribs = ( - 'pos', - 'hpr', - ) + blockAttribs = ('pos', 'hpr') attribs = ( - ('parentEntId', 0, 'const'), - ('description', '', 'string'), - ('visibility', [], 'visZoneList'), - ) + ( + 'parentEntId', 0, 'const'), ('description', '', 'string'), ('visibility', [], 'visZoneList')) + class EntrancePoint(Nodepath): + __module__ = __name__ type = 'entrancePoint' - attribs = ( - ('entranceId', -1, 'int'), - ('radius', 15, 'float', {'min':0}), - ('theta', 20, 'float', {'min':0}), - ) + attribs = (('entranceId', -1, 'int'), ('radius', 15, 'float', {'min': 0}), ('theta', 20, 'float', {'min': 0})) + class LogicGate(Entity): + __module__ = __name__ type = 'logicGate' output = 'bool' - attribs = ( - ('input1Event', 0, 'entId', {'output':'bool'}), - ('input2Event', 0, 'entId', {'output':'bool'}), - ('isInput1', 0, 'bool'), - ('isInput2', 0, 'bool'), - ('logicType', 'or', 'choice', - {'choiceSet':['or','and','xor','nand','nor','xnor']}), - ) + attribs = (('input1Event', 0, 'entId', {'output': 'bool'}), ('input2Event', 0, 'entId', {'output': 'bool'}), ('isInput1', 0, 'bool'), ('isInput2', 0, 'bool'), ('logicType', 'or', 'choice', {'choiceSet': ['or', 'and', 'xor', 'nand', 'nor', 'xnor']})) + class CutScene(Entity): + __module__ = __name__ type = 'cutScene' output = 'bool' - attribs = ( - ('pos', Point3(0,0,0), 'pos'), - ('hpr', Vec3(0,0,0), 'hpr'), - ('startStopEvent', 0, 'entId', {'output':'bool'}), - ('effect', 'irisInOut', 'choice', {'choiceSet':['nothing','irisInOut','letterBox']}), - ('motion', 'foo1', 'choice', {'choiceSet':['foo1']}), - ('duration', 5.0, 'float'), - ) + attribs = (('pos', Point3(0, 0, 0), 'pos'), ('hpr', Vec3(0, 0, 0), 'hpr'), ('startStopEvent', 0, 'entId', {'output': 'bool'}), ('effect', 'irisInOut', 'choice', {'choiceSet': ['nothing', 'irisInOut', 'letterBox']}), ('motion', 'foo1', 'choice', {'choiceSet': ['foo1']}), ('duration', 5.0, 'float')) + class CollisionSolid(Nodepath): + __module__ = __name__ type = 'collisionSolid' - attribs = ( - ('solidType', 'sphere', 'choice', {'choiceSet':['sphere', 'tube']}), - ('radius', 1., 'float'), - ('length', 0., 'float'), - ('showSolid', 0, 'bool'), - ) + attribs = (('solidType', 'sphere', 'choice', {'choiceSet': ['sphere', 'tube']}), ('radius', 1.0, 'float'), ('length', 0.0, 'float'), ('showSolid', 0, 'bool')) + class Model(Nodepath): + __module__ = __name__ type = 'model' - attribs = ( - ('loadType', 'loadModelCopy', 'choice', {'choiceSet':['loadModelCopy','loadModel','loadModelOnce']}), - ('modelPath', None, 'bamfilename'), - ('flattenType', 'light', 'choice', {'choiceSet':['none','light','medium','strong']}), - ('collisionsOnly', 0, 'bool'), - ('goonHatType', 'none', 'choice', {'choiceSet':['none', 'hardhat', 'security']}), - ) + attribs = (('loadType', 'loadModelCopy', 'choice', {'choiceSet': ['loadModelCopy', 'loadModel', 'loadModelOnce']}), ('modelPath', None, 'bamfilename'), ('flattenType', 'light', 'choice', {'choiceSet': ['none', 'light', 'medium', 'strong']}), ('collisionsOnly', 0, 'bool')) + class Path(Nodepath): + __module__ = __name__ type = 'path' - attribs = ( - ('pathIndex', 0, 'int'), - ('pathScale', 1., 'float'), - ) + attribs = (('pathIndex', 0, 'int'), ('pathScale', 1.0, 'float')) + class VisibilityExtender(Entity): + __module__ = __name__ type = 'visibilityExtender' - attribs = ( - ('event', None, 'entId', {'output':'bool'}), - ('newZones', [], 'visZoneList'), - ) + attribs = (('event', None, 'entId', {'output': 'bool'}), ('newZones', [], 'visZoneList')) + class AmbientSound(Nodepath): + __module__ = __name__ type = 'ambientSound' - attribs = ( - ('soundPath', '', 'bamfilename'), - ('volume', 1, 'float', {'min':0,'max':1}), - ('enabled', 1, 'bool'), - ) + attribs = (('soundPath', '', 'bamfilename'), ('volume', 1, 'float', {'min': 0, 'max': 1}), ('enabled', 1, 'bool')) + class PropSpinner(Entity): + __module__ = __name__ type = 'propSpinner' + class EntityGroup(Entity): - type = 'entityGroup' + __module__ = __name__ + type = 'entityGroup' \ No newline at end of file diff --git a/otp/src/level/EntrancePoint.py b/otp/src/level/EntrancePoint.py index b2d53e46..ed7a70ef 100644 --- a/otp/src/level/EntrancePoint.py +++ b/otp/src/level/EntrancePoint.py @@ -1,8 +1,11 @@ from toontown.toonbase.ToontownGlobals import * from direct.directnotify import DirectNotifyGlobal -import BasicEntities +from . import BasicEntities +from pandac import NodePath class EntrancePoint(BasicEntities.NodePathEntity): + __module__ = __name__ + def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) self.rotator = self.attachNewNode('rotator') @@ -13,14 +16,14 @@ def destroy(self): self.destroyEntrancePoint() self.placer.removeNode() self.rotator.removeNode() - del self.placer, self.rotator + del self.placer + del self.rotator BasicEntities.NodePathEntity.destroy(self) def placeToon(self, toon, toonIndex, numToons): self.placer.setY(-self.radius) - self.rotator.setH((-self.theta*(numToons-1)*.5) + - (toonIndex*self.theta)) - toon.setPosHpr(self.placer, 0,0,0, 0,0,0) + self.rotator.setH(-self.theta * (numToons - 1) * 0.5 + toonIndex * self.theta) + toon.setPosHpr(self.placer, 0, 0, 0, 0, 0, 0) def initEntrancePoint(self): if self.entranceId >= 0: @@ -28,11 +31,12 @@ def initEntrancePoint(self): def destroyEntrancePoint(self): if self.entranceId >= 0: - if self.level.entranceId2entity.has_key(self.entranceId): + if self.entranceId in self.level.entranceId2entity: del self.level.entranceId2entity[self.entranceId] if __dev__: + def attribChanged(self, *args): BasicEntities.NodePathEntity.attribChanged(self, *args) self.destroyEntrancePoint() - self.initEntrancePoint() + self.initEntrancePoint() \ No newline at end of file diff --git a/otp/src/level/Level.py b/otp/src/level/Level.py index 50f689c7..769ec7a3 100644 --- a/otp/src/level/Level.py +++ b/otp/src/level/Level.py @@ -1,110 +1,37 @@ -"""Level.py: contains the Level class""" - from direct.directnotify import DirectNotifyGlobal import string -import LevelConstants +from . import LevelConstants from direct.showbase.PythonUtil import lineInfo, uniqueElements import types -""" -Any data that can be edited by a level editor must be represented as -an attribute of an entity owned by the level, in order to keep the -level-editing interface simple and constant (there are at least three -places where the entire editing interface must be duplicated). - -To support this, we have entities such as 'levelMgr' and 'zoneEntity' that -contain crucial level information, much of which is needed when setting -up the level object, and is needed before other entity types can be -effectively created. (If you try to create a distributed entity, but -you don't yet have the information for the zone that it's in, because -you haven't created the zone's ZoneEntity, you're hurting.) -""" - -""" -ZONE TERMINOLOGY -zoneNum / zoneEntId: the number that a modeler chooses for a zone, and also - the entity ID of the ZoneEntity that represents a zone -zoneId: the network ID of a zone -""" - class Level: - """Level: representation of a game level, keeps track of all of the - entities and their interrelations, and creates and destroys entities""" notify = DirectNotifyGlobal.directNotify.newCategory('Level') def __init__(self): self.levelSpec = None self.initialized = 0 + return def initializeLevel(self, levelId, levelSpec, scenarioIndex): - """subclass should call this as soon as it has located - its spec data. levelId should be a unique integer (a doId works - just fine) that differentiates this level from all other levels - that may exist concurrently.""" self.levelId = levelId self.levelSpec = levelSpec self.scenarioIndex = scenarioIndex - self.levelSpec.setScenario(self.scenarioIndex) if __dev__: self.levelSpec.setLevel(self) - - # create some handy tables - - # entranceId to entrance entity self.entranceId2entity = {} - - # dict of entId -> list of callbacks to be called upon creation self.entId2createCallbacks = {} - - # this list contains the entIds of entities that we have actually - # created, in order of creation self.createdEntIds = [] - - # non-ordered list of entIds of entities that are not 'local', i.e. - # they are created by someone else (i.e. the AI) and will come and go. self.nonlocalEntIds = {} - - # non-ordered list of entIds of entities that do not ever have any - # representation on this side (i.e. client-side or AI-side). Populated - # as the entities get their turn to be created. self.nothingEntIds = {} - - # get an entity creator object self.entityCreator = self.createEntityCreator() - - # entity type -> list of entIds - self.entType2ids = self.levelSpec.getEntType2ids( - self.levelSpec.getAllEntIds()) - # create empty list for any entity types that are not represented - # in the spec + self.entType2ids = self.levelSpec.getEntType2ids(self.levelSpec.getAllEntIds()) for entType in self.entityCreator.getEntityTypes(): self.entType2ids.setdefault(entType, []) - # create all the entities - # TODO: maybe we should leave this to a subclass or the level user - self.createAllEntities(priorityTypes=['levelMgr','zone','propSpinner']) - - # check on the singleton entities - # we make our own references to them rather than expect them to - # create the references so that the editor can create dummy - # do-nothing entities - - # there should be one and only one levelMgr - assert len(self.entType2ids['levelMgr']) == 1 - assert self.entType2ids['levelMgr'][0] == LevelConstants.LevelMgrEntId + self.createAllEntities(priorityTypes=['levelMgr', 'zone', 'propSpinner']) self.levelMgrEntity = self.getEntity(LevelConstants.LevelMgrEntId) - - # there should be one and only one editMgr - assert len(self.entType2ids['editMgr']) == 1 - assert self.entType2ids['editMgr'][0] == LevelConstants.EditMgrEntId - if __debug__: - self.editMgrEntity = self.getEntity(LevelConstants.EditMgrEntId) - - # there should be one and only one UberZone - assert LevelConstants.UberZoneEntId in self.entType2ids['zone'] self.uberZoneEntity = self.getEntity(LevelConstants.UberZoneEntId) - self.initialized = 1 def isInitialized(self): @@ -117,13 +44,10 @@ def destroyLevel(self): self.destroyAllEntities() if self.initialized: del self.levelMgrEntity - if __debug__: - del self.editMgrEntity del self.uberZoneEntity del self.entityCreator del self.entId2createCallbacks del self.entranceId2entity - self.levelSpec.destroy() del self.levelSpec self.initialized = 0 del self.createdEntIds @@ -132,306 +56,190 @@ def destroyLevel(self): if hasattr(self, 'entities'): del self.entities if hasattr(self, 'levelSpec'): - self.levelSpec.destroy() del self.levelSpec def createEntityCreator(self): - Level.notify.error( - 'concrete Level class must override %s' % lineInfo()[2]) + Level.notify.error('concrete Level class must override %s' % lineInfo()[2]) def createAllEntities(self, priorityTypes=[]): - """creates all entities in the spec. priorityTypes is an - optional ordered list of entity types to create first.""" - # this will be filled in as the entities are created and report in - # this includes distributed objects on the client self.entities = {} - - # get list of all entity types we need to create entTypes = self.entityCreator.getEntityTypes() - self.onLevelPreCreate() - - # first create the types in the priority list for type in priorityTypes: - assert type in entTypes self.createAllEntitiesOfType(type) entTypes.remove(type) - # create the other entities in any old order for type in entTypes: self.createAllEntitiesOfType(type) - assert uniqueElements(self.createdEntIds) - self.onLevelPostCreate() def destroyAllEntities(self): - assert uniqueElements(self.createdEntIds) self.nonlocalEntIds = {} self.nothingEntIds = {} - # destroy the entities that we created in reverse order - if not uniqueElements(self.createdEntIds): - Level.notify.warning('%s: self.createdEntIds is not unique: %s' % - (getattr(self, 'doId', None), self.createdEntIds)) while len(self.createdEntIds) > 0: entId = self.createdEntIds.pop() entity = self.getEntity(entId) if entity is not None: - Level.notify.debug('destroying %s %s' % ( - self.getEntityType(entId), entId)) + Level.notify.debug('destroying %s %s' % (self.getEntityType(entId), entId)) entity.destroy() - assert not entId in self.entities else: - Level.notify.error('trying to destroy entity %s, but ' - 'it is already gone' % entId) + Level.notify.error('trying to destroy entity %s, but it is already gone' % entId) - def createAllEntitiesOfType(self, entType): - """creates all entities of a given type""" - assert entType in self.entityCreator.getEntityTypes() + return + def createAllEntitiesOfType(self, entType): self.onEntityTypePreCreate(entType) - for entId in self.entType2ids[entType]: self.createEntity(entId) self.onEntityTypePostCreate(entType) def createEntity(self, entId): - assert not entId in self.createdEntIds spec = self.levelSpec.getEntitySpec(entId) Level.notify.debug('creating %s %s' % (spec['type'], entId)) entity = self.entityCreator.createEntity(entId) - # NOTE: the entity is not considered to really be created until - # it has all of its initial spec data; see 'initializeEntity' - # below. - announce = False - if entity is 'nonlocal': + if entity == 'nonlocal': self.nonlocalEntIds[entId] = None - elif entity is 'nothing': + elif entity == 'nothing': self.nothingEntIds[entId] = None - announce = True else: self.createdEntIds.append(entId) - announce = True - - if announce: - # call the create handler - # we used to do this in initializeEntity, but that did not - # allow for additional initialization to be performed in - # derived entity __init__ funcs before their presence was announced - # Note that now DistributedEntity's are responsible for calling - # this for themselves - self.onEntityCreate(entId) - + self.onEntityCreate(entId) return entity + return def initializeEntity(self, entity): - """populate an entity with its spec data. This is not done - in createEntity in order to allow other pieces of code to create - entities; this is called directly by Entity. - """ entId = entity.entId spec = self.levelSpec.getEntitySpec(entId) - # on initialization, set items directly on entity - for key,value in spec.items(): - if key in ('type', 'name', 'comment',): + for (key, value) in list(spec.items()): + if key in ('type', 'name', 'comment'): continue entity.setAttribInit(key, value) - # entity is initialized, add it to the list of entities - # if this assert fails, check distributed entities to make sure - # they're calling down to Entity.destroy - if __debug__: - if entId in self.entities: - self.notify.warning( - 'entity %s already in entity table... '%(entId)+ - 'make sure distributedEntity is calling down to ' - 'Entity.destroy!') self.entities[entId] = entity def getEntity(self, entId): - if hasattr(self, 'entities'): - return self.entities.get(entId) - else: - return None + return self.entities.get(entId) def getEntityType(self, entId): return self.levelSpec.getEntityType(entId) def getEntityZoneEntId(self, entId): - """return entId of zone that contains the entity""" return self.levelSpec.getEntityZoneEntId(entId) def getEntityZoneId(self, entId): - """return network zoneId of zone that contains the entity""" - # this is called during entity creation on the AI; we have to - # handle this carefully, since the information required to - # produce a zoneId is not available until the level's zone - # entities have been instantiated. zoneEntId = self.getEntityZoneEntId(entId) - # fundamental entities (levelMgr) are responsible for creating - # tables like 'zoneNum2zoneId'; if those tables haven't been - # created yet, just return None if not hasattr(self, 'zoneNum2zoneId'): return None - # this might return None if all of our zone entities haven't - # been created yet. this could be a problem if zone entities - # are ever distributed. it also means that no distributed entities - # should be created before the zone entities. return self.zoneNum2zoneId.get(zoneEntId) + return def getZoneId(self, zoneEntId): - """look up network zoneId by zone entId""" - assert zoneEntId in self.zoneNum2zoneId return self.zoneNum2zoneId[zoneEntId] def getZoneNumFromId(self, zoneId): - """returns the model zoneNum that corresponds to a network zoneId""" return self.zoneId2zoneNum[zoneId] def getParentTokenForEntity(self, entId): - """returns a unique parent token for this entity""" - # default impl - # subclasses can override to allow for multiple levels present - # on the client simultaneously return entId - # these events are thrown as the level initializes itself - # LEVEL def getLevelPreCreateEvent(self): - """This is the event that is thrown immediately before the level - creates its entities.""" - return 'levelPreCreate-%s' % (self.levelId) + return 'levelPreCreate-%s' % self.levelId + def getLevelPostCreateEvent(self): - """This is the event that is thrown immediately after the level - creates its entities.""" - return 'levelPostCreate-%s' % (self.levelId) - # ENTITY TYPE + return 'levelPostCreate-%s' % self.levelId + def getEntityTypePreCreateEvent(self, entType): - """This is the event that is thrown immediately before the level - creates the entities of the given type.""" return 'entityTypePreCreate-%s-%s' % (self.levelId, entType) + def getEntityTypePostCreateEvent(self, entType): - """This is the event that is thrown immediately after the level - creates the entities of the given type.""" return 'entityTypePostCreate-%s-%s' % (self.levelId, entType) - # ENTITY + def getEntityCreateEvent(self, entId): - """This is the event that is thrown immediately after a - particular entity is initialized""" return 'entityCreate-%s-%s' % (self.levelId, entId) + def getEntityOfTypeCreateEvent(self, entType): - """This event is thrown immediately after each instance of the - given entity type is created; handlers must accept an entId""" return 'entityOfTypeCreate-%s-%s' % (self.levelId, entType) - # these handlers are called as the level initializes itself - # LEVEL def onLevelPreCreate(self): - """Level is about to create its entities""" messenger.send(self.getLevelPreCreateEvent()) + def onLevelPostCreate(self): - """Level is done creating its entities""" messenger.send(self.getLevelPostCreateEvent()) - # ENTITY TYPE + def onEntityTypePreCreate(self, entType): - """Level is about to create these entities""" messenger.send(self.getEntityTypePreCreateEvent(entType)) + def onEntityTypePostCreate(self, entType): - """Level has just created these entities""" messenger.send(self.getEntityTypePostCreateEvent(entType)) - # ENTITY + def onEntityCreate(self, entId): - """Level has just created this entity""" - # send the entity-create event messenger.send(self.getEntityCreateEvent(entId)) - # send the entity-of-type create event - messenger.send( - self.getEntityOfTypeCreateEvent(self.getEntityType(entId)), - [entId]) - # call any callbacks + messenger.send(self.getEntityOfTypeCreateEvent(self.getEntityType(entId)), [ + entId]) if entId in self.entId2createCallbacks: for callback in self.entId2createCallbacks[entId]: callback() + del self.entId2createCallbacks[entId] - # Use to set a callback to be called when entity is created. - # If entity already exists, callback will be called immediately. def setEntityCreateCallback(self, entId, callback): ent = self.getEntity(entId) if ent is not None: - # entity already exists callNow = True elif entId in self.nothingEntIds: - # entity has been 'created' but will never manifest callNow = True else: - # entity has not been created callNow = False - if callNow: callback() else: self.entId2createCallbacks.setdefault(entId, []) self.entId2createCallbacks[entId].append(callback) + return - # these are events and handlers that are invoked as entities are destroyed def getEntityDestroyEvent(self, entId): - """This is the event that is thrown immediately before an - entity is destroyed""" return 'entityDestroy-%s-%s' % (self.levelId, entId) + def onEntityDestroy(self, entId): - """Level is about to destroy this entity""" - assert entId in self.entities - # send the entity-destroy event messenger.send(self.getEntityDestroyEvent(entId)) - del self.entities[entId] - # if we created this entity, remove its entId from the - # createdEntIds list if entId in self.createdEntIds: - # this should only happen if someone deleted an entity - # with an editor self.createdEntIds.remove(entId) def handleVisChange(self): - """the zone visibility lists have changed""" pass - + if __dev__: - # the level generates these events when the spec changes + def getAttribChangeEventName(self): return 'attribChange-%s' % self.levelId + def getInsertEntityEventName(self): return 'insertEntity-%s' % self.levelId + def getRemoveEntityEventName(self): return 'removeEntity-%s' % self.levelId - - # these handlers are called directly by our levelSpec + def handleAttribChange(self, entId, attrib, value, username=None): entity = self.getEntity(entId) - # the entity might be AI- or client-only if entity is not None: entity.handleAttribChange(attrib, value) - messenger.send(self.getAttribChangeEventName(), - [entId, attrib, value, username]) + messenger.send(self.getAttribChangeEventName(), [ + entId, attrib, value, username]) + return def setEntityCreatorUsername(self, entId, editUsername): - # this is called just before an entity is inserted, with the - # entId of the new entity and the username of the editor - # that requested its creation. pass def handleEntityInsert(self, entId): - # update our local type->entId table self.entType2ids[self.getEntityType(entId)].append(entId) self.createEntity(entId) messenger.send(self.getInsertEntityEventName(), [entId]) def handleEntityRemove(self, entId): messenger.send(self.getRemoveEntityEventName(), [entId]) - # if we didn't create it, don't destroy it (probably a distributed - # entity on the client; wait for AI to destroy it) if entId in self.createdEntIds: entity = self.getEntity(entId) entity.destroy() @@ -439,5 +247,4 @@ def handleEntityRemove(self, entId): del self.nothingEntIds[entId] elif entId in self.nonlocalEntIds: del self.nonlocalEntIds[entId] - # update our local type->entId table - self.entType2ids[self.getEntityType(entId)].remove(entId) + self.entType2ids[self.getEntityType(entId)].remove(entId) \ No newline at end of file diff --git a/otp/src/level/LevelConstants.py b/otp/src/level/LevelConstants.py index b7fe44fb..9823225c 100644 --- a/otp/src/level/LevelConstants.py +++ b/otp/src/level/LevelConstants.py @@ -1,12 +1,5 @@ -"""LevelConstants module: contains Level-related constants""" - -# Zone Num from model is also the Zone Entity's entId MinZoneNum = 0 MaxZoneNum = 999 - -# zoneNum 0 is reserved for UberZone UberZoneEntId = 0 - -# system-allocated entities start at 1000 LevelMgrEntId = 1000 -EditMgrEntId = 1001 +EditMgrEntId = 1001 \ No newline at end of file diff --git a/otp/src/level/LevelMgr.py b/otp/src/level/LevelMgr.py index 246ee77b..7ccb742f 100644 --- a/otp/src/level/LevelMgr.py +++ b/otp/src/level/LevelMgr.py @@ -1,31 +1,16 @@ -"""LevelMgr module: contains the LevelMgr class""" - from direct.showbase.PythonUtil import Functor -import LevelMgrBase +from . import LevelMgrBase class LevelMgr(LevelMgrBase.LevelMgrBase): - """This class manages editable client-side level attributes""" + __module__ = __name__ def __init__(self, level, entId): LevelMgrBase.LevelMgrBase.__init__(self, level, entId) - - # load the model self.geom = loader.loadModel(self.modelFilename) - - if not self.geom: - import pdb; pdb.set_trace() - - # this will hold the zoneNums/entIds for our own bookkeeping self.zoneNums = [] - - # zoneNum -> network zoneId self.level.zoneNum2zoneId = {} - # network zoneId -> zoneNum self.level.zoneId2zoneNum = {} - - # listen for every zone creation - self.accept(self.level.getEntityOfTypeCreateEvent('zone'), - self.handleZoneCreated) + self.accept(self.level.getEntityOfTypeCreateEvent('zone'), self.handleZoneCreated) def destroy(self): del self.level.zoneIds @@ -37,47 +22,23 @@ def destroy(self): def handleZoneCreated(self, entId): zoneEnt = self.level.getEntity(entId) - - # register the zone's info in the tables - - assert zoneEnt.entId not in self.zoneNums self.zoneNums.append(zoneEnt.entId) - - # we can assume that we have a complete list of network zoneIds in - # self.level.zoneIds. As each zone entity is created, set up - # as if we have all of the zone entities. This allows dynamic - # zone entity creation and deletion during editing. - # TODO: we should delay this until all zone entities have been - # created on level init self.privAssignZoneIds() - - # listen for the zone's destruction - self.accept(self.level.getEntityDestroyEvent(entId), - Functor(self.handleZoneDestroy, entId)) + self.accept(self.level.getEntityDestroyEvent(entId), Functor(self.handleZoneDestroy, entId)) def handleZoneDestroy(self, entId): zoneEnt = self.level.getEntity(entId) - # unregister the zone from the maps - del self.level.zoneId2zoneNum[ - self.level.zoneNum2zoneId[zoneEnt.entId]] + del self.level.zoneId2zoneNum[self.level.zoneNum2zoneId[zoneEnt.entId]] del self.level.zoneNum2zoneId[zoneEnt.entId] self.zoneNums.remove(zoneEnt.entId) - # reassign the zoneIds (we may not need to do this, if all of the - # other entities already have their correct zoneId...?) self.privAssignZoneIds() def privAssignZoneIds(self): - """assign network zoneIds from self.level.zoneIds, according to - the zones that are registered so far""" - # sort the zoneNums self.zoneNums.sort() - - # dole out the zoneIds, in increasing order of zoneNum for i in range(len(self.zoneNums)): zoneNum = self.zoneNums[i] zoneEnt = self.level.getEntity(zoneNum) zoneId = self.level.zoneIds[i] zoneEnt.setZoneId(zoneId) - # the zoneIds have shifted. update the tables self.level.zoneNum2zoneId[zoneNum] = zoneId - self.level.zoneId2zoneNum[zoneId] = zoneNum + self.level.zoneId2zoneNum[zoneId] = zoneNum \ No newline at end of file diff --git a/otp/src/level/LevelMgrAI.py b/otp/src/level/LevelMgrAI.py index 751bddac..34775602 100644 --- a/otp/src/level/LevelMgrAI.py +++ b/otp/src/level/LevelMgrAI.py @@ -1,7 +1,7 @@ """LevelMgrAI module: contains the LevelMgrAI class""" from direct.showbase.PythonUtil import Functor -import LevelMgrBase +from . import LevelMgrBase class LevelMgrAI(LevelMgrBase.LevelMgrBase): """This class manages editable AI level attributes""" @@ -45,7 +45,7 @@ def handleZoneDestroy(self, entId): def privCreateSortedZoneIdList(self): # sort the zoneNums - zoneNums = self.level.zoneNum2zoneId.keys() + zoneNums = list(self.level.zoneNum2zoneId.keys()) zoneNums.sort() # create a list of network zoneIds, ordered by their corresponding diff --git a/otp/src/level/LevelMgrBase.py b/otp/src/level/LevelMgrBase.py index c810479b..dc390894 100644 --- a/otp/src/level/LevelMgrBase.py +++ b/otp/src/level/LevelMgrBase.py @@ -1,12 +1,11 @@ -"""LevelMgrBase module: contains the LevelMgrBase class""" - -import Entity +from . import Entity class LevelMgrBase(Entity.Entity): - """This class contains LevelMgr code shared by the AI and client""" + __module__ = __name__ + def __init__(self, level, entId): Entity.Entity.__init__(self, level, entId) def destroy(self): Entity.Entity.destroy(self) - self.ignoreAll() + self.ignoreAll() \ No newline at end of file diff --git a/otp/src/level/LevelSpec.py b/otp/src/level/LevelSpec.py index 3539ab05..890be652 100644 --- a/otp/src/level/LevelSpec.py +++ b/otp/src/level/LevelSpec.py @@ -1,138 +1,93 @@ -"""LevelSpec module: contains the LevelSpec class""" - from direct.directnotify import DirectNotifyGlobal from direct.showbase.PythonUtil import list2dict, uniqueElements -import string -import LevelConstants -import types +import string, types +from . import LevelConstants +import importlib if __dev__: import os class LevelSpec: - """contains spec data for a level, is responsible for handing the data - out upon request, as well as recording changes made during editing, and - saving out modified spec data""" - notify = DirectNotifyGlobal.directNotify.newCategory("LevelSpec") - - SystemEntIds = (LevelConstants.UberZoneEntId, - LevelConstants.LevelMgrEntId, - LevelConstants.EditMgrEntId) - + notify = DirectNotifyGlobal.directNotify.newCategory('LevelSpec') + SystemEntIds = ( + LevelConstants.UberZoneEntId, LevelConstants.LevelMgrEntId, LevelConstants.EditMgrEntId) + def __init__(self, spec=None, scenario=0): - """spec must be passed in as a python module or a dictionary. - If not passed in, will create a new spec.""" newSpec = 0 if type(spec) is types.ModuleType: if __dev__: - # reload the spec module to pick up changes - reload(spec) + importlib.reload(spec) self.specDict = spec.levelSpec if __dev__: self.setFilename(spec.__file__) - elif type(spec) is types.DictType: - # we need this for repr/eval-ing LevelSpecs + elif type(spec) is dict: self.specDict = spec elif spec is None: if __dev__: newSpec = 1 - self.specDict = { - 'globalEntities': {}, - 'scenarios': [{}], - } - - assert hasattr(self, 'specDict') - - # this maps an entId to the dict that holds its spec; - # entities are either in the global dict or a scenario dict - # update the map of entId to spec dict + self.specDict = {'globalEntities': {}, 'scenarios': [{}]} self.entId2specDict = {} - self.entId2specDict.update( - list2dict(self.getGlobalEntIds(), - value=self.privGetGlobalEntityDict())) + self.entId2specDict.update(list2dict(self.getGlobalEntIds(), value=self.privGetGlobalEntityDict())) for i in range(self.getNumScenarios()): - self.entId2specDict.update( - list2dict(self.getScenarioEntIds(i), - value=self.privGetScenarioEntityDict(i))) + self.entId2specDict.update(list2dict(self.getScenarioEntIds(i), value=self.privGetScenarioEntityDict(i))) self.setScenario(scenario) - if __dev__: if newSpec: - # add basic required entities - import EntityTypes - import EntityTypeRegistry + from . import EntityTypes, EntityTypeRegistry etr = EntityTypeRegistry.EntityTypeRegistry(EntityTypes) self.setEntityTypeReg(etr) - - # UberZone entId = LevelConstants.UberZoneEntId self.insertEntity(entId, 'zone') self.doSetAttrib(entId, 'name', 'UberZone') - # LevelMgr entId = LevelConstants.LevelMgrEntId self.insertEntity(entId, 'levelMgr') self.doSetAttrib(entId, 'name', 'LevelMgr') - # EditMgr entId = LevelConstants.EditMgrEntId self.insertEntity(entId, 'editMgr') self.doSetAttrib(entId, 'name', 'EditMgr') - - def destroy(self): - del self.specDict - del self.entId2specDict - del self.scenario - if hasattr(self, 'level'): - del self.level - if hasattr(self, 'entTypeReg'): - del self.entTypeReg + return def getNumScenarios(self): return len(self.specDict['scenarios']) def setScenario(self, scenario): - assert scenario in range(0, self.getNumScenarios()) self.scenario = scenario def getScenario(self): return self.scenario def getGlobalEntIds(self): - return self.privGetGlobalEntityDict().keys() + return list(self.privGetGlobalEntityDict().keys()) def getScenarioEntIds(self, scenario=None): if scenario is None: scenario = self.scenario - return self.privGetScenarioEntityDict(scenario).keys() + return list(self.privGetScenarioEntityDict(scenario).keys()) + return def getAllEntIds(self): - """this returns all of the entIds involved in the current scenario""" return self.getGlobalEntIds() + self.getScenarioEntIds() def getAllEntIdsFromAllScenarios(self): - """this returns all of the entIds involved in all scenarios""" entIds = self.getGlobalEntIds() - for scenario in xrange(self.getNumScenarios()): + for scenario in range(self.getNumScenarios()): entIds.extend(self.getScenarioEntIds(scenario)) + return entIds def getEntitySpec(self, entId): - assert entId in self.entId2specDict specDict = self.entId2specDict[entId] return specDict[entId] def getCopyOfSpec(self, spec): - # return a copy of the spec, making sure that none of the attributes - # are shared between the original and the copy (i.e. Point3's) specCopy = {} - exec 'from %s import *' % self.getSpecImportsModuleName() - for key in spec.keys(): + exec('from %s import *' % self.getSpecImportsModuleName()) + for key in list(spec.keys()): specCopy[key] = eval(repr(spec[key])) + return specCopy def getEntitySpecCopy(self, entId): - # return a copy of the spec, making sure that none of the attributes - # are shared between the original and the copy (i.e. Point3's) - assert entId in self.entId2specDict specDict = self.entId2specDict[entId] return self.getCopyOfSpec(specDict[entId]) @@ -140,27 +95,21 @@ def getEntityType(self, entId): return self.getEntitySpec(entId)['type'] def getEntityZoneEntId(self, entId): - """ return the entId of the zone that entity is in; if entity - is a zone, returns its entId """ spec = self.getEntitySpec(entId) type = spec['type'] - # if it's a zone, this is our entity if type == 'zone': return entId - assert spec['parentEntId'] != entId - # keep looking up the heirarchy for a zone entity return self.getEntityZoneEntId(spec['parentEntId']) def getEntType2ids(self, entIds): - """given list of entIds, return dict of entType->entIds""" entType2ids = {} for entId in entIds: type = self.getEntityType(entId) entType2ids.setdefault(type, []) entType2ids[type].append(entId) + return entType2ids - # private support functions to abstract dict structure def privGetGlobalEntityDict(self): return self.specDict['globalEntities'] @@ -168,20 +117,18 @@ def privGetScenarioEntityDict(self, scenario): return self.specDict['scenarios'][scenario] def printZones(self): - """currently prints list of zoneNum->zone name""" - # this could be more efficient allIds = self.getAllEntIds() type2id = self.getEntType2ids(allIds) zoneIds = type2id['zone'] - # omit the UberZone if 0 in zoneIds: zoneIds.remove(0) zoneIds.sort() for zoneNum in zoneIds: spec = self.getEntitySpec(zoneNum) - print 'zone %s: %s' % (zoneNum, spec['name']) + print('zone %s : %s' % (zoneNum, spec['name'])) if __dev__: + def setLevel(self, level): self.level = level @@ -199,102 +146,57 @@ def setFilename(self, filename): self.filename = filename def doSetAttrib(self, entId, attrib, value): - """ do the dirty work of changing an attrib value """ - assert entId in self.entId2specDict specDict = self.entId2specDict[entId] - assert specDict[entId].has_key(attrib) specDict[entId][attrib] = value def setAttribChange(self, entId, attrib, value, username): - """ we're being asked to change an attribute """ - LevelSpec.notify.info("setAttribChange(%s): %s, %s = %s" % - (username, entId, attrib, repr(value))) + LevelSpec.notify.info('setAttribChange(%s): %s, %s = %s' % (username, entId, attrib, repr(value))) self.doSetAttrib(entId, attrib, value) if self.hasLevel(): - # let the level know that this attribute value has - # officially changed self.level.handleAttribChange(entId, attrib, value, username) def insertEntity(self, entId, entType, parentEntId='unspecified'): LevelSpec.notify.info('inserting entity %s (%s)' % (entId, entType)) - assert entId not in self.entId2specDict - assert self.entTypeReg is not None globalEnts = self.privGetGlobalEntityDict() self.entId2specDict[entId] = globalEnts - - # create a new entity spec entry w/ default values globalEnts[entId] = {} spec = globalEnts[entId] - attribDescs = self.entTypeReg.getTypeDesc(entType - ).getAttribDescDict() - for name, desc in attribDescs.items(): + attribDescs = self.entTypeReg.getTypeDesc(entType).getAttribDescDict() + for (name, desc) in list(attribDescs.items()): spec[name] = desc.getDefaultValue() + spec['type'] = entType if parentEntId != 'unspecified': spec['parentEntId'] = parentEntId - if self.hasLevel(): - # notify the level self.level.handleEntityInsert(entId) else: LevelSpec.notify.warning('no level to be notified of insertion') - """ this was never used/tested but may come in handy - def insertEntityWithSpec(self, entId, spec): - # use this to add an entity with an existing spec - # NOTE: DO NOT use this to add an entity with an editor; this - # will not propogate the spec to the level. For now, editors - # should manually insert the item and set each attribute - # individually. - self.insertEntity(entId, spec['type']) - specCopy = self.getCopyOfSpec(spec) - del specCopy['type'] - for attribName, value in specCopy.items(): - self.doSetAttrib(entId, attribName, value) - """ - def removeEntity(self, entId): LevelSpec.notify.info('removing entity %s' % entId) - assert entId in self.entId2specDict - if self.hasLevel(): - # notify the level self.level.handleEntityRemove(entId) else: LevelSpec.notify.warning('no level to be notified of removal') - - # remove the entity's spec dict = self.entId2specDict[entId] del dict[entId] del self.entId2specDict[entId] def removeZoneReferences(self, removedZoneNums): - """call with a list of zoneNums of zone entities that have just - been removed; will clean up references to those zones""" - assert self.hasEntityTypeReg() - # get dict of entType->entIds, for ALL scenarios type2ids = self.getEntType2ids(self.getAllEntIdsFromAllScenarios()) - # figure out which entity types have attributes that need to be - # updated for type in type2ids: typeDesc = self.entTypeReg.getTypeDesc(type) visZoneListAttribs = typeDesc.getAttribsOfType('visZoneList') if len(visZoneListAttribs) > 0: - # this entity type has at least one attrib of type - # 'visZoneList'. - # run through all of the existing entities of this type for entId in type2ids[type]: spec = self.getEntitySpec(entId) - # for each attrib of type 'visZoneList'... for attribName in visZoneListAttribs: - # remove each of the removed zoneNums for zoneNum in removedZoneNums: while zoneNum in spec[attribName]: spec[attribName].remove(zoneNum) def getSpecImportsModuleName(self): - # name of module that should be imported by spec py file - # TODO: make this generic return 'toontown.coghq.SpecImports' def getFilename(self): @@ -304,35 +206,29 @@ def privGetBackupFilename(self, filename): return '%s.bak' % filename def saveToDisk(self, filename=None, makeBackup=1): - """returns zero on failure""" if filename is None: filename = self.filename - if filename.endswith('.pyc'): - filename = filename.replace('.pyc','.py') - if makeBackup and self.privFileExists(filename): - # create a backup try: backupFilename = self.privGetBackupFilename(filename) self.privRemoveFile(backupFilename) os.rename(filename, backupFilename) - except OSError, e: - LevelSpec.notify.warning( - 'error during backup: %s' % str(e)) + except OSError as e: + LevelSpec.notify.warning('error during backup: %s' % str(e)) LevelSpec.notify.info("writing to '%s'" % filename) self.privRemoveFile(filename) self.privSaveToDisk(filename) + return def privSaveToDisk(self, filename): - """internal. saves spec to file. returns zero on failure""" retval = 1 - # wb to create a UNIX-format file f = file(filename, 'wb') try: f.write(self.getPrettyString()) except IOError: retval = 0 + f.close() return retval @@ -351,178 +247,114 @@ def privRemoveFile(self, filename): return 0 def getPrettyString(self): - """Returns a string that contains the spec data, nicely formatted. - This should be used when writing the spec out to file.""" import pprint - tabWidth = 4 tab = ' ' * tabWidth - # structure names globalEntitiesName = 'GlobalEntities' scenarioEntitiesName = 'Scenario%s' topLevelName = 'levelSpec' + def getPrettyEntityDictStr(name, dict, tabs=0): + def t(n): - return (tabs+n)*tab + return (tabs + n) * tab + def sortList(lst, firstElements=[]): - """sort list; elements in firstElements will be put - first, in the order that they appear in firstElements; - rest of elements will follow, sorted""" elements = list(lst) - # put elements in order result = [] for el in firstElements: if el in elements: result.append(el) elements.remove(el) + elements.sort() result.extend(elements) return result - - firstTypes = ('levelMgr', 'editMgr', 'zone',) - firstAttribs = ('type', 'name', 'comment', 'parentEntId', - 'pos', 'x', 'y', 'z', - 'hpr', 'h', 'p', 'r', - 'scale', 'sx', 'sy', 'sz', - 'color', - 'model', - ) - str = t(0)+'%s = {\n' % name - # get list of types - entIds = dict.keys() + + firstTypes = ( + 'levelMgr', 'editMgr', 'zone') + firstAttribs = ('type', 'name', 'comment', 'parentEntId', 'pos', 'x', 'y', 'z', 'hpr', 'h', 'p', 'r', 'scale', 'sx', 'sy', 'sz', 'color', 'model') + str = t(0) + '%s = {\n' % name + entIds = list(dict.keys()) entType2ids = self.getEntType2ids(entIds) - # put types in order - types = sortList(entType2ids.keys(), firstTypes) + types = sortList(list(entType2ids.keys()), firstTypes) for type in types: - str += t(1)+'# %s\n' % string.upper(type) + str += t(1) + '# %s\n' % string.upper(type) entIds = entType2ids[type] entIds.sort() for entId in entIds: - str += t(1)+'%s: {\n' % entId + str += t(1) + '%s: {\n' % entId spec = dict[entId] - attribs = sortList(spec.keys(), firstAttribs) + attribs = sortList(list(spec.keys()), firstAttribs) for attrib in attribs: - str += t(2)+"'%s': %s,\n" % (attrib, - repr(spec[attrib])) - # maybe this will help with CVS merges? - str += t(2)+'}, # end entity %s\n' % entId - - str += t(1)+'}\n' + str += t(2) + "'%s': %s,\n" % (attrib, repr(spec[attrib])) + + str += t(2) + '}, # end entity %s\n' % entId + + str += t(1) + '}\n' return str + def getPrettyTopLevelDictStr(tabs=0): + def t(n): - return (tabs+n)*tab - str = t(0)+'%s = {\n' % topLevelName - str += t(1)+"'globalEntities': %s,\n" % globalEntitiesName - str += t(1)+"'scenarios': [\n" + return (tabs + n) * tab + + str = t(0) + '%s = {\n' % topLevelName + str += t(1) + "'globalEntities': %s,\n" % globalEntitiesName + str += t(1) + "'scenarios': [\n" for i in range(self.getNumScenarios()): - str += t(2)+'%s,\n' % (scenarioEntitiesName % i) - str += t(2)+'],\n' - str += t(1)+'}\n' + str += t(2) + '%s,\n' % (scenarioEntitiesName % i) + + str += t(2) + '],\n' + str += t(1) + '}\n' return str - - str = 'from %s import *\n' % self.getSpecImportsModuleName() - str += '\n' - # add the global entities - str += getPrettyEntityDictStr('GlobalEntities', - self.privGetGlobalEntityDict()) + str = 'from %s import *\n' % self.getSpecImportsModuleName() + str += '\n' + str += getPrettyEntityDictStr('GlobalEntities', self.privGetGlobalEntityDict()) str += '\n' - - # add the scenario entities numScenarios = self.getNumScenarios() for i in range(numScenarios): - str += getPrettyEntityDictStr('Scenario%s' % i, - self.privGetScenarioEntityDict(i)) + str += getPrettyEntityDictStr('Scenario%s' % i, self.privGetScenarioEntityDict(i)) str += '\n' - # add the top-level table str += getPrettyTopLevelDictStr() - self.testPrettyString(prettyString=str) - return str - - def _recurKeyTest(self, dict1, dict2): - # recursive key test for testPrettyString - # cannot be sub function due to exec call in testPrettyString - s = '' # error out string - errorCount = 0 # number of non-matching keys; more or less - - #if set of keys don't match than they are not the same - if set(dict1.keys()) != set(dict2.keys()): - return 0 - for key in dict1: - #if they are both dicitonaries we must test the subkeys - #this is because dicts are unordered and we are using repr to dump the - #values into strings for comparision - if type(dict1[key]) == type({}) and type(dict2[key]) == type({}): - if not self._recurKeyTest(dict1[key], dict2[key]): - return 0 - #if they are not dicts turn the values into strings and compare the strings - else: - strd1 = repr(dict1[key]) - strd2 = repr(dict2[key]) - if strd1 != strd2: - #if the strings don't match print an error - s += '\nBAD VALUE(%s): %s != %s\n' % (key, strd1, strd2) - errorCount += 1 #we could just bail here but instead we accumulate the errors - print s - #import pdb;pdb.set_trace - if errorCount == 0: - return 1 - else: - return 0 def testPrettyString(self, prettyString=None): - # execute the pretty output in our local scope if prettyString is None: - prettyString=self.getPrettyString() + prettyString = self.getPrettyString() exec(prettyString) - if self._recurKeyTest(levelSpec, self.specDict): - return 1 - else: - #import pdb;pdb.set_trace() - assert 0, ( - 'LevelSpec pretty string does not match spec data.\n' - ) + return def checkSpecIntegrity(self): - # make sure there are no duplicate entIds entIds = self.getGlobalEntIds() - assert uniqueElements(entIds) entIds = list2dict(entIds) for i in range(self.getNumScenarios()): for id in self.getScenarioEntIds(i): - assert not entIds.has_key(id) entIds[id] = None if self.entTypeReg is not None: - # check each spec allEntIds = entIds for entId in allEntIds: spec = self.getEntitySpec(entId) - - assert spec.has_key('type') entType = spec['type'] typeDesc = self.entTypeReg.getTypeDesc(entType) attribNames = typeDesc.getAttribNames() attribDescs = typeDesc.getAttribDescDict() - - # are there any unknown attribs in the spec? - for attrib in spec.keys(): + for attrib in list(spec.keys()): if attrib not in attribNames: - LevelSpec.notify.warning( - "entId %s (%s): unknown attrib '%s', omitting" - % (entId, spec['type'], attrib)) + LevelSpec.notify.warning("entId %s (%s): unknown attrib '%s', omitting" % (entId, spec['type'], attrib)) del spec[attrib] - # does the spec have all of its attributes? for attribName in attribNames: - if not spec.has_key(attribName): - LevelSpec.notify.warning( - "entId %s (%s): missing attrib '%s'" % ( - entId, spec['type'], attribName)) + if attribName not in spec: + default = attribDescs[attribName].getDefaultValue() + LevelSpec.notify.warning("entId %s (%s): missing attrib '%s', setting to default (%s)" % (entId, spec['type'], attribName, repr(default))) + spec[attribName] = default + + return def __hash__(self): return hash(repr(self)) @@ -531,5 +363,4 @@ def __str__(self): return 'LevelSpec' def __repr__(self): - return 'LevelSpec(%s, scenario=%s)' % (repr(self.specDict), - self.scenario) + return 'LevelSpec(%s, scenario=%s)' % (repr(self.specDict), self.scenario) \ No newline at end of file diff --git a/otp/src/level/LevelUtil.py b/otp/src/level/LevelUtil.py index 68d845e0..d80f09e9 100644 --- a/otp/src/level/LevelUtil.py +++ b/otp/src/level/LevelUtil.py @@ -1,17 +1,12 @@ -"""LevelUtil module: contains Level utility funcs""" +import string, LevelConstants -import string -import LevelConstants +def getZoneNum2Node(levelModel, logFunc=lambda str: str): -def getZoneNum2Node(levelModel, logFunc=lambda str:str): - """ given model, returns dict of ZoneNumber -> ZoneNode """ def findNumberedNodes(baseString, model, caseInsens=1): - # finds nodes whose name follows the pattern 'baseString#blah' - # returns dictionary that maps # to node srch = '**/%s*' % baseString if caseInsens: srch += ';+i' - potentialNodes = model.findAllMatches(srch) + potentialNodes = model.findAllMatches(srch).asList() num2node = {} for potentialNode in potentialNodes: name = potentialNode.getName() @@ -22,30 +17,23 @@ def findNumberedNodes(baseString, model, caseInsens=1): if name[numDigits] not in string.digits: break numDigits += 1 + if numDigits == 0: continue num = int(name[:numDigits]) - # is this a valid zoneNum? if num == LevelConstants.UberZoneEntId: - logFunc('warning: cannot use UberZone zoneNum (%s). ' - 'ignoring %s' % (LevelConstants.UberZoneEntId, - potentialNode)) + logFunc('warning: cannot use UberZone zoneNum (%s). ignoring %s' % (LevelConstants.UberZoneEntId, potentialNode)) continue - if (num < LevelConstants.MinZoneNum) or ( - num > LevelConstants.MaxZoneNum): - logFunc('warning: zone %s is out of range. ignoring %s' % - (num, potentialNode)) + if num < LevelConstants.MinZoneNum or num > LevelConstants.MaxZoneNum: + logFunc('warning: zone %s is out of range. ignoring %s' % (num, potentialNode)) continue - # do we already have a ZoneNode for this zone num? if num in num2node: - logFunc('warning: zone %s already assigned to %s. ignoring %s' % - (num, num2node[num], potentialNode)) + logFunc('warning: zone %s already assigned to %s. ignoring %s' % (num, num2node[num], potentialNode)) continue num2node[num] = potentialNode return num2node zoneNum2node = findNumberedNodes('zone', levelModel) - # add the UberZone to the table zoneNum2node[LevelConstants.UberZoneEntId] = levelModel - return zoneNum2node + return zoneNum2node \ No newline at end of file diff --git a/otp/src/level/LocatorEntity.py b/otp/src/level/LocatorEntity.py index e9a6d6ed..71c8329a 100644 --- a/otp/src/level/LocatorEntity.py +++ b/otp/src/level/LocatorEntity.py @@ -1,12 +1,14 @@ -import Entity, BasicEntities -from pandac.PandaModules import NodePath +from . import Entity, BasicEntities +from pandac import NodePath from direct.directnotify import DirectNotifyGlobal -class LocatorEntity(Entity.Entity, NodePath): +class LocatorEntity(Entity.Entity, NodePath.NodePath): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('LocatorEntity') + def __init__(self, level, entId): node = hidden.attachNewNode('LocatorEntity-%s' % entId) - NodePath.__init__(self, node) + NodePath.NodePath.__init__(self, node) Entity.Entity.__init__(self, level, entId) self.doReparent() @@ -15,19 +17,18 @@ def destroy(self): self.removeNode() def getNodePath(self): - # this allows other entities to be parented to us return self def doReparent(self): if self.searchPath != '': parent = self.level.geom.find(self.searchPath) if parent.isEmpty(): - LocatorEntity.notify.warning( - "could not find '%s'" % self.searchPath) + LocatorEntity.notify.warning("could not find '%s'" % self.searchPath) self.reparentTo(hidden) else: self.reparentTo(parent) if __dev__: + def attribChanged(self, attrib, value): - self.doReparent() + self.doReparent() \ No newline at end of file diff --git a/otp/src/level/LogicGate.py b/otp/src/level/LogicGate.py index dd7b238d..845406ac 100644 --- a/otp/src/level/LogicGate.py +++ b/otp/src/level/LogicGate.py @@ -1,86 +1,39 @@ -""" -LogicGate.py - - Logic Gates: - - and: 0 0 = 0 or: 0 0 = 0 xor: 0 0 = 0 - 0 1 = 0 0 1 = 1 0 1 = 1 - 1 0 = 0 1 0 = 1 1 0 = 1 - 1 1 = 1 1 1 = 1 1 1 = 0 - - nand: 0 0 = 1 nor: 0 0 = 1 xnor: 0 0 = 1 - 0 1 = 1 0 1 = 0 0 1 = 0 - 1 0 = 1 1 0 = 0 1 0 = 0 - 1 1 = 0 1 1 = 0 1 1 = 1 - - In the following: - 1: send a true message - 0: send a false message - -: don't send a message - - a b and or xor nand nor xnor - (0 0) (0) (0) (0) (1) (1) (1) <--- initial state - 1 0 - 1 1 - 0 0 - 0 0 - 0 0 - 1 1 - 1 0 - 1 1 - 0 0 - 1 1 1 - 0 0 - 1 - 0 1 0 - 1 1 - 0 - 1 1 1 - 0 0 - 1 - 0 1 0 - 1 1 - 0 - 0 0 - 0 0 - 1 1 -""" - from direct.showbase import DirectObject from direct.directnotify import DirectNotifyGlobal -import Entity - +from . import Entity def andTest(self, a, b): - assert self.debugPrint("andTest(a=%s, b=%s)"%(a, b)) if b: messenger.send(self.getOutputEventName(), [a]) + def orTest(self, a, b): - assert self.debugPrint("orTest(a=%s, b=%s)"%(a, b)) if not b: messenger.send(self.getOutputEventName(), [a]) - # else: ...we already sent the messege when b was set. + def xorTest(self, a, b): - assert self.debugPrint("xorTest(a=%s, b=%s)"%(a, b)) - messenger.send(self.getOutputEventName(), [(not (a and b)) and (a or b)]) + messenger.send(self.getOutputEventName(), [not (a and b) and (a or b)]) + def nandTest(self, a, b): - assert self.debugPrint("nandTest(a=%s, b=%s)"%(a, b)) if b: messenger.send(self.getOutputEventName(), [not (a and b)]) + def norTest(self, a, b): - assert self.debugPrint("norTest(a=%s, b=%s)"%(a, b)) if not b: messenger.send(self.getOutputEventName(), [not (a or b)]) - # else: ...we already sent the messege when b was set. + def xnorTest(self, a, b): - assert self.debugPrint("xnorTest(a=%s, b=%s)"%(a, b)) - messenger.send(self.getOutputEventName(), [(a and b) or (not (a or b))]) + messenger.send(self.getOutputEventName(), [a and b or not (a or b)]) class LogicGate(Entity.Entity, DirectObject.DirectObject): - notify = DirectNotifyGlobal.directNotify.newCategory('LogicGate') - - logicTests={ - "and": andTest, - "or": orTest, - "xor": xorTest, - "nand": nandTest, - "nor": norTest, - "xnor": xnorTest, - } + logicTests = {'and': andTest, 'or': orTest, 'xor': xorTest, 'nand': nandTest, 'nor': norTest, 'xnor': xnorTest} def __init__(self, level, entId): - """entId: """ - assert self.debugPrint("LogicGate(entId=%s)"%(entId)) self.input1Event = None self.input2Event = None DirectObject.DirectObject.__init__(self) @@ -90,51 +43,43 @@ def __init__(self, level, entId): self.setIsInput2(self.isInput2) self.setInput1Event(self.input1Event) self.setInput2Event(self.input2Event) + return def destroy(self): - assert self.debugPrint("destroy()") self.ignore(self.input1Event) self.input1Event = None self.ignore(self.input2Event) self.input2Event = None Entity.Entity.destroy(self) - + return + def setLogicType(self, logicType): - assert self.debugPrint("setLogicType(logicType=%s)"%(logicType,)) - self.logicType=logicType - assert self.logicTests[logicType] - self.logicTest=self.logicTests[logicType] - + self.logicType = logicType + self.logicTest = self.logicTests[logicType] + def setIsInput1(self, isTrue): - assert self.debugPrint("setIsInput1(isTrue=%s)"%(isTrue,)) if 1 or (not isTrue) != (not self.input1Event): - # ...the logical state of self.input1Event has changed. - self.isInput1=isTrue + self.isInput1 = isTrue self.logicTest(self, isTrue, self.isInput2) - + def setIsInput2(self, isTrue): - assert self.debugPrint("setIsInput2(isTrue=%s)"%(isTrue,)) if 1 or (not isTrue) != (not self.input2Event): - # ...the logical state of self.input2Event has changed. - self.isInput2=isTrue + self.isInput2 = isTrue self.logicTest(self, isTrue, self.isInput1) - + def setInput1Event(self, event): - assert self.debugPrint("setInput1Event(event=%s)"%(event,)) if self.input1Event: self.ignore(self.input1Event) self.input1Event = self.getOutputEventName(event) if self.input1Event: self.accept(self.input1Event, self.setIsInput1) - + def setInput2Event(self, event): - assert self.debugPrint("setInput2Event(event=%s)"%(event,)) if self.input2Event: self.ignore(self.input2Event) self.input2Event = self.getOutputEventName(event) if self.input2Event: self.accept(self.input2Event, self.setIsInput2) - + def getName(self): - #return "logicGate-%s"%(self.entId,) - return "switch-%s"%(self.entId,) + return 'switch-%s' % (self.entId,) \ No newline at end of file diff --git a/otp/src/level/ModelEntity.py b/otp/src/level/ModelEntity.py index 5850215d..64111444 100644 --- a/otp/src/level/ModelEntity.py +++ b/otp/src/level/ModelEntity.py @@ -1,25 +1,22 @@ from toontown.toonbase.ToontownGlobals import * from direct.directnotify import DirectNotifyGlobal -import BasicEntities +from . import BasicEntities class ModelEntity(BasicEntities.NodePathEntity): - LoadFuncs = { - 'loadModelCopy': loader.loadModelCopy, - 'loadModel': loader.loadModel, - 'loadModelOnce': loader.loadModelOnce, - } + __module__ = __name__ + LoadFuncs = {'loadModelCopy': loader.loadModelCopy, 'loadModel': loader.loadModel, 'loadModelOnce': loader.loadModelOnce} + def __init__(self, level, entId): - # TODO: fill in default values automatically for missing attribs self.collisionsOnly = False self.loadType = 'loadModelCopy' self.flattenType = 'light' - self.goonHatType = 'none' self.entInitialized = False BasicEntities.NodePathEntity.__init__(self, level, entId) self.entInitialized = True self.model = None self.loadModel() - + return + def destroy(self): if self.model: self.model.removeNode() @@ -32,76 +29,36 @@ def loadModel(self): self.model = None if self.modelPath is None: return - self.model = ModelEntity.LoadFuncs[self.loadType](self.modelPath) if self.model: self.model.reparentTo(self) - - # hide/show as appropriate if self.collisionsOnly: if __dev__: self.model.setTransparency(1) - self.model.setColorScale(1,1,1,.1) + self.model.setColorScale(1, 1, 1, 0.1) else: self.model.hide() else: self.model.show() - - # HACK SDN: special code for moving crate wall collisions down - if self.modelPath in ("phase_9/models/cogHQ/woodCrateB.bam", - "phase_9/models/cogHQ/metal_crateB.bam", - "phase_10/models/cashbotHQ/CBMetalCrate.bam", - "phase_10/models/cogHQ/CBMetalCrate2.bam", - "phase_10/models/cashbotHQ/CBWoodCrate.bam", - "phase_11/models/lawbotHQ/LB_metal_crate.bam", - "phase_11/models/lawbotHQ/LB_metal_crate2.bam", - ): - # get rid of any scales - #self.model.flattenLight() - # move walls down - cNode = self.find("**/wall") - cNode.setZ(cNode, -.75) - # duplicate the floor and move it down to crate a - # catch effect for low-hopped toons - colNode = self.find("**/collision") - floor = colNode.find("**/floor") + if self.modelPath in ('phase_9/models/cogHQ/woodCrateB.bam', 'phase_9/models/cogHQ/metal_crateB.bam', 'phase_10/models/cashbotHQ/CBMetalCrate.bam', 'phase_10/models/cogHQ/CBMetalCrate2.bam', 'phase_10/models/cashbotHQ/CBWoodCrate.bam'): + cNode = self.find('**/wall') + cNode.setZ(cNode, -0.75) + colNode = self.find('**/collision') + floor = colNode.find('**/floor') floor2 = floor.copyTo(colNode) - floor2.setZ(floor2, -.75) - - """ - # incorporate the entity's overall scale - self.model.setScale(self.getScale()) - self.setScale(1) - self.model.flattenLight() - """ - - if self.goonHatType is not 'none': - self.goonType = {'hardhat':'pg','security':'sg'}[self.goonHatType] - self.hat = self.model - ### this was copied from Goon.createHead - if self.goonType == "pg": - self.hat.find("**/security_hat").hide() - elif self.goonType == "sg": - self.hat.find("**/hard_hat").hide() - ### - del self.hat - del self.goonType - + floor2.setZ(floor2, -0.75) if self.flattenType == 'light': self.model.flattenLight() elif self.flattenType == 'medium': self.model.flattenMedium() elif self.flattenType == 'strong': self.model.flattenStrong() + return def setModelPath(self, path): self.modelPath = path self.loadModel() - + def setCollisionsOnly(self, collisionsOnly): self.collisionsOnly = collisionsOnly - self.loadModel() - - def setGoonHatType(self, goonHatType): - self.goonHatType = goonHatType - self.loadModel() + self.loadModel() \ No newline at end of file diff --git a/otp/src/level/PathEntity.py b/otp/src/level/PathEntity.py index 92c8f347..787a4fe5 100644 --- a/otp/src/level/PathEntity.py +++ b/otp/src/level/PathEntity.py @@ -1,16 +1,18 @@ from toontown.toonbase.ToontownGlobals import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal -import BasicEntities +from . import BasicEntities from toontown.suit import GoonPathData class PathEntity(BasicEntities.NodePathEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('PathEntity') + def __init__(self, level, entId): - self.pathScale = 1. + self.pathScale = 1.0 BasicEntities.NodePathEntity.__init__(self, level, entId) self.setPathIndex(self.pathIndex) - + def destroy(self): BasicEntities.NodePathEntity.destroy(self) @@ -24,50 +26,34 @@ def setPathIndex(self, pathIndex): else: PathEntity.notify.warning('invalid pathIndex: %s' % pathIndex) self.path = None - - def makePathTrack(self, node, velocity, name, turnTime=1, - lookAroundNode=None): - track = Sequence(name = name) + return + + def makePathTrack(self, node, velocity, name, turnTime=1, lookAroundNode=None): + track = Sequence(name=name) if self.path is None: - track.append(WaitInterval(1.)) + track.append(WaitInterval(1.0)) return track - assert len(self.path) > 1 - - # end with the starting point at the end, so we have a continuous loop path = self.path + [self.path[0]] for pointIndex in range(len(path) - 1): startPoint = Point3(path[pointIndex]) * self.pathScale - endPoint = Point3(path[pointIndex + 1]) * self.pathScale - # Face the endpoint + endPoint = Point3(path[(pointIndex + 1)]) * self.pathScale v = startPoint - endPoint - - # figure out the angle we have to turn to look at the next point - # Note: this will only look right for paths that are defined in a - # counterclockwise order. Otherwise the goon will always turn the - # "long" way to look at the next point - node.setPos(startPoint[0], startPoint[1],startPoint[2]) + node.setPos(startPoint[0], startPoint[1], startPoint[2]) node.headsUp(endPoint[0], endPoint[1], endPoint[2]) theta = node.getH() % 360 - - track.append( - LerpHprInterval(node, # stop and look around - turnTime, - Vec3(theta,0,0))) - - # Calculate the amount of time we should spend walking + track.append(LerpHprInterval(node, turnTime, Vec3(theta, 0, 0))) distance = Vec3(v).length() duration = distance / velocity - - # Walk to the end point - track.append( - LerpPosInterval(node, duration=duration, - pos=endPoint, startPos=startPoint)) + track.append(LerpPosInterval(node, duration=duration, pos=endPoint, startPos=startPoint)) + return track + return if __dev__: + def getChangeEvent(self): return self.getUniqueName('pathChanged') def setPathScale(self, pathScale): self.pathScale = pathScale - self.setPathIndex(self.pathIndex) + self.setPathIndex(self.pathIndex) \ No newline at end of file diff --git a/otp/src/level/PropSpinner.py b/otp/src/level/PropSpinner.py index 49a7a76f..acaed0e7 100644 --- a/otp/src/level/PropSpinner.py +++ b/otp/src/level/PropSpinner.py @@ -1,48 +1,48 @@ +from direct.interval.IntervalGlobal import * +from . import Entity -import string -from direct.interval.IntervalGlobal import * -from Entity import Entity -from pandac.PandaModules import Vec3 +class PropSpinner(Entity.Entity): + __module__ = __name__ -class PropSpinner(Entity): def __init__(self, level, entId): - Entity.__init__(self, level, entId) + Entity.Entity.__init__(self, level, entId) self.initProps() def destroy(self): self.destroyProps() - Entity.destroy(self) + Entity.Entity.destroy(self) def initProps(self): topNode = self.getZoneNode() - props = topNode.findAllMatches("**/Prop_*") - spinTracks = Parallel() - for prop in props: - name = prop.getName() - nameParts = name.split('_') - # ['Prop', 'Rotate', 'Y', '15', 'Gear2'] + props = topNode.findAllMatches('**/Prop_*').asList() + spinTracks = Parallel() + for prop in props: + name = prop.getName() + nameParts = name.split('_') axis = nameParts[2] rate = 0 - neg = (string.upper(nameParts[3][0]) == 'N') + neg = string.upper(nameParts[3][0]) == 'N' if neg: nameParts[3] = nameParts[3][1:] try: rate = int(nameParts[3]) except: - print 'invalid prop rotate string: %s' % name + print('invalid prop rotate string: %s' % name) + if neg: rate = -rate - prop.setHpr(0,0,0) - if axis == "X": - hpr = Vec3(0, rate*360, 0) - elif axis == "Y": - hpr = Vec3(rate*360, 0, 0) - elif axis == "Z": - hpr = Vec3(0, 0, rate*360) - else: - print 'error', axis - spinTracks.append(LerpHprInterval(prop, 60, hpr)) - spinTracks.loop() + prop.setHpr(0, 0, 0) + if axis == 'X': + hpr = Vec3(0, rate * 360, 0) + elif axis == 'Y': + hpr = Vec3(rate * 360, 0, 0) + elif axis == 'Z': + hpr = Vec3(0, 0, rate * 360) + else: + print('error', axis) + spinTracks.append(LerpHprInterval(prop, 60, hpr)) + + spinTracks.loop() self.spinTracks = spinTracks def destroyProps(self): @@ -51,6 +51,7 @@ def destroyProps(self): del self.spinTracks if __dev__: + def attribChanged(self, *args): self.destroyProps() - self.initProps() + self.initProps() \ No newline at end of file diff --git a/otp/src/level/SpecUtil.py b/otp/src/level/SpecUtil.py index f1928327..d4ebc1ec 100644 --- a/otp/src/level/SpecUtil.py +++ b/otp/src/level/SpecUtil.py @@ -2,11 +2,11 @@ import direct.directbase.DirectStart from pandac.PandaModules import * -import LevelSpec -import LevelConstants -import LevelUtil +from . import LevelSpec +from . import LevelConstants +from . import LevelUtil from direct.showbase.PythonUtil import list2dict -import EntityTypes +from . import EntityTypes import types """ @@ -24,7 +24,7 @@ def makeNewSpec(filename, modelPath, entTypeModule=EntityTypes): # expand any env vars, then convert to an OS-correct path fname = Filename.expandFrom(filename).toOsSpecific() spec.saveToDisk(fname, makeBackup=0) - print 'Done.' + print('Done.') """ FOR SAME LEVEL MODEL PATH: @@ -47,7 +47,7 @@ def updateSpec(specModule, entTypeModule=EntityTypes, modelPath=None): spec = LevelSpec.LevelSpec(specModule) privUpdateSpec(spec, modelPath, entTypeModule) spec.saveToDisk() - print 'Done.' + print('Done.') def privUpdateSpec(spec, modelPath, entTypeModule, newZonesGloballyVisible=0): """internal: take a spec and update it to match its level model @@ -56,7 +56,7 @@ def privUpdateSpec(spec, modelPath, entTypeModule, newZonesGloballyVisible=0): """ assert __dev__ assert type(entTypeModule) is types.ModuleType - import EntityTypeRegistry + from . import EntityTypeRegistry etr = EntityTypeRegistry.EntityTypeRegistry(entTypeModule) spec.setEntityTypeReg(etr) @@ -76,7 +76,7 @@ def privUpdateSpec(spec, modelPath, entTypeModule, newZonesGloballyVisible=0): TexturePool.clearFakeTextureImage() # get the model's zone info zoneNum2node = LevelUtil.getZoneNum2Node(model) - zoneNums = zoneNum2node.keys() + zoneNums = list(zoneNum2node.keys()) # what zone entities do we have specs for? type2ids = spec.getEntType2ids(spec.getAllEntIds()) @@ -96,7 +96,7 @@ def insertZoneEntity(zoneNum, spec=spec, zoneEntIds=zoneEntIds): removedZoneNums = [] for entId in list(zoneEntIds): if entId not in zoneNums: - print 'zone %s no longer exists; removing' % entId + print('zone %s no longer exists; removing' % entId) removeZoneEntity(entId) removedZoneNums.append(entId) @@ -106,7 +106,7 @@ def insertZoneEntity(zoneNum, spec=spec, zoneEntIds=zoneEntIds): if zoneNum not in zoneEntIds: newZoneNums.append(zoneNum) - print 'adding new zone entity %s' % zoneNum + print('adding new zone entity %s' % zoneNum) insertZoneEntity(zoneNum) # by default, new zone can't see any other zones spec.doSetAttrib(zoneNum, 'visibility', []) @@ -117,7 +117,7 @@ def insertZoneEntity(zoneNum, spec=spec, zoneEntIds=zoneEntIds): visDict = list2dict(visList) for zoneNum in newZoneNums: visDict[zoneNum] = None - visList = visDict.keys() + visList = list(visDict.keys()) visList.sort() spec.doSetAttrib(entId, 'visibility', visList) diff --git a/otp/src/level/VisibilityBlocker.py b/otp/src/level/VisibilityBlocker.py index 135b249f..cd4e6e6f 100644 --- a/otp/src/level/VisibilityBlocker.py +++ b/otp/src/level/VisibilityBlocker.py @@ -1,52 +1,31 @@ -"""VisibilityBlocker module: contains the VisibilityBlocker class""" - -import Entity +from . import Entity class VisibilityBlocker: - """This is a mixin class for level entities (see Entity.py) that in some - way 'block' visibility (such as doors) -- entities that can completely - obscure what's behind them. It provides the blocker with a mechanism - whereby they are informed of when it is safe for them to 'unblock' the - visibility and show what's behind them. Without this mechanism, the - blocker might show what's behind it before all of the distributed objects - behind it have been generated.""" + __module__ = __name__ + def __init__(self): - self.__nextSetZoneDoneEvent=None + self.__nextSetZoneDoneEvent = None + return def destroy(self): self.cancelUnblockVis() def requestUnblockVis(self): - """derived class should call this before the end of the frame in which - they cause the visibility to be extended. okToUnblockVis (see below) - will be called when it's safe to show the new zones.""" if self.__nextSetZoneDoneEvent is None: self.__nextSetZoneDoneEvent = self.level.cr.getNextSetZoneDoneEvent() self.acceptOnce(self.__nextSetZoneDoneEvent, self.okToUnblockVis) - # make sure that a setZone is sent this frame, even if the - # visibility list doesn't change self.level.forceSetZoneThisFrame() + return def cancelUnblockVis(self): - """ - derived class should call this if they have called - requestUnblockVis, but no longer need that service. For example - the user could have canceled the request that started the - visibility change. - """ if self.__nextSetZoneDoneEvent is not None: self.ignore(self.__nextSetZoneDoneEvent) self.__nextSetZoneDoneEvent = None + return def isWaitingForUnblockVis(self): - """ - returns a boolean for whether there is a requestUnblockVis() pending. - """ return self.__nextSetZoneDoneEvent is not None + return def okToUnblockVis(self): - """ - derived class should override this func and do the vis unblock - (i.e. open the door, etc.) - """ - self.cancelUnblockVis() + self.cancelUnblockVis() \ No newline at end of file diff --git a/otp/src/level/VisibilityExtender.py b/otp/src/level/VisibilityExtender.py index cb824d6b..363b7b42 100644 --- a/otp/src/level/VisibilityExtender.py +++ b/otp/src/level/VisibilityExtender.py @@ -1,8 +1,8 @@ -"""VisibilityExtender module: contains the VisibilityExtender class""" - -import Entity +from . import Entity class VisibilityExtender(Entity.Entity): + __module__ = __name__ + def __init__(self, level, entId): Entity.Entity.__init__(self, level, entId) self.initVisExt() @@ -14,32 +14,29 @@ def initVisExt(self): if self.event is not None: self.eventName = self.getOutputEventName(self.event) self.accept(self.eventName, self.handleEvent) + return def destroyVisExt(self): if self.eventName is not None: self.ignore(self.eventName) if self.extended: self.retract() + return def handleEvent(self, doExtend): if doExtend: if not self.extended: self.extend() - else: - if self.extended: - self.retract() + elif self.extended: + self.retract() def extend(self): - """extend the visibility list""" - assert not self.extended zoneEnt = self.level.getEntity(self.getZoneEntId()) zoneEnt.incrementRefCounts(self.newZones) self.extended = 1 self.level.handleVisChange() - + def retract(self): - """un-extend the visibility list""" - assert self.extended zoneEnt = self.level.getEntity(self.getZoneEntId()) zoneEnt.decrementRefCounts(self.newZones) self.extended = 0 @@ -50,18 +47,18 @@ def destroy(self): Entity.Entity.destroy(self) if __dev__: + def setNewZones(self, newZones): - # we need to call destroyVisExt before accepting the new zone set extended = self.extended self.destroyVisExt() self.newZones = newZones self.initVisExt() if extended: self.extend() - + def attribChanged(self, *args): extended = self.extended self.destroyVisExt() self.initVisExt() if extended: - self.extend() + self.extend() \ No newline at end of file diff --git a/otp/src/level/ZoneEntity.py b/otp/src/level/ZoneEntity.py index e10c05a9..5a759311 100644 --- a/otp/src/level/ZoneEntity.py +++ b/otp/src/level/ZoneEntity.py @@ -1,31 +1,22 @@ -"""ZoneEntity module: contains the ZoneEntity class""" - -import ZoneEntityBase -import BasicEntities +from . import ZoneEntityBase, BasicEntities class ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities.NodePathAttribs): + __module__ = __name__ + def __init__(self, level, entId): ZoneEntityBase.ZoneEntityBase.__init__(self, level, entId) - self.nodePath = self.level.getZoneNode(self.entId) if self.nodePath is None: if __dev__: - self.level.reportModelSpecSyncError( - 'unknown zoneNum %s; zone was removed from model?' % - self.entId) + self.level.reportModelSpecSyncError('unknown zoneNum %s; zone was removed from model?' % self.entId) else: - self.notify.error('zone %s not found in level model' % - self.entId) + self.notify.error('zone %s not found in level model' % self.entId) BasicEntities.NodePathAttribs.initNodePathAttribs(self, doReparent=0) - - # dict of zoneNum to 'visible' reference count self.visibleZoneNums = {} - - # inc ref counts for the zones that are always visible from this zone self.incrementRefCounts(self.visibility) + return def destroy(self): - # no need to dec our visibility reference counts BasicEntities.NodePathAttribs.destroy(self) ZoneEntityBase.ZoneEntityBase.destroy(self) @@ -33,15 +24,13 @@ def getNodePath(self): return self.nodePath def getVisibleZoneNums(self): - return self.visibleZoneNums.keys() + return list(self.visibleZoneNums.keys()) - # call these with lists of zoneNums to increment or decrement their - # 'visible' reference counts - # zone is visible as long as its ref count is nonzero def incrementRefCounts(self, zoneNumList): for zoneNum in zoneNumList: self.visibleZoneNums.setdefault(zoneNum, 0) self.visibleZoneNums[zoneNum] += 1 + def decrementRefCounts(self, zoneNumList): for zoneNum in zoneNumList: self.visibleZoneNums[zoneNum] -= 1 @@ -49,9 +38,9 @@ def decrementRefCounts(self, zoneNumList): del self.visibleZoneNums[zoneNum] if __dev__: + def setVisibility(self, visibility): self.decrementRefCounts(self.visibility) self.visibility = visibility self.incrementRefCounts(self.visibility) - - self.level.handleVisChange() + self.level.handleVisChange() \ No newline at end of file diff --git a/otp/src/level/ZoneEntityAI.py b/otp/src/level/ZoneEntityAI.py index 4c8e9dbd..ae6fbd21 100644 --- a/otp/src/level/ZoneEntityAI.py +++ b/otp/src/level/ZoneEntityAI.py @@ -1,6 +1,6 @@ """ZoneEntityAI module: contains the ZoneEntityAI class""" -import ZoneEntityBase +from . import ZoneEntityBase class ZoneEntityAI(ZoneEntityBase.ZoneEntityBase): def __init__(self, level, entId): diff --git a/otp/src/level/ZoneEntityBase.py b/otp/src/level/ZoneEntityBase.py index 48f9a075..ac9b1046 100644 --- a/otp/src/level/ZoneEntityBase.py +++ b/otp/src/level/ZoneEntityBase.py @@ -1,12 +1,12 @@ -"""ZoneEntityBase module: contains the ZoneEntityBase class""" - -import Entity -import LevelConstants +from . import Entity, LevelConstants class ZoneEntityBase(Entity.Entity): + __module__ = __name__ + def __init__(self, level, entId): Entity.Entity.__init__(self, level, entId) self.zoneId = None + return def destroy(self): del self.zoneId @@ -16,13 +16,10 @@ def isUberZone(self): return self.entId == LevelConstants.UberZoneEntId def setZoneId(self, zoneId): - """set the network zoneId that this zone entity corresponds to""" self.zoneId = zoneId def getZoneId(self): - """network zoneId""" return self.zoneId def getZoneNum(self): - """zoneNum from model / entityId""" - return self.entId + return self.entId \ No newline at end of file diff --git a/otp/src/leveleditor/LevelEditor.py b/otp/src/leveleditor/LevelEditor.py index 4a5483a8..30ffb14e 100644 --- a/otp/src/leveleditor/LevelEditor.py +++ b/otp/src/leveleditor/LevelEditor.py @@ -6,10 +6,10 @@ """ from direct.leveleditor.LevelEditorBase import * -from ObjectHandler import * -from ObjectPalette import * -from LevelEditorUI import * -from ProtoPalette import * +from .ObjectHandler import * +from .ObjectPalette import * +from .LevelEditorUI import * +from .ProtoPalette import * class LevelEditor(LevelEditorBase): """ Class for Panda3D LevelEditor """ diff --git a/otp/src/leveleditor/LevelEditorStart.py b/otp/src/leveleditor/LevelEditorStart.py index 3ea17da9..bb40a7ae 100644 --- a/otp/src/leveleditor/LevelEditorStart.py +++ b/otp/src/leveleditor/LevelEditorStart.py @@ -1,4 +1,4 @@ -import LevelEditor +from . import LevelEditor base.le = LevelEditor.LevelEditor() # You should define LevelEditor instance as diff --git a/otp/src/login/AccountServerConstants.py b/otp/src/login/AccountServerConstants.py index 91970075..9663bc50 100644 --- a/otp/src/login/AccountServerConstants.py +++ b/otp/src/login/AccountServerConstants.py @@ -1,10 +1,10 @@ """AccountServerConstants.py: contains the AccountServerConstants class """ from pandac.PandaModules import * -from RemoteValueSet import * +from .RemoteValueSet import * from direct.directnotify import DirectNotifyGlobal -import TTAccount -import HTTPUtil +from . import TTAccount +from . import HTTPUtil class AccountServerConstants(RemoteValueSet): notify = \ diff --git a/otp/src/login/CreateAccountScreen.py b/otp/src/login/CreateAccountScreen.py index 50d0941b..d19d1e11 100644 --- a/otp/src/login/CreateAccountScreen.py +++ b/otp/src/login/CreateAccountScreen.py @@ -9,8 +9,8 @@ from direct.fsm import State from direct.directnotify import DirectNotifyGlobal from otp.otpbase import OTPLocalizer -import TTAccount -import GuiScreen +from . import TTAccount +from . import GuiScreen from otp.otpbase import OTPGlobals from direct.distributed.MsgTypes import * @@ -336,7 +336,7 @@ def enterWaitForLoginResponse(self): error=self.loginInterface.createAccount(self.userName, self.password, data) - except TTAccount.TTAccountException, e: + except TTAccount.TTAccountException as e: # show the error message, and back out of account creation error = str(e) self.notify.info(error) diff --git a/otp/src/login/GuiScreen.py b/otp/src/login/GuiScreen.py index 0735ade5..c00b506e 100644 --- a/otp/src/login/GuiScreen.py +++ b/otp/src/login/GuiScreen.py @@ -102,7 +102,7 @@ def startFocusMgmt(self, # Note that we still need to listen for DirectEntry focus events, # in case the user clicks on a DirectEntry. self.focusHandlerAbsorbCounts = {} - for i in xrange(len(self.focusList)): + for i in range(len(self.focusList)): item = self.focusList[i] if isinstance(item, DirectEntry): self.focusHandlerAbsorbCounts[item] = 0 @@ -111,7 +111,7 @@ def startFocusMgmt(self, self.userFocusHandlers = {} self.userCommandHandlers = {} - for i in xrange(len(self.focusList)): + for i in range(len(self.focusList)): item = self.focusList[i] if isinstance(item, DirectEntry): # store the old focus handler so that we can chain to it @@ -146,12 +146,12 @@ def startFocusMgmt(self, # set up the Enter-press handlers self.enterPressHandlers = {} - for i in xrange(len(self.focusList)): + for i in range(len(self.focusList)): item = self.focusList[i] # pick an enter-press behavior behavior = enterPressBehavior - if overrides.has_key(item): + if item in overrides: behavior = overrides[item] if callable(behavior): @@ -320,16 +320,16 @@ def __chainToUserCommandHandler(self, item): if userHandler: if isinstance(item, DirectEntry): enteredText = item.get() - apply(userHandler, [enteredText] + userHandlerArgs) + userHandler(*[enteredText] + userHandlerArgs) elif isinstance(item, DirectScrolledList): - apply(userHandler, userHandlerArgs) + userHandler(*userHandlerArgs) def __chainToUserFocusHandler(self, item): # call the user focus handler, if any if isinstance(item, DirectEntry): userHandler, userHandlerArgs = self.userFocusHandlers[item] if userHandler: - apply(userHandler, userHandlerArgs) + userHandler(*userHandlerArgs) ### TAB key handlers ########## diff --git a/otp/src/login/HTTPUtil.py b/otp/src/login/HTTPUtil.py index 0e897cb4..0e101d7c 100644 --- a/otp/src/login/HTTPUtil.py +++ b/otp/src/login/HTTPUtil.py @@ -25,7 +25,7 @@ def getHTTPResponse(url, http, body=''): response = sr.readlines() # strip trailing newlines - for i in xrange(len(response)): + for i in range(len(response)): if response[i][-1] == '\n': response[i] = response[i][:-1] diff --git a/otp/src/login/LoginDISLTokenAccount.py b/otp/src/login/LoginDISLTokenAccount.py index 834f568b..af71874d 100644 --- a/otp/src/login/LoginDISLTokenAccount.py +++ b/otp/src/login/LoginDISLTokenAccount.py @@ -3,7 +3,7 @@ from direct.showbase.ShowBaseGlobal import * from direct.distributed.MsgTypes import * from direct.directnotify import DirectNotifyGlobal -import LoginBase +from . import LoginBase from direct.distributed.PyDatagram import PyDatagram diff --git a/otp/src/login/LoginGSAccount.py b/otp/src/login/LoginGSAccount.py index 820bc526..79f9a7e4 100644 --- a/otp/src/login/LoginGSAccount.py +++ b/otp/src/login/LoginGSAccount.py @@ -3,7 +3,7 @@ from pandac.PandaModules import * from direct.distributed.MsgTypes import * from direct.directnotify import DirectNotifyGlobal -import LoginBase +from . import LoginBase from direct.distributed.PyDatagram import PyDatagram diff --git a/otp/src/login/LoginGoAccount.py b/otp/src/login/LoginGoAccount.py index 6c896fb1..eea1921d 100644 --- a/otp/src/login/LoginGoAccount.py +++ b/otp/src/login/LoginGoAccount.py @@ -4,7 +4,7 @@ from pandac.PandaModules import * from direct.distributed.MsgTypes import * from direct.directnotify import DirectNotifyGlobal -import LoginBase +from . import LoginBase from direct.distributed.PyDatagram import PyDatagram diff --git a/otp/src/login/LoginScreen.py b/otp/src/login/LoginScreen.py index 5b6da59d..8f09518e 100644 --- a/otp/src/login/LoginScreen.py +++ b/otp/src/login/LoginScreen.py @@ -19,8 +19,8 @@ from otp.otpbase import OTPGlobals from otp.uberdog.AccountDetailRecord import AccountDetailRecord, SubDetailRecord -import TTAccount -import GuiScreen +from . import TTAccount +from . import GuiScreen class LoginScreen(StateData.StateData, GuiScreen.GuiScreen): """ @@ -420,7 +420,7 @@ def enterWaitForLoginResponse(self): try: error=self.loginInterface.authorize(self.userName, self.password) - except TTAccount.TTAccountException, e: + except TTAccount.TTAccountException as e: self.fsm.request('showConnectionProblemDialog', [str(e)]) return diff --git a/otp/src/login/LoginTTAccount.py b/otp/src/login/LoginTTAccount.py index 466efd80..73de178a 100644 --- a/otp/src/login/LoginTTAccount.py +++ b/otp/src/login/LoginTTAccount.py @@ -3,9 +3,9 @@ from pandac.PandaModules import * from direct.distributed.MsgTypes import * from direct.directnotify import DirectNotifyGlobal -import LoginBase -import TTAccount -from TTAccount import TTAccountException +from . import LoginBase +from . import TTAccount +from .TTAccount import TTAccountException from direct.distributed.PyDatagram import PyDatagram @@ -143,7 +143,7 @@ def authenticateParentPassword(self, loginName, # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) @@ -163,7 +163,7 @@ def authenticateParentPassword(self, loginName, # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) @@ -193,7 +193,7 @@ def authenticateDelete(self, loginName, password): # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) diff --git a/otp/src/login/LoginTTSpecificDevAccount.py b/otp/src/login/LoginTTSpecificDevAccount.py index a5938243..2e9c1e0c 100644 --- a/otp/src/login/LoginTTSpecificDevAccount.py +++ b/otp/src/login/LoginTTSpecificDevAccount.py @@ -3,9 +3,9 @@ from pandac.PandaModules import * from direct.distributed.MsgTypes import * from direct.directnotify import DirectNotifyGlobal -import LoginTTAccount +from . import LoginTTAccount from direct.distributed.PyDatagram import PyDatagram -from TTAccount import TTAccountException +from .TTAccount import TTAccountException class LoginTTSpecificDevAccount(LoginTTAccount.LoginTTAccount): """This is a login that is meant to work only on a developer's local setup. diff --git a/otp/src/login/LoginWebPlayTokenAccount.py b/otp/src/login/LoginWebPlayTokenAccount.py index 759ed9e1..82755cc7 100644 --- a/otp/src/login/LoginWebPlayTokenAccount.py +++ b/otp/src/login/LoginWebPlayTokenAccount.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import LoginTTAccount +from . import LoginTTAccount class LoginWebPlayTokenAccount(LoginTTAccount.LoginTTAccount): @@ -52,7 +52,7 @@ def getAccountData(self, loginName, password): pass def getErrorCode(self): - if not self.has_key("response"): + if "response" not in self: return 0 return self.response.getInt('errorCode', 0) diff --git a/otp/src/login/PrivacyPolicyPanel.py b/otp/src/login/PrivacyPolicyPanel.py index 5c369678..93f46bc2 100644 --- a/otp/src/login/PrivacyPolicyPanel.py +++ b/otp/src/login/PrivacyPolicyPanel.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from otp.otpbase.OTPGlobals import * from direct.gui.DirectGui import * -from MultiPageTextFrame import * +from .MultiPageTextFrame import * from direct.directnotify import DirectNotifyGlobal from otp.otpbase import OTPLocalizer from otp.otpgui import OTPDialog diff --git a/otp/src/login/RemoteValueSet.py b/otp/src/login/RemoteValueSet.py index d350d196..02ab3b37 100644 --- a/otp/src/login/RemoteValueSet.py +++ b/otp/src/login/RemoteValueSet.py @@ -1,8 +1,8 @@ """RemoteValueSet.py: contains the RemoteValueSet class""" from direct.directnotify import DirectNotifyGlobal -import TTAccount -import HTTPUtil +from . import TTAccount +from . import HTTPUtil class RemoteValueSet: """ @@ -55,7 +55,7 @@ def __init__(self, url, http, body='', # '1' means only make one split (the first one, from the left) try: name, value = line.split('=', 1) - except ValueError, e: + except ValueError as e: errMsg = 'unexpected response: %s' % response self.notify.warning(errMsg) onUnexpectedResponse(errMsg) @@ -72,7 +72,7 @@ def __init__(self, url, http, body='', # make sure we got all of the expected fields for name in expectedFields: - if not self.dict.has_key(name): + if name not in self.dict: errMsg = "missing expected field '%s'" % name self.notify.warning(errMsg) onUnexpectedResponse(errMsg) @@ -82,7 +82,7 @@ def __repr__(self): return "RemoteValueSet:%s" % str(self.dict) def hasKey(self, key): - return self.dict.has_key(key) + return key in self.dict # accessors # If 'name' is not found, and you provide a 'default' value, diff --git a/otp/src/login/SecretFriendsInfoPanel.py b/otp/src/login/SecretFriendsInfoPanel.py index af78fd28..87f63f23 100644 --- a/otp/src/login/SecretFriendsInfoPanel.py +++ b/otp/src/login/SecretFriendsInfoPanel.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from otp.otpbase.OTPGlobals import * from direct.gui.DirectGui import * -from MultiPageTextFrame import * +from .MultiPageTextFrame import * from otp.otpbase import OTPLocalizer from otp.otpgui import OTPDialog diff --git a/otp/src/login/TTAccount.py b/otp/src/login/TTAccount.py index 6cf416fa..b469f6f1 100644 --- a/otp/src/login/TTAccount.py +++ b/otp/src/login/TTAccount.py @@ -5,22 +5,22 @@ from direct.directnotify import DirectNotifyGlobal from direct.showbase import PythonUtil from otp.otpbase import OTPLocalizer -import HTTPUtil -import RemoteValueSet +from . import HTTPUtil +from . import RemoteValueSet import copy accountServer = '' accountServer = launcher.getAccountServer() -print "TTAccount: accountServer from launcher: ", (accountServer) +print("TTAccount: accountServer from launcher: ", (accountServer)) configAccountServer = base.config.GetString('account-server', '') if configAccountServer: accountServer = configAccountServer - print "TTAccount: overriding accountServer from config: ", (accountServer) + print("TTAccount: overriding accountServer from config: ", (accountServer)) if not accountServer: accountServer = "https://toontown.go.com" - print "TTAccount: default accountServer: ", (accountServer) + print("TTAccount: default accountServer: ", (accountServer)) accountServer = URLSpec(accountServer, 1) @@ -113,7 +113,7 @@ def authenticateParentPassword(self, loginName, # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) @@ -151,7 +151,7 @@ def authenticateDelete(self, loginName, password): # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) @@ -186,7 +186,7 @@ def enableSecretFriends(self, loginName, password, # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) @@ -261,8 +261,8 @@ def getAccountData(self, loginName, password): # rename some fields dict = self.accountData.dict - for fieldName in dict.keys(): - if fieldNameMap.has_key(fieldName): + for fieldName in list(dict.keys()): + if fieldName in fieldNameMap: dict[fieldNameMap[fieldName]] = dict[fieldName] del dict[fieldName] @@ -344,7 +344,7 @@ def talk(self, operation, data={}): self.notify.debug("TTAccount.talk()") # ensure that data contains nothing but strings - for key in data.keys(): + for key in list(data.keys()): data[key] = str(data[key]) # assert that 'data' contains all the required data @@ -354,33 +354,33 @@ def talk(self, operation, data={}): 'authenticateParentPasswordNewStyle', 'authenticateDeleteNewStyle'): assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password')) elif operation == 'authenticateParentUsernameAndPassword': assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'parentUsername', 'parentPasswordNewStyle', 'userid')) elif operation == 'forgotPassword': - assert data.has_key('accountName') or data.has_key('email') + assert 'accountName' in data or 'email' in data elif operation == 'setParentPassword': assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password', 'parentPassword',)) elif operation == 'setSecretChat': assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password', 'chat',)) elif operation == 'create': assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password', #'dobYear', @@ -391,14 +391,14 @@ def talk(self, operation, data={}): )) elif operation == 'purchase': # is this a password change or a purchase op? - if data.has_key('newPassword'): + if 'newPassword' in data: assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password')) else: assert PythonUtil.contains( - data.keys(), + list(data.keys()), ('accountName', 'password', 'email', @@ -449,7 +449,7 @@ def talk(self, operation, data={}): url.setPath('/%s.php' % (op2Php[operation])) body = '' - if data.has_key('accountName'): + if 'accountName' in data: if operation not in newWebOperations: # name is put on url for documentation only url.setQuery('n=%s' % (URLSpec.quote(data['accountName']))) @@ -489,8 +489,8 @@ def talk(self, operation, data={}): # populate a map of serverField:value pairs so that we # can add the fields in alphabetical order outBoundFields = {} - for fieldName in data.keys(): - if not serverFields.has_key(fieldName): + for fieldName in list(data.keys()): + if fieldName not in serverFields: if not fieldName in ignoredFields: # unknown field name self.notify.error( @@ -499,7 +499,7 @@ def talk(self, operation, data={}): outBoundFields[serverFields[fieldName]] = data[fieldName] # add the fields to the body in alphabetical order - orderedFields = outBoundFields.keys() + orderedFields = list(outBoundFields.keys()) orderedFields.sort() for fieldName in orderedFields: if len(body): @@ -606,7 +606,7 @@ def authenticateParentUsernameAndPassword(self, loginName, # some other error, pass it back return (0, errorMsg) - except TTAccountException, e: + except TTAccountException as e: # connection error, bad response, etc. # pass it back return (0, str(e)) diff --git a/otp/src/movement/ImpFriction.py b/otp/src/movement/ImpFriction.py index 51e1f885..862e0531 100644 --- a/otp/src/movement/ImpFriction.py +++ b/otp/src/movement/ImpFriction.py @@ -1,5 +1,5 @@ from pandac.PandaModules import * -import Impulse +from . import Impulse class ImpFriction(Impulse.Impulse): """friction impulse""" diff --git a/otp/src/movement/Mover.py b/otp/src/movement/Mover.py index ec546c83..739b0a43 100644 --- a/otp/src/movement/Mover.py +++ b/otp/src/movement/Mover.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * -from libotp import CMover +from panda3d.otp import CMover from direct.directnotify import DirectNotifyGlobal from otp.movement.PyVec3 import PyVec3 from direct.showbase import PythonUtil -import __builtin__ +import builtins class Mover(CMover): @@ -18,7 +18,7 @@ class Mover(CMover): PSCCpp = 'App:Show code:moveObjects:MoverC++' PSCPy = 'App:Show code:moveObjects:MoverPy' PSCInt = 'App:Show code:moveObjects:MoverIntegrate' - + def __init__(self, objNodePath, fwdSpeed=1, rotSpeed=1): """objNodePath: nodepath to be moved""" CMover.__init__(self, objNodePath, fwdSpeed, rotSpeed) @@ -38,7 +38,7 @@ def __init__(self, objNodePath, fwdSpeed=1, rotSpeed=1): self.pscInt = PStatCollector(Mover.PSCInt) def destroy(self): - for name, impulse in self.impulses.items(): + for name, impulse in list(self.impulses.items()): Mover.notify.debug('removing impulse: %s' % name) self.removeImpulse(name) @@ -72,11 +72,11 @@ def move(self, dt=-1, profile=0): if Mover.Profile and (not profile): # profile def func(doMove=self.move): - for i in xrange(10000): + for i in range(10000): doMove(dt, profile=1) - __builtin__.func = func + builtins.func = func PythonUtil.startProfile(cmd='func()', filename='profile', sorts=['cumulative'], callInfo=0) - del __builtin__.func + del builtins.func return if Mover.Pstats: @@ -90,7 +90,7 @@ def func(doMove=self.move): self.pscPy.start() # now do Python impulses - for impulse in self.impulses.values(): + for impulse in list(self.impulses.values()): impulse._process(self.getDt()) if Mover.Pstats: diff --git a/otp/src/movement/MoverGroup.py b/otp/src/movement/MoverGroup.py index 2c4e6ffe..55075404 100644 --- a/otp/src/movement/MoverGroup.py +++ b/otp/src/movement/MoverGroup.py @@ -25,7 +25,7 @@ def add(self, name, mover): self._name2pyMovers[name] = mover def remove(self, name): self.removeCMover(name) - if (self._name2pyMovers.has_key(name)): + if (name in self._name2pyMovers): del self._name2pyMovers[name] def move(self, dt=-1): @@ -36,8 +36,8 @@ def move(self, dt=-1): # process all the Py impulses first if Mover.Pstats: self.pscPy.start() - for mover in self._name2pyMovers.values(): - for impulse in mover.impulses.values(): + for mover in list(self._name2pyMovers.values()): + for impulse in list(mover.impulses.values()): impulse._process(dt) if Mover.Pstats: self.pscPy.stop() @@ -50,6 +50,6 @@ def move(self, dt=-1): self.pscCppInt.stop() def broadcastPositionUpdates(self): - for mover in self._name2pyMovers.itervalues(): + for mover in self._name2pyMovers.values(): mover._posHprBroadcast() diff --git a/otp/src/movement/ProfVec.py b/otp/src/movement/ProfVec.py index 6c562129..2f16d271 100644 --- a/otp/src/movement/ProfVec.py +++ b/otp/src/movement/ProfVec.py @@ -32,35 +32,35 @@ def __init__(self, x, y, z): Reps = 100000 def nullLoop(n=Reps): - for i in xrange(n): + for i in range(n): pass def createNullClass(n=Reps): - for i in xrange(n): + for i in range(n): v = NullClass() def createSimpleClass(n=Reps): - for i in xrange(n): + for i in range(n): v = SimpleClass(1,2,3) def createArgsClass(n=Reps): - for i in xrange(n): + for i in range(n): v = ArgsClass(1,2,3) def createDerivedClass(n=Reps): - for i in xrange(n): + for i in range(n): v = DerivedClass(1,2,3) def createComplexClass(n=Reps): - for i in xrange(n): + for i in range(n): v = ComplexClass(1,2,3) def createFFIClass(n=Reps): - for i in xrange(n): + for i in range(n): v = FFIClass(1,2,3) def createPyVec3(n=Reps): - for i in xrange(n): + for i in range(n): v = PyVec3(1,2,3) def createVec3Direct(n=Reps): - for i in xrange(n): + for i in range(n): v = Vec3(None) v._Vec3__overloaded_constructor_float_float_float(1,2,3) def createVec3(n=Reps): - for i in xrange(n): + for i in range(n): v = Vec3(1,2,3) def doProfile(cmd, filename): diff --git a/otp/src/movement/PyVec3.py b/otp/src/movement/PyVec3.py index 9f3394a9..13d77f2f 100644 --- a/otp/src/movement/PyVec3.py +++ b/otp/src/movement/PyVec3.py @@ -8,7 +8,7 @@ class PyVec3: # interface is mostly patterned after Panda Vec3 Epsilon = .0001 - ScalarTypes = (types.FloatType, types.IntType, types.LongType) + ScalarTypes = (float, int, int) def __init__(self, *args): self.assign(*args) diff --git a/otp/src/namepanel/NameCheck.py b/otp/src/namepanel/NameCheck.py index 94fd8472..0b70a490 100644 --- a/otp/src/namepanel/NameCheck.py +++ b/otp/src/namepanel/NameCheck.py @@ -254,7 +254,7 @@ def allCaps(name): TextEncoder.upper( TextEncoder().encodeWtext(letters))) # some unicode characters can't be capitalized - for i in xrange(len(upperLetters)): + for i in range(len(upperLetters)): if not upperLetters[0].isupper(): # at least one letter is not upper-case # name is not all-caps @@ -280,11 +280,11 @@ def checkJapanese(name): # but, allows not ASCII and kanji(CJK) characters for a name # All Japanese characters are three-byte-encoded utf-8 characters from unicode # Reference: http://unicode.org/charts/ - asciiSpace = range(0x20, 0x21) - asciiDigits = range(0x30, 0x40) - hiragana = range(0x3041, 0x30A0) - katakana = range(0x30A1, 0x3100) - halfwidthKatakana = range(0xFF65, 0xFFA0) + asciiSpace = list(range(0x20, 0x21)) + asciiDigits = list(range(0x30, 0x40)) + hiragana = list(range(0x3041, 0x30A0)) + katakana = list(range(0x30A1, 0x3100)) + halfwidthKatakana = list(range(0xFF65, 0xFFA0)) halfwidthCharacter = set(asciiSpace + halfwidthKatakana) allowedUtf8 = set(asciiSpace + hiragana + katakana + halfwidthKatakana) te = TextEncoder() @@ -299,7 +299,7 @@ def checkJapanese(name): return OTPLocalizer.NCNoDigits else: notify.info('name contains not allowed utf8 char: 0x%04x' % char) - return OTPLocalizer.NCBadCharacter % te.encodeWtext(unichr(char)) + return OTPLocalizer.NCBadCharacter % te.encodeWtext(chr(char)) else: # Restrict the number of characters, if three-byte-encoded utf-8 character # The full-width characters would fit into a single display cell, @@ -373,7 +373,7 @@ def repeatedChars(name): nName = name[:] bName.reverse() problem = check(bName) - print "problem = %s" % (problem) + print("problem = %s" % (problem)) if problem: return problem @@ -392,11 +392,11 @@ def repeatedChars(name): # empty name assert checkName('') assert checkName('\t') -assert checkName(TextEncoder().encodeWtext(u'\xa0')) -assert checkName(TextEncoder().encodeWtext(u'\u1680')) -assert checkName(TextEncoder().encodeWtext(u'\u2001')) +assert checkName(TextEncoder().encodeWtext('\xa0')) +assert checkName(TextEncoder().encodeWtext('\u1680')) +assert checkName(TextEncoder().encodeWtext('\u2001')) # printable chars -for i in xrange(32): +for i in range(32): assert checkName(chr(i)) assert checkName(chr(0x7f)) # bad characters @@ -412,7 +412,7 @@ def repeatedChars(name): # mono letter assert checkName('Eeee') assert checkName('Jjj') -assert checkName(TextEncoder().encodeWtext(u'\u30a1\u30a1\u30a1')) +assert checkName(TextEncoder().encodeWtext('\u30a1\u30a1\u30a1')) # dashes assert checkName('-Conqueror') assert checkName('Conqueror-') diff --git a/otp/src/namepanel/PickANamePattern.py b/otp/src/namepanel/PickANamePattern.py index 7f21d63b..edc7d0f7 100644 --- a/otp/src/namepanel/PickANamePattern.py +++ b/otp/src/namepanel/PickANamePattern.py @@ -14,10 +14,10 @@ def getNameString(self, pattern, gender): nameParts = self._getNameParts(gender) # convert from string->index to index->string invNameParts = [] - for i in xrange(len(nameParts)): + for i in range(len(nameParts)): invNameParts.append(invertDict(nameParts[i])) name = '' - for i in xrange(len(pattern)): + for i in range(len(pattern)): if pattern[i] != -1: if len(name): name += ' ' @@ -134,9 +134,9 @@ def _compute(self, nameStr, gender): combinedIndex2indices = {} lastNamePrefixesCapped = set(self._getLastNameCapPrefixes()) k = 0 - for first, i in nameParts[-2].iteritems(): + for first, i in nameParts[-2].items(): capitalize = first in lastNamePrefixesCapped - for second, j in nameParts[-1].iteritems(): + for second, j in nameParts[-1].items(): combinedLastName = first # capitalize the last name suffix if appropriate (Mc, Mac, etc.) if capitalize: diff --git a/otp/src/navigation/APSPSlave.py b/otp/src/navigation/APSPSlave.py index 7aaf752a..5e2d9ee8 100644 --- a/otp/src/navigation/APSPSlave.py +++ b/otp/src/navigation/APSPSlave.py @@ -1,4 +1,4 @@ -import cPickle as pickle +import pickle as pickle from otp.navigation.NavMesh import NavMesh import sys diff --git a/otp/src/navigation/AreaMapper.py b/otp/src/navigation/AreaMapper.py index 92c40606..4bce022f 100644 --- a/otp/src/navigation/AreaMapper.py +++ b/otp/src/navigation/AreaMapper.py @@ -190,11 +190,11 @@ def _explore(self,p): def _exploreFrontier(self): if len(self.frontierSquaresQueue) == 0: - assert len(self.frontierSquares.keys()) == 0 + assert len(list(self.frontierSquares.keys())) == 0 return 0 else: qlen = len(self.frontierSquaresQueue) - for i in xrange(qlen): + for i in range(qlen): p = self.frontierSquaresQueue.pop(0) del self.frontierSquares[p] self._explore(p) @@ -203,7 +203,7 @@ def _exploreFrontier(self): def runDiscovery(self,maxSquares): - print "Discovering walkable space (this will take 30-60 seconds)..." + print("Discovering walkable space (this will take 30-60 seconds)...") #self._unstashEnvironment() squaresExplored = 1 @@ -437,7 +437,7 @@ def _addOpenSquare(self, gridX1, gridY1, gridX2, gridY2): def _subdivide(self): - print "Growing squares..." + print("Growing squares...") self.vertexCounter = 0 self.polyCounter = 0 diff --git a/otp/src/navigation/NavMesh.py b/otp/src/navigation/NavMesh.py index 1fb79fc4..1d411580 100644 --- a/otp/src/navigation/NavMesh.py +++ b/otp/src/navigation/NavMesh.py @@ -1,10 +1,10 @@ import math import bisect -import cPickle as pickle +import pickle as pickle import string import time import os -import StringIO +import io # File I/O stuff import direct @@ -82,7 +82,7 @@ def visualize(self, parentNodePath, highlightVerts = [], pathVerts = [], visited vertToWriterIndex = {} currIndex = 0 - for v in self.vertexCoords.keys(): + for v in list(self.vertexCoords.keys()): vertToWriterIndex[v] = currIndex x = self.vertexCoords[v][0] y = self.vertexCoords[v][1] @@ -105,14 +105,14 @@ def visualize(self, parentNodePath, highlightVerts = [], pathVerts = [], visited lines = GeomLinestrips(Geom.UHStatic) - for p in self.polyToVerts.keys(): + for p in list(self.polyToVerts.keys()): for v in self.polyToVerts[p]: lines.addVertex(vertToWriterIndex[v]) lines.addVertex(vertToWriterIndex[self.polyToVerts[p][0]]) lines.closePrimitive() if len(pathVerts) > 0: - for i in xrange(len(pathVerts)): + for i in range(len(pathVerts)): lines.addVertex(pathOffsetIntoIndex+i) lines.closePrimitive() @@ -129,8 +129,8 @@ def visualize(self, parentNodePath, highlightVerts = [], pathVerts = [], visited def _discoverInitialConnectivity(self): - print "Building initial connectivity graph..." - for pId in self.polyToVerts.keys(): + print("Building initial connectivity graph...") + for pId in list(self.polyToVerts.keys()): verts = self.polyToVerts[pId] numVerts = len(verts) @@ -140,7 +140,7 @@ def _discoverInitialConnectivity(self): for v in verts: candidates += [p for p in self.vertToPolys[v] if (p not in candidates) and (p != pId)] - for vNum in xrange(numVerts): + for vNum in range(numVerts): neighbor = [p for p in candidates if ((verts[vNum] in self.polyToVerts[p]) and \ (verts[(vNum+1)%numVerts] in self.polyToVerts[p]))] if len(neighbor) == 0: @@ -242,7 +242,7 @@ def _attemptToMergePolys(self, polyA, polyB): neighbor = self.connectionLookup[polyB][locB] newConnections.append(neighbor) if neighbor is not None: - for i in xrange(len(self.connectionLookup[neighbor])): + for i in range(len(self.connectionLookup[neighbor])): if self.connectionLookup[neighbor][i] == polyB: self.connectionLookup[neighbor][i] = polyA @@ -254,7 +254,7 @@ def _attemptToMergePolys(self, polyA, polyB): neighbor = self.connectionLookup[polyB][locB] newConnections.append(neighbor) if neighbor is not None: - for i in xrange(len(self.connectionLookup[neighbor])): + for i in range(len(self.connectionLookup[neighbor])): if self.connectionLookup[neighbor][i] == polyB: self.connectionLookup[neighbor][i] = polyA locB = (locB + 1) % lenB @@ -296,7 +296,7 @@ def _attemptToGrowPoly(self, pId): def _growEachPolyOnce(self): grewAtLeastOne = False - for pId in self.connectionLookup.keys(): + for pId in list(self.connectionLookup.keys()): if self._attemptToGrowPoly(pId): grewAtLeastOne = True @@ -331,7 +331,7 @@ def optimizeMesh(self): biggest = len(self.polyToVerts[p]) biggestPoly = p - print "Most verts in a single poly: ", biggest + print("Most verts in a single poly: ", biggest) assert biggest < 256 @@ -345,7 +345,7 @@ def _cleanPoly(self, polyId): newAngles = [] newNeighbors = [] - for i in xrange(numVerts): + for i in range(numVerts): if (angles[i] != 180) or \ (len(self.vertToPolys.get(verts[i],[])) > 2) or \ (neighbors[i] != neighbors[(i-1)%numVerts]): @@ -367,15 +367,15 @@ def _cleanPoly(self, polyId): def _pruneExtraVerts(self): - print "Pruning extra vertices..." - print "Starting verts: %s" % len(self.vertToPolys) - for polyId in self.connectionLookup.keys(): + print("Pruning extra vertices...") + print("Starting verts: %s" % len(self.vertToPolys)) + for polyId in list(self.connectionLookup.keys()): self._cleanPoly(polyId) - print "Ending verts: %s" % len(self.vertToPolys) + print("Ending verts: %s" % len(self.vertToPolys)) def _compactPolyIds(self): - polyList = self.polyToVerts.keys() + polyList = list(self.polyToVerts.keys()) polyList.sort() oldToNewId = {None:None} @@ -395,7 +395,7 @@ def _compactPolyIds(self): newPolyToVerts[oldToNewId[oldId]] = self.polyToVerts[oldId] newPolyToAngles[oldToNewId[oldId]] = self.polyToAngles[oldId] #self.connections[oldToNewId[oldId]] = [] - for edgeNum in xrange(len(self.connectionLookup[oldId])): + for edgeNum in range(len(self.connectionLookup[oldId])): self.connections[oldToNewId[oldId]].append( oldToNewId[self.connectionLookup[oldId][edgeNum]] ) self.polyToVerts = newPolyToVerts @@ -608,7 +608,7 @@ def _findAllRoutesToGoal(self, goalNode): openQueue.push((nodeToG[neighbor],neighbor)) - for startNode in xrange(len(self.connections)): + for startNode in range(len(self.connections)): departingEdge = walkBack[startNode][0] assert self.pathData[startNode][goalNode] is None @@ -631,7 +631,7 @@ def generatePathData(self,rowRange=None): self.initPathData() - for goalNode in xrange(rowRange[0],rowRange[1]): + for goalNode in range(rowRange[0],rowRange[1]): self._findAllRoutesToGoal(goalNode) @@ -651,11 +651,11 @@ def createPathTable(self): self.pathData = [] # Run-Length Encode the whole thing! - for start in xrange(self.numNodes): + for start in range(self.numNodes): row = [] lastVal = None nodesInRow = 0 - for goal in xrange(self.numNodes): + for goal in range(self.numNodes): val = shortestPathLookup[start][goal] if val != lastVal: row.append([goal,val]) @@ -695,13 +695,13 @@ def printPathData(self): def initPathData(self): self.pathData = [] - for i in xrange(self.numNodes): + for i in range(self.numNodes): self.pathData.append([None,]*self.numNodes) def addPaths(self, partialData): - for i in xrange(len(partialData)): - for j in xrange(len(partialData[i])): + for i in range(len(partialData)): + for j in range(len(partialData[i])): if partialData[i][j] is not None: assert self.pathData[i][j] is None self.pathData[i][j] = partialData[i][j] @@ -854,7 +854,7 @@ def writeToFile(self, filename, storePathTable=True): protocol=2) f.close() - print "Successfully wrote to file %s." % filename + print("Successfully wrote to file %s." % filename) def _initFromString(self, str): @@ -887,7 +887,7 @@ def _initFromFilename(self, filepath, filename): found = vfs.resolveFilename(filename,searchPath) if not found: - raise IOError, "File not found!" + raise IOError("File not found!") str = vfs.readFile(filename,1) diff --git a/otp/src/navigation/NavigationManager.py b/otp/src/navigation/NavigationManager.py index 8936dd03..2c7bdea0 100644 --- a/otp/src/navigation/NavigationManager.py +++ b/otp/src/navigation/NavigationManager.py @@ -1,7 +1,7 @@ import string import md5 import subprocess -import cPickle as pickle +import pickle as pickle import time import os @@ -79,7 +79,7 @@ def _getEnvironmentHash(self, env): node = np.node() if node.getIntoCollideMask() & OTPGlobals.WallBitmask != BitMask32.allOff(): - for i in xrange(node.getNumSolids()): + for i in range(node.getNumSolids()): s = node.getSolid(i) monsterData.append( str(s) ) @@ -154,7 +154,7 @@ def addEnvironment(self, env, performHashCheck=True): assert self.notify.debug("Farming rows out to %s slaves:" % numProcs) - for i in xrange(numProcs): + for i in range(numProcs): if rowsLeft < rowsPerProc*2: assert i == numProcs-1 todo = rowsLeft @@ -225,13 +225,13 @@ def gogogo(): def randomlookups(): import random import time - mesh = simbase.air.navMgr.meshes.values()[0] + mesh = list(simbase.air.navMgr.meshes.values())[0] assert self.notify.debug("Timing lookups...") routeList = [] - for i in xrange(1000000): + for i in range(1000000): routeList.append((random.randint(0,mesh.numNodes-1),random.randint(0,mesh.numNodes-1))) t1 = time.time() @@ -252,15 +252,15 @@ def randomlookups(): def routelookups(): import time - mesh = simbase.nm.meshes.values()[0] + mesh = list(simbase.nm.meshes.values())[0] assert self.notify.debug("Timing lookups...") t1 = time.time() i = 0 - for i in xrange(mesh.numNodes): - for j in xrange(mesh.numNodes): + for i in range(mesh.numNodes): + for j in range(mesh.numNodes): route = mesh.pathTable.findRoute(i,j) t2 = time.time() @@ -277,14 +277,14 @@ def intersectiontest(): s = set() t = set() - for i in xrange(0,2500): + for i in range(0,2500): s.add(i) - for i in xrange(2000,4000): + for i in range(2000,4000): t.add(i) t1 = time.time() - for i in xrange(1000000): + for i in range(1000000): s.intersection(t) t2 = time.time() @@ -300,7 +300,7 @@ def addtest(): t1 = time.time() - for i in xrange(1000000): + for i in range(1000000): s.add(i) t2 = time.time() @@ -312,14 +312,14 @@ def addtest(): def findNodeTest(): import time - mesh = simbase.nm.meshes.values()[0] + mesh = list(simbase.nm.meshes.values())[0] pr = simbase.air.doFind("Port Royal") mesh.makeNodeLocator(pr) t1 = time.time() - for i in xrange(10000): + for i in range(10000): pId = mesh.findNodeFromPos(pr, 0.5, 0.5) t2 = time.time() diff --git a/otp/src/otpbase/OTPBase.py b/otp/src/otpbase/OTPBase.py index 131de9d6..828b42ec 100644 --- a/otp/src/otpbase/OTPBase.py +++ b/otp/src/otpbase/OTPBase.py @@ -4,7 +4,7 @@ from direct.showbase.ShowBase import ShowBase from pandac.PandaModules import Camera, TPLow, VBase4, ColorWriteAttrib, Filename, getModelPath, NodePath -import OTPRender +from . import OTPRender import time import math import re @@ -282,7 +282,7 @@ def __chasePixelZoom(self, task): # Now set the pixel zoom according to the average feet per # second the camera has moved over the past history seconds. - dist = sum(map(lambda pair: pair[1], self.pixelZoomCamMovedList)) + dist = sum([pair[1] for pair in self.pixelZoomCamMovedList]) speed = dist / self.pixelZoomCamHistory if speed < 5: diff --git a/otp/src/otpbase/OTPExceptionVarDump.py b/otp/src/otpbase/OTPExceptionVarDump.py index 7444d20f..b732fc39 100644 --- a/otp/src/otpbase/OTPExceptionVarDump.py +++ b/otp/src/otpbase/OTPExceptionVarDump.py @@ -2,7 +2,7 @@ import base64 def _doPrint(s): - print base64.b64encode(s) + print(base64.b64encode(s)) def install(): # make sure DIRECT print func is installed diff --git a/otp/src/otpbase/OTPGlobals.py b/otp/src/otpbase/OTPGlobals.py index c3f7694f..7966bad3 100644 --- a/otp/src/otpbase/OTPGlobals.py +++ b/otp/src/otpbase/OTPGlobals.py @@ -227,8 +227,8 @@ def setFancyFont(path): def getNametagFont(index): global NametagFonts - if ((not NametagFonts.has_key(index) )or NametagFonts[index] == None): - if (not NametagFontPaths.has_key(index) ) or (NametagFontPaths[index] == None): + if ((index not in NametagFonts )or NametagFonts[index] == None): + if (index not in NametagFontPaths ) or (NametagFontPaths[index] == None): InterfaceFont = TextNode.getDefaultFont() NametagFonts[index] = TextNode.getDefaultFont() else: diff --git a/otp/src/otpbase/OTPLocalizer.py b/otp/src/otpbase/OTPLocalizer.py index 36a85456..ba16eca9 100644 --- a/otp/src/otpbase/OTPLocalizer.py +++ b/otp/src/otpbase/OTPLocalizer.py @@ -7,7 +7,7 @@ # Do not import panda modules because it is not downloaded until Phase 3 # This file is in phase 2 -from pandac.libpandaexpressModules import * +from pandac.PandaModules import * import string import types @@ -25,15 +25,15 @@ # Ask what language we are running in. Returns a string. def getLanguage(): return language - -print ("OTPLocalizer: Running in language: %s" % (language)) + +print(("OTPLocalizer: Running in language: %s" % (language))) if language == "english": - _languageModule = "otp.otpbase.OTPLocalizer" + string.capitalize(language) + _languageModule = "otp.otpbase.OTPLocalizer" + language.capitalize() else: checkLanguage = 1 _languageModule = "otp.otpbase.OTPLocalizer_" + language -print("from " + _languageModule + " import *") +print(("from " + _languageModule + " import *")) exec("from " + _languageModule + " import *") if checkLanguage: @@ -41,26 +41,26 @@ def getLanguage(): g = {} englishModule = __import__("otp.otpbase.OTPLocalizerEnglish", g, l) foreignModule = __import__(_languageModule, g, l) - for key, val in englishModule.__dict__.items(): - if not foreignModule.__dict__.has_key(key): - print ("WARNING: Foreign module: %s missing key: %s" % (_languageModule, key)) + for key, val in list(englishModule.__dict__.items()): + if key not in foreignModule.__dict__: + print(("WARNING: Foreign module: %s missing key: %s" % (_languageModule, key))) # Add the english version to our local namespace so we do not crash locals()[key] = val else: # The key is in both files, but if it is a dictionary we # should go one step further and make sure the individual # elements also match. - if isinstance(val, types.DictType): + if isinstance(val, dict): fval = foreignModule.__dict__.get(key) - for dkey, dval in val.items(): - if not fval.has_key(dkey): - print ("WARNING: Foreign module: %s missing key: %s.%s" % (_languageModule, key, dkey)) + for dkey, dval in list(val.items()): + if dkey not in fval: + print(("WARNING: Foreign module: %s missing key: %s.%s" % (_languageModule, key, dkey))) fval[dkey] = dval - for dkey in fval.keys(): - if not val.has_key(dkey): - print ("WARNING: Foreign module: %s extra key: %s.%s" % (_languageModule, key, dkey)) - - - for key in foreignModule.__dict__.keys(): - if not englishModule.__dict__.has_key(key): - print ("WARNING: Foreign module: %s extra key: %s" % (_languageModule, key)) + for dkey in list(fval.keys()): + if dkey not in val: + print(("WARNING: Foreign module: %s extra key: %s.%s" % (_languageModule, key, dkey))) + + + for key in list(foreignModule.__dict__.keys()): + if key not in englishModule.__dict__: + print(("WARNING: Foreign module: %s extra key: %s" % (_languageModule, key))) diff --git a/otp/src/otpbase/OTPLocalizerEnglish.py b/otp/src/otpbase/OTPLocalizerEnglish.py index 5908630d..bcd1109e 100644 --- a/otp/src/otpbase/OTPLocalizerEnglish.py +++ b/otp/src/otpbase/OTPLocalizerEnglish.py @@ -33,7 +33,7 @@ # DistributedAvatar.py WhisperNoLongerFriend = "%s left your friends list." -WhisperNowSpecialFriend = "%s is now your True Friend!" +WhisperNowSpecialFriend = "%s is now your secret friend!" WhisperComingToVisit = "%s is coming to visit you." WhisperFailedVisit = "%s tried to visit you." WhisperTargetLeftVisit = "%s has gone somewhere else. Try again!" @@ -42,13 +42,6 @@ TeleportGreeting = "Hi, %s." WhisperFriendComingOnline = "%s is coming online!" WhisperFriendLoggedOut = "%s has logged out." -WhisperPlayerOnline = "%s logged into %s" -WhisperPlayerOffline = "%s is offline." -WhisperUnavailable = "That player is no longer available for whispers." - -DialogSpecial = "ooo" -DialogExclamation = "!" -DialogQuestion = "?" # ChatInputNormal.py ChatInputNormalSayIt = "Say It" @@ -61,53 +54,46 @@ SCEmoteNoAccessOK = lOK ParentLogin = "Parent Login" -ParentPassword = "Parent Account Password" +ParentPassword = "Parent Password" # ChatGarbler.py ChatGarblerDefault = ["blah"] # ChatManager.py -ChatManagerChat = "Chat" -ChatManagerWhisperTo = "Whisper to:" -ChatManagerWhisperToName = "Whisper To:\n%s" +ChatManagerChat = 'Chat' +ChatManagerWhisperTo = 'Whisper to:' +ChatManagerWhisperToName = 'Whisper To:\n%s' ChatManagerCancel = lCancel -ChatManagerWhisperOffline = "%s is offline." -OpenChatWarning = 'To become True Friends with somebody, click on them, and select "True Friends" from the detail panel.\n\nSpeedChat Plus can also be enabled, which allow users to chat by typing words found in the Disney SpeedChat Plus dictionary.\n\nTo activate these features or to learn more, exit Toontown and then click on Membership and select Manage Account. Log in to edit your "Community Settings."\n\nIf you are under 18, you need a Parent Account to manage these settings.' +ChatManagerWhisperOffline = '%s is offline.' +OpenChatWarning = 'You don\'t have any "Secret Friends" yet! You cannot chat with other Toons unless they are your Secret Friends.\n\nTo become Secret Friends with somebody, click on them, and select "Secrets" from the detail panel. Of course, you can always talk to anybody with SpeedChat.' OpenChatWarningOK = lOK UnpaidChatWarning = 'Once you have subscribed, you can use this button to chat with your friends using the keyboard. Until then, you should chat with other Toons using SpeedChat.' -UnpaidChatWarningPay = "Subscribe" -UnpaidChatWarningContinue = "Continue Free Trial" -PaidNoParentPasswordWarning = 'Use this button to chat with your friends by using the keyboard, enable it through your Account Manager on the Toontown Web site. Until then, you can chat by using SpeedChat.' -UnpaidNoParentPasswordWarning = 'This is for SpeedChat Plus, which allows users to chat by typing words found in the Disney SpeedChat Plus dictionary. To activate this feature, exit Toontown and click on Membership. Select Manage Account and log in to edit your "Community Settings." If you are under 18, you need a Parent Account to manage these settings.' -PaidNoParentPasswordWarningSet = "Set Your Community Settings Now!" -PaidNoParentPasswordWarningContinue = "Continue Playing Game" +UnpaidChatWarningPay = 'Subscribe Now!' +UnpaidChatWarningContinue = 'Continue Free Trial' +PaidNoParentPasswordWarning = 'Once you have set your parent password, you can enable this button to chat with your friends using the keyboard. Until then, you should chat with other Toons using SpeedChat.' +PaidNoParentPasswordWarningSet = 'Set Parent Password Now!' +PaidNoParentPasswordWarningContinue = 'Continue Playing Game' PaidParentPasswordUKWarning = 'Once you have Enabled Chat, you can enable this button to chat with your friends using the keyboard. Until then, you should chat with other Toons using SpeedChat.' -PaidParentPasswordUKWarningSet = "Enable Chat Now!" -PaidParentPasswordUKWarningContinue = "Continue Playing Game" -NoSecretChatWarningTitle = "Parental Controls" -NoSecretChatWarning = 'To chat with a friend, the True Friends feature must first be enabled. Kids, have your parent visit the Toontown Web site to learn about True Friends.' -RestrictedSecretChatWarning = 'To get or enter a True Friend Code, log in with the Parent Account. You can disable this prompt by changing your True Friends options.' +PaidParentPasswordUKWarningSet = 'Enable Chat Now!' +PaidParentPasswordUKWarningContinue = 'Continue Playing Game' +NoSecretChatWarningTitle = 'Parental Controls' +NoSecretChatWarning = 'To chat with a friend, the Secret Friends feature must first be enabled. Kids, have your parent log in with their Parent Password to learn about Secret Friends.' +RestrictedSecretChatWarning = 'To get or enter a secret, you must enter the Parent Password. You can disable this prompt by changing your Secret Friends options.' NoSecretChatWarningOK = lOK NoSecretChatWarningCancel = lCancel -NoSecretChatWarningWrongPassword = 'That\'s not the correct Parent Account. Please log in with the Parent Account that is linked to this account.' -NoSecretChatAtAllTitle = "Open Chat With True Friends" -# not sure what this should do in the new world order -NoSecretChatAtAll = 'Open Chat with True Friends allows real-life friends to chat openly with each other by means of a True Friend Code that must be shared outside of the game.\n\nTo activate these features or to learn more, exit Toontown and then click on Membership and select Manage Account. Log in to edit your "Community Settings." If you are under 18, you need a Parent Account to manage these settings.' -NoSecretChatAtAllAndNoWhitelistTitle = "Chat button" +NoSecretChatWarningWrongPassword = "That's not the correct password. Please enter the Parent Password created when purchasing this account. This is not the same password used to play the game." +NoSecretChatAtAllTitle = 'Secret Friends Chat' # not sure what this should do in the new world order -NoSecretChatAtAllAndNoWhitelist = 'You can use the blue Chat button to communicate with other Toons by using Speechat Plus or Open Chat with True Friends.\n\nSpeedchat Plus is a form of type chat that allows users to communicate by using the Disney SpeedChat Plus dictionary.\n\nOpen Chat with True Friends allows real-life friends to chat openly with each other by means of a True Friend Code that must be shared outside of the game.\n\nTo activate these features or to learn more, exit Toontown and then click on Membership and select Manage Account. Log in to edit your "Community Settings." If you are under 18, you need a Parent Account to manage these settings.' +NoSecretChatAtAll = 'To chat with a friend, the Secret Friends feature must first be enabled. Secret Friends allows one member to chat with another member only by means of a secret code that must be communicated outside of the game.\n\nTo activate this feature or to learn more about it, exit Toontown and then click on "Account Options" on the Toontown web page.' NoSecretChatAtAllOK = lOK -ChangeSecretFriendsOptions = "Change True Friends Options" -ChangeSecretFriendsOptionsWarning = '\nPlease enter the Parent Account Password to change your True Friends options.' -ActivateChatTitle = "True Friends Options" +ChangeSecretFriendsOptions = 'Change Secret Friends Options' +ChangeSecretFriendsOptionsWarning = "\nPlease enter the Parent Password to change your Secret Friends options." +ActivateChatTitle = "Secret Friends Options" WhisperToFormat = "To %s %s" WhisperToFormatName = "To %s" WhisperFromFormatName = "%s whispers" -ThoughtOtherFormatName = "%s thinks" -ThoughtSelfFormatName = "You think" - from pandac.PandaModules import TextProperties from pandac.PandaModules import TextPropertiesManager @@ -120,111 +106,42 @@ red.setTextColor(1,0,0,1) TextPropertiesManager.getGlobalPtr().setProperties('red', red) -green = TextProperties() -green.setTextColor(0,1,0,1) -TextPropertiesManager.getGlobalPtr().setProperties('green', green) - -yellow = TextProperties() -yellow.setTextColor(1,1,0,1) -TextPropertiesManager.getGlobalPtr().setProperties('yellow', yellow) - -midgreen = TextProperties() -midgreen.setTextColor(0.2,1,0.2,1) -TextPropertiesManager.getGlobalPtr().setProperties('midgreen', midgreen) - -blue = TextProperties() -blue.setTextColor(0,0,1,1) -TextPropertiesManager.getGlobalPtr().setProperties('blue', blue) - -white = TextProperties() -white.setTextColor(1,1,1,1) -TextPropertiesManager.getGlobalPtr().setProperties('white', white) - -black = TextProperties() -black.setTextColor(0,0,0,1) -TextPropertiesManager.getGlobalPtr().setProperties('black', black) +ActivateChat = """Secret Friends allows one member to chat with another member only by means of a secret Code that must be communicated outside of the game. Secret Friends is not moderated or supervised. -grey = TextProperties() -grey.setTextColor(0.5, 0.5, 0.5, 1) -TextPropertiesManager.getGlobalPtr().setProperties('grey', grey) +Please choose one of Toontown's Secret Friends options: -ActivateChat = """True Friends allows one member to chat with another member only by means of a True Friend Code that must be communicated outside of the game. True Friends is not moderated or supervised. - -Please choose one of Toontown's True Friends options: - - \1shadow\1No True Friends\2 - Ability to make True Friends is disabled. + \1shadow\1No Secret Friends\2 - Ability to make Secret Friends is disabled. This offers the highest level of control. - \1shadow\1Restricted True Friends\2 - Requires the Parent Account Password to make - each new True Friend. + \1shadow\1Restricted Secret Friends\2 - Requires the Parent Password to make + each new Secret Friend. - \1shadow\1Unrestricted True Friends\2 - Once enabled with the Parent Account Password, - it is not required to supply the Parent Account Password to make each new - True Friend. \1red\1This option is not recommended for children under 13.\2 + \1shadow\1Unrestricted Secret Friends\2 - Once enabled with the Parent Password, + it is not required to supply the Parent Password to make each new + Secret Friend. \1red\1This option is not recommended for children under 13.\2 -By enabling the True Friends feature, you acknowledge that there are some risks inherent in the True Friends feature and that you have been informed of, and agree to accept, any such risks.""" +By enabling the Secret Friends feature, you acknowledge that there are some risks inherent in the Secret Friends feature and that you have been informed of, and agree to accept, any such risks.""" ActivateChatYes = "Update" ActivateChatNo = lCancel ActivateChatMoreInfo = "More Info" -ActivateChatPrivacyPolicy = "Privacy Policy" - -ActivateChatPrivacyPolicy_Button1A = "Version 1" -ActivateChatPrivacyPolicy_Button1K = "Version 1" -ActivateChatPrivacyPolicy_Button2A = "Version 2" -ActivateChatPrivacyPolicy_Button2K = "Version 2" - -PrivacyPolicyText_1A = [""" """] -PrivacyPolicyText_1K = [""" """] -PrivacyPolicyText_2A = [""" """] -PrivacyPolicyText_2K = [""" """] -PrivacyPolicyText_Intro = [""" """] -PrivacyPolicyClose = lClose # SecretFriendsInfoPanel.py SecretFriendsInfoPanelOk = lOK SecretFriendsInfoPanelClose = lClose -SecretFriendsInfoPanelText = [""" -The Open Chat with True Friends Feature - -The Open Chat with True Friends feature enables a member to chat directly with another member within Disney's Toontown Online (the "Service") once the members establish a True Friends connection. When your child attempts to use the Open Chat with True Friends feature, we will require that you indicate your consent to your child's use of this feature by entering your Parent Account Password. Here is a detailed description of the process of creating an Open Chat with True Friends connection between members whom we will call "Sally" and "Mike." -1. Sally's parent and Mike's parent each enable the Open Chat with True Friends feature by entering their respective Parent Account Passwords either (a) in the Account Options areas within the Service, or (b) when prompted within the game by a Parental Controls pop-up. -2. Sally requests a True Friend Code (described below) from within the Service. -""",""" -3. Sally's True Friend Code is communicated to Mike outside of the Service. (Sally's True Friend Code may be communicated to Mike either directly by Sally, or indirectly through Sally's disclosure of the True Friend Code to another person.) -4. Mike submits Sally's True Friend Code to the Service within 48 hours of the time that Sally requested the True Friend Code from the Service. -5. The Service then notifies Mike that Sally has become Mike's True Friend. The Service similarly notifies Sally that Mike has become Sally's True Friend. -6. Sally and Mike can now open chat directly with each other until either one chooses to terminate the other as a True Friend, or until the Open Chat with True Friends feature is disabled for either Sally or Mike by their respective parent. The True Friends connection can thus be disabled anytime by either: (a) a member removing the True Friend from his or her friends list (as described in the Service); or, (b) the parent of that member disabling the Open Chat with """,""" -True Friends feature by going to the Account Options area within the Service and following the steps set forth there. - -A True Friend Code is a computer-generated random code assigned to a particular member. The True Friend Code must be used to activate a True Friend connection within 48 hours of the time that the member requests the True Friend Code; otherwise, the True Friend Code expires and cannot be used. Moreover, a single True Friend Code can only be used to establish one True Friend connection. To make additional True Friend connections, a member must request an additional True Friend Code for each additional True Friend. - -True Friendships do not transfer. For example, if Sally becomes a True Friend of Mike, and Mike becomes a True Friend of Jessica, Sally does not automatically become Jessica's True Friend. In order for Sally and Jessica to -""",""" -become True Friends, one of them must request a new True Friend Code from the Service and communicate it to the other. - -True Friends communicate with one another in a free-form interactive open chat. The content of this chat is directly entered by the participating member and is processed through the Service, which is operated by the Walt Disney Internet Group ("WDIG"), 500 S. Buena Vista St., Burbank, CA 91521-7691. While we advise members not to exchange personal information such as first and last names, e-mail addresses, postal addresses, or phone numbers while using Open Chat with True Friends, we cannot guarantee that such exchanges of personal information will not happen. Although the True Friends chat is automatically filtered for most bad words, Open Chat with True Friends may be moderated, and Disney reserves the right to moderate any part of the Service that Disney, -""",""" -in its sole and absolute discretion, deems necessary. However, because Open Chat with True Friends will not always be moderated, if the Parent Account allows a child to use his or her account with the Open Chat with True Friends feature enabled, we strongly encourage parents to supervise their child or children while they play in the Service. By enabling the Open Chat with True Friends feature, the Parent Account acknowledges that there are some risks inherent in the Open Chat with True Friends feature and that the Parent Account has been informed of, and agrees to accept, any such risks, whether foreseeable or otherwise. - -WDIG does not use the content of True Friends chat for any purpose other than communicating that content to the member's true friend, and does not disclose that content to any third party except: (1) if required by law, for example, to comply with a court order or subpoena; (2) to enforce the Terms of Use -""",""" -applicable to the Service (which may be accessed on the home page of the Service); or, (3) to protect the safety and security of Members of the Service and the Service itself. In accordance with the Children's Online Privacy Protection Act, we are prohibited from conditioning, and do not condition, a child's participation in any activity (including Open Chat with True Friends) on the child's disclosing more personal information than is reasonably necessary to participate in such activity. - -In addition, as noted above, we recognize the right of a parent to refuse to permit us to continue to allow a child to use the True Friends feature. By enabling the Open Chat with True Friends feature, you acknowledge that there are some risks inherent in the ability of members to open chat with one another through the Open Chat with True Friends feature, and that you have been informed of, and agree to accept, any such risks, whether foreseeable or otherwise. -""" +SecretFriendsInfoPanelText = [""" The Secret Friends Feature The Secret Friends feature enables a member to chat directly with another member within Disney\'s Toontown Online (the "Service") once the members establish a Secret Friends connection. When your child attempts to use the Secret Friends feature, we will require that you indicate your consent to your child\'s use of this feature by entering your Parent Password. Here is a detailed description of the process of creating a Secret Friends connection between members whom we will call "Sally" and "Mike." 1. Sally\'s parent and Mike\'s parent each enable the Secret Friends feature by entering their respective Parent Passwords either (a) in the Account Options areas within the Service, or (b) when prompted within the game by a Parental Controls pop-up. 2. Sally requests a Secret (described below) from within the Service.""", """ 3. Sally's Secret is communicated to Mike outside of the Service. (Sally's Secret may be communicated to Mike either directly by Sally, or indirectly through Sally's disclosure of the Secret to another person.) 4. Mike submits Sally's Secret to the Service within 48 hours of the time that Sally requested the Secret from the Service. 5. The Service then notifies Mike that Sally has become Mike's Secret Friend. The Service similarly notifies Sally that Mike has become Sally's Secret Friend.\n6. Sally and Mike can now chat directly with each other until either one chooses to terminate the other as a Secret Friend, or until the Secret Friends feature is disabled for either Sally or Mike by their respective parent. The Secret Friends connection can thus be disabled anytime by either: (a) a member removing the Secret Friend from his or her friends list (as described in the Service); or, (b) the parent of that member disabling the Secret Friends feature by going to the Account Options area within the Service and following the steps set forth there. """, """ A Secret is a computer-generated random code assigned to a particular member. The Secret must be used to activate a Secret Friend connection within 48 hours of the time that the member requests the Secret; otherwise, the Secret expires and cannot be used. Moreover, a single Secret can only be used to establish one Secret Friend connection. To make additional Secret Friend connections, a member must request an additional Secret for each additional Secret Friend. Secret Friendships do not transfer. For example, if Sally becomes a Secret Friend of Mike, and Mike becomes a Secret Friend of Jessica, Sally does not automatically become Jessica's Secret Friend. In order for Sally and Jessica to become Secret Friends, one of them must request a new Secret from the Service and communicate it to the other. """, """ Secret Friends communicate with one another in a free-form interactive chat. The content of this chat is directly entered by the participating member and is processed through the Service, which is operated by the Walt Disney Internet Group ("WDIG"), 506 2nd Avenue, Suite 2100, Seattle, WA 98104 (telephone (509) 742-4698; email ms_support@help.go.com). While we advise members not to exchange personal information such as first and last names, e-mail addresses, postal addresses, or phone numbers while using Secret Friends, we cannot guarantee that such exchanges of personal information will not happen. Although the Secret Friends chat is automatically filtered for most bad words, it is not moderated or supervised by us. If parents allow their children to use their account with the Secret Friends feature enabled, we encourage parents to supervise their children while they play in the Service. """, """ WDIG does not use the content of Secret Friends chat for any purpose other than communicating that content to the member's secret friend, and does not disclose that content to any third party except: (1) if required by law, for example, to comply with a court order or subpoena; (2) to enforce the Terms of Use applicable to the Service (which may be accessed on the home page of the Service); or, (3) to protect the safety and security of Members of the Service and the Service itself. Upon request to WDIG, a child's parent can review and have deleted any Secret Friends chat content supplied by that child, provided that such chat content has not already been deleted by WDIG from its files. In accordance with the Children's Online Privacy Protection Act, we are prohibited from conditioning, and do not condition, a child's participation in any activity (including Secret Friends) on the child's disclosing more personal information than is reasonably necessary to participate in such activity. """, """ In addition, as noted above, we recognize the right of a parent to refuse to permit us to continue to allow a child to use the Secret Friends feature. By enabling the Secret Friends feature, you acknowledge that there are some risks inherent in the ability of members to chat with one another through the Secret Friends feature, and that you have been informed of, and agree to accept, any such risks. """ ] -LeaveToPay = """Click Purchase to exit the game and buy a Membership at toontown.com""" +LeaveToPay = """In order to purchase, the game will exit to the Toontown website.""" LeaveToPayYes = "Purchase" LeaveToPayNo = lCancel -LeaveToSetParentPassword = """In order to set parent account password, the game will exit to the Toontown website.""" +LeaveToSetParentPassword = """In order to set Parent Password, the game will exit to the Toontown website.""" LeaveToSetParentPasswordYes = "Set Password" LeaveToSetParentPasswordNo = lCancel @@ -233,12 +150,12 @@ LeaveToEnableChatUKNo = lCancel ChatMoreInfoOK = lOK -SecretChatDeactivated = 'The "True Friends" feature has been disabled.' -RestrictedSecretChatActivated = 'The "Restricted True Friends" feature has been enabled!' -SecretChatActivated = 'The "Unrestricted True Friends" feature has been enabled!' +SecretChatDeactivated = 'The "Secret Friends" feature has been disabled.' +RestrictedSecretChatActivated = 'The "Restricted Secret Friends" feature has been enabled!' +SecretChatActivated = 'The "Unrestricted Secret Friends" feature has been enabled!' SecretChatActivatedOK = lOK SecretChatActivatedChange = "Change Options" -ProblemActivatingChat = 'Oops! We were unable to activate the "True Friends" chat feature.\n\n%s\n\nPlease try again later.' +ProblemActivatingChat = 'Oops! We were unable to activate the "Secret Friends" chat feature.\n\n%s\n\nPlease try again later.' ProblemActivatingChatOK = lOK # MultiPageTextFrame.py @@ -273,19 +190,17 @@ CRNoConnectProxyNoPort = "Could not connect to %s:%s.\n\nYou are communicating to the internet via a proxy, but your proxy does not permit connections on port %s.\n\nYou must open up this port, or disable your proxy, in order to play. If your proxy has been provided by your ISP, you must contact your ISP to request them to open up this port." CRMissingGameRootObject = """Missing some root game objects. (May be a failed network connection).\n\nTry again?""" CRNoDistrictsTryAgain = "No Districts are available. Try again?" -CRRejectRemoveAvatar = "The avatar was not able to be deleted, try again another time." CRLostConnection = "Your internet connection to the servers has been unexpectedly broken." CRBootedReasons = { 1: "An unexpected problem has occurred. Your connection has been lost, but you should be able to connect again and go right back into the game.", 100: "You have been disconnected because someone else just logged in using your account on another computer.", 120: "You have been disconnected because of a problem with your authorization to use keyboard chat.", 122: "There has been an unexpected problem logging you in. Please contact customer support.", - 125: "Your installed files appear to be invalid. Please use the Play button on the official website to run.", + 125: "Your installed Toontown files appear to be invalid. Please use the Play button on the official website to run.", 126: "You are not authorized to use administrator privileges.", - 127: "A problem has occurred with your Toon. Please contact Member Services via phone, email or live chat and reference Error Code 127. Thank you.", 151: "You have been logged out by an administrator working on the servers.", 152: "There has been a reported violation of our Terms of Use connected to '%(name)s'. For more details, please review the message sent to the e-mail address associated with '%(name)s'.", - 153: "The district you were playing on has been reset. Everyone who was playing on that district has been disconnected. However, you should be able to connect again and go right back into the game.", + 153: "The Tontown district you were playing on has been reset. Everyone who was playing on that district has been disconnected. However, you should be able to connect again and go right back into the game.", 288: "Sorry, you have used up all of your available minutes this month.", 349: "Sorry, you have used up all of your available minutes this month.", } @@ -302,13 +217,8 @@ CRServerDateTryAgain = "Could not get server date from %s. Try again?" AfkForceAcknowledgeMessage = "Your toon got sleepy and went to bed." PeriodTimerWarning = "Your available time is almost over!" -PeriodForceAcknowledgeMessage = "Sorry, you have used up all of your available time. Please exit to purchase more." -CREnteringToontown = "Entering..." - -# DownloadWatcher.py -# phase, percent -DownloadWatcherUpdate = "Downloading %s" -DownloadWatcherInitializing = "Download Initializing..." +PeriodForceAcknowledgeMessage = "You have used up all of your available minutes in Toontown this month. Come back and play some more next month!" +CREnteringToontown = "Entering Toontown..." # LoginScreen.py LoginScreenUserName = "Account Name" @@ -341,7 +251,6 @@ GlobalSpeedChatName = "SpeedChat" # Toontown Speedchat -SCMenuPromotion = "PROMOTIONAL" SCMenuElection = "ELECTION" SCMenuEmotions = "EMOTIONS" SCMenuCustom = "MY PHRASES" @@ -366,11 +275,7 @@ SCMenuCFOBattle = "C.F.O." SCMenuCFOBattleCranes = "CRANES" SCMenuCFOBattleGoons = "GOONS" -SCMenuCJBattle = "CHIEF JUSTICE" -SCMenuCEOBattle = "C.E.O." -SCMenuGolf = "GOLF" -SCMenuWhiteList = "WHITELIST" -SCMenuPlacesPlayground = "PLAYGROUND" +SCMenuPlacesPlayground = "PLAYGROUND" SCMenuPlacesEstate = "ESTATE" SCMenuPlacesCogs = "COGS" SCMenuPlacesWait = "WAIT" @@ -383,118 +288,49 @@ SCMenuBattleGags = "GAGS" SCMenuBattleTaunts = "TAUNTS" SCMenuBattleStrategy = "STRATEGY" -SCMenuBoardingGroup = "BOARDING" -SCMenuParties = "PARTIES" -SCMenuAprilToons = "APRIL TOONS'" -SCMenuSingingGroup = "SINGING" -SCMenuSillyHoliday = "SILLY METER" -SCMenuVictoryParties = "VICTORY PARTIES" # FriendSecret.py FriendSecretNeedsPasswordWarningTitle = "Parental Controls" -FriendSecretNeedsParentLoginWarning = """To get or enter a True Friend Code, log in with the Parent Account. You can disable this prompt by changing your True Friend options.""" -FriendSecretNeedsPasswordWarning = """To get or enter a True Friend Code, you must enter the Parent Account Password. You can disable this prompt by changing your True Friends options.""" +FriendSecretNeedsPasswordWarning = """To get or enter a Secret, you must enter the Parent Password. You can disable this prompt by changing your Secrets options.""" FriendSecretNeedsPasswordWarningOK = lOK FriendSecretNeedsPasswordWarningCancel = lCancel -FriendSecretNeedsPasswordWarningWrongUsername = """That's not the correct username. Please enter the username of the parental account. This is not the same username used to play the game.""" FriendSecretNeedsPasswordWarningWrongPassword = """That's not the correct password. Please enter the password of the parental account. This is not the same password used to play the game.""" -FriendSecretIntro = "If you are playing Disney's Toontown Online with someone you know in the real world, you can become True Friends. You can chat using the keyboard with your True Friends. Other Toons won't understand what you're saying.\n\nYou do this by getting a True Friend Code. Tell the True Friend Code to your friend, but not to anyone else. When your friend types in your True Friend Code on his or her screen, you'll be True Friends in Toontown!" -FriendSecretGetSecret = "Get a True Friend Code" -FriendSecretEnterSecret = "If you have a True Friend Code from someone you know, type it here." +FriendSecretIntro = "If you are playing Disney's Toontown Online with someone you know in the real world, you can become Secrets. You can chat using the keyboard with your Secrets. Other Toons won't understand what you're saying.\n\nYou do this by getting a Secret. Tell the Secret to your friend, but not to anyone else. When your friend types in your Secret on his or her screen, you'll be Secrets Friends in Toontown!" +FriendSecretGetSecret = "Get a Secret" +FriendSecretEnterSecret = "If you have a Secret from someone you know, type it here." FriendSecretOK = lOK -FriendSecretEnter = "Enter True Friend Code" +FriendSecretEnter = "Enter Secret" FriendSecretCancel = lCancel -FriendSecretGettingSecret = "Getting True Friend Code. . ." -FriendSecretGotSecret = "Here is your new True Friend Code. Be sure to write it down!\n\nYou may give this True Friend Code to one person only. Once someone types in your True Friend Code, it will not work for anyone else. If you want to give a True Friend Code to more than one person, get another True Friend Code.\n\nThe True Friend Code will only work for the next two days. Your friend will have to type it in before it goes away, or it won't work.\n\nYour True Friend Code is:" -FriendSecretTooMany = "Sorry, you can't have any more True Friend Codes today. You've already had more than your fair share!\n\nTry again tomorrow." -FriendSecretTryingSecret = "Trying True Friend Code. . ." -FriendSecretEnteredSecretSuccess = "You are now True Friends with %s!" -FriendSecretTimeOut = "Sorry, secrets are not working right now." -FriendSecretEnteredSecretUnknown = "That's not anyone's True Friend Code. Are you sure you spelled it correctly?\n\nIf you did type it correctly, it may have expired. Ask your friend to get a new True Friend Code for you (or get a new one yourself and give it to your friend)." +FriendSecretGettingSecret = "Getting Secret. . ." +FriendSecretGotSecret = "Here is your new Secret. Be sure to write it down!\n\nYou may give this Secret to one person only. Once someone types in your Secret, it will not work for anyone else. If you want to give a Secret to more than one person, get another Secret.\n\nThe Secret will only work for the next two days. Your friend will have to type it in before it goes away, or it won't work.\n\nYour Secret is:" +FriendSecretTooMany = "Sorry, you can't have any more Secrets today. You've already had more than your fair share!\n\nTry again tomorrow." +FriendSecretTryingSecret = "Trying Secret. . ." +FriendSecretEnteredSecretSuccess = "You are now Secrets Friends with %s!" +FriendSecretEnteredSecretUnknown = "That's not anyone's Secret. Are you sure you spelled it correctly?\n\nIf you did type it correctly, it may have expired. Ask your friend to get a new Secret for you (or get a new one yourself and give it to your friend)." FriendSecretEnteredSecretFull = "You can't be friends with %s because one of you has too many friends on your friends list." FriendSecretEnteredSecretFullNoName = "You can't be friends because one of you has too many friends on your friends list." -FriendSecretEnteredSecretSelf = "You just typed in your own True Friend Code! Now no one else can use that True Friend Code." -FriendSecretEnteredSecretWrongProduct = "You have entered the wrong type of True Friend Code.\nThis game uses codes that begin with '%s'." -FriendSecretNowFriends = "You are now True Friends with %s!" -FriendSecretNowFriendsNoName = "You are now True Friends!" -FriendSecretDetermineSecret = "What type of True Friend would you like to make?" -FriendSecretDetermineSecretAvatar = "Avatar" -FriendSecretDetermineSecretAvatarRollover = "A friend only in this game" -FriendSecretDetermineSecretAccount = "Account" -FriendSecretDetermineSecretAccountRollover = "A friend across the Disney.com network" - -# GuildMember.py -GuildMemberTitle = "Member Options" -GuildMemberPromote = "Make Officer" -GuildMemberGM = "Make Guildmaster" -GuildMemberDemote = "Demote" -GuildMemberKick = "Remove Member" -GuildMemberCancel = lCancel -GuildMemberOnline = "has come online." -GuildMemberOffline = "has gone offline." -GuildPrefix = "(G):" -GuildNewMember = "New Guild Member" - -# GuildInvitee.py -GuildInviteeOK = lOK -GuildInviteeNo = lNo -GuildInviteeInvitation = "%s is inviting you to join %s." - -GuildRedeemErrorInvalidToken = "Sorry, that code is invalid. Please try again." -GuildRedeemErrorGuildFull = "Sorry, this guild has too many members already." +FriendSecretEnteredSecretSelf = "You just typed in your own Secret! Now no one else can use that Secret." +FriendSecretNowFriends = "You are now Secrets Friends with %s!" +FriendSecretNowFriendsNoName = "You are now Secrets Friends!" # FriendInvitee.py FriendInviteeTooManyFriends = "%s would like to be your friend, but you already have too many friends on your list!" FriendInviteeInvitation = "%s would like to be your friend." -FriendInviteeInvitationPlayer = "%s\'s player would like to be your friend." -FriendNotifictation = "%s is now your friend." FriendInviteeOK = lOK FriendInviteeNo = lNo -GuildInviterWentAway = "%s is no longer present." -GuildInviterAlready = "%s is already in a guild." -GuildInviterBusy = "%s is busy right now." -GuildInviterNotYet = "Invite %s to join your guild?" -GuildInviterCheckAvailability = "Inviting %s to join your guild." -GuildInviterOK = lOK -GuildInviterNo = lNo -GuildInviterCancel = lCancel -GuildInviterYes = lYes -GuildInviterTooFull = "Guild has reached maximum size." -GuildInviterNo = lNo -GuildInviterClickToon = "Click on the pirate you would like to invite." -GuildInviterTooMany = "This is a bug" -GuildInviterNotAvailable = "%s is busy right now; try again later." -GuildInviterGuildSaidNo = "%s has declined your guild invitation." -GuildInviterAlreadyInvited = "%s has already been invited." -GuildInviterEndGuildship = "Remove %s from the guild?" -GuildInviterFriendsNoMore = "%s has left the guild." -GuildInviterSelf = "You are already in the guild!" -GuildInviterIgnored = "%s is ignoring you." -GuildInviterAsking = "Asking %s to join the guild." -GuildInviterGuildSaidYes = "%s has joined the guild!" # FriendInviter.py -FriendOnline = "has come online." -FriendOffline = "has gone offline." FriendInviterOK = lOK FriendInviterCancel = lCancel FriendInviterStopBeingFriends = "Stop being friends" -FriendInviterConfirmRemove = "Remove" FriendInviterYes = lYes FriendInviterNo = lNo FriendInviterClickToon = "Click on the toon you would like to make friends with." FriendInviterTooMany = "You have too many friends on your list to add another one now. You will have to remove some friends if you want to make friends with %s." -FriendInviterToonTooMany = "You have too many toon friends on your list to add another one now. You will have to remove some toon friends if you want to make friends with %s." -FriendInviterPlayerTooMany = "You have too many player friends on your list to add another one now. You will have to remove some player friends if you want to make friends with %s." FriendInviterNotYet = "Would you like to make friends with %s?" FriendInviterCheckAvailability = "Seeing if %s is available." -FriendInviterNotAvailable = "%s is busy right now; try again later." -FriendInviterCantSee = "This only works if you can see %s." -FriendInviterNotOnline = "This only works if %s is online" -FriendInviterNotOpen = "%s does not have open chat, use secrets to make friends" FriendInviterWentAway = "%s went away." FriendInviterAlready = "%s is already your friend." -FriendInviterAlreadyInvited = "%s has already been invited." FriendInviterAskingCog = "Asking %s to be your friend." FriendInviterAskingPet = "%s jumps around, runs in circles and licks your face." FriendInviterAskingMyPet = "%s is already your BEST friend." @@ -504,33 +340,12 @@ FriendInviterIgnored = "%s is ignoring you." FriendInviterAsking = "Asking %s to be your friend." FriendInviterFriendSaidYes = "You are now friends with %s!" -FriendInviterPlayerFriendSaidYes = "You are now friends with %s's player, %s!" FriendInviterFriendSaidNo = "%s said no, thank you." FriendInviterFriendSaidNoNewFriends = "%s isn't looking for new friends right now." -FriendInviterOtherTooMany = "%s has too many friends already!" +FriendInviterTooMany = "%s has too many friends already!" FriendInviterMaybe = "%s was unable to answer." FriendInviterDown = "Cannot make friends now." -#Talk Path Labels -TalkGuild = "G" -TalkParty = "P" -TalkPVP = "PVP" - -#Spam Blocked Message -AntiSpamInChat = "***Spamming***" - -#IgnoreConfirm.py -IgnoreConfirmOK = lOK -IgnoreConfirmCancel = lCancel -IgnoreConfirmYes = lYes -IgnoreConfirmNo = lNo -IgnoreConfirmNotYet = "Would you like to Ignore %s?" -IgnoreConfirmAlready = "You are already ignoring %s." -IgnoreConfirmSelf = "You cannot ignore yourself!" -IgnoreConfirmNewIgnore = "You are ignoring %s." -IgnoreConfirmEndIgnore = "You are no longer ignoring %s." -IgnoreConfirmRemoveIgnore = "Stop ignoring %s?" - # Emote.py # List of emotes in the order they should appear in the SpeedChat. # Must be in the same order as the function list (EmoteFunc) in Emote.py @@ -555,20 +370,6 @@ lYes, lNo, lOK, - "Surprise", - "Cry", - "Delighted", - "Furious", - "Laugh", -## "Sing Note G1", -## "Sing Note A", -## "Sing Note B", -## "Sing Note C", -## "Sing Note D", -## "Sing Note E", -## "Sing Note F", -## "Sing Note G2", -## "Sing Note Rest", ] EmoteWhispers = [ @@ -589,15 +390,9 @@ "%s slips on a banana peel.", "%s gives the resistance salute.", "%s laughs.", - "%s says '"+lYes+"'.", - "%s says '"+lNo+"'.", - "%s says '"+lOK+"'.", - "%s is surprised.", - "%s is crying.", - "%s is delighted.", - "%s is furious.", - "%s is laughing.", - "is singing note G1" + "%s says '"Yes"'.", + "%s says '"No"'.", + "%s says '"OK"'.", ] # Reverse lookup: get the index from the name. @@ -622,19 +417,6 @@ lYes : 17, lNo : 18, lOK : 19, - "Surprise" : 20, - "Cry" : 21, - "Delighted" : 22, - "Furious" : 23, - "Laugh" : 24, - "Sing Note G1" : 25, - "Sing Note A" : 26, - "Sing Note B" : 27, - "Sing Note C" : 28, - "Sing Note D" : 29, - "Sing Note E" : 30, - "Sing Note F" : 31, - "Sing Note G2" : 32, } # SuitDialog.py @@ -1040,7 +822,6 @@ 1 : lYes, 2 : lNo, 3 : lOK, - 4 : "SPEEDCHAT PLUS", # Hello 100 : "Hi!", @@ -1192,25 +973,16 @@ 1108 : "Let's go to %s!" % lDaisyGardens, 1109 : "Let's go to %s!" % lTheBrrrgh, 1110 : "Let's go to %s!" % lDonaldsDreamland, - 1111 : "Let's go to %s!" % lGoofySpeedway, - 1112 : "Let's go to my house!", - 1113 : "Let's go to your house!", - 1114 : "Let's go to Sellbot HQ!", - 1115 : "Let's go fight the VP!", - 1116 : "Let's go in the Factory!", - 1117 : "Let's go fishing!", - 1118 : "Let's go fishing at my house!", - 1119 : "Let's go to Cashbot HQ!", - 1120 : "Let's go fight the CFO!", - 1121 : "Let's go in the Mint!", - 1122 : "Let's go to Lawbot HQ!", - 1123 : "Let's go fight the Chief Justice!", - 1124 : "Let's go in the District Attorney's Office!", - 1125 : "Let's go to %s!" % lOutdoorZone, - 1126 : "Let's go to %s!" % lGolfZone, - 1127 : "Let's go to Bossbot HQ!", - 1128 : "Let's go fight the CEO!", - 1129 : "Let's go in the Cog Golf Courses!", + 1111 : "Let's go to my house!", + 1112 : "Let's go to your house!", + 1113 : "Let's go to Sellbot HQ!", + 1114 : "Let's go fight the VP!", + 1115 : "Let's go in the Factory!", + 1116 : "Let's go fishing!", + 1117 : "Let's go fishing at my house!", + 1118 : "Let's go to Cashbot HQ!", + 1119 : "Let's go fight the CFO!", + 1120 : "Let's go in the Mint!", # Toontasks 1200 : "What ToonTask are you working on?", @@ -1223,13 +995,6 @@ 1207 : "I need more Sellbot Suit Parts.", 1208 : "This isn't what you need.", 1209 : "I found what you need.", - 1210 : "I need more Cogbucks.", - 1211 : "I need more Jury Notices.", - 1212 : "I need more Stock Options.", - 1213 : "I need more Cashbot Suit Parts.", - 1214 : "I need more Lawbot Suit Parts.", - 1215 : "I need more Bossbot Suit Parts.", - 1299 : "I need to get a ToonTask.", # Toontasks "I think you should choose..." @@ -1419,250 +1184,7 @@ 2130 : "Please save the treasures.", 2131 : "Take the treasures.", 2132 : "I need treasures!", - 2133 : "Look out!", - - # CJ battle - 2200 : "You need to hit the scale.", - 2201 : "I will hit the scale.", - 2202 : "I need help with the scale!", - 2203 : "You need to stun the Cogs.", - 2204 : "I will stun the Cogs.", - 2205 : "I need help with the Cogs!", - 2206 : "I need more evidence!", - 2207 : "I'm shooting for chairs in the top row.", - 2208 : "I'm shooting for chairs in the bottom row.", - 2209 : "Move out of the way! We can't hit the pan.", - 2210 : "I'll do Toon-Ups for us.", - 2211 : "I don't have any bonus weight.", - 2212 : "I have a bonus weight of 1.", - 2213 : "I have a bonus weight of 2.", - 2214 : "I have a bonus weight of 3.", - 2215 : "I have a bonus weight of 4.", - 2216 : "I have a bonus weight of 5.", - 2217 : "I have a bonus weight of 6.", - 2218 : "I have a bonus weight of 7.", - 2219 : "I have a bonus weight of 8.", - 2220 : "I have a bonus weight of 9.", - 2221 : "I have a bonus weight of 10.", - 2222 : "I have a bonus weight of 11.", - 2223 : "I have a bonus weight of 12.", - - # CEO battle - 2300 : "You feed the Cogs on the left.", - 2301 : "I'll feed the Cogs on the left.", - 2302 : "You feed the Cogs on the right.", - 2303 : "I'll feed the Cogs on the right.", - 2304 : "You feed the Cogs in the front.", - 2305 : "I'll feed the Cogs in the front.", - 2306 : "You feed the Cogs in the back.", - 2307 : "I'll feed the Cogs in the back.", - 2308 : "You use the seltzer bottle.", - 2309 : "I'll use the seltzer bottle.", - 2310 : "You use the golf tee.", - 2311 : "I'll use the golf tee.", - 2312 : "I'll serve this table.", - 2313 : "Can you serve this table?", - 2314 : "Feed the same cog again.", - 2315 : "Hurry, your cog is hungry!", - 2316 : "Please save the snacks for sadder toons.", - 2317 : "Take the snacks before they fall.", - - - #Kart Racing Phrases - #IMPORTANT: if you change numbers or add/subtract lines here than be - # sure to adjust the kart racing menu guid dict below - # Invites/Destinations - 3010 : "Anyone want to race?", - 3020 : "Let's race!", - 3030 : "Want to race?", - 3040 : "Let's show off our karts!", - 3050 : "I don't have enough tickets.", - 3060 : "Let's race again!", - 3061 : "Want to race again?", - - - #Places - 3150 : "I need to go to the Kart Shop.", - 3160 : "Let's go to the Race Tracks!", - 3170 : "Let's go to Pit Row to show off our karts!", - 3180 : "I'm going to Pit Row to show off my kart!", - 3190 : "Meet me at the Race Tracks!", - 3110 : "Meet up near the Kart Shop!", - 3130 : "Where should we meet?", - - #Races - 3200 : "Where do you want to race?", - 3201 : "Let's pick a different race.", - 3210 : "Let's do a practice race.", - 3211 : "Let's do a battle race.", - 3220 : "I like the Screwball Stadium race!", - 3221 : "I like the Rustic Raceway race!", - 3222 : "I like the City Circuit race!", - 3223 : "I like the Corkscrew Coliseum race!", - 3224 : "I like the Airborne Acres race!", - 3225 : "I like the Blizzard Boulevard race!", - 3230 : "Let's race in the Screwball Stadium!", - 3231 : "Let's race on the Rustic Raceway!", - 3232 : "Let's race on the City Circuit!", - 3233 : "Let's race in the Corkscrew Coliseum!", - 3234 : "Let's race on the Airborne Acres!", - 3235 : "Let's race on the Blizzard Boulevard!", - - #Tracks - 3600 : "Which track do you want to race on?", - 3601 : "Pick a track!", - 3602 : "Can we race on a different track?", - 3603 : "Let's pick a different track!", - 3640 : "I want to race on the first track!", - 3641 : "I want to race on the second track!", - 3642 : "I want to race on the third track!", - 3643 : "I want to race on the fourth track!", - 3660 : "I don't want to race on the first track!", - 3661 : "I don't want to race on the second track!", - 3662 : "I don't want to race on the third track!", - 3663 : "I don't want to race on the fourth track!", - - #Compliments - 3300 : "Wow! You are FAST!", - 3301 : "You're too fast for me!", - 3310 : "Good race!", - 3320 : "I really like your kart!", - 3330 : "Sweet ride!", - 3340 : "Your kart is cool!", - 3350 : "Your kart is awesome!", - 3360 : "Your kart is totally sweet!", - - #Taunts (commented out taunts are for possible purchase lines) - #3400 : "Eat my dust!", - 3400 : "Too scared to race me?", - 3410 : "See you at the finish line!", - #3420 : "You're slow as molasses!", - 3430 : "I'm as fast as lightning!", - #3440 : "I'm faster than the speed of light!", - 3450 : "You'll never catch me!", - 3451 : "You'll never beat me!", - 3452 : "No one can beat my time!", - 3453 : "Hurry up slow pokes!", - 3460 : "Give me another shot!", - 3461 : "You got lucky!", - 3462 : "Ooooh! That was a close one!", - 3470 : "Wow, I thought you had me beat!", - #3500 : "Check out my ride!", - #3510 : "Look at my wheels!", - #3540 : "Vroom! Vroom!", - #3560 : "I've seen Cogs move faster!", - #3600 : "I'm the fastest of the fast!", - - - # Golf phrases - - # Play - 4000 : "Let's play minigolf!", - 4001 : "Let's play again!", - 4002 : "Want to golf?", - - # Courses - 4100 : "Let's play 'Walk In The Par.'", - 4101 : "Let's play 'Hole Some Fun.'", - 4102 : "Let's play 'The Hole Kit and Caboodle.'", - 4103 : "That course is too easy.", - 4104 : "That course is too hard.", - 4105 : "That course is just right.", - - # Tips - 4200 : "Try standing more to the left.", - 4201 : "Try standing more to the right.", - 4202 : "Try standing right in the middle.", - 4203 : "Try hitting it harder.", - 4204 : "Try hitting it softer.", - 4205 : "Try aiming more to the left.", - 4206 : "Try aiming more to the right.", - 4207 : "Try aiming right down the middle.", - - # Comments - 4300 : "So close!", - 4301 : "What a great shot!", - 4302 : "That was a lucky shot.", - 4303 : "I'll take a mulligan...", - 4304 : "That's a gimme.", - 4305 : "Fore!", - 4306 : "Shhhh!", - 4307 : "Good game!", - - # Boarding Group phrases - - 5000 : "Let's form a Boarding Group.", - 5001 : "Join my Boarding Group.", - 5002 : "Can you invite me to your Boarding Group?", - 5003 : "I'm already in a Boarding Group.", - 5004 : "Leave your Boarding Group.", - 5005 : "We are boarding now.", - 5006 : "Where are we going?", - 5007 : "Are we ready?", - 5008 : "Let's Go!", - 5009 : "Don't leave this area or you will leave the Boarding Group.", - - # Let's Go to... - 5100 : "Let's go to the Front Three.", - 5101 : "Let's go to the Middle Six.", - 5102 : "Let's go to the Back Nine.", - 5103 : "Let's go to the C.E.O. Battle.", - 5104 : "Let's go to the Senior V.P Battle.", - 5105 : "Let's go to the Front Entrance.", - 5106 : "Let's go to the Side Entrance.", - 5107 : "Let's go to the Coin Mint.", - 5108 : "Let's go to the Dollar Mint.", - 5109 : "Let's go to the Bullion Mint.", - 5110 : "Let's go to the C.F.O. Battle.", - 5111 : "Let's go to the Chief Justice Battle.", - 5112 : "Let's go to the Lawbot A Office.", - 5113 : "Let's go to the Lawbot B Office.", - 5114 : "Let's go to the Lawbot C Office.", - 5115 : "Let's go to the Lawbot D Office.", - - # We're going to... - 5200 : "We're going to the Front Three.", - 5201 : "We're going to the Middle Six.", - 5202 : "We're going to the Back Nine.", - 5203 : "We're going to the C.E.O. Battle.", - 5204 : "We're going to the Senior V.P Battle.", - 5205 : "We're going to the Front Entrance.", - 5206 : "We're going to the Side Entrance.", - 5207 : "We're going to the Coin Mint.", - 5208 : "We're going to the Dollar Mint.", - 5209 : "We're going to the Bullion Mint.", - 5210 : "We're going to the C.F.O. Battle.", - 5211 : "We're going to the Chief Justice Battle.", - 5212 : "We're going to the Lawbot A Office.", - 5213 : "We're going to the Lawbot B Office.", - 5214 : "We're going to the Lawbot C Office.", - 5215 : "We're going to the Lawbot D Office.", - - # Parties General Phrases - 5300 : "Let's go to a party.", - 5301 : "See you at the party!", - 5302 : "My party has started!", - 5303 : "Come to my party!", - # Parties Phrases when inside a party - 5304 : "Welcome to my party!", - 5305 : "This party rules!", - 5306 : "Your party is fun!", - 5307 : "It's party time!", - 5308 : "Time is running out!", - 5309 : "No cogs allowed!", - 5310 : "I like this song!", - 5311 : "This music is great!", - 5312 : "Cannons are a blast!", - 5313 : "Watch me jump!", - 5314 : "Trampolines are fun!", - 5315 : "Let's play Catch!", - 5316 : "Let's dance!", - 5317 : "To the dance floor!", - 5318 : "Let's play Tug of War!", - 5319 : "Start the fireworks!", - 5320 : "These fireworks are beautiful!", - 5321 : "Nice decorations.", - 5322 : "I wish I could eat this cake!", + 2133 : "Look out!", # Promotional Considerations 10000 : "The choice is yours!", @@ -2070,7 +1592,6 @@ 21003: 'Good boy!', 21004: 'Good girl!', 21005: 'Nice Doodle.', - 21006: 'Please don\'t bother me.', # Pet/Doodle Tricks 21200: 'Jump!', @@ -2084,261 +1605,32 @@ # PIRATES ROOT - TOP LEVEL 50001 : 'Aye', 50002 : 'Nay', - 50003 : 'Yes', - 50004 : 'No', - 50005 : 'Ok', + 50003 : 'Arr!', + 50100 : 'Ahoy!', + 50101 : 'Ahoy, Matie!', + # EXPRESSIONS - 50100 : "Gangway!", - 50101 : "Blimey!", - 50102 : "Well blow me down!", - 50103 : "Walk the plank!", + 50103 : "Gangway!", + 50104 : "Blimey!", + 50105 : "Well blow me down!", + 50106 : "Yo-Ho-Ho", + 50107 : "Aye, aye Captain!", + 50108 : "Walk the plank!", + 50109 : "Come about!", 50104 : "Dead men tell no tales....", - 50105 : "Shiver me timbers!", - 50106 : "Salty as a Kraken's kiss.", - 50107 : "Treasure be the measure of our pleasure!", - 50108 : "I don't fear death - I attune it.", - - - # EXPRESSIONS - GREETINGS - 50700 : "Ahoy!", - 50701 : "Ahoy, mate!", - 50702 : "Yo-Ho-Ho", - 50703 : "Avast!", - 50704 : "Hey Bucko.", - - # EXPRESSIONS - GOODBYES - 50800 : "Until next time.", - 50801 : "May fair winds find ye.", - 50802 : "Godspeed.", - - - # EXPRESSIONS - FRIENDLY - 50900 : "How are ye, mate?", - 50901 : "", - - # EXPRESSIONS - HAPPY - 51000 : "It's like the sky is raining gold doubloons!", - 51001 : "May a stiff wind be at our backs, the sun on our faces and our cannons fire true!", - - # EXPRESSIONS - SAD - 51100 : "I be sailing some rough waters today.", - - # EXPRESSIONS - SORRY - 51200 : "Me apologies, mate.", - 51201 : "Sorry.", - 51202 : "Sorry, I was busy before.", - 51203 : "Sorry, I already have plans.", - 51204 : "Sorry, I don't need to do that.", - - # COMBAT - 51300 : "Attack the weakest one!", - 51301 : "Attack the strongest one!", - 51302 : "Attack me target!", - 51303 : "I be needing help!", - 51304 : "I can't do any damage!", - 51305 : "I think we be in trouble.", - 51306 : "Surround the most powerful one.", - 51307 : "We should retreat.", - 51308 : "Run for it!", - - # SEA COMBAT - 51400 : "Fire a Broadside!", - 51401 : "Port Side! (left)", - 51402 : "Starboard Side! (right)", - 51403 : "Incoming!", - 51404 : "Come about!", - 51405 : "Broadside! Take Cover!", - 51406 : "To the Cannons!", - 51407 : "Open fire!", - 51408 : "Hold yer fire!", - 51409 : "Aim for the masts!", - 51410 : "Aim for the hull!", - 51411 : "Prepare to board!", - 51412 : "She's coming about.", - 51413 : "Ramming speed!", - 51414 : "We've got her on the run.", - 51415 : "We be taking on water!", - 51416 : "We can't take anymore!", - 51417 : "I don't have a shot!", - 51418 : "Let's find port for repair.", - 51419 : "Man overboard!", - 51420 : "Enemy spotted.", - 51421 : "Handsomely now, mates!", - - # PLACES - 50400 : "Let's set sail.", - 50401 : "Let's get out of here.", - - - # PLACES - LETS SAIL... - 51500 : "Let's sail to Port Royal.", - 51501 : "Let's sail to Tortuga.", - 51502 : "Let's sail to Padres Del Fuego.", - 51503 : "Let's sail to Devil's Anvil.", - 51504 : "Let's sail to Kingshead.", - 51505 : "Let's sail to Isla Perdida.", - 51506 : "Let's sail to Cuba.", - 51507 : "Let's sail to Tormenta.", - 51508 : "Let's sail to Outcast Isle.", - 51509 : "Let's sail to Driftwood.", - 51510 : "Let's sail to Cutthroat.", - 51511 : "Let's sail to Rumrunner's Isle.", - 51512 : "Let's sail to Isla Cangrejos.", - - # PLACES - LETS HEAD TO... - 51600 : "Let's head into town.", - 51601 : "Let's go to the docks.", - 51602 : "Let's head to the tavern.", - - # PLACES - LETS HEAD TO... - PORT ROYAL - 51800 : "Let's go to Fort Charles.", - 51801 : "Let's go to the Governor's Mansion.", - - # PLACES - WHERE IS ..? - 52500 : "Where be I, mate?", - - # DIRECTIONS - 51700 : "Yer already there.", - 51701 : "I don't know.", - 51702 : "Yer on the wrong island.", - 51703 : "That's in town.", - 51704 : "Look just outside of town.", - 51705 : "Ye will have to search through the jungle.", - 51706 : "Deeper inland.", - 51707 : "Oh, that be by the coast.", # Insults 50200 : "Bilge rat!", - 50201 : "Scurvy dog!", + 50201 : "Ye scurvy dog!", 50202 : "See ye in Davy Jones locker!", 50203 : "Scoundrel!", 50204 : "Landlubber!", - 50205 : "Addle-minded fool!", - 50206 : "You need a sharp sword and sharper wits.", - 50207 : "Ye be one doubloon short of a full hull mate!", - 50208 : "Watch yer tongue or I'll pickle it with sea salt!", - 50209 : "Touch me loot and you get the boot!", - 50210 : "The horizon be as empty as yer head.", - 50211 : "You're a canvas shy of a full sail, aren't ye mate?", - - # Compliments - 50300 : "Fine shooting mate!", - 50301 : "A well placed blow!", - 50302 : "Nice shot!", - 50303 : "Well met!", - 50304 : "We showed them!", - 50305 : "Yer not so bad yerself!", - 50306 : "A fine plunder haul!", - - # Card Games - 52400 : "May luck be my lady.", - 52401 : "I think these cards be marked!", - 52402 : "Blimey cheater!", - - # Card Games - Poker - 51900 : "That's a terrible flop!", - 51901 : "Trying to buy the hand, are ye?", - 51902 : "Ye be bluffing.", - 51903 : "I don't think ye had it.", - 51904 : "Saved by the river.", - - # Card Games - Blackjack - 52600 : "Hit me.", - 52601 : "Can I get another dealer?", - - # Minigames - # Minigames - Fishing - 53101 : "I caught a fish!", - 53102 : "I saw a Legendary Fish!", - 53103 : "What did you catch?", - 53104 : "This will make a whale of a tale!", - 53105 : "That was a beauty!", - 53106 : "Arr, the sea is treacherous today.", - 53107 : "What a bountiful haul of fish!", - 53110 : "Do you have the Legendary Lure?", - 53111 : "Have you ever caught a Legendary Fish?", - 53112 : "Can you sail on a fishing boat?", - 53113 : "Where is the Fishing Master?", - 53114 : "Have you completed your fish collection?", - # Minigames - Cannon Defense - 53120 : "Fire at my target!", - 53121 : "Fire at the ship closest to the shore!", - 53122 : "There's a ship getting away!", - 53123 : "Fire at the big ships!", - 53124 : "Fire at the small ships!", - 53125 : "More are coming!", - 53126 : "We're not going to last much longer!", - 53127 : "Shoot the barrels!", - 53128 : "We've got new ammo!", - 53129 : "Sturdy defense, mates!", - # Minigames - Potion Brewing - 53141 : "Look at the potion I made!", - 53142 : "Have you completed your potion collection?", - 53143 : "Where is the Gypsy?", - 53144 : "What potion is that?", - 53145 : "This potion was easy enough.", - 53146 : "This potion was hard brewin', I tell ye!", - # Minigames - Repair - 53160 : "We need someone to bilge pump!", - 53161 : "We need someone to scrub!", - 53162 : "We need someone to saw!", - 53163 : "We need someone to brace!", - 53164 : "We need someone to hammer!", - 53165 : "We need someone to patch!", - 53166 : "I'll do it!", - 53167 : "Keep it up, this ship won't repair itself!", - 53168 : "Great job repairing the ship!", - - # Invitations - 52100 : "Want to group up?", - 52101 : "Join me crew?", - - # Invitations - Hunting - 52200 : "Fight some skeletons?", - 52201 : "Fight some crabs?", - - # Invitations - Versus - 52300 : "How 'bout a game of Mayhem?", - 52301 : "Join me Mayhem game.", - 52302 : "Want to start a Mayhem game?", - 52303 : "Want to start a team battle game?", - 52304 : "Join me team battle game.", - - # Invitations - Minigames - 52350 : "Join my Cannon Defense.", - 52351 : "Want to start a Cannon Defense?", - 52352 : "Can you lend me a hand with Repair?", - 52353 : "We need to Repair the ship now!", - 52354 : "Care to catch some fish?", - 52355 : "Want to go fishing with me?", - 52356 : "Join me crew for some fishin'?", - 52357 : "Time to brew some potions!", - 52358 : "You should try your hand at brewing potions.", - - # PLACES - WHERE IS..? - PORT ROYAL (LEGACY) - 52000 : "", - - # PLACES - WHERE IS..? - PORT ROYAL (Legacy) - 52000 : "", - - # PLACES - WHERE IS..? - TORTUGA (Legacy) - 52700 : "", - - # PLACES - WHERE IS..? - PADRES DEL FUEGO (Legacy) - 53000 : "", - - # PLACES - WHERE IS..? - PADRES DEL FUEGO - LOS PADRES (Legacy) - 52800 : "", - - # PLACES - WHERE IS..? - PADRES DEL FUEGO - LAS PULGAS (Legacy) - 52900 : "", - - # Adventures (LEGACY) - 50500 : "", - - # Ships (LEGACY) - 50600 : "", + 50205 : "Whar are ye?", + 50301 : "Let's head into town.", + 50302 : "Let's go to the docks.", + 50303 : "Let's set sail.", + 50304 : "Let's go to the bar.", # Greetings 60100 : "Hi!", @@ -2381,189 +1673,8 @@ 60502 : "Let's go to the Disco Hall.", 60503 : "Let's go to Toontown.", 60504 : "Let's go to Pirates of the Carribean.", - - # Animated Emotes - 60505 : "Flip coin", - 60506 : "Dance", - 60507 : "Chant 1", - 60508 : "Chant 2", - 60509 : "Dance a jig", - 60510 : "Sleep", - 60511 : "Flex", - 60512 : "Play Lute", - 60513 : "Play Flute", - 60514 : "Frustrated", - 60515 : "Searching", - 60516 : "Yawn", - 60517 : "Kneel", - 60518 : "Sweep", - 60519 : "Primp", - 60520 : "Yawn", - 60521 : "Dance", - 60522 : "No", - 60523 : "Yes", - 60524 : "Laugh", - 60525 : "Clap", - 60526 : "Smile", - 60527 : "Anger", - 60528 : "Fear", - 60529 : "Sad", - 60530 : "Celebrate", - 60668 : "Celebrate", - 60669 : "Sleep", - 60602 : "Angry", - 60614 : "Clap", - 60622 : "Scared", - 60640 : "Laugh", - 60652 : "Sad", - 60657 : "Smile", - 60664 : "Wave", - 60665 : "Wink", - 60666 : "Yawn", - 60669 : "Sleep", - 60670 : "Dance", - 60676 : "Flirt", - 60677 : "Zombie dance", - 60678 : "Noisemaker", - - # Valentines day emote string options - 60671 : "Hello, I'm a Pirate, and I'm here to steal your heart.", - 60672 : "I just found the treasure I've been searching for.", - 60673 : "If you were a booger, I'd pick you first.", - 60674 : "Come to Tortuga often?", - 60675 : "Do you have a map? I just keep getting lost in your eyes.", - - 65000 : "Yes", - 65001 : "No", - - # Phrases for April Toon's week - 60100 : "Happy April Toons' Week!", - 60101 : "Welcome to my April Toons' Week party!", - 60110 : "Mickey is in Daisy Gardens.", - 60111 : "Daisy is in Toontown Central.", - 60112 : "Minnie is in The Brrrgh.", - 60113 : "Pluto is in Melodyland.", - 60114 : "Donald is sleepwalking at the Speedway.", - 60115 : "Goofy is in Dreamland.", - 60120 : "Mickey is acting like Daisy!", - 60121 : "Daisy is acting like Mickey!", - 60122 : "Minnie is acting like Pluto!", - 60123 : "Pluto is acting like Minnie!", - 60124 : "Pluto is talking!", - 60125 : "Goofy is acting like Donald!", - 60126 : "Donald is dreaming he is Goofy!", - 60130 : "Watch how far I can jump.", - 60131 : "Wow, you jumped really far!", - 60132 : "Hey, Doodles can talk!", - 60133 : "Did your Doodle just talk?", - 60140 : "Things sure are silly around here!", - 60141 : "How sillier could things get?", - - # Phrases for caroling - 60200 : "Deck the halls... ", - 60201 : "Load some pies...", - 60202 : "Joyful toons...", - 60203 : "Snowman heads...", - 60204 : "Toontown's merry...", - 60205 : "Lure good cheer...", - - 60220 : "Deck the halls with seltzer spray!\nHappy Winter Holiday!", - 60221 : "Load some pies into your sleigh!\nHappy Winter Holiday!", - 60222 : "Joyful toons bring Cogs dismay!\nHappy Winter Holiday!", - 60223 : "Snowman heads are hot today!\nHappy Winter Holiday!", - 60224 : "Toontown's merry, come what may!\nHappy Winter Holiday!", - 60225 : "Lure good cheer the Toontown way!\nHappy Winter Holiday!", - - # Phrases for Silly Story - 60301 : "Have you seen the Silly Meter?", - 60302 : "The Silly Meter is in Toon Hall.", - 60303 : "Things sure are getting silly around here!", - 60304 : "I saw a fire hydrant moving!", - 60305 : "Toontown is coming to life!", - 60306 : "Have you been to Flippy's new office?", - 60307 : "I caused a Silly Surge in battle!", - 60308 : "Let's defeat some Cogs to make Toontown sillier!", - - 60309 : "The Silly Meter is bigger and crazier than ever!", - 60310 : "Lots of hydrants have come alive!", - 60311 : "I saw a mail box moving!", - 60312 : "I watched a trash can wake up!", - 60313 : "How silly can it get?", - 60314 : "What\'s going to happen next?", - 60315 : "Something silly, I bet!", - 60316 : "Have you caused a Silly Surge yet?", - 60317 : "Let's defeat some Cogs to make Toontown sillier!", - - 60318 : "Cog Invasion!", - 60319 : "Incoming!", - 60320 : "Let\'s stop those Cogs!", - 60321 : "I miss the Silly Surges!", - 60322 : "Let\'s go stop an Invasion!", - 60323 : "Toontown is sillier than ever now!", - 60324 : "Have you seen something come alive?", - 60325 : "My favorites are the fire hydrants!", - 60326 : "My favorites are the mailboxes!", - 60327 : "My favorites are the trash cans!", - - 60328 : "Hooray! We stopped the Cog invasions!", - 60329 : "A hydrant helped me in battle!", - 60330 : "A hydrant boosted my Squirt Gags!", - 60331 : "A trash can boosted my Toon-Up Gags!", - 60332 : "A mailbox helped my Throw Gags!", - - # Phrases for Victory Parties (warning 60400 is in use) - 60350 : "Welcome to my Victory Party!", - 60351 : "This is a great Victory Party!", - 60352 : "We showed those Cogs who's boss!", - 60353 : "Good job helping end the Cog invasions!", - 60354 : "I bet this is driving the Cogs crazy!", - - 60355 : "Let's play Cog-O-War!", - 60356 : "My team won at Cog-O-War!", - 60357 : "It's nice to have fire hydrants, trash cans, and mailboxes here!", - 60358 : "I like the balloon of the Doodle biting the Cog!", - 60359 : "I like the balloon of the Cog covered in ice cream!", - 60360 : "I like the wavy Cog that flaps his arms!", - 60361 : "I jumped on a Cog's face!", - - # Phrases for Singing -## 9000 : 'Middle ' + 'G1', -## 9001 : 'Middle ' + 'A', -## 9002 : 'Middle ' + 'B', -## 9003 : 'Middle ' + 'C', -## 9004 : 'Middle ' + 'D', -## 9005 : 'Middle ' + 'E', -## 9006 : 'Middle ' + 'F', -## 9007 : 'Middle ' + 'G2' + } - -# Emote IDs - These are used in SC to determine if a msg is a animated emote -Emotes_Root = "EMOTES" -Emotes_Dances = "Dances" -Emotes_General = "General" -Emotes_Music = "Music" -Emotes_Expressions = "Emotions" -Emote_ShipDenied = "Cannot emote while sailing." -Emote_MoveDenied = "Cannot emote while moving." -Emote_CombatDenied = "Cannot emote while in combat." -Emote_CannonDenied = "Cannot emote while using a cannon." -Emote_SwimDenied = "Cannot emote while swimming." -Emote_ParlorGameDenied = "Cannot emote while playing a parlor game." -Emotes = (60505, 60506, 60509, 60510, 60511, 60516, 60519, 60520, 60521, 60522, 60523, 60524, 60525, 60526, 60527, 60528, 60529, 60530, 60602, 60607, 60611, 60614, 60615, 60622, 60627, 60629, 60632, 60636, 60638, 60640, 60644, 60652, 60654, 60657, 60658, 60663, 60664, 60665, 60666, 60668, 60669, 60612, 60661, 60645, 60629, 60641, 60654, 60630, 60670, 60633, - # Valentines Day Emote - 60676, - # Halloween Emote - 60677, - # Yes/No - 65000, 65001, - # Kneel - 60517, - # New Years Emote - 60678, - ) - -# These indexes, defined above, will construct a submenu in the FACTORY menu -# to allow the user to describe all the places he might want to meet SCFactoryMeetMenuIndexes = (1903, 1904, 1906, 1907, 1908, 1910, 1913, 1915, 1916, 1917, 1919, 1922, 1923, 1924, 1932, 1940, 1941) @@ -2967,7 +2078,6 @@ 11017 : "Snow doubt about it!", 11018 : "Snow far, snow good!", 11019 : "Yule be sorry!", - 11020 : "Have a Wonderful Winter!", # Valentines 12000 : "Be mine!", @@ -3003,28 +2113,10 @@ 13006 : "You're my four leaf clover!", 13007 : "You're my lucky charm!", - # Summer Estate Party phrases (seasonal catalog) - 14000 : "Let's have a summer Estate party!", - 14001 : "It's party time!", - 14002 : "Last one in the pond is a rotten Cog!", - 14003 : "Group Doodle training time!", - 14004 : "Doodle training time!", - 14005 : "Your Doodle is cool!", - 14006 : "What tricks can your Doodle do?", - 14007 : "Time for Cannon Pinball!", - 14008 : "Cannon Pinball rocks!", - 14009 : "Your Estate rocks!", - 14010 : "Your Garden is cool!", - 14011 : "Your Estate is cool!", - - - - #Potential racing phrases for purchase } - # indices into cog phrase arrays SCMenuCommonCogIndices = (20000, 20004) SCMenuCustomCogIndices = { @@ -3065,47 +2157,8 @@ # Pirates Speedchat PSCMenuExpressions = "EXPRESSIONS" -PSCMenuGreetings = "GREETINGS" -PSCMenuGoodbyes = "GOODBYES" -PSCMenuFriendly = "FRIENDLY" -PSCMenuHappy = "HAPPY" -PSCMenuSad = "SAD" -PSCMenuSorry = "SORRY" -PSCMenuCombat = "COMBAT" -PSCMenuSeaCombat = "SEA COMBAT" -PSCMenuPlaces = "PLACES" -PSCMenuLetsSail = "LET\'S SAIL..." -PSCMenuLetsHeadTo = "LET\'S HEAD TO..." -PSCMenuHeadToPortRoyal = "PORT ROYAL" -PSCMenuWhereIs = "WHERE IS ..?" -PSCMenuWhereIsPortRoyal = "PORT ROYAL" -PSCMenuWhereIsTortuga = "TORTUGA" -PSCMenuWhereIsPadresDelFuego = "PADRES DEL FUEGO" -PSCMenuWhereIsLasPulgas = "LAS PULGAS" -PSCMenuWhereIsLosPadres = "LOS PADRES" -PSCMenuDirections = "DIRECTIONS" PSCMenuInsults = "INSULTS" -PSCMenuCompliments = "COMPLIMENTS" -PSCMenuCardGames = "CARD GAMES" -PSCMenuPoker = "POKER" -PSCMenuBlackjack = "BLACKJACK" -PSCMenuMinigames = "MINIGAMES" -PSCMenuFishing = "FISHING" -PSCMenuCannonDefense = "CANNON DEFENSE" -PSCMenuPotions = "POTION BREWING" -PSCMenuRepair = "REPAIR" -PSCMenuInvitations = "INVITATIONS" -PSCMenuVersusPlayer = "VERSUS" -PSCMenuHunting = "HUNTING" -PSCMenuQuests = "QUESTS" -PSCMenuGM = "GM" - - - -# Grandfathered Speedchat Headers -PSCMenuShips = "SHIPS" -PSCMenuAdventures = "ADVENTURE" - +PSCMenuPlaces = "PLACES" # Gateway Speedchat GWSCMenuHello = "GREETINGS" @@ -3189,7 +2242,7 @@ # AvatarPanel.py AvatarPanelFriends = "Friends" AvatarPanelWhisper = "Whisper" -AvatarPanelSecrets = "True Friends" +AvatarPanelSecrets = "Secrets" AvatarPanelGoTo = "Go To" AvatarPanelIgnore = "Ignore" AvatarPanelStopIgnore = "Stop Ignoring" @@ -3213,89 +2266,3 @@ TeleportPanelUnavailableHood = "%s is not available right now; try again later." TeleportPanelDenySelf = "You can't go to yourself!" TeleportPanelOtherShard = "%(avName)s is in district %(shardName)s, and you're in district %(myShardName)s. Do you want to switch to %(shardName)s?" - -KartRacingMenuSections = [ - -1, - "PLACES", - "RACES", - "TRACKS", - "COMPLIMENTS", - "TAUNTS" -] - -AprilToonsMenuSections = [ - -1, - "GREETINGS", - "PLAYGROUNDS", - "CHARACTERS", - "ESTATES" -] - -SillyHolidayMenuSections = [ --1, -"WORLD", -"BATTLE", -] - -CarolMenuSections = [ --1, -] - -VictoryPartiesMenuSections = [ - -1, - "PARTY", - "ITEMS", -] - -GolfMenuSections = [ - -1, - "COURSES", - "TIPS", - "COMMENTS", -] - -BoardingMenuSections = [ -"GROUP", -"Let's go to...", -"We're going to...", --1, -] - -SingingMenuSections = [ --1 -] - -WhiteListMenu = [ --1, -"WHITELIST" -] - -# TTAccount.py -# Fill in %s with phone number from account server -TTAccountCallCustomerService = "Please call Customer Service at %s." -# Fill in %s with phone number from account server -TTAccountCustomerServiceHelp = "\nIf you need help, please call Customer Service at %s." -TTAccountIntractibleError = "An error occurred." - - -def timeElapsedString(timeDelta): - timeDelta = abs(timeDelta) - if timeDelta.days > 0: - if timeDelta.days == 1: - return "1 day ago" - else: - return "%s days ago" % timeDelta.days - - elif timeDelta.seconds / 3600 > 0: - if timeDelta.seconds / 3600 == 1: - return "1 hour ago" - else: - return "%s hours ago" % (timeDelta.seconds / 3600) - - else: - if timeDelta.seconds / 60 < 2: - return "1 minute ago" - else: - return "%s minutes ago" % (timeDelta.seconds / 60) - - diff --git a/otp/src/otpbase/SuperSecretStringDecoder.py b/otp/src/otpbase/SuperSecretStringDecoder.py index b7bba1f4..aa17465b 100644 --- a/otp/src/otpbase/SuperSecretStringDecoder.py +++ b/otp/src/otpbase/SuperSecretStringDecoder.py @@ -9,4 +9,4 @@ def decode(s): if __name__ == '__main__': data = sys.stdin.readline() - print decode(data) + print(decode(data)) diff --git a/otp/src/otpbase/extractSpeedChatStrings.py b/otp/src/otpbase/extractSpeedChatStrings.py index 6be75161..ea60367e 100644 --- a/otp/src/otpbase/extractSpeedChatStrings.py +++ b/otp/src/otpbase/extractSpeedChatStrings.py @@ -4,12 +4,12 @@ msgs = set() -msgs.update(SpeedChatStaticText.values()) -msgs.update(CustomSCStrings.values()) +msgs.update(list(SpeedChatStaticText.values())) +msgs.update(list(CustomSCStrings.values())) -print '=== START SC STRINGS ===' +print('=== START SC STRINGS ===') for msg in msgs: if len(msg): - print msg + print(msg) diff --git a/otp/src/otpbase/fpsAnalyzer.py b/otp/src/otpbase/fpsAnalyzer.py index bfc002fe..25b42fe9 100644 --- a/otp/src/otpbase/fpsAnalyzer.py +++ b/otp/src/otpbase/fpsAnalyzer.py @@ -4,7 +4,7 @@ importing into Excel. """ import time -import cPickle +import pickle class Sample: def __init__(self, line, columns): @@ -18,7 +18,7 @@ def __init__(self, line, columns): # Store the cpuSpeed as an integer value in MHz, so it # will be more concrete. - self.cpuSpeed = map(lambda s: int(float(s) * 1000 + 0.5), cs) + self.cpuSpeed = [int(float(s) * 1000 + 0.5) for s in cs] else: self.osInfo = ('?', 0, 0, 0, 0) self.cpuSpeed = (0, 0) @@ -63,7 +63,7 @@ def write(self, file): self.processMemory or 0, self.pageFileUsage or 0, self.physicalMemory or 0, self.pageFaultCount or 0, '%s.%d.%d.%d' % self.osInfo, - '%0.03f,%0.03f' % map(lambda s: s / 1000.0, self.cpuSpeed)) + '%0.03f,%0.03f' % [s / 1000.0 for s in self.cpuSpeed]) file.write('%s|client-fps|AIServer:%s|%s|%s\n' % ( date, self.serverId, self.avId, info)) @@ -180,18 +180,18 @@ def quickAnalyzeCards(self, filename): file = open('card_performance.csv', 'w') - deviceList = quickCards.keys() + deviceList = list(quickCards.keys()) deviceList.sort() for deviceTuple in deviceList: options = quickCards[deviceTuple] - codes = options.keys() + codes = list(options.keys()) codes.sort() for gameOptionsCode in codes: totFps, count = options[gameOptionsCode] avgFps = totFps / count - print >> file, '%s, %s, %s, %s' % ( + print('%s, %s, %s, %s' % ( self.__formatDevice(deviceTuple), - gameOptionsCode, avgFps, count) + gameOptionsCode, avgFps, count), file=file) def readText(self, filename, firstLine = 0, lastLine = None): """ Reads the client-fps lines from the indicated logfile into @@ -251,12 +251,12 @@ def writePickle(self, filename): assert filename.endswith('.pkl') file = open(filename, 'wb') - cPickle.dump(self, file, cPickle.HIGHEST_PROTOCOL) + pickle.dump(self, file, pickle.HIGHEST_PROTOCOL) def readPickle(self, filename): assert filename.endswith('.pkl') file = open(filename, 'rb') - obj = cPickle.load(file) + obj = pickle.load(file) assert obj.__class__ == self.__class__ self.__dict__ = obj.__dict__ @@ -310,7 +310,7 @@ def collectPlayers(self): self.hardware.setdefault((player, session.getHardware()), []).append(session) - self.players = playerDict.values() + self.players = list(playerDict.values()) for player in self.players: player.calcFrameRate() @@ -367,7 +367,7 @@ def __analyze(self): cpuSpeedTrue = {} cpuSpeedEffective = {} cpuPowersave = {} - for tuple, sessions in self.hardware.items(): + for tuple, sessions in list(self.hardware.items()): player = tuple[0] session = sessions[0] if session.vendorId != None: @@ -421,11 +421,11 @@ def __addSample(self, dict, key, sample): def reportData(self, filename, dict, formatKey, calcValue): file = open(filename, 'w') - items = dict.items() + items = list(dict.items()) items.sort() for key, samples in items: - print >> file, '%s, %s' % ( - formatKey(key), calcValue(samples)) + print('%s, %s' % ( + formatKey(key), calcValue(samples)), file=file) def __formatDevice(self, tuple): vendorId, deviceId = tuple @@ -511,7 +511,7 @@ def enquote(self, s): def __averageFps(self, samples): return '%s, %s' % ( - sum(map(lambda s: s.fps, samples)) / len(samples), len(samples)) + sum([s.fps for s in samples]) / len(samples), len(samples)) def __countPlayers(self, players): """ Returns total number of players whose avg fps is less than @@ -519,8 +519,8 @@ def __countPlayers(self, players): 25, and total number of players whose avg fps is more than 25. """ - numLow = sum(map(lambda p: p.lowFps, players)) - numHigh = sum(map(lambda p: p.highFps, players)) + numLow = sum([p.lowFps for p in players]) + numHigh = sum([p.highFps for p in players]) numMed = len(players) - numLow - numHigh return '%s, %s, %s' % (numLow, numMed, numHigh) diff --git a/otp/src/publish/FreezeTool.py b/otp/src/publish/FreezeTool.py index e7968ba5..435d1143 100644 --- a/otp/src/publish/FreezeTool.py +++ b/otp/src/publish/FreezeTool.py @@ -12,7 +12,7 @@ ctprojs = os.getenv("CTPROJS") if not ctprojs: - print "CTPROJS is not defined." + print("CTPROJS is not defined.") sys.exit(1) # These are modules that Python always tries to import up-front. They @@ -153,7 +153,7 @@ def setupPackages(): for moduleName in packages: str = 'import %s' % (moduleName) - exec str + exec(str) module = sys.modules[moduleName] modulefinder.AddPackagePath(moduleName, module.__path__[0]) @@ -275,7 +275,7 @@ def done(self): excludes = [] includes = [] autoIncludes = [] - for moduleName, token in self.modules.items(): + for moduleName, token in list(self.modules.items()): if token == self.MTInclude: includes.append(moduleName) elif token == self.MTAuto: @@ -298,7 +298,7 @@ def done(self): pass # Now, any new modules we found get added to the export list. - for moduleName in self.mf.modules.keys(): + for moduleName in list(self.mf.modules.keys()): if moduleName not in self.modules: self.modules[moduleName] = self.MTAuto @@ -327,8 +327,8 @@ def done(self): if missing: error = "There are some missing modules: %r" % missing - print error - raise StandardError, error + print(error) + raise Exception(error) def mangleName(self, moduleName): return 'M_' + moduleName.replace('.', '__') @@ -339,7 +339,7 @@ def generateCode(self, basename): # referencing. moduleNames = [] - for moduleName, token in self.modules.items(): + for moduleName, token in list(self.modules.items()): prevToken = self.previousModules.get(moduleName, None) if token == self.MTInclude or token == self.MTAuto: # Include this module (even if a previous pass @@ -358,7 +358,7 @@ def generateCode(self, basename): # actual filename we put in there is meaningful only for stack # traces, so we'll just use the module name. replace_paths = [] - for moduleName, module in self.mf.modules.items(): + for moduleName, module in list(self.mf.modules.items()): if module.__code__: origPathname = module.__code__.co_filename replace_paths.append((origPathname, moduleName)) @@ -366,7 +366,7 @@ def generateCode(self, basename): # Now that we have built up the replacement mapping, go back # through and actually replace the paths. - for moduleName, module in self.mf.modules.items(): + for moduleName, module in list(self.mf.modules.items()): if module.__code__: co = self.mf.replace_paths_in_code(module.__code__) module.__code__ = co; @@ -579,13 +579,13 @@ def compileExe(self, basename, sourceList): for compile in compileList: - print compile + print(compile) if os.system(compile) != 0: - raise StandardError + raise Exception - print link + print(link) if os.system(link) != 0: - raise StandardError + raise Exception def compileDll(self, basename, sourceList): if sys.platform == 'win32': @@ -647,13 +647,13 @@ def compileDll(self, basename, sourceList): for compile in compileList: - print compile + print(compile) if os.system(compile) != 0: - raise StandardError + raise Exception - print link + print(link) if os.system(link) != 0: - raise StandardError + raise Exception def makeModuleDef(self, mangledName, code, isStatic): result = '' diff --git a/otp/src/snapshot/BatchRequests.py b/otp/src/snapshot/BatchRequests.py index f006b1d0..7045bdb0 100644 --- a/otp/src/snapshot/BatchRequests.py +++ b/otp/src/snapshot/BatchRequests.py @@ -1,10 +1,10 @@ import sys import time -import urllib +import urllib.request, urllib.parse, urllib.error import string if len(sys.argv) < 3 or len(sys.argv) > 3: - print "usage: cat avIDs.txt | BatchRequests.py HOSTNAME PORTNUMBER" + print("usage: cat avIDs.txt | BatchRequests.py HOSTNAME PORTNUMBER") sys.exit(1) assert len(sys.argv) == 3 @@ -13,12 +13,12 @@ ids = sys.stdin.readlines() -ids = map(string.strip,ids) +ids = list(map(string.strip,ids)) -opener = urllib.FancyURLopener({}) +opener = urllib.request.FancyURLopener({}) for avId in ids: - print ("%s..." % avId), + print(("%s..." % avId), end=' ') f = opener.open("http://%s:%s/queueSnapshot?avatarId=%s" % (hostname,portnum,avId)) #f.read() # Do this if we want to check the result...which we don't if we want to be fast - print "done" + print("done") diff --git a/otp/src/snapshot/SnapshotDispatcherUD.py b/otp/src/snapshot/SnapshotDispatcherUD.py index a468387a..4c0b0163 100644 --- a/otp/src/snapshot/SnapshotDispatcherUD.py +++ b/otp/src/snapshot/SnapshotDispatcherUD.py @@ -6,7 +6,7 @@ from direct.http.WebRequest import WebRequestDispatcher from direct.task import Task -import Queue +import queue import socket #-------------------------------------------------- @@ -48,7 +48,7 @@ def __init__(self, air): self.numServedAtLastLog = 0 # Unassigned work - self.jobQueue = Queue.Queue() + self.jobQueue = queue.Queue() # If the queue gets longer than this, log warnings self.maxSafeJobQueueLength = 1000 @@ -238,7 +238,7 @@ def requestNewWork(self,rendererLoc): return try: job = self.jobQueue.get_nowait() - except Queue.Empty: + except queue.Empty: # No work to give! Do nothing. return diff --git a/otp/src/snapshot/SnapshotRendererUD.py b/otp/src/snapshot/SnapshotRendererUD.py index 5eece008..f64ff886 100644 --- a/otp/src/snapshot/SnapshotRendererUD.py +++ b/otp/src/snapshot/SnapshotRendererUD.py @@ -6,7 +6,7 @@ from direct.directnotify.DirectNotifyGlobal import directNotify from direct.task import Task -import Queue +import queue from direct.distributed.AsyncRequest import AsyncRequest from pandac.PandaModules import Thread @@ -84,7 +84,7 @@ def delete(self): # -- Internal methods -- def renderSnapshot(self,jobId,avatarId,avatarDNA,writeToFile): - print "OTP-level renderSnapshot method called! You should override this!" + print("OTP-level renderSnapshot method called! You should override this!") def errorFetchingAvatar(self,jobId,avatarId): """ diff --git a/otp/src/snapshot/SnapshotWebServer.py b/otp/src/snapshot/SnapshotWebServer.py index 677a3c77..fd05bb10 100644 --- a/otp/src/snapshot/SnapshotWebServer.py +++ b/otp/src/snapshot/SnapshotWebServer.py @@ -29,7 +29,7 @@ def getSnapshot(self,avatarId): except: return "Error parsing argument avatarId. Gimme an integer!" - print "getSnapshot %s" % avatarId + print("getSnapshot %s" % avatarId) self.requestQueue.put_nowait(avatarId) diff --git a/otp/src/speedchat/ColorSpace.py b/otp/src/speedchat/ColorSpace.py index b2c6bb44..c19f40d6 100644 --- a/otp/src/speedchat/ColorSpace.py +++ b/otp/src/speedchat/ColorSpace.py @@ -72,10 +72,10 @@ def rgb2yuv(r,g,b): y = .299*r + .587*g + .114*b u = -.169*r - .331*g + .500*b + .5 v = .500*r - .419*g - .081*b + .5 - return tuple(map(lambda x: min(max(x,0),1), (y,u,v))) + return tuple([min(max(x,0),1) for x in (y,u,v)]) def yuv2rgb(y,u,v): r = y - 0.0009267*(u-.5) + 1.4016868*(v-.5) g = y - 0.3436954*(u-.5) - 0.7141690*(v-.5) b = y + 1.7721604*(u-.5) + 0.0009902*(v-.5) - return tuple(map(lambda x: min(max(x,0),1), (r,g,b))) + return tuple([min(max(x,0),1) for x in (r,g,b)]) diff --git a/otp/src/speedchat/SCColorPanel.py b/otp/src/speedchat/SCColorPanel.py index a1355286..f8c6b66d 100644 --- a/otp/src/speedchat/SCColorPanel.py +++ b/otp/src/speedchat/SCColorPanel.py @@ -1,4 +1,4 @@ -from SCColorScheme import SCColorScheme +from .SCColorScheme import SCColorScheme from direct.tkwidgets.Valuator import * colors = {} @@ -6,7 +6,7 @@ def scRgbPanel(callback, title, initColor): def getScaledColor(color, s): - return tuple(map(lambda x: x*s, color)) + return tuple([x*s for x in color]) sInitColor = getScaledColor(initColor, 255.) vgp = ValuatorGroupPanel(title=title, dim=3, @@ -55,7 +55,7 @@ def updateAllPanels(): colors['frameColor'] = cs.getFrameColor() # update the panels - for panelName in colors.keys(): + for panelName in list(colors.keys()): p = panels[panelName].component('valuatorGroup') c = colors[panelName] p.component('valuator0').set(math.floor(c[0]*255)) @@ -84,7 +84,7 @@ def adjustSCColors(): 'rolloverColor': cs.getRolloverColor(), 'frameColor': cs.getFrameColor(), } - for colorName in colors.keys(): + for colorName in list(colors.keys()): def handleCallback(color, colorName=colorName): global colors colors[colorName] = tuple(color) diff --git a/otp/src/speedchat/SCColorScheme.py b/otp/src/speedchat/SCColorScheme.py index 91b5d37e..75af9e29 100644 --- a/otp/src/speedchat/SCColorScheme.py +++ b/otp/src/speedchat/SCColorScheme.py @@ -1,6 +1,6 @@ """SCColorScheme.py: contains the SCColorScheme class""" -from ColorSpace import * +from .ColorSpace import * class SCColorScheme: """ SCColorScheme is a class that holds all the information diff --git a/otp/src/speedchat/SCCustomMenu.py b/otp/src/speedchat/SCCustomMenu.py index 8cbd191a..f8ebb72b 100644 --- a/otp/src/speedchat/SCCustomMenu.py +++ b/otp/src/speedchat/SCCustomMenu.py @@ -1,7 +1,7 @@ """SCCustomMenu.py: contains the SCCustomMenu class""" -from SCMenu import SCMenu -from SCCustomTerminal import SCCustomTerminal +from .SCMenu import SCMenu +from .SCCustomTerminal import SCCustomTerminal from otp.otpbase.OTPLocalizer import CustomSCStrings class SCCustomMenu(SCMenu): @@ -26,5 +26,5 @@ def __customMessagesChanged(self): return for msgIndex in lt.customMessages: - if CustomSCStrings.has_key(msgIndex): + if msgIndex in CustomSCStrings: self.append(SCCustomTerminal(msgIndex)) diff --git a/otp/src/speedchat/SCCustomTerminal.py b/otp/src/speedchat/SCCustomTerminal.py index db24fde5..e64f2bdb 100644 --- a/otp/src/speedchat/SCCustomTerminal.py +++ b/otp/src/speedchat/SCCustomTerminal.py @@ -1,6 +1,6 @@ """SCCustomTerminal.py: contains the SCCustomTerminal class""" -from SCTerminal import SCTerminal +from .SCTerminal import SCTerminal from otp.otpbase.OTPLocalizer import CustomSCStrings # args: textId diff --git a/otp/src/speedchat/SCDecoders.py b/otp/src/speedchat/SCDecoders.py index 5be94e5a..ce1d24ed 100644 --- a/otp/src/speedchat/SCDecoders.py +++ b/otp/src/speedchat/SCDecoders.py @@ -5,6 +5,6 @@ string that corresponds to the encoded message. If there is a problem, None is returned. """ -from SCStaticTextTerminal import decodeSCStaticTextMsg -from SCCustomTerminal import decodeSCCustomMsg -from SCEmoteTerminal import decodeSCEmoteWhisperMsg +from .SCStaticTextTerminal import decodeSCStaticTextMsg +from .SCCustomTerminal import decodeSCCustomMsg +from .SCEmoteTerminal import decodeSCEmoteWhisperMsg diff --git a/otp/src/speedchat/SCElement.py b/otp/src/speedchat/SCElement.py index 1ec3bcea..c4cbea94 100644 --- a/otp/src/speedchat/SCElement.py +++ b/otp/src/speedchat/SCElement.py @@ -3,8 +3,8 @@ from pandac.PandaModules import * from direct.gui.DirectGui import * from direct.task import Task -from SCConstants import * -from SCObject import SCObject +from .SCConstants import * +from .SCObject import SCObject from direct.showbase.PythonUtil import boolEqual from otp.otpbase import OTPGlobals @@ -198,7 +198,7 @@ def finalize(self, dbArgs={}): # if we're given a 'center' value for the text alignment, # calculate the appropriate text X position textX = 0 - if dbArgs.has_key('text_align'): + if 'text_align' in dbArgs: if dbArgs['text_align'] == TextNode.ACenter: textX = self.width/2. diff --git a/otp/src/speedchat/SCEmoteMenu.py b/otp/src/speedchat/SCEmoteMenu.py index a510669b..3af0cd15 100644 --- a/otp/src/speedchat/SCEmoteMenu.py +++ b/otp/src/speedchat/SCEmoteMenu.py @@ -1,7 +1,7 @@ """SCEmoteMenu.py: contains the SCEmoteMenu class""" -from SCMenu import SCMenu -from SCEmoteTerminal import SCEmoteTerminal +from .SCMenu import SCMenu +from .SCEmoteTerminal import SCEmoteTerminal class SCEmoteMenu(SCMenu): """ SCEmoteMenu represents a menu of SCEmoteTerminals. """ diff --git a/otp/src/speedchat/SCEmoteTerminal.py b/otp/src/speedchat/SCEmoteTerminal.py index 2fdeb851..212fcb78 100644 --- a/otp/src/speedchat/SCEmoteTerminal.py +++ b/otp/src/speedchat/SCEmoteTerminal.py @@ -1,7 +1,7 @@ """SCEmoteTerminal.py: contains the SCEmoteTerminal class""" from direct.gui.DirectGui import * -from SCTerminal import SCTerminal +from .SCTerminal import SCTerminal from otp.otpbase.OTPLocalizer import EmoteList, EmoteWhispers from otp.avatar import Emote diff --git a/otp/src/speedchat/SCGMTextTerminal.py b/otp/src/speedchat/SCGMTextTerminal.py index e112e336..6e3ff26d 100644 --- a/otp/src/speedchat/SCGMTextTerminal.py +++ b/otp/src/speedchat/SCGMTextTerminal.py @@ -1,6 +1,6 @@ """SCGMTextTerminal.py: contains the SCGMTextTerminal class""" -from SCTerminal import SCTerminal +from .SCTerminal import SCTerminal from otp.speedchat import SpeedChatGMHandler # args: textId diff --git a/otp/src/speedchat/SCMenu.py b/otp/src/speedchat/SCMenu.py index f56d9d0f..df6738e3 100644 --- a/otp/src/speedchat/SCMenu.py +++ b/otp/src/speedchat/SCMenu.py @@ -3,9 +3,9 @@ from pandac.PandaModules import * from direct.gui.DirectGui import * from direct.task import Task -from SCConstants import * +from .SCConstants import * from direct.interval.IntervalGlobal import * -from SCObject import SCObject +from .SCObject import SCObject from direct.showbase.PythonUtil import makeTuple import types @@ -106,7 +106,7 @@ def destroy(self): del self.bgBottomRight self.bg.removeNode() del self.bg - + self.holder = None for member in self.__members: member.destroy() @@ -131,7 +131,7 @@ def rebuildFromStructure(self, structure, title=None): """ This will destroy the current content of this menu and replace it with the tree described by 'structure'.""" self.clearMenu() - + if title: holder = self.getHolder() if holder: @@ -160,9 +160,9 @@ def appendFromStructure(self, structure): Emotes are attached to terminal elements using dictionaries: {terminal:emoteId} """ - from SpeedChatTypes import SCMenuHolder, SCStaticTextTerminal, SCGMTextTerminal + from .SpeedChatTypes import SCMenuHolder, SCStaticTextTerminal, SCGMTextTerminal from otp.otpbase import OTPLocalizer - + def addChildren(menu, childList): """ this recursive function adds children to an SCMenu according to the specification in 'childList'. See above @@ -172,8 +172,8 @@ def addChildren(menu, childList): # if it's a dictionary, there's an emote attached emote = None if type(child) == type({}): - assert len(child.keys()) == 1 - item = child.keys()[0] + assert len(list(child.keys())) == 1 + item = list(child.keys())[0] emote = child[item] child = item @@ -205,8 +205,8 @@ def addChildren(menu, childList): subMenu = menuType() subMenuChildren = child[2:] if emote: - print ('warning: tried to link emote %s ' - 'to a menu holder' % emote) + print(('warning: tried to link emote %s ' + 'to a menu holder' % emote)) holder = SCMenuHolder(holderTitle, menu=subMenu) menu.append(holder) addChildren(subMenu, subMenuChildren) @@ -215,7 +215,7 @@ def addChildren(menu, childList): menu.append(terminal) else: raise ('error parsing speedchat structure. ' - 'invalid child: %s' % child) + 'invalid child: %s') addChildren(self, structure) # clean up memory leak @@ -347,7 +347,7 @@ def memberGainedInputFocus(self, member): # otherwise, don't switch the active member right away. # if this element maintains the input focus for N seconds, # make it active - + def doActiveMemberSwitch(task, self=self, member=member): self.activeCandidate = None self.__setActiveMember(member) @@ -506,7 +506,7 @@ def finalize(self): # put the members in the right place, and tell them what size # they should be - for i in xrange(len(visibleMembers)): + for i in range(len(visibleMembers)): member = visibleMembers[i] member.setPos(0,0,-i * maxHeight) member.setDimensions(memberWidth, memberHeight) @@ -528,7 +528,7 @@ def finalize(self): # keep the menu from going off the top of the screen if self.getZ(aspect2d) > 1.: self.setZ(aspect2d, 1.) - + # set up the background frame sX = memberWidth sZ = memberHeight * len(visibleMembers) @@ -583,7 +583,7 @@ def finalize(self): # above. def append(self, element): # Appends a single element to the list so far. - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) self.__members.append(element) self.privMemberListChanged(added=[element]) @@ -603,40 +603,40 @@ def __getitem__(self, index): return self.__members[index] def __setitem__(self, index, value): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) removedMember = self.__members[index] self.__members[index] = value self.privMemberListChanged(added=[value], removed=[removedMember]) def __delitem__(self, index): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) removedMember = self.__members[index] del self.__members[index] self.privMemberListChanged(removed=[removedMember]) def __getslice__(self, i, j): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) return self.__members[i:j] def __setslice__(self, i, j, s): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) removedMembers = self.__members[i:j] self.__members[i:j] = list(s) self.privMemberListChanged(added=list(s), removed=removedMembers) def __delslice__(self, i, j): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) removedMembers = self.__members[i:j] del self.__members[i:j] self.privMemberListChanged(removed=removedMembers) def __iadd__(self, other): - if isinstance(self.__members, types.TupleType): + if isinstance(self.__members, tuple): self.__members = list(self.__members) if isinstance(other, SCMenu): otherMenu = other @@ -648,7 +648,7 @@ def __iadd__(self, other): def privMemberListChanged(self, added=None, removed=None): assert added or removed - + if removed is not None: for element in removed: # if this element is our active member, we no longer have an diff --git a/otp/src/speedchat/SCMenuHolder.py b/otp/src/speedchat/SCMenuHolder.py index 3b937d95..d82c442d 100644 --- a/otp/src/speedchat/SCMenuHolder.py +++ b/otp/src/speedchat/SCMenuHolder.py @@ -2,9 +2,9 @@ from pandac.PandaModules import * from direct.gui.DirectGui import * -from SCObject import SCObject -from SCElement import SCElement -from SCMenu import SCMenu +from .SCObject import SCObject +from .SCElement import SCElement +from .SCMenu import SCMenu import types class SCMenuHolder(SCElement): diff --git a/otp/src/speedchat/SCSettings.py b/otp/src/speedchat/SCSettings.py index b1abdcaa..b9d7f338 100644 --- a/otp/src/speedchat/SCSettings.py +++ b/otp/src/speedchat/SCSettings.py @@ -1,6 +1,6 @@ """SCSettings.py: contains the SCSettings class""" -from SCColorScheme import SCColorScheme +from .SCColorScheme import SCColorScheme from otp.otpbase import OTPLocalizer class SCSettings: diff --git a/otp/src/speedchat/SCStaticTextTerminal.py b/otp/src/speedchat/SCStaticTextTerminal.py index 71c33190..bac38392 100644 --- a/otp/src/speedchat/SCStaticTextTerminal.py +++ b/otp/src/speedchat/SCStaticTextTerminal.py @@ -1,6 +1,6 @@ """SCStaticTextTerminal.py: contains the SCStaticTextTerminal class""" -from SCTerminal import SCTerminal +from .SCTerminal import SCTerminal from otp.otpbase.OTPLocalizer import SpeedChatStaticText # args: textId diff --git a/otp/src/speedchat/SCTerminal.py b/otp/src/speedchat/SCTerminal.py index cb213e62..f91cbbcf 100644 --- a/otp/src/speedchat/SCTerminal.py +++ b/otp/src/speedchat/SCTerminal.py @@ -1,8 +1,8 @@ """SCTerminal.py: contains the SCTerminal class""" -from SCElement import SCElement -from SCObject import SCObject -from SCMenu import SCMenu +from .SCElement import SCElement +from .SCObject import SCObject +from .SCMenu import SCMenu from direct.fsm.StatePush import StateVar, FunctionCall from direct.showbase.DirectObject import DirectObject from otp.avatar import Emote @@ -106,12 +106,12 @@ def linkedEmoteEnabled(self): def getCharges(self): return self.__numCharges - + def setCharges(self, nCharges): self.__numCharges = nCharges - if (nCharges is 0): + if (nCharges == 0): self.setDisabled(True) - + # support for disabled terminals def isDisabled(self): return self.__disabled or (self.isWhispering() and not self.isWhisperable()) @@ -217,7 +217,7 @@ def exitVisible(self): self.ignore(Emote.globalEmote.EmoteEnableStateChanged) def getDisplayText(self): - if self.getCharges() is not -1: + if self.getCharges() != -1: return self.text + " (%s)" % self.getCharges() else: return self.text diff --git a/otp/src/speedchat/SpeedChat.py b/otp/src/speedchat/SpeedChat.py index 96f2f3f4..8e3f80b5 100644 --- a/otp/src/speedchat/SpeedChat.py +++ b/otp/src/speedchat/SpeedChat.py @@ -1,9 +1,9 @@ """SpeedChat.py: contains the SpeedChat class""" from direct.showbase.PythonUtil import boolEqual -from SpeedChatTypes import * -from SCSettings import SCSettings -from SCTerminal import SCWhisperModeChangeEvent +from .SpeedChatTypes import * +from .SCSettings import SCSettings +from .SCTerminal import SCWhisperModeChangeEvent from otp.otpbase import OTPLocalizer # for speedchat tech details, see the bottom of this file. diff --git a/otp/src/speedchat/SpeedChatGlobals.py b/otp/src/speedchat/SpeedChatGlobals.py index 027cab14..5b90065f 100644 --- a/otp/src/speedchat/SpeedChatGlobals.py +++ b/otp/src/speedchat/SpeedChatGlobals.py @@ -9,12 +9,12 @@ # speedChat.getEventName(eventBaseName) # where 'speedChat' is your SpeedChat object, and 'eventBaseName' is # one of the following: -from SCTerminal import SCTerminalSelectedEvent -from SCTerminal import SCTerminalLinkedEmoteEvent -from SCStaticTextTerminal import SCStaticTextMsgEvent -from SCGMTextTerminal import SCGMTextMsgEvent -from SCCustomTerminal import SCCustomMsgEvent -from SCEmoteTerminal import SCEmoteMsgEvent, SCEmoteNoAccessEvent +from .SCTerminal import SCTerminalSelectedEvent +from .SCTerminal import SCTerminalLinkedEmoteEvent +from .SCStaticTextTerminal import SCStaticTextMsgEvent +from .SCGMTextTerminal import SCGMTextMsgEvent +from .SCCustomTerminal import SCCustomMsgEvent +from .SCEmoteTerminal import SCEmoteMsgEvent, SCEmoteNoAccessEvent # SCColorSchemeChangeMsgEvent diff --git a/otp/src/speedchat/SpeedChatTypes.py b/otp/src/speedchat/SpeedChatTypes.py index 8282f1c8..2607145a 100644 --- a/otp/src/speedchat/SpeedChatTypes.py +++ b/otp/src/speedchat/SpeedChatTypes.py @@ -1,19 +1,19 @@ """SpeedChatTypes.py: SpeedChat types """ -from SCObject import SCObject +from .SCObject import SCObject -from SCMenu import SCMenu +from .SCMenu import SCMenu -from SCElement import SCElement -from SCMenuHolder import SCMenuHolder -from SCTerminal import SCTerminal +from .SCElement import SCElement +from .SCMenuHolder import SCMenuHolder +from .SCTerminal import SCTerminal -from SCCustomMenu import SCCustomMenu -from SCEmoteMenu import SCEmoteMenu +from .SCCustomMenu import SCCustomMenu +from .SCEmoteMenu import SCEmoteMenu -from SCStaticTextTerminal import SCStaticTextTerminal -from SCGMTextTerminal import SCGMTextTerminal -from SCCustomTerminal import SCCustomTerminal -from SCEmoteTerminal import SCEmoteTerminal +from .SCStaticTextTerminal import SCStaticTextTerminal +from .SCGMTextTerminal import SCGMTextTerminal +from .SCCustomTerminal import SCCustomTerminal +from .SCEmoteTerminal import SCEmoteTerminal -from SCColorScheme import SCColorScheme +from .SCColorScheme import SCColorScheme diff --git a/otp/src/status/StatusDatabaseUD.py b/otp/src/status/StatusDatabaseUD.py index 6d285454..6873f117 100644 --- a/otp/src/status/StatusDatabaseUD.py +++ b/otp/src/status/StatusDatabaseUD.py @@ -42,7 +42,7 @@ def __init__(self, air): try: cursor.execute("CREATE DATABASE `%s`"%self.DBname) self.notify.info("Database '%s' did not exist, created a new one!"%self.DBname) - except _mysql_exceptions.ProgrammingError,e: + except _mysql_exceptions.ProgrammingError as e: pass cursor.execute("USE `%s`"%self.DBname) @@ -57,7 +57,7 @@ def __init__(self, air): ) ENGINE=InnoDB """) self.notify.info("Table offlineAvatarStatus did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: pass if __dev__: diff --git a/otp/src/switchboard/FriendManagerService_services.py b/otp/src/switchboard/FriendManagerService_services.py index ef701e2e..45e34016 100644 --- a/otp/src/switchboard/FriendManagerService_services.py +++ b/otp/src/switchboard/FriendManagerService_services.py @@ -4,8 +4,8 @@ ################################################## -from FriendManagerService_services_types import * -import urlparse, types +from .FriendManagerService_services_types import * +import urllib.parse, types from ZSI.TCcompound import ComplexType, Struct from ZSI import client import ZSI @@ -39,7 +39,7 @@ def generateToken(self, user_id): # no output wsaction response = self.binding.Receive(generateTokenResponse.typecode) if isinstance(response, generateTokenResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) generateTokenReturn = response._generateTokenReturn return generateTokenReturn @@ -60,7 +60,7 @@ def generateTokenParentAuth(self, user_id,username,password,affiliate,browserAge # no output wsaction response = self.binding.Receive(generateTokenParentAuthResponse.typecode) if isinstance(response, generateTokenParentAuthResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) generateTokenParentAuthReturn = response._generateTokenParentAuthReturn return generateTokenParentAuthReturn @@ -77,7 +77,7 @@ def redeemToken(self, user_id,token): # no output wsaction response = self.binding.Receive(redeemTokenResponse.typecode) if isinstance(response, redeemTokenResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) redeemTokenReturn = response._redeemTokenReturn return redeemTokenReturn @@ -99,7 +99,7 @@ def redeemTokenParentAuth(self, user_id,token,username,password,affiliate,browse # no output wsaction response = self.binding.Receive(redeemTokenParentAuthResponse.typecode) if isinstance(response, redeemTokenParentAuthResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) redeemTokenParentAuthReturn = response._redeemTokenParentAuthReturn return redeemTokenParentAuthReturn @@ -116,7 +116,7 @@ def makeCasualFriends(self, user_id1,user_id2): # no output wsaction response = self.binding.Receive(makeCasualFriendsResponse.typecode) if isinstance(response, makeCasualFriendsResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) return # op: @@ -133,7 +133,7 @@ def makeFriends(self, user_id1,user_id2,is_secret): # no output wsaction response = self.binding.Receive(makeFriendsResponse.typecode) if isinstance(response, makeFriendsResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) return # op: @@ -148,7 +148,7 @@ def getFriends(self, user_id): # no output wsaction response = self.binding.Receive(getFriendsResponse.typecode) if isinstance(response, getFriendsResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) getFriendsReturn = response._getFriendsReturn return getFriendsReturn @@ -164,7 +164,7 @@ def getNamedFriends(self, user_id): # no output wsaction response = self.binding.Receive(getNamedFriendsResponse.typecode) if isinstance(response, getNamedFriendsResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) getNamedFriendsReturn = response._getNamedFriendsReturn return getNamedFriendsReturn @@ -180,7 +180,7 @@ def getTokens(self, user_id): # no output wsaction response = self.binding.Receive(getTokensResponse.typecode) if isinstance(response, getTokensResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) getTokensReturn = response._getTokensReturn return getTokensReturn @@ -197,7 +197,7 @@ def deleteFriend(self, friend1,friend2): # no output wsaction response = self.binding.Receive(deleteFriendResponse.typecode) if isinstance(response, deleteFriendResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) return # op: @@ -211,7 +211,7 @@ def generateRandomToken(self): # no output wsaction response = self.binding.Receive(generateRandomTokenResponse.typecode) if isinstance(response, generateRandomTokenResponse.typecode.pyclass) is False: - raise TypeError, "%s incorrect response type" % (response.__class__) + raise TypeError("%s incorrect response type" % (response.__class__)) generateRandomTokenReturn = response._generateRandomTokenReturn return generateRandomTokenReturn diff --git a/otp/src/switchboard/LastSeenDB.py b/otp/src/switchboard/LastSeenDB.py index e90515b5..3fad94dc 100644 --- a/otp/src/switchboard/LastSeenDB.py +++ b/otp/src/switchboard/LastSeenDB.py @@ -28,7 +28,7 @@ def __init__(self,log,host,port,user,passwd,dbname): port=port, user=user, passwd=passwd) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.log.warning("Failed to connect to MySQL at %s:%d. LastSeenDB is disabled."%(host,port)) self.sqlAvailable = 0 return @@ -82,7 +82,7 @@ def getInfo(self,playerId,isRetry=False): sublocation = info['sublocation'], timestamp = info['lastupdate']) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error on getInfo retry, giving up:\n%s" % str(e)) return FriendInfo(playerName="NotFound") @@ -93,7 +93,7 @@ def getInfo(self,playerId,isRetry=False): self.log.error("Unknown error on getInfo, retrying:\n%s" % str(e)) self.reconnect() return self.getInfo(playerId,True) - except Exception,e: + except Exception as e: self.log.error("Unknown error on getInfo, giving up:\n%s" % str(e)) return FriendInfo(playerName="NotFound") @@ -115,7 +115,7 @@ def setInfo(self,playerId,info,isRetry=False): self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error on setInfo retry, giving up:\n" % str(e)) return @@ -128,7 +128,7 @@ def setInfo(self,playerId,info,isRetry=False): self.reconnect() self.setInfo(playerId,info,True) return - except Exception,e: + except Exception as e: self.log.error("Unknown error on setInfo, giving up:\n%s" % str(e)) return @@ -143,7 +143,7 @@ def getTableStatus(self,isRetry=False): cursor.execute("USE `%s`"%self.dbname) cursor.execute("show table status") return cursor.fetchallDict() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error on getTableStatus retry, giving up:\n" % str(e)) return None @@ -154,6 +154,6 @@ def getTableStatus(self,isRetry=False): self.log.error("Unknown error on getTableStatus, retrying:\n%s" % str(e)) self.reconnect() return self.getTableStatus(True) - except Exception,e: + except Exception as e: self.log.error("Unknown error on getTableStatus, giving up:\n%s" % str(e)) return None diff --git a/otp/src/switchboard/PlayerFriendsDB.py b/otp/src/switchboard/PlayerFriendsDB.py index 68cd1c8e..04d37293 100644 --- a/otp/src/switchboard/PlayerFriendsDB.py +++ b/otp/src/switchboard/PlayerFriendsDB.py @@ -3,7 +3,7 @@ import datetime #from otp.distributed import OtpDoGlobals #from direct.directnotify.DirectNotifyGlobal import directNotify -import FriendManagerService_services +from . import FriendManagerService_services class PlayerFriendsDB: @@ -23,7 +23,7 @@ def __init__(self,log,url): def getFriends(self,playerId): friends = self.soapProxy.getFriends(playerId) - return map(lambda x:[x._friendId,x._secret],friends) + return [[x._friendId,x._secret] for x in friends] def addFriendship(self,playerId1,playerId2,secretYesNo=1): self.soapProxy.makeFriends(playerId1,playerId2,secretYesNo) diff --git a/otp/src/switchboard/bench.py b/otp/src/switchboard/bench.py index 0591e7ff..9a882789 100644 --- a/otp/src/switchboard/bench.py +++ b/otp/src/switchboard/bench.py @@ -24,7 +24,7 @@ time.sleep(5) -print '-------- BENCHMARK REMOTE OBJECT ---------' +print('-------- BENCHMARK REMOTE OBJECT ---------') begin = time.time() #for f in funcs: voor = time.time() @@ -41,11 +41,11 @@ try: duration = time.time()-begin - print 'total time %.4f seconds' % duration - print 'total method calls',iters + print('total time %.4f seconds' % duration) + print('total method calls',iters) avg_pyro_msec = 1000.0*duration/(iters) - print 'avg. time per method call: %.4f' % avg_pyro_msec ,"msec" - print 'msg/sec: %.4f' % (iters/duration) + print('avg. time per method call: %.4f' % avg_pyro_msec ,"msec") + print('msg/sec: %.4f' % (iters/duration)) except: pass sys.stdout.flush() diff --git a/otp/src/switchboard/dummyWedge.py b/otp/src/switchboard/dummyWedge.py index e56f8c29..e7236a2c 100644 --- a/otp/src/switchboard/dummyWedge.py +++ b/otp/src/switchboard/dummyWedge.py @@ -5,7 +5,7 @@ import sys import socket -from sbWedge import sbWedge +from .sbWedge import sbWedge class dummySocketWedge(sbWedge): def __init__(self): @@ -19,7 +19,7 @@ def run(self): while True: try: - print "Starting" + print("Starting") sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind(('',8989)) sock.listen(5) @@ -34,7 +34,7 @@ def run(self): data = clisock.recv(1) s = s + data if data == "\n": - print s, + print(s, end=' ') sys.stdout.flush() clisock.sendall(s) s = "" @@ -43,5 +43,5 @@ def run(self): clisock.close() sock.close() - except Exception,e: - print e + except Exception as e: + print(e) diff --git a/otp/src/switchboard/sbLog.py b/otp/src/switchboard/sbLog.py index 189bec0a..9521d765 100644 --- a/otp/src/switchboard/sbLog.py +++ b/otp/src/switchboard/sbLog.py @@ -1,8 +1,8 @@ import sys import time import socket -import Queue -import sbConfig +import queue +from . import sbConfig class sbLog: def __init__(self,name,clHost=None,clPort=6060): @@ -10,7 +10,7 @@ def __init__(self,name,clHost=None,clPort=6060): self.clHost = clHost self.clPort = clPort - self.inMemLog = Queue.Queue() + self.inMemLog = queue.Queue() if clHost: # init UDP stuff @@ -22,13 +22,13 @@ def timeString(self): def output(self,level,msg): str = "%s %s(%s): %s"%(self.timeString(),self.name,level,msg) - print str + print(str) self.memLog(str) sys.stdout.flush() def chatoutput(self,msg): str = "%s %s(chat): %s"%(self.timeString(),self.name,msg) - print str + print(str) self.memLog(str) sys.stdout.flush() @@ -39,7 +39,7 @@ def memLog(self,str): def getMemLog(self): res = "" - for i in xrange(self.inMemLog.qsize()): + for i in range(self.inMemLog.qsize()): s = self.inMemLog.get() res += s + "\n" self.inMemLog.put(s) diff --git a/otp/src/switchboard/sbMaildb.py b/otp/src/switchboard/sbMaildb.py index 938a43ca..5ea37d90 100644 --- a/otp/src/switchboard/sbMaildb.py +++ b/otp/src/switchboard/sbMaildb.py @@ -29,7 +29,7 @@ def __init__(self,log,host,port,user,passwd,db): user=user, passwd=passwd, db=db) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: self.log.warning("Failed to connect to MySQL at %s:%d. sbMaildb is disabled."%(host,port)) self.log.warning("Error detail: %s"%str(e)) self.sqlAvailable = False @@ -76,7 +76,7 @@ def getMail(self,recipientId,isRetry=False): #self.log.debug("Select was successful in sbMaildb, returning %s" % str(res)) return res - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error on getMail retry, giving up:\n%s" % str(e)) return () @@ -87,7 +87,7 @@ def getMail(self,recipientId,isRetry=False): self.log.error("Unknown error in getMail, retrying:\n%s" % str(e)) self.reconnect() return self.getMail(recipientId,True) - except Exception,e: + except Exception as e: self.log.error("Unknown error in getMail, giving up:\n%s" % str(e)) return () @@ -111,7 +111,7 @@ def putMail(self,recipientId,senderId,message,isRetry=False): (recipientId,senderId,message)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error on putMail retry, giving up:\n%s" % str(e)) return @@ -122,7 +122,7 @@ def putMail(self,recipientId,senderId,message,isRetry=False): self.log.error("Unknown error in putMail, retrying:\n%s" % str(e)) self.reconnect() self.putMail(recipientId,senderId,message,True) - except Exception,e: + except Exception as e: self.log.error("Unknown error in putMail, giving up:\n%s" % str(e)) return @@ -142,7 +142,7 @@ def deleteMail(self,accountId,messageId,isRetry=False): self.db.commit() - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: if isRetry == True: self.log.error("Error in deleteMail retry, giving up:\n%s" % str(e)) return @@ -153,7 +153,7 @@ def deleteMail(self,accountId,messageId,isRetry=False): self.log.error("Unnown error in deleteMail, retrying:\n%s" % str(e)) self.reconnect() self.deleteMail(accountId,messageId,True) - except Exception,e: + except Exception as e: self.log.error("Unknown error in deleteMail, giving up:\n%s" % str(e)) return diff --git a/otp/src/switchboard/sbMonitor.py b/otp/src/switchboard/sbMonitor.py index aee0e0cb..053e94e0 100644 --- a/otp/src/switchboard/sbMonitor.py +++ b/otp/src/switchboard/sbMonitor.py @@ -5,11 +5,11 @@ import getopt import cherrypy -import sbConfig -from sbLog import sbLog +from . import sbConfig +from .sbLog import sbLog -from LastSeenDB import LastSeenDB -from sbMaildb import sbMaildb +from .LastSeenDB import LastSeenDB +from .sbMaildb import sbMaildb class sbMonitor(object): def __init__(self): @@ -314,7 +314,7 @@ def header(self,current): ''' linkNum = 0 - for link in self.menu.keys(): + for link in list(self.menu.keys()): if linkNum == 0: if link == current: pageText += "
  • %s
  • \n" % \ diff --git a/otp/src/switchboard/sbNode.py b/otp/src/switchboard/sbNode.py index f5c8b5af..08955575 100644 --- a/otp/src/switchboard/sbNode.py +++ b/otp/src/switchboard/sbNode.py @@ -4,8 +4,8 @@ import sys import time -from sbLog import sbLog -import sbConfig +from .sbLog import sbLog +from . import sbConfig from Pyro.errors import ConnectionClosedError from Pyro.errors import ProtocolError @@ -53,7 +53,7 @@ def __init__(self, self.log.info("Starting.") # DISL SOAP init (temporary) - from PlayerFriendsDB import PlayerFriendsDB + from .PlayerFriendsDB import PlayerFriendsDB self.friendsDB = PlayerFriendsDB(self.log,dislURL) # DISL MD init @@ -62,7 +62,7 @@ def __init__(self, # db init - from LastSeenDB import LastSeenDB + from .LastSeenDB import LastSeenDB self.lastSeenDB = LastSeenDB(log=self.log, host=sbConfig.lastSeenDBhost, port=sbConfig.lastSeenDBport, @@ -70,7 +70,7 @@ def __init__(self, passwd=sbConfig.lastSeenDBpasswd, dbname=sbConfig.lastSeenDBdb) - from sbMaildb import sbMaildb + from .sbMaildb import sbMaildb self.mailDB = sbMaildb(log=self.log, host=sbConfig.mailDBhost, port=sbConfig.mailDBport, @@ -204,17 +204,17 @@ def handleDISLSendFriendsList(self,message): friends = [] - for i in xrange(1,len(tempVals)-1,2): + for i in range(1,len(tempVals)-1,2): friends.append([int(tempVals[i]),int(tempVals[i+1])]) #self.log.debug(str(friends)) - except Exception,e: + except Exception as e: self.parsingError(message) self.log.error(str(e)) return #self.log.debug("localPlayers: %s"%self.localPlayers) - if self.localPlayers.has_key(friendOne): + if friendOne in self.localPlayers: # add the new friendships for friend in friends: friendTwo = friend[0] @@ -247,10 +247,10 @@ def handleDISLSendNewFriendship(self,message): friends = [] - for i in xrange(1,len(tempVals)-1,2): + for i in range(1,len(tempVals)-1,2): friends.append([int(tempVals[i]),int(tempVals[i+1])]) #self.log.debug(str(friends)) - except Exception,e: + except Exception as e: self.parsingError(message) self.log.error(str(e)) return @@ -265,11 +265,11 @@ def handleDISLSendNewFriendship(self,message): else: secret = False - if self.id2Friends.has_key(friendOne): + if friendOne in self.id2Friends: self.id2Friends[friendOne][friendTwo] = secret self.sendLocalFriendsUpdate(friendOne,[[friendTwo,secret],]) - if self.id2Friends.has_key(friendTwo): + if friendTwo in self.id2Friends: self.id2Friends[friendTwo][friendOne] = secret self.sendLocalFriendsUpdate(friendTwo,[[friendOne,secret],]) @@ -294,16 +294,16 @@ def handleDISLSendFriendRemove(self,message): #self.log.debug("Friends before removal: %s" % str(self.id2Friends)) # update my in-memory lists - if self.id2Friends.has_key(friendOne): + if friendOne in self.id2Friends: self.id2Friends[friendOne].pop(friendTwo,None) - if self.id2Friends.has_key(friendTwo): + if friendTwo in self.id2Friends: self.id2Friends[friendTwo].pop(friendOne,None) #self.log.debug("Friends after removal: %s" % str(self.id2Friends)) # notify both friends - if self.localPlayers.has_key(friendOne) or self.localPlayers.has_key(friendTwo): + if friendOne in self.localPlayers or friendTwo in self.localPlayers: self.sendLocalFriendshipRemoved(friendOne,friendTwo) @@ -340,7 +340,7 @@ def sendEnterNode(self): self.log.debug("poking wedge") try: self.wedge.recvEnterNode(self.nodeName) - except Exception,e: + except Exception as e: self.log.info("Couldn't contact sb.wedge.%s, wedge is None." % self.nodeName) self.wedge = None @@ -349,7 +349,7 @@ def sendEnterNode(self): try: proxy = self.nodeProxy[node] proxy.recvEnterNode(self.nodeName) - except Exception,e: + except Exception as e: self.log.info("Couldn't contact sb.node.%s, removing from nodelist." % node) self.nodeList.remove(node) del self.nodeProxy[node] @@ -439,7 +439,7 @@ def updateNodes(self): #wedge->node def recvEnterLocalPlayer(self,playerId,playerInfo): - if self.localPlayers.has_key(playerId): + if playerId in self.localPlayers: self.log.warning("Warning: enterPlayer(%d) called, but I already have this player."%(playerId)) self.log.debug("Player %d entered." % (playerId)) @@ -461,7 +461,7 @@ def recvEnterLocalPlayer(self,playerId,playerInfo): sbConfig.DISL2SBChannel+self.nodeName, sbConfig.FC_DISLGetFriends, "%d"%playerId)) - except Exception,e: + except Exception as e: self.log.error("Error sending friends request to DISL:") self.log.error(''.join(Pyro.util.getPyroTraceback(e))) @@ -471,7 +471,7 @@ def recvEnterLocalPlayer(self,playerId,playerInfo): #wedge->node def recvExitLocalPlayer(self,playerId,playerInfo=None): - if not self.localPlayers.has_key(playerId): + if playerId not in self.localPlayers: self.log.warning("Warning: exitPlayer(%d) called, but I don't have this one."%playerId) self.log.debug("Player %d exited." % playerId) @@ -491,13 +491,13 @@ def sendEnterRemotePlayer(self,playerId,playerInfo,friendsList): try: for node in self.nodeList: self.nodeProxy[node].recvEnterRemotePlayer(playerId,self.nodeName,playerInfo,friendsList) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendEnterRemotePlayer. Refreshing all nodes.") self.updateNodes() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendEnterRemotePlayer. Refreshing all nodes."%str(e)) self.updateNodes() - except Exception,e: + except Exception as e: self.log.error("Error sending enterRemotePlayer to sb.node.%s: %s" % (node,''.join(Pyro.util.getPyroTraceback(e)))) @@ -506,19 +506,19 @@ def sendExitRemotePlayer(self,playerId,friendsList): try: for node in self.nodeList: self.nodeProxy[node].recvExitRemotePlayer(playerId,self.nodeName,friendsList) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendExitRemotePlayer. Refreshing all nodes.") self.updateNodes() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendExitRemotePlayer. Refreshing all nodes."%str(e)) self.updateNodes() - except Exception,e: + except Exception as e: self.log.error("Error sending exitRemotePlayer to sb.node.%s: %s" % (node,''.join(Pyro.util.getPyroTraceback(e)))) #node->node def recvEnterRemotePlayer(self,playerId,nodeName,playerInfo,friendsList): - if self.remotePlayerLoc.has_key(playerId): + if playerId in self.remotePlayerLoc: self.log.warning("Warning: enterRemotePlayer(%d) called, but I already see this player."%(playerId)) self.log.debug("Saw player %d enter at :sb.node.%s."%(playerId,nodeName)) @@ -531,13 +531,13 @@ def recvEnterRemotePlayer(self,playerId,nodeName,playerInfo,friendsList): if self.wedge is not None: try: self.wedge.recvEnterRemotePlayer(playerId,playerInfo,friendsList) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvEnterRemotePlayer. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvEnterRemotePlayer. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send player enter notice to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %s, %s, %s"%(str(playerId),str(playerInfo),str(friendsList))) else: @@ -545,7 +545,7 @@ def recvEnterRemotePlayer(self,playerId,nodeName,playerInfo,friendsList): #node->node def recvExitRemotePlayer(self,playerId,nodeName,friendsList): - if not self.remotePlayerLoc.has_key(playerId): + if playerId not in self.remotePlayerLoc: self.log.warning("Warning: exitRemotePlayer(%d) called, but I don't see this player. Ignoring."%(playerId)) return @@ -559,13 +559,13 @@ def recvExitRemotePlayer(self,playerId,nodeName,friendsList): if self.wedge is not None: try: self.wedge.recvExitRemotePlayer(playerId,friendsList) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvExitRemotePlayer. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvExitRemotePlayer. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send player exit notice to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) else: self.log.warning("ExitRemotePlayer: No wedge connected!") @@ -579,23 +579,23 @@ def addFriendship(self,playerId1,playerId2): err = None try: self.friendsDB.addFriendship(playerId1,playerId2) - except Exception,e: + except Exception as e: try: for d in e.fault.detail: if d.nodeName.find("errcode") != -1: err = d.childNodes[0].get_data() - except Exception,ex: + except Exception as ex: self.log.error("Unknown exception in removeFriendship: %s" % str(e)) if err is not None: try: self.wedge.recvAddFriendshipError(playerId,err) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvSecretRequestError. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvSecretRequestError. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send recvAddFriendshipError to my wedge") @@ -603,12 +603,12 @@ def removeFriendship(self,playerId1,playerId2): self.log.debug("Got removeFriendship request") try: self.friendsDB.removeFriendship(playerId1,playerId2) - except Exception,e: + except Exception as e: try: for d in e.fault.detail: if d.nodeName.find("errcode") != -1: err = d.childNodes[0].get_data() - except Exception,ex: + except Exception as ex: self.log.error("Unknown exception in removeFriendship: %s" % str(e)) @@ -618,35 +618,35 @@ def recvSecretRequest(self,playerId,parentUsername,parentPassword): err = None try: secret = self.friendsDB.getToken(playerId) - except Exception,e: + except Exception as e: try: for d in e.fault.detail: if d.nodeName.find("errcode") != -1: err = d.childNodes[0].get_data() - except Exception,e: + except Exception as e: self.log.error("Unknown exception in generateToken: %s" % str(e)) if err is None: try: self.wedge.recvSecretGenerated(playerId,secret) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvSecretGenerated. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvSecretGenerated. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send recvSecretGenerated to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) else: try: self.wedge.recvSecretRequestError(playerId,err) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvSecretRequestError. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvSecretRequestError. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send recvSecretRequestError to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) def recvSecretRedeem(self,playerId,secret,parentUsername,parentPassword): @@ -654,37 +654,37 @@ def recvSecretRedeem(self,playerId,secret,parentUsername,parentPassword): err = None try: res = self.friendsDB.redeemToken(playerId,secret) - except Exception,e: + except Exception as e: try: for d in e.fault.detail: if d.nodeName.find("errcode") != -1: err = d.childNodes[0]._get_data() - except Exception,e: + except Exception as e: self.log.error("Unknown exception in redeemToken: %s" % str(e)) if err is not None: try: self.wedge.recvSecretRedeemError(playerId,err) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvSecretRedeemError. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvSecretRedeemError. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send recvSecretRedeemError to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) def _getFriendInfo(self,playerId): - if self.localPlayers.has_key(playerId): + if playerId in self.localPlayers: return self.localPlayers[playerId] - elif self.remotePlayerInfo.has_key(playerId): + elif playerId in self.remotePlayerInfo: return self.remotePlayerInfo[playerId] else: return self.lastSeenDB.getInfo(playerId) def _getFriendView(self,viewerId,friendId): info = self._getFriendInfo(friendId) - assert self.id2Friends.has_key(viewerId) + assert viewerId in self.id2Friends if self.id2Friends[viewerId][friendId] is True: info.openChatFriendshipYesNo = 1 else: @@ -702,13 +702,13 @@ def sendLocalFriendsUpdate(self,friendOne,friends): friend[1] = self._getFriendView(friendOne,friend[0]) try: self.wedge.recvFriendsUpdate(friendOne,friends) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendLocalFriendsUpdate. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendLocalFriendsUpdate. Reconnecting to wedge."%str(e)) self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't sendLocalFriendsUpdate to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %s"%(friendOne,friends)) else: @@ -719,13 +719,13 @@ def sendLocalFriendshipRemoved(self,friendOne,friendTwo): if self.wedge is not None: try: self.wedge.recvFriendshipRemoved(friendOne,friendTwo) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendFriendshipRemoved. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in sendLocalFriendshipRemoved. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't sendFriendshipRemoved to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %d"%(friendOne,friendTwo)) else: @@ -744,7 +744,7 @@ def sendWhisper(self,recipientId,senderId,msgText): #if self.localPlayers.has_key(recipientId): # self.log("Warning: I own %d. Ignoring whisper." % (recipientId)) # self.wedge.recvWhisperFailed(recipientId,senderId,msgText) - if not self.remotePlayerLoc.has_key(recipientId): + if recipientId not in self.remotePlayerLoc: self.log.warning("I don't see %d anywhere! Whisper not delivered."%recipientId) return #CHECK FRIENDSHIP, permissions, ignore list, etc? @@ -755,13 +755,13 @@ def sendWhisper(self,recipientId,senderId,msgText): try: self.servedChat = self.servedChat + 1 self.nodeProxy[loc].recvWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendWhisper. Reconnecting to nodes.") self.updateNodes() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in sendWhisper. Reconnecting to nodes.") self.updateNodes() - except Exception,e: + except Exception as e: self.log.error("Couldn't send whisper to sb.node.%s, had an error: %s"%(loc,''.join(Pyro.util.getPyroTraceback(e)))) def recvWhisper(self,recipientId,senderId,msgText): @@ -771,13 +771,13 @@ def recvWhisper(self,recipientId,senderId,msgText): if self.wedge is not None: try: self.wedge.recvWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvWhisper. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvWhisper. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send whisper to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %d, %s"%(recipientId,senderId,msgText)) else: @@ -789,7 +789,7 @@ def sendSCWhisper(self,recipientId,senderId,msgText): #if self.localPlayers.has_key(recipientId): # self.log("Warning: I own %d. Ignoring whisper." % (recipientId)) # self.wedge.recvWhisperFailed(recipientId,senderId,msgText) - if not self.remotePlayerLoc.has_key(recipientId): + if recipientId not in self.remotePlayerLoc: self.log.warning("I don't see %d anywhere! Whisper not delivered."%recipientId) #self.wedge.recvSCWhisperFailed(recipientId,senderId,msgText) return @@ -801,13 +801,13 @@ def sendSCWhisper(self,recipientId,senderId,msgText): try: self.servedSC = self.servedSC + 1 self.nodeProxy[loc].recvSCWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendSCWhisper. Reconnecting to nodes.") self.updateNodes() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in sendSCWhisper. Reconnecting to nodes.") self.updateNodes() - except Exception,e: + except Exception as e: self.log.error("Couldn't send SCwhisper to sb.node.%s, had an error: %s"%(loc,''.join(Pyro.util.getPyroTraceback(e)))) def recvSCWhisper(self,recipientId,senderId,msgText): @@ -815,13 +815,13 @@ def recvSCWhisper(self,recipientId,senderId,msgText): if self.wedge is not None: try: self.wedge.recvWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvSCWhisper. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvSCWhisper. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send whisper to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %d, %s"%(recipientId,senderId,msgText)) else: @@ -850,13 +850,13 @@ def recvMailUpdate(self,recipientId,senderId,msgText): if self.wedge is not None: try: self.wedge.recvMailUpdate(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvMailUpdate. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvMailUpdate. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send mail update to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %d, %s"%(recipientId,senderId,msgText)) else: @@ -873,13 +873,13 @@ def getMail(self,recipientId): try: self.wedge.recvMail(recipientId,mail) self.log.debug("Sent mail to %d: %s" % (recipientId,mail)) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in recvMail. Reconnecting to wedge.") self.updateWedge() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError in recvMail. Reconnecting to wedge.") self.updateWedge() - except Exception,e: + except Exception as e: self.log.error("Couldn't send mail to my wedge, had an error: %s"%''.join(Pyro.util.getPyroTraceback(e))) self.log.error("I sent: %d, %s"%(recipientId,mail)) else: diff --git a/otp/src/switchboard/sbWedge.py b/otp/src/switchboard/sbWedge.py index 52e71e22..4c1fa6de 100644 --- a/otp/src/switchboard/sbWedge.py +++ b/otp/src/switchboard/sbWedge.py @@ -7,9 +7,9 @@ from Pyro.errors import ConnectionClosedError from Pyro.errors import ProtocolError -from sbNode import sbNode -from sbLog import sbLog -import sbConfig +from .sbNode import sbNode +from .sbLog import sbLog +from . import sbConfig try: import badwordpy @@ -71,7 +71,7 @@ def __init__(self,wedgeName, self.sendEnterWedge() self.log.debug("Exit sendEnterWedge") self.sbConnected = True - except Exception,e: + except Exception as e: self.log.warning("Failed to connect to Switchboard. Player friends are being faked.") self.onlinePlayers = 0 @@ -154,7 +154,7 @@ def sendEnterWedge(self): if self.node: try: self.node.recvEnterWedge(self.wedgeName) - except Exception,e: + except Exception as e: self.log.warning("Error contacting my node (%s), node is None."%str(e)) self.node = None @@ -205,7 +205,7 @@ def updateNode(self): "recvDeclineInvite"]) self.log.info("-- Connected to sb.node.%s. --" % self.nodeName) self.sbConnected = True - except Exception,e: + except Exception as e: self.node = None self.sbConnected = False self.log.debug("Failed to locate sb.node.%s, node is None." % self.nodeName) @@ -223,13 +223,13 @@ def enterPlayer(self,playerId,playerInfo): if self.node: try: self.node.recvEnterLocalPlayer(playerId,playerInfo) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in enterPlayer. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in enterPlayer. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Unknown error sending enterLocalPlayer to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #app->wedge @@ -238,13 +238,13 @@ def exitPlayer(self,playerId): if self.node: try: self.node.recvExitLocalPlayer(playerId) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in exitPlayer. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in exitPlayer. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending exitLocalPlayer to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #app->wedge @@ -253,13 +253,13 @@ def exitAvatar(self,avatarId): if self.node: try: self.node.recvExitLocalAvatar(avatarId) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in exitAvatar. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in exitAvatar. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending exitLocalAvatar to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) @@ -299,26 +299,26 @@ def sendSecretRequest(self,playerId,parentUsername=None,parentPassword=None): if self.node: try: self.node.recvSecretRequest(playerId,parentUsername,parentPassword) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendSecretRequest. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendSecretRequest. Refreshing node.") self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending secretRequest to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) def sendSecretRedeem(self,playerId,secret,parentUsername=None,parentPassword=None): if self.node: try: self.node.recvSecretRedeem(playerId,secret,parentUsername,parentPassword) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendSecretRedeem. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendSecretRedeem. Refreshing node.") self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending secretRedeem to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #wedge->app, override @@ -371,13 +371,13 @@ def sendWhisper(self,recipientId,senderId,msgText): if self.node: try: self.node.sendWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendWhisper. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendWhisper. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending whisper to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #app->wedge @@ -389,13 +389,13 @@ def sendWLWhisper(self,recipientId,senderId,msgText): if self.node: try: self.node.sendWLWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendWLWhisper. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendWLWhisper. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending WLwhisper to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #app->wedge @@ -407,13 +407,13 @@ def sendSCWhisper(self,recipientId,senderId,msgText): if self.node: try: self.node.sendSCWhisper(recipientId,senderId,msgText) - except ConnectionClosedError,e: + except ConnectionClosedError as e: self.log.error("ConnectionClosedError in sendSCWhisper. Refreshing node.") self.updateNode() - except ProtocolError,e: + except ProtocolError as e: self.log.error("ProtocolError (%s) in sendSCWhisper. Refreshing node."%str(e)) self.updateNode() - except Exception,e: + except Exception as e: self.log.error("Error sending SCwhisper to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #wedge->app, override @@ -459,7 +459,7 @@ def sendMail(self,recipientId,senderId,msgText): try: self.servedMail += 1 self.node.sendMail(recipientId,senderId,msgText) - except Exception,e: + except Exception as e: self.log.error("Error sending mail to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) def sendWLMail(self,recipientId,senderId,msgText): @@ -469,7 +469,7 @@ def sendWLMail(self,recipientId,senderId,msgText): try: self.servedMail += 1 self.node.sendSCMail(recipientId,senderId,msgText) - except Exception,e: + except Exception as e: self.log.error("Error sending mail to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) def sendSCMail(self,recipientId,senderId,msgText): @@ -479,7 +479,7 @@ def sendSCMail(self,recipientId,senderId,msgText): try: self.servedMailSC += 1 self.node.sendSCMail(recipientId,senderId,msgText) - except Exception,e: + except Exception as e: self.log.error("Error sending mail to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) #wedge->app, override @@ -500,7 +500,7 @@ def deleteMail(self,accountId,messageId): try: self.node.deleteMail(accountId,messageId) - except Exception,e: + except Exception as e: self.log.error("Error sending mail to my node: %s" % ''.join(Pyro.util.getPyroTraceback(e))) diff --git a/otp/src/switchboard/sbdebug.py b/otp/src/switchboard/sbdebug.py index bcf57e49..76e1f64a 100644 --- a/otp/src/switchboard/sbdebug.py +++ b/otp/src/switchboard/sbdebug.py @@ -10,17 +10,17 @@ try: opts,args = getopt.getopt(sys.argv[1:], "h:n:p:u:exw:m:sci") except getopt.GetoptError: - print "Switchboard Debugger Options:" - print "-h hostname - Specify NS hostname" - print "-p port - specify NS port" - print "-n wedgename - Connect to wedge, required to issue any command" - print "-u usernumber - Specify user to perform action" - print "-e - Enter Player" - print "-x - Exit Player" - print "-w recipient -m message - Whisper to recipient with message" - print "-c checkSocket" - print "-i interactive" - print "-s - Shutdown this node" + print("Switchboard Debugger Options:") + print("-h hostname - Specify NS hostname") + print("-p port - specify NS port") + print("-n wedgename - Connect to wedge, required to issue any command") + print("-u usernumber - Specify user to perform action") + print("-e - Enter Player") + print("-x - Exit Player") + print("-w recipient -m message - Whisper to recipient with message") + print("-c checkSocket") + print("-i interactive") + print("-s - Shutdown this node") sys.exit(2) NShost = "localhost" @@ -62,10 +62,10 @@ if wedgename == "": - print "Please pass a node name with -n." + print("Please pass a node name with -n.") sys.exit(2) if action == "": - print "No action specified! Doing nothing." + print("No action specified! Doing nothing.") sys.exit(0) @@ -88,7 +88,7 @@ elif action == "interactive": wedge = Pyro.core.getProxyForURI(ns.resolve(":sb.wedge.%s"%wedgename)) - print wedge + print(wedge) import pdb pdb.set_trace() @@ -105,6 +105,6 @@ elif action == "checkSocket": wedge = Pyro.core.getProxyForURI(ns.resolve(":sb.wedge.%s"%wedgename)) wedge.checkSocket() -except Exception, x: - print ''.join(Pyro.util.getPyroTraceback(x)) +except Exception as x: + print(''.join(Pyro.util.getPyroTraceback(x))) sys.stdout.flush() diff --git a/otp/src/switchboard/startDummy.py b/otp/src/switchboard/startDummy.py index 0a24ea35..3a7e71c7 100644 --- a/otp/src/switchboard/startDummy.py +++ b/otp/src/switchboard/startDummy.py @@ -1,13 +1,13 @@ # dummy SB -from sbNode import sbNode -from sbWedge import sbWedge -import Queue +from .sbNode import sbNode +from .sbWedge import sbWedge +import queue import sys import socket import select -q = Queue.Queue() +q = queue.Queue() class dumWedge(sbWedge): def __init__(self,wedgeName,qq): @@ -27,7 +27,7 @@ def shutdown(self): #myWedge.node.enterPlayer(1234) def log(message): - print message + print(message) sys.stdout.flush() @@ -63,7 +63,7 @@ def log(message): sendstr = "%d %d SEND %s\n" % (recipient,sender,msg) log(sendstr) clisock.sendall(sendstr) - except Queue.Empty: pass + except queue.Empty: pass if listensock in ins: if clisock is not None: @@ -89,7 +89,7 @@ def log(message): else: log("Invalid message: %s" % s) clisock.sendall("Blargh invalid message\n") - except Exception,e: + except Exception as e: log(e) log("Problematic message: %s" % s) clisock.sendall("Blargh invalid message\n") @@ -98,7 +98,7 @@ def log(message): s = s + data - except Queue.Empty,e: + except queue.Empty as e: log("Caught error:") log(e) try: diff --git a/otp/src/switchboard/startDummyHold.py b/otp/src/switchboard/startDummyHold.py index edc9f13e..72d5953e 100644 --- a/otp/src/switchboard/startDummyHold.py +++ b/otp/src/switchboard/startDummyHold.py @@ -1,5 +1,5 @@ -from sbNode import sbNode -from sbWedge import sbWedge +from .sbNode import sbNode +from .sbWedge import sbWedge import sys import socket import select @@ -11,7 +11,7 @@ #myWedge.node.enterPlayer(1234) def log(message): - print message + print(message) sys.stdout.flush() @@ -66,7 +66,7 @@ def log(message): s = s + data - except Exception,e: + except Exception as e: log("Caught error:") log(e) try: diff --git a/otp/src/switchboard/startNode.py b/otp/src/switchboard/startNode.py index e90c171e..a6e39c06 100644 --- a/otp/src/switchboard/startNode.py +++ b/otp/src/switchboard/startNode.py @@ -16,7 +16,7 @@ 'dislurl=' ]) except getopt.GetoptError: - print "Please pass a node name with --name=." + print("Please pass a node name with --name=.") sys.exit(1) #defaults @@ -50,11 +50,11 @@ elif o == "--dislurl": dislurl = a else: - print "Error: Illegal option: " + o + print("Error: Illegal option: " + o) sys.exit(1) if nodename == "": - print "Please pass a node name with --name=." + print("Please pass a node name with --name=.") sys.exit(2) cm = ChannelManager() diff --git a/otp/src/switchboard/startWedge.py b/otp/src/switchboard/startWedge.py index 00f37a92..d2cee939 100644 --- a/otp/src/switchboard/startWedge.py +++ b/otp/src/switchboard/startWedge.py @@ -1,4 +1,4 @@ -from sbWedge import sbWedge +from .sbWedge import sbWedge import sys import getopt @@ -13,7 +13,7 @@ 'bwdictpath=' ]) except getopt.GetoptError: - print "Please pass a wedge name with --name=." + print("Please pass a wedge name with --name=.") sys.exit(1) #defaults @@ -41,11 +41,11 @@ elif o == "--bwdictpath": bwdictpath = a else: - print "Error: Illegal option: " + o + print("Error: Illegal option: " + o) sys.exit(1) if wedgename == "": - print "Please pass a wedge name with --name=." + print("Please pass a wedge name with --name=.") sys.exit(2) diff --git a/otp/src/tutorial/DTutorialObject.py b/otp/src/tutorial/DTutorialObject.py index 3f22cb98..3c1eb3c7 100644 --- a/otp/src/tutorial/DTutorialObject.py +++ b/otp/src/tutorial/DTutorialObject.py @@ -13,8 +13,8 @@ def __init__(self, cr): # we place this object in __builtin__ for convenience. # Do not do this in production! - import __builtin__ - __builtin__.tutObj = self + import builtins + builtins.tutObj = self @report(types = ['module', 'args', 'deltaStamp'], dConfigParam = ['dtutorial']) @@ -81,8 +81,8 @@ def setHeight(self, h): class DTutorial(FSM): def __init__(self): FSM.__init__(self, 'DTutorial') - import __builtin__ - __builtin__.tut = self + import builtins + builtins.tut = self self.ih = None @@ -105,7 +105,7 @@ def enterPhase6(self): tutObj.b_requestMeal(2) def enterPhase7(self): - print tutObj.getTimeSinceLastMeal() + print(tutObj.getTimeSinceLastMeal()) def enterOff(self): if self.ih: diff --git a/otp/src/tutorial/DTutorialObjectAI.py b/otp/src/tutorial/DTutorialObjectAI.py index 84a4c799..7d8c3ed2 100644 --- a/otp/src/tutorial/DTutorialObjectAI.py +++ b/otp/src/tutorial/DTutorialObjectAI.py @@ -69,8 +69,8 @@ def d_setHeight(self, h): class DTutorialAI(FSM): def __init__(self): FSM.__init__(self, 'DTutorialAI') - import __builtin__ - __builtin__.tut = self + import builtins + builtins.tut = self self.tutObj = None diff --git a/otp/src/uberdog/AccountDetailRecord.py b/otp/src/uberdog/AccountDetailRecord.py index f4a3aa0e..d82de224 100644 --- a/otp/src/uberdog/AccountDetailRecord.py +++ b/otp/src/uberdog/AccountDetailRecord.py @@ -71,7 +71,7 @@ def __str__(self): s += "NumFamilyMembers: %d\n" % self.numFamilyMembers s += "FamilyMembers: %s\n" % self.familyMembers s += "NumSubs: %s\n" % self.numSubs - for subDetails in self.subDetails.values(): + for subDetails in list(self.subDetails.values()): s += str(subDetails) s += '================================\n' return s diff --git a/otp/src/uberdog/DistributedChatManager.py b/otp/src/uberdog/DistributedChatManager.py index 06a306f1..4a36e05b 100644 --- a/otp/src/uberdog/DistributedChatManager.py +++ b/otp/src/uberdog/DistributedChatManager.py @@ -106,7 +106,7 @@ def whisperFrom(self, fromId, message): assert self.notify.debugCall() #messenger.send("chat", [fromId, message, chatFlags]) if base.cr.wantSwitchboardHacks: - print "received whisper on avatar: %s" % message + print("received whisper on avatar: %s" % message) whisper = WhisperPopup(message,OTPGlobals.getInterfaceFont(),WhisperPopup.WTNormal) whisper.manage(base.marginManager) diff --git a/otp/src/uberdog/DistributedChatManagerUD.py b/otp/src/uberdog/DistributedChatManagerUD.py index 2c60f1cd..5db4d78e 100644 --- a/otp/src/uberdog/DistributedChatManagerUD.py +++ b/otp/src/uberdog/DistributedChatManagerUD.py @@ -73,7 +73,7 @@ def announceGenerate(self): def delete(self): assert self.notify.debugCall() self.ignoreAll() - for i in self.asyncRequests.values(): + for i in list(self.asyncRequests.values()): i.delete() self.asyncRequests={} DistributedObjectGlobalUD.delete(self) @@ -84,10 +84,10 @@ def accountOnline(self, accountId): assert self.notify.debugCall() assert accountId self.air.writeServerEvent('accountOnline', accountId, '') - if self.isAccountOnline.has_key(accountId): + if accountId in self.isAccountOnline: assert self.notify.debug( "\n\nWe got a duplicate account online notice %s"%(accountId,)) - if accountId and not self.isAccountOnline.has_key(accountId): + if accountId and accountId not in self.isAccountOnline: self.isAccountOnline[accountId]=None ## self.asyncRequests[accountId]=self.accountOnlineAsyncRequest(accountId) @@ -108,7 +108,7 @@ def checkAvatarId(self, avatarId): ## self.notify.warning( ## "Got a request from an avatar (%s) that is not online"% ## accountId) - elif self.asyncRequests.has_key(avatarId): + elif avatarId in self.asyncRequests: # The timeout on the client might be too low or we may be being # attacked. self.notify.warning( @@ -148,7 +148,7 @@ def chatTo(self, message, chatFlags): if not accountId: assert self.notify.debugCall("accountId:%s (zero!)"%(accountId,)) return - if not self.isAccountOnline.has_key(accountId): + if accountId not in self.isAccountOnline: assert self.notify.debugCall("accountId:%s (not online!)"%(accountId,)) return assert self.notify.debugCall("accountId:%s"%(accountId,)) @@ -161,7 +161,7 @@ def chatTo(self, message, chatFlags): # assert self.notify.debug("Unknown location for %s"%(accountId,)) if uber.wantSwitchboardHacks: - print "DistributedChatManagerUD->Switchboard: %s" % message + print("DistributedChatManagerUD->Switchboard: %s" % message) self.sb.sendWhisper(1,2,message) ## chatPermissions=self.isAvatarOnline.get(accountId) @@ -209,7 +209,7 @@ def whisperTo(self, toId, message): accountId = self.air.getAccountIdFromSender() assert self.notify.debugCall("accountId:%s"%(accountId,)) if self.checkAvatarId(avatarId): - chatPermissions=self.isAccountOnline.has_key(accountId) + chatPermissions=accountId in self.isAccountOnline if chatPermissions is not None: self.sendWhisperFrom(accountId, toId, message) else: @@ -218,7 +218,7 @@ def whisperTo(self, toId, message): def sendWhisperFrom(self, fromId, toId, message): assert self.notify.debugCall() if uber.wantSwitchboardHacks: - print "Sending whisper to %d: %s" % (toId,message) + print("Sending whisper to %d: %s" % (toId,message)) self.sendUpdateToAvatarId(toId, "whisperFrom", [fromId, message]) else: self.sendUpdateToChannel(toId, "whisperFrom", [fromId, msgIndex]) @@ -228,7 +228,7 @@ def whisperSCTo(self, toId, msgIndex): accountId = self.air.getAccountIdFromSender() assert self.notify.debugCall("accountId:%s"%(accountId,)) if self.checkAvatarId(avatarId): - chatPermissions=self.isAccountOnline.has_key(accountId) + chatPermissions=accountId in self.isAccountOnline if chatPermissions is not None: self.sendWhisperSCFrom(accountId, toId, message) else: @@ -243,11 +243,11 @@ def whisperSCCustomTo(self, toId, msgIndex): if not accountId: assert self.notify.debugCall("accountId:%s (zero!)"%(accountId,)) return - if not self.isAccountOnline.has_key(accountId): + if accountId not in self.isAccountOnline: assert self.notify.debugCall("accountId:%s (not online!)"%(accountId,)) return assert self.notify.debugCall("accountId:%s"%(accountId,)) - chatPermissions=self.isAccountOnline.has_key(accountId) + chatPermissions=accountId in self.isAccountOnline if chatPermissions is not None: self.sendWhisperSCCustomFrom(accountId, toId, message) else: @@ -262,11 +262,11 @@ def whisperSCEmoteTo(self, toId, emoteId): if not accountId: assert self.notify.debugCall("accountId:%s (zero!)"%(accountId,)) return - if not self.isAccountOnline.has_key(accountId): + if accountId not in self.isAccountOnline: assert self.notify.debugCall("accountId:%s (not online!)"%(accountId,)) return assert self.notify.debugCall("accountId:%s"%(accountId,)) - chatPermissions=self.isAccountOnline.has_key(accountId) + chatPermissions=accountId in self.isAccountOnline if chatPermissions is not None: self.sendWhisperSCEmoteFrom(accountId, toId, message) else: @@ -286,7 +286,7 @@ def crewChatTo(self, message): if not accountId: assert self.notify.debugCall("accountId:%s (zero!)"%(accountId,)) return - if not self.isAccountOnline.has_key(accountId): + if accountId not in self.isAccountOnline: assert self.notify.debugCall("accountId:%s (not online!)"%(accountId,)) return assert self.notify.debugCall("accountId:%s"%(accountId,)) @@ -307,7 +307,7 @@ def guildChatTo(self, message): if not accountId: assert self.notify.debugCall("accountId:%s (zero!)"%(accountId,)) return - if not self.isAccountOnline.has_key(accountId): + if accountId not in self.isAccountOnline: assert self.notify.debugCall("accountId:%s (not online!)"%(accountId,)) return assert self.notify.debugCall("accountId:%s"%(accountId,)) diff --git a/otp/src/uberdog/MySQLAccountAvatarsDB.py b/otp/src/uberdog/MySQLAccountAvatarsDB.py index c0bc9f08..e2fc0ba1 100644 --- a/otp/src/uberdog/MySQLAccountAvatarsDB.py +++ b/otp/src/uberdog/MySQLAccountAvatarsDB.py @@ -33,7 +33,7 @@ def __init__(self, host, port, user, passwd, dbname): if __debug__: self.notify.info("MySQL database '%s' did not exist, " "created a new one." % self.dbname) - except _mysql_exceptions.ProgrammingError, e: + except _mysql_exceptions.ProgrammingError as e: pass cursor.execute("USE %s" % self.dbname) @@ -58,7 +58,7 @@ def __init__(self, host, port, user, passwd, dbname): if __debug__: self.notify.info("Table 'account_to_avatars' did not exist, " "created a new one.") - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: pass def connect(self): @@ -150,7 +150,7 @@ def setSharedFlag(self, avatar, subscription, shared): try: cursor = MySQLdb.cursors.DictCursor(self.db) cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() @@ -168,7 +168,7 @@ def addAvatarToSubscription(self, avatar, creator, subscription, shared): try: cursor = MySQLdb.cursors.DictCursor(self.db) cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() @@ -186,7 +186,7 @@ def removeAvatarFromSubscription(self, avatar, subscription): try: cursor = MySQLdb.cursors.DictCursor(self.db) cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() @@ -205,7 +205,7 @@ def deleteIncompleteAvatarFromDB(self, avatar): try: cursor = MySQLdb.cursors.DictCursor(self.db) cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() @@ -225,7 +225,7 @@ def getAvatarIdsForSubscription(self, subscription): cursor = MySQLdb.cursors.Cursor(self.db) cursor.execute(command) return cursor.fetchall() - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() @@ -244,7 +244,7 @@ def lastPlayed(self, avatar, subscription): try: cursor = MySQLdb.cursors.Cursor(self.db) cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if (e[0] == MySQLdb.constants.CR.SERVER_GONE_ERROR) or \ (e[0] == MySQLdb.constants.CR.SERVER_LOST): self.reconnect() diff --git a/otp/src/uberdog/OtpAvatarManager.py b/otp/src/uberdog/OtpAvatarManager.py index 8f4a88ff..7f9b975e 100644 --- a/otp/src/uberdog/OtpAvatarManager.py +++ b/otp/src/uberdog/OtpAvatarManager.py @@ -2,7 +2,7 @@ The Avatar Manager handles all the avatar (avatar groups) accross all districts. """ -from cPickle import loads, dumps +from pickle import loads, dumps from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal diff --git a/otp/src/uberdog/OtpAvatarManagerUD.py b/otp/src/uberdog/OtpAvatarManagerUD.py index ff638643..394bfd81 100644 --- a/otp/src/uberdog/OtpAvatarManagerUD.py +++ b/otp/src/uberdog/OtpAvatarManagerUD.py @@ -162,7 +162,7 @@ def announceGenerate(self): def delete(self): self.ignoreAll() - for i in self.asyncRequests.values(): + for i in list(self.asyncRequests.values()): i.delete() self.asyncRequests={} DistributedObjectGlobalUD.delete(self) @@ -287,7 +287,7 @@ def requestAvatarList(self, senderId): # token through the login message. avatarIds = [] avatarRecords = {} - for subId in accountDetails.subDetails.keys(): + for subId in list(accountDetails.subDetails.keys()): avatarData = self.db.getAvatarIdsForSubscription(subId) avatarRecords[subId] = avatarData avatarIds.extend([record[0] for record in avatarData]) @@ -312,7 +312,7 @@ def sendAvIdList(self, accountId): self.notify.warning('tried to send avId list for account %s that has since logged out' % (accountId)) return - for subId in accountDetails.subDetails.keys(): + for subId in list(accountDetails.subDetails.keys()): avatarData = self.db.getAvatarIdsForSubscription(subId) avatarIds.extend([record[0] for record in avatarData]) # The game server sniffs this message to enfore security diff --git a/otp/src/uberdog/UberDog.py b/otp/src/uberdog/UberDog.py index 8c7da04a..ce198463 100644 --- a/otp/src/uberdog/UberDog.py +++ b/otp/src/uberdog/UberDog.py @@ -82,7 +82,7 @@ def dispatchUpdateToDoId(self, dclassName, fieldName, doId, args, channelId=None if obj is not None: assert obj.__class__.__name__ == (dclassName + self.dcSuffix) method = getattr(obj, fieldName) - apply(method, args) + method(*args) else: self.sendUpdateToDoId(dclassName, fieldName, doId, args, channelId) @@ -93,7 +93,7 @@ def dispatchUpdateToGlobalDoId(self, dclassName, fieldName, doId, args): if obj is not None: assert obj.__class__.__name__ == dclassName method = getattr(obj, fieldName) - apply(method, args) + method(*args) else: self.sendUpdateToGlobalDoId(dclassName, fieldName, doId, args) @@ -321,8 +321,8 @@ def _addObject(self, context, distributedObject): """ assert False, 'JCW: Testing for obsolete functions. If this crashes, let Josh know' doId=distributedObject.getDoId() - assert not self.doId2doCache.has_key(doId) - if not self.doId2doCache.has_key(doId): + assert doId not in self.doId2doCache + if doId not in self.doId2doCache: self.doId2doCache[doId]=distributedObject self.handleGotDo(distributedObject) @@ -335,12 +335,12 @@ def handleGotDo(self, distributedObject): will also remove the handled calls from the pending set. """ assert False, 'JCW: Testing for obsolete functions. If this crashes, let Josh know' - assert self.doId2doCache.has_key(doId) + assert doId in self.doId2doCache pending=self.pending.get(doId) if pending is not None: del self.pending[doId] for i in pending: - apply(i[0], i[2]) + i[0](*i[2]) def deleteObject(self, doId): """ diff --git a/otp/src/uberdog/WipeDBs.py b/otp/src/uberdog/WipeDBs.py index 784e27d4..8e528c23 100644 --- a/otp/src/uberdog/WipeDBs.py +++ b/otp/src/uberdog/WipeDBs.py @@ -12,7 +12,7 @@ pass if username == "" or password == "": - print "Username or password not found, check your config.prc!" + print("Username or password not found, check your config.prc!") sys.exit(2) @@ -21,17 +21,17 @@ user=username, passwd=password) -print "Connected to MySQL at localhost." +print("Connected to MySQL at localhost.") cursor = db.cursor() def dropdb(dbname): try: - print "Dropping database %s:" % dbname + print("Dropping database %s:" % dbname) cursor.execute("DROP DATABASE %s"%dbname) - print " Success!" - except Exception,e: - print " Failed: %s" % e + print(" Success!") + except Exception as e: + print(" Failed: %s" % e) dropdb("%savatar_accessories" % (dbSalt,)) dropdb("%savatar_friends" % (dbSalt,)) # diff --git a/modules/pytz/zoneinfo/America/Argentina/__init__.py b/otp/src/util/__init__.py similarity index 100% rename from modules/pytz/zoneinfo/America/Argentina/__init__.py rename to otp/src/util/__init__.py diff --git a/otp/src/util/whrandom.py b/otp/src/util/whrandom.py new file mode 100644 index 00000000..84c8d462 --- /dev/null +++ b/otp/src/util/whrandom.py @@ -0,0 +1,141 @@ +"""Wichman-Hill random number generator. + +Wichmann, B. A. & Hill, I. D. (1982) +Algorithm AS 183: +An efficient and portable pseudo-random number generator +Applied Statistics 31 (1982) 188-190 + +see also: + Correction to Algorithm AS 183 + Applied Statistics 33 (1984) 123 + + McLeod, A. I. (1985) + A remark on Algorithm AS 183 + Applied Statistics 34 (1985),198-200 + + +USE: +whrandom.random() yields double precision random numbers + uniformly distributed between 0 and 1. + +whrandom.seed(x, y, z) must be called before whrandom.random() + to seed the generator + +There is also an interface to create multiple independent +random generators, and to choose from other ranges. + + + +Multi-threading note: the random number generator used here is not +thread-safe; it is possible that nearly simultaneous calls in +different theads return the same random value. To avoid this, you +have to use a lock around all calls. (I didn't want to slow this +down in the serial case by using a lock here.) +""" + + +# Translated by Guido van Rossum from C source provided by +# Adrian Baddeley. + + +class whrandom: + def __init__(self, x=0, y=0, z=0): + """Initialize an instance. + Without arguments, initialize from current time. + With arguments (x, y, z), initialize from them.""" + self.seed(x, y, z) + + def seed(self, x=0, y=0, z=0): + """Set the seed from (x, y, z). + These must be integers in the range [0, 256).""" + if not type(x) == type(y) == type(z) == type(0): + raise TypeError('seeds must be integers') + if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256): + raise ValueError('seeds must be in range(0, 256)') + if 0 == x == y == z: + # Initialize from current time + import time + t = int(time.time() * 256) + t = int((t & 0xffffff) ^ (t >> 24)) + t, x = divmod(t, 256) + t, y = divmod(t, 256) + t, z = divmod(t, 256) + # Zero is a poor seed, so substitute 1 + self._seed = (x or 1, y or 1, z or 1) + + def random(self): + """Get the next random number in the range [0.0, 1.0).""" + # This part is thread-unsafe: + # BEGIN CRITICAL SECTION + x, y, z = self._seed + # + x = (171 * x) % 30269 + y = (172 * y) % 30307 + z = (170 * z) % 30323 + # + self._seed = x, y, z + # END CRITICAL SECTION + # + return (x / 30269.0 + y / 30307.0 + z / 30323.0) % 1.0 + + def uniform(self, a, b): + """Get a random number in the range [a, b).""" + return a + (b - a) * self.random() + + def randint(self, a, b): + """Get a random integer in the range [a, b] including + both end points. + + (Deprecated; use randrange below.)""" + return self.randrange(a, b + 1) + + def choice(self, seq): + """Choose a random element from a non-empty sequence.""" + return seq[int(self.random() * len(seq))] + + def randrange(self, start, stop=None, step=1, int=int, default=None): + """Choose a random item from range(start, stop[, step]). + + This fixes the problem with randint() which includes the + endpoint; in Python this is usually not what you want. + Do not supply the 'int' and 'default' arguments.""" + # This code is a bit messy to make it fast for the + # common case while still doing adequate error checking + istart = int(start) + if istart != start: + raise ValueError("non-integer arg 1 for randrange()") + if stop is default: + if istart > 0: + return int(self.random() * istart) + raise ValueError("empty range for randrange()") + istop = int(stop) + if istop != stop: + raise ValueError("non-integer stop for randrange()") + if step == 1: + if istart < istop: + return istart + int(self.random() * + (istop - istart)) + raise ValueError("empty range for randrange()") + istep = int(step) + if istep != step: + raise ValueError("non-integer step for randrange()") + if istep > 0: + n = (istop - istart + istep - 1) / istep + elif istep < 0: + n = (istop - istart + istep + 1) / istep + else: + raise ValueError("zero step for randrange()") + + if n <= 0: + raise ValueError("empty range for randrange()") + return istart + istep * int(self.random() * n) + + +# Initialize from the current time +_inst = whrandom() +seed = _inst.seed +random = _inst.random +uniform = _inst.uniform +randint = _inst.randint +choice = _inst.choice +randrange = _inst.randrange \ No newline at end of file diff --git a/otp/src/web/SettingsMgrBase.py b/otp/src/web/SettingsMgrBase.py index f2d3406e..c80bfa8a 100644 --- a/otp/src/web/SettingsMgrBase.py +++ b/otp/src/web/SettingsMgrBase.py @@ -16,7 +16,7 @@ def _initSettings(self): pass def _iterSettingNames(self): - for name in self._settings.iterkeys(): + for name in self._settings.keys(): yield name def _addSettings(self, *settings): diff --git a/otp/src/web/SettingsMgrUD.py b/otp/src/web/SettingsMgrUD.py index b2967211..84653a2a 100644 --- a/otp/src/web/SettingsMgrUD.py +++ b/otp/src/web/SettingsMgrUD.py @@ -55,7 +55,7 @@ def getPageTitle(self): def _newSessionId(self): # unique URL-safe string self._sessionId = '' - for i in xrange(32): + for i in range(32): self._sessionId += random.choice(SettingsMgrUD.SessionIdAlphabet) def handleHTTPSettings(self, **kw): @@ -67,7 +67,7 @@ def handleHTTPSettings(self, **kw): staleSession = (sessionId is not None) and (sessionId != self._sessionId) if not staleSession: self._newSessionId() - for settingName, valueStr in kw.iteritems(): + for settingName, valueStr in kw.items(): try: setting = self._getSetting(settingName) except: @@ -122,7 +122,7 @@ def handleHTTPSettings(self, **kw):

    """ % (self._sessionId, self._sessionId, ) - settingNames = self._settings.keys() + settingNames = list(self._settings.keys()) settingNames.sort() page += "\n" % self.getPageTitle() rowNum=-1 diff --git a/resources/phase_3/etc/NameMasterEnglish.txt b/resources/phase_3/etc/NameMasterEnglish.txt index acbc4077..6ab3c4ce 100644 --- a/resources/phase_3/etc/NameMasterEnglish.txt +++ b/resources/phase_3/etc/NameMasterEnglish.txt @@ -22,12 +22,12 @@ 10*1*Queen 11*1*Granny 12*1*Aunt -13*2*Captain -14*2*Cool -15*2*Colonel -16*2*Crazy -17*2*Deputy -18*2*Dippy +13*2*Big +14*2*Captain +15*2*Cool +16*2*Colonel +17*2*Crazy +18*2*Deputy 19*2*Doctor 20*2*Fat 21*2*Good ol' @@ -38,409 +38,385 @@ 26*2*Prof. 27*2*Sheriff 28*2*Skinny -29*2*Silly -30*2*Super -31*2*Ugly -32*2*Weird -33*3*Alvin -34*3*Astro -35*3*Barney -36*3*Bart -37*3*Beppo -38*3*Bert -39*3*Bonzo -40*3*Buford -41*3*Bunky -42*3*Buster -43*3*Butch -44*3*Buzz -45*3*Cecil -46*3*Chester -47*3*Chip -48*3*Chipper -49*3*Clancy -50*3*Clarence -51*3*Cliff -52*3*Clyde -53*3*Dudley -54*3*Duke -55*3*Ernie -56*3*Felix -57*3*Fritz -58*3*Graham -59*3*Harvey -60*3*Hector -61*3*Huey -62*3*Jacques -63*3*Jake -64*3*Knuckles -65*3*Lancelot -66*3*Leroy -67*3*Lionel -68*3*Lloyd -69*3*Louie -70*3*Mac -71*3*Max -72*3*Moe -73*3*Monty -74*3*Milton -75*3*Ned -76*3*Orville -77*3*Oscar -78*3*Oswald -79*3*Ozzie -80*3*Pierre -81*3*Reggie -82*3*Ricky -83*3*Rocco -84*3*Rollie -85*3*Romeo -86*3*Rusty -87*3*Sammie -88*3*Skip -89*3*Skipper -90*3*Skippy -91*3*Spike -92*3*Stinky -93*3*Teddy -94*3*Tom -95*3*Waldo -96*3*Wally -97*3*Wilbur -98*4*Bonnie -99*4*Bubbles -100*4*Candy -101*4*Clover -102*4*Cuddles -103*4*Daffodil -104*4*Daphne -105*4*Dee Dee -106*4*Dottie -107*4*Ginger -108*4*Gwen -109*4*Ladybug -110*4*Lily -111*4*Marigold -112*4*Maxie -113*4*Melody -114*4*Mo Mo -115*4*Nutmeg -116*4*Olive -117*4*Peaches -118*4*Pearl -119*4*Penny -120*4*Petunia -121*4*Rainbow -122*4*Raven -123*4*Robin -124*4*Rosie -125*4*Roxy -126*4*Sadie -127*4*Sally -128*4*Sandy -129*4*Taffy -130*4*Trixie -131*4*Ursula -132*4*Valentine -133*4*Violet -134*4*Vicky -135*4*Willow -136*5*B.D. -137*5*Banjo -138*5*Batty -139*5*Beany -140*5*Bebop -141*5*Bingo -142*5*Binky -143*5*Biscuit -144*5*Bongo -145*5*Boo Boo -146*5*Bonkers -147*5*Bouncey -148*5*Bizzy -149*5*Blinky -150*5*Bumpy -151*5*C.J. -152*5*C.W. -153*5*Chirpy -154*5*Chunky -155*5*Coconut -156*5*Comet -157*5*Corky -158*5*Corny -159*5*Cranky -160*5*Crazy -161*5*Cricket -162*5*Crumbly -163*5*Curly -164*5*Cuckoo -165*5*Daffy -166*5*Dinky -167*5*Dizzy -168*5*Domino -169*5*Drippy -170*5*Droopy -171*5*Dusty -172*5*Dynamite -173*5*Fancy -174*5*Fangs -175*5*Fireball -176*5*Fleabag -177*5*Flapjack -178*5*Flappy -179*5*Flip -180*5*Fluffy -181*5*Freckles -182*5*Frizzy -183*5*Furball -184*5*Goopy -185*5*Huddles -186*5*J.C. -187*5*Jazzy -188*5*Jellyroll -189*5*Kippy -190*5*Kit -191*5*Lefty -192*5*Lollipop -193*5*Loony -194*5*Loopy -195*5*Lucky -196*5*Mildew -197*5*Murky -198*5*Nutty -199*5*Pancake -200*5*Peanut -201*5*Peppy -202*5*Pickles -203*5*Pinky -204*5*Popcorn -205*5*Poppy -206*5*Presto -207*5*Rhubarb -208*5*Salty -209*5*Scooter -210*5*Skids -211*5*Skimpy -212*5*Soupy -213*5*Slappy -214*5*Slippy -215*5*Slumpy -216*5*Smirky -217*5*Snappy -218*5*Sniffy -219*5*Snuffy -220*5*Spiffy -221*5*Spotty -222*5*Spunky -223*5*Squeaky -224*5*Stripey -225*5*Star -226*5*Stubby -227*5*Tricky -228*5*Tubby -229*5*Von -230*5*Wacky -231*5*Wacko -232*5*Whiskers -233*5*Winky -234*5*Yippie -235*5*Z.Z. -236*5*Zany -237*5*Ziggy -238*5*Zilly -239*5*Zippy -240*5*Zippety -241*5*Zowie -242*6*Mc -243*6*Mac -244*7*Bagel -245*7*Banana -246*7*Bean -247*7*Beanie -248*7*Biggen -249*7*Bizzen -250*7*Blubber -251*7*Boingen -252*7*Bumber -253*7*Bumble -254*7*Bumpen -255*7*Cheezy -256*7*Crinkle -257*7*Crumble -258*7*Crunchen -259*7*Crunchy -260*7*Dandy -261*7*Dingle -262*7*Dizzen -263*7*Dizzy -264*7*Doggen -265*7*Dyno -266*7*Electro -267*7*Feather -268*7*Fiddle -269*7*Frinkel -270*7*Fizzle -271*7*Flippen -272*7*Flipper -273*7*Fumble -274*7*Funny -275*7*Fuzzy -276*7*Giggle -277*7*Glitter -278*7*Google -279*7*Grumble -280*7*Gumdrop -281*7*Huckle -282*7*Hula -283*7*Jabber -284*7*Jeeper -285*7*Jinx -286*7*Jumble -287*7*Kooky -288*7*Lemon -289*7*Loopen -290*7*Mac -291*7*Mc -292*7*Mega -293*7*Mizzen -294*7*Nickel -295*7*Nutty -296*7*Octo -297*7*Paddle -298*7*Pale -299*7*Pedal -300*7*Pepper -301*7*Petal -302*7*Pickle -303*7*Pinker -304*7*Poodle -305*7*Precious -306*7*Pumpkin -307*7*Purple -308*7*Poppen -309*7*Rhino -310*7*Robo -311*7*Rocken -312*7*Ruffle -313*7*Smarty -314*7*Sniffle -315*7*Snorkel -316*7*Sour -317*7*Sparkle -318*7*Squiggle -319*7*Super -320*7*Spackle -321*7*Thunder -322*7*Toppen -323*7*Tricky -324*7*Tweedle -325*7*Twiddle -326*7*Twinkle -327*7*Wacky -328*7*Weasel -329*7*Whisker -330*7*Whistle -331*7*Wild -332*7*Witty -333*7*Wonder -334*7*Wrinkle -335*7*Ziller -336*7*Zippen -337*7*Zooble -338*8*bee -339*8*berry -340*8*blabber -341*8*bocker -342*8*boing -343*8*boom -344*8*bounce -345*8*bouncer -346*8*brains -347*8*bubble -348*8*bumble -349*8*bump -350*8*bumper -351*8*chomp -352*8*corn -353*8*crash -354*8*crumbs -355*8*crump -356*8*crunch -357*8*doodle -358*8*dorf -359*8*face -360*8*fidget -361*8*fish -362*8*flap -363*8*fuddy -364*8*flapper -365*8*fink -366*8*flinger -367*8*flip -368*8*flipper -369*8*foot -370*8*fussen -371*8*gadget -372*8*gargle -373*8*glop -374*8*gloop -375*8*goober -376*8*goose -377*8*grooven -378*8*hoffer -379*8*hopper -380*8*jinks -381*8*klunk -382*8*knees -383*8*marble -384*8*mash -385*8*monkey -386*8*mooch -387*8*mouth -388*8*muddle -389*8*muffin -390*8*mush -391*8*nerd -392*8*noodle -393*8*nose -394*8*nugget -395*8*phew -396*8*phooey -397*8*pocket -398*8*pop -399*8*pow -400*8*pretzel -401*8*pounce -402*8*poof -403*8*quack -404*8*roni -405*8*scooter -406*8*screech -407*8*smirk -408*8*snoop -409*8*snooker -410*8*snout -411*8*socks -412*8*speed -413*8*spinner -414*8*splat -415*8*sprinkles -416*8*sticks -417*8*stink -418*8*swirl -419*8*teeth -420*8*thud -421*8*toes -422*8*ton -423*8*toon -424*8*tooth -425*8*twist -426*8*whatsit -427*8*whip -428*8*wig -429*8*woof -430*8*zaner -431*8*zap -432*8*zapper -433*8*zilla -434*8*zoom +29*2*Super +30*2*Ugly +31*2*Weird +32*3*Alvin +33*3*Barney +34*3*Beppo +35*3*Bert +36*3*Bonzo +37*3*Buford +38*3*Bunky +39*3*Buster +40*3*Butch +41*3*Buzz +42*3*Cecil +43*3*Chester +44*3*Chip +45*3*Chipper +46*3*Clancy +47*3*Clarence +48*3*Cliff +49*3*Clyde +50*3*Dudley +51*3*Duke +52*3*Ernie +53*3*Fritz +54*3*Graham +55*3*Harvey +56*3*Hector +57*3*Huey +58*3*Igor +59*3*Jacques +60*3*Jake +61*3*Knuckles +62*3*Lancelot +63*3*Leroy +64*3*Lionel +65*3*Lloyd +66*3*Louie +67*3*Mac +68*3*Max +69*3*Moe +70*3*Monty +71*3*Milton +72*3*Ned +73*3*Orville +74*3*Oscar +75*3*Oswald +76*3*Ozzie +77*3*Pierre +78*3*Reggie +79*3*Ricky +80*3*Rocco +81*3*Rollie +82*3*Romeo +83*3*Rusty +84*3*Sammie +85*3*Skip +86*3*Skipper +87*3*Skippy +88*3*Spike +89*3*Stinky +90*3*Tom +91*3*Waldo +92*3*Wally +93*3*Wilbur +94*4*Bonnie +95*4*Bubbles +96*4*Candy +97*4*Clover +98*4*Cuddles +99*4*Daffodil +100*4*Daphne +101*4*Dee Dee +102*4*Dottie +103*4*Ginger +104*4*Gwen +105*4*Ladybug +106*4*Lily +107*4*Marigold +108*4*Maxie +109*4*Melody +110*4*Mo Mo +111*4*Nutmeg +112*4*Peaches +113*4*Pearl +114*4*Penny +115*4*Petunia +116*4*Rainbow +117*4*Raven +118*4*Robin +119*4*Rosie +120*4*Roxy +121*4*Sadie +122*4*Sally +123*4*Sandy +124*4*Taffy +125*4*Trixie +126*4*Ursula +127*4*Violet +128*4*Vicky +129*5*B.D. +130*5*Banjo +131*5*Batty +132*5*Beany +133*5*Bebop +134*5*Bingo +135*5*Binky +136*5*Biscuit +137*5*Bongo +138*5*Boo Boo +139*5*Bonkers +140*5*Bizzy +141*5*Blinky +142*5*Bumpy +143*5*C.J. +144*5*C.W. +145*5*Chirpy +146*5*Chunky +147*5*Coconut +148*5*Comet +149*5*Corky +150*5*Corny +151*5*Cranky +152*5*Crazy +153*5*Cricket +154*5*Crumbly +155*5*Curly +156*5*Cuckoo +157*5*Daffy +158*5*Dinky +159*5*Dizzy +160*5*Domino +161*5*Drippy +162*5*Droopy +163*5*Dusty +164*5*Fancy +165*5*Fangs +166*5*Fireball +167*5*Fleabag +168*5*Flapjack +169*5*Flappy +170*5*Flip +172*5*Fluffy +173*5*Freckles +174*5*Frizzy +175*5*Furball +176*5*Goopy +177*5*Huddles +178*5*J.C. +179*5*Jellyroll +180*5*Kippy +181*5*Lefty +182*5*Lollipop +183*5*Loony +184*5*Loopy +185*5*Mildew +186*5*Murky +187*5*Nutty +188*5*Pancake +189*5*Peanut +190*5*Peppy +191*5*Pickles +192*5*Pinky +193*5*Popcorn +194*5*Poppy +195*5*Rhubarb +196*5*Salty +197*5*Scooter +198*5*Skids +199*5*Skimpy +200*5*Soupy +201*5*Slappy +202*5*Slippy +203*5*Slumpy +204*5*Smirky +205*5*Snappy +206*5*Sniffy +207*5*Snuffy +208*5*Spiffy +209*5*Spotty +210*5*Spunky +211*5*Stripey +212*5*Stubby +214*5*Tricky +215*5*Tubby +216*5*Von +217*5*Wacky +218*5*Wacko +219*5*Winky +220*5*Yippie +221*5*Z.Z. +222*5*Zany +223*5*Ziggy +224*5*Zilly +225*5*Zippy +226*5*Zippety +227*5*Zowie +228*6*Mc +229*6*Mac +230*7*Bagel +231*7*Banana +232*7*Bean +233*7*Beanie +234*7*Biggen +235*7*Bizzen +236*7*Blubber +237*7*Boingen +238*7*Bumber +239*7*Bumble +240*7*Bumpen +241*7*Cheezy +242*7*Crinkle +243*7*Crumble +244*7*Crunchen +245*7*Crunchy +246*7*Dandy +248*7*Dizzen +249*7*Dizzy +250*7*Doggen +251*7*Dyno +252*7*Electro +253*7*Feather +254*7*Fiddle +255*7*Frinkel +256*7*Fizzle +257*7*Flippen +258*7*Flipper +259*7*Freckle +260*7*Fumble +261*7*Funny +262*7*Fuzzy +263*7*Giggle +264*7*Google +265*7*Huckle +266*7*Hula +267*7*Jabber +268*7*Jeeper +269*7*Jumble +270*7*Kooky +271*7*Lemon +272*7*Loopen +273*7*Mac +274*7*Mc +275*7*Mega +276*7*Mizzen +277*7*Nickel +278*7*Nutty +279*7*Octo +280*7*Paddle +281*7*Pale +282*7*Pedal +283*7*Pepper +284*7*Petal +285*7*Pickle +286*7*Pinker +287*7*Poodle +288*7*Precious +289*7*Purple +290*7*Poppen +291*7*Rhino +292*7*Rocken +294*7*Ruffle +295*7*Sniffle +296*7*Snorkel +297*7*Sour +298*7*Sparkle +299*7*Super +300*7*Spackle +301*7*Thunder +302*7*Toppen +305*7*Tricky +306*7*Twiddle +307*7*Twinkle +308*7*Wacky +309*7*Weasel +310*7*Whisker +311*7*Whistle +304*7*Wild +312*7*Wonder +313*7*Wrinkle +314*7*Ziller +315*7*Zippen +316*7*Zooble +317*8*bee +318*8*berry +319*8*blabber +320*8*bocker +321*8*boing +322*8*boom +323*8*bounce +324*8*bouncer +325*8*brains +326*8*bubble +327*8*bumble +328*8*bump +329*8*bumper +330*8*chomp +331*8*corn +332*8*crash +333*8*crumbs +334*8*crump +335*8*crunch +336*8*doodle +337*8*dorf +338*8*face +339*8*fidget +340*8*fish +341*8*flap +342*8*fuddy +343*8*flapper +345*8*fink +346*8*flinger +347*8*flip +348*8*flipper +349*8*foot +350*8*fussen +351*8*gadget +352*8*gargle +353*8*glop +354*8*gloop +355*8*goober +356*8*goose +357*8*grooven +358*8*hoffer +359*8*hopper +360*8*jinks +361*8*klunk +362*8*knees +363*8*marble +364*8*mash +365*8*monkey +366*8*mooch +367*8*mouth +368*8*muddle +369*8*muffin +370*8*mush +371*8*nerd +372*8*noodle +373*8*nose +374*8*nugget +375*8*phew +376*8*phooey +377*8*pocket +378*8*pop +379*8*pow +380*8*pretzel +381*8*pounce +382*8*poof +383*8*quack +384*8*roni +385*8*scooter +386*8*screech +387*8*seed +388*8*slam +389*8*smirk +390*8*snoop +391*8*snooker +392*8*snout +393*8*socks +394*8*speed +395*8*spinner +396*8*splat +397*8*sticks +398*8*stink +399*8*swirl +400*8*teeth +401*8*thud +402*8*toes +403*8*ton +404*8*toon +405*8*tooth +406*8*twist +407*8*whip +408*8*wig +409*8*woof +410*8*zaner +411*8*zap +412*8*zapper +413*8*zilla +414*2*Silly +415*2*Dippy +416*8*burger diff --git a/resources/phase_3/etc/otp.dc b/resources/phase_3/etc/otp.dc index 0674393e..8dc79dd6 100644 --- a/resources/phase_3/etc/otp.dc +++ b/resources/phase_3/etc/otp.dc @@ -1,824 +1,197 @@ -// See Also: "direct/src/doc/sample.dc" -// ownrecv: used to mean only send to owner/creator. Currently not used. -// required: send on create/generate -// broadcast: send on set and change, but not necessarily create/generate -// broadcast ram: send on set and change (and generate?) -// required broadcast ram: send on set, change, and create/generate - -from direct.distributed import DistributedObject/AI/UD -from direct.distributed import DistributedNode/AI/UD -from direct.distributed import DistributedSmoothNode/AI -from direct.distributed import DistributedCartesianGrid/AI -from direct.distributed import DistributedCamera/AI/OV - -from otp.distributed import Account/AI/UD +from direct.distributed import DistributedObject/AI from otp.ai import TimeManager/AI +from direct.distributed import DistributedNode/AI +from direct.distributed import DistributedSmoothNode/AI from otp.ai import MagicWordManager/AI -from otp.avatar import DistributedAvatar/AI/UD +from otp.avatar import DistributedAvatar/AI from otp.avatar import DistributedPlayer/AI +from otp.distributed import DistributedPuppeteer/AI from otp.friends import FriendManager/AI -from otp.friends import AvatarFriendsManager/UD -from otp.friends import PlayerFriendsManager -from otp.friends import GuildManager/AI/UD -from otp.friends import FriendInfo -from otp.friends import AvatarFriendInfo -from otp.distributed import ObjectServer/AI/UD -from otp.distributed import DistributedDistrict/AI/UD +from otp.guild import DistributedGuildManager/AI +from otp.guild import DistributedGuild/AI +from otp.distributed import DistributedDistrict/AI from otp.distributed import DistributedDirectory/AI -from otp.distributed import DistributedTestObject/AI -from otp.snapshot import SnapshotDispatcher/AI/UD -from otp.snapshot import SnapshotRenderer/AI/UD -from otp.uberdog import OtpAvatarManager/AI/UD -from otp.uberdog import DistributedChatManager/AI/UD -from otp.uberdog import SpeedchatRelay/UD -from otp.distributed import CentralLogger/AI/UD -from otp.web import SettingsMgr/AI/UD -from otp.status import StatusDatabase/UD -from otp.avatar import AvatarHandle - -typedef uint8 bool; +from otp.distributed import Account/AI/UD -typedef uint32 DoId; -typedef DoId [] DoIdList; +keyword required; +keyword broadcast; +keyword ram; +keyword db; +keyword p2p; +keyword clsend; +keyword ownsend; +keyword airecv; -// a pair of longs used to hold avatar id and delete time in DB -struct AvatarPendingDel { +struct AvatarPendingDel { uint32 Avatar; - uint32 date; + uint32 date; }; dclass Account { - // RHH - // This is for internal server only... - // the 6 avatars a person has - string DcObjectType db; - // + string DcObjectType db; uint32array ACCOUNT_AV_SET = [0,0,0,0,0,0] required db; uint32array pirateAvatars = [0,0,0,0,0,0] required db; - // the 6 houses a person has uint32array HOUSE_ID_SET db; uint32 ESTATE_ID db; - AvatarPendingDel [] ACCOUNT_AV_SET_DEL db; + AvatarPendingDel ACCOUNT_AV_SET_DEL[] db; string PLAYED_MINUTES db; string PLAYED_MINUTES_PERIOD db; string CREATED db; string LAST_LOGIN db; }; - struct BarrierData { uint16 context; string name; uint32 avIds[]; }; -// The most fundamental class dclass DistributedObject { - // These are used to support DistributedObjectAI.beginBarrier() and - // the matching DistributedObject.doneBarrier(). If you don't call - // these functions, you don't care about these distributed methods. - // (Actually, you probably don't care anyway.) - setBarrierData(BarrierData data[]) broadcast ram; - setBarrierReady(uint16 context) airecv clsend; - execCommand(string, uint32 mwMgrId, uint32 avId, uint32 zoneId); - // this is to allow the client to force a disconnect from the server - broadcastMessage() broadcast; -}; - -// general-purpose test class -// use this when you just need to create a new distributed object -// and the type doesn't matter -// also used for test cases -dclass DistributedTestObject: DistributedObject { - uint32[] AutoInterest = [10]; - setParentingRules(string type="Stated", string Rule="") broadcast ram; - setRequiredField(uint32 r=78) required broadcast ram; - // fields to test for erroneous default values when no value has been set - setB(uint32 B) broadcast; - setBA(uint32 BA) broadcast airecv; - setBO(uint32 BO) broadcast ownsend; - setBR(uint32 BR) broadcast ram; - setBRA(uint32 BRA) broadcast ram airecv; - setBRO(uint32 BRO) broadcast ram ownsend; - setBROA(uint32 BROA) broadcast ram ownsend airecv; + setBarrierData(BarrierData []) broadcast ram; + setBarrierReady(uint16) airecv clsend; }; -struct OSInfo { - string name; - int16 platform; - int16 major; - int16 minor; -}; - -struct CPUSpeed { - int32 maxSpeed / 1000; - int32 currentSpeed / 1000; -}; - -// The TimeManager should be created before all other objects, because -// network timestamps can't be accurately decoded until the -// TimeManager has been created. -dclass TimeManager: DistributedObject { - requestServerTime(uint8 context) airecv clsend; // safe... - serverTime(uint8 context, int32 timestamp, uint32 timeOfDay); - - // This message is sent from the client to the AI when it disconnects - // cleanly. It is a bit of a hack to put it here in the TimeManager - // (because what does the TimeManager have to do with that?) but we - // can't put it on the toon because it is a message to the AI, and - // this is a convenient place to put it instead. - setDisconnectReason(uint8 disconnectCode) airecv clsend; //appears to be safe... - // For DisconnectPythonError, we also send a string describing the - // exception, for logging. - setExceptionInfo(string info) airecv clsend; //appears safe. perhaps set a limit to the length of info - - // This is the "signature" value read from the xrc file, which - // presumably indicates a particular xrc file in use. The client - // sets this at startup time. It probably ought to be on the player - // too, but then we have trouble sending it before the AI hears - // about the player. - setSignature(string signature, char hash[16], char pyc[16]) airecv clsend; - - // This is the average frame rate reported by the client, along with - // some relevant machine and game statistics. - setFrameRate(uint16 fps / 10, uint16 deviation / 1000, uint16 numAvs, - string locationCode, - uint32 timeInLocation / 10, uint32 timeInGame / 10, - string gameOptionsCode, - uint16 vendorId, uint16 deviceId, - uint32 processMemory / 10, uint32 pageFileUsage / 10, - uint32 physicalMemory / 10, uint32 pageFaultCount, - OSInfo osInfo, CPUSpeed cpuSpeed, - uint16 num_cpu_cores, uint16 num_logical_cpus, - string apiName) airecv clsend; - - // This is sent at startup to provide verbose CPU information. - setCpuInfo(string info, string cacheStatus) airecv clsend; - - // This message tells the dev AI to check for garbage leaks - checkForGarbageLeaks(bool wantReply) airecv clsend; - setNumAIGarbageLeaks(uint32 numLeaks); - // for logging - setClientGarbageLeak(uint32 num, string leak) airecv clsend; +dclass TimeManager : DistributedObject { + requestServerTime(uint8) airecv clsend; + serverTime(uint8, int32, uint32); + setDisconnectReason(uint8) airecv clsend; + setExceptionInfo(string) airecv clsend; }; -// See Also: -// "otp/src/distributed/ObjectServer.py" dclass ObjectServer { - setName(string serverName) airecv ram required; - setDcHash(uint32 hash) ram required; - setDateCreated(uint32 date) airecv; -}; - -//dclass PiratesRoot { -// requestDistricts() clsend; -// requestDistrictsResponse(uint32[] doId) broadcast; -// newDistrict(uint32 doId) broadcast; -// delDistrict(uint32 doId) broadcast; -//}; - -// Generic named container. Intended to be a parent for -// other objects, somewhat like a directory in a file system. -// -// This object has no attributes and none of them get created, but it -// is still needed. It is used as a parent for the individual games. -// The dc system uses the parenting rules as if this object existed. -// -// See Also: -// "otp/src/distributed/DistributeDirectory.py" -dclass DistributedDirectory: DistributedObject { - setParentingRules(string type="Stated", string Rule="") broadcast ram; -}; - -// See Also: -// "otp/src/distributed/DistributedDistrict.py" -// "otp/src/distributed/DistributedDistrictAI.py" -dclass DistributedDistrict: DistributedObject { - setName(string districtName="unnamed") required broadcast ram; - setAvailable(uint8 = 0) required broadcast ram; -}; - -dclass DistributedNode: DistributedObject { - // if other than '', overrules setParent - setParentStr(blob token) broadcast ram ownsend airecv; - setParent(uint32 token) broadcast ram ownsend airecv; - - setX(int16 / 10) broadcast ram ownsend airecv; - setY(int16 / 10) broadcast ram ownsend airecv; - setZ(int16 / 10) broadcast ram ownsend airecv; - setH(int16 % 360 / 10) broadcast ram ownsend airecv; - setP(int16 % 360 / 10) broadcast ram ownsend airecv; - setR(int16 % 360 / 10) broadcast ram ownsend airecv; - - setPos: setX, setY, setZ; - setHpr: setH, setP, setR; - setPosHpr: setX, setY, setZ, setH, setP, setR; - setXY: setX, setY; - setXZ: setX, setZ; - setXYH: setX, setY, setH; - setXYZH: setX, setY, setZ, setH; -}; - -dclass DistributedSmoothNode: DistributedNode { - // Component set pos and hpr functions. - - setComponentL(uint64) broadcast ram ownsend airecv; - setComponentX(int16 / 10) broadcast ram ownsend airecv; - setComponentY(int16 / 10) broadcast ram ownsend airecv; - setComponentZ(int16 / 10) broadcast ram ownsend airecv; - setComponentH(int16 % 360 / 10) broadcast ram ownsend airecv; - setComponentP(int16 % 360 / 10) broadcast ram ownsend airecv; - setComponentR(int16 % 360 / 10) broadcast ram ownsend airecv; - setComponentT(int16 timestamp) broadcast ram ownsend airecv; - - // Composite set pos and hpr functions. These map to combinations - // of one or more of the above components. They all include - // setComponentT(), which must be called last. - setSmStop: setComponentT; - setSmH: setComponentH, setComponentT; - setSmZ: setComponentZ, setComponentT; - setSmXY: setComponentX, setComponentY, setComponentT; - setSmXZ: setComponentX, setComponentZ, setComponentT; - setSmPos: setComponentX, setComponentY, setComponentZ, setComponentT; - setSmHpr: setComponentH, setComponentP, setComponentR, setComponentT; - setSmXYH: setComponentX, setComponentY, setComponentH, setComponentT; - setSmXYZH: setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT; - setSmPosHpr: setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT; - // special update if L (being location, such as zoneId) changes, send everything, intended to - // keep position and 'location' in sync - setSmPosHprL: setComponentL, setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT; - - // I don't need any parameters, but for some reason leaving the - // parameter list empty on this one causes a server crash. - clearSmoothing(int8 bogus) broadcast ownsend; - - suggestResync(uint32 avId, int16 timestampA, int16 timestampB, - int32 serverTimeSec, uint16 serverTimeUSec, - uint16 / 100 uncertainty) ownrecv clsend; - returnResync(uint32 avId, int16 timestampB, - int32 serverTimeSec, uint16 serverTimeUSec, - uint16 / 100 uncertainty) ownrecv clsend; -}; - -dclass DistributedCartesianGrid: DistributedNode { -// Make sure setCellWidth gets called before setParentingRules - setCellWidth(uint32 width) required broadcast ram; -// base:size:resolution -//.. 0:100:1 == 3x3 interest grids.. with 100x100 size.. numbering starting at 0 ie 0.0 = 0 - setParentingRules(string type="Cartesian", string Rule="0:100:1") broadcast ram; -}; - - -struct Fixture { - int32 x / 10; - int32 y / 10; - int32 z / 10; - int16 h / 10; - int16 p / 10; - int16 r / 10; - string state = 'Standby'; -}; - -dclass DistributedCamera: DistributedNode { - setCamParent(uint32 doId = 0) required broadcast ram ownsend airecv; - setFixtures(Fixture[] fixtures) required broadcast ram ownsend airecv; -}; - -// dc base classes for autofiltered chat. now referred to as "talk" - -struct TalkModification - -{ - uint16 offset; - uint16 size; -}; - - -dclass TalkPath_owner -{ - setTalk(uint32 fromAV, uint32 fromAC, string avatarName, string chat, TalkModification mods[], uint8 flags ) broadcast ownsend; -}; - - -dclass TalkPath_whisper -{ - setTalkWhisper(uint32 fromAV,uint32 fromAC,string avatarName, string chat, TalkModification mods[], uint8 flags ) ownrecv clsend; -}; - - -dclass TalkPath_group -{ - setTalkGroup(uint32 fromAV, uint32 fromAC,string avatarName,string chat, TalkModification mods[], uint8 flags ) clsend airecv; -}; - - -dclass TalkPath_account -{ - setTalkAccount(uint32 toAc, uint32 fromAC, string fromName, string chat, TalkModification mods[], uint8 flags ) airecv clsend; -}; - - -dclass AvatarHandle: TalkPath_whisper { -}; - - - -// Base class for DistributedToon, DistributedSuit, etc. -dclass DistributedAvatar: DistributedSmoothNode, TalkPath_owner, TalkPath_whisper { - string DcObjectType db; - setName(string = "unknownDistributedAvatar") required broadcast db airecv; - - // This message is sent by the AI to notify the client when friends - // are added or removed without the client's participation, if the - // client happens to be logged in. It also might be sent directly - // from the friend (or former friend). - // TODO: this is still clsend but should not be to be secure - // avId and status is verified. appears safe. no suspect notification though - friendsNotify(int32 avId, int8 status) ownrecv airecv clsend; - // These messages are used to check if a certain avatar is on my shard - checkAvOnShard(uint32 avId) clsend airecv; - confirmAvOnShard(uint32 avId, int8 onShard); -}; - -// This is the base class for distributed classes (e.g. DistributedToon) -// that might represent player avatars. It excludes non-player avatar -// types like DistributedSuit. -dclass DistributedPlayer: DistributedAvatar { - // The parent rules are handled specially by Roger's server for - // localAvatars, if it where defined here it would look roughly like: - // If we ever need to look into other avatar's "pockets" you might want - // to setup parenting rules here. - // setParentingRules(string type="Stated", string Rule="") broadcast ram; - - // sent by AI avatar to client when avatar is created on the district server - arrivedOnDistrict(uint32 districtId) ownrecv ram; - - setAccountName(string = "unknown") required ownrecv db; - - - // These whisper messages are sent from another client. For now, we - // have to put the fromId in the message, but eventually we need to - // have a way to validate these. - setWhisperFrom(uint32 fromId, string, uint32 senderDISLid) ownrecv clsend; // safe: nice fromId check, string size limit will be nice - setWhisperWLFrom(uint32 fromId, string, uint32 senderDISLid) ownrecv clsend; - setWhisperSCFrom(uint32 fromId, uint16 msgIndex) ownrecv clsend; //security breach: msgIndex need to be range checked...need help = DROSE - setWhisperSCCustomFrom(uint32 fromId, uint16 msgIndex) ownrecv clsend; //security breach: same as above...need help - setWhisperSCEmoteFrom(uint32 fromId, uint16 emoteId) ownrecv clsend; //security breach: emoteId needs range checking...need help = DROSE - // setWhisperIgnored(uint32 fromId) airecv clsend; // fromId validated. appears safe - - // This is an onscreen message sent by the system. - setSystemMessage(uint32 aboutId, string) ownrecv; - + setName(string) required p2p; + setDateCreated(uint32) p2p; +}; + +dclass DistributedDirectory : DistributedObject { + setParentingRules(string, string) broadcast ram; + setName(string) required broadcast ram; +}; + +dclass DistributedDistrict : DistributedObject { + setName(string) required broadcast ram; + setAvailable(uint8) required broadcast ram; +}; + +dclass DistributedGuildMembership : DistributedObject { + setGuilds(uint32 []) p2p; +}; + +dclass DistributedGuildManager : DistributedObject { + setName(string) required broadcast; + requestCreate(string) p2p clsend; + rejectCreate(uint8) p2p; +}; + +dclass DistributedGuildMember : DistributedObject { + setAvatar(uint32) required p2p; + setSince(uint32) p2p; + setReputations(uint32 []) p2p; + requestEndMembership() p2p clsend; +}; + +dclass DistributedGuild : DistributedObject { + setName(string) required p2p; + setOwnerAvatarId(uint32) required p2p; + setMemberListId(uint32) required p2p; + setMemberApplicationListId(uint32) required p2p; + setDateCreated(uint32) p2p; + setGuildStatus(int16) p2p; + setReputations(uint32 []) p2p; + requirementsForLevel(string) p2p; + join() p2p clsend; + invite(uint32) p2p clsend; + rejectJoin(uint32) p2p; +}; + +dclass DistributedNode : DistributedObject { + setParentStr(blob) broadcast ram ownsend airecv; + setParent(uint32) broadcast ram ownsend airecv; + setX(int16/10) broadcast ram ownsend airecv; + setY(int16/10) broadcast ram ownsend airecv; + setZ(int16/10) broadcast ram ownsend airecv; + setH(int16%360/10) broadcast ram ownsend airecv; + setP(int16%360/10) broadcast ram ownsend airecv; + setR(int16%360/10) broadcast ram ownsend airecv; + setPos : setX, setY, setZ; + setHpr : setH, setP, setR; + setPosHpr : setX, setY, setZ, setH, setP, setR; + setXY : setX, setY; + setXZ : setX, setZ; + setXYH : setX, setY, setH; + setXYZH : setX, setY, setZ, setH; +}; + +dclass DistributedSmoothNode : DistributedNode { + setComponentX(int16/10) broadcast ram clsend airecv; + setComponentY(int16/10) broadcast ram clsend airecv; + setComponentZ(int16/10) broadcast ram clsend airecv; + setComponentH(int16%360/10) broadcast ram clsend airecv; + setComponentP(int16%360/10) broadcast ram clsend airecv; + setComponentR(int16%360/10) broadcast ram clsend airecv; + setComponentT(int16) broadcast ram clsend airecv; + setSmStop : setComponentT; + setSmH : setComponentH, setComponentT; + setSmZ : setComponentZ, setComponentT; + setSmXY : setComponentX, setComponentY, setComponentT; + setSmXZ : setComponentX, setComponentZ, setComponentT; + setSmPos : setComponentX, setComponentY, setComponentZ, setComponentT; + setSmHpr : setComponentH, setComponentP, setComponentR, setComponentT; + setSmXYH : setComponentX, setComponentY, setComponentH, setComponentT; + setSmXYZH : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT; + setSmPosHpr : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT; + clearSmoothing(int8) broadcast clsend; + suggestResync(uint32, int16, int16, int32, uint16, uint16/100) ownrecv clsend; + returnResync(uint32, int16, int32, uint16, uint16/100) ownrecv clsend; +}; + +dclass DistributedAvatar : DistributedSmoothNode { + setName(string = "[Name not set]") required broadcast db airecv; + friendsNotify(int32, int8) ownrecv airecv clsend; +}; + +dclass DistributedPlayer : DistributedAvatar { + setAccountName(string = "") required ownrecv db; + setChat(string, uint8) broadcast ownsend; + setWhisperFrom(uint32, string) ownrecv clsend; + setWhisperSCFrom(uint32, uint16) ownrecv clsend; + setWhisperSCCustomFrom(uint32, uint16) ownrecv clsend; + setWhisperSCEmoteFrom(uint32, uint16) ownrecv clsend; + setWhisperIgnored(uint32) ownrecv clsend; + setSystemMessage(uint32, string) ownrecv; setCommonChatFlags(uint8) broadcast ownrecv ram airecv; - - // RAU weird, I had to add ownrecv to make sure localAvatar and other clients get this message - setWhitelistChatFlags(uint8) broadcast ownrecv ram airecv; - - setSC(uint16 msgIndex) broadcast ownsend airecv; - setSCCustom(uint16 msgIndex) broadcast ownsend airecv; - // this is sent as a setEmoteState call instead - //setSCEmote(uint16 emoteId) broadcast ownsend; - - // This field is airecv so we hear about friend making - // for the questManager. Perhaps there is a better way to do - // this when Roger gets back to help. + setSC(uint16) broadcast ownsend airecv; + setSCCustom(uint16) broadcast ownsend airecv; setFriendsList(uint32uint8array = {}) ownrecv required db airecv; - - // Added for new friend make/break flows - setDISLname(string="unknown") broadcast ownrecv ram; - // We want to store - setDISLid(uint32=0) broadcast ownrecv ram db airecv required; - - // these fields are for the Servers .. client should never see these ?? - // the index - OwningAccount(uint32 avId = 0); - // the string the person want to be there av's name + OwningAccount(uint32 accId = 0) ram db airecv; WishName(string = "") db ram; - // CLOSED,OPEN,USED,.. The state of the name review process - WishNameState(string = "") db ram; - //Access Contorl for velvet rope - setPreviousAccess(uint8 access = 0) required db airecv; - setAccess(uint8 access = 2) broadcast ownrecv required ram airecv; - - setAsGM(bool isGM = 0) required ram broadcast ownrecv airecv; + WishNameState(string = "OPEN") db ram; }; -dclass MagicWordManager: DistributedObject { - setMagicWord(string, uint32 avId, uint32 zoneId, - string signature) airecv clsend; - setMagicWordResponse(string) airecv; - setWho(uint32array avIds) airecv clsend; +dclass DistributedPuppeteer : DistributedObject { + requestPuppet() p2p clsend; + requestExit() p2p clsend; + rejectPuppet() p2p; }; -// See Also: -// "otp/src/uberdog/OtpAvatarManager.py" -// "otp/src/uberdog/OtpAvatarManagerAI.py" -dclass OtpAvatarManager: DistributedObject { - online(); - - // In response to this message, expect one of - // rejectCreateAvatar() or createAvatarResponse(). - requestAvatarList(uint32 senderId) airecv clsend; - - // result is an error code. - rejectAvatarList(uint32 result); - - // avatarId is the newly created avatarId. - avatarListResponse(blob pickleData); - - - - //----------------------------------- - // Ask to lock a slot for avatar creation - requestAvatarSlot(uint32 senderId,uint32 subId, uint8 slot) clsend airecv; - rejectAvatarSlot(uint32 result, uint32 subId, uint8 slot); - avatarSlotResponse(uint32 subId, uint8 slot); - - //----------------------------------- - // Ask to play an avatar - requestPlayAvatar(uint32 senderId, uint32 avatarId, uint32 subId) clsend airecv; - rejectPlayAvatar(uint32 result, uint32 avatarId); - - // Access codes that the Game Server will sniff out and - // store as broadcast fields on the avatar - // 1 = VELVET_ROPE - // 2 = FULL - playAvatarResponse(uint32 avatarId, uint32 subId, uint8 access, uint8 founder); - - // requestCreateAvatar has to be defined in pirates.dc or toon.dc - // because the DNA has different definitions - - // result is an error code. - rejectCreateAvatar(uint32 result); - - // avatarId is the newly created avatarId - createAvatarResponse(uint32 avatarId, uint32 subId, uint8 access, uint8 founder); - - //----------------------------------- - - // In response to this message, expect one of - // rejectRemoveAvatar() or removeAvatarResponse(). - requestRemoveAvatar(uint32 senderId, uint32 avatarId, uint32 subId, string confirmPassword) airecv clsend; - - // result is an error code. - rejectRemoveAvatar(uint32 result); - - // avatarId is the newly removed avatarId. - removeAvatarResponse(uint32 avatarId, uint32 subId); - - //----------------------------------- - - // In response to this message, expect one of - // rejectShareAvatar() or shareAvatarResponse(). - requestShareAvatar(uint32 senderId, uint32 avatarId, uint32 subId, uint8 shared) airecv clsend; - - // result is an error code. - rejectShareAvatar(uint32 result); - - // avatarId is the modified avatarId. - shareAvatarResponse(uint32 avatarId, uint32 subId, uint8 shared); - -}; - -//---------------------------------------------------------------------------- -dclass DistributedChatManager: DistributedObject { - online(); - - // UD to Clients (ALL clients) - adminChat(uint32 aboutId, string message); - - // AI to Client - //aiChat(string message); - - // AI to UD - setAvatarLocation(uint32 avatarId, uint32 parentId, uint32 zoneId); - setAvatarCrew(uint32 avatarId, uint32 zoneId); - setAvatarGuild(uint32 avatarId, uint32 zoneId); - - // New Chat - chatParentId(uint32 parentId) airecv clsend; - chatZoneId(uint32 zoneOrAvatarId) airecv clsend; - chatFace(uint32 doId) airecv clsend; // LookAt - chatEmote(uint16 emoteId) airecv clsend; - chatEmoteTarget(uint32 doId) airecv clsend; - chatIndex(uint16 msgIndex) airecv clsend; - chatString(string message) airecv clsend; - - chatToAvatarIndex: - chatZoneId, chatIndex; - chatParentZoneFaceEmoteWithTargetIndex: - chatParentId, chatZoneId, chatFace, chatEmote, chatEmoteTarget, chatIndex; - - chatToAvatarString: - chatZoneId, chatString; - chatParentZoneFaceEmoteWithTargetString: - chatParentId, chatZoneId, chatFace, chatEmote, chatEmoteTarget, chatString; - - // Client to location (zone) - - speedChatTo(uint16 msgIndex) airecv clsend; - speedChatFrom(uint32 fromId, uint16 msgIndex); - speedChatCustomTo(uint16 msgIndex) airecv clsend; - speedChatCustomFrom(uint32 fromId, uint16 msgIndex); - - // Client to avatar (doId) - whisperSCTo(uint32 toId, uint16 msgIndex) airecv clsend; - whisperSCFrom(uint32 fromId, uint16 msgIndex); - whisperSCCustomTo(uint32 toId, uint16 msgIndex) airecv clsend; - whisperSCCustomFrom(uint32 fromId, uint16 msgIndex); - whisperSCEmoteTo(uint32 toId, uint16 emoteId) airecv clsend; - whisperSCEmoteFrom(uint32 fromId, uint16 emoteId); - whisperIgnored(uint32 fromId); - -}; - -//---------------------------------------------------------------------------- - -dclass FriendManager: DistributedObject { - // Messages from inviter client to AI - // **** - friendQuery(int32 inviteeId) airecv clsend; //security breach: inviteeId need validation//Done,inviteeId validated and suspicious log entered if invalid - // **** - cancelFriendQuery(int32 context) airecv clsend; //security breach: context need range check...need help = DROSE - - // Messages from invitee client to AI - // **** - inviteeFriendConsidering(int8 yesNo, int32 context) airecv clsend; //security breach: yesNo and context need range check - // **** - inviteeFriendResponse(int8 yesNoMaybe, int32 context) airecv clsend; //security breach: yesNoMaybe and context need range check - // **** - inviteeAcknowledgeCancel(int32 context) airecv clsend; //security breach: context need range check - - // Messages from AI to inviter client - friendConsidering(int8 yesNo, int32 context); - friendResponse(int8 yesNoMaybe, int32 context); - - // Messages from AI to invitee client - inviteeFriendQuery(int32 inviterId, string inviterName, - blob inviterDna, int32 context); - inviteeCancelFriendQuery(int32 context); - - - // Messages involving secrets. - requestSecret() airecv clsend; //safe, timing could be an issue...owner, please check - requestSecretResponse(int8 result, string secret); - - submitSecret(string secret) airecv clsend; //possible security breach: secret might need sanity check...need help = ROGER/DROSE - submitSecretResponse(int8 result, int32 avId); -}; - - -// Player (Switchboard) Friends ONLY -struct FriendInfo -{ - string avatarName; - uint32 avatarId; - string playerName; - uint8 onlineYesNo; - uint8 openChatEnabledYesNo; // does my friend have blacklist chat enabled - uint8 openChatFriendshipYesNo; // am i true friend, implies i can blacklist chat to him - uint8 wlChatEnabledYesNo; // does my friend have whitelist chat enabled - string location; - string sublocation; - uint32 timestamp; -}; - -// Avatar (Product-specific) Friends ONLY -struct AvatarFriendInfo -{ - string avatarName; - string playerName; - uint32 playerId; - - uint8 onlineYesNo; - uint8 openChatEnabledYesNo; // does my friend have blacklist chat enabled - uint8 openChatFriendshipYesNo; // am i true friend, implies i can blacklist chat to him - uint8 wlChatEnabledYesNo; // does my friend have whitelist chat enabled -}; - -struct MemberInfo -{ - uint32 avatarId; - string avatarName; - uint8 avatarRank; - uint8 avatarOnline; - uint32 bandManagerId; - uint32 bandId; -}; - -struct leaderBoardRecordResponces -{ - char found; // was a record found - uint32 id; // the id of the requested object - string text; // the optional text for the object - int32 value; // the value of the object... -}; - -struct leaderBoardRecord -{ - uint32 id; // the is in the leader board.. - string text; // the optional text string defining this object - int32 value; // the value of the object -}; - -dclass LeaderBoardReceiver -{ - getTopTenResponce( string contest, leaderBoardRecord[] details); - getValuesResponce(string contest, leaderBoardRecordResponces[] out) ; -}; - -dclass LeaderBoard : LeaderBoardReceiver{ - // SETTERS - setValue(string[] contest, uint32 id, string text, int32 value) ; - alterValue(string[] contest, uint32 id, string text, int32 delta) ; - setHighScore(string[] contest, uint32 id, string text, int32 value) ; - // ACCESSERS - // - // Used for normal DC responce .. as a distributed object... - getValues(string contest, uint32[] id); - getTopTen( string contest); - - // Used to enable to LeaderBoardReceiver functionality - // the output update will be sent on the object doid passed as - // a last input value... - getValuesRespondTo(string contest, uint32[] id, uint32 doid); - getTopTenRespondTo( string contest, uint32 doid); -}; - -dclass GuildManager: DistributedObject, LeaderBoardReceiver, TalkPath_group { - online(); - //setParentingRules(string type="Stated", string Rule=""); - - guildRejectInvite(uint32 avatarId,uint32 reason); - invitationFrom(uint32 avatarId, string avatarName, uint32 guildId, string guildName); - requestInvite(uint32 avatarId) airecv clsend; // CL -> UD - memberList() airecv clsend; // CL -> UD - createGuild() airecv clsend; // CL -> UD - acceptInvite() airecv clsend; // CL -> UD - declineInvite() airecv clsend; // CL -> UD - setWantName(string newName) airecv clsend; // CL -> UD - removeMember(uint32 avatarId) airecv clsend; // CL -> UD - changeRank(uint32 avatarId, uint8 rank) airecv clsend; // CL -> UD - statusRequest() airecv clsend; // CL -> UD - requestLeaderboardTopTen() airecv clsend; // CL -> UD - guildStatusUpdate(uint32 guildId, string guildname, uint8 rank); // CL -> UD - guildNameReject(uint32 guildId); // UD -> CL - guildNameChange(string guildname, uint8 rank); // UD -> CL - receiveMember(MemberInfo member); // UD -> CL - receiveMembersDone(); // UD -> CL - guildAcceptInvite(uint32 avatarId); // UD -> CL - guildDeclineInvite(uint32 avatarId); // UD -> CL - updateRep(uint32 avatarId, uint32 rep); // AI -> UD - leaderboardTopTen(leaderBoardRecord [] stuff); // UD -> CL - - recvAvatarOnline(uint32 avatarId, string avatarName, uint32 bandManagerId, uint32 bandId); // UD -> CL - recvAvatarOffline(uint32 avatarId, string avatarName); // UD -> CL - - sendChat(string msgText,uint8 chatFlags,uint32 DISLid) airecv clsend; - sendWLChat(string msgText,uint8 chatFlags,uint32 DISLid) airecv clsend; - sendSC(uint16 msgIndex) airecv clsend; - sendSCQuest(uint16 questInt, uint16 msgIndex, uint16 taskNum) airecv clsend; - - recvChat(uint32 senderId,string msgText,uint8 chatFlags,uint32 DISLid); - recvWLChat(uint32 senderId,string msgText,uint8 chatFlags,uint32 DISLid); - recvSC(uint32 senderId,uint16 msgIndex); - recvSCQuest(uint32 senderId, uint16 questInt, uint16 msgIndex, uint16 taskNum); - - sendTokenRequest() airecv clsend; - recvTokenGenerated(string tokenString); - recvTokenInviteValue(string tokenValue, int8 preExistPerm); - sendTokenForJoinRequest(string token, string name) airecv clsend; - recvTokenRedeemMessage(string guildName); - recvTokenRedeemedByPlayerMessage(string redeemerName); - sendTokenRValue(string tokenString, int8 rValue) airecv clsend; - sendPermToken() airecv clsend; - sendNonPermTokenCount() airecv clsend; - recvPermToken(string token); - recvNonPermTokenCount(uint8 count); - sendClearTokens(uint8 type) airecv clsend; - // The next three are currently commented out; - // waiting for "send-to-a-friend" system access - // sendRequestEmailNotificationPref() airecv clsend; - // respondEmailNotificationPref(int8 notify, string emailAddress); - // sendEmailNotificationPrefUpdate(int8 notify, string emailAddress) airecv clsend; - - sendAvatarBandId(uint32 avatarId, uint32 bandManagerId, uint32 bandId); - recvMemberAdded(MemberInfo info); - // (uint32 avatarId, string avatarName, uint8 rank, uint8 rank, uint32 bandManagerId, uint32 bandId); - recvMemberRemoved(uint32 avatarId); - recvMemberUpdateName(uint32 avatarId, string name); - recvMemberUpdateRank(uint32 avatarId, uint8 rank); - recvMemberUpdateBandId(uint32 avatarId, uint32 bandManagerId, uint32 bandId); - - avatarOnline(uint32 avatarId, uint16 avatarType); // AvatarMgrUD to AvatarFriendMgrUD - avatarOffline(uint32 avatarId); // AvatarMgrUD to AvatarFriendMgrUD - - reflectTeleportQuery(uint32 sendToId, uint32 bandMgrId, uint32 bandId, uint32 guildId, uint32 shardId) clsend airecv; - teleportQuery(uint32 requesterId, uint32 bandMgrId, uint32 bandId, uint32 guildId, uint32 shardId); - reflectTeleportResponse(uint32 sendToId, int8 available, - uint32 shardId, uint32 instanceDoId, - uint32 areaDoId) clsend airecv; - teleportResponse(uint32 responderId, int8 available, - uint32 shardId, uint32 instanceDoId, - uint32 areaDoId); - requestGuildMatesList(uint32 doId, uint32 channel, uint32 avId); - updateAvatarName(uint32 avatarId,string avatarName); - avatarDeleted(uint32 avatarId); -}; - -dclass AvatarFriendsManager: DistributedObject { - online(); - requestInvite(uint32 avatarId) airecv clsend; - friendConsidering(uint32 avatarId) airecv clsend; - invitationFrom(uint32 avatarId,string avatarName); - retractInvite(uint32 avatarId); - rejectInvite(uint32 avatarId,uint32 reason); - - requestRemove(uint32 avatarId) airecv clsend; - rejectRemove(uint32 avatarId,uint32 reason); - - updateAvatarFriend(uint32 avatarId,AvatarFriendInfo info); - removeAvatarFriend(uint32 avatarId); - - updateAvatarName(uint32 avatarId,string avatarName); - - avatarOnline(uint32 avatarId, uint32 accountId, string playerName, bool playerNameApproved, bool openChatEnabled, string createFriendsWithChat, string chatCodeCreation); // AvatarMgrUD to AvatarFriendMgrUD - avatarOffline(uint32 avatarId); // AvatarMgrUD to AvatarFriendMgrUD -}; - -dclass PlayerFriendsManager: DistributedObject, TalkPath_account { - //online(); - requestInvite(uint32 senderId,uint32 otherPlayerId,uint8 secretYesNo) airecv clsend; - invitationFrom(uint32 playerId, string playerName); - retractInvite(uint32 playerId); - //rejectInvite(uint32 playerId, uint32 reason); // obsolete in SB 2.0 - invitationResponse(uint32 doid, uint16 respCode, uint32 context); - - requestDecline(uint32 senderId, uint32 playerId) airecv clsend; - requestDeclineWithReason(uint32 senderId, uint32 playerId, uint32 reason) airecv clsend; // new field 249 - requestRemove(uint32 senderId, uint32 playerId) airecv clsend; - //rejectRemove(uint32 playerId, uint32 reason); - - //requestUnlimitedSecret(uint32 senderId) airecv clsend; // no codes for player friends - //requestLimitedSecret(uint32 senderId,string parentUser,string parentPass) airecv clsend; // no codes for player friends - secretResponse(string secret); - rejectSecret(string reason); - - //requestUseUnlimitedSecret(uint32 senderId,string secret) airecv clsend; // no codes for player friends - //requestUseLimitedSecret(uint32 senderId,string secret,string parentUser,string parentPass) airecv clsend; // no codes for player friends - rejectUseSecret(string reason); - - //whisperTo(uint32 senderId,uint32 playerId,string msg) airecv clsend; //no longer needed accdg to John - //whisperWLTo(uint32 senderId,uint32 playerId,string msg) airecv clsend; //no longer needed accdg to John - //whisperSCTo(uint32 senderId,uint32 playerId,uint32 msgId) airecv clsend; - //whisperSCCustomTo(uint32 senderId,uint32 playerId,uint32 msgId) airecv clsend; - //whisperSCEmoteTo(uint32 senderId,uint32 playerId,uint32 msgId) airecv clsend; - //whisperFrom(uint32 playerId,string msg); - //whisperWLFrom(uint32 playerId,string msg); - //whisperSCFrom(uint32 playerId,string msg); - - updatePlayerFriend(uint32 playerId,FriendInfo info,uint8 is_newfriend); - removePlayerFriend(uint32 playerId); - - //avatarOnline(uint32 avatarId, uint32 accountId, string playerName, bool playerNameApproved, bool openChatEnabled, string createFriendsWithChat, string chatCodeCreation); // AvatarMgrUD to AvatarFriendMgrUD - //avatarOffline(uint32 avatarId); // AvatarMgrUD to AvatarFriendMgrUD -}; - -dclass SnapshotDispatcher: DistributedObject { - online(); - requestRender(uint32 avatarId); // AI -> Dispatcher - avatarDeleted(uint32 avatarId); // AvatarManager -> Dispatcher - requestNewWork(uint32 rendererLoc); // Renderer -> Dispatcher - errorFetchingAvatar(uint32 rendererLoc,uint32 jobId); // Renderer -> Dispatcher - errorRenderingAvatar(uint32 rendererLoc,uint32 jobId); // Renderer -> Dispatcher - renderSuccessful(uint32 rendererLoc,uint32 jobId); // Renderer -> Dispatcher -}; - -dclass SnapshotRenderer: DistributedObject { - online(); - requestRender(uint32 jobId,uint32 avatarId,string writeToFile); // Dispatcher -> Renderer -}; - -dclass SpeedchatRelay : DistributedObject, TalkPath_account{ - forwardSpeedchat(uint32 receiverDISLid, uint8 type, uint32 [] index, uint32 senderDISLId, string senderDISLName, uint8 flags) clsend; -}; - - -dclass CentralLogger : DistributedObject { - sendMessage(string category, string text, uint32 targetDISLId, uint32 targetAvatarID) clsend; -}; - -dclass SettingsMgr: DistributedObject { - requestAllChangedSettings() airecv clsend; // AI->UD, client->UD - settingChange(string name, string value) airecv; // UD->AI/client or UD->all AIs/clients -}; - -dclass StatusDatabase : DistributedObject { - requestOfflineAvatarStatus(uint32[] avIds) airecv clsend; // CL -> UD - recvOfflineAvatarStatus(uint32 avId, uint32 lastOnline); // UD -> CL -}; - -// Mixin class for objects to receive a generic ACK/NACK callback response -dclass CallbackObject { - callback(uint32 context,bool success,uint8 errorCode); +dclass MagicWordManager : DistributedObject { + setMagicWord(string, uint32, uint32) airecv clsend; + setMagicWordResponse(string) airecv; + setWho(uint32array) airecv clsend; +}; + +dclass FriendManager : DistributedObject { + friendQuery(int32) airecv clsend; + cancelFriendQuery(int32) airecv clsend; + inviteeFriendConsidering(int8, int32) airecv clsend; + inviteeFriendResponse(int8, int32) airecv clsend; + inviteeAcknowledgeCancel(int32) airecv clsend; + friendConsidering(int8, int32); + friendResponse(int8, int32); + inviteeFriendQuery(int32, string, blob, int32); + inviteeCancelFriendQuery(int32); + requestSecret() airecv clsend; + requestSecretResponse(int8, string); + submitSecret(string) airecv clsend; + submitSecretResponse(int8, int32); }; diff --git a/resources/phase_3/etc/toon.dc b/resources/phase_3/etc/toon.dc index abf8498a..bcc80dc0 100644 --- a/resources/phase_3/etc/toon.dc +++ b/resources/phase_3/etc/toon.dc @@ -1,33 +1,19 @@ -// See Also: "direct/src/doc/sample.dc" - from toontown.ai import WelcomeValleyManager/AI from toontown.building import DistributedAnimatedProp/AI -from toontown.toon import DistributedToon/AI/UD +from toontown.toon import DistributedToon/AI from toontown.classicchars import DistributedCCharBase/AI from toontown.classicchars import DistributedMickey/AI -from toontown.classicchars import DistributedVampireMickey/AI from toontown.classicchars import DistributedMinnie/AI -from toontown.classicchars import DistributedWitchMinnie/AI from toontown.classicchars import DistributedGoofy/AI -from toontown.classicchars import DistributedSuperGoofy/AI -from toontown.classicchars import DistributedDaisy/AI -from toontown.classicchars import DistributedChip/AI -from toontown.classicchars import DistributedDale/AI -from toontown.classicchars import DistributedGoofySpeedway/AI from toontown.classicchars import DistributedDonald/AI -from toontown.classicchars import DistributedDonaldDock/AI from toontown.classicchars import DistributedPluto/AI -from toontown.classicchars import DistributedWesternPluto/AI from toontown.safezone import DistributedTrolley/AI -from toontown.safezone import DistributedPartyGate/AI from toontown.suit import DistributedSuitPlanner/AI from toontown.suit import DistributedSuitBase/AI from toontown.suit import DistributedSuit/AI -from toontown.suit import DistributedSuit/AI from toontown.suit import DistributedTutorialSuit/AI from toontown.suit import DistributedFactorySuit/AI from toontown.suit import DistributedMintSuit/AI -from toontown.suit import DistributedStageSuit/AI from toontown.suit import DistributedSellbotBoss/AI from toontown.suit import DistributedCashbotBoss/AI from toontown.coghq import DistributedCashbotBossSafe/AI @@ -53,15 +39,12 @@ from toontown.minigame import DistributedMinigame/AI from toontown.minigame import DistributedMinigameTemplate/AI from toontown.minigame import DistributedRaceGame/AI from toontown.minigame import DistributedCannonGame/AI -from toontown.minigame import DistributedPhotoGame/AI from toontown.minigame import DistributedPatternGame/AI from toontown.minigame import DistributedRingGame/AI from toontown.minigame import DistributedTagGame/AI from toontown.minigame import DistributedMazeGame/AI from toontown.minigame import DistributedTugOfWarGame/AI from toontown.minigame import DistributedCatchGame/AI -from toontown.minigame import DistributedDivingGame/AI -from toontown.minigame import DistributedTargetGame/AI from toontown.estate import EstateManager/AI from toontown.estate import DistributedEstate/AI from toontown.estate import DistributedHouse/AI @@ -82,52 +65,35 @@ from toontown.safezone import DistributedDLTreasure/AI from toontown.safezone import DistributedTTTreasure/AI from toontown.safezone import DistributedBRTreasure/AI from toontown.safezone import DistributedMMTreasure/AI -from toontown.safezone import DistributedOZTreasure/AI from toontown.safezone import DistributedETreasure/AI from toontown.safezone import DistributedEFlyingTreasure/AI from toontown.minigame import DistributedTagTreasure/AI from toontown.coghq import DistributedCashbotBossTreasure/AI from toontown.building import DistributedTrophyMgr/AI from toontown.building import DistributedBuilding/AI -from toontown.building import DistributedAnimBuilding/AI from toontown.building import DistributedToonInterior/AI -from toontown.building import DistributedToonHallInterior/AI from toontown.building import DistributedSuitInterior/AI from toontown.building import DistributedHQInterior/AI from toontown.building import DistributedGagshopInterior/AI from toontown.building import DistributedPetshopInterior/AI -from toontown.building import DistributedKartShopInterior/AI from toontown.building import DistributedDoor/AI -from toontown.building import DistributedAnimDoor/AI from toontown.estate import DistributedHouseDoor/AI from toontown.coghq import DistributedCogHQDoor/AI from toontown.toon import DistributedNPCToonBase/AI from toontown.toon import DistributedNPCToon/AI -from toontown.toon import DistributedNPCSpecialQuestGiver/AI -from toontown.toon import DistributedNPCFlippyInToonHall/AI -from toontown.toon import DistributedNPCScientist/AI from toontown.toon import DistributedNPCClerk/AI from toontown.toon import DistributedNPCTailor/AI from toontown.toon import DistributedNPCBlocker/AI from toontown.toon import DistributedNPCFisherman/AI -from toontown.toon import DistributedNPCPartyPerson/AI from toontown.toon import DistributedNPCPetclerk/AI -from toontown.toon import DistributedNPCKartClerk/AI from toontown.building import DistributedKnockKnockDoor/AI from toontown.building import DistributedElevator/AI -from toontown.building import DistributedElevatorFSM/AI from toontown.building import DistributedElevatorExt/AI from toontown.building import DistributedElevatorInt/AI from toontown.coghq import DistributedFactoryElevatorExt/AI from toontown.coghq import DistributedMintElevatorExt/AI -from toontown.coghq import DistributedLawOfficeElevatorExt/AI -from toontown.coghq import DistributedLawOfficeElevatorInt/AI -from toontown.building import DistributedElevatorFloor/AI from toontown.building import DistributedBossElevator/AI from toontown.building import DistributedCFOElevator/AI -from toontown.building import DistributedCJElevator/AI -from toontown.building import DistributedBBElevator/AI -from toontown.building import DistributedBoardingParty/AI from toontown.building import DistributedTutorialInterior/AI from toontown.estate import DistributedBankMgr/AI from toontown.estate import DistributedMailbox/AI @@ -143,8 +109,6 @@ from otp.level import DistributedLevel/AI from otp.level import DistributedEntity/AI from otp.level import DistributedInteractiveEntity/AI from toontown.coghq import DistributedFactory/AI -from toontown.coghq import DistributedLawOffice/AI -from toontown.coghq import DistributedLawOfficeFloor/AI from toontown.coghq import DistributedLift/AI from toontown.coghq import DistributedDoorEntity/AI from toontown.coghq import DistributedSwitch/AI @@ -154,11 +118,6 @@ from toontown.coghq import DistributedCrushableEntity/AI from toontown.coghq import DistributedCrusherEntity/AI from toontown.coghq import DistributedStomper/AI from toontown.coghq import DistributedStomperPair/AI -from toontown.coghq import DistributedLaserField/AI -from toontown.coghq import DistributedGolfGreenGame/AI -from toontown.coghq import DistributedSecurityCamera/AI -from toontown.coghq import DistributedMover/AI -from toontown.coghq import DistributedElevatorMarker/AI from toontown.coghq import DistributedBarrelBase/AI from toontown.coghq import DistributedGagBarrel/AI from toontown.coghq import DistributedBeanBarrel/AI @@ -173,361 +132,57 @@ from toontown.suit import DistributedGoon/AI from toontown.suit import DistributedGridGoon/AI from toontown.coghq import BattleBlocker/AI from toontown.ai import DistributedBlackCatMgr/AI -from toontown.ai import DistributedPolarPlaceEffectMgr/AI from toontown.ai import DistributedResistanceEmoteMgr/AI -from toontown.ai import DistributedScavengerHuntTarget/AI -from toontown.ai import DistributedTrickOrTreatTarget/AI -from toontown.ai import DistributedWinterCarolingTarget/AI from toontown.coghq import DistributedMint/AI from toontown.coghq import DistributedMintRoom/AI from toontown.coghq import DistributedMintBattle/AI -from toontown.coghq import DistributedStage/AI -from toontown.coghq import DistributedStageRoom/AI -from toontown.coghq import DistributedStageBattle/AI from toontown.pets.PetDCImports/AI import * -from toontown.pets import DistributedPetProxy/AI from toontown.coghq.InGameEditorDCImports/AI import * from toontown.distributed import ToontownDistrict/AI -from toontown.distributed import ToontownDistrictStats/AI -from toontown.racing import DistributedVehicle/AI -from toontown.racing import DistributedStartingBlock/AI -from toontown.racing import DistributedRace/AI -from toontown.racing import DistributedKartPad/AI -from toontown.racing import DistributedRacePad/AI -from toontown.racing import DistributedViewPad/AI -from toontown.racing import DistributedStartingBlock/AI -from toontown.racing import DistributedLeaderBoard/AI -from toontown.racing import DistributedGag/AI -from toontown.racing import DistributedProjectile/AI -from toontown.racing.DistributedStartingBlock/AI import DistributedViewingBlock/AI -from toontown.uberdog.DistributedDeliveryManager/AI/UD import DistributedDeliveryManager/AI/UD -from toontown.uberdog.DistributedDataStoreManager/AI/UD import DistributedDataStoreManager/AI/UD -from toontown.suit import DistributedLawbotBoss/AI -from toontown.coghq import DistributedLawbotBossGavel/AI -from toontown.suit import DistributedLawbotBossSuit/AI -from toontown.coghq import DistributedLawbotCannon/AI -from toontown.coghq import DistributedLawbotChair/AI -//from toontown.estate import DistributedPlant/AI -from toontown.estate import DistributedLawnDecor/AI -from toontown.estate import DistributedGardenPlot/AI -from toontown.estate import DistributedGardenBox/AI - -from toontown.estate import DistributedFlower/AI -from toontown.estate import DistributedGagTree/AI -from toontown.estate import DistributedStatuary/AI -from toontown.estate import DistributedToonStatuary/AI -from toontown.estate import DistributedChangingStatuary/AI -from toontown.estate import DistributedPlantBase/AI -from toontown.estate import DistributedLawnDecor/AI -from toontown.minigame import DistributedTravelGame/AI -from toontown.minigame import DistributedPairingGame/AI -from toontown.minigame import DistributedVineGame/AI - -//from toontown.golf import DistributedGolfEntrance/AI -from toontown.golf import DistributedPhysicsWorld/AI -from toontown.golf import DistributedGolfHole/AI -from toontown.golf import DistributedGolfCourse/AI - -// Parties (Schell Games): -from toontown.parties import DistributedParty/AI -from toontown.parties import DistributedPartyActivity/AI -from toontown.parties import DistributedPartyTeamActivity/AI -from toontown.parties import DistributedPartyCannon/AI -from toontown.parties import DistributedPartyCannonActivity/AI -from toontown.parties import DistributedPartyCatchActivity/AI -from toontown.parties import DistributedPartyCogActivity/AI -from toontown.parties import DistributedPartyFireworksActivity/AI -from toontown.parties import DistributedPartyDanceActivityBase/AI -from toontown.parties import DistributedPartyDanceActivity/AI -from toontown.parties import DistributedPartyDance20Activity/AI -from toontown.parties import DistributedPartyTrampolineActivity/AI -from toontown.parties import DistributedPartyVictoryTrampolineActivity/AI -from toontown.parties import DistributedPartyTugOfWarActivity/AI -from toontown.parties import DistributedPartyJukeboxActivityBase/AI -from toontown.parties import DistributedPartyJukeboxActivity/AI -from toontown.parties import DistributedPartyJukebox40Activity/AI - - -//from toontown.friends import TTAvatarFriendsManager/UD -from toontown.friends import TTPlayerFriendsManager -from toontown.uberdog import TTSpeedchatRelay/UD - -from toontown.safezone import DistributedGolfKart/AI -from toontown.safezone import DistributedPicnicBasket/AI - -from toontown.distributed import DistributedTimer/AI - -from toontown.suit import DistributedBossbotBoss/AI -from toontown.coghq import DistributedCogKart/AI -from toontown.coghq import DistributedCountryClub/AI -from toontown.coghq import DistributedCountryClubRoom/AI -from toontown.coghq import DistributedMoleField/AI -from toontown.coghq import DistributedCountryClubBattle/AI -from toontown.building import DistributedClubElevator/AI -from toontown.coghq import DistributedMaze/AI -from toontown.battle import DistributedBattleWaiters/AI -from toontown.coghq import DistributedFoodBelt/AI -from toontown.coghq import DistributedBanquetTable/AI -from toontown.battle import DistributedBattleDiners/AI -from toontown.coghq import DistributedGolfSpot/AI - -from toontown.minigame import DistributedIceGame/AI -from toontown.minigame import DistributedCogThiefGame/AI -from toontown.minigame import DistributedTwoDGame/AI - -from toontown.safezone import DistributedPicnicTable/AI -from toontown.safezone import DistributedChineseCheckers/AI -from toontown.safezone import DistributedCheckers/AI -from toontown.safezone import DistributedFindFour/AI - -from toontown.uberdog.DistributedMailManager/AI/UD import DistributedMailManager/AI/UD -from toontown.uberdog.DistributedPartyManager/AI/UD import DistributedPartyManager/AI/UD - -from toontown.rpc.AwardManager/UD import AwardManager/UD -from toontown.uberdog.DistributedCpuInfoMgr/AI/UD import DistributedCpuInfoMgr/AI/UD - -from toontown.rpc.RATManager/UD import RATManager/UD - -from toontown.uberdog.DistributedInGameNewsMgr/AI/UD import DistributedInGameNewsMgr/AI/UD -from toontown.coderedemption.TTCodeRedemptionMgr/AI/UD import TTCodeRedemptionMgr/AI/UD -from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI -from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD -from toontown.ai.DistributedPhaseEventMgr/AI import DistributedPhaseEventMgr/AI -from toontown.ai.DistributedHydrantZeroMgr/AI import DistributedHydrantZeroMgr/AI -from toontown.ai.DistributedMailboxZeroMgr/AI import DistributedMailboxZeroMgr/AI -from toontown.ai.DistributedTrashcanZeroMgr/AI import DistributedTrashcanZeroMgr/AI -from toontown.ai import DistributedSillyMeterMgr/AI - -// Cogdominium -from toontown.cogdominium import DistributedCogdoInterior/AI -from toontown.cogdominium import DistributedCogdoElevatorExt/AI -from toontown.cogdominium import DistributedCogdoElevatorInt/AI - -// Cogdominium Games -from toontown.cogdominium import DistCogdoGame/AI -from toontown.cogdominium import DistCogdoLevelGame/AI -from toontown.cogdominium import DistBoardroomGame/AI -from toontown.cogdominium import DistCogdoCraneGame/AI -from toontown.cogdominium import DistCogdoMazeGame/AI -from toontown.cogdominium import DistCogdoFlyingGame/AI - -from toontown.cogdominium import DistCogdoCrane/AI - - -//////////////STRUCTS GO HERE - -struct GiftItem { - blob Item; - string giftTag; -}; - -struct gardenSpecial { - uint8 index; - uint8 count; -}; - -struct simpleMail{ - uint64 msgId; - uint32 senderId; - uint16 year; - uint8 month; - uint8 day; - - string body; -}; - -struct invite{ - uint64 inviteKey; - uint64 partyId; - - //0 not read, 1 read but not replied, 2 accepted, 3 rejected - uint8 status; -}; - - -struct decoration{ - uint8 decorId; - uint8 x; - uint8 y; - uint8 h; -}; - -struct activity{ - uint8 activityId; - uint8 x; - uint8 y; - uint8 h; -}; - -// TODO cpickle/compress this? -// Note: DistributedPartyManagerUD._getPartyInfoSize() assumes that this party format won't change. -// Please change the calculation in that method if this party format in toon.dc changes. -struct party{ - uint64 partyId; - uint32 hostId; - uint16 startYear; - uint8 startMonth; - uint8 startDay; - uint8 startHour; - uint8 startMinute; - uint16 endYear; - uint8 endMonth; - uint8 endDay; - uint8 endHour; - uint8 endMinute; - uint8 isPrivate; - uint8 inviteTheme; - activity activities[]; - decoration decors[]; - uint8 status; -}; - -struct partyReply{ - uint32 inviteeId; - uint8 status; -}; - -struct repliesForOneParty { - uint64 partyId; - partyReply partyReplies[]; -}; - -struct publicPartyInfo { - uint32 shardId; - uint32 zoneId; - uint8 numberOfGuests; - string hostName; - uint8array activityIds; - uint16 minLeft; -}; - -struct jukeboxSongInfo { - uint8 phase / 10; - string fileName; -}; +from toontown.safezone import DistributedTagTreasure/AI -struct partyCloudColor { - uint16 cloudNumber; - uint8 r / 100; - uint8 g / 100; - uint8 b / 100; +dclass ToontownDistrict : DistributedDistrict { + setParentingRules(string, string) broadcast ram; + setAvatarCount(uint32) required broadcast ram; + setNewAvatarCount(uint32) required broadcast ram; + setStats : setAvatarCount, setNewAvatarCount; }; -struct datetime { - uint16 year; - uint8 month; - uint8 day; - uint8 hour; - uint8 minutes; - uint8 seconds; +dclass WelcomeValleyManager : DistributedObject { + clientSetZone(uint32) airecv clsend; + requestZoneIdMessage(uint32, uint16) airecv clsend; + requestZoneIdResponse(uint32, uint16); }; -dclass ToontownDistrict: DistributedDistrict { -//////////////////////////////// -// setParentingRules(string type="Stated", string Rule="") broadcast ram; -// exactly what is stated.. -// -/////////////////////////////////////////// -// This is a special DNA for toon town .. Has implied adjaciencies.. not just stated.. - setParentingRules(string type="DNA", string Rule="ToonTownDNA") broadcast ram; -///////////////////////////////////// -// Setparentingrules(string type="Cartesian", string Rule="0:100:1") broadcast ram; -// base:size:resolution -//.. 0:100:1 == 3x3 interest grids.. with 100x100 size.. numbering starting at 0 ie 0.0 = 0 -//////////////////////////////////// -}; - -dclass ToontownDistrictStats: DistributedObject { -// order of field is importtant here.. do not move this below the Sets.. - - settoontownDistrictId( uint32 value=0) broadcast required ram; -// - setAvatarCount(uint32 avatarCount=0) broadcast required ram; - setNewAvatarCount(uint32 avatarCount=0) broadcast required ram; - - setStats: setAvatarCount, setNewAvatarCount; -}; - -// This object is provided by the AI to tell the client which zone to -// transition into to get to WelcomeValley. -dclass WelcomeValleyManager: DistributedObject { - clientSetZone(uint32 zoneId) airecv clsend; // No longer in use - - requestZoneIdMessage(uint32 origZoneId, uint16 context) airecv clsend; // Sending a bad zoneId only results in the client getting back a bad zoneId and crashes their client, not the AI. - requestZoneIdResponse(uint32 zoneId, uint16 context); -}; - -dclass DistributedAnimatedProp: DistributedObject { - // DistributedAnimatedProp is for things that the toon can - // interact with, that other toons can see. - - // For example: - // - knock, knock joke doors on the Toon side buildings - // - lockable doors in cog HQ factories - // - switches in cog HQ factories - - // We must know the prop ID: - setPropId(uint16 propId) required broadcast ram; - - // Tell all nearby that a toon is interacting with the prop: - setAvatarInteract(uint32 avatarId) required broadcast ram; - - // This client wants to interact with the prop: - requestInteract() airecv clsend; // safe...need to check timing...owner, please check - - // Tell the toon they may not interact with the prop: +dclass DistributedAnimatedProp : DistributedObject { + setPropId(uint16) required broadcast ram; + setAvatarInteract(uint32) required broadcast ram; + requestInteract() airecv clsend; rejectInteract(); - - // This client wants to stop interacting with the prop: - requestExit() airecv clsend; // safe...need to check timing...owner, please check - - // Toon avatarID is no longer interacting with the prop: - avatarExit(uint32 avatarId) broadcast; - - // How the server tells the client what state to enter into - setState(string state, int16 timestamp) required broadcast ram; + requestExit() airecv clsend; + avatarExit(uint32) broadcast; + setState(string, int16) required broadcast ram; }; typedef int16 pair16[2]; -dclass DistributedToon: DistributedPlayer { +dclass DistributedToon : DistributedPlayer { setDNAString(blob) required broadcast ownrecv db; - setMaxBankMoney(int16 = 1000) required broadcast ownrecv db; - setBankMoney(int16 = 0) required broadcast ownrecv db; + setMaxBankMoney(int16 = 1000) required broadcast db; + setBankMoney(int16 = 0) required broadcast db; setMaxMoney(int16 = 40) required broadcast ownrecv db; - setMoney(int16 = 0) required broadcast ownrecv db; - setMaxHp(int16 = 15) required broadcast ownrecv db; - setHp(int16 = 15) required broadcast ownrecv db; - - toonUp(uint16 hpGained) broadcast ownrecv; - takeDamage(uint16 hpLost) broadcast ownrecv; - - setBattleId(uint32 battleId) required broadcast ram; - - setExperience(blob = { 0 * 14 }) required ownrecv db; + setMoney(int16 = 0) required broadcast db; + setMaxHp(int16 = 15) required broadcast db; + setHp(int16 = 15) required broadcast db; + toonUp(uint16) broadcast; + takeDamage(uint16) broadcast; + setExperience(blob = {0*14}) required ownrecv db; setMaxCarry(uint8 = 20) required ownrecv db; - // all I need is a single bit for each track, but uint8array is the - // smallest and it crashes setTrackAccess(uint16array = {0,0,0,0,1,1,0}) required broadcast ownrecv db; - // Progress training a track. -1 trackId means no track, progress is a bit array - setTrackProgress(int8 trackId = -1, uint32 progress = 0) required ownrecv db; - // Indicates highest level bonus for each track - setTrackBonusLevel(int8array = {-1,-1,-1,-1,-1,-1,-1}) required broadcast ownrecv db; - // a 42 byte string of uint8s. We give some props for starters. - setInventory(blob = { 0 * 7, // Heal - 0 * 7, // Trap - 0 * 7, // Lure - 0 * 7, // Sound - 1, 0 * 6, // Throw - 1, 0 * 6, // Squirt - 0 * 7 // Drop - }) required ownrecv db; - - setMaxNPCFriends(uint16 = 8) required ownrecv db; + setTrackProgress(int8 = -1, uint32 = 0) required ownrecv db; + setInventory(blob = {0*7, 0*7, 0*7, 0*7, 1, 0*6, 1, 0*6, 0*7}) required ownrecv db; + setMaxNPCFriends(uint16 = 16) required ownrecv db; setNPCFriendsDict(uint32uint8array = {}) required ownrecv db; - // For testing we gave everybody NPC SOS toons - // setNPCFriendsList(uint32array = { 2001, 3112, 2003, 1116, 2311, 3135, 4125, 2011, 5207, 3129 }) required ownrecv db; - setDefaultShard(uint32 = 0) required ownrecv db; setDefaultZone(uint32 = 0) required ownrecv db; setShtickerBook(blob = {}) required ownrecv db; @@ -536,2723 +191,1053 @@ dclass DistributedToon: DistributedPlayer { setInterface(blob = {}) required ownrecv db; setLastHood(uint32 = 0) required ownrecv db; setTutorialAck(uint8 = 0) required ownrecv db; - setMaxClothes(uint32 = 10) required ownrecv db; - setClothesTopsList(uint8array clothesTopsList = {}) required ownrecv db; - setClothesBottomsList(uint8array clothesBottomsList = {}) required ownrecv db; - - setGardenSpecials(gardenSpecial []) required ownrecv db airecv; - - // The AI uses this to tell the toon how much earned experience he - // has accumulated so far within a particular battle. This is - // important to allow the client to gray out gag buttons when the - // toon exceeds his experience cap for the battle. - setEarnedExperience(uint16array earnedExp) ownrecv; - - // toon final X position wrt tunnel, tunnel pos/heading - setTunnelIn(int16 timestamp, - int16/10 endX, - int16/10 x, int16/10 y, int16/100 z, - int32/100 h) ownsend broadcast; - // toon starting position wrt tunnel, tunnel pos/heading - setTunnelOut(int16 timestamp, - int16/10 startX, int16/10 startY, - int16/10 x, int16/10 y, int16/100 z, - int32/100 h) ownsend broadcast; - - setAnimState(string, int16 / 1000, int16 timestamp) broadcast ram ownsend; - - setEmoteState(int16, int16 / 1000, int16 timestamp) broadcast ram ownsend; - setEmoteAccess(uint8array bits = {1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) required ownrecv db; - - // Special custom SpeedChat messages we have bought. - setCustomMessages(uint16array customMessages = {}) required ownrecv db; - - // Send autoreply while sleeping - setSleepAutoReply(uint32 fromId) broadcast clsend ownrecv; - - // Special resistance SpeedChat messages we have earned. - setResistanceMessages(pair16 resistanceMessages[] = {}) required ownrecv db; - - // Pet trick-training phrases - setPetTrickPhrases(uint8array petTricks = {0,}) required ownrecv db; - - // When did our catalog delivery start, and what is the last catalog - // we were issued? - setCatalogSchedule(uint16 currentWeek = 0, uint32 nextTime = 0) required ownrecv db; - setCatalog(blob monthlyCatalog = {}, blob weeklyCatalog = {}, blob backCatalog = {}) required ownrecv db; - - // It is important that setDeliverySchedule appears after - // setMailboxContents, or the server will initialize these in the - // wrong order. Since calling setDeliverySchedule can actually - // change the value of setMailboxContents, we must have already - // initialized setMailboxContents before setDeliverySchedule can - // safely be called. - setMailboxContents(blob mailboxContents = {}) required ownrecv db; - setDeliverySchedule(blob onDelivery = {}) required ownrecv db airecv; - setGiftSchedule(blob onGiftDelivery = {}) required ownrecv db airecv; - - // For awards, to side step mailbox being full for free players - setAwardMailboxContents(blob awardMailboxContents = {}) required ownrecv db; - setAwardSchedule(blob onGiftDelivery = {}) required ownrecv db airecv; - setAwardNotify(uint8 awardNotify=0) required ownrecv db ; - - // It is similarly important that setCatalogNotify appears after - // both setCatalog and setMailboxContents and setAwardMailboxContents, since the client - // double-checks the catalog and mailbox on receipt of the - // notification message. - setCatalogNotify(uint8 catalogNotify = 0, uint8 mailboxNotify = 0) required ownrecv db; - - - // placeholder int16 parameter to avoid server crash - playSplashEffect(int16/10 x, int16/10 y, int16/10 z) broadcast ownsend; - setWhisperSCToontaskFrom(uint32 fromId, uint32 taskId, uint32 toNpcId, - uint32 toonProgress, uint8 msgIndex) ownrecv clsend; // security breach:fromId, taskId, toNpcId, msgIndex etc. need range checking...need help = DROSE - setSCToontask(uint32 taskId, uint32 toNpcId, uint32 toonProgress, - uint8 msgIndex) broadcast ownsend; - setSCSinging(uint16 msgIndex) broadcast ownsend; - // a toon send this to the AI when he clicks on a resistance phrase - reqSCResistance(uint16 msgIndex, uint32 nearbyToons[]) ownsend airecv; - // the ai sends this to everyone along with a list of affected toons - setSCResistance(uint16 msgIndex, uint32 nearbyToons[]) broadcast ownrecv; - - // the array of possible color schemes are listed in OptionsPage.py - // I think blue (the original color) should be the default. - setSpeedChatStyleIndex(uint8 index = 1) required ownsend broadcast db; - - // The trophy score is not a permanent property of the toon, so it - // does not get saved in the database. It is instead set by the AI, - // and it varies from shard to shard. - setTrophyScore(uint16 score) broadcast ownrecv ram; - - // List of safe zones you can teleport to + setClothesTopsList(uint8array = {}) required ownrecv db; + setClothesBottomsList(uint8array = {}) required ownrecv db; + setEarnedExperience(uint16array) ownrecv; + setTunnelIn(int16, int16/10, int16/10, int16/10, int16/100, int32/100) broadcast ownsend; + setTunnelOut(int16, int16/10, int16/10, int16/10, int16/10, int16/100, int32/100) broadcast ownsend; + setAnimState(string, int16/1000, int16) broadcast ram ownsend; + setEmoteState(int16, int16/1000, int16) broadcast ram ownsend; + setEmoteAccess(uint8array = {1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) required ownrecv db; + setCustomMessages(uint16array = {}) required ownrecv db; + setResistanceMessages(pair16 [] = {}) required ownrecv db; + setPetTrickPhrases(uint8array = [0]) required ownrecv db; + setCatalogSchedule(uint16 = 0, uint32 = 0) required ownrecv db; + setCatalog(blob = {}, blob = {}, blob = {}) required ownrecv db; + setMailboxContents(blob = {}) required ownrecv db; + setDeliverySchedule(blob = {}) required ownrecv db; + setCatalogNotify(uint8 = 0, uint8 = 0) required ownrecv db; + playSplashEffect(int16/10, int16/10, int16/10) broadcast ownsend; + setWhisperSCToontaskFrom(uint32, uint32, uint32, uint32, uint8) ownrecv clsend; + setSCToontask(uint32, uint32, uint32, uint8) broadcast ownsend; + reqSCResistance(uint16, uint32 []) ownsend airecv; + setSCResistance(uint16, uint32 []) broadcast; + setSpeedChatStyleIndex(uint8 = 1) required broadcast db ownsend; + setTrophyScore(uint16) broadcast ownrecv ram; setTeleportAccess(uint32array = {}) required ownrecv db; - - // TODO: check these clsends closely for security later - battleSOS(uint32 requesterID) ownrecv clsend; //requesterID is verified. appears safe - teleportQuery(uint32 requesterId) ownrecv clsend; //requesterId is verified. appears safe - teleportResponse(uint32 avId, int8 available, uint32 shardId, - uint32 hoodId, uint32 zoneId) ownrecv clsend; //security breach: no verification, message directly sent to server...need help = DROSE - teleportGiveup(uint32 avId) ownrecv clsend; //avId verified. appears safe - teleportGreeting(uint32 avId) broadcast ownsend; - + battleSOS(uint32) ownrecv clsend; + teleportQuery(uint32) ownrecv clsend; + teleportResponse(uint32, int8, uint32, uint32, uint32) ownrecv clsend; + teleportGiveup(uint32) ownrecv clsend; + teleportGreeting(uint32) broadcast ownsend; setCogStatus(uint32array = {1 * 32}) required ownrecv db; setCogCount(uint32array = {0 * 32}) required ownrecv db; - setCogRadar(uint8array = {0 * 4}) required ownrecv db; setBuildingRadar(uint8array = {0 * 4}) required ownrecv db; - setCogLevels(uint8array = {0 * 4}) required broadcast ownrecv db; setCogTypes(uint8array = {0 * 4}) required broadcast ownrecv db; setCogParts(uint32array = {0 * 4}) required broadcast ownrecv db; setCogMerits(uint16array = {0 * 4}) required ownrecv db; - setCogIndex(int8 = -1) broadcast ram; - - // For now, this is not a db field. It is set locally according to - // hoodsVisited. - setDisguisePageFlag(int8 = 0) ownrecv; - - setHouseId(uint32 id = 0) required ownrecv db; - setQuests(uint32array = {}) required broadcast ownrecv db; + setCogIndex(int8) broadcast ram; + setDisguisePageFlag(int8) ownrecv; + setHouseId(uint32 = 0) required ownrecv db; + setQuests(uint32array = {}) required broadcast db; setQuestHistory(uint16array = {}) required ownrecv db; - setRewardHistory(uint8 tier = 0, uint16array = {}) required ownrecv db; + setRewardHistory(uint8 = 0, uint16array = {}) required ownrecv db; setQuestCarryLimit(uint8 = 1) required ownrecv db; - - setCheesyEffect(int16 effect = 0, uint32 hoodId = 0, uint32 expireTime = 0) required broadcast ownrecv db; - setGhostMode(uint8 flag = 0) broadcast ownrecv ram; - - setPosIndex(uint8 index = 0) required ownrecv db; - - // List of all fish types ever collected, and the record weights (parallel lists) - setFishCollection(uint8array genusList = {}, uint8array speciesList = {}, - uint16array weightList = {}) required ownrecv db; - // Max number of fish you can hold in your tank + setCheesyEffect(int16 = 0, uint32 = 0, uint32 = 0) required broadcast db; + setGhostMode(uint8) broadcast ram; + setPosIndex(uint8 = 0) required ownrecv db; + setFishCollection(uint8array = {}, uint8array = {}, uint16array = {}) required ownrecv db; setMaxFishTank(uint8 = 20) required ownrecv db; - // List of fish with weights currently in tank (parallel lists) - setFishTank(uint8array genusList = {}, uint8array speciesList = {}, - uint16array weightList = {}) required ownrecv db; - // Type of fishing rod Toon has - // Since others can see your rod, it must be broadcast ram - setFishingRod(uint8 = 0) required broadcast ownrecv db; - // List of all fishing trophies collected - setFishingTrophies(uint8array fishingTrophyList = {}) required ownrecv db; - - ///////////////// Gardening Estates Expansion - // List of all flower types ever collected (parallel lists) - setFlowerCollection(uint8array speciesList = {}, - uint8array varietyList = {}) required ownrecv db; - // List of flower currently in basket (parallel lists) - setFlowerBasket(uint8array speciesList = {}, - uint8array varietyList = {}) required ownrecv db; - // Max number of flowers you can hold in your basket - setMaxFlowerBasket(uint8 = 20) required ownrecv db; - // List of all garden trophies collected - setGardenTrophies(uint8array gardenTrophyList = {}) required ownrecv db; - // Since others can see your shovel, it must be broadcast ram - setShovel(uint8 = 0) required broadcast ownrecv db; - // current shovel skill, see GardenGlobals.py - setShovelSkill(uint32 = 0) required ownrecv db; - // Since others can see your watering can, it must be broadcast ram - setWateringCan(uint8 = 0) required broadcast ownrecv db; - // current watering can skill, see GardenGlobals.py - setWateringCanSkill(uint32 = 0) required ownrecv db; - promoteShovel(uint8 shovelLevel)ownrecv; - promoteWateringCan(uint8 wateringCanLevel)ownrecv; - - reactivateWater()ownrecv; - - // The toon stops running and tosses a pie. This is presently used - // only in the final battle sequence. It is a timestamp32 because - // no one ever clears this field after the pie is tossed. - presentPie(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10, - int32 timestamp32) broadcast ownsend; - // This should be airecv when the server supports it. - tossPie(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10, - uint8 sequence, uint8 power, int32 timestamp32) broadcast ownsend; // airecv; - // The pie hits something. - pieSplat(int16 x / 10, int16 y / 10, int16 z / 10, - uint8 sequence, uint8 pieCode, int32 timestamp32) broadcast ownsend; - // Information about pies in the toon's arsenal. - setPieType(uint8 pieType) broadcast ownrecv ram; - setNumPies(uint16 numPies) broadcast ownrecv ram; - - catalogGenClothes(uint32 avId) broadcast ownrecv; - - // TODO: We will allocate an id for the pet as soon as the toon is created - // and keep it for the lifetime of the toon - setPetId(uint32 petId = 0) required broadcast ownrecv db; - setPetMovie(uint32 petId, uint8 mode) ownsend airecv; - setPetTutorialDone(uint8 bDone = 0) required ownsend airecv db; - setFishBingoTutorialDone(uint8 bDone = 0) required ownsend airecv db; - setFishBingoMarkTutorialDone(uint8 bDone = 0) required ownsend airecv db; - - // KartDNA dclass Methods - // NOTE - It was decided to place this information on the toon instead - // of creating a Kart DB Object Type and store it in the database - // that way. - setKartBodyType( int8 bodyType = -1 ) required broadcast ownrecv db; - setKartBodyColor( int8 bodyColor = -1 ) required broadcast ownrecv db; - setKartAccessoryColor( int8 accColor = -1 ) required broadcast ownrecv db; - setKartEngineBlockType( int8 ebType = -1 ) required broadcast ownrecv db; - setKartSpoilerType( int8 spType = -1 ) required broadcast ownrecv db; - setKartFrontWheelWellType( int8 fwwType = -1 ) required broadcast ownrecv db; - setKartBackWheelWellType( int8 bwwType = -1 ) required broadcast ownrecv db; - setKartRimType( int8 rimType = -1 ) required broadcast ownrecv db; - setKartDecalType( int8 decalType = -1 ) required broadcast ownrecv db; - - updateKartDNAField( int8 dnaField, int8 fieldValue ) ownsend airecv; - addOwnedAccessory( int8 accessoryId ) ownsend airecv; - removeOwnedAccessory( int8 accessoryId ) ownsend airecv; - - // Tickets are used to purchase Kart Accessories - setTickets( uint32 tickets = 200 ) required broadcast ownrecv db; - - // Karting History info is used to determine if trophy awarded - setKartingHistory( uint8 kartingHistory[16] = { 0 * 16 } ) required ownrecv db; - - // Karting Trophies are won during Kart races - setKartingTrophies( uint8 kartingTrophyList[33] = { 0 * 33 } ) required ownrecv db; - - // Karting personal best times are set during Kart races - setKartingPersonalBest( uint32/1000 kartingPersonalBest[6] = { 0 * 6 } ) required ownrecv db; - - // Karting personal best times are set during Kart races - need a new field for extra tracks - setKartingPersonalBest2( uint32/1000 kartingPersonalBest2[12] = { 0 * 12 } ) required ownrecv db; - - // ToonDNA Accessories owned by the Kart - setKartAccessoriesOwned( int8 accessoryIds[16] = { -1 * 16 } ) required broadcast ownrecv db; - - setCurrentKart(uint32 kartId) broadcast ownrecv ram; - - squish(uint8 damage) ownsend airecv; - announceBingo() broadcast ownrecv; - - trickOrTreatTargetMet(uint32 beanAmount) ownrecv; - trickOrTreatMilestoneMet() ownrecv; - - winterCarolingTargetMet(uint32 beanAmount) ownrecv; - - // messages associated with summoning cogs - setCogSummonsEarned(uint8array = {0 * 32}) required ownrecv db; - reqCogSummons(string type, uint32 suitIndex) ownsend airecv; - cogSummonsResponse(string returnCode, uint32 suitIndex, uint32 doId) ownrecv; - - // messages associated with the garden specials - reqUseSpecial(int32 gardenSpecial) ownsend airecv; - useSpecialResponse(string returnCode) ownrecv; - setGardenStarted(uint8 bStarted = 0) required ownrecv db; - - // messages associated with golf - sendToGolfCourse(uint32 zoneId) ownrecv; - // Golf History info is used to determine if trophy2 awarded - setGolfHistory(uint16 golfHistory[18] = {0 * 18}) required ownrecv db; - // personal best per hole - setPackedGolfHoleBest(uint8 golfHoleBest[18] = {0 * 18}) required ownrecv db; - // personal best per course - setGolfCourseBest(uint8 golfCourseBest[3] = {0 * 3}) required ownrecv db; - setUnlimitedSwing(uint8 unlimitedSwing = 0) broadcast ownrecv ram; - - // log suspicious commands - logSuspiciousEvent(string eventName) clsend airecv; - - // client sends us information on an error - logMessage(string message) ownsend airecv; - - //force a logout - forceLogoutWithNotify() ownrecv; - - //reward for CEO battle - setPinkSlips(uint8 pinkSlips = 0) required ownrecv db; - - //nametagFont - setNametagStyle(uint8 fontIndex = 0) broadcast required ram db; - - //mail - setMail( simpleMail mail[] ) ownrecv ; // uberdog to client - setNumMailItems(uint32 numMail) airecv; //uberdog to AI msg - setSimpleMailNotify(uint8 simpleMailNotify) ownrecv airecv; //uberdog to ai and client - - //parties - setInvites( invite invites[]) ownrecv airecv ram; //uberdog to client and AI - setPartiesInvitedTo( party partiesInvitedTo[]) ownrecv airecv ram; //uberdog to client and AI - setHostedParties( party hostedParties[]) ownrecv airecv ram; //uberdog to client and AI - setPartyReplies( repliesForOneParty replies[]) ownrecv airecv ram; //uberdog to client and AI - updateInvite( uint64 inviteKey, uint8 newStatus) ownrecv airecv; //uberdog to client and AI - updateReply( uint64 partyId, uint64 inviteeId, uint8 newStatus) ownrecv airecv; //uberdog to client and AI - setPartyCanStart( uint64 partyId ) ownrecv airecv; // uberdog to client avatar and AI - setPartyStatus( uint64 partyId, uint8 ) ownrecv airecv; // uberdog to client avatar and AI - announcePartyStarted( uint64 partyId ) ownrecv; + setFishTank(uint8array = {}, uint8array = {}, uint16array = {}) required ownrecv db; + setFishingRod(uint8 = 0) required broadcast db; + setFishingTrophies(uint8array = {}) required ownrecv db; + presentPie(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int32) broadcast ownsend; + tossPie(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, uint8, uint8, int32) broadcast ownsend; + pieSplat(int16/10, int16/10, int16/10, uint8, uint8, int32) broadcast ownsend; + setPieType(uint8) broadcast ram; + setNumPies(uint16) broadcast ram; + catalogGenClothes(uint32) broadcast; + setPetId(uint32 = 0) required broadcast db; + setPetMovie(uint32, uint8) ownsend airecv; + setPetTutorialDone(uint8 = 0) required ownsend airecv db; + setFishBingoTutorialDone(uint8 = 0) required airecv db ownsend; + setFishBingoMarkTutorialDone(uint8 = 0) required airecv db ownsend; + squish(uint8) ownsend airecv; + announceBingo() broadcast; +}; + +dclass DistributedCCharBase : DistributedObject { + setChat(uint32, uint32, uint32) broadcast; + setWalk(string, string, int16) required broadcast ram; + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + setNearbyAvatarChat(string) airecv clsend; + setNearbyAvatarSC(uint16) airecv clsend; + setNearbyAvatarSCCustom(uint16) airecv clsend; + setNearbyAvatarSCToontask(uint32, uint32, uint32, uint8) airecv clsend; }; - - -dclass DistributedCCharBase: DistributedObject { - // Make jibber-jabber - setChat(uint32 category, uint32 msg, uint32 avId) broadcast; - // Fade the character away - fadeAway() broadcast; - // Make walk - setWalk(string srcNode, string destNode, - int16 timestamp) required broadcast ram; - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; //appears safe - avatarExit() airecv clsend; // appears safe - // These let the server know when a nearby toon talks - setNearbyAvatarChat(string msg) airecv clsend; //appears safe, although sizeof(msg) could be enforced - setNearbyAvatarSC(uint16 msgIndex) airecv clsend; // msgIndex needs to be range checked - setNearbyAvatarSCCustom(uint16 msgIndex) airecv clsend; // same as above - setNearbyAvatarSCToontask(uint32 taskId, uint32 toNpcId, uint32 toonProgress, - uint8 msgIndex) airecv clsend; // possible security breach, need to ask Joe...need help = DARREN +dclass DistributedMickey : DistributedCCharBase { }; -dclass DistributedMickey: DistributedCCharBase { -}; -dclass DistributedVampireMickey: DistributedMickey { -}; -dclass DistributedWitchMinnie: DistributedMickey { -}; -dclass DistributedMinnie: DistributedCCharBase { -}; -dclass DistributedGoofy: DistributedCCharBase { -}; -dclass DistributedDaisy: DistributedCCharBase { -}; -dclass DistributedChip: DistributedCCharBase { -}; -dclass DistributedDale: DistributedCCharBase { - setFollowChip(string srcNode, string destNode, - int16 timestamp, int16 offsetX/100, int16 offsetY/100) broadcast ram; - setChipId(uint32 chipId) required broadcast ram; -}; -dclass DistributedDonald: DistributedCCharBase { +dclass DistributedMinnie : DistributedCCharBase { }; -dclass DistributedDonaldDock: DistributedCCharBase { -}; -dclass DistributedPluto: DistributedCCharBase { -}; -dclass DistributedWesternPluto: DistributedPluto { -}; -dclass DistributedGoofySpeedway: DistributedCCharBase { -}; -dclass DistributedSuperGoofy: DistributedGoofySpeedway { +dclass DistributedGoofy : DistributedCCharBase { }; -dclass DistributedPartyGate: DistributedObject { - // Client to AI - // How the client requests a list of public parties - getPartyList(uint32 avId) airecv clsend; - // How the client requests the party - partyChoiceRequest(uint32 avId, uint64 shardId, uint64 zoneId) airecv clsend; - - // AI to client - // How the server sends that list of public parties - listAllPublicParties(publicPartyInfo [] allPublicPartyInfo); - // How the server tells the client that they cannot go to the requested party - partyRequestDenied(uint8 reason); - // How the server puts the client into the public party - setParty(publicPartyInfo partyInfoTuple); +dclass DistributedDonald : DistributedCCharBase { }; - -dclass DistributedTrolley: DistributedObject { - // How the server tells the client what state to enter into - setState(string, int16 timestamp) broadcast ram; - // How the server tells the client to fill the slots - fillSlot0(uint32 avId) broadcast ram; // time of boarding - fillSlot1(uint32 avId) broadcast ram; // time of boarding - fillSlot2(uint32 avId) broadcast ram; // time of boarding - fillSlot3(uint32 avId) broadcast ram; // time of boarding - - // How the server tells the client to empty the slots - emptySlot0(uint32 avId, int16 timestamp) broadcast ram; - emptySlot1(uint32 avId, int16 timestamp) broadcast ram; - emptySlot2(uint32 avId, int16 timestamp) broadcast ram; - emptySlot3(uint32 avId, int16 timestamp) broadcast ram; - - // **** - // How the client requests permission to board - requestBoard() airecv clsend; // seems harmless, if given wrong x,y,z,h,p,r, it will appear wrong. server won't crash. safe - - // How the server rejects permission to board - rejectBoard(uint32 avId); - - // **** - // How the client requests permission to exit - requestExit() airecv clsend; // appears safe. - - // How the server puts the clients into a minigame - setMinigameZone(uint32 zoneId, uint16 minigameId); +dclass DistributedPluto : DistributedCCharBase { }; -dclass DistributedSuitPlanner: DistributedObject { - // tell the client-side suit planner which zone it exists in - setZoneId(uint32 zoneId) required broadcast ram; - suitListQuery() airecv clsend; // safe - suitListResponse(uint8array suitList); - buildingListQuery() airecv clsend; // safe - buildingListResponse(uint8array buildingList); +dclass DistributedTrolley : DistributedObject { + setState(string, int16) broadcast ram; + fillSlot0(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot1(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot2(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot3(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + emptySlot0(uint32, int16) broadcast ram; + emptySlot1(uint32, int16) broadcast ram; + emptySlot2(uint32, int16) broadcast ram; + emptySlot3(uint32, int16) broadcast ram; + requestBoard(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend; + rejectBoard(uint32); + requestExit() airecv clsend; + setMinigameZone(uint32, uint16); }; -dclass DistributedSuitBase: DistributedObject { +dclass DistributedSuitPlanner : DistributedObject { + setZoneId(uint32) required broadcast ram; + suitListQuery() airecv clsend; + suitListResponse(uint8array); + buildingListQuery() airecv clsend; + buildingListResponse(uint8array); +}; - // **** +dclass DistributedSuitBase : DistributedObject { denyBattle(); - - // set the dna of this suit before it is generated - // - setDNAString(blob dna) required broadcast ram; - - // notify the client side suit that the server side suit - // has changed its level - // - setLevelDist(int16 level) required broadcast ram; - - // We don't send chat messages literally through the net for Suits. - // Instead, we use setBrushOff to send brush-off messages by index - // number, or the battle movie system to manage taunts by index - // number. - // setChat(string chat, int16 chatFlags) broadcast; - setBrushOff(int16 index) broadcast; - - setSkelecog(uint8 flag) required broadcast ram; - - setSkeleRevives(uint8 flag) required broadcast ram; - - setHP(int16 hp) required broadcast ram; - + setDNAString(blob) required broadcast ram; + setLevelDist(int16) required broadcast ram; + setBrushOff(int16) broadcast; + setSkelecog(uint8) required broadcast ram; }; -dclass DistributedSuit: DistributedSuitBase { - - // **** - requestBattle(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) airecv clsend; // appears harmless. safe - - // specify the distributed object id of the suit planner that - // this suit will use for getting access to path information - // for the street this suit exists in - // - setSPDoId(uint32 spDoId) required broadcast ram; - - // Defines the path along the street the suit will walk. We only - // transmit the start and end points; the complete path is inferred - // from these. - setPathEndpoints(uint16 start, uint16 end, - uint16 minPathLen, uint16 maxPathLen) required broadcast ram; - - // Defines the current position of the suit along its path. We only - // get these updates every once and a while, and only to keep the - // timestamp from going stale. - setPathPosition(uint16 index, int16 timestamp) required broadcast ram; - - // Defines whether the suit is actively walking on the path. - setPathState(int8 state) required broadcast ram; - - // This message is sent from the AI only when debug-suit-positions - // is configured #t. It is used to double-check that the client is - // receiving sensible suit position reporting. - debugSuitPosition(int16 elapsedTime / 10, int16 currentLeg, - int16 x / 10, int16 y / 10, - int16 timestamp) broadcast; +dclass DistributedSuit : DistributedSuitBase { + requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend; + setSPDoId(uint32) required broadcast ram; + setPathEndpoints(uint16, uint16, uint16, uint16) required broadcast ram; + setPathPosition(uint16, int16) required broadcast ram; + setPathState(int8) required broadcast ram; + debugSuitPosition(int16/10, int16, int16/10, int16/10, int16) broadcast; }; -dclass DistributedTutorialSuit: DistributedSuitBase { - requestBattle(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) airecv clsend; // appears harmless. safe +dclass DistributedTutorialSuit : DistributedSuitBase { + requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend; }; -dclass DistributedFactorySuit: DistributedSuitBase { - setLevelDoId(uint32 levelDoId) required broadcast ram; - setCogId(uint32 cogId) required broadcast ram; - setReserve(uint8 reserve) required broadcast ram; - - requestBattle(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) airecv clsend; // appears harmless. safe - - // client sends message to AI saying that the suit has spotted him - setAlert(uint32 avId) airecv clsend; // avId validated. appears safe - setConfrontToon(uint32 avId) broadcast; - - // client sends message to AI saying that suit has strayed too far - setStrayed() airecv clsend; // safe - - // Return a suit to his original pos. The AI tells the client to do this - // either when the suit has strayed too far from - // when the battle ends, if the suit is still alive, return him to his - // original pos. AI says when. +dclass DistributedFactorySuit : DistributedSuitBase { + setLevelDoId(uint32) required broadcast ram; + setCogId(uint32) required broadcast ram; + setReserve(uint8) required broadcast ram; + requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend; + setAlert(uint32) airecv clsend; + setConfrontToon(uint32) broadcast; + setStrayed() airecv clsend; setReturn() broadcast; - }; -dclass DistributedMintSuit: DistributedFactorySuit { +dclass DistributedMintSuit : DistributedFactorySuit { }; -dclass DistributedStageSuit: DistributedFactorySuit { -}; - -dclass DistributedBossCog: DistributedNode { +dclass DistributedBossCog : DistributedNode { setDNAString(blob) required broadcast db; - setToonIds(uint32array involvedToons, - uint32array toonsA, uint32array toonsB) broadcast ram; - setBattleIds(uint8 battleNumber, uint32 battleAId, uint32 battleBId) broadcast ram; - setArenaSide(uint8 side) broadcast ram; - - // These are probably temporary, until we have the whole system - // integrated. + setToonIds(uint32array, uint32array, uint32array) broadcast ram; + setBattleIds(uint8, uint32, uint32) broadcast ram; + setArenaSide(uint8) broadcast ram; avatarEnter() airecv clsend; avatarExit() airecv clsend; - - // These are used to tell the AI when the client is within range of - // a directed attack. avatarNearEnter() airecv clsend; avatarNearExit() airecv clsend; - - // Tell everyone about the loss of a compatriot (or oneself). - toonDied(uint32 avId) broadcast; - - - setBattleExperience(int32 id0, int16array origExp0, int16array earnedExp0, - uint32array origQuests0, int16array items0, int16array missedItems0, - int16array origMerits0, int16array merits0, - uint32array parts0, - - int32 id1, int16array origExp1, int16array earnedExp1, - uint32array origQuests1, int16array items1, int16array missedItems1, - int16array origMerits1, int16array merits1, - uint32array parts1, - - int32 id2, int16array origExp2, int16array earnedExp2, - uint32array origQuests2, int16array items2, int16array missedItems2, - int16array origMerits2, int16array merits2, - uint32array parts2, - - int32 id3, int16array origExp3, int16array earnedExp3, - uint32array origQuests3, int16array items3, int16array missedItems3, - int16array origMerits3, int16array merits3, - uint32array parts3, - - int32 id4, int16array origExp4, int16array earnedExp4, - uint32array origQuests4, int16array items4, int16array missedItems4, - int16array origMerits4, int16array merits4, - uint32array parts4, - - int32 id5, int16array origExp5, int16array earnedExp5, - uint32array origQuests5, int16array items5, int16array missedItems5, - int16array origMerits5, int16array merits5, - uint32array parts5, - - int32 id6, int16array origExp6, int16array earnedExp6, - uint32array origQuests6, int16array items6, int16array missedItems6, - int16array origMerits6, int16array merits6, - uint32array parts6, - - int32 id7, int16array origExp7, int16array earnedExp7, - uint32array origQuests7, int16array items7, int16array missedItems7, - int16array origMerits7, int16array merits7, - uint32array parts7, - - uint8array deathList, - int16array uberList, - uint32array helpfulToonsList) required broadcast ram; - - // This is how the client indicates he touched the boss and got - // zapped. We take his word for this. - zapToon(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10, - int8 bpx / 100, int8 bpy / 100, - uint8 attackCode, int16 timestamp) airecv clsend; - // And the AI tells everyone else about the zapping. - showZapToon(uint32 toonId, - int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10, - uint8 attackCode, int16 timestamp) broadcast; - - // The boss decides to attack. - setAttackCode(uint8 attackCode, uint32 avId) broadcast; -}; - -dclass DistributedSellbotBoss: DistributedBossCog { - setCagedToonNpcId(uint32 npcId) required broadcast ram; - setDooberIds(uint32array dooberIds) broadcast ram; - setBossDamage(uint16 damage, uint8 recoverRate, - int16 timestamp) broadcast ram; - - // This field appears following the above fields, because we don't - // want to set the state until the above have been filled in. - setState(string state) broadcast ram; - - // This is how the client indicates he has hit the boss (or another - // toon) with a pie. We have to take his word for it. - hitBoss(uint8 bossDamage) airecv clsend; + toonDied(uint32) broadcast; + setBattleExperience(int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, uint8array) required broadcast ram; + zapToon(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int8/100, int8/100, uint8, int16) airecv clsend; + showZapToon(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, uint8, int16) broadcast; + setAttackCode(uint8, uint32) broadcast; +}; + +dclass DistributedSellbotBoss : DistributedBossCog { + setCagedToonNpcId(uint32) required broadcast ram; + setDooberIds(uint32array) broadcast ram; + setBossDamage(uint16, uint8, int16) broadcast ram; + setState(string) broadcast ram; + hitBoss(uint8) airecv clsend; hitBossInsides() airecv clsend; - hitToon(uint32 toonId) airecv clsend; - - // A client reports he has seen the final pie splat. + hitToon(uint32) airecv clsend; finalPieSplat() airecv clsend; - - // The toon reports he has touched the cage. touchCage() airecv clsend; - - // The strafing gears out of the underbelly. - doStrafe(uint8 side, uint8 direction) broadcast; - - cagedToonBattleThree(uint16 index, uint32 avId) broadcast; + doStrafe(uint8, uint8) broadcast; + cagedToonBattleThree(uint16, uint32) broadcast; }; -dclass DistributedCashbotBoss: DistributedBossCog { - - // This field appears following the above fields, because we don't - // want to set the state until the above have been filled in. - setState(string state) broadcast ram; - - setBossDamage(uint16 damage) broadcast ram; - setRewardId(uint16 rewardId) broadcast ram; - +dclass DistributedCashbotBoss : DistributedBossCog { + setState(string) broadcast ram; + setBossDamage(uint16) broadcast ram; + setRewardId(uint16) broadcast ram; applyReward() airecv clsend; }; - - struct LinkPosition { - int16 x / 100; - int16 y / 100; - int16 z / 100; + int16/100 x; + int16/100 y; + int16/100 z; }; -dclass DistributedCashbotBossCrane: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - setIndex(uint8 index) required broadcast ram; - - setState(char state, uint32 avId) broadcast ram; - +dclass DistributedCashbotBossCrane : DistributedObject { + setBossCogId(uint32) required broadcast ram; + setIndex(uint8) required broadcast ram; + setState(char, uint32) broadcast ram; requestControl() airecv clsend; requestFree() airecv clsend; - - clearSmoothing(int8 bogus) broadcast clsend; - setCablePos(uint8 changeSeq, int16 y / 100, uint16 h % 360 / 100, LinkPosition links[3], int16 timestamp) broadcast clsend; + clearSmoothing(int8) broadcast clsend; + setCablePos(uint8, int16/100, uint16%360/100, LinkPosition [3], int16) broadcast clsend; }; -dclass DistributedCashbotBossObject: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - - setObjectState(char state, uint32 avId, uint32 craneId) broadcast ram; - +dclass DistributedCashbotBossObject : DistributedSmoothNode { + setBossCogId(uint32) required broadcast ram; + setObjectState(char, uint32, uint32) broadcast ram; requestGrab() airecv clsend; rejectGrab(); requestDrop() airecv clsend; hitFloor() clsend; - requestFree(int16 x / 10, int16 y / 10, int16 z / 10, uint16 h % 360 / 100) airecv clsend; - - hitBoss(uint16 impact / 255) airecv clsend; - - // these are fields in DistributedNode that used to be ownsend - - setX(int16 / 10) broadcast ram clsend airecv; - setY(int16 / 10) broadcast ram clsend airecv; - setZ(int16 / 10) broadcast ram clsend airecv; - setH(int16 % 360 / 10) broadcast ram clsend airecv; - setP(int16 % 360 / 10) broadcast ram clsend airecv; - setR(int16 % 360 / 10) broadcast ram clsend airecv; - - setPos: setX, setY, setZ; - setHpr: setH, setP, setR; - setPosHpr: setX, setY, setZ, setH, setP, setR; - setXY: setX, setY; - setXZ: setX, setZ; - setXYH: setX, setY, setH; - setXYZH: setX, setY, setZ, setH; - - // these are fields in DistributedSmoothNode that used to be clsend, - - setComponentL(uint64) broadcast ram clsend airecv; - setComponentX(int16 / 10) broadcast ram clsend airecv; - setComponentY(int16 / 10) broadcast ram clsend airecv; - setComponentZ(int16 / 10) broadcast ram clsend airecv; - setComponentH(int16 % 360 / 10) broadcast ram clsend airecv; - setComponentP(int16 % 360 / 10) broadcast ram clsend airecv; - setComponentR(int16 % 360 / 10) broadcast ram clsend airecv; - setComponentT(int16 timestamp) broadcast ram clsend airecv; - - // Composite set pos and hpr functions. These map to combinations - // of one or more of the above components. They all include - // setComponentT(), which must be called last. - setSmStop: setComponentT; - setSmH: setComponentH, setComponentT; - setSmZ: setComponentZ, setComponentT; - setSmXY: setComponentX, setComponentY, setComponentT; - setSmXZ: setComponentX, setComponentZ, setComponentT; - setSmPos: setComponentX, setComponentY, setComponentZ, setComponentT; - setSmHpr: setComponentH, setComponentP, setComponentR, setComponentT; - setSmXYH: setComponentX, setComponentY, setComponentH, setComponentT; - setSmXYZH: setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT; - setSmPosHpr: setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT; - // special update if L (being location, such as zoneId) changes, send everything, intended to - // keep position and 'location' in sync - setSmPosHprL: setComponentL, setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT; - - // I don't need any parameters, but for some reason leaving the - // parameter list empty on this one causes a server crash. - clearSmoothing(int8 bogus) broadcast clsend; -}; - -dclass DistributedCashbotBossSafe: DistributedCashbotBossObject { - setIndex(uint8 index) required broadcast ram; + requestFree(int16/10, int16/10, int16/10, uint16%360/100) airecv clsend; + hitBoss(uint16/255) airecv clsend; +}; +dclass DistributedCashbotBossSafe : DistributedCashbotBossObject { + setIndex(uint8) required broadcast ram; requestInitial() airecv clsend; }; -dclass DistributedCashbotBossGoon: DistributedCashbotBossObject { - // This should inherit from DistributedGoon, but we don't have - // multiple inheritance, so we just copy the relevant messages from - // there. - requestBattle(int16 tPause / 10) airecv clsend; - requestStunned(int16 tPause / 10) airecv clsend; - - setVelocity(uint8 velocity / 10) broadcast ram; - setHFov(uint8 hfov) broadcast ram; - setAttackRadius(uint8 attackRadius) broadcast ram; - setStrength(uint8 strength) broadcast ram; - setGoonScale(uint8 scale / 50) broadcast ram; - - setupGoon: setVelocity, setHFov, setAttackRadius, setStrength, setGoonScale; - - setTarget(int16 x / 10, int16 y / 10, uint16 h % 360 / 100, int16 arrivalTime) broadcast ram; +dclass DistributedCashbotBossGoon : DistributedCashbotBossObject { + requestBattle(int16/10) airecv clsend; + requestStunned(int16/10) airecv clsend; + setVelocity(uint8/10) broadcast ram; + setHFov(uint8) broadcast ram; + setAttackRadius(uint8) broadcast ram; + setStrength(uint8) broadcast ram; + setGoonScale(uint8/50) broadcast ram; + setupGoon : setVelocity, setHFov, setAttackRadius, setStrength, setGoonScale; + setTarget(int16/10, int16/10, uint16%360/100, int16) broadcast ram; destroyGoon() broadcast clsend airecv; }; -dclass DistributedBattleBase: DistributedObject { - // These two values are for level battles only. We need them to be here - // so that they get set before setMembers. If we modify all of the battle - // code so that everything in a battle is parented to the battle, we can - // move these back. - setLevelDoId(uint32 levelDoId) required broadcast ram; - setBattleCellId(uint32 battleCellId) required broadcast ram; - setInteractivePropTrackBonus(int8) required broadcast ram; - setPosition(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; - setZoneId(uint32 zoneId) required broadcast ram; - setInitialSuitPos(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; - setMembers(uint32array, string, string, string, string, string, - uint32array, string, string, string, string, - int16 timestamp) required broadcast ram; - - adjust(int16 timestamp) broadcast; - - // calculated battle values from the server. - setMovie( - // flag indicating an empty movie - // array of toon doIds - // array of suit doIds - int8 active, uint32array toons, uint32array suits, - - // index of attacking toon - // attack track - // attack level - // index of the target (or doId if it's an SOS) - // array of damages - // accuracy bonus for the attack - // damage bonus for the attack - // array of knockback bonuses - // bit-field indicating indices of suits that have died from this attack - int8 id0, int8 tr0, int8 le0, int32 tg0, int16array hp0, - int16 ac0, int16 hpb0, int16array kbb0, int8 died0, int8 revive0, - - int8 id1, int8 tr1, int8 le1, int32 tg1, int16array hp1, - int16 ac1, int16 hpb1, int16array kbb1, int8 died1, int8 revive1, - - int8 id2, int8 tr2, int8 le2, int32 tg2, int16array hp2, - int16 ac2, int16 hpb2, int16array kbb2, int8 died2, int8 revive2, - - int8 id3, int8 tr3, int8 le3, int32 tg3, int16array hp3, - int16 ac3, int16 hpb3, int16array kbb3, int8 died3, int8 revive3, - - // index of the attacking suit - // id of the suit's attack - // index of the target of the attack - // array of damages - // bit-field indicating indices of toons that have died from this attack - // flag indicating if this suit attacks before the toons this round - int8 sid0, int8 at0, int8 stg0, int16array dm0, int8 sd0, - int8 db0, int8 st0, - - int8 sid1, int8 at1, int8 stg1, int16array dm1, int8 sd1, - int8 db1, int8 st1, - - int8 sid2, int8 at2, int8 stg2, int16array dm2, int8 sd2, - int8 db2, int8 st2, - - int8 sid3, int8 at3, int8 stg3, int16array dm3, int8 sd3, - int8 db3, int8 st3 - ) required broadcast ram; - - // similar to setMovie with the following values: - // array of doIds for attacking toons - // array of tracks - // array of levels - // array of doIds for targets - setChosenToonAttacks(uint32array ids, int16array tracks, int16array levels, - int32array targets) broadcast ram; - - setBattleExperience(int32 id0, int16array origExp0, int16array earnedExp0, - uint32array origQuests0, int16array items0, int16array missedItems0, - int16array origMerits0, int16array merits0, uint32array parts0, - - int32 id1, int16array origExp1, int16array earnedExp1, - uint32array origQuests1, int16array items1, int16array missedItems1, - int16array origMerits1, int16array merits1, uint32array parts1, - - int32 id2, int16array origExp2, int16array earnedExp2, - uint32array origQuests2, int16array items2, int16array missedItems2, - int16array origMerits2, int16array merits2, uint32array parts2, - - int32 id3, int16array origExp3, int16array earnedExp3, - uint32array origQuests3, int16array items3, int16array missedItems3, - int16array origMerits3, int16array merits3, uint32array parts3, - - uint8array deathList, - int16array uberList, - uint32array helpfulToonsList) required broadcast ram; - - // Used by DistributedBattle and DistributedBattleFinal +dclass DistributedBattleBase : DistributedObject { + setLevelDoId(uint32) required broadcast ram; + setBattleCellId(uint32) required broadcast ram; + setPosition(int16/10, int16/10, int16/10) required broadcast ram; + setZoneId(uint32) required broadcast ram; + setInitialSuitPos(int16/10, int16/10, int16/10) required broadcast ram; + setMembers(uint32array, string, string, string, string, string, uint32array, string, string, string, string, int16) required broadcast ram; + adjust(int16) broadcast; + setMovie(int8, uint32array, uint32array, int8, int8, int8, int32, int16array, int16, int16, int16array, int8, int8, int8, int8, int32, int16array, int16, int16, int16array, int8, int8, int8, int8, int32, int16array, int16, int16, int16array, int8, int8, int8, int8, int32, int16array, int16, int16, int16array, int8, int8, int8, int8, int16array, int8, int8, int8, int8, int8, int8, int16array, int8, int8, int8, int8, int8, int8, int16array, int8, int8, int8, int8, int8, int8, int16array, int8, int8, int8) required broadcast ram; + setChosenToonAttacks(uint32array, int16array, int16array, int32array) broadcast ram; + setBattleExperience(int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, int32, int16array, int16array, int16array, int16array, int16array, int16array, uint32array, uint8array) required broadcast ram; denyLocalToonJoin(); - - // Used by DistributedBattleBldg & DistributedBattleFactory only, but needs to happen before setState - setBossBattle(uint8 value) required broadcast ram; - setState(string state, int16 timestamp) required broadcast ram; - - // Messages to the server + setBossBattle(uint8) required broadcast ram; + setState(string, int16) required broadcast ram; faceOffDone() airecv clsend; - toonRequestJoin(int16 / 10, int16 / 10, int16 / 10) airecv clsend; + toonRequestJoin(int16/10, int16/10, int16/10) airecv clsend; toonRequestRun() airecv clsend; toonDied() airecv clsend; adjustDone() airecv clsend; timeout() airecv clsend; movieDone() airecv clsend; rewardDone() airecv clsend; - joinDone(uint32 avId) airecv clsend; - requestAttack(int8 track, int8 level, int32 avId) airecv clsend; //level and av needs verification. security breach//too risky for me to fix, better have the owner suggest me//suggested fix in place - requestPetProxy(uint32 petProxyId) airecv clsend; -}; - -dclass DistributedBattle: DistributedBattleBase { + joinDone(uint32) airecv clsend; + requestAttack(int8, int8, int32) airecv clsend; }; -dclass DistributedBattleBldg: DistributedBattleBase { +dclass DistributedBattle : DistributedBattleBase { }; -dclass DistributedBattleTutorial: DistributedBattle { +dclass DistributedBattleBldg : DistributedBattleBase { }; -dclass DistributedLevelBattle: DistributedBattle { - // These have been moved to DistributedBattleBase because of - // ordering issues. See DistributedBattleBase for more info. - //setLevelDoId(uint32 levelDoId) required broadcast ram; - //setBattleCellId(uint32 battleCellId) required broadcast ram; +dclass DistributedBattleTutorial : DistributedBattle { }; -dclass DistributedBattleFactory: DistributedLevelBattle { +dclass DistributedLevelBattle : DistributedBattle { }; -dclass DistributedMintBattle: DistributedLevelBattle { +dclass DistributedBattleFactory : DistributedLevelBattle { }; -dclass DistributedStageBattle: DistributedLevelBattle { +dclass DistributedMintBattle : DistributedLevelBattle { }; -dclass DistributedBattleFinal: DistributedBattleBase { - setBossCogId(uint32 bossCogId) required broadcast ram; - setBattleNumber(uint8 battleNumber) required broadcast ram; - setBattleSide(uint8 battleSide) required broadcast ram; +dclass DistributedBattleFinal : DistributedBattleBase { + setBossCogId(uint32) required broadcast ram; + setBattleNumber(uint8) required broadcast ram; + setBattleSide(uint8) required broadcast ram; }; -dclass DistributedBoat: DistributedObject { - setState(string state, int16 timestamp) required broadcast ram; +dclass DistributedBoat : DistributedObject { + setState(string, int16) required broadcast ram; }; -dclass DistributedButterfly: DistributedObject { - setArea(int16 playground, int16 area) required broadcast ram; - setState(int8 stateIndex, uint8 curIndex, uint8 destIndex, uint16 time / 10, int16 timestamp) required broadcast ram; - avatarEnter() airecv clsend; //appears safe. +dclass DistributedButterfly : DistributedObject { + setArea(int16, int16) required broadcast ram; + setState(int8, uint8, uint8, uint16/10, int16) required broadcast ram; + avatarEnter() airecv clsend; }; -dclass DistributedMMPiano: DistributedObject { - // Messages from clients to AI - requestSpeedUp() airecv clsend; //appears safe, timing could be an issue...owner, please check - requestChangeDirection() airecv clsend; //appears safe, timing could be an issue...owner, please check - - // Messages from AI to clients - setSpeed(int16 rpm / 1000, uint16 offset / 100, int16 timestamp) broadcast ram; - playSpeedUp(uint32 avId) broadcast; - playChangeDirection(uint32 avId) broadcast; +dclass DistributedMMPiano : DistributedObject { + requestSpeedUp() airecv clsend; + requestChangeDirection() airecv clsend; + setSpeed(int16/1000, uint16/100, int16) broadcast ram; + playSpeedUp(uint32) broadcast; + playChangeDirection(uint32) broadcast; }; -dclass DistributedDGFlower: DistributedObject { - // Messages from clients to AI - avatarEnter() airecv clsend; //appears safe - avatarExit() airecv clsend; //appears safe - - // Messages from AI to clients - setHeight(uint8 height / 10) broadcast ram; +dclass DistributedDGFlower : DistributedObject { + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + setHeight(uint8/10) broadcast ram; }; -// Note: the pond must come before the targets and docks -dclass DistributedFishingPond: DistributedObject { - // Hit target - hitTarget(uint32 targetId) airecv clsend; //security breach: targetId need validation//done, checks target and logs suspicious note - // Area (like zoneId) - setArea(uint32 area) required broadcast ram; +dclass DistributedFishingPond : DistributedObject { + hitTarget(uint32) airecv clsend; + setArea(uint32) required broadcast ram; }; -dclass DistributedFishingTarget: DistributedNode { - // DoId of the pond we are in so the client can manage things better - setPondDoId(uint32 pondDoId) required broadcast ram; - setState(uint8 stateIndex, int16 angle / 10, uint16 radius / 100, - uint16 time / 10, int16 timestamp) required broadcast ram; +dclass DistributedFishingTarget : DistributedNode { + setPondDoId(uint32) required broadcast ram; + setState(uint8, int16/10, uint16/100, uint16/10, int16) required broadcast ram; }; -dclass DistributedFishingSpot: DistributedObject { - setPondDoId(uint32 pondDoId) required broadcast ram; - // Where is the fishing spot? - setPosHpr(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) required broadcast ram; - - // The client requests use of the fishing spot: - requestEnter() airecv clsend; //appears safe, timing could be an issue...owner, please check - - // Tell the toon they may not enter: +dclass DistributedFishingSpot : DistributedObject { + setPondDoId(uint32) required broadcast ram; + setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram; + requestEnter() airecv clsend; rejectEnter(); - - // The client within the fishing spot is ready to leave: - requestExit() airecv clsend; //appears safe, timing could be an issue...owner, please check - - // Who's fishing? 0 == empty. - setOccupied(uint32 avId) broadcast ram; - - // Go fish! - doCast(uint8 power / 255, int16 h / 100) airecv clsend; //might be security breach, power and heading need range checking//not sure what the range is, yet! - - // Sell fish + requestExit() airecv clsend; + setOccupied(uint32) broadcast ram; + doCast(uint8/255, int16/100) airecv clsend; sellFish() airecv clsend; - sellFishComplete(uint8 trophyResult, uint16 numFishCaught); - - // The fishing movie(s). - setMovie(uint8 mode, uint8 code, - uint16 itemDesc1, uint16 itemDesc2, uint16 itemDesc3, - uint8 power / 100, int16 h / 100) broadcast ram; - - // Fields for fish poker - // lockCardIndex(uint8 index, uint8 lockStatus) airecv clsend; - // cashCardsIn() airecv clsend; + sellFishComplete(uint8, uint16); + setMovie(uint8, uint8, uint16, uint16, uint16, uint8/100, int16/100) broadcast ram; }; -// First attempt at the DistributedPondBingoManager dclass -dclass DistributedPondBingoManager: DistributedObject { - setPondDoId(uint32 pondId) required broadcast ram; - updateGameState(uint32 gameState, uint8 cellId); - setCardState(uint16 cardId, uint8 typeId, uint16 tileSeed, uint32 gameState); - setState(string state, int16 timeStamp); - cardUpdate(uint16 cardId, uint8 cellId, uint8 genus, uint8 species) airecv clsend; +dclass DistributedPondBingoManager : DistributedObject { + setPondDoId(uint32) required broadcast ram; + updateGameState(uint32, uint8); + setCardState(uint16, uint8, uint16, uint32); + setState(string, int16); + cardUpdate(uint16, uint8, uint8, uint8) airecv clsend; enableBingo(); - handleBingoCall(uint16 cardId) airecv clsend; - setJackpot(uint16 jackpot); -}; - -dclass DistributedCannon: DistributedObject { - // Estate id of cannon - setEstateId(uint32 doId) required broadcast ram; - - // DistributedTarget id of cannon - setTargetId(uint32 doId) required broadcast ram; - - // Where is the cannon? - setPosHpr(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) required broadcast ram; - - // A client requests activation - setActive(uint8 active) airecv clsend; //active need to be range checked 0/1. security breach//done, range checked and suspicous logged - setActiveState(uint8 active) broadcast ram; - - // The client requests use of the cannon. - requestEnter() airecv clsend; //appears safe, timing could be an issue...owner, please check - requestExit() broadcast; - - // What state is the cannon in? - setMovie(uint8 mode, uint32 avId) broadcast ram; - - setCannonPosition(int32 zRot / 100, uint32 angle / 100) airecv clsend; // appears safe, zRot and angle might use a sanity check - setCannonLit(int32 zRot / 100, uint32 angle / 100) airecv clsend; // same as above - setFired() airecv clsend; // couldn't find function, come back to it later - setLanded() airecv clsend; // appears safe, timing could be an issue...owner, please check - updateCannonPosition(uint32 avId, int32 zRot / 100, - uint32 angle / 100) broadcast ram; - setCannonWillFire(uint32 avId, int32 fireTime/100, - int32 zRot / 100, uint32 angle / 100, - int16 timestamp) broadcast; - setCannonExit(uint32 avId) broadcast; - - requestBumperMove( int32 x /100, int32 y/100, int32 z/100) airecv clsend; - - setCannonBumperPos( int32 x /100, int32 y/100, int32 z/100) required broadcast ram; - - + handleBingoCall(uint16) airecv clsend; + setJackpot(uint16); +}; + +dclass DistributedCannon : DistributedObject { + setEstateId(uint32) required broadcast ram; + setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram; + setActive(uint8) airecv clsend; + setActiveState(uint8) broadcast ram; + requestEnter() airecv clsend; + setMovie(uint8, uint32) broadcast ram; + setCannonPosition(int32/100, uint32/100) airecv clsend; + setCannonLit(int32/100, uint32/100) airecv clsend; + setFired() airecv clsend; + setLanded() airecv clsend; + updateCannonPosition(uint32, int32/100, uint32/100) broadcast ram; + setCannonWillFire(uint32, int32/100, int32/100, uint32/100, int16) broadcast; + setCannonExit(uint32) broadcast; }; -dclass DistributedTarget: DistributedObject { - // Where is the target? - setPosition(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; - - // AI tells client if target is enabled, the score, and the timer time - setState(uint8 state, uint32 score / 10, uint8 time) broadcast; - - // AI tells client what the reward was - setReward(uint32 reward) broadcast; - - // client tells the AI about a hit or miss - setResult(uint32 avId) airecv clsend; // security breach: avId needs validation//avId may not be needed to send - - // client tells AI about bonus - setBonus(int16 bonus / 10) airecv clsend; // security breach: bonus is added blindly//also need to think about the effect of repeated bonus gain - - // stuff related to the pinball game - setCurPinballScore(uint32 avId, int32 curScore, int32 multiplier) clsend airecv; - setPinballHiScorer( string name) broadcast ram; - setPinballHiScore( int32 totalScore) broadcast ram; - +dclass DistributedTarget : DistributedObject { + setPosition(int16/10, int16/10, int16/10) required broadcast ram; + setState(uint8, uint32/10, uint8) broadcast; + setReward(uint32) broadcast; + setResult(uint32) airecv clsend; + setBonus(int16/10) airecv clsend; }; -dclass DistributedMinigame: DistributedObject { - // NOTE: the avIds of the participants cannot - // be used until setGameReady() is called - setParticipants(uint32array avIds) broadcast ram required; - setTrolleyZone(uint32 zone) broadcast ram required; - - // stuff for trolley metagame - setStartingVotes(uint16array startingVotes) broadcast ram required; - setMetagameRound(int8 metagameRound) broadcast ram required; - - // this is for debugging difficulty levels - setDifficultyOverrides(int32 difficultyOverride, - int32 trolleyZoneOverride) broadcast ram required; - - // Messages sent from client to AI - setAvatarJoined() airecv clsend; //appears safe, some kind of state check is done - setAvatarReady() airecv clsend; //appears safe, some kind of state check is done - setAvatarExited() airecv clsend; //appears safe, some kind of state check is done - - // For debugging only... terminates a minigame. - requestExit() airecv clsend; //appears safe +dclass DistributedMinigame : DistributedObject { + setParticipants(uint32array) required broadcast ram; + setTrolleyZone(uint32) required broadcast ram; + setDifficultyOverrides(int32, int32) required broadcast ram; + setAvatarJoined() airecv clsend; + setAvatarReady() airecv clsend; + setAvatarExited() airecv clsend; + requestExit() airecv clsend; setGameReady() broadcast; - setGameStart(int16 timestamp) broadcast; + setGameStart(int16) broadcast; setGameExit() broadcast; setGameAbort() broadcast; }; -dclass DistributedMinigameTemplate: DistributedMinigame { +dclass DistributedMinigameTemplate : DistributedMinigame { }; -dclass DistributedRaceGame: DistributedMinigame { - setTimerStartTime(int16 timestamp) broadcast; - setAvatarChoice(uint8 choice) airecv clsend; //appears safe, choice is validated - setAvatarChose(uint32 avId) broadcast; - setChancePositions(uint8array positions) broadcast; - setServerChoices(int8array choices, uint8array positions, int8array rewards) broadcast; +dclass DistributedRaceGame : DistributedMinigame { + setTimerStartTime(int16) broadcast; + setAvatarChoice(uint8) airecv clsend; + setAvatarChose(uint32) broadcast; + setChancePositions(uint8array) broadcast; + setServerChoices(int8array, uint8array, int8array) broadcast; }; -dclass DistributedCannonGame: DistributedMinigame { - setCannonPosition(int32 zRot / 100, uint32 angle / 100) airecv clsend; //appears safe:sanity check on zRot and angle would be nice - setCannonLit(int32 zRot / 100, uint32 angle / 100) airecv clsend; //appears safe:sanity check on zRot and angle would be nice - updateCannonPosition(uint32 avId, int32 zRot / 100, - uint32 angle / 100) broadcast; - setCannonWillFire(uint32 avId, int32 fireTime/100, - int32 zRot / 100, uint32 angle / 100) broadcast; - setToonWillLandInWater(int32 landTime/100) airecv clsend; //appears safe. - announceToonWillLandInWater(uint32 avId, int32 landTime/100) broadcast; +dclass DistributedCannonGame : DistributedMinigame { + setCannonPosition(int32/100, uint32/100) airecv clsend; + setCannonLit(int32/100, uint32/100) airecv clsend; + updateCannonPosition(uint32, int32/100, uint32/100) broadcast; + setCannonWillFire(uint32, int32/100, int32/100, uint32/100) broadcast; + setToonWillLandInWater(int32/100) airecv clsend; + announceToonWillLandInWater(uint32, int32/100) broadcast; }; -dclass DistributedPhotoGame: DistributedMinigame { - newClientPhotoScore(uint8 subjectIndex, string pose, uint32 score / 100) airecv clsend; - newAIPhotoScore(uint32 playerId, uint8 assignmentIndex, uint32 score / 100) broadcast; - filmOut()airecv clsend; +dclass DistributedPatternGame : DistributedMinigame { + reportPlayerReady() airecv clsend; + setPattern(uint8array) broadcast; + reportPlayerPattern(uint8array, uint16/1000) airecv clsend; + setPlayerPatterns(uint8array, uint8array, uint8array, uint8array, uint32) broadcast; + reportButtonPress(uint8, uint8) airecv clsend; + remoteButtonPressed(uint32, uint8, uint8) broadcast; }; -dclass DistributedPatternGame: DistributedMinigame { - reportPlayerReady() airecv clsend; //appears safe, some kind of state check is done - setPattern(uint8array pattern) broadcast; - reportPlayerPattern(uint8array pattern, uint16 totalTime / 1000) airecv clsend; //appears harmless, but parameters lack sanity check. safe - setPlayerPatterns(uint8array pattern1, uint8array pattern2, - uint8array pattern3, uint8array pattern4, - uint32 fastestAvId ) broadcast; - // these two are sent as the buttons are pressed, so that - // you can see what the remote toons are doing - reportButtonPress(uint8 index, uint8 wrong) airecv clsend; //security breach: index, wrong need validation...need help = DARREN - remoteButtonPressed(uint32 avId, uint8 index, uint8 wrong) broadcast; +dclass DistributedRingGame : DistributedMinigame { + setTimeBase(int16) required broadcast ram; + setColorIndices(int8, int8, int8, int8) required broadcast ram; + setToonGotRing(uint8) airecv clsend; + setRingGroupResults(uint8) broadcast; }; -dclass DistributedRingGame: DistributedMinigame { - // common time base for all players - setTimeBase(int16 timestamp) broadcast ram required; - // Random selection of ring colors - setColorIndices(int8 a, int8 b, int8 c, int8 d) broadcast ram required; +dclass DistributedTagGame : DistributedMinigame { + tag(uint32) airecv clsend; + setIt(uint32) broadcast; + setTreasureScore(uint16array) broadcast; +}; - // sent by client; success == 0 means localtoon missed its ring - setToonGotRing(uint8 success) airecv clsend; //appears safe, success should be 0/1 value - // sent to clients after all results are in - // bit==0 means the toon got their ring; bitfield==0 means overall success - // not used in single-player - setRingGroupResults(uint8 bitfield) broadcast; +dclass DistributedMazeGame : DistributedMinigame { + claimTreasure(uint32) airecv clsend; + setTreasureGrabbed(uint32, uint32) broadcast; + allTreasuresTaken() broadcast; + hitBySuit(uint32, int16) broadcast clsend; +}; + +dclass DistributedTugOfWarGame : DistributedMinigame { + reportPlayerReady(uint8) airecv clsend; + sendGoSignal(uint8array) broadcast; + sendStopSignal(uint32array, uint32array, uint32array) broadcast; + sendGameType(uint8, uint8) broadcast; + reportEndOfContest(uint8) airecv clsend; + sendNewAvIdList(uint32array) airecv clsend; + reportCurrentKeyRate(uint32, int16/100) airecv clsend; + sendCurrentPosition(uint32array, int16array/1000) broadcast; + sendSuitPosition(int16/1000) broadcast; + remoteKeyRateUpdate(uint32, uint32) broadcast; +}; + +dclass DistributedCatchGame : DistributedMinigame { + claimCatch(uint32, uint32) airecv clsend; + setObjectCaught(uint32, uint32) broadcast; + hitBySuit(uint32, int16) broadcast clsend; + reportDone() airecv clsend; + setEveryoneDone() broadcast; }; -dclass DistributedTagGame: DistributedMinigame { - tag(uint32 taggedAvId) airecv clsend; //security breach: taggedAvId need validation//done, taggedAvId validated and suspicious logged - setIt(uint32 itAvId) broadcast; - setTreasureScore(uint16array scores) broadcast; +dclass EstateManager : DistributedObject { + getEstateZone(uint32, string) airecv clsend; + setEstateZone(uint32, uint32); + setAvHouseId(uint32, uint32array) broadcast; + sendAvToPlayground(uint32, uint8); + exitEstate() airecv clsend; + removeFriend(uint32, uint32) airecv clsend; }; -dclass DistributedMazeGame: DistributedMinigame { - claimTreasure(uint32 treasureNum) airecv clsend; //security breach: treasureNum need validation...need help = DARREN - setTreasureGrabbed(uint32 avId, uint32 treasureNum) broadcast; - allTreasuresTaken() broadcast; - hitBySuit(uint32 avId, int16 timestamp) clsend broadcast; //security breach: avId need validation//done, a warning is logged for invalid avId -}; - -dclass DistributedTugOfWarGame: DistributedMinigame { - reportPlayerReady(uint8 side) airecv clsend; //security breach: side need range check...need help = SAMIR - sendGoSignal(uint8array index) broadcast; - sendStopSignal(uint32array winList, uint32array lossList, uint32array tieList) broadcast; - sendGameType(uint8 index, uint8 index) broadcast; - reportEndOfContest(uint8 index) airecv clsend; //security breach: index need range check...need help = SAMIR - sendNewAvIdList(uint32array newAvIdList) airecv clsend; //security breach: all the avIds in the list need validation//maybe already handled, ask samir - // these two are sent periodically with each player's power - // so you can see how the remote toons are doing - reportCurrentKeyRate(uint32 keyrate, int16 / 100) airecv clsend; //appears safe, but sanity check would be nice - sendCurrentPosition(uint32array avidlist, int16array index / 1000) broadcast; - sendSuitPosition(int32 index / 1000) broadcast; - remoteKeyRateUpdate(uint32 avId, uint32 keyrate) broadcast; -}; - -dclass DistributedCatchGame: DistributedMinigame { - claimCatch(uint32 objNum, uint32 DropObjTypeId) airecv clsend; //security breach: DropObjTypeId need range check...need help = DARREN - setObjectCaught(uint32 avId, uint32 objNum) broadcast; - hitBySuit(uint32 avId, int16 timestamp) clsend broadcast; //security breach: avId need validation//done, issues warning if invalid avId - // In a multiplayer session, everyone reports in to the AI - // server after all local drop objects have landed (or been caught). - // When every client has reported in, the AI sends out an - // 'everyone is done' message. At that point, the clients know - // that any catch messages have already arrived and they can stop - // listening for them. - reportDone() airecv clsend; //appears safe, som kind of state check is done - setEveryoneDone() broadcast; +dclass DistributedEstate : DistributedObject { + setEstateReady() broadcast; + setClientReady() airecv clsend; + setEstateType(uint8) required broadcast db; + setClosestHouse(uint8) airecv clsend; + setTreasureIds(uint32array) broadcast ram; + requestServerTime() airecv clsend; + setServerTime(uint32); + setDawnTime(uint32) required broadcast ram; +}; + +dclass DistributedHouse : DistributedObject { + setHousePos(uint8) required broadcast; + setHouseType(uint8) required broadcast db; + setGardenPos(uint8) required broadcast db; + setAvatarId(uint32) required broadcast db; + setName(string) required broadcast db; + setColor(uint8) required broadcast db; + setAtticItems(blob) required db; + setInteriorItems(blob) required db; + setAtticWallpaper(blob) required db; + setInteriorWallpaper(blob) required db; + setAtticWindows(blob) required db; + setInteriorWindows(blob) required db; + setDeletedItems(blob) required db; + setCannonEnabled(uint8) required; + setHouseReady() broadcast ram; }; -dclass DistributedDivingGame: DistributedMinigame { - pickupTreasure(uint32 chestId) airecv clsend; - setTreasureGrabbed(uint32 avId, uint32 chestId) broadcast; +dclass DistributedHouseInterior : DistributedObject { + setHouseId(uint32) required broadcast ram; + setHouseIndex(uint8) required broadcast ram; + setWallpaper(blob) required broadcast ram; + setWindows(blob) required broadcast ram; +}; - handleFishCollision(uint32 avId, uint32 spawnId, uint32 spawnerId, string status) airecv clsend; - performFishCollision(uint32 avId, uint32 spawnId, uint32 spawnerId, int16 timestamp) broadcast; +dclass DistributedGarden : DistributedObject { + sendNewProp(uint8, int16/10, int16/10, int16/10) broadcast; +}; - handleCrabCollision(uint32 avId, string status) airecv clsend; - performCrabCollision(uint32 avId, int16 timestamp) broadcast; +dclass DeleteManager : DistributedObject { + setInventory(blob) airecv clsend; +}; - setTreasureDropped(uint32 avId, int16 timestamp) broadcast; +dclass ToontownMagicWordManager : MagicWordManager { + requestTeleport(string, string, uint32, uint32, uint32); +}; - fishSpawn(int16 timestamp, uint32 fishcode, uint32 spawnerId, uint16 offset) broadcast; - removeFish(uint32 spawnId) airecv clsend; +dclass NewsManager : DistributedObject { + setPopulation(uint32) broadcast ram; + setBingoWin(uint32) broadcast ram; + setBingoStart() broadcast; + setBingoEnd() broadcast; + setInvasionStatus(uint8, string, uint32, uint8) broadcast; + setHolidayIdList(uint32array) broadcast ram; +}; - getCrabMoving(uint32 crabId, int16 crabX, int8 dir) airecv clsend; - setCrabMoving(uint32 crabId, int16 timestamp, int8 rand1, int8 rand2, int16 crabX, int8 dir) broadcast; +dclass PurchaseManager : DistributedObject { + setPlayerIds(uint32, uint32, uint32, uint32) required broadcast ram; + setNewbieIds(uint32array) required broadcast ram; + setMinigamePoints(uint8, uint8, uint8, uint8) required broadcast ram; + setPlayerMoney(uint8, uint8, uint8, uint8) required broadcast ram; + setPlayerStates(uint8, uint8, uint8, uint8) required broadcast ram; + setCountdown(int16) required broadcast ram; + requestExit() airecv clsend; + requestPlayAgain() airecv clsend; + setInventory(blob, int16, uint8) airecv clsend; + setPurchaseExit() broadcast; +}; - treasureRecovered() airecv clsend; - incrementScore(uint32 avId, uint32 newSpot, int16 timestamp) broadcast; +dclass NewbiePurchaseManager : PurchaseManager { + setOwnedNewbieId(uint32) required broadcast ram; }; -dclass DistributedTargetGame: DistributedMinigame { - // common time base for all players - setTimeBase(int16 timestamp) broadcast ram required; - // Random selection of ring colors - //setColorIndices(int8 a, int8 b, int8 c, int8 d) broadcast ram required; +dclass SafeZoneManager : DistributedObject { + enterSafeZone() airecv clsend; + exitSafeZone() airecv clsend; +}; - // sent by client; success == 0 means localtoon missed its ring - setToonGotRing(uint8 success) airecv clsend; //appears safe, success should be 0/1 value - // sent to clients after all results are in - // bit==0 means the toon got their ring; bitfield==0 means overall success - // not used in single-player - setRingGroupResults(uint8 bitfield) broadcast; - setPlayerDone() airecv clsend; - setScore(int32 scoreX, int32 scoreY) airecv clsend; - setTargetSeed(uint32 seed) broadcast ram; - setRoundDone() broadcast; - setSingleScore(uint16 score, uint32 avId) broadcast; - setGameDone() broadcast; +dclass TutorialManager : DistributedObject { + requestTutorial() airecv clsend; + rejectTutorial() airecv clsend; + enterTutorial(uint32, uint32, uint32, uint32); + allDone() airecv clsend; + toonArrived() airecv clsend; }; -dclass EstateManager: DistributedObject { - // the AI tells the client which zone to use for his estate - startAprilFools() broadcast; - stopAprilFools() broadcast; - getEstateZone(uint32 avId, string name) airecv clsend; //security breach: avId need validation//Done, throws a suspicious log if invalid avId - setEstateZone(uint32 avId, uint32 zoneId); - setAvHouseId(uint32 avId, uint32array houseIds) broadcast; - sendAvToPlayground(uint32 avId, uint8 status); - exitEstate() airecv clsend; //appears safe, timing might be an issue...owner, please check - removeFriend(uint32 ownerId, uint32 avId) airecv clsend; //security breach: range check might be necessary//reassess:safe, but no suspicious/warning log +dclass CatalogManager : DistributedObject { + startCatalog() airecv clsend; }; +dclass DistributedMyTest : DistributedObject { + setMyTest(uint16) broadcast; +}; -struct decorItem { -uint8 decorType; -uint8 dataByte[]; -uint32 dataWord[]; +dclass DistributedTreasure : DistributedObject { + setPosition(int16/10, int16/10, int16/10) required broadcast ram; + requestGrab() airecv clsend; + setGrab(uint32) broadcast ram; + setReject() broadcast; }; -struct lawnItem { - uint8 type; - uint8 hardPoint; - int8 waterLevel; - int8 growthLevel; - uint16 optional; +dclass DistributedDDTreasure : DistributedTreasure { }; -dclass DistributedEstate: DistributedObject { - string DcObjectType db; - setEstateReady() broadcast; - setClientReady() airecv clsend; //hmm...couldn't find it? - - setEstateType(uint8 index=0) required broadcast db; - setClosestHouse(uint8 index) airecv clsend; //hmm...couldn't find it - - setTreasureIds(uint32array doIds) broadcast ram; - requestServerTime() airecv clsend; //safe - setServerTime(uint32 ts); - setDawnTime(uint32 ts) required broadcast ram; - placeOnGround(uint32 doId) broadcast ram; - setDecorData(lawnItem [] ) required airecv db; - - setLastEpochTimeStamp(uint32 ts)required airecv db; - setRentalTimeStamp(uint32 ts)required airecv db; - setRentalType(uint8 rentalTypeIndex)required airecv db; - setSlot0ToonId(uint32 avId)required airecv db; - setSlot0Items(lawnItem [])required airecv db; - setSlot1ToonId(uint32 avId)required airecv db; - setSlot1Items(lawnItem [])required airecv db; - setSlot2ToonId(uint32 avId)required airecv db; - setSlot2Items(lawnItem [])required airecv db; - setSlot3ToonId(uint32 avId)required airecv db; - setSlot3Items(lawnItem [])required airecv db; - setSlot4ToonId(uint32 avId)required airecv db; - setSlot4Items(lawnItem [])required airecv db; - setSlot5ToonId(uint32 avId)required airecv db; - setSlot5Items(lawnItem [])required airecv db; - setIdList(uint32[] avIDList)broadcast ram; - - completeFlowerSale(uint8 sell) airecv clsend; //appears safe, although sell should be a 0/1 value - awardedTrophy(uint32 avId) broadcast; - - setClouds(uint8 clouds) required broadcast ram; - cannonsOver() broadcast; - gameTableOver() broadcast; -}; - - -dclass DistributedHouse: DistributedObject { - string DcObjectType db; - // housePos is passed in by the AI when the house is created; it does - // not need to be stored in the database. - setHousePos(uint8 index) required broadcast; - - // These fields are stored in the database. - setHouseType(uint8 index) required broadcast db; - setGardenPos(uint8 index) required broadcast db; - setAvatarId(uint32 avId) required broadcast db; - setName(string name) required broadcast db; - setColor(uint8 index) required broadcast db; - - // Furniture items in the attic - setAtticItems(blob items) required db; - // Furniture items in the house interior (with positions) - setInteriorItems(blob items) required db; - - // Wallpaper items in the wallpaper attic. - setAtticWallpaper(blob items) required db; - // Currently active wallpaper. - setInteriorWallpaper(blob items) required db; - - // Window items in the window attic. - setAtticWindows(blob items) required db; - // Currently active windows. - setInteriorWindows(blob items) required db; - - // Items scheduled to be deleted. - setDeletedItems(blob items) required db; - - // Is cannon enabled or disabled - setCannonEnabled(uint8 index) required; - - - - // This message is sent by the AI once the house and all of its - // interior structures have been fully created. - setHouseReady() broadcast ram; +dclass DistributedDGTreasure : DistributedTreasure { }; -// The interior of a toon house has its zone set -// dynamically, so we don't need to set it as a dc field -dclass DistributedHouseInterior: DistributedObject { - setHouseId(uint32 houseId) required broadcast ram; - setHouseIndex(uint8 index) required broadcast ram; - setWallpaper(blob items) required broadcast ram; - setWindows(blob items) required broadcast ram; +dclass DistributedDLTreasure : DistributedTreasure { }; -dclass DistributedGarden: DistributedObject { - sendNewProp(uint8, int16 x/10, int16 y/10, int16 z/10) broadcast; +dclass DistributedTTTreasure : DistributedTreasure { }; +dclass DistributedBRTreasure : DistributedTreasure { +}; -dclass DistributedParty: DistributedObject { - setPartyClockInfo(uint8 x, uint8 y, uint8 h) required broadcast; - setInviteeIds(uint32array inviteeIds) required broadcast; - setPartyState(bool partyState) required broadcast; - setPartyInfoTuple(party partyInfoTuple) required broadcast; - setAvIdsAtParty(uint32[] avIdsAtParty) required broadcast; - setPartyStartedTime(string startedTime) required broadcast; - setHostName(string hostname) required broadcast; - avIdEnteredParty(uint32 avId) clsend airecv; +dclass DistributedMMTreasure : DistributedTreasure { }; +dclass DistributedETreasure : DistributedTreasure { +}; -dclass DistributedPartyActivity: DistributedObject { - // Tell the activity where it is and which way it's facing - setX(int16 x / 10) broadcast required; - setY(int16 y / 10) broadcast required; - setH(uint16 h %360 / 100) broadcast required; +dclass DistributedEFlyingTreasure : DistributedTreasure { +}; - // We want the client actvitities to get a handle to the client party - setPartyDoId(uint32 partyDoId) broadcast required; +dclass DistributedTagTreasure : DistributedTreasure { +}; - // Messages sent from client to AI - toonJoinRequest() airecv clsend; - toonExitRequest() airecv clsend; - toonExitDemand() airecv clsend; - toonReady() airecv clsend; +dclass DistributedCashbotBossTreasure : DistributedTreasure { + setGoonId(uint32) required broadcast ram; + setFinalPosition(int16/10, int16/10, int16/10) required broadcast ram; + setStyle(uint16) required broadcast ram; +}; - // Messages sent from AI to client - joinRequestDenied(uint8 reason); - exitRequestDenied(uint8 reason); - setToonsPlaying(uint32[] toonIds) broadcast ram; - setState(string stateName, int16 timestamp) broadcast ram; - showJellybeanReward(uint32 earnedAmount, uint8 jarAmount, string message); +dclass DistributedTrophyMgr : DistributedObject { + requestTrophyScore() airecv clsend; }; -dclass DistributedPartyTeamActivity: DistributedPartyActivity { - // Messages sent from client to AI - toonJoinRequest(uint8(0-1) team) airecv clsend; - toonExitRequest(uint8(0-1) team) airecv clsend; - toonSwitchTeamRequest() airecv clsend; +dclass DistributedBuilding : DistributedObject { + setBlock(uint16, uint32) required broadcast ram; + setSuitData(int8, int8, int8) required broadcast ram; + setVictorList(uint32array) broadcast ram; + setState(string, int16) broadcast ram; + setVictorReady() airecv clsend; +}; - // Required by clients - setPlayersPerTeam(uint8 min, uint8 max) broadcast required; - setDuration(uint8 duration) broadcast required; - setCanSwitchTeams(bool canSwitchTeams) broadcast required; +dclass DistributedToonInterior : DistributedObject { + setZoneIdAndBlock(uint32, uint16) required broadcast ram; + setToonData(blob) required broadcast ram; + setState(string, int16) required broadcast ram; +}; - // Messages sent from AI to client - setState(string stateName, int16 timestamp, uint32 data) broadcast ram; - setToonsPlaying(uint32[0-8] leftTeamIds, uint32[0-8] rightTeamIds) required broadcast ram; - setAdvantage(uint16/100 advantage); - switchTeamRequestDenied(uint8 reason); +dclass DistributedSuitInterior : DistributedObject { + setZoneId(uint32) required broadcast ram; + setExtZoneId(uint32) required broadcast ram; + setDistBldgDoId(uint32) required broadcast ram; + setNumFloors(int8) required broadcast ram; + setToons(uint32array, uint16) broadcast ram; + setSuits(uint32array, uint32array, uint16array) broadcast ram; + setState(string, int16) required broadcast ram; + setAvatarJoined() airecv clsend; + elevatorDone() airecv clsend; + reserveJoinDone() airecv clsend; }; -struct CatchGeneration { - uint32 generation; - uint32 timestamp; - int8 numPlayers; +dclass DistributedHQInterior : DistributedObject { + setZoneIdAndBlock(uint32, uint16) required broadcast ram; + setLeaderBoard(blob) required broadcast ram; + setTutorial(uint8) required broadcast ram; }; -dclass DistributedPartyCatchActivity: DistributedPartyActivity { - setStartTimestamp(uint32 timestamp) required broadcast ram; - // this supports changes to the rate of falling mid-game - setGenerations(CatchGeneration [] generations) required broadcast ram; - requestActivityStart() airecv clsend; - startRequestResponse(uint8 started); - claimCatch(uint32 generation, uint32 objNum, uint32 DropObjTypeId) airecv clsend; //security breach: DropObjTypeId need range check...need help = DARREN - setObjectCaught(uint32 avId, uint32 generation, uint32 objNum) broadcast; +dclass DistributedGagshopInterior : DistributedObject { + setZoneIdAndBlock(uint32, uint16) required broadcast ram; }; -dclass DistributedPartyCogActivity: DistributedPartyTeamActivity { - // client to clients - pieThrow(uint32 toonId, int32 timestamp, int32 h/100, int32 x/100, int32 y/100, int32 z/100, uint8 power) clsend broadcast; +dclass DistributedPetshopInterior : DistributedObject { + setZoneIdAndBlock(uint32, uint16) required broadcast ram; +}; - // client to clients and AI - pieHitsToon(uint32 toonId, int32 timestamp, int32 x/100, int32 y/100, int32 z/100) clsend broadcast; - pieHitsCog(uint32 toonId, int32 timestamp, int8(0-2) hitCogNum, int32 x/100, int32 y/100, int32 z/100, int32 direction, bool part) clsend broadcast airecv; +dclass DistributedDoor : DistributedObject { + setZoneIdAndBlock(uint32, uint32) required broadcast ram; + setSwing(int8) required broadcast ram; + setDoorType(uint8) required broadcast ram; + setDoorIndex(uint8) required broadcast ram; + setOtherZoneIdAndDoId(uint32, uint32); + requestEnter() airecv clsend; + requestExit() airecv clsend; + rejectEnter(int8); + avatarEnter(uint32) broadcast; + avatarExit(uint32) broadcast; + setState(string, int16) required broadcast ram; + setExitDoorState(string, int16) required broadcast ram; +}; - // AI to clients - setCogDistances(int8/100 distances[3]) broadcast ram; - setHighScore(string toonName, uint16 score) broadcast ram; +dclass DistributedHouseDoor : DistributedDoor { }; -dclass DistributedPartyDanceActivityBase: DistributedPartyActivity { - // Messages sent from client to AI - updateDancingToon(uint8 state, string anim) clsend airecv; +dclass DistributedCogHQDoor : DistributedDoor { +}; - // Messages sent from AI to client - setToonsPlaying(uint32[] toonIds, uint16 %360 / 100 toonHeadings[]) broadcast ram; - setDancingToonState(uint32 avId, uint8 state, string anim) broadcast; +dclass DistributedNPCToonBase : DistributedNode { + setName(string) required broadcast ram; + setDNAString(blob) required broadcast ram; + setPositionIndex(uint8) required broadcast ram; + setAnimState(string, int16/1000, int16) broadcast ram; + setPageNumber(int16, int8, int16) broadcast ram clsend; + avatarEnter() airecv clsend; + freeAvatar(); }; -dclass DistributedPartyDanceActivity: DistributedPartyDanceActivityBase { +dclass DistributedNPCToon : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, uint16array, int16) broadcast ram; + setMovieDone() airecv clsend; + chooseQuest(uint16) airecv clsend; + chooseTrack(int8) airecv clsend; }; -dclass DistributedPartyDance20Activity: DistributedPartyDanceActivityBase { +dclass DistributedNPCClerk : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, int16) broadcast ram; + setInventory(blob, int16, uint8) airecv clsend; }; +dclass DistributedNPCTailor : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, int16) broadcast ram; + setDNA(blob, int8, uint8) airecv clsend; + setCustomerDNA(uint32, blob) broadcast ram; +}; -dclass DistributedPartyJukeboxActivityBase: DistributedPartyActivity { - setNextSong(jukeboxSongInfo nextSongInfo) clsend airecv; - setSongPlaying(jukeboxSongInfo songInfo, uint32 avId) broadcast ram; - queuedSongsRequest() clsend airecv; - queuedSongsResponse(jukeboxSongInfo [] songInfoList, int16 index); - setSongInQueue(jukeboxSongInfo songInfo); - moveHostSongToTopRequest() clsend airecv; - moveHostSongToTop(); +dclass DistributedNPCBlocker : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, int16) broadcast ram; }; -dclass DistributedPartyJukeboxActivity:DistributedPartyJukeboxActivityBase { +dclass DistributedNPCFisherman : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, uint32array, int16) broadcast ram; + completeSale(uint8) airecv clsend; }; -dclass DistributedPartyJukebox40Activity:DistributedPartyJukeboxActivityBase { +dclass DistributedNPCPetclerk : DistributedNPCToonBase { + setMovie(uint8, uint32, uint32, uint32array, int16) broadcast ram; + setPetSeeds(uint32array); + petAdopted(uint8, uint32) airecv clsend; + petReturned() airecv clsend; + fishSold() airecv clsend; + transactionDone() airecv clsend; }; -dclass DistributedPartyCannonActivity: DistributedPartyActivity { +dclass DistributedKnockKnockDoor : DistributedAnimatedProp { +}; + +dclass DistributedElevator : DistributedObject { + setBldgDoId(uint32) required broadcast ram; + setState(string, int16) broadcast ram; + fillSlot0(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot1(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot2(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot3(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot4(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot5(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot6(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + fillSlot7(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16) broadcast ram; + emptySlot0(uint32, int8, int16) broadcast ram; + emptySlot1(uint32, int8, int16) broadcast ram; + emptySlot2(uint32, int8, int16) broadcast ram; + emptySlot3(uint32, int8, int16) broadcast ram; + emptySlot4(uint32, int8, int16) broadcast ram; + emptySlot5(uint32, int8, int16) broadcast ram; + emptySlot6(uint32, int8, int16) broadcast ram; + emptySlot7(uint32, int8, int16) broadcast ram; + requestBoard(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend; + rejectBoard(uint32); + requestExit() airecv clsend; +}; - // What state is the cannon in? - setMovie(uint8 mode, uint32 avId) broadcast; +dclass DistributedElevatorExt : DistributedElevator { + setFloor(int8) broadcast ram; +}; - setLanded(uint32 avId) airecv clsend; // appears safe, timing could be an issue...owner, please check +dclass DistributedElevatorInt : DistributedElevator { + requestBuildingExit() airecv clsend; + forcedExit(uint32); +}; - setCannonWillFire(uint32 cannonDoId, - int32 zRot / 100, - uint32 angle / 100) broadcast; +dclass DistributedFactoryElevatorExt : DistributedElevatorExt { + setEntranceId(uint8) required broadcast ram; + setFactoryInteriorZone(uint32); +}; - cloudsColorRequest() clsend airecv; - cloudsColorResponse(partyCloudColor [] cloudColorList); +dclass DistributedMintElevatorExt : DistributedElevatorExt { + setMintId(uint16) required broadcast ram; + setMintInteriorZone(uint32); +}; - requestCloudHit(uint16 cloudNumber, - uint8 r / 100, - uint8 g / 100, - uint8 b / 100) clsend airecv; +dclass DistributedBossElevator : DistributedElevatorExt { + setBossOfficeZone(uint32); +}; - setCloudHit(uint16 cloudNumber, - uint8 r / 100, - uint8 g / 100, - uint8 b / 100) broadcast; +dclass DistributedCFOElevator : DistributedBossElevator { }; -dclass DistributedPartyCannon: DistributedObject { - // Cannon Party Activity Id - setActivityDoId(uint64 doId) required broadcast ram; +dclass DistributedTutorialInterior : DistributedObject { + setZoneIdAndBlock(uint32, uint16) required broadcast ram; + setTutorialNpcId(uint32) required broadcast ram; +}; - // Where is the cannon? - setPosHpr(int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10) required broadcast ram; +dclass DistributedBankMgr : DistributedObject { + transferMoney(int16) airecv clsend; +}; +dclass DistributedMailbox : DistributedObject { + setHouseId(uint32) required broadcast ram; + setHousePos(uint8) required broadcast ram; + setName(string) required broadcast ram; + setFullIndicator(uint8) broadcast ram; + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + freeAvatar(); + setMovie(uint8, uint32) broadcast ram; + acceptItemMessage(uint16, blob, uint8, int32) airecv clsend; + acceptItemResponse(uint16, int8); +}; + +dclass DistributedFurnitureManager : DistributedObject { + setOwnerId(uint32) required broadcast ram; + setOwnerName(string) required broadcast ram; + setInteriorId(uint32) required broadcast ram; + setAtticItems(blob) required broadcast ram; + setAtticWallpaper(blob) required broadcast ram; + setAtticWindows(blob) required broadcast ram; + setDeletedItems(blob) required broadcast ram; + suggestDirector(uint32) airecv clsend; + setDirector(uint32) broadcast ram; + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + moveItemToAtticMessage(uint32, uint16) airecv clsend; + moveItemToAtticResponse(int8, uint16); + moveItemFromAtticMessage(uint16, int16/10, int16/10, int16/100, int16/10, int16/10, int16/10, uint16) airecv clsend; + moveItemFromAtticResponse(int8, uint32, uint16); + deleteItemFromAtticMessage(blob, uint16, uint16) airecv clsend; + deleteItemFromAtticResponse(int8, uint16); + deleteItemFromRoomMessage(blob, uint32, uint16) airecv clsend; + deleteItemFromRoomResponse(int8, uint16); + moveWallpaperFromAtticMessage(uint16, uint8, uint16) airecv clsend; + moveWallpaperFromAtticResponse(int8, uint16); + deleteWallpaperFromAtticMessage(blob, uint16, uint16) airecv clsend; + deleteWallpaperFromAtticResponse(int8, uint16); + moveWindowToAtticMessage(uint8, uint16) airecv clsend; + moveWindowToAtticResponse(int8, uint16); + moveWindowFromAtticMessage(uint16, uint8, uint16) airecv clsend; + moveWindowFromAtticResponse(int8, uint16); + moveWindowMessage(uint8, uint8, uint16) airecv clsend; + moveWindowResponse(int8, uint16); + deleteWindowFromAtticMessage(blob, uint16, uint16) airecv clsend; + deleteWindowFromAtticResponse(int8, uint16); + recoverDeletedItemMessage(blob, uint16, uint16) airecv clsend; + recoverDeletedItemResponse(int8, uint16); +}; + +dclass DistributedFurnitureItem : DistributedSmoothNode { + setItem(uint32, blob) required broadcast ram; + requestPosHpr(uint8, int16/10, int16/10, int16/100, int16/10, int16/10, int16/10, int16) airecv clsend; + setMode(uint8, uint32) required broadcast ram; +}; + +dclass DistributedBank : DistributedFurnitureItem { + avatarEnter() airecv clsend; + freeAvatar(); + setMovie(uint8, uint32, int16) broadcast ram; + transferMoney(int16) airecv clsend; +}; +dclass DistributedCloset : DistributedFurnitureItem { + setOwnerId(uint32) required broadcast ram; + enterAvatar() airecv clsend; + freeAvatar(); + deleteItem(blob, blob, uint8) airecv clsend; + removeItem(blob, uint8) airecv clsend; + setDNA(blob, int8, uint8) airecv clsend; + setState(uint8, uint32, uint32, string, uint8array, uint8array) broadcast ram; + setMovie(uint8, uint32, int16) broadcast ram; + resetItemLists() broadcast ram; + setCustomerDNA(uint32, blob) broadcast ram; +}; - // The client requests use of the cannon. - requestEnter() airecv clsend; //appears safe, timing could be an issue...owner, please check - requestExit() broadcast; +dclass DistributedPhone : DistributedFurnitureItem { + setInitialScale(uint8/255, uint8/255, uint8/255) required broadcast ram; + setNewScale(uint8/255, uint8/255, uint8/255) airecv clsend; + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + freeAvatar(); + setLimits(uint16) airecv; + setMovie(uint8, uint32, int32) broadcast ram; + requestPurchaseMessage(uint16, blob, int32) airecv clsend; + requestPurchaseResponse(uint16, int8); +}; - // What state is the cannon in? - setMovie(uint8 mode, uint32 avId) broadcast ram; +dclass DistributedFireworkShow : DistributedObject { + startShow(uint8, uint8, int16) broadcast ram; + requestFirework(int16/10, int16/10, int16/100, uint8, uint8, uint8) airecv clsend; + shootFirework(int16/10, int16/10, int16/100, uint8, uint8, uint8) broadcast; +}; - setCannonPosition(int32 zRot / 100, uint32 angle / 100) airecv clsend; // appears safe, zRot and angle might use a sanity check - setCannonLit(int32 zRot / 100, uint32 angle / 100) airecv clsend; // same as above - setFired() airecv clsend; // couldn't find function, come back to it later - setLanded(uint32 avId) airecv clsend; // appears safe, timing could be an issue...owner, please check - updateCannonPosition(uint32 avId, - int32 zRot / 100, - uint32 angle / 100) broadcast ram; - setCannonExit(uint32 avId) broadcast; - setTimeout() clsend airecv; +dclass DistributedFireworksCannon : DistributedFireworkShow { + avatarEnter() airecv clsend; + avatarExit() airecv clsend; + freeAvatar(); + setMovie(uint8, uint32, int16) broadcast ram; + setPosition(int16/10, int16/10, int16/10) required broadcast ram; }; -dclass DistributedPartyFireworksActivity: DistributedPartyActivity { - setEventId(uint8 eventId) required broadcast; - setShowStyle(uint8 showStyle) required broadcast; +dclass LobbyManager : DistributedObject { }; -dclass DistributedPartyTrampolineActivity: DistributedPartyActivity { - awardBeans(uint8 numBeansCollected, uint16 topHeight) clsend airecv; - setBestHeightInfo(string toonName, uint16 height) broadcast ram; - reportHeightInformation(uint16 height) airecv clsend; +dclass DistributedLargeBlobSender : DistributedObject { + setMode(uint8) required broadcast ram; + setTargetAvId(uint32) required broadcast ram; + setChunk(blob); + setFilename(string); + setAck() airecv clsend; +}; - leaveTrampoline() broadcast; +dclass DistributedLevel : DistributedObject { + setLevelZoneId(uint32) required broadcast ram; + setPlayerIds(uint32array) required broadcast ram; + setEntranceId(uint8) required broadcast ram; + setZoneIds(uint32array) broadcast ram; + setStartTimestamp(int32) broadcast ram; + setOuch(uint8) airecv clsend; + requestCurrentLevelSpec(int32, string) airecv clsend; + setSpecDeny(blob); + setSpecSenderDoId(uint32); + setAttribChange(uint32, blob, blob, blob) broadcast; +}; - requestAnim(string request) clsend airecv; - requestAnimEcho(string request) broadcast; +dclass DistributedEntity : DistributedObject { + setLevelDoId(uint32) required broadcast ram; + setEntId(uint32) required broadcast ram; +}; - removeBeans(int8[] beansToRemove) clsend airecv; - removeBeansEcho(int8[] beansToRemove) broadcast; +dclass DistributedInteractiveEntity : DistributedEntity { + setAvatarInteract(uint32) required broadcast ram; + requestInteract() airecv clsend; + rejectInteract(); + requestExit() airecv clsend; + avatarExit(uint32) broadcast; + setState(string, int32) required broadcast ram; }; -dclass DistributedPartyVictoryTrampolineActivity: DistributedPartyTrampolineActivity { +dclass DistributedFactory : DistributedLevel { + setFactoryId(uint16) required broadcast ram; + setSuits(uint32array, uint32array) broadcast ram; + setForemanConfronted(uint32) broadcast ram; + setDefeated() broadcast ram; }; -dclass DistributedPartyTugOfWarActivity: DistributedPartyTeamActivity { - // Messages sent from client to AI - reportKeyRateForce(uint32 keyrate, int16 force / 100) airecv clsend; - reportFallIn(uint8 losingTeam) airecv clsend; //security breach: index need range check...need help = SAMIR +dclass DistributedMint : DistributedObject { + setZoneId(uint32) required broadcast ram; + setMintId(uint16) required broadcast ram; + setFloorNum(uint8) required broadcast ram; + setRoomDoIds(uint32array) broadcast ram; +}; - // Messages sent from AI to client - setToonsPlaying(uint32[0-4] leftTeamIds, uint32[0-4] rightTeamIds) required broadcast ram; - updateToonKeyRate(uint32 toonId, uint32 keyrate) broadcast; - updateToonPositions(int16 / 1000) broadcast; +dclass DistributedMintRoom : DistributedLevel { + setMintId(uint16) required broadcast ram; + setRoomId(uint16) required broadcast ram; + setRoomNum(uint8) required broadcast ram; + setSuits(uint32array, uint32array) broadcast ram; + setBossConfronted(uint32) broadcast ram; + setDefeated() broadcast ram; }; -dclass DeleteManager: DistributedObject { - // Avatars ask the delete manager to set their inventory - // to less than what it was. If they try to set it to more than - // what it was, the request is ignored. - setInventory(blob) airecv clsend; //possible security breach: not sure how to validate blob...need help = JOE/DROSE +dclass DistributedInGameEditor : DistributedObject { + setEditorAvId(uint32) required broadcast ram; + setEditUsername(blob) required broadcast ram; + setLevelDoId(uint32) required broadcast ram; + requestCurrentLevelSpec() airecv clsend; + setSpecSenderDoId(uint32); + setEdit(uint32, blob, blob, blob) airecv clsend; + setAttribChange(uint32, blob, blob, blob); + setFinished() airecv clsend; }; -dclass ToontownMagicWordManager: MagicWordManager { - requestTeleport(string loaderId, string whereId, - uint32 hoodId, uint32 zoneId, uint32 avId); +dclass DistributedLift : DistributedEntity { + setStateTransition(uint8, uint8, uint32) required broadcast ram; + setAvatarEnter() airecv clsend; + setAvatarLeave() airecv clsend; }; -struct weeklyCalendarHoliday { - uint8 holidayId; - uint8 dayOfTheWeek; //0 for Monday +dclass DistributedDoorEntity : DistributedEntity { + setLocksState(uint16) required broadcast ram; + setDoorState(uint8, int32) required broadcast ram; + requestOpen() airecv clsend; }; -struct yearlyCalendarHoliday { - uint8 holidayId; - uint8array firstStartTime; - uint8array lastEndTime; +dclass DistributedSwitch : DistributedInteractiveEntity { }; -struct oncelyCalendarHoliday { - uint8 holidayId; - uint16array firstStartTime; //had to use int16 as 2008 wont fit in a byte - uint16array lastEndTime; +dclass DistributedButton : DistributedSwitch { }; -struct relativelyCalendarHoliday { - uint8 holidayId; - uint16array firstStartTime; - uint16array lastEndTime; +dclass DistributedTrigger : DistributedSwitch { }; -struct startAndEndTime { - uint16array startTime; - uint16array endTime; +dclass DistributedCrushableEntity : DistributedEntity { + setPosition(int16/10, int16/10, int16/10) broadcast ram; + setCrushed(uint32, uint8) broadcast ram; }; -struct multipleStartHoliday{ - uint8 holidayId; - startAndEndTime times[]; +dclass DistributedCrusherEntity : DistributedEntity { }; -// For distributing news of the world -dclass NewsManager: DistributedObject { - setPopulation(uint32) broadcast ram; - setBingoWin(uint32 zoneId) broadcast ram; - setBingoStart() broadcast; - setBingoEnd() broadcast; - setCircuitRaceStart() broadcast; - setCircuitRaceEnd() broadcast; - setTrolleyHolidayStart() broadcast; - setTrolleyHolidayEnd() broadcast; - setTrolleyWeekendStart() broadcast; - setTrolleyWeekendEnd() broadcast; - setRoamingTrialerWeekendStart() broadcast; - setRoamingTrialerWeekendEnd() broadcast; - setInvasionStatus(uint8 msgType, string cogType, uint32 numRemaining, uint8 skeleton) broadcast; - setHolidayIdList(uint32array) broadcast ram; - holidayNotify() broadcast; - setWeeklyCalendarHolidays(weeklyCalendarHoliday[] weeklyHolidays) required broadcast ram; - setYearlyCalendarHolidays(yearlyCalendarHoliday[] yearlyHolidays) required broadcast ram; - setOncelyCalendarHolidays(oncelyCalendarHoliday[] oncelyHolidays) required broadcast ram; - setRelativelyCalendarHolidays(relativelyCalendarHoliday[] relativelyHolidays) required broadcast ram; - setMultipleStartHolidays(multipleStartHoliday[] multipleStartHolidays) required broadcast ram; - sendSystemMessage(string message, uint8 style) broadcast ram; -}; - -dclass PurchaseManager: DistributedObject { - // Info needed to create a Purchase Manager. Setting the countdown - // actually displays the screen. - setPlayerIds(uint32, uint32, uint32, uint32) required broadcast ram; - setNewbieIds(uint32array newbieIds) required broadcast ram; - setMinigamePoints(uint8, uint8, uint8, uint8) required broadcast ram; - setPlayerMoney(uint8, uint8, uint8, uint8) required broadcast ram; - setPlayerStates(uint8, uint8, uint8, uint8) required broadcast ram; - setCountdown(int16 timestamp) required broadcast ram; - setMetagameRound(int8 metagameRound) required broadcast ram; - setVotesArray(int16array votes = {}) required broadcast ram; - - // Input from the player - requestExit() airecv clsend; // appears safe - requestPlayAgain() airecv clsend; // appears safe - setInventory(blob inventory, int16 money, uint8 done) airecv clsend; - - // Time is up - setPurchaseExit() broadcast; -}; - -dclass NewbiePurchaseManager: PurchaseManager { - setOwnedNewbieId(uint32 ownedNewbieId) required broadcast ram; -}; - -dclass SafeZoneManager: DistributedObject { - enterSafeZone() airecv clsend; //safe. it even writes in teh event log in case something odd - exitSafeZone() airecv clsend; //safe. no entry in the event log though -}; - -dclass TutorialManager: DistributedObject { - // Players who want a tutorial send this. - requestTutorial() airecv clsend; //safe. no entry in the event/suspicious log though//turns out not so safe, I got a crash, check comment on TutorialManagerAI - // Players who don't want a tutorial send this. - rejectTutorial() airecv clsend; //safe. no entry in the event/suspicious log though - // Players who don't want a tutorial send this. - requestSkipTutorial() airecv clsend; //safe. no entry in the event/suspicious log though//turns out not so safe, I got a crash, check comment on TutorialManagerAI - // This is how the manager responds to the request to skip - skipTutorialResponse(uint8 response); - // This is how the manager puts a player into the tutorial - enterTutorial(uint32 branchZone, - uint32 streetZone, - uint32 shopZone, - uint32 hqZone); - allDone() airecv clsend; //safe. no entry in the event/suspicious log though - toonArrived() airecv clsend; //safe -}; - -//dclass DistributedTutorial: DistributedObject { -// // This is how clients declare that they are done with a tutorial. -// allDone() airecv clsend; -//}; - -dclass CatalogManager: DistributedObject { - startCatalog() airecv clsend; //safe -}; - -dclass DistributedMyTest: DistributedObject { - setMyTest(uint16 breadbasket) broadcast; -}; - -dclass DistributedTreasure: DistributedObject { - // Used to instantiate a treasure on the client - setPosition(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; - - // Client to AI request for grabbing - requestGrab() airecv clsend; - - // AI tells everyone that a treasure has been grabbed - setGrab(uint32 avId) broadcast ram; - - // AI tells everyone that someone attempted to grab a treasure but - // was rejected. - setReject() broadcast; -}; - -// Safe zone treasure -dclass DistributedDDTreasure: DistributedTreasure {}; -dclass DistributedDGTreasure: DistributedTreasure {}; -dclass DistributedDLTreasure: DistributedTreasure {}; -dclass DistributedTTTreasure: DistributedTreasure {}; -dclass DistributedBRTreasure: DistributedTreasure {}; -dclass DistributedMMTreasure: DistributedTreasure {}; -dclass DistributedOZTreasure: DistributedTreasure {}; -// Estate treasure -dclass DistributedETreasure: DistributedTreasure {}; -dclass DistributedEFlyingTreasure: DistributedTreasure {}; - -// Tag game treasure -dclass DistributedTagTreasure: DistributedTreasure {}; - -// Treasures in the cashbot CFO battle. These pop out of the goon and -// land a little bit away, rather than just appearing in one place and -// staying there. -dclass DistributedCashbotBossTreasure: DistributedTreasure { - setGoonId(uint32 goonId) required broadcast ram; - setFinalPosition(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; - setStyle(uint16 hoodId) required broadcast ram; -}; - -dclass DistributedLargeBlobSender: DistributedObject { - setMode(uint8 mode) required broadcast ram; - setTargetAvId(uint32 avId) required broadcast ram; - - setChunk(blob chunk); - setFilename(string filename); - - // notify server that you got it - setAck() airecv clsend; //appears safe, timing could be an issue...owner, please check -}; - -dclass DistributedLevel: DistributedObject { - setLevelZoneId(uint32 zoneId) required broadcast ram; - setPlayerIds(uint32array avIdList) required broadcast ram; - setEntranceId(uint8 entranceId) required broadcast ram; - setZoneIds(uint32array zoneIds) broadcast ram; - setStartTimestamp(int32 timestamp) broadcast ram; - - // Hurt a toon. Used mainly for platform style elements (stompers, etc) - setOuch(uint8 penalty = 0) airecv clsend; //appears safe, sanity check on penalty would be nice - - // for dev env - requestCurrentLevelSpec(int32 specHash, string entTypeRegHash) airecv clsend; //appears safe - setSpecDeny(blob reason); - setSpecSenderDoId(uint32 doId); - - // for interactive level editing - setAttribChange(uint32 entId, blob attribName, blob value, blob username) broadcast; -}; - -dclass DistributedEntity: DistributedObject { - // An entity that appears in a Level - setLevelDoId(uint32 levelDoId) required broadcast ram; - setEntId(uint32 entId) required broadcast ram; -}; - -dclass DistributedInteractiveEntity: DistributedEntity { - // Tell all nearby that a toon is interacting with the entity: - setAvatarInteract(uint32 avatarId) required broadcast ram; - - // This client wants to interact with the entity: - requestInteract() airecv clsend; // appears safe - - // Tell the toon they may not interact with the entity: - rejectInteract(); - - // This client wants to stop interacting with the entity: - requestExit() airecv clsend; //appears safe - - // Toon avatarID is no longer interacting with the entity: - avatarExit(uint32 avatarId) broadcast; - - // How the server tells the client what state to enter into: - setState(string state, int32 timestamp) required broadcast ram; -}; - - -dclass DistributedTrophyMgr: DistributedObject { - // An avatar requests his own trophy score. - requestTrophyScore() airecv clsend; //safe -}; - -dclass DistributedBuilding: DistributedObject { - // We must know the block: - setBlock(uint16 block, uint32 interiorZoneId) required broadcast ram; - - // Setup the building as a suit building - // suitTrack is one of 'c', 'l', 'm', or 's' - // difficulty is a value from 1 to 5 - // numFloors is a value from 1 to 5 - setSuitData(int8 suitTrack, int8 difficulty, int8 numFloors) - required broadcast ram; - - // This is used to announce which toons will come running out of the - // building when it is rescued. It is set just prior to setting - // the state to "waitForVictors" and cleared just prior to setting the - // state to "toon". - setVictorList(uint32array={0, 0, 0, 0}) broadcast ram; - - // How the server tells the client what state to enter into - // Used for states that want a timestamp - setState(string state, int16 timestamp) broadcast ram; - - // How victors report that they are ready to march out of the elevator - // for the Suit to Toon victory ceremony - setVictorReady() airecv clsend; //appears safe, timing could be an issue...owner, please check -}; - -dclass DistributedAnimBuilding: DistributedBuilding { -} - -dclass DistributedToonInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in - // case they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; - - // Setup the building as a toon building - setToonData(blob toonData) - required broadcast ram; - - // How the server tells the client what state to enter into - setState(string state, int16 timestamp) required broadcast ram; -}; - -dclass DistributedToonHallInterior: DistributedToonInterior { - -}; - -dclass DistributedSuitInterior: DistributedObject { - setZoneId(uint32 zoneId) required broadcast ram; - setExtZoneId(uint32 extZoneId) required broadcast ram; - setDistBldgDoId(uint32) required broadcast ram; - setNumFloors(int8 numFloors) required broadcast ram; - - setToons(uint32array toonsIds, uint16 hack) broadcast ram; - setSuits(uint32array suitIds, uint32array reserveIds, uint16array values) - broadcast ram; - - // How the server tells the client what state to enter into - setState(string, int16 timestamp) required broadcast ram; - - // Messages from each client to indicate the client is ready to proceed. - - setAvatarJoined() airecv clsend; //possible security breach, name and dnaNetString need sanity check...need help = MIKE/DROSE - elevatorDone() airecv clsend; //appears safe - reserveJoinDone() airecv clsend; //appears safe -}; - -dclass DistributedCogdoInterior: DistributedObject { - setZoneId(uint32 zoneId) required broadcast ram; - setExtZoneId(uint32 extZoneId) required broadcast ram; - setDistBldgDoId(uint32) required broadcast ram; - setNumFloors(int8 numFloors) required broadcast ram; - - setToons(uint32array toonsIds, uint16 hack) broadcast ram; - setSuits(uint32array suitIds, uint32array reserveIds, uint16array values) - broadcast ram; - - // How the server tells the client what state to enter into - setState(string, int16 timestamp) required broadcast ram; - - // Messages from each client to indicate the client is ready to proceed. - - setAvatarJoined() airecv clsend; //possible security breach, name and dnaNetString need sanity check...need help = MIKE/DROSE - elevatorDone() airecv clsend; //appears safe - reserveJoinDone() airecv clsend; //appears safe -}; - -dclass DistCogdoGame: DistributedObject { - setInteriorId(uint32 interiorId) required broadcast ram; - setIntroStart() broadcast; - setAvatarReady() airecv clsend; - setGameStart(int16 timestamp) broadcast; - setGameFinish(int16 timestamp) broadcast; -}; - -dclass DistCogdoLevelGame: DistCogdoGame, DistributedLevel { -}; - -dclass DistCogdoMazeGame: DistributedMinigame { - setLocks(uint32array toonIds, uint16array spawnPointsX, uint16array spawnPointsY) required broadcast ram; - requestAction(uint8 action, uint32 data) airecv clsend; - doAction(uint8 action, uint32 data) broadcast; -}; - -dclass DistCogdoFlyingGame: DistributedMinigame { -}; - -dclass DistBoardroomGame: DistCogdoGame { -}; - -dclass DistCogdoCraneGame: DistCogdoLevelGame { -}; - -dclass DistCogdoCrane: DistributedObject { - setCraneGameId(uint32 craneGameId) required broadcast ram; - setIndex(uint8 index) required broadcast ram; - - setState(char state, uint32 avId) broadcast ram; - - clearSmoothing(int8 bogus) broadcast clsend; - setCablePos(uint8 changeSeq, int16 y / 100, uint16 h % 360 / 100, LinkPosition links[3], int16 timestamp) broadcast clsend; -}; - -dclass DistributedHQInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in - // case they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; - setLeaderBoard(blob) required broadcast ram; - setTutorial(uint8 flag) required broadcast ram; -}; - -dclass DistributedGagshopInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in - // case they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; -}; - -dclass DistributedPetshopInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in - // case they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; -}; - -dclass DistributedKartShopInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in case - // they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; -}; - -dclass DistributedDoor: DistributedObject { - // We must know the block: - // blockNumber is a uint32 in this case because it is also used as - // the 32 bit house id in DistributedHouseDoor - setZoneIdAndBlock(uint32 zoneId, uint32 blockNumber) required broadcast ram; - - // false: swings inward, true: the door swings outward. - // bit 1 is the left door, bit 2 is the right door: - setSwing(int8 flags) required broadcast ram; - - // The type of door loading that will need to take place - setDoorType(uint8 doorType) required broadcast ram; - - // Some buildings have more than one door. Door indices generally - // start at 0. - setDoorIndex(uint8 doorIndex) required broadcast ram; - - // Answers the question: Where does this door go? - setOtherZoneIdAndDoId(uint32 zoneId, uint32 doId); - - // This client wants to go though the door: - requestEnter() airecv clsend; //appears safe, timing could be an issue...owner, please check - - // The client can ask to leave the door: - requestExit() airecv clsend; //appears safe - - // Tell the toon they may not enter: - rejectEnter(int8 reason); - - // Tell all nearby that an avatar is entering the door queue: - avatarEnter(uint32 avatarID) broadcast; - - // Tell all nearby that an avatar is exiting the door or door queue: - avatarExit(uint32 avatarID) broadcast; - - // How the server tells the client what state to enter into - // Used for states that want a timestamp - setState(string state, int16 timestamp) required broadcast ram; - // The "exit door" is also the "left door": - setExitDoorState(string state, int16 timestamp) required broadcast ram; -}; - -dclass DistributedAnimDoor: DistributedDoor { -}; - -dclass DistributedHouseDoor: DistributedDoor { - // The doid of the house that owns this door - // The houseId is now broadcas as the block id. Having this here was a problem - // because it was out of order with setState and some other functions - // defined in DistributedDoor that require the houseId to be set - // setHouseId(uint32 houseId) required broadcast ram; -}; - -dclass DistributedCogHQDoor: DistributedDoor { -}; - -// Make sure the NPC is created after the interiors - -// We don't inherit from DistributedToon, because that class has a -// bunch of stuff we don't care about, like experience and inventory. -dclass DistributedNPCToonBase: DistributedNode { - setName(string) required broadcast ram; - setDNAString(blob) required broadcast ram; - - // for a zone with N NPCs, there are N positions for the NPCs - setPositionIndex(uint8) required broadcast ram; - - setAnimState(string, int16 / 1000, int16 timestamp) broadcast ram; - - // This is sent by the client to advance the page number in response - // to setPageChat(). - setPageNumber(int16 paragraph, int8 pageNumber, int16 timestamp) broadcast ram clsend; //possible security breach: paragraph and pageNumber need sanity check...need help = DROSE - - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; //appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); -}; - -dclass DistributedNPCToon: DistributedNPCToonBase { - // Quest movie - // Not all of the fields are used in every mode, - // they will be 0 if they are not used - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint16array quests, int16 timestamp) broadcast ram; - setMovieDone() airecv clsend; //safe, logs suspicious activity - // Tell the server which quest we choose on the multiple choice menu - chooseQuest(uint16 questId) airecv clsend; //appears safe: questId is sanity checked - // Tell the server which track we choose on the multiple choice menu - chooseTrack(int8 trackId) airecv clsend; //appears safe: trackId is sanity checked -}; - -dclass DistributedNPCSpecialQuestGiver: DistributedNPCToonBase { - // Quest movie - // Not all of the fields are used in every mode, - // they will be 0 if they are not used - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint16array quests, int16 timestamp) broadcast ram; - setMovieDone() airecv clsend; //safe, logs suspicious activity - // Tell the server which quest we choose on the multiple choice menu - chooseQuest(uint16 questId) airecv clsend; //appears safe: questId is sanity checked - // Tell the server which track we choose on the multiple choice menu - chooseTrack(int8 trackId) airecv clsend; //appears safe: trackId is sanity checked -}; - -dclass DistributedNPCFlippyInToonHall : DistributedNPCToon { -}; - -dclass DistributedNPCScientist : DistributedNPCToonBase { - setChat(string topic, uint8 partPos, uint32 partId, uint8 progress, uint8 flags) ownsend broadcast; -}; - -dclass DistributedNPCClerk: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, int16 timestamp) broadcast ram; - setInventory(blob inventory, int16 money, uint8 done) airecv clsend; -}; - -dclass DistributedNPCTailor: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, int16 timestamp) broadcast ram; - setDNA(blob dna, int8 finished, uint8 which) airecv clsend; //security breach: invalid finished not checked, dna needs sanity check...need help = SAMIR/MIKE - - // Server tells all clients how to clothe the current customer - setCustomerDNA(uint32 avId, blob dna) broadcast ram; -}; - -dclass DistributedNPCBlocker: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, int16 timestamp) broadcast ram; -}; - -dclass DistributedNPCFisherman: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint32array extraArgs, int16 timestamp) broadcast ram; - completeSale(uint8 sell) airecv clsend; //appears safe, although sell should be a 0/1 value -}; - -dclass DistributedNPCPartyPerson: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint32array extraArgs, int16 timestamp) broadcast ram; - answer(uint8 wantsToPlan) airecv clsend; -}; - -dclass DistributedNPCPetclerk: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint32array extraArgs, int16 timestamp) broadcast ram; - setPetSeeds(uint32array petSeeds); - petAdopted(uint8 petNum, uint32 nameIndex) airecv clsend; - petReturned() airecv clsend; - fishSold() airecv clsend; - transactionDone() airecv clsend; -}; - -dclass DistributedNPCKartClerk: DistributedNPCToonBase { - setMovie(uint8 mode, uint32 npcId, uint32 avId, uint32array extraArgs, int16 timestamp) broadcast ram; - buyKart(uint8 whichKart) airecv clsend; - buyAccessory(uint8 whichAcc) airecv clsend; - transactionDone() airecv clsend; -}; - -dclass DistributedKnockKnockDoor: DistributedAnimatedProp { -}; - -dclass DistributedElevator: DistributedObject { - // We must know the doId of the building we are associated with. - // The building knows the zone it is in, and the zone that is - // inside it. - setBldgDoId(uint32 doId) required broadcast ram; - // How the server tells the client what state to enter into - setState(string, int16 timestamp) broadcast ram; - // How the server tells the client to fill the slots - fillSlot0(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot1(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot2(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot3(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot4(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot5(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot6(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - fillSlot7(uint32 avId, uint8 wantBoardingShow) broadcast ram; // time of boarding - - // How the server tells the client to empty the slots - emptySlot0(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot1(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot2(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot3(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot4(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot5(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot6(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - emptySlot7(uint32 avId, int8 bailFlag, int16 timestamp, int16 time) broadcast ram; - - // How the client requests permission to board - requestBoard() airecv clsend;// seems harmless, if given wrong x,y,z,h,p,r, it will appear wrong. server won't crash. safe - - // How the server rejects permission to board - rejectBoard(uint32 avId, uint8 reason); - - // How the client request permission to exit - requestExit() airecv clsend; //appears safe - setElevatorTripId(uint32 tripID) required broadcast ram; - setAntiShuffle(uint8 antiShuffle) required broadcast ram; - setMinLaff(uint8 minLaff) required broadcast ram; - -}; - -dclass DistributedElevatorFSM: DistributedObject { - // We must know the doId of the building we are associated with. - // The building knows the zone it is in, and the zone that is - // inside it. - setBldgDoId(uint32 doId) required broadcast ram; - // How the server tells the client what state to enter into - setState(string, int16 timestamp) broadcast ram; - // How the server tells the client to fill the slots - fillSlot0(uint32 avId) broadcast ram; // time of boarding - fillSlot1(uint32 avId) broadcast ram; // time of boarding - fillSlot2(uint32 avId) broadcast ram; // time of boarding - fillSlot3(uint32 avId) broadcast ram; // time of boarding - fillSlot4(uint32 avId) broadcast ram; // time of boarding - fillSlot5(uint32 avId) broadcast ram; // time of boarding - fillSlot6(uint32 avId) broadcast ram; // time of boarding - fillSlot7(uint32 avId) broadcast ram; // time of boarding - - // How the server tells the client to empty the slots - emptySlot0(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot1(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot2(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot3(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot4(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot5(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot6(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - emptySlot7(uint32 avId, int8 bailFlag, int16 timestamp) broadcast ram; - - // How the client requests permission to board - requestBoard() airecv clsend;// seems harmless, if given wrong x,y,z,h,p,r, it will appear wrong. server won't crash. safe - - // How the server rejects permission to board - rejectBoard(uint32 avId, uint8 reason); - - // How the client request permission to exit - requestExit() airecv clsend; //appears safe - setElevatorTripId(uint32 tripID) required broadcast ram; - setAntiShuffle(uint8 antiShuffle) required broadcast ram; - setMinLaff(uint8 minLaff) required broadcast ram; - -}; - -dclass DistributedElevatorFloor: DistributedElevatorFSM { - setFloor(int8 floor) broadcast ram; - setLocked(uint16 locked)required broadcast ram; - setEntering(uint16 locked)required broadcast ram; - kickToonsOut() broadcast; - //setPos(int32/1000 x, int32/1000 y, int32/1000 z)broadcast ram; - //setH(int32/1000 h)broadcast ram; - setLatch(uint32 markerId)required broadcast ram; -}; - -dclass DistributedElevatorExt: DistributedElevator { - // This is how the AI communicates the floor number that should - // be displayed on the outside of the elevator. - setFloor(int8 floor) broadcast ram; -}; - - - -dclass DistributedLawOfficeElevatorExt: DistributedElevatorExt { - setEntranceId(uint8 entranceId) required broadcast ram; - // How the server puts the clients into a lawOffice - setLawOfficeInteriorZone(uint32 zoneId); - setLawOfficeInteriorZoneForce(uint32 zoneId); -}; - -dclass DistributedElevatorInt: DistributedElevator { - // How the client lets the server know that he intends to - // exit the building. - requestBuildingExit() airecv clsend; //appears safe, a supicious note would be nice - // How the server lets the client know he has just - // been kicked out of the building. - forcedExit(uint32 avId); -}; - -dclass DistributedFactoryElevatorExt: DistributedElevatorExt { - setEntranceId(uint8 entranceId) required broadcast ram; - // How the server puts the clients into a factory - setFactoryInteriorZone(uint32 zoneId); - setFactoryInteriorZoneForce(uint32 zoneId); -}; - -dclass DistributedMintElevatorExt: DistributedElevatorExt { - setMintId(uint16 mintId) required broadcast ram; - // How the server puts the clients into a mint - setMintInteriorZone(uint32 zoneId); - setMintInteriorZoneForce(uint32 zoneId); -}; - -dclass DistributedCogdoElevatorExt: DistributedElevatorExt { -}; - - -dclass DistributedLawOfficeElevatorInt: DistributedElevatorFloor { - //setEntranceId(uint8 entranceId) required broadcast ram; - //How the server puts the clients into a lawOffice - setLawOfficeInteriorZone(uint32 zoneId); -}; - -dclass DistributedCogdoElevatorInt: DistributedElevatorInt { -}; - -dclass DistributedBossElevator: DistributedElevatorExt { - setBossOfficeZone(uint32 zoneId); - setBossOfficeZoneForce(uint32 zoneId); -}; - -dclass DistributedCFOElevator: DistributedBossElevator { -}; - -dclass DistributedCJElevator: DistributedBossElevator { -}; - -dclass DistributedBBElevator: DistributedBossElevator { -}; - - -dclass DistributedBoardingParty: DistributedObject { - postGroupInfo(uint32 leaderId, uint32array memberList, uint32array inviteeList, uint32array kickedList) broadcast; - informDestinationInfo(uint8 elevatorOffset) clsend airecv; - postDestinationInfo(uint8 elevatorOffset) broadcast; - postInvite(uint32 leaderId, uint32 inviterId) broadcast; - postInviteCanceled() broadcast; - postKick(uint32 leaderId) broadcast; - postKickReject(uint32 leaderId, uint32 inviterId, uint32 inviteeId) broadcast; - postSizeReject(uint32 leaderId, uint32 inviterId, uint32 inviteeId) broadcast; - postInviteAccepted(uint32 inviteeId) broadcast; - postInviteDelcined(uint32 inviteeId) broadcast; - postInviteNotQualify(uint32 avId, int8 reason, uint32 elevatorId) broadcast; - postAlreadyInGroup() broadcast; - postGroupDissolve(uint32 quitterId, uint32 leaderId, uint32 [] memberList, uint8 kick) broadcast; - postMessageAcceptanceFailed(uint32 inviteeId, int8 reason) broadcast; - postGroupAlreadyFull() broadcast; - postSomethingMissing() broadcast; - postRejectBoard(uint32 elevatorId, int8 reason, uint32 [] avatarsFailingRequirements, uint32 [] avatarsInBattle) broadcast; - postRejectGoto(uint32 elevatorId, int8 reason, uint32 [] avatarsFailingRequirements, uint32 [] avatarsInBattle) broadcast; - postMessageInvited(uint32 inviteeId, uint32 inviterId) broadcast; - postMessageInvitationFailed(uint32 inviterId) broadcast; - acceptGoToFirstTime(uint32 elevatorId) broadcast; - acceptGoToSecondTime(uint32 elevatorId) broadcast; - rejectGoToRequest(uint32 elevatorId, int8 reason, uint32 [] avatarsFailingRequirements, uint32 [] avatarsInBattle) broadcast; - - //toonInZone()airecv clsend; - requestInvite(uint32 inviteeId) airecv clsend; - requestCancelInvite(uint32 inviteeId) airecv clsend; - requestAcceptInvite(uint32 leaderId, uint32 inviterId) airecv clsend; - requestRejectInvite(uint32 leaderId, uint32 inviterId) airecv clsend; - requestKick(uint32 kickId) airecv clsend; - requestLeave(uint32 leaderId) airecv clsend; - //demandDrop()airecv clsend; - requestBoard(uint32 elevatorId)airecv clsend; - - //goToElevatorDestination(uint32 elevatorId) airecv clsend; - requestGoToFirstTime(uint32 elevatorId) airecv clsend; - requestGoToSecondTime(uint32 elevatorId) airecv clsend; - - setElevatorIdList(uint32array elevatorIdList) required broadcast ram; - setGroupSize(uint8 maxSize) required broadcast ram; - -}; - -dclass DistributedTutorialInterior: DistributedObject { - // Pass the zoneId and the building block number separately, in - // case they're ever not related. - setZoneIdAndBlock(uint32 zoneId, uint16 blockNumber) required broadcast ram; - setTutorialNpcId(uint32 npcId) required broadcast ram; -}; - -dclass DistributedBankMgr: DistributedObject { - // A positive amount indicates a deposit to the bank - transferMoney(int16 amount) airecv clsend; //safe, checks identity and writes suspicous activity -} - -dclass DistributedMailbox: DistributedObject { - setHouseId(uint32 houseId) required broadcast ram; - setHousePos(uint8 housePosInd) required broadcast ram; - setName(string name) required broadcast ram; - - setFullIndicator(uint8 full) broadcast ram; - - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; // appears safe - avatarExit() airecv clsend; // appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); - // Maintain distributed state on the mailbox - setMovie(uint8 mode, uint32 avId) broadcast ram; - - acceptItemMessage(uint16 context, blob item, uint8 index, int32 optional) airecv clsend; // security breach: index need validation, item need sanity check...need help = DROSE - acceptItemResponse(uint16 context, int8 retcode); - discardItemMessage(uint16 context, blob item, uint8 index, int32 optional) airecv clsend; // security breach: index need validation, item need sanity check...need help = DROSE - discardItemResponse(uint16 context, int8 retcode); - acceptInviteMessage(uint16 context, uint64 inviteKey) airecv clsend; - rejectInviteMessage(uint16 context, uint64 inviteKey) airecv clsend; - markInviteReadButNotReplied(uint64 inviteKey) airecv clsend; -}; - -dclass DistributedFurnitureManager: DistributedObject { - setOwnerId(uint32 ownerId) required broadcast ram; - setOwnerName(string name) required broadcast ram; - setInteriorId(uint32 interiorId) required broadcast ram; - setAtticItems(blob items) required broadcast ram; - setAtticWallpaper(blob items) required broadcast ram; - setAtticWindows(blob items) required broadcast ram; - setDeletedItems(blob items) required broadcast ram; - - suggestDirector(uint32 avId) airecv clsend; //possible security breach: avId need validation - setDirector(uint32 avId) broadcast ram; - - avatarEnter() airecv clsend; //appears safe - avatarExit() airecv clsend; //appears safe - - moveItemToAtticMessage(uint32 doId, uint16 context) airecv clsend; // appears safe - moveItemToAtticResponse(int8 retcode, uint16 context); - moveItemFromAtticMessage(uint16 index, - int16/10 x, int16/10 y, int16/100 z, - int16/10 h, int16/10 p, int16/10 r, - uint16 context) airecv clsend; //appears safe, although suspicious note would be nice - moveItemFromAtticResponse(int8 retcode, uint32 objectId, uint16 context); - - deleteItemFromAtticMessage(blob item, uint16 index, uint16 context) airecv clsend; //appears safe, context might need sanity check - deleteItemFromAtticResponse(int8 retcode, uint16 context); - - deleteItemFromRoomMessage(blob item, uint32 doId, uint16 context) airecv clsend; //appears safe, context might need sanity check - deleteItemFromRoomResponse(int8 retcode, uint16 context); - - moveWallpaperFromAtticMessage(uint16 index, uint8 room, uint16 context) airecv clsend; //appears safe, context might need sanity check - moveWallpaperFromAtticResponse(int8 retcode, uint16 context); - deleteWallpaperFromAtticMessage(blob item, uint16 index, uint16 context) airecv clsend; //apperas safe, context might need sanity check - deleteWallpaperFromAtticResponse(int8 retcode, uint16 context); - - moveWindowToAtticMessage(uint8 slot, uint16 context) airecv clsend; //appears safe, context might need sanity check - moveWindowToAtticResponse(int8 retcode, uint16 context); - moveWindowFromAtticMessage(uint16 index, uint8 slot, uint16 context) airecv clsend; //appears safe, context might need sanity check - moveWindowFromAtticResponse(int8 retcode, uint16 context); - moveWindowMessage(uint8 fromSlot, uint8 toSlot, uint16 context) airecv clsend; //appears safe, context might need sanity check - moveWindowResponse(int8 retcode, uint16 context); - deleteWindowFromAtticMessage(blob item, uint16 index, uint16 context) airecv clsend; //appears safe, context might need sanity check - deleteWindowFromAtticResponse(int8 retcode, uint16 context); - recoverDeletedItemMessage(blob item, uint16 index, uint16 context) airecv clsend; //appears safe, context might need sanity check - recoverDeletedItemResponse(int8 retcode, uint16 context); -}; - -dclass DistributedFurnitureItem: DistributedSmoothNode { - setItem(uint32 furnitureMgr, blob item) required broadcast ram; - - // posHpr stored as 16 bit signed ints divided by 100 for higher resolution - // The furniture arranger sends this message to the AI as he is moving - // furniture around. Final indicates requester is finished for now, so - // the AI should record this final poshpr to the database - requestPosHpr(uint8 final, int16/10 x, int16/10 y, int16/100 z, int16/10 h, int16/10 p, int16/10 r, int16 timestamp) airecv clsend; //safe, has suspicious note for invalid entry - - // Sent by the AI to tell clients what mode the furniture is in - // Includes the avId of current director - setMode(uint8 mode, uint32 avId) required broadcast ram; -}; - -dclass DistributedBank: DistributedFurnitureItem { - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; // appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); - // Maintain distributed state on the bank - setMovie(uint8 mode, uint32 avId, int16 timestamp) broadcast ram; - // A positive amount indicates a deposit to the bank - transferMoney(int16 amount) airecv clsend; //safe, checks identity and writes suspicous activity -}; - -dclass DistributedCloset: DistributedFurnitureItem { - setOwnerId(uint32 ownerId) required broadcast ram; - enterAvatar() airecv clsend; // appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); - deleteItem(blob trashDNA, blob newDNA, uint8 which) airecv clsend; //?couldn't find - removeItem(blob trashDNA, uint8 which) airecv clsend; //possible security breach: trashDNA and which need sanity check...need help = SAMIR - setDNA(blob dna, int8 finished, uint8 which) airecv clsend; //security breach: invalid finished not checked, dna needs sanity check - setState(uint8 mode, - uint32 avId, uint32 ownerId, - string gender, - uint8array topList, uint8array botList) - broadcast ram; - setMovie(uint8 mode, uint32 avId, int16 timestamp) broadcast ram; - resetItemLists() broadcast ram; - - // Server tells all clients how to clothe the current customer - setCustomerDNA(uint32 avId, blob dna) broadcast ram; -}; - -dclass DistributedPhone: DistributedFurnitureItem { - // Phones adjust their scale to accomodate a toon, then keep that - // same scale for a while. - setInitialScale(uint8 sx / 170, uint8 sy / 170, uint8 sz / 170) required broadcast ram; - - // This is how the current avatar tells the AI what the new scale - // will be. - setNewScale(uint8 sx / 170, uint8 sy / 170, uint8 sz / 170) airecv clsend; //safe - - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; //appears safe - avatarExit() airecv clsend; //appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); - - // The AI must tell the client certain numbers it needs to know to - // compute limits on purchases. - setLimits(uint16 numHouseItems); - - // Maintain distributed state on the phone - setMovie(uint8 mode, uint32 avId, int32 timestamp) broadcast ram; - - // To make purchases - requestPurchaseMessage(uint16 context, blob item, int32 optional) airecv clsend; //appears safe, context might need sanity check - requestPurchaseResponse(uint16 context, int8 retcode); - // To make Gift purchases - requestGiftPurchaseMessage(uint16 context, uint32 targetDoID, blob item, int32 optional) airecv clsend; //appears safe, context might need sanity check - requestGiftPurchaseResponse(uint16 context, int8 retcode); -}; - - - -dclass DistributedFireworkShow: DistributedObject { - // Start a firework show - // Note: there is no stop show, we just delete the object - startShow(uint8 holidayId, uint8 showStyle, int16 timestamp) broadcast ram; - - // Request to shoot a firework at my position with a style and color of - // my choosing. The AI will either shoot this firework or not, deducting - // the price of it as well. - requestFirework(int16/10 x, int16/10 y, int16/100 z, uint8 style, uint8 color1, uint8 color2) airecv clsend; //possible security breach: style and other parameters may need sanity check...need help = JOE/SAMIR - - // Usually comes as the result of a requestFirework - shootFirework(int16/10 x, int16/10 y, int16/100 z, uint8 style, uint8 color1, uint8 color2) broadcast; -}; - -dclass DistributedFireworksCannon: DistributedFireworkShow { - // These let the server know when toons show up and leave - avatarEnter() airecv clsend; //appears safe - avatarExit() airecv clsend; //appears safe - // Free an avatar that is requesting interaction, but needs to be denied - freeAvatar(); - // Maintain distributed state on the bank - setMovie(uint8 mode, uint32 avId, int16 timestamp) broadcast ram; - // Broadcast the position to the clients (until we add to dna) - setPosition(int16 x / 10, int16 y / 10, int16 z / 10) required broadcast ram; -}; - -dclass LobbyManager: DistributedObject { -}; - -dclass DistributedFactory: DistributedLevel { - setFactoryId(uint16 id) required broadcast ram; - setSuits(uint32array suitIds, uint32array reserveSuitIds) broadcast ram; - - setForemanConfronted(uint32 avId) broadcast ram; - setDefeated() broadcast ram; -}; - -dclass DistributedLawOffice: DistributedObject { - setLawOfficeId(uint16 id) required broadcast ram; - startSignal() broadcast ram; - readyForNextFloor() airecv clsend; -}; - -dclass DistributedLawOfficeFloor: DistributedLevel { - setLawOfficeId(uint16 id) required broadcast ram; - setSuits(uint32array suitIds, uint32array reserveSuitIds) broadcast ram; - readyForNextFloor() airecv clsend; - setForemanConfronted(uint32 avId) broadcast ram; - setDefeated() broadcast ram; -}; - - -dclass DistributedMint: DistributedObject { - setZoneId(uint32 zoneId) required broadcast ram; - setMintId(uint16 mintId) required broadcast ram; - setFloorNum(uint8 floorNum) required broadcast ram; - setRoomDoIds(uint32array doIds) broadcast ram; -}; - -dclass DistributedMintRoom: DistributedLevel { - setMintId(uint16 mintId) required broadcast ram; - setRoomId(uint16 roomId) required broadcast ram; - setRoomNum(uint8 roomNum) required broadcast ram; - setSuits(uint32array suitIds, uint32array reserveSuitIds) broadcast ram; - setBossConfronted(uint32 avId) broadcast ram; - setDefeated() broadcast ram; -}; - -dclass DistributedStage: DistributedObject { - setZoneId(uint32 zoneId) required broadcast ram; - setStageId(uint16 mintId) required broadcast ram; - setLayoutIndex(uint16 layout) required broadcast ram; - setFloorNum(uint8 floorNum) required broadcast ram; - setRoomDoIds(uint32array doIds) broadcast ram; - setStageZone(uint32 zoneId) broadcast ram; - elevatorAlert(uint32 avId) broadcast ram; - -}; - -dclass DistributedStageRoom: DistributedLevel { - setStageId(uint16 stageId) required broadcast ram; - setRoomId(uint16 roomId) required broadcast ram; - setRoomNum(uint8 roomNum) required broadcast ram; - setSuits(uint32array suitIds, uint32array reserveSuitIds) broadcast ram; - setBossConfronted(uint32 avId) broadcast ram; - setDefeated() broadcast ram; -}; - -dclass DistributedInGameEditor: DistributedObject { - setEditorAvId(uint32 avId) required broadcast ram; - setEditUsername(blob username) required broadcast ram; - setLevelDoId(uint32 doId) required broadcast ram; - - requestCurrentLevelSpec() airecv clsend; //appears safe, definitely, timing could be an issue though...owner, please check - setSpecSenderDoId(uint32 doId); - - // this proposes a change from the client - setEdit(uint32 entId, blob attribName, blob value, blob username) airecv clsend; //security breach:entId, username etc. need validation...need help = DARREN - // this informs the client-side editor of actual changes that have - // been made. - setAttribChange(uint32 entId, blob attribName, blob value, blob username); - - setFinished() airecv clsend; //security breach: no check against client validity -}; - -dclass DistributedLift: DistributedEntity { - setStateTransition(uint8 toState, uint8 fromState, - uint32 arrivalTimestamp) required broadcast ram; - setAvatarEnter() airecv clsend; //security breach: avId need validation - setAvatarLeave() airecv clsend; //security breach: avId need validation -}; - -dclass DistributedDoorEntity: DistributedEntity { - // Set the state for all four locks: - // stateBits: - // 15 through 12: lock 3 state - // 11 through 8: lock 2 state - // 7 through 4: lock 1 state - // 3 through 0: lock 0 state - setLocksState(uint16 stateBits) required broadcast ram; - - // How the server tells the client what state to enter into: - setDoorState(uint8 stateIndex, int32 timestamp) required broadcast ram; - - // This client wants to open the door: - requestOpen() airecv clsend; -}; - -dclass DistributedSwitch: DistributedInteractiveEntity { -}; - -dclass DistributedButton: DistributedSwitch { -}; - -dclass DistributedTrigger: DistributedSwitch { -}; - -dclass DistributedCrushableEntity: DistributedEntity { - // Instantiate the crate on the client - setPosition(int16 x / 10, int16 y / 10, int16 z / 10) broadcast ram; - - setCrushed(uint32 crusherId, uint8 axis) broadcast ram; -}; - -dclass DistributedCrusherEntity: DistributedEntity { -}; - - - -dclass DistributedElevatorMarker: DistributedEntity { -}; - - - -dclass DistributedStomper: DistributedCrusherEntity { - setMovie(uint8 mode, int16 timestamp, uint32array crushedIds) broadcast ram; +dclass DistributedStomper : DistributedCrusherEntity { + setMovie(uint8, int16, uint32array) broadcast ram; }; -dclass DistributedStomperPair: DistributedEntity { - setChildren(uint32array doids) broadcast ram; - setSquash() airecv clsend; //appears safe, no suspicious note though +dclass DistributedStomperPair : DistributedEntity { + setChildren(uint32array) broadcast ram; + setSquash() airecv clsend; }; -dclass DistributedBarrelBase: DistributedEntity { - // Client to AI request for grabbing - requestGrab() airecv clsend; //appears safe, timing could be an issue...owner, please check - - // AI tells everyone that a treasure has been grabbed - setGrab(uint32 avId) broadcast ram; - - // AI tells everyone that someone attempted to grab a treasure but - // was rejected. +dclass DistributedBarrelBase : DistributedEntity { + requestGrab() airecv clsend; + setGrab(uint32) broadcast ram; setReject() broadcast; }; -// gag barrel treasure -dclass DistributedGagBarrel: DistributedBarrelBase { -}; - -// gag barrel treasure -dclass DistributedBeanBarrel: DistributedBarrelBase {}; - -// heal barrel treasure -dclass DistributedHealBarrel: DistributedBarrelBase {}; - -// grid for crates/goons -dclass DistributedGrid: DistributedEntity {}; - -// active cells -dclass ActiveCell: DistributedEntity { - setState(uint8 state, uint32 objId) broadcast ram; +dclass DistributedGagBarrel : DistributedBarrelBase { }; -dclass DirectionalCell: ActiveCell {}; -dclass CrusherCell: ActiveCell {}; - -// CogHQ crate -dclass DistributedCrate: DistributedCrushableEntity { - // Client requests a spot on the crate - requestPush(uint8 side) airecv clsend; //security breach:unhandled behavior, if side is invalid. need validation - - // AI accepts/rejects the clients request - setReject(); - setAccept() broadcast; - - // AI tells client to push the crate - setMoveTo(uint32 avId, - int16 x / 10, int16 y / 10, int16 z / 10, - int16 x / 10, int16 y / 10, int16 z / 10) broadcast ram; - - // Client tells the AI it is done moving - setDone() airecv clsend; //appears safe, timing could be an issue...owner, please check +dclass DistributedBeanBarrel : DistributedBarrelBase { }; -// CogHQ sinking platform -dclass DistributedSinkingPlatform: DistributedEntity { - // Client tells AI that it is on/off platform - setOnOff(uint8 on, uint32 ts) airecv clsend; //possible security breach: at least some range check and suspicious note is necessary. timing could be an issue...need help = DARREN - - // AI tells clients if it is sinking or rising - setSinkMode(uint32 avId, uint8 mode, uint32 timestamp) broadcast ram; +dclass DistributedHealBarrel : DistributedBarrelBase { }; -dclass DistributedGoon: DistributedCrushableEntity { - requestBattle(int16 tPause / 10) airecv clsend; //appears safe: suspicious note would be nice - requestStunned(int16 tPause / 10) airecv clsend; //appears safe: suspicious note would be nice - requestResync() airecv clsend; // for dev testing - setParameterize(int16 x / 10, int16 y / 10, int16 z / 10, uint32 pathIndex) airecv clsend; // Client tells ai it's path index - setMovie(uint8 mode, uint32 avId, int32 tPause / 10, int16 timestamp) broadcast ram; +dclass DistributedGrid : DistributedEntity { }; -dclass DistributedGridGoon: DistributedGoon { - setPathPts(int16 x / 10, int16 y / 10, int16 z / 10, - int16 x2 / 10, int16 y2 / 10, int16 z2 / 10) broadcast ram; +dclass ActiveCell : DistributedEntity { + setState(uint8, uint32) broadcast ram; }; -dclass BattleBlocker: DistributedEntity { - setActive(uint8 active) required broadcast ram; - setSuits(uint32array suitIds) broadcast ram; - setBattle(uint32 battleId) broadcast ram; - setBattleFinished() broadcast ram; +dclass DirectionalCell : ActiveCell { }; -dclass DistributedLaserField: BattleBlocker { - setGrid(uint8 gridNumX, uint8 gridNumY) required broadcast ram; - //setSeed(uint32 seed) broadcast ram; - //setMode(uint8 mode) broadcast ram; - setField(uint8 [] gridData) required broadcast ram; - setSuccess(uint8 success) broadcast ram; - hit(int8 X, int8 Y, int8 Xold, int8 Yold) airecv clsend; - trapFire() airecv clsend; - setActiveLF(uint8 active) broadcast ram; - hideSuit(uint32array suitId) broadcast ram; - showSuit(uint32array suitId) broadcast ram; - setGridGame(string gameName='some game') broadcast ram; - +dclass CrusherCell : ActiveCell { }; -struct golfGreenGameBoardData { -uint8 posX; -uint8 posZ; -uint8 typeIndex; +dclass DistributedCrate : DistributedCrushableEntity { + requestPush(uint8) airecv clsend; + setReject(); + setAccept() broadcast; + setMoveTo(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) broadcast ram; + setDone() airecv clsend; }; -struct golfGreenGameScoreData{ -uint32 avId; -uint8 score; +dclass DistributedSinkingPlatform : DistributedEntity { + setOnOff(uint8, uint32) airecv clsend; + setSinkMode(uint32, uint8, uint32) broadcast ram; }; -dclass DistributedGolfGreenGame: BattleBlocker { - requestJoin() airecv clsend; - leaveGame() airecv clsend; - acceptJoin(uint16 time, int32 timestamp, uint32 [] avIds) broadcast ram; - requestBoard(uint8 boardVerify) airecv clsend; - startBoard(golfGreenGameBoardData [] boardData, uint8 [] attackPattern); - signalDone(uint8 success) broadcast ram; - boardCleared(uint32 avId); - scoreData(uint8 total, uint8 closed, golfGreenGameScoreData [] scoreList) broadcast ram; - //scoreData() broadcast ram; - informGag(uint8 track, uint8 level); - helpOthers(uint32 avId)broadcast; - setTimerStart(uint16 time, int32 timestamp) broadcast ram; +dclass DistributedGoon : DistributedCrushableEntity { + requestBattle(int16/10) airecv clsend; + requestStunned(int16/10) airecv clsend; + requestResync() airecv clsend; + setParameterize(int16/10, int16/10, int16/10, uint32) airecv clsend; + setMovie(uint8, uint32, int32/10, int16) broadcast ram; }; -dclass DistributedSecurityCamera: DistributedEntity { - trapFire() airecv clsend; - setTarget(uint8 targetHash) broadcast ram; +dclass DistributedGridGoon : DistributedGoon { + setPathPts(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) broadcast ram; }; -dclass DistributedMover: DistributedEntity { - startMove(int16 timestamp) broadcast ram; +dclass BattleBlocker : DistributedEntity { + setActive(uint8) required broadcast ram; + setSuits(uint32array) broadcast ram; + setBattle(uint32) broadcast ram; + setBattleFinished() broadcast ram; }; -typedef uint16 / 10000 PetTrait; +typedef uint16/10000 PetTrait; -dclass DistributedPet: DistributedSmoothNode { - string DcObjectType db; +dclass DistributedPet : DistributedSmoothNode { setOwnerId(uint32 ownerId = 0) required broadcast db; setPetName(string petName='unnamed') required broadcast db; setTraitSeed(uint32 traitSeed=0) required broadcast db; setSafeZone(uint32 safezone=2000) required broadcast db; - - // traits - // It's important that the default value for traits be zero; when we add - // new traits, the zero value indicates that a trait value must be generated. setForgetfulness(PetTrait forgetfulness=0) required broadcast db; setBoredomThreshold(PetTrait boredomThreshold=0) required broadcast db; setRestlessnessThreshold(PetTrait restlessnessThreshold=0) required broadcast db; @@ -3266,8 +1251,6 @@ dclass DistributedPet: DistributedSmoothNode { setAngerThreshold(PetTrait angerThreshold=0) required broadcast db; setSurpriseThreshold(PetTrait surpriseThreshold=0) required broadcast db; setAffectionThreshold(PetTrait affectionThreshold=0) required broadcast db; - - // DNA setHead(int8(-1,0) head = -1) required broadcast db; setEars(int8(-1-4) ears = -1) required broadcast db; setNose(int8(-1-3) nose = -1) required broadcast db; @@ -3276,14 +1259,11 @@ dclass DistributedPet: DistributedSmoothNode { setColor(int8(0-25) color = 0) required broadcast db; setColorScale(int8(0-8) color = 0) required broadcast db; setEyeColor(int8(0-5) eyeColor = 0) required broadcast db; - setGender (int8(0-1) gender = 0) required broadcast db; - //setStyle: setHead, setEars, setNose, setTail, setBodyTexture, setColor, setColorScale, setEyeColor, setGender; - - // mood + setGender(int8(0-1) gender = 0) required broadcast db; setLastSeenTimestamp(uint32 timestamp = 0) required broadcast db; setBoredom(uint16(0-1) boredom / 1000 = 0) required broadcast db; setRestlessness(uint16(0-1) restlessness / 1000 = 0) required broadcast db; - setPlayfulness(uint16(0-1) playfulness / 1000 = 0) required broadcast db; + setPlayfulness(uint16 playfulness / 1000 = 0) required broadcast db; setLoneliness(uint16(0-1) loneliness / 1000 = 0) required broadcast db; setSadness(uint16(0-1) sadness / 1000 = 0) required broadcast db; setAffection(uint16(0-1) affection / 1000 = 0) required broadcast db; @@ -3293,1086 +1273,21 @@ dclass DistributedPet: DistributedSmoothNode { setFatigue(uint16(0-1) fatigue / 1000 = 0) required broadcast db; setAnger(uint16(0-1) anger / 1000 = 0) required broadcast db; setSurprise(uint16(0-1) surprise / 1000 = 0) required broadcast db; - - // order of these fields MUST match order of PetMood.Components - setMood: setBoredom, setRestlessness, setPlayfulness, setLoneliness, - setSadness, setAffection, setHunger, setConfusion, - setExcitement, setFatigue, setAnger, setSurprise; - - // set anim on client from AI - teleportIn(int16 timestamp) broadcast ownsend; - teleportOut(int16 timestamp) broadcast ownsend; - - // tricks - //setTrickAptitudes(uint16 / 10000 aptitudes[] = {}) required ownrecv db; - setTrickAptitudes(uint16(0-1) / 10000 aptitudes[] = {}) required broadcast db; - doTrick(uint8 trickId, int16 timestamp) broadcast ram; - - avatarInteract(uint32 avId); - setMovie(uint8 mode, uint32 avId, int16 timestamp) broadcast ram; - // Free an avatar that is requesting interaction, but needs to be denied + setMood : setBoredom, setRestlessness, setPlayfulness, setLoneliness, setSadness, setAffection, setHunger, setConfusion, setExcitement, setFatigue, setAnger, setSurprise; + teleportIn(int16) broadcast ownsend; + teleportOut(int16) broadcast ownsend; + setTrickAptitudes(uint16 / 10000 aptitudes[] = {}) required broadcast db; + doTrick(uint8, int16) broadcast ram; + avatarInteract(uint32); + setMovie(uint8, uint32, int16) broadcast ram; freeAvatar(); }; -dclass DistributedPetProxy: DistributedPet { - setDominantMood(string dominantMood='neutral') broadcast ram; -}; - -dclass DistributedBlackCatMgr: DistributedObject { - setAvId(uint32 avId) required broadcast ram; +dclass DistributedBlackCatMgr : DistributedObject { + setAvId(uint32) required broadcast ram; doBlackCatTransformation() airecv clsend; }; -dclass DistributedPolarPlaceEffectMgr: DistributedObject { - addPolarPlaceEffect() airecv clsend; -}; - -dclass DistributedResistanceEmoteMgr: DistributedObject { +dclass DistributedResistanceEmoteMgr : DistributedObject { addResistanceEmote() airecv clsend; }; - -dclass DistributedScavengerHuntTarget : DistributedObject { - attemptScavengerHunt() airecv clsend; -}; - -dclass DistributedTrickOrTreatTarget : DistributedScavengerHuntTarget { -}; - -dclass DistributedWinterCarolingTarget : DistributedScavengerHuntTarget { -}; - -dclass DistributedDataStoreManager: DistributedObject { - startStore(uint8 storeId); - stopStore(uint8 storeId); - - queryStore(uint8 storeId, string query); - receiveResults(uint8 storeId, string data); - - deleteBackupStores(); -} - - -dclass DistributedVehicle: DistributedSmoothNode { - //setBossCogId(uint32 bossCogId) required broadcast ram; - //setIndex(uint8 index) required broadcast ram; - setOwner(uint32 avId) required broadcast ram; - - setState(char state, uint32 avId) broadcast ram; - - // Kart DNA Set Routines - setBodyType( int8 bodyType ) required broadcast ram; - setBodyColor( int8 bodyColor ) required broadcast ram; - setAccessoryColor( int8 accColor ) required broadcast ram; - setEngineBlockType( int8 ebType ) required broadcast ram; - setSpoilerType( int8 spType ) required broadcast ram; - setFrontWheelWellType( int8 fwwType ) required broadcast ram; - setBackWheelWellType( int8 bwwType ) required broadcast ram; - setRimType( int8 rimsType ) required broadcast ram; - setDecalType( int8 decalType ) required broadcast ram; - - requestControl() airecv clsend; - requestParked() airecv clsend; - setInput( int8 on ) broadcast ram; -}; - -struct avatarAndKart { -uint32 avId; -uint32 kartId; -}; - -dclass DistributedRace : DistributedObject { - //init fields - setZoneId(uint32 zoneId) required broadcast ram; - setTrackId(uint16 trackId) required broadcast ram; - setRaceType(uint16 raceType) required broadcast ram; - setCircuitLoop(uint16array circuitLoop) required broadcast ram; - setAvatars(uint32array avIds) required broadcast ram; - setStartingPlaces(uint8array places) required broadcast ram; - setLapCount(uint8 lapCount) broadcast required ram; - - //fsm state change functions - waitingForJoin() broadcast ram; - setEnteredRacers(avatarAndKart[]) broadcast ram; - prepForRace() broadcast ram; - startTutorial() broadcast ram; - startRace(int16 time) broadcast ram; - goToSpeedway(uint32array avId, uint8 reason) broadcast ram; - - //racing messages to client - genGag(uint8 slot, uint16 number, uint8 type) broadcast ram; - dropAnvilOn(uint32 droppedBy, uint32 avId, int16 timestamp) broadcast ram; - shootPiejectile(uint32 sourceId, uint32 targetId, uint8 type) broadcast ram; - racerDisconnected(uint32 avId) broadcast ram; - setPlace(uint32 avId, uint32/1000 totalTime, uint8 place, uint32 entryFee, uint8 qualify, uint32 winnings, uint32 bonus, uint32array trophies, uint16array circuitPoints, uint32/1000 circuitTime) broadcast ram; - setCircuitPlace(uint32 avId, uint8 place, uint32 entryFee, uint32 winnings, uint32 bonus ,uint32array trophies) broadcast ram; - endCircuitRace() broadcast ram; - setRaceZone( uint32 zoneId, uint32 trackId ); - - //racing messages from clients - hasGag(uint8 slot, uint8 type, uint8 index) broadcast airecv clsend; - racerLeft(uint32 avId) clsend airecv broadcast ram; - heresMyT(uint32 avId, int8 numLaps, uint16/65535 lapT, int16 timestamp) clsend airecv broadcast; - requestThrow(int32/1000 x=0, int32/1000=0, int32/1000 z=0) clsend airecv; - requestKart() clsend airecv; -}; - -dclass DistributedGag: DistributedObject { - //init fields - setInitTime(int16 timestamp) required broadcast ram; - setActivateTime(uint16 actTime) required broadcast ram; - setPos(int32/1000 x, int32/1000 y, int32/1000 z) required broadcast ram; - setRace(uint32 raceId) required broadcast ram; - setOwnerId(uint32 ownerId) required broadcast ram; - setType(uint8 type) required broadcast ram; - - //messages from clients - hitSomebody(uint32 avId, int16 timestamp) broadcast clsend airecv; -}; - -dclass DistributedProjectile: DistributedObject { - //init fields - setInitTime(int16 timestamp) required broadcast ram; - setPos(int32/1000 x, int32/1000 y, int32/1000 z) required broadcast ram; - setRace(uint32 raceId) required broadcast ram; - setOwnerId(uint32 ownerId) required broadcast ram; - setType(uint8 type) required broadcast ram; - - //messages from clients - hitSomebody(uint32 avId, int16 timestamp) broadcast clsend airecv; -}; - -dclass DistributedKartPad: DistributedObject { - // Area (like zoneId) - setArea(uint32 area) required broadcast ram; -}; - -dclass DistributedRacePad: DistributedKartPad { - setState( string state, int16 timestamp ) required broadcast ram; - setRaceZone( uint32 zoneId ); - setTrackInfo( uint16array trackInfo ) required broadcast ram; -}; - -dclass DistributedViewPad: DistributedKartPad { - setLastEntered( int16 timestamp ) required broadcast ram; - //setAvEnterPad( uint32 avId, int16 timestamp ) broadcast ram; - //setAvExitPad( uint32 avId ) broadcast ram; -}; - -dclass DistributedStartingBlock: DistributedObject { - // Required Methods - setPadDoId( uint32 id ) required broadcast ram; - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - setPadLocationId( uint8 id ) required broadcast ram; - - // Non-required Methods - requestEnter(uint8 paid) airecv clsend; - rejectEnter( uint8 code ); - requestExit() airecv clsend; - setOccupied( uint32 avId ) broadcast ram; - setMovie( uint8 mode ) broadcast ram; - movieFinished() airecv clsend; -}; - -dclass DistributedViewingBlock: DistributedStartingBlock { -}; - -dclass DistributedLeaderBoard: DistributedObject { - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - setDisplay( blob ) broadcast ram; -}; - - -dclass DistributedDeliveryManager: DistributedObject { - hello(string message)clsend; - rejectHello(string message); - helloResponse(string message); - getName(uint32 nameDoId); - receiveRejectGetName(string message); - receiveAcceptGetName(string message); - addName(uint32 nameDoId, string newName); - receiveRejectAddName(uint32 nameDoId); - receiveAcceptAddName(uint32 nameDoId); - addGift(uint32 receiverDoId, blob gift, uint32 senderId, uint32 context, uint32 retcode); - receiveRejectAddGift(uint32 receiverDoId); - receiveAcceptAddGift(uint32 receiverDoId, uint32 senderId, uint32 context, uint32 retcode); - deliverGifts(uint32 avatarId, uint32 time); - receiveAcceptDeliverGifts(uint32 avatarId, string message); - receiveRejectDeliverGifts(uint32 avatarId, string message); - receiveRequestPayForGift(blob giftBlob, uint32 receiverDoId, uint32 context) airecv clsend; - receiveRequestPurchaseGift(blob giftBlob, uint32 receiverDoId, uint32 senderDoId, uint32 context) airecv; - receiveAcceptPurchaseGift(uint32 senderDoId, uint32 context, int16 retcode); - receiveRejectPurchaseGift( uint32 senderDoId, uint32 context, int16 retcode, uint16 cost); - heartbeat() airecv; - giveBeanBonus(uint32 receiverDoId, uint16 amount); - requestAck()clsend; - returnAck(); -}; - - - -dclass DistributedLawbotBoss: DistributedBossCog { - - // This field appears following the above fields, because we don't - // want to set the state until the above have been filled in. - setState(string state) broadcast ram; - - setBossDamage(uint16 damage, uint8 recoverRate, - int16 timestamp) broadcast ram; - - // The toon reports he has touched the witness stand. - touchWitnessStand() airecv clsend; - - - // This is how the client indicates he has hit the boss (or another - // toon) with a pie. We have to take his word for it. - hitBoss(uint8 bossDamage) airecv clsend; - healBoss(uint8 bossHeal) airecv clsend; - //hitBossInsides() airecv clsend; - hitToon(uint32 toonId) airecv clsend; - hitDefensePan() airecv clsend; - hitProsecutionPan() airecv clsend; - - hitChair(uint8 chairIndex, uint8 npcToonIndex) airecv clsend; - - //finalPieSplat() airecv clsend; - - - setLawyerIds(uint32array dooberIds) broadcast ram; - - setTaunt( int8 tauntIndex, int8 extraInfo) broadcast; - - toonGotHealed(uint32 toonId) broadcast; - - enteredBonusState() broadcast; - - setBattleDifficulty(uint8 battleDifficulty) broadcast ram; - -} - -dclass DistributedLawbotBossSuit: DistributedSuitBase { - //requestBattle(int16 x / 10, int16 y / 10, int16 z / 10, - // int16 h / 10, int16 p / 10, int16 r / 10) airecv clsend; // appears harmless. safe - - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - - //TODO should this be ram or not? - doAttack (int16 x1 / 10, int16 y1 / 10, int16 z1 / 10, - int16 x2 / 10, int16 y2 / 10, int16 z2 / 10 ) broadcast; - - doProsecute() broadcast; - - hitByToon() airecv clsend; - - doStun() broadcast; - -}; - - -dclass DistributedLawbotBossGavel: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - setIndex(uint8 index) required broadcast ram; - - setState(char state) broadcast ram; -}; - - -dclass DistributedLawbotCannon: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - - setIndex(uint8 index) required broadcast ram; - - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - - requestEnter () airecv clsend; - setMovie ( int8 mode, uint32 avId, uint8 extraInfo) broadcast; - setCannonPosition( int16 zRot/10, int16 angle/10) airecv clsend; - updateCannonPosition( uint32 avId, int16 zRot/10, int16 angle/10) broadcast; - - setCannonLit( int16 zRot/10, int16 angle/10) airecv clsend; - setCannonWillFire( uint32 avId, int16/10 fuseTime, int16 zRot/10, int16 angle/10, int16 time) broadcast; - - setLanded() airecv clsend; - - requestLeave() airecv clsend; -}; - -dclass DistributedLawbotChair: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - setIndex(uint8 index) required broadcast ram; - - setState(char state) broadcast ram; - - showCogJurorFlying() broadcast; - - setToonJurorIndex(int8 index) broadcast ram; -}; - -dclass DistributedLawnDecor: DistributedNode { - setPlot(int8 typeIndex)required broadcast ram; - setHeading(int16 / 10 heading)required broadcast ram; - setPosition(int16 x / 10, int16 y / 10, int16 z / 10)required broadcast ram; - setOwnerIndex(int8 waterLevel)required broadcast ram; - plotEntered() airecv clsend; - removeItem() airecv clsend; - setMovie(uint8 mode, uint32 avId) broadcast ram; - movieDone() airecv clsend; - interactionDenied(uint32 avId) broadcast ram; -}; - -dclass DistributedGardenPlot: DistributedLawnDecor { - //setPos(int16 x / 10, int16 y / 10, int16 z / 10) broadcast ram; - plantFlower( uint8 species, uint8 variety) airecv clsend; - plantGagTree( uint8 gagTrack, uint8 gagLevel) airecv clsend; - plantStatuary( uint8 whichStatue) airecv clsend; - plantToonStatuary( uint8 whichStatue, uint16 statueDescription ) airecv clsend; - plantNothing( uint8 burntBeans) airecv clsend; - -}; - -dclass DistributedGardenBox: DistributedLawnDecor { - //setPos(int16 x / 10, int16 y / 10, int16 z / 10) broadcast ram; - setTypeIndex(uint8 typeIndex)required broadcast ram; -}; - -dclass DistributedStatuary: DistributedLawnDecor { - //setPos(int16 x / 10, int16 y / 10, int16 z / 10) broadcast ram; - setTypeIndex(uint8 typeIndex)required broadcast ram; - setWaterLevel(int8 waterLevel)required broadcast ram; - setGrowthLevel(int8 growthLevel)required broadcast ram; -}; - -dclass DistributedToonStatuary: DistributedStatuary { - setOptional(uint16 optional)required broadcast ram; -}; - -dclass DistributedChangingStatuary: DistributedStatuary { - setGrowthLevel(int8 growthLevel)required broadcast ram; -}; - -dclass DistributedPlantBase: DistributedLawnDecor { - setTypeIndex(uint8 typeIndex)required broadcast ram; - setWaterLevel(int8 waterLevel)required broadcast ram; - setGrowthLevel(int8 growthLevel)required broadcast ram; - - waterPlant() airecv clsend; - waterPlantDone() airecv clsend; -}; - -dclass DistributedFlower: DistributedPlantBase { - setTypeIndex(uint8 typeIndex)required broadcast ram; - setVariety(uint8 variety)required broadcast ram; -}; - -dclass DistributedGagTree: DistributedPlantBase { - setWilted(int8 wilted)required broadcast ram; - requestHarvest() airecv clsend; -}; - -dclass DistributedTravelGame: DistributedMinigame { - setTimerStartTime(int16 timestamp) broadcast; - setAvatarChoice(uint16 votes, uint8 direction) airecv clsend; - setAvatarChose(uint32 avId) broadcast; - setServerChoices(int16array votes, uint8array directions, uint8 directionToGo, uint8 directionReason) broadcast; - setMinigames(uint8array switches, uint8array minigames) broadcast; - setBonuses(uint8array switches, uint8array beans) broadcast; - setBoardIndex(uint8 whichBoard) required broadcast ram; -}; - -dclass DistributedPairingGame: DistributedMinigame { - setDeckSeed(uint32 deckSeed) required broadcast ram; - setMaxOpenCards(uint8 maxOpen) broadcast ram; //per toon, who many can we have face up - openCardRequest(int16 deckOrderIndex, int16 bonusGlowCard) airecv clsend; - // which card to open, who opened it, the matchingCard if any, and cur points - openCardResult(int16 cardToTurnUp, uint32 avId, int16 matchingCard, int8 curPoints, int16array cardsToFaceDown) broadcast; - reportDone() airecv clsend; - setEveryoneDone() broadcast; - setSignaling(uint32 avId) clsend broadcast; -}; - -//dclass DistributedGolfEntrance: DistributedObject { -// sendToGolfCourse(uint32 avatarId, uint32 golfZoneId) broadcast; -//}; - -struct golfData { -int16 frame; -int32 x / 100000; -int32 y / 100000; -int32 z / 100000; -}; - -struct Coord3 { -int32 x / 100000; -int32 y / 100000; -int32 z / 100000; -}; - -struct CommonObjectData { -uint8 id; -uint8 type; -int32 x / 100000; -int32 y / 100000; -int32 z / 100000; - -int32 q1 / 100000; -int32 q2 / 100000; -int32 q3 / 100000; -int32 q4 / 100000; - -int32 aVX / 100000; -int32 aVY / 100000; -int32 aVZ / 100000; - -int32 lVX / 100000; -int32 lVY / 100000; -int32 lVZ / 100000; - -}; - -dclass DistributedPhysicsWorld: DistributedObject { - clientCommonObject(uint8 type, uint8 commonId, Coord3 position, Coord3 orientation, int32 sizeX /100, int32 sizeY /100, int32 distance / 1000) broadcast ram; - setCommonObjects(CommonObjectData someData[])broadcast; - upSetCommonObjects(CommonObjectData someData[])airecv clsend; -}; - -dclass DistributedGolfHole: DistributedPhysicsWorld { - setHoleId(int8 holeId) broadcast ram required; - setTimingCycleLength(uint32 cycleTime / 1000) broadcast ram required; - setAvatarReadyHole() airecv clsend; - setGolfCourseDoId(uint32 golfCourseDoId) broadcast ram required; - turnDone() airecv clsend; - ballInHole() airecv clsend; - setAvatarTempTee(uint32 avId, uint8 teeTemp) clsend broadcast; //temporary tee sent by client - setTempAimHeading(uint32 avId, int32 heading / 1000) clsend broadcast; - setAvatarFinalTee(uint32 avId, uint8 finalTee) broadcast; - - setGolferIds(uint32array avIds) broadcast ram required; - golfersTurn(uint32 avId) broadcast; - - golferChooseTee(uint32 avId) broadcast; //this golfer first needs to choose a tee spot - setAvatarTee(uint8 teeChosen) airecv clsend; //golfer sending ai his chosen tee spot - - postSwing(uint32 timeStamp/1000, int32 power, int32 x / 1000, int32 y / 1000, int32 z / 1000, int32 dirX / 1000, int32 dirY / 1000) airecv clsend; - postSwingState(uint32 timeStamp/1000, int32 power, int32 x / 1000, int32 y / 1000, int32 z / 1000, int32 dirX / 1000, int32 dirY / 1000, uint16 curAimTime / 100,CommonObjectData someData[]) airecv clsend; - - swing(uint32 ballId, int32 power, int32 x / 1000, int32 y / 1000, int32 z / 1000, int32 dirX / 1000, int32 dirY / 1000) broadcast; - ballMovie2AI(uint32 timeStamp/1000, uint32 id, golfData movie[], golfData spinMovie[], uint16 ballInFrame, uint16 ballTouchedHoleFrame, uint16 ballFirstTouchedHoleFrame, CommonObjectData someData[]) airecv clsend; - ballMovie2Client(uint32 timeStamp/1000, uint32 id, golfData movie[], golfData spinMovie[], uint16 ballInFrame, uint16 ballTouchedHoleFrame, uint16 ballFirstTouchedHoleFrame, CommonObjectData someData[]) broadcast; - - assignRecordSwing(uint32 avId, uint32 timeStamp/1000, int32 power, int32 x / 1000, int32 y / 1000, int32 z / 1000, int32 dirX / 1000, int32 dirY / 1000, CommonObjectData someData[]); - - setBox( int32 pos0 / 1000, int32 pos1 / 1000, int32 pos2 / 1000, - int32 quat0 / 1000, int32 quat1 / 1000, int32 quat2 / 1000, int32 quat3 / 1000, - int32 anV0 / 1000, int32 anV1 / 1000, int32 anV2 / 1000, - int32 lnV0 / 1000, int32 lnV1 / 1000, int32 lnV2 / 1000) airecv clsend; - - sendBox( int32 pos0 / 1000, int32 pos1 / 1000, int32 pos2 / 1000, - int32 quat0 / 1000, int32 quat1 / 1000, int32 quat2 / 1000, int32 quat3 / 1000, - int32 anV0 / 1000, int32 anV1 / 1000, int32 anV2 / 1000, - int32 lnV0 / 1000, int32 lnV1 / 1000, int32 lnV2 / 1000) broadcast; - -}; - -dclass DistributedGolfCourse: DistributedObject { - setGolferIds(uint32array avIds) broadcast ram required; - setCourseId(int8 courseId) broadcast ram required; - setAvatarJoined() airecv clsend; - setAvatarReadyCourse() airecv clsend; - setAvatarReadyHole() airecv clsend; - setAvatarExited() airecv clsend; - setCurHoleIndex(int8 curHoleIndex = 0) broadcast ram required; - setCurHoleDoId(uint32 curHoleDoId) broadcast ram required; - setDoneReward() airecv clsend; - - setReward(uint8array[4] trophiesList, int8array rankingsList, uint8array[4] holeBest, uint8array[4] courseBest, uint8array[4] cupList, uint32 tieBreakWinner, uint32 aim0 /100, uint32 aim1 / 100, uint32 aim2/100, uint32 aim3 / 100) broadcast; - setCourseReady(int8 numHoles, int16array holeIds, int8 coursePar) broadcast; - setHoleStart(int16 timestamp) broadcast; - setCourseExit() broadcast; - setCourseAbort(uint32 avId) broadcast; - setPlayHole() broadcast; - avExited(uint32 avId) broadcast; - setScores(int16 score[]) broadcast; - changeDrivePermission(uint32 avid, int8 canDrive) broadcast; - - }; - -dclass DistributedVineGame: DistributedMinigame { - reachedEndVine( int8 vineIndex) clsend airecv; - setNewVine( uint32 avId, int8 vineIndex, uint32 vineT / 10000, int8 facingRight) airecv clsend broadcast; - setNewVineT( uint32 avId, uint32 vineT / 10000, int8 climbDirection) clsend broadcast; - setJumpingFromVine( uint32 avId, int8 vineIndex, int8 facingRight, int32 posX / 100, int16 posZ / 100, int16 velX / 100, int16 velZ ) clsend broadcast; - setFallingPos( uint32 avId, int16 posX / 100, int16 posZ / 100) clsend broadcast; - claimTreasure(uint32 treasureNum) airecv clsend; //security breach: treasureNum need validation...need help = DARREN - setTreasureGrabbed(uint32 avId, uint32 treasureNum) broadcast; - setScore(uint32 avId, uint32 score) broadcast; - allAtEndVine() broadcast; - setFallingFromVine( uint32 avId, int8 vineIndex, int8 facingRight, int32 posX / 100, int16 posZ / 100, int16 velX / 100, int16 velZ, int8 fallingInfo ) clsend broadcast; - setFallingFromMidair( uint32 avId, int8 facingRight, int32 posX / 100, int16 posZ / 100, int16 velX / 100, int16 velZ, int8 fallingInfo ) clsend broadcast; - setVineSections(uint8array sections) required broadcast ram; -}; - -dclass TTAvatarFriendsManager: AvatarFriendsManager {}; - -dclass TTPlayerFriendsManager: PlayerFriendsManager {}; - -dclass TTSpeedchatRelay: SpeedchatRelay {}; - -dclass DistributedGolfKart: DistributedObject { - // How the server tells the client what state to enter into - setState(string, int16 timestamp) broadcast ram; - // How the server tells the client to fill the slots - fillSlot0(uint32 avId) broadcast ram; // time of boarding - fillSlot1(uint32 avId) broadcast ram; // time of boarding - fillSlot2(uint32 avId) broadcast ram; // time of boarding - fillSlot3(uint32 avId) broadcast ram; // time of boarding - - // How the server tells the client to empty the slots - emptySlot0(uint32 avId, int16 timestamp) broadcast ram; - emptySlot1(uint32 avId, int16 timestamp) broadcast ram; - emptySlot2(uint32 avId, int16 timestamp) broadcast ram; - emptySlot3(uint32 avId, int16 timestamp) broadcast ram; - - // **** - // How the client requests permission to board - requestBoard() airecv clsend; // seems harmless, if given wrong x,y,z,h,p,r, it will appear wrong. server won't crash. safe - - // How the server rejects permission to board - rejectBoard(uint32 avId); - - // **** - // How the client requests permission to exit - requestExit() airecv clsend; // appears safe. - - // How the server puts the clients into a minigame - setMinigameZone(uint32 zoneId, uint16 minigameId); - - // How the server puts the clients into a minigame - setGolfZone(uint32 zoneId, uint16 minigameId); - - // Which course does this golf kart lead to - setGolfCourse(int8 golfCourseId) required broadcast ram; - - // Position and orientation of the golf kart - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - - // Color of the golf kart - setColor( int16 r, int16 g, int16 b) required broadcast ram; -}; - -dclass DistributedTimer: DistributedObject { - setStartTime(int32 startTime) broadcast ram required; -}; - -dclass DistributedPicnicBasket: DistributedObject { - // How the server tells the client what state to enter into - setState(string, uint16 seed, int16 timestamp) broadcast ram; - // How the server tells the client to fill the slots - fillSlot0(uint32 avId) broadcast ram; - fillSlot1(uint32 avId) broadcast ram; - fillSlot2(uint32 avId) broadcast ram; - fillSlot3(uint32 avId) broadcast ram; - - // How the server tells the client to empty the slots - emptySlot0(uint32 avId, int16 timestamp) broadcast ram; - emptySlot1(uint32 avId, int16 timestamp) broadcast ram; - emptySlot2(uint32 avId, int16 timestamp) broadcast ram; - emptySlot3(uint32 avId, int16 timestamp) broadcast ram; - - // **** - // How the client requests permission to board - requestBoard(int16 si) airecv clsend; // seems harmless, if given wrong x,y,z,h,p,r, and seat index it will appear wrong. server won't crash. safe - - // How the server rejects permission to board - rejectBoard(uint32 avId); - - // **** - // How the client requests permission to exit - requestExit() airecv clsend; // appears safe. - - // **** - // How the client notifies the AI it is done exiting - doneExit() airecv clsend; - - // How the server puts the clients into a minigame - setMinigameZone(uint32 zoneId, uint16 minigameId); - - // How the server puts the clients into a minigame - setPicnicDone(); - - // Position and orientation of the golf kart - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - - // Table number in the zone - setTableNumber( int16 tn ) required broadcast ram; -}; - - -dclass DistributedBossbotBoss: DistributedBossCog { - - // This field appears following the above fields, because we don't - // want to set the state until the above have been filled in. - setState(string state) broadcast ram; - // How hard is the CEO battle - setBattleDifficulty(uint8 battleDifficulty) broadcast ram; - - // The toon reports he wants to get food from the conveyer belt. - requestGetFood( int8 beltIndex, int8 foodIndex, uint32 foodNum) airecv clsend; - // The AI grants a get food request to a toon - toonGotFood(uint32 avId, int8 beltIndex, int8 foodIndex, uint32 foodNum) broadcast; - - // The toon reports he wants to serve food. - requestServeFood( int8 tableIndex, int8 chairIndex) airecv clsend; - // The AI grants a get food request to a toon - toonServeFood(uint32 avId, int8 tableIndex, int8 chairIndex) broadcast; - - // This is how the client indicates he has hit the boss (or another - // toon) with a pie. We have to take his word for it. - hitBoss(uint8 bossDamage) airecv clsend; - hitToon(uint32 toonId) airecv clsend; - ballHitBoss(uint8 bossDamage) airecv clsend; - setBossDamage(uint16 damage, uint8 recoverRate, - int16 timestamp) broadcast ram; - setSpeedDamage(uint16 damage, uint8 recoverRate, - int16 timestamp) broadcast ram; - - reachedTable(uint8 tableIndex) airecv clsend; - hitTable(uint8 tableIndex) airecv clsend; - awayFromTable(uint8 tableIndex) airecv clsend; - - toonGotHealed(uint32 toonId) broadcast; - - // The toon reports he wants to get food from the conveyer belt. - requestGetToonup( int8 beltIndex, int8 toonupIndex, uint32 toonupNum) airecv clsend; - // The AI grants a get toonup request to a toon - toonGotToonup(uint32 avId, int8 beltIndex, int8 toonupIndex, uint32 toonupNum) broadcast; - -}; - -dclass DistributedCogKart: DistributedElevatorExt { - setCountryClubId(uint16 countryClubId) required broadcast ram; - // Position and orientation of the golf kart - setPosHpr( int16 x / 10, int16 y / 10, int16 z / 10, - int16 h / 10, int16 p / 10, int16 r / 10 ) required broadcast ram; - // How the server puts the clients into a countryClub - setCountryClubInteriorZone(uint32 zoneId); - setCountryClubInteriorZoneForce(uint32 zoneId); -}; - -dclass DistributedCountryClub: DistributedObject { - setZoneId(uint32 zoneId) required broadcast ram; - // which rooms have not yet been defeated - setBlockedRooms(uint8array) required broadcast ram; - setCountryClubId(uint16 countryClubId) required broadcast ram; - setLayoutIndex(uint16 layout) required broadcast ram; - setFloorNum(uint8 floorNum) required broadcast ram; - setRoomDoIds(uint32array doIds) broadcast ram; - setCountryClubZone(uint32 zoneId) broadcast ram; - elevatorAlert(uint32 avId) broadcast ram; -}; - -dclass DistributedCountryClubRoom: DistributedLevel { - setCountryClubId(uint16 countryClubId) required broadcast ram; - setRoomId(uint16 roomId) required broadcast ram; - setRoomNum(uint8 roomNum) required broadcast ram; - setSuits(uint32array suitIds, uint32array reserveSuitIds) broadcast ram; - setBossConfronted(uint32 avId) broadcast ram; - setDefeated() broadcast ram; - forceOuch(uint8 penalty) broadcast; -}; - -// mole field -dclass DistributedMoleField : DistributedEntity { - setGameStart(int16 timestamp, uint8 molesWhackTarget, uint16 totalTime) broadcast; - setClientTriggered() airecv clsend; - whackedMole(int8 moleIndex, int16 popupNum) airecv clsend; - whackedBomb(int8 moleIndex, int16 popupNum, int32 timestamp32) airecv clsend; - updateMole(int8 moleIndex, int8 status) broadcast; - reportToonHitByBomb(uint32 avId, int8 moleIndex, int32 timestamp32) broadcast; - setScore(int16 score) required broadcast ram; - damageMe() airecv clsend; - setPityWin() broadcast ; -}; - -dclass DistributedCountryClubBattle: DistributedLevelBattle { -}; - -dclass DistributedClubElevator: DistributedElevatorFSM { - setFloor(int8 floor) broadcast ram; - setLocked(uint16 locked)required broadcast ram; - setEntering(uint16 locked)required broadcast ram; - kickToonsOut() broadcast; - //setPos(int32/1000 x, int32/1000 y, int32/1000 z)broadcast ram; - //setH(int32/1000 h)broadcast ram; - setLatch(uint32 markerId)required broadcast ram; -}; - -dclass DistributedMaze : DistributedEntity { - setRoomDoId(uint32 roomDoId) required broadcast ram; - setGameStart(int16 timestamp) broadcast; - setClientTriggered() airecv clsend; - setFinishedMaze() airecv clsend; - setGameOver() broadcast; - toonFinished(uint32 avId, uint8 place, uint8 lastToon) broadcast; - damageMe() airecv clsend; -}; - -dclass DistributedBattleWaiters: DistributedBattleFinal{ -}; - -dclass DistributedFoodBelt: DistributedObject { - setBossCogId(uint32 bossCogId) required broadcast ram; - setIndex(uint8 index) required broadcast ram; - setState(char state) broadcast ram; -}; - -dclass DistributedBanquetTable: DistributedObject { - setIndex(uint8 index) required broadcast ram; - setNumDiners(uint8 numDiners) required broadcast ram; - setBossCogId(uint32 bossCogId) required broadcast ram; - setDinerInfo(uint8array hungryDuration, uint8array eatingDuration, uint8array dinerLevels) required broadcast ram; - setState(char state, uint32 avId, int8 extraInfo) broadcast ram; - setDinerStatus(uint8 chairIndex, uint8 newStatus) broadcast; - - // client to AI msgs - requestControl() airecv clsend; - requestFree(int8 gotHitByBoss) airecv clsend; - - // client to client - setPitcherPos(uint8 changeSeq, uint16 h % 360 / 100, int16 timestamp) broadcast clsend; - clearSmoothing(int8 bogus) broadcast clsend; - firingWater( int32 startx / 100, int32 starty /100, int32 startz /100, - int32 endx / 100, int32 endy / 100, int32 endz /100) broadcast clsend; - waterHitBoss(uint8 tableIndex) broadcast clsend; -}; - -dclass DistributedBattleDiners: DistributedBattleFinal{ -}; - -dclass DistributedGolfSpot: DistributedObject { - setIndex(uint8 index) required broadcast ram; - setBossCogId(uint32 bossCogId) required broadcast ram; - - setState(char state, uint32 avId, int8 extraInfo) broadcast ram; - setGoingToReward() broadcast ram; - - requestControl() airecv clsend; - requestFree(int8 gotHitByBoss) airecv clsend; - - // client to client - setGolfSpotPos(uint8 changeSeq, uint16 h % 360 / 100, int16 timestamp) broadcast clsend; - clearSmoothing(int8 bogus) broadcast clsend; - setSwingInfo( uint8 power, int16 angle/10, uint8 sequenceNum) broadcast clsend; - -}; - -struct TireInput { -int32 force / 100; -int32 heading / 100; -}; - -dclass DistributedIceGame: DistributedMinigame { - // client To client - setForceArrowInfo(uint32 avId, int32 force/100, int32 heading/100) broadcast clsend; - // client To server - setAvatarChoice(int32 force/100, int32 heading/100) airecv clsend; - endingPositions(Coord3 endingPos[]) airecv clsend; - reportScoringMovieDone() airecv clsend; - claimTreasure(uint8 treasureNum) airecv clsend; - claimPenalty(uint8 treasureNum) airecv clsend; - // server To Clients - setTireInputs( TireInput inputs[]) broadcast; - setTimerStartTime(int16 timestamp) broadcast; - setFinalPositions(Coord3 finalPos[]) broadcast; // ai decided final positions at end of round - setMatchAndRound(int8 match, int8 round) broadcast; - setScores(int8 match, int8 round, int16array score) broadcast; - setNewState(string newState) broadcast; - setTreasureGrabbed(uint32 avId, uint32 treasureNum) broadcast; - setPenaltyGrabbed(uint32 avId, uint32 treasureNum) broadcast; -}; - -dclass DistributedCogThiefGame: DistributedMinigame { - // client to clients - throwingPie(uint32 avId, int32 timestamp, int32 heading / 100, int32 x/100, int32 y/100, int32 z/100) clsend broadcast; - - // client to clients and AI - hitBySuit(uint32 avId, int32 timestamp, int8 suitNum, int32 x/100, int32 y/100, int32 z/100) clsend broadcast airecv; - pieHitSuit(uint32 avId, int32 timestamp, int8 suitNum, int32 x/100, int32 y/100, int32 z/100) clsend broadcast airecv; - - // client to AI - cogHitBarrel(int32 timestamp, int8 cogIndex, int8 barrelIndex, int32 x/100, int32 y/100, int32 z/100) clsend airecv; - cogAtReturnPos(int32 timestamp, int8 cogIndex, int8 barrelIndex) clsend airecv; - - // server to clients - updateSuitGoal( int32 timestamp, int32 inResponseToClientStamp, int8 suitNum, int8 goalType, int64 goalId, int32 x/100, int32 y/100, int32 z/100) broadcast; - makeCogCarryBarrel( int32 timestamp, int32 inResponseToClientStamp, int8 cogIndex, int8 barrelIndex, int32 x/100, int32 y/100, int32 z/100) broadcast; - makeCogDropBarrel( int32 timestamp, int32 inResponseToClientStamp, int8 cogIndex, int8 barrelIndex, int32 x/100, int32 y/100, int32 z/100) broadcast; - markBarrelStolen(int32 timestamp, int32 inResponseToClientStamp, int8 barrelIndex) broadcast; - -}; - -struct twoDTreasureInfo - { - uint8 treasureIndex; - uint8 treasureValue; - }; - -struct twoDSectionInfo -{ - uint8 sectionIndex; - uint8 [] enemyIndicesSelected; - twoDTreasureInfo [] treasureIndicesSelected; - uint8 [] spawnPointIndicesSelected; - uint8 [] stomperIndicesSelected; -}; - -dclass DistributedTwoDGame: DistributedMinigame { - // client to clients - showShootGun(uint32 avId, int16 timestamp) clsend broadcast; //security breach: avId need validation//done, issues warning if invalid avId - - // client to clients and AI - toonHitByEnemy(uint32 avId, int16 timestamp) clsend broadcast airecv; //security breach: avId need validation//done, a warning is logged for invalid avId - toonFellDown(uint32 avId, int16 timestamp) clsend broadcast airecv; //security breach: avId need validation//done, a warning is logged for invalid avId - toonSquished(uint32 avId, int16 timestamp) clsend broadcast airecv; //security breach: avId need validation//done, a warning is logged for invalid avId - toonVictory(uint32 avId, int16 timestamp) clsend broadcast airecv; //security breach: avId need validation//done, a warning is logged for invalid avId - - // client to AI - claimTreasure(uint8 sectionIndex, uint8 treasureIndex) airecv clsend; - claimEnemyShot(uint8 sectionIndex, uint8 enemyIndex) airecv clsend; - reportDone() airecv clsend; - - // AI to clients - setSectionsSelected(twoDSectionInfo [] sectionsSelected) required broadcast ram; - setTreasureGrabbed(uint32 avId, uint8 sectionIndex, uint8 treasureIndex) broadcast; - setEnemyShot(uint32 avId, uint8 sectionIndex, uint8 enemyIndex, uint32 enemyHealth) broadcast; - addVictoryScore(uint32 avId, uint8 score) broadcast; - setEveryoneDone() broadcast; -}; - -dclass DistributedPicnicTable: DistributedNode { - fillSlot(uint32 avId, uint8 index, - int16 x/10, int16 y/10, int16 z/10, - int16 h/10, int16 p/10, int16 r/10, - int16 timestamp, uint32 parentDoId) broadcast; - emptySlot(uint32 avId, uint8 index, int16 timestamp) broadcast; - - // Should be an array of 6 - // Value will be 0 if its empty' - requestTableState() airecv clsend; - setTableState(uint32 avId[],uint8 isPlaying) broadcast ram; - setGameZone(uint32 zoneId, uint8 gameState) broadcast; - - setIsPlaying(uint8 isPlaying) broadcast ram; - - //clsend funcs - requestJoin(uint8 seatIndex, - int16 x/10, int16 y/10, int16 z/10, - int16 h/10, int16 p/10, int16 r/10) airecv clsend; - rejectJoin() broadcast; - requestObserve() airecv clsend; - leaveObserve() airecv clsend; - requestGameZone() airecv clsend; - requestPickedGame(uint8 gameId) clsend airecv; - requestExit() airecv clsend; - requestZone() clsend airecv; - announceWinner(string gameString, uint32 avId) broadcast; - - allowObserve() broadcast; - allowPick() broadcast; - setZone(uint32 zoneId) broadcast; - //setTimer(int16 time) broadcast ram; -}; -dclass DistributedChineseCheckers: DistributedNode { - requestExit() clsend airecv; - requestBegin() clsend airecv; - requestMove(uint8 moveList[]) clsend airecv; - requestTimer() clsend airecv; - requestSeatPositions() clsend airecv; - - startBeginTimer(uint16 time, int16 timestamp) broadcast ram; - gameStart(uint8 playerNum) broadcast; - - setTableDoId(uint32 doId) required broadcast ram; - setGameState(uint8 squares[], uint8 moveList[]) required broadcast ram; - setTimer(int16 time) broadcast ram required; - setTurnTimer(int16 time) broadcast ram required; - - sendTurn(uint8 playerTurn) broadcast ram; - - requestWin() clsend airecv; - announceWin(uint32 avId) broadcast; - - announceSeatPositions(uint8 playerPos[]) broadcast; -}; -dclass DistributedCheckers: DistributedNode { - requestExit() clsend airecv; - requestBegin() clsend airecv; - requestTimer() clsend airecv; - requestMove(uint8 moveList[]) clsend airecv; - - startBeginTimer(uint16 time, int16 timestamp) broadcast ram; - gameStart(uint8 playerNum) broadcast; - - setTableDoId(uint32 doId) required broadcast ram; - setGameState(uint8 squares[], uint8 moveList[]) required broadcast ram; - setTimer(int16 time) broadcast ram required; - setTurnTimer(int16 time) broadcast ram required; - - sendTurn(uint8 playerTurn) broadcast ram; - requestWin() clsend airecv; - announceWin(uint32 avId) broadcast; - illegalMove() broadcast; - -}; - -dclass DistributedFindFour: DistributedNode { - requestExit() clsend airecv; - requestBegin() clsend airecv; - requestMove(uint8 moveCol) clsend airecv; - requestTimer() clsend airecv; - requestWin(uint8 winPos[]) clsend airecv; - - startBeginTimer(uint16 time, int16 timestamp) broadcast ram; - setTableDoId(uint32 doId) required broadcast ram; - setGameState(uint8 squares[][], uint8 moveCol, uint8 movePos, uint8 turn) required broadcast ram; - setTimer(int16 time) broadcast ram required; - setTurnTimer(int16 time) broadcast ram required; - - - gameStart(uint8 playerNum) broadcast; - sendTurn(uint8 playerTurn) broadcast ram; - - announceWin(uint32 avId) broadcast; - announceWinLocation(uint8 x, uint8, y, uint8 dir, uint8 playerNum) broadcast; - announceWinnerPosition(uint8 x, uint8 y, uint8 winDir, uint8 playerNum) broadcast; - illegalMove() broadcast; - tie() broadcast; - - -}; - - -dclass DistributedMailManager: DistributedObject { - sendSimpleMail(uint32 senderId, uint32 receiverId, string text); - // avatarLoggedIn(uint32 avId); - setNumMailItems(uint32 avId, uint32 numMailItems) airecv; -}; - -dclass DistributedPartyManager: DistributedObject { - // avatarLoggedIn(uint32 avId); - addParty(uint32 pmDoId, uint32 hostId, string startTime, string endTime, int8 isPrivate, int8 inviteTheme, activity activities[], decoration decorations[], uint32array invitees, uint16 costOfParty) ; //AI to UD - addPartyRequest(uint32 hostId, string startTime, string endTime, int8 private, int8 inviteTheme, activity activities[], decoration decorations[], uint32array invitees) airecv clsend; // client to AI - addPartyResponse(uint32 hostId, int8 errorCode) ; //ai to client - addPartyResponseUdToAi(uint32 hostId, int8 errorCode, uint16 costOfParty) airecv; // UD to AI - markInviteAsReadButNotReplied(uint32 partyManagerDoId, uint64 inviteKey); //ai to UD - respondToInvite(uint32 partyManagerDoId, uint32 mailboxDoId, uint16 context, uint64 inviteKey, uint8 newStatus); //ai to UD - respondToInviteResponse( uint32 mailboxDoId, uint16 context, uint64 inviteKey, int8 retcode, uint8 newStatus) airecv; //UD to ai - - changePrivateRequest(uint64 partyId, int8 newPrivateStatus) airecv clsend; // client to ai - changePrivateRequestAiToUd(uint32 pmDoId, uint64 partyId, int8 newPrivateStatus); // ai to ud - changePrivateResponseUdToAi(uint32 hostId, uint64 partyId, int8 newPrivateStatus, int8 errorCode) airecv; //ud to ai - changePrivateResponse(uint64 partyId, int8 newPrivateStatus, int8 errorCode); //ai to client - - changePartyStatusRequest(uint64 partyId, int8 newPartyStatus) airecv clsend; // client to ai - changePartyStatusRequestAiToUd(uint32 pmDoId, uint64 partyId, int8 newPartyStatus); // ai to ud - changePartyStatusResponseUdToAi(uint32 hostId, uint64 partyId, int8 newPartyStatus, int8 errorCode) airecv; //ud to ai - changePartyStatusResponse(uint64 partyId, int8 newPartyStatus, int8 errorCode, uint16 beansRefunded); //ai to client - - partyInfoOfHostRequestAiToUd(uint32 pmDoId, uint32 hostId); // ai to ud - partyInfoOfHostFailedResponseUdToAi(uint32 hostId) airecv; // ud to ai - partyInfoOfHostResponseUdToAi(party partyInfoTuple, uint32array inviteeIds) airecv; // ud to ai - - getPartyZone(uint32 hostId, uint32 zoneId, uint8 planningParty) clsend airecv; // client to ai - receivePartyZone(uint32 hostId, uint64 partyId, uint32 zoneId); // ai to client - - freeZoneIdFromPlannedParty(uint32 hostId, uint32 zoneId) clsend airecv; // client to ai - sendAvToPlayground(uint32 avId, uint8 status); // ai to client - exitParty(uint32 zoneId) clsend airecv; // client to ai - removeGuest(uint32 ownerId, uint32 avId) airecv clsend; // client to ai - - // Keep track of party info cross-shard - partyManagerAIStartingUp(uint32 pmDoId, uint32 shardId); // ai to ud sent on DistributedPartyManagerAI.announceGenerate - partyManagerAIGoingDown(uint32 pmDoId, uint32 shardId); // ai to ud sent when shard goes down - partyHasStartedAiToUd(uint32 pmDoId, uint64 partyId, uint32 shardId, uint32 zoneId, string hostName); // ai to ud - toonHasEnteredPartyAiToUd(uint32 hostId); // ai to ud - toonHasExitedPartyAiToUd(uint32 hostId); // ai to ud - partyHasFinishedUdToAllAi(uint32 hostId) airecv; // ud to all AIs - updateToPublicPartyInfoUdToAllAi(uint32 hostId, uint64 time, uint32 shardId, uint32 zoneId, uint8 isPrivate, uint8 numberOfGuests, string hostName, uint8[] activityIds, uint64 partyId) airecv; // ud to all AIs - updateToPublicPartyCountUdToAllAi(uint32 hostId, uint8 numberOfGuests) airecv; // ud to all AIs - requestShardIdZoneIdForHostId(uint32 hostId) clsend airecv; //client to ai - sendShardIdZoneIdToAvatar(uint32 shardId, uint32 zoneId); //ai to client - - partyManagerUdStartingUp() airecv; // ud to all AIs sent on DistributedPartyManagerUD.announceGenerate - // in response to UD starting up, tell the UD about parties running on this AI server - updateAllPartyInfoToUd(uint32 hostId, uint64 time, uint32 shardId, uint32 zoneId, uint8 isPrivate, uint8 numberOfGuests, string hostName, uint8[] activityIds, uint64 partyId); // ai to UD - - // for magic words - forceCheckStart(); // AI to UD -}; - -dclass RATManager : DistributedObjectGlobal {}; - -dclass AwardManager : DistributedObjectGlobal { - // UD TO UD - giveAwardToToon(uint32 context, DoId replyToDoId, string replyToClass, DoId avId, uint32 awardType, uint32 awardItemId); -}; - -dclass DistributedCpuInfoMgr : DistributedObjectGlobal { - // UD TO UD - setCpuInfoToUd(uint32 avId, uint32 dislId, string info, string cacheStatus); // AI to UD -}; - -dclass NonRepeatableRandomSourceClient { - getRandomSamplesReply(uint32 context, uint32 [] samples) airecv; // UD->AI -}; - -dclass TTCodeRedemptionMgr : DistributedObject, NonRepeatableRandomSourceClient { - giveAwardToToonResult(uint32 context, uint32 result); // UD->UD - - redeemCode(uint32 context, string code) airecv clsend; // client->AI - redeemCodeAiToUd(uint32 serial, DoId rmDoId, uint32 context, string code, uint32 avId); // AI->UD - redeemCodeResultUdToAi(uint32 serial, uint32 context, uint32 avId, - uint32 result, uint32 awardMgrResult) airecv; // UD->AI - redeemCodeResult(uint32 context, uint32 result, uint32 awardMgrResult); // AI->client -}; - -dclass NonRepeatableRandomSource : DistributedObject, NonRepeatableRandomSourceClient { - getRandomSamples(DoId replyTo, string replyToClass, uint32 context, uint32 num); // AI->UD - - // internal - randomSample(DoId nrrsDoId, uint32 sample); // AI->UD - randomSampleAck() airecv; // UD->AI -}; - -// in the ideal world we'd only have a UD object which sends updates directly to client objects, without AI -dclass DistributedInGameNewsMgr : DistributedObjectGlobal { - // AI to clients - setLatestIssueStr(string latestissue) required broadcast ram; - inGameNewsMgrAIStartingUp(uint32 doId, uint32 shardId); // ai to ud sent on inGameNewsManagerAI.announceGenerate - newIssueUDtoAI(string latestIssue) airecv; // ud to all AIs -}; - - -dclass DistributedPhaseEventMgr : DistributedObject { - setNumPhases(uint8 numPhases) required broadcast ram; - setDates(datetime [] ) broadcast required; - setCurPhase(int8 curPhase) required broadcast ram; - // really important to have isRunning come after curPhase - setIsRunning(bool isRunning) required broadcast ram; -}; - -dclass DistributedHydrantZeroMgr : DistributedPhaseEventMgr{ -}; - -dclass DistributedMailboxZeroMgr : DistributedPhaseEventMgr{ -}; - -dclass DistributedTrashcanZeroMgr : DistributedPhaseEventMgr{ -}; - -dclass DistributedSillyMeterMgr : DistributedPhaseEventMgr { -}; \ No newline at end of file diff --git a/toontown/src/ai/AIServiceStart.py b/toontown/src/ai/AIServiceStart.py index f3d5b324..427bb4a1 100644 --- a/toontown/src/ai/AIServiceStart.py +++ b/toontown/src/ai/AIServiceStart.py @@ -1,9 +1,11 @@ #!python -S +import builtins + class game: name = "toontown" process = "ai" -__builtins__.game = game() +builtins.game = game() import time import os @@ -11,25 +13,19 @@ class game: import string import getopt -# Initialize ihooks importer On the production servers, we run genPyCode -n -# meaning no squeeze, so nobody else does this. When we squeeze, the -# unpacker does this for us and it does not hurt to do in either case. -import ihooks -ihooks.install() - from direct.directnotify import RotatingLog # Define a usage string helpString =""" python AIServiceStart.py [--mdip=] [--mdport=] [--esip=] [--esport=] [--logpath=] --district_number= --district_name= --ssid= --min_objid= --max_objid= -Starts an ai district. Default message director is localhost. Default +Starts an ai district. Default message director is 127.0.0.1. Default port is 6666. In the district name, underbars will be converted into spaces. Example: -python AIServiceStart.py --mdip=localhost --mdport=6665 --logpath=D:\toonlog\ --district_number=200000000 --district_name="Kooky_Summit" --ssid=20100000 --min_objid=30000000 --max_objid=39999999 +python AIServiceStart.py --mdip=127.0.0.1 --mdport=6665 --logpath=D:\toonlog\ --district_number=200000000 --district_name="Kooky_Summit" --ssid=20100000 --min_objid=30000000 --max_objid=39999999 """ # Get the options @@ -47,20 +43,20 @@ class game: 'max_objid=', 'dcfile=', ]) -except Exception, e: - print e - print helpString +except Exception as e: + print(e) + print(helpString) sys.exit(1) # Only four of the items are required if len(opts) < 4: - print helpString + print(helpString) sys.exit(1) # Default values -mdip = "localhost" +mdip = "127.0.0.1" mdport = 6666 -esip = "localhost" +esip = "127.0.0.1" esport = 4343 logpath = "" dcFileNames = [] @@ -93,19 +89,19 @@ class game: elif (flag == '--dcfile'): dcFileNames.append(value) else: - print "Error: Illegal option: " + flag - print helpString + print("Error: Illegal option: " + flag) + print(helpString) sys.exit(1) if not dcFileNames: dcFileNames = ['otp.dc', 'toon.dc'] - + # Setup the log files # We want C++ and Python to both go to the same log so they # will be interlaced properly. # date_hour_sequence.log will be added to the logfile name by RotatingLog(): -logfile = logpath + 'aidistrict_' + origDistrictName + "_" +str(districtNumber) +logfile = logpath + 'logs/aidistrict_' + origDistrictName + "_" +str(districtNumber) # Redirect Python output and err to the same file class LogAndOutput: @@ -140,11 +136,11 @@ def flush(self): # We prefer writing the date on the same line as the starting message, # so we can more easily grep for a restart on a particular date in the # log files. -print "\n\nStarting %s (number: %s) on %s port %s. %s %s" % ( - districtName, districtNumber, mdip, mdport, - time.asctime(time.localtime(time.time())), time.tzname[0]) +print("\n\nStarting %s (number: %s) on %s port %s. %s %s" % ( + districtName, districtNumber, mdip, mdport, + time.asctime(time.localtime(time.time())), time.tzname[0])) -print "Initializing..." +print("Initializing...") from otp.ai.AIBaseGlobal import * from toontown.ai import ToontownAIRepository diff --git a/toontown/src/ai/AIStart.py b/toontown/src/ai/AIStart.py index e06ccb76..38bd5680 100644 --- a/toontown/src/ai/AIStart.py +++ b/toontown/src/ai/AIStart.py @@ -1,9 +1,9 @@ -import __builtin__ +import builtins class game: name = "toontown" process = "ai" -__builtin__.game = game() +builtins.game = game() # NOTE: this file is not used in production. See AIServiceStart.py @@ -11,10 +11,10 @@ class game: import os import sys -print "Initializing..." +print("Initializing...") from otp.ai.AIBaseGlobal import * -import ToontownAIRepository +from . import ToontownAIRepository from direct.showbase import PythonUtil # Clear the default model extension for AI developers, so they'll know @@ -22,19 +22,19 @@ class game: from pandac.PandaModules import loadPrcFileData loadPrcFileData("AIStart.py", "default-model-extension") -simbase.mdip = simbase.config.GetString("msg-director-ip", "localhost") +simbase.mdip = simbase.config.GetString("msg-director-ip", "127.0.0.1") # Now the AI connects directly to the state server instead of the msg director simbase.mdport = simbase.config.GetInt("msg-director-port", 6666) -simbase.esip = simbase.config.GetString("event-server-ip", "localhost") +simbase.esip = simbase.config.GetString("event-server-ip", "127.0.0.1") simbase.esport = simbase.config.GetInt("event-server-port", 4343) districtType = 0 serverId = simbase.config.GetInt("district-ssid", 20100000) -for i in xrange(1, 20+1): +for i in range(1, 20+1): # always set up for i==1, then take the first district above 1 (if any) if i==1 or os.getenv("want_district_%s" % i): if i==1: @@ -65,7 +65,45 @@ class game: if i != 1: break -print "-"*30, "creating toontown district %s" % districtNumber, "-"*30 +# Setup the log files +# We want C++ and Python to both go to the same log so they +# will be interlaced properly. + +ltime = time.localtime() + +# date_hour_sequence.log will be added to the logfile name by RotatingLog(): +logfile = "logs/aidistrict-dev-%02d%02d%02d_%02d%02d%02d.log" % (ltime[0]-2000,ltime[1],ltime[2],ltime[3],ltime[4],ltime[5]) + +# Redirect Python output and err to the same file +class LogAndOutput: + def __init__(self, orig, log): + self.orig = orig + self.log = log + def write(self, str): + self.log.write(str) + self.log.flush() + self.orig.write(str) + self.orig.flush() + def flush(self): + self.log.flush() + self.orig.flush() + +log = open(logfile, 'a') +logOut = LogAndOutput(sys.__stdout__, log) +logErr = LogAndOutput(sys.__stderr__, log) +sys.stdout = logOut +sys.stderr = logErr + +from pandac.PandaModules import * + +# Give Panda the same log we use +nout = MultiplexStream() +Notify.ptr().setOstreamPtr(nout, 0) +nout.addFile(Filename(logfile)) +nout.addStandardOutput() +nout.addSystemDebug() + +print("-"*30, "creating toontown district %s" % districtNumber, "-"*30) simbase.air = ToontownAIRepository.ToontownAIRepository( simbase.mdip, @@ -84,10 +122,10 @@ class game: simbase.aiService = 0 try: - simbase.air.fsm.request("districtReset") + simbase.air.fsm.request("districtReset") run() except: info = PythonUtil.describeException() simbase.air.writeServerEvent('ai-exception', districtNumber, info) raise - + diff --git a/toontown/src/ai/AIZoneData.py b/toontown/src/ai/AIZoneData.py new file mode 100644 index 00000000..97b5a449 --- /dev/null +++ b/toontown/src/ai/AIZoneData.py @@ -0,0 +1,216 @@ +from pandac.PandaModules import * +from toontown.distributed import ParentMgr +from direct.directnotify.DirectNotifyGlobal import directNotify +from direct.task import Task +from direct.showbase import LeakDetectors +from toontown.toonbase import ToontownGlobals +import random + + +class AIZoneData: + notify = directNotify.newCategory('AIZoneData') + + def __init__(self, air, parentId, zoneId): + self._air = air + self._parentId = parentId + self._zoneId = zoneId + self._data = self._air.zoneDataStore.getDataForZone(self._parentId, self._zoneId) + + def destroy(self): + del self._data + self._air.zoneDataStore.releaseDataForZone(self._parentId, self._zoneId) + del self._zoneId + del self._parentId + del self._air + + def __getattr__(self, attr): + return getattr(self._data, attr) + + +class AIZoneDataObj: + notify = directNotify.newCategory('AIZoneDataObj') + DefaultCTravName = 'default' + + def __init__(self, parentId, zoneId): + self._parentId = parentId + self._zoneId = zoneId + self._refCount = 0 + self._collTravs = {} + self._collTravsStarted = set() + + def __str__(self): + output = str(self._collTravs) + output += '\n' + totalColliders = 0 + totalTraversers = 0 + for currCollTrav in self._collTravs.values(): + totalTraversers += 1 + totalColliders += currCollTrav.getNumColliders() + + output += 'Num traversers: %s Num total colliders: %s' % (totalTraversers, totalColliders) + return output + + def _incRefCount(self): + self._refCount += 1 + + def _decRefCount(self): + self._refCount -= 1 + + def _getRefCount(self): + return self._refCount + + def destroy(self): + for name in list(self._collTravsStarted): + self.stopCollTrav(cTravName=name) + + del self._collTravsStarted + del self._collTravs + if hasattr(self, '_nonCollidableParent'): + self._nonCollidableParent.removeNode() + del self._nonCollidableParent + if hasattr(self, '_render'): + if hasattr(self, '_renderLeakDetector'): + self._renderLeakDetector.destroy() + del self._renderLeakDetector + self._render.removeNode() + del self._render + if hasattr(self, '_parentMgr'): + self._parentMgr.destroy() + del self._parentMgr + del self._zoneId + del self._parentId + + def getLocation(self): + return (self._parentId, self._zoneId) + + def getRender(self): + if not hasattr(self, '_render'): + self._render = NodePath('render-%s-%s' % (self._parentId, self._zoneId)) + if config.GetBool('leak-scene-graph', 0): + self._renderLeakDetector = LeakDetectors.SceneGraphLeakDetector(self._render) + return self._render + + def getNonCollidableParent(self): + if not hasattr(self, '_nonCollidableParent'): + render = self.getRender() + self._nonCollidableParent = render.attachNewNode('nonCollidables') + return self._nonCollidableParent + + def getParentMgr(self): + if not hasattr(self, '_parentMgr'): + self._parentMgr = ParentMgr.ParentMgr() + self._parentMgr.registerParent(ToontownGlobals.SPHidden, hidden) + self._parentMgr.registerParent(ToontownGlobals.SPRender, self.getRender()) + return self._parentMgr + + def hasCollTrav(self, name = None): + if name is None: + name = AIZoneDataObj.DefaultCTravName + return name in self._collTravs + + def getCollTrav(self, name = None): + if name is None: + name = AIZoneDataObj.DefaultCTravName + if name not in self._collTravs: + self._collTravs[name] = CollisionTraverser('cTrav-%s-%s-%s' % (name, self._parentId, self._zoneId)) + return self._collTravs[name] + + def removeCollTrav(self, name): + if self._collTravs.has_key(name): + del self._collTravs[name] + + def _getCTravTaskName(self, name = None): + if name is None: + name = AIZoneDataObj.DefaultCTravName + return 'collTrav-%s-%s-%s' % (name, self._parentId, self._zoneId) + + def _doCollisions(self, task = None, topNode = None, cTravName = None): + render = self.getRender() + curTime = globalClock.getFrameTime() + render.setTag('lastTraverseTime', str(curTime)) + if topNode is not None: + if not render.isAncestorOf(topNode): + self.notify.warning('invalid topNode for collision traversal in %s: %s' % (self.getLocation(), topNode)) + else: + topNode = render + if cTravName is None: + cTravName = AIZoneDataObj.DefaultCTravName + collTrav = self._collTravs[cTravName] + messenger.send('preColl-' + collTrav.getName()) + collTrav.traverse(topNode) + messenger.send('postColl-' + collTrav.getName()) + return Task.cont + + def doCollTrav(self, topNode = None, cTravName = None): + self.getCollTrav(cTravName) + self._doCollisions(topNode=topNode, cTravName=cTravName) + + def startCollTrav(self, respectPrevTransform = 1, cTravName = None): + if cTravName is None: + cTravName = AIZoneDataObj.DefaultCTravName + if cTravName not in self._collTravsStarted: + self.getCollTrav(name=cTravName) + taskMgr.add(self._doCollisions, self._getCTravTaskName(name=cTravName), priority=ToontownGlobals.AICollisionPriority, extraArgs=[self._zoneId]) + self._collTravsStarted.add(cTravName) + self.setRespectPrevTransform(respectPrevTransform, cTravName=cTravName) + return + + def stopCollTrav(self, cTravName = None): + if cTravName is None: + cTravName = AIZoneDataObj.DefaultCTravName + self.notify.debug('stopCollTrav(%s, %s, %s)' % (cTravName, self._parentId, self._zoneId)) + if cTravName in self._collTravsStarted: + self.notify.info('removing %s collision traversal for (%s, %s)' % (cTravName, self._parentId, self._zoneId)) + taskMgr.remove(self._getCTravTaskName(name=cTravName)) + self._collTravsStarted.remove(cTravName) + return + + def setRespectPrevTransform(self, flag, cTravName = None): + if cTravName is None: + cTravName = AIZoneDataObj.DefaultCTravName + self._collTravs[cTravName].setRespectPrevTransform(flag) + return + + def getRespectPrevTransform(self, cTravName = None): + if cTravName is None: + cTravName = AIZoneDataObj.DefaultCTravName + return self._collTravs[cTravName].getRespectPrevTransform() + + +class AIZoneDataStore: + notify = directNotify.newCategory('AIZoneDataStore') + + def __init__(self): + self._zone2data = {} + + def destroy(self): + for zone, data in self._zone2data.items(): + data.destroy() + + del self._zone2data + + def hasDataForZone(self, parentId, zoneId): + key = (parentId, zoneId) + return key in self._zone2data + + def getDataForZone(self, parentId, zoneId): + key = (parentId, zoneId) + if key not in self._zone2data: + self._zone2data[key] = AIZoneDataObj(parentId, zoneId) + self.printStats() + data = self._zone2data[key] + data._incRefCount() + return data + + def releaseDataForZone(self, parentId, zoneId): + key = (parentId, zoneId) + data = self._zone2data[key] + data._decRefCount() + refCount = data._getRefCount() + if refCount == 0: + del self._zone2data[key] + data.destroy() + self.printStats() + + def printStats(self): + self.notify.debug('%s zones have zone data allocated' % len(self._zone2data)) diff --git a/toontown/src/ai/CatalogWallpaperConversion.py b/toontown/src/ai/CatalogWallpaperConversion.py index 40d518f3..33166447 100644 --- a/toontown/src/ai/CatalogWallpaperConversion.py +++ b/toontown/src/ai/CatalogWallpaperConversion.py @@ -4,8 +4,8 @@ from toontown.catalog import CatalogMouldingItem from toontown.catalog import CatalogWainscotingItem from toontown.catalog import CatalogItemList -import RepairAvatars -import DatabaseObject +from . import RepairAvatars +from . import DatabaseObject import time # Conversion @@ -166,7 +166,7 @@ def processAvatar(self, av, db): def printSometimes(self, av): now = time.time() if now - self.lastPrintTime > self.printInterval: - print "Avatar %d: %s" % (av.doId, av.name) + print("Avatar %d: %s" % (av.doId, av.name)) self.lastPrintTime = now @@ -200,7 +200,7 @@ def convertWallpaperAvatarVals(): avatarVals = open('avatar.vals') avatars = avatarVals.readlines() - print "Fixing %s avatars" % (len(avatars)) + print("Fixing %s avatars" % (len(avatars))) f = AvatarWallpaperFixer(simbase.air) f.objIdList = avatars f.start() @@ -209,7 +209,7 @@ def convertWallpaperHouseVals(): houseVals = open('house.vals') houses = houseVals.readlines() - print "Fixing %s houses" % (len(houses)) + print("Fixing %s houses" % (len(houses))) f2 = HouseWallpaperFixer(simbase.air) f2.objIdList = houses f2.start() diff --git a/toontown/src/ai/CostumeManagerAI.py b/toontown/src/ai/CostumeManagerAI.py index 4eb7d268..eeada5e2 100644 --- a/toontown/src/ai/CostumeManagerAI.py +++ b/toontown/src/ai/CostumeManagerAI.py @@ -28,7 +28,7 @@ def __init__(self, air, holidayId): self.runningState = 1 self.cCharsSwitched = 0 - + # For use with magic words self.stopForever = False @@ -131,7 +131,6 @@ def getRunningState(self): # Trigger the switching of the character ######################################################## def triggerSwitch(self, curWalkNode, curChar): - from toontown.classicchars import * if(self.holidayId == ToontownGlobals.HALLOWEEN_COSTUMES): for hood in self.hoods: if hood.classicChar == curChar: @@ -177,17 +176,17 @@ def triggerSwitch(self, curWalkNode, curChar): def __switchChars(self, newChar, walkNode, hood): self.notify.debug("SwitchingChars %s to %s" %(hood.classicChar, newChar)) self.notify.debugStateCall(self) - hood.classicChar.requestDelete() + hood.classicChar.requestDelete() if hasattr(hood, "air") and hood.air: hood.classicChar = newChar(hood.air) hood.classicChar.generateWithRequired(hood.zoneId) hood.addDistObj(hood.classicChar) hood.classicChar.walk.setCurNode(walkNode) - hood.classicChar.fsm.request('Walk') - else: + hood.classicChar.fsm.request('Walk') + else: self.notify.warning("Hood empty during character switch") holidayDone = 1 - for classicChar in self.__classicChars.itervalues(): + for classicChar in self.__classicChars.values(): if classicChar == 1: holidayDone = 0 if holidayDone: diff --git a/toontown/src/ai/CrashedLeaderBoardDecorator.py b/toontown/src/ai/CrashedLeaderBoardDecorator.py index 2d4e247e..1cf8092a 100644 --- a/toontown/src/ai/CrashedLeaderBoardDecorator.py +++ b/toontown/src/ai/CrashedLeaderBoardDecorator.py @@ -8,7 +8,7 @@ from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -import HolidayDecorator +from . import HolidayDecorator from toontown.toonbase import ToontownGlobals from pandac.PandaModules import Vec4, loadDNAFile, CSDefault, TransformState, NodePath, TransparencyAttrib from toontown.hood import GSHood diff --git a/toontown/src/ai/DatabaseObject.py b/toontown/src/ai/DatabaseObject.py index f5c7cb47..3e6d9e5c 100644 --- a/toontown/src/ai/DatabaseObject.py +++ b/toontown/src/ai/DatabaseObject.py @@ -1,5 +1,5 @@ from pandac.PandaModules import * -from ToontownAIMsgTypes import * +from .ToontownAIMsgTypes import * from direct.directnotify.DirectNotifyGlobal import * from toontown.toon import DistributedToonAI from direct.distributed.PyDatagram import PyDatagram @@ -16,7 +16,7 @@ class DatabaseObject: notify = directNotify.newCategory("DatabaseObject") notify.setInfo(0) - + def __init__(self, air, doId=None, doneEvent="DatabaseObject"): self.air = air self.doId = doId @@ -50,7 +50,7 @@ def readPetProxy(self): from toontown.pets import DistributedPetProxyAI petProxy = DistributedPetProxyAI.DistributedPetProxyAI(self.air) self.readObject(petProxy, None) - return petProxy + return petProxy def readObject(self, do, fields = None): # Reads a DistributedObject from the database and fills in its @@ -85,11 +85,11 @@ def storeObject(self, do, fields = None): # If fields is supplied, it is a subset of fields to update. values = {} for field in fields: - if self.values.has_key(field): + if field in self.values: values[field] = self.values[field] else: self.notify.warning("Field %s not defined." % (field)) - + self.setFields(values) def getFields(self, fields): @@ -98,7 +98,7 @@ def getFields(self, fields): context = self.air.dbObjContext self.air.dbObjContext += 1 self.air.dbObjMap[context] = self - + dg = PyDatagram() dg.addServerHeader(DBSERVER_ID, self.air.ourChannel, DBSERVER_GET_STORED_VALUES) dg.addUint32(context) @@ -106,7 +106,7 @@ def getFields(self, fields): dg.addUint16(len(fields)) for f in fields: dg.addString(f) - + self.air.send(dg) def getFieldsResponse(self, di): @@ -117,7 +117,7 @@ def getFieldsResponse(self, di): count = di.getUint16() fields = [] - for i in range(count): + for i in range(0, count): name = di.getString() fields.append(name) @@ -127,11 +127,11 @@ def getFieldsResponse(self, di): else: values = [] - for i in range(count): - value = di.getString() + for i in range(0, count): + value = di.getString().encode("ISO-8859-1") values.append(value) - for i in range(count): + for i in range(0, count): found = di.getUint8() if not found: @@ -159,16 +159,16 @@ def getFieldsResponse(self, di): def setFields(self, values): dg = PyDatagram() dg.addServerHeader(DBSERVER_ID, self.air.ourChannel, DBSERVER_SET_STORED_VALUES) - + dg.addUint32(self.doId) dg.addUint16(len(values)) - items = values.items() + items = list(values.items()) for field, value in items: dg.addString(field) for field, value in items: dg.addString(value.getMessage()) - + self.air.send(dg) def getDatabaseFields(self, dclass): @@ -186,7 +186,7 @@ def getDatabaseFields(self, dclass): fields.append(af.getName()) return fields - + def fillin(self, do, dclass): """fillin(self, DistributedObjectAI do, DCClass dclass) @@ -196,13 +196,13 @@ def fillin(self, do, dclass): """ do.doId = self.doId - for field, value in self.values.items(): + for field, value in list(self.values.items()): # Special-case kludge for broken fields. if field == "setZonesVisited" and value.getLength() == 1: self.notify.warning("Ignoring broken setZonesVisited") else: dclass.directUpdate(do, field, value) - + def reload(self, do, dclass, fields): """reload(self, DistributedObjectAI do, DCClass dclass) @@ -221,7 +221,7 @@ def reload(self, do, dclass, fields): packOk = dclass.packRequiredField(dg, do, field) assert(packOk) self.values[fieldName] = dg - + def createObject(self, objectType): # If we just want the default values for the new object's fields, # there's no need to specify any field values here. (Upon generation, @@ -235,12 +235,12 @@ def createObject(self, objectType): # AIDistUpdate.insertArg(). values = {} - for key, value in values.items(): + for key, value in list(values.items()): values[key] = PyDatagram(str(value)) # objectType is an integer that the DB uses to distinguish object # types, i.e. ToontownAIMsgTypes.DBSERVER_PET_OBJECT_TYPE - assert type(objectType) is types.IntType + assert type(objectType) is int # Get a unique context for this query and associate ourselves # in the map. @@ -252,15 +252,15 @@ def createObject(self, objectType): dg = PyDatagram() dg.addServerHeader(DBSERVER_ID, self.air.ourChannel, DBSERVER_CREATE_STORED_OBJECT) - + dg.addUint32(context) dg.addString('') dg.addUint16(objectType) dg.addUint16(len(values)) - for field in values.keys(): + for field in list(values.keys()): dg.addString(field) - for value in values.values(): + for value in list(values.values()): dg.addString(value.getMessage()) self.air.send(dg) @@ -284,9 +284,9 @@ def deleteObject(self): dg = PyDatagram() dg.addServerHeader(DBSERVER_ID, self.air.ourChannel, DBSERVER_DELETE_STORED_OBJECT) - + dg.addUint32(self.doId) - dg.addUint32(0xdeadbeefL) + dg.addUint32(0xdeadbeef) # bye bye self.air.send(dg) diff --git a/toontown/src/ai/DelayCatalog.py b/toontown/src/ai/DelayCatalog.py index c69a0240..c068080a 100644 --- a/toontown/src/ai/DelayCatalog.py +++ b/toontown/src/ai/DelayCatalog.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import sys -import RepairAvatars +from . import RepairAvatars class CatalogAdjuster(RepairAvatars.AvatarIterator): def __init__(self, air, adjustmentMinutes): @@ -35,18 +35,18 @@ def processAvatar(self, av, db): self.numChanged += 1 def done(self): - print "done, %s avatars visited, %s changed." % (self.numVisited, self.numChanged) + print("done, %s avatars visited, %s changed." % (self.numVisited, self.numChanged)) sys.exit(0) def usage(): - print "" - print "DelayCatalog.py " - print "" - print "This Python script is meant to be run on a live database to " - print "adjust all of the catalog delivery dates into the future by " - print "a certain number of days, to compensate for the catalog system " - print "being offline for a length of time." - print "" + print("") + print("DelayCatalog.py ") + print("") + print("This Python script is meant to be run on a live database to ") + print("adjust all of the catalog delivery dates into the future by ") + print("a certain number of days, to compensate for the catalog system ") + print("being offline for a length of time.") + print("") def main(argv): if len(argv) != 2: @@ -61,10 +61,10 @@ def main(argv): adjustmentMinutes = int(numDays * 24 * 60) - print "Adjusting catalog deliveries by %s days, or %s minutes." % ( - numDays, adjustmentMinutes) + print("Adjusting catalog deliveries by %s days, or %s minutes." % ( + numDays, adjustmentMinutes)) - import UtilityStart + from . import UtilityStart adj = CatalogAdjuster(simbase.air, adjustmentMinutes) adj.start() run() diff --git a/toontown/src/ai/DistributedTrickOrTreatTarget.py b/toontown/src/ai/DistributedTrickOrTreatTarget.py index e670b745..8cd41358 100644 --- a/toontown/src/ai/DistributedTrickOrTreatTarget.py +++ b/toontown/src/ai/DistributedTrickOrTreatTarget.py @@ -1,7 +1,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObject from otp.speedchat import SpeedChatGlobals -import DistributedScavengerHuntTarget +from . import DistributedScavengerHuntTarget class DistributedTrickOrTreatTarget(DistributedScavengerHuntTarget.DistributedScavengerHuntTarget): """ diff --git a/toontown/src/ai/DistributedTrickOrTreatTargetAI.py b/toontown/src/ai/DistributedTrickOrTreatTargetAI.py index 1d0599a4..6a45340d 100644 --- a/toontown/src/ai/DistributedTrickOrTreatTargetAI.py +++ b/toontown/src/ai/DistributedTrickOrTreatTargetAI.py @@ -1,6 +1,6 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObjectAI -import DistributedScavengerHuntTargetAI +from . import DistributedScavengerHuntTargetAI class DistributedTrickOrTreatTargetAI(DistributedScavengerHuntTargetAI.DistributedScavengerHuntTargetAI): """ diff --git a/toontown/src/ai/DistributedWinterCarolingTarget.py b/toontown/src/ai/DistributedWinterCarolingTarget.py index f7d872cc..3567d2cf 100644 --- a/toontown/src/ai/DistributedWinterCarolingTarget.py +++ b/toontown/src/ai/DistributedWinterCarolingTarget.py @@ -1,7 +1,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObject from toontown.speedchat.TTSCIndexedTerminal import TTSCIndexedMsgEvent -import DistributedScavengerHuntTarget +from . import DistributedScavengerHuntTarget class DistributedWinterCarolingTarget(DistributedScavengerHuntTarget.DistributedScavengerHuntTarget): """ diff --git a/toontown/src/ai/DistributedWinterCarolingTargetAI.py b/toontown/src/ai/DistributedWinterCarolingTargetAI.py index 5f17ffd9..bf729169 100644 --- a/toontown/src/ai/DistributedWinterCarolingTargetAI.py +++ b/toontown/src/ai/DistributedWinterCarolingTargetAI.py @@ -1,6 +1,6 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObjectAI -import DistributedScavengerHuntTargetAI +from . import DistributedScavengerHuntTargetAI class DistributedWinterCarolingTargetAI(DistributedScavengerHuntTargetAI.DistributedScavengerHuntTargetAI): """ diff --git a/toontown/src/ai/FixPetTraits.py b/toontown/src/ai/FixPetTraits.py index 92d97b04..23e55973 100644 --- a/toontown/src/ai/FixPetTraits.py +++ b/toontown/src/ai/FixPetTraits.py @@ -1,5 +1,5 @@ -import RepairAvatars -import DatabaseObject +from . import RepairAvatars +from . import DatabaseObject import time from direct.showbase import PythonUtil from toontown.toonbase import ToontownGlobals @@ -35,15 +35,15 @@ def fieldsToGet(self, db): def readIdsFromFile(self, filename='doodle.list'): file = open(filename) self.objIdList = file.readlines() - print 'Fixing %s pets' % len(self.objIdList) + print('Fixing %s pets' % len(self.objIdList)) def processPet(self, pet, db): RepairAvatars.PetIterator.processPet(self, pet, db) # the safezone should be TTC if pet.getSafeZone() != ToontownGlobals.ToontownCentral: - print ( + print(( 'Warning: pet %s is a pet that does not need to be patched!' % - pet.doId) + pet.doId)) # prevent mem leak pet.patchDelete() # this will request another pet if there are more to request @@ -51,7 +51,7 @@ def processPet(self, pet, db): return # grab the pet's owner - print 'requesting owner %s of pet %s' % (pet.getOwnerId(), pet.doId) + print('requesting owner %s of pet %s' % (pet.getOwnerId(), pet.doId)) ag = RepairAvatars.AvatarGetter(self.air) event = 'getOwner-%s' % pet.doId ag.getAvatar(pet.getOwnerId(), fields=['setName', 'setMaxHp', @@ -79,10 +79,10 @@ def gotOwner(self, toon, pet): maxMoney = toon.getMaxMoney() + toon.getMaxBankMoney() - print '%s HP, %s, %s, %s, %s' % (toon.getMaxHp(), normHp, + print('%s HP, %s, %s, %s, %s' % (toon.getMaxHp(), normHp, toon.getMaxMoney(), toon.getMaxBankMoney(), - maxMoney) + maxMoney)) szList = MinigameGlobals.SafeZones numSz = len(szList) @@ -92,8 +92,8 @@ def gotOwner(self, toon, pet): # check that they can even afford a pet from the next sz if i < (numSz-1): if maxMoney < PetConstants.ZoneToCostRange[szList[i+1]][0]: - print "toon %s can't afford pet from sz %s" % ( - pet.getOwnerId(), szList[i+1]) + print("toon %s can't afford pet from sz %s" % ( + pet.getOwnerId(), szList[i+1])) break newSz = szList[i] @@ -101,17 +101,17 @@ def gotOwner(self, toon, pet): fields = [] if newSz != ToontownGlobals.ToontownCentral: - print 'newSafezone: %s' % newSz + print('newSafezone: %s' % newSz) # recalculate the pet's traits newTraits = PetTraits.PetTraits(pet.getTraitSeed(), newSz) pet.setTraits(newTraits.getValueList()) - fields.extend(map(pet.getSetterName, PetTraits.getTraitNames())) + fields.extend(list(map(pet.getSetterName, PetTraits.getTraitNames()))) pet.setSafeZone(newSz) fields.append('setSafeZone') if len(fields): - print '== Fixing pet %s' % pet.doId + print('== Fixing pet %s' % pet.doId) db = DatabaseObject.DatabaseObject(self.air, pet.doId) db.storeObject(pet, fields) diff --git a/toontown/src/ai/HalloweenHolidayDecorator.py b/toontown/src/ai/HalloweenHolidayDecorator.py index 37ecf687..e59dc557 100644 --- a/toontown/src/ai/HalloweenHolidayDecorator.py +++ b/toontown/src/ai/HalloweenHolidayDecorator.py @@ -8,7 +8,7 @@ from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -import HolidayDecorator +from . import HolidayDecorator from toontown.toonbase import ToontownGlobals from toontown.safezone import Playground from toontown.town import Street diff --git a/toontown/src/ai/HolidayDecorator.py b/toontown/src/ai/HolidayDecorator.py index 73307d8e..3589dddc 100644 --- a/toontown/src/ai/HolidayDecorator.py +++ b/toontown/src/ai/HolidayDecorator.py @@ -68,7 +68,7 @@ def getSwapVisibleIval(self, wait = 5.0, tFadeOut = 3.0, tFadeIn = 3.0): transform = loader.holidayPropTransforms.get(index, TransformState.makeIdentity()) # Position relative to empty node path *just in case* render not top of scene graph newNP.setTransform(NodePath(), transform) - newNP.setTag('transformIndex', `index`) + newNP.setTag('transformIndex', repr(index)) s = Sequence(Wait(wait), np.colorScaleInterval(tFadeOut, Vec4(1, 1, 1, 0), startColorScale = Vec4(1, 1, 1, 1), diff --git a/toontown/src/ai/HolidayInfo.py b/toontown/src/ai/HolidayInfo.py index e7cd5e74..43fc2382 100644 --- a/toontown/src/ai/HolidayInfo.py +++ b/toontown/src/ai/HolidayInfo.py @@ -70,7 +70,7 @@ def current(self): # Input: None # Output: returns the new current element ############################################################# - def next(self): + def __next__(self): try: lastIdx = len(self._seq) - 1 self._idx = ((lastIdx == self._idx) and [0] or [self._idx+1])[0] diff --git a/toontown/src/ai/HolidayInfoDaily.py b/toontown/src/ai/HolidayInfoDaily.py index 879bcf9a..065d68cc 100644 --- a/toontown/src/ai/HolidayInfoDaily.py +++ b/toontown/src/ai/HolidayInfoDaily.py @@ -35,12 +35,12 @@ class HolidayInfo_Daily(HolidayInfo_Base): def __init__(self, holidayClass, dateList, displayOnCalendar): HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)//2): start = dateElemIter.current() - end = dateElemIter.next() + end = next(dateElemIter) self.tupleList.append((start, end)) - dateElemIter.next() + next(dateElemIter) ############################################################# # Method: getNextHolidayTime @@ -57,12 +57,12 @@ def getNextHolidayTime(self, currTime): localTime[1], # month localTime[2], # day ) - - for i in xrange(len(self.tupleList)): + + for i in range(len(self.tupleList)): # Retrieve the Start/End Tuples for the next time # the holiday should be scheduled. startTuple, endTuple = self.currElemIter.peekNext() - + # Retrieve the current Start Time and # the next Start Time. cStartTime = self.currElemIter.current()[0] @@ -70,7 +70,7 @@ def getNextHolidayTime(self, currTime): # If the current Start Time is larger than the # next, we have reached the end of the list so - # we must schedule the + # we must schedule the if cStartTime > nStartTime: sTime = self.getTime((date[0], date[1], date[2]+1,), startTuple) eTime = self.getTime((date[0], date[1], date[2]+1,), endTuple) @@ -84,10 +84,10 @@ def getNextHolidayTime(self, currTime): # Iterate to the next time before we check validity # of the time. - self.currElemIter.next() + next(self.currElemIter) if (currTime < eTime): return sTime - + # We are back to the original element, thus we should # schedule it for the next day. start = self.currElemIter.current()[0] diff --git a/toontown/src/ai/HolidayInfoMonthly.py b/toontown/src/ai/HolidayInfoMonthly.py index b0284a5e..137aabfc 100644 --- a/toontown/src/ai/HolidayInfoMonthly.py +++ b/toontown/src/ai/HolidayInfoMonthly.py @@ -39,13 +39,13 @@ def __init__(self, holidayClass, dateList, displayOnCalendar): HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)/2): start = dateElemIter.current() - end = dateElemIter.next() + end = next(dateElemIter) finalTuple = self.__setTuplesMonthly(start, end) self.tupleList.append(finalTuple) - dateElemIter.next() + next(dateElemIter) self.tupleList.sort(cmpDates) @@ -120,7 +120,7 @@ def getNextHolidayTime(self, currTime): sCurrMonth = time.localtime()[1] eCurrMonth = sCurrMonth - for i in xrange(len(self.tupleList)): + for i in range(len(self.tupleList)): sDay = self.currElemIter.current()[0][0] nDay = self.currElemIter.peekNext()[0][0] @@ -159,7 +159,7 @@ def getNextHolidayTime(self, currTime): sTime = self.getTime((currYear, sCurrMonth,), startTuple) eTime = self.getTime((currYear, eCurrMonth,), endTuple) - self.currElemIter.next() + next(self.currElemIter) if (currTime < eTime): return sTime diff --git a/toontown/src/ai/HolidayInfoOncely.py b/toontown/src/ai/HolidayInfoOncely.py index 46c059c2..b87276e5 100644 --- a/toontown/src/ai/HolidayInfoOncely.py +++ b/toontown/src/ai/HolidayInfoOncely.py @@ -14,6 +14,7 @@ import random import time import datetime +import functools ################################################################# # Class: HolidayInfo_Oncely @@ -25,7 +26,7 @@ class HolidayInfo_Oncely(HolidayInfo_Base): # Method: __init__ # Purpose: Provides initial construction of the Oncely Holiday # Info object. This type of holiday only happens once! - # + # # Input: holidayClass - class type of the holiday, for # instance - Fireworks. # dateDict - a dictionary containing the Months, @@ -44,19 +45,19 @@ def __init__(self, holidayClass, dateList, displayOnCalendar, phaseDates = None, # Implicit in this definition, if a holiday has 1 phase date, there are 2 phases HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)//2): start = dateElemIter.current() - end = dateElemIter.next() + end = next(dateElemIter) self.tupleList.append((start, end)) - dateElemIter.next() + next(dateElemIter) - self.tupleList.sort(cmpDates) + self.tupleList.sort(key=functools.cmp_to_key(cmpDates)) self.phaseDates = None self.curPhase = 0 if phaseDates: self.processPhaseDates(phaseDates) - + self.testHolidays = testHolidays ############################################################# @@ -82,7 +83,7 @@ def getTime(self, date, t): ############################################################# # Method: getNextHolidayTime # Purpose: This type of holiday only happens once, so just return None - # + # # Input: currTime - current time # Output: returns the next start time of the holiday ############################################################# @@ -97,7 +98,7 @@ def getNextHolidayTime(self, currTime): """ result = None - for i in xrange(len(self.tupleList)): + for i in range(len(self.tupleList)): if i == 0: # we need to setup currElem properly if we start # in the middle of a oncely holiday with multiple starts @@ -107,22 +108,22 @@ def getNextHolidayTime(self, currTime): startNextTime = self.getTime(None, startTuple) endNextTime = self.getTime(None, endTuple) - + if startNextTime <= currTime and \ currTime <= endNextTime: # we are between a start time and end time tuple # start it now result = currTime break; - + if currTime < startNextTime and \ currTime < endNextTime: # we are waiting for the next pair of start,end times to arrive result = startNextTime - break; - self.currElemIter.next() + break; + next(self.currElemIter) return result - + ############################################################# # Method: adjustDate # Purpose: This method adjusts the current day by a year. This @@ -151,11 +152,11 @@ def hasPhaseDates(self): return True else: return False - + ############################################################# # Run holiday in test mode - # Used to invoke other holidays for debugging purposes - ############################################################# + # Used to invoke other holidays for debugging purposes + ############################################################# def isTestHoliday(self): """ Returns true if running the holiday in test mode """ @@ -163,6 +164,6 @@ def isTestHoliday(self): return True else: return False - + def getTestHolidays(self): return self.testHolidays \ No newline at end of file diff --git a/toontown/src/ai/HolidayInfoRelatively.py b/toontown/src/ai/HolidayInfoRelatively.py index f8ad2c33..baadc1d0 100644 --- a/toontown/src/ai/HolidayInfoRelatively.py +++ b/toontown/src/ai/HolidayInfoRelatively.py @@ -16,11 +16,19 @@ import calendar import random import time +import enum from copy import deepcopy -Day = Enum('MONDAY, TUESDAY, WEDNESDAY, THURSDAY, \ - FRIDAY, SATURDAY, SUNDAY') - +Day = enum.IntEnum('Day', ( + 'MONDAY', + 'TUESDAY', + 'WEDNESDAY', + 'THURSDAY', + 'FRIDAY', + 'SATURDAY', + 'SUNDAY' +)) + ################################################################# # Class: HolidayInfo_Relatively # Purpose: Stores all relevant information regarding an event, @@ -46,7 +54,7 @@ def __init__(self, holidayClass, dateList, displayOnCalendar): HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)//2): start = dateElemIter.current() end = dateElemIter.next() @@ -62,14 +70,14 @@ def __init__(self, holidayClass, dateList, displayOnCalendar): # one more time than the other days. for i in range(7): # The minimum number of times a day repeats in a month self.weekDaysInMonth.append((i,4)) - + ############################################################ # Method: initRepMatrix # Initialize the number of times weekdays get # repeated in a month method. ############################################################ def initRepMatrix(self, year, month): - + for i in range(7): self.weekDaysInMonth[i] = (i,4) @@ -111,7 +119,7 @@ def getTime(self, date, t): 0, 0, -1)) - + ############################################################# # Method: getStartTime # Purpose: This method returns the current start time of @@ -146,8 +154,8 @@ def getEndTime(self, date): def getNextHolidayTime(self, currTime): sCurrYear = time.localtime()[0] eCurrYear = sCurrYear - - for i in xrange(len(self.tupleList)): + + for i in range(len(self.tupleList)): startTuple, endTuple = self.getUpdatedTuples(self.currElemIter.peekNext()) sMonth = startTuple[0] nMonth = endTuple[0] @@ -264,7 +272,7 @@ def getUpdatedTuples(self, tuples): eTuple[0] += 1 eTuple[1] = 1 return sTuple, eTuple - + ############################################################ # Method: dayForWeekday(month, weekday, repNum) # Returns the day for a given weekday that has repeated @@ -274,4 +282,4 @@ def dayForWeekday(self, year, month, weekday, repNum): monthDays = calendar.monthcalendar(year, month) if(monthDays[0][weekday] == 0): repNum += 1 - return monthDays[(repNum-1)][weekday] \ No newline at end of file + return monthDays[(repNum-1)][weekday] diff --git a/toontown/src/ai/HolidayInfoWeekly.py b/toontown/src/ai/HolidayInfoWeekly.py index df73eedc..3ebc7760 100644 --- a/toontown/src/ai/HolidayInfoWeekly.py +++ b/toontown/src/ai/HolidayInfoWeekly.py @@ -13,6 +13,7 @@ ################################################################# import random import time +import functools ################################################################# # Class: HolidayInfo_Weekly @@ -35,18 +36,18 @@ class HolidayInfo_Weekly(HolidayInfo_Base): # Output: None ############################################################# def __init__(self, holidayClass, dateList, displayOnCalendar): - + HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)//2): start = dateElemIter.current() - end = dateElemIter.next() + end = next(dateElemIter) self.tupleList.append((start, end)) - dateElemIter.next() + next(dateElemIter) - self.tupleList.sort(cmpDates) + self.tupleList.sort(key=functools.cmp_to_key(cmpDates)) ############################################################# # Method: getStartTime @@ -92,9 +93,9 @@ def getTime(self, date, t, isStart = True, isNextWeek=False): dayOffset = sWDay - cWDay if isNextWeek: dayOffset += 7 - + day = date[2] + dayOffset - + actualTime = time.mktime((date[0], date[1], day, t[1], t[2], t[3], 0, 0, -1)) @@ -158,7 +159,7 @@ def getNextHolidayTime(self, currTime): # - Here, we have ended on a Tuesday(1). The # next time the holiday should fire will be # on the Thursday(3) of the same week. - + # Check to see if we are already in the next # week due to overlapping holiday. cWDay = date[3] @@ -172,7 +173,7 @@ def getNextHolidayTime(self, currTime): # We have already started the new week as found # in case 2. Adjust time normally. sTime = self.getTime(date, startTuple, True) - + else: startTuple, endTuple = self.currElemIter.next() sTime = self.getTime(date, startTuple, True) @@ -180,7 +181,7 @@ def getNextHolidayTime(self, currTime): # Perform Check if (currTime < sTime): # Found next holiday day - return sTime + return sTime # This means that we arrived back to the original # starting place. Update date and find time for @@ -198,7 +199,7 @@ def getNextHolidayTime(self, currTime): # a start time. # Input: date - the date that needs to be adjusted # Output: None - ############################################################# + ############################################################# def adjustDate(self, date): return (date[0], date[1], date[2]+7, date[3]) - + diff --git a/toontown/src/ai/HolidayInfoYearly.py b/toontown/src/ai/HolidayInfoYearly.py index 54c266c3..e96cdef9 100644 --- a/toontown/src/ai/HolidayInfoYearly.py +++ b/toontown/src/ai/HolidayInfoYearly.py @@ -9,6 +9,7 @@ # Python Specific Modules import random import time +import functools class HolidayInfo_Yearly(HolidayInfo_Base): """ @@ -33,14 +34,14 @@ def __init__(self, holidayClass, dateList, displayOnCalendar): """ HolidayInfo_Base.__init__(self, holidayClass, displayOnCalendar) dateElemIter = ModifiedIter(dateList) - for i in xrange(len(dateList)/2): + for i in range(len(dateList)//2): start = dateElemIter.current() - end = dateElemIter.next() + end = next(dateElemIter) self.tupleList.append((start, end)) - dateElemIter.next() + next(dateElemIter) - self.tupleList.sort(cmpDates) + self.tupleList.sort(key=functools.cmp_to_key(cmpDates)) def getTime(self, date, t): """ @@ -73,7 +74,7 @@ def getNextHolidayTime(self, currTime): sCurrYear = time.localtime()[0] eCurrYear = sCurrYear - for i in xrange(len(self.tupleList)): + for i in range(len(self.tupleList)): sMonth = self.currElemIter.current()[0][0] nMonth = self.currElemIter.peekNext()[0][0] @@ -151,7 +152,7 @@ def getNextHolidayTime(self, currTime): sTime = self.getTime((sCurrYear,), startTuple) eTime = self.getTime((eCurrYear,), endTuple) - self.currElemIter.next() + next(self.currElemIter) if (currTime < eTime): return sTime diff --git a/toontown/src/ai/HolidayManagerAI.py b/toontown/src/ai/HolidayManagerAI.py index 4ed5a0e3..74f15345 100644 --- a/toontown/src/ai/HolidayManagerAI.py +++ b/toontown/src/ai/HolidayManagerAI.py @@ -10,7 +10,7 @@ # Direct Specific Modules ################################################################# from direct.directnotify import DirectNotifyGlobal -from direct.showbase.PythonUtil import Enum, SingletonError +from direct.showbase.PythonUtil import SingletonError from direct.task import Task ################################################################# @@ -52,16 +52,14 @@ ################################################################# import random import time +import enum ################################################################# # Global Enumerations and Constants ################################################################# -Month = Enum('JANUARY, FEBRUARY, MARCH, APRIL, \ - MAY, JUNE, JULY, AUGUST, SEPTEMBER, \ - OCTOBER, NOVEMBER, DECEMBER', 1) +Month = enum.IntEnum('Month', ('JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER'), start=1) -Day = Enum('MONDAY, TUESDAY, WEDNESDAY, THURSDAY, \ - FRIDAY, SATURDAY, SUNDAY') +Day = enum.IntEnum('Day', ('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'), start=0) OncelyMultipleStartHolidays = (ToontownGlobals.COLD_CALLER_INVASION, ToontownGlobals.BEAN_COUNTER_INVASION, @@ -105,10 +103,10 @@ ToontownGlobals.HYDRANT_ZERO_HOLIDAY: { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 5, 8, 0), # firstMoveArmUp1 datetime.datetime( 2010, Month.JUNE, 12, 11, 55),], - 'phaseDates': [datetime.datetime( 2010, Month.MAY, 9, 11, 05), # firstMoveStruggle - datetime.datetime( 2010, Month.MAY, 13, 11, 05), # firstMoveArmUp2 - datetime.datetime( 2010, Month.MAY, 18, 11, 05), # firstMoveJump hydrants around hydrant zero animate - datetime.datetime( 2010, Month.MAY, 21, 16, 05), # firstMoveJumpBalance + 'phaseDates': [datetime.datetime( 2010, Month.MAY, 9, 11, 0o5), # firstMoveStruggle + datetime.datetime( 2010, Month.MAY, 13, 11, 0o5), # firstMoveArmUp2 + datetime.datetime( 2010, Month.MAY, 18, 11, 0o5), # firstMoveJump hydrants around hydrant zero animate + datetime.datetime( 2010, Month.MAY, 21, 16, 0o5), # firstMoveJumpBalance datetime.datetime( 2010, Month.MAY, 22, 15, 30), # firstMoveArmUp3 Hydrant Zero and his hydrant pals get more elaborate animations datetime.datetime( 2010, Month.JUNE, 3, 15, 30), # firstMoveJumpSpin ], @@ -117,12 +115,12 @@ ToontownGlobals.TRASHCAN_ZERO_HOLIDAY: { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 8, 12, 15), # firstMoveLidFLip1 datetime.datetime( 2010, Month.JUNE, 12, 11, 55),], - 'phaseDates': [datetime.datetime( 2010, Month.MAY, 11, 11, 05), # firstMoveStruggle - datetime.datetime( 2010, Month.MAY, 15, 11, 05), # firstMoveLidFlip2 - datetime.datetime( 2010, Month.MAY, 20, 11, 05), # firstMoveJump trashcans around trashcan zero animate - datetime.datetime( 2010, Month.MAY, 23, 11, 05), # firstMoveLidFlip3 + 'phaseDates': [datetime.datetime( 2010, Month.MAY, 11, 11, 0o5), # firstMoveStruggle + datetime.datetime( 2010, Month.MAY, 15, 11, 0o5), # firstMoveLidFlip2 + datetime.datetime( 2010, Month.MAY, 20, 11, 0o5), # firstMoveJump trashcans around trashcan zero animate + datetime.datetime( 2010, Month.MAY, 23, 11, 0o5), # firstMoveLidFlip3 datetime.datetime( 2010, Month.MAY, 29, 14, 10), # firstMoveJumpHit Trashcan Zero and his trashcan pals get more elaborate animations - datetime.datetime( 2010, Month.JUNE, 6, 14, 01), # firstMoveJumpJuggle + datetime.datetime( 2010, Month.JUNE, 6, 14, 0o1), # firstMoveJumpJuggle ], }, @@ -131,42 +129,42 @@ datetime.datetime( 2010, Month.JUNE, 12, 11, 55),], 'phaseDates': [datetime.datetime( 2010, Month.MAY, 16, 16, 55), # firstMoveStruggle & Jump datetime.datetime( 2010, Month.MAY, 21, 16, 55), # firstMoveFlagSpin2 - datetime.datetime( 2010, Month.MAY, 23, 17, 05), # firstMoveFlagSpin3 mailboxs around mailbox zero animate - datetime.datetime( 2010, Month.JUNE, 1, 11, 05), # firstMoveJumpSummersault - datetime.datetime( 2010, Month.JUNE, 5, 12, 01), # firstMoveJumpFall Mailbox Zero and his mailbox pals get more elaborate animations + datetime.datetime( 2010, Month.MAY, 23, 17, 0o5), # firstMoveFlagSpin3 mailboxs around mailbox zero animate + datetime.datetime( 2010, Month.JUNE, 1, 11, 0o5), # firstMoveJumpSummersault + datetime.datetime( 2010, Month.JUNE, 5, 12, 0o1), # firstMoveJumpFall Mailbox Zero and his mailbox pals get more elaborate animations datetime.datetime( 2010, Month.JUNE, 8, 11, 45), # firstMoveJump3Summersaults ], }, ToontownGlobals.SILLYMETER_HOLIDAY: - { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 14, 0, 01), # Stage 1 animates - datetime.datetime( 2010, Month.JULY, 14, 0, 01),], - 'phaseDates': [datetime.datetime( 2010, Month.MAY, 17, 16, 01), # Stage 1 animates, stage 2 built - datetime.datetime( 2010, Month.MAY, 19, 00, 01), # Stage 1 loc 2 - datetime.datetime( 2010, Month.MAY, 22, 14, 01), # Stage 1 loc 3 - datetime.datetime( 2010, Month.MAY, 24, 17, 01), # Stage 1 loc 4 + { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 14, 0, 0o1), # Stage 1 animates + datetime.datetime( 2010, Month.JULY, 14, 0, 0o1),], + 'phaseDates': [datetime.datetime( 2010, Month.MAY, 17, 16, 0o1), # Stage 1 animates, stage 2 built + datetime.datetime( 2010, Month.MAY, 19, 00, 0o1), # Stage 1 loc 2 + datetime.datetime( 2010, Month.MAY, 22, 14, 0o1), # Stage 1 loc 3 + datetime.datetime( 2010, Month.MAY, 24, 17, 0o1), # Stage 1 loc 4 - datetime.datetime( 2010, Month.MAY, 26, 00, 01), # Stage 2 loc 5 - datetime.datetime( 2010, Month.MAY, 30, 10, 01), # Stage 2 loc 6 + datetime.datetime( 2010, Month.MAY, 26, 00, 0o1), # Stage 2 loc 5 + datetime.datetime( 2010, Month.MAY, 30, 10, 0o1), # Stage 2 loc 6 - datetime.datetime( 2010, Month.JUNE, 2, 0, 01), # Stage 3 is added and animates + datetime.datetime( 2010, Month.JUNE, 2, 0, 0o1), # Stage 3 is added and animates datetime.datetime( 2010, Month.JUNE, 5, 12, 00), # Stage 3 loc 8 - datetime.datetime( 2010, Month.JUNE, 8, 10, 01), # Stage 3 loc 9 + datetime.datetime( 2010, Month.JUNE, 8, 10, 0o1), # Stage 3 loc 9 - datetime.datetime( 2010, Month.JUNE, 9, 00, 01), # Stage 4 animates - datetime.datetime( 2010, Month.JUNE, 12, 10, 01), # Stage 4 loc 11 - datetime.datetime( 2010, Month.JUNE, 12, 12, 01), # Stage 4 loc 12 + datetime.datetime( 2010, Month.JUNE, 9, 00, 0o1), # Stage 4 animates + datetime.datetime( 2010, Month.JUNE, 12, 10, 0o1), # Stage 4 loc 11 + datetime.datetime( 2010, Month.JUNE, 12, 12, 0o1), # Stage 4 loc 12 datetime.datetime( 2010, Month.JUNE, 13, 13, 30), # Stage 5 silly meter plummets - datetime.datetime( 2010, Month.JUNE, 14, 0, 01), # Scientist chatter change + datetime.datetime( 2010, Month.JUNE, 14, 0, 0o1), # Scientist chatter change - datetime.datetime( 2010, Month.JUNE, 28, 0, 01), # Silly meter shuts down + datetime.datetime( 2010, Month.JUNE, 28, 0, 0o1), # Silly meter shuts down ], }, ToontownGlobals.SILLY_SURGE_HOLIDAY: - { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 14, 0, 01), + { 'startAndEndPairs': [datetime.datetime( 2010, Month.MAY, 14, 0, 0o1), datetime.datetime( 2010, Month.JUNE, 13, 13, 30), ], # Cogs invade and silly surges fizzle out }, @@ -420,54 +418,54 @@ }, ToontownGlobals.ROBBER_BARON_INVASION: - { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 2, 01), + { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 2, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 4, 00), - datetime.datetime( 2010, Month.JUNE, 27, 10, 01), + datetime.datetime( 2010, Month.JUNE, 27, 10, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 12, 00), - datetime.datetime( 2010, Month.JUNE, 27, 18, 01), + datetime.datetime( 2010, Month.JUNE, 27, 18, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 20, 00),], }, ToontownGlobals.BIG_WIG_INVASION: - { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 4, 01), + { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 4, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 6, 00), - datetime.datetime( 2010, Month.JUNE, 27, 12, 01), + datetime.datetime( 2010, Month.JUNE, 27, 12, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 14, 00), - datetime.datetime( 2010, Month.JUNE, 27, 20, 01), + datetime.datetime( 2010, Month.JUNE, 27, 20, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 22, 00),], }, ToontownGlobals.BIG_CHEESE_INVASION: - { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 6, 01), + { 'startAndEndPairs' : [datetime.datetime( 2010, Month.JUNE, 27, 6, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 8, 00), - datetime.datetime( 2010, Month.JUNE, 27, 14, 01), + datetime.datetime( 2010, Month.JUNE, 27, 14, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 16, 00), - datetime.datetime( 2010, Month.JUNE, 27, 22, 01), + datetime.datetime( 2010, Month.JUNE, 27, 22, 0o1), datetime.datetime( 2010, Month.JUNE, 27, 23, 59),], }, ToontownGlobals.HYDRANTS_BUFF_BATTLES: - { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 01), # they just animate but don't help + { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 0o1), # they just animate but don't help datetime.datetime( 2031, Month.JUNE, 7, 3, 0),], 'phaseDates': [datetime.datetime( 2010, Month.JUNE, 14, 3, 0),], # they're actually helping now }, ToontownGlobals.MAILBOXES_BUFF_BATTLES: - { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 01), # they just animate but don't help + { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 0o1), # they just animate but don't help datetime.datetime( 2031, Month.JUNE, 11, 3, 0),], #forever, impressive if we hit this! - 'phaseDates': [datetime.datetime( 2010, Month.JUNE, 18, 00, 01),], # they're actually helping now + 'phaseDates': [datetime.datetime( 2010, Month.JUNE, 18, 00, 0o1),], # they're actually helping now }, ToontownGlobals.TRASHCANS_BUFF_BATTLES: - { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 01), # they just animate but don't help + { 'startAndEndPairs': [datetime.datetime( 2010, Month.JUNE, 12, 12, 0o1), # they just animate but don't help datetime.datetime( 2031, Month.JUNE, 11, 3, 0), ], #forever, impressive if we hit this! - 'phaseDates': [datetime.datetime( 2010, Month.JUNE, 18, 00, 01),], # they're actually helping now + 'phaseDates': [datetime.datetime( 2010, Month.JUNE, 18, 00, 0o1),], # they're actually helping now }, } @@ -484,7 +482,7 @@ def adjustHolidaysForTestServer(): newStartAndEndPairs.append((adjusted.year, adjusted.month, adjusted.day, adjusted.hour, adjusted.minute, adjusted.second)) AdjustedHolidays[holidayId]['startAndEndPairs'] = newStartAndEndPairs newPhaseDates = [] - if OriginalHolidays[holidayId].has_key('phaseDates'): + if 'phaseDates' in OriginalHolidays[holidayId]: for curDate in OriginalHolidays[holidayId]['phaseDates']: adjusted = curDate - TestServerHolidayTimeDelta newPhaseDates.append((adjusted.year, adjusted.month, adjusted.day, @@ -493,7 +491,7 @@ def adjustHolidaysForTestServer(): adjustHolidaysForTestServer() # TODO put this in a notify? although it should be an info if done so -print "AdjustedHolidays = %s" % AdjustedHolidays +print("AdjustedHolidays = %s" % AdjustedHolidays) class HolidayManagerAI: notify = DirectNotifyGlobal.directNotify.newCategory('HolidayManagerAI') @@ -537,8 +535,8 @@ class HolidayManagerAI: ToontownGlobals.HALLOWEEN: HolidayInfo_Yearly( HolidaySuitInvasionManagerAI.HolidaySuitInvasionManagerAI, - [ (Month.OCTOBER, 31, 02, 0, 0), # 2am-6am PST - (Month.OCTOBER, 31, 07, 0, 0), + [ (Month.OCTOBER, 31, 0o2, 0, 0), # 2am-6am PST + (Month.OCTOBER, 31, 0o7, 0, 0), (Month.OCTOBER, 31, 10, 0, 0), # 10am-3pm PST, 1pm-6pm EST (Month.OCTOBER, 31, 15, 0, 0), @@ -546,8 +544,8 @@ class HolidayManagerAI: (Month.OCTOBER, 31, 18, 0, 0), # 6pm-10pm PST, 9pm-1am EST (Month.OCTOBER, 31, 23, 0, 0), - (Month.NOVEMBER, 1, 02, 0, 0), # 2am-6am PST - (Month.NOVEMBER, 1, 07, 0, 0), + (Month.NOVEMBER, 1, 0o2, 0, 0), # 2am-6am PST + (Month.NOVEMBER, 1, 0o7, 0, 0), (Month.NOVEMBER, 1, 10, 0, 0), # 10am-2pm PST, 1pm-5pm EST (Month.NOVEMBER, 1, 15, 0, 0), @@ -956,27 +954,6 @@ class HolidayManagerAI: ToontownGlobals.BIG_CHEESE_INVASION : [590, 599], }, ), - - ToontownGlobals.HYDRANTS_BUFF_BATTLES: HolidayInfo_Oncely( - HydrantBuffHolidayAI.HydrantBuffHolidayAI, - AdjustedHolidays[ToontownGlobals.HYDRANTS_BUFF_BATTLES]['startAndEndPairs'], - displayOnCalendar = False, - phaseDates = AdjustedHolidays[ToontownGlobals.HYDRANTS_BUFF_BATTLES]['phaseDates'], - ), - - ToontownGlobals.MAILBOXES_BUFF_BATTLES: HolidayInfo_Oncely( - MailboxBuffHolidayAI.MailboxBuffHolidayAI, - AdjustedHolidays[ToontownGlobals.MAILBOXES_BUFF_BATTLES]['startAndEndPairs'], - displayOnCalendar = False, - phaseDates = AdjustedHolidays[ToontownGlobals.MAILBOXES_BUFF_BATTLES]['phaseDates'], - ), - - ToontownGlobals.TRASHCANS_BUFF_BATTLES: HolidayInfo_Oncely( - TrashcanBuffHolidayAI.TrashcanBuffHolidayAI, - AdjustedHolidays[ToontownGlobals.TRASHCANS_BUFF_BATTLES]['startAndEndPairs'], - displayOnCalendar = False, - phaseDates = AdjustedHolidays[ToontownGlobals.TRASHCANS_BUFF_BATTLES]['phaseDates'], - ), } if not simbase.config.GetBool('want-silly-test', False): @@ -1014,13 +991,6 @@ class HolidayManagerAI: displayOnCalendar = False, ), - ToontownGlobals.POLAR_PLACE_EVENT: HolidayInfo_Yearly( - PolarPlaceEventMgrAI.PolarPlaceEventMgrAI, - # HACK! TODO: make this last indefinately - [(Month.JANUARY, 1, 0, 0, 1), - (Month.DECEMBER, 31, 23, 59, 59)], - displayOnCalendar = False, - ), ToontownGlobals.ELECTION_PROMOTION: HolidayInfo_Oncely( None, @@ -1477,29 +1447,29 @@ class HolidayManagerAI: (Month.JULY, 31, 18, 0, 0), (Month.JULY, 31, 20, 30, 0), - (Month.AUGUST, 4, 01, 0, 0), - (Month.AUGUST, 4, 05, 30, 0), + (Month.AUGUST, 4, 0o1, 0, 0), + (Month.AUGUST, 4, 0o5, 30, 0), - (Month.AUGUST, 5, 01, 0, 0), - (Month.AUGUST, 5, 05, 30, 0), + (Month.AUGUST, 5, 0o1, 0, 0), + (Month.AUGUST, 5, 0o5, 30, 0), - (Month.AUGUST, 6, 01, 0, 0), - (Month.AUGUST, 6, 05, 30, 0), + (Month.AUGUST, 6, 0o1, 0, 0), + (Month.AUGUST, 6, 0o5, 30, 0), - (Month.AUGUST, 7, 01, 0, 0), - (Month.AUGUST, 7, 05, 30, 0), + (Month.AUGUST, 7, 0o1, 0, 0), + (Month.AUGUST, 7, 0o5, 30, 0), - (Month.AUGUST, 8, 01, 0, 0), - (Month.AUGUST, 8, 05, 30, 0), + (Month.AUGUST, 8, 0o1, 0, 0), + (Month.AUGUST, 8, 0o5, 30, 0), - (Month.AUGUST, 9, 01, 0, 0), - (Month.AUGUST, 9, 05, 30, 0), + (Month.AUGUST, 9, 0o1, 0, 0), + (Month.AUGUST, 9, 0o5, 30, 0), - (Month.AUGUST, 10, 01, 0, 0), - (Month.AUGUST, 10, 05, 30, 0), + (Month.AUGUST, 10, 0o1, 0, 0), + (Month.AUGUST, 10, 0o5, 30, 0), - (Month.AUGUST, 11, 01, 0, 0), - (Month.AUGUST, 11, 05, 30, 0)], + (Month.AUGUST, 11, 0o1, 0, 0), + (Month.AUGUST, 11, 0o5, 30, 0)], displayOnCalendar = False, ), @@ -1768,7 +1738,7 @@ def createHolidays(self): localTime[1], # Current Month localTime[2], # Current Day localTime[6]) # Current WDay - for holidayId, holidayInfo in self.holidays.items(): + for holidayId, holidayInfo in list(self.holidays.items()): startTime = holidayInfo.getStartTime(date) endTime = holidayInfo.getEndTime(date) @@ -1785,7 +1755,7 @@ def createHolidays(self): start = time.localtime(startTime) if end[2] == start[2]: - raise ValueError, "createEvents: Invalid Start/End Tuple combination in holiday %s" %(holidayId) + raise ValueError("createEvents: Invalid Start/End Tuple combination in holiday %s" %(holidayId)) newDate = holidayInfo.adjustDate(date) endTime = holidayInfo.getEndTime(newDate) @@ -1812,7 +1782,7 @@ def createHolidays(self): else: self.notify.info("One time holiday %s has passed" % holidayId) - except ValueError, error: + except ValueError as error: self.notify.warning(str(error)) def waitForHolidayStart(self, holidayId, startTime): @@ -1883,7 +1853,7 @@ def startHoliday(self, holidayId, testMode = 0): try: # Start the holiday holidayObj.start() - except SingletonError, error: + except SingletonError as error: self.notify.warning("startHoliday: " + str(error)) del holidayObj return @@ -1895,7 +1865,7 @@ def startHoliday(self, holidayId, testMode = 0): self.currentHolidays[holidayId] = None # Update the news manager, which in turn updates all the clients - self.updateNewsManager(self.currentHolidays.keys()) + self.updateNewsManager(list(self.currentHolidays.keys())) # Spawn a do later for the end of the holiday currentTime = time.time() @@ -1933,7 +1903,7 @@ def endHoliday(self, holidayId, stopForever = False): self.air.writeServerEvent('holiday', holidayId, 'end') holidayInfo = self.holidays[holidayId] - if self.currentHolidays.has_key(holidayId): + if holidayId in self.currentHolidays: # Note - if the holiday does not define a class, # the None object will be stored here holidayObj = self.currentHolidays[holidayId] @@ -1949,7 +1919,7 @@ def endHoliday(self, holidayId, stopForever = False): # Update the news manager, which in turn updates all the clients # Send the negative of the holiday ID signifying the end of the holiday - self.updateNewsManager(self.currentHolidays.keys()) + self.updateNewsManager(list(self.currentHolidays.keys())) # Start the same holiday for the next time currentTime = time.time() @@ -1999,7 +1969,7 @@ def delayedEnd(self, holidayId, stopForever = False): self.notify.info("delayedEnd: %s" % holidayId) holidayInfo = self.holidays[holidayId] - if self.currentHolidays.has_key(holidayId): + if holidayId in self.currentHolidays: # Note - if the holiday does not define a class, # the None object will be stored here holidayObj = self.currentHolidays[holidayId] @@ -2011,7 +1981,7 @@ def delayedEnd(self, holidayId, stopForever = False): # Update the news manager, which in turn updates all the clients # Send the negative of the holiday ID signifying the end of the holiday - self.updateNewsManager(self.currentHolidays.keys()) + self.updateNewsManager(list(self.currentHolidays.keys())) # Start the same holiday for the next time currentTime = time.time() @@ -2051,7 +2021,7 @@ def updateNewsManager(self, holidayIdList): def isMoreXpHolidayRunning(self): """Return True if the double XP holiday is running.""" - keysList = self.currentHolidays.keys() + keysList = list(self.currentHolidays.keys()) result = False if ToontownGlobals.MORE_XP_HOLIDAY in keysList: result = True @@ -2059,7 +2029,7 @@ def isMoreXpHolidayRunning(self): def isHolidayRunning(self, holidayId): """Return true if the indicated holidayId is running.""" - keysList = self.currentHolidays.keys() + keysList = list(self.currentHolidays.keys()) result = False if holidayId in keysList: result = True @@ -2101,9 +2071,4 @@ def parseCalendarHolidays(self): # we can have multiple start times and end times, just pick the bookends firstStartTime = holidayInfo.tupleList[0][0] lastEndTime = holidayInfo.tupleList[-1][-1] - self.air.newsManager.addRelativelyCalendarHoliday(key, firstStartTime, lastEndTime) - - self.air.newsManager.sendWeeklyCalendarHolidays() - self.air.newsManager.sendYearlyCalendarHolidays() - self.air.newsManager.sendOncelyCalendarHolidays() - self.air.newsManager.sendMultipleStartHolidays() + self.air.newsManager.addRelativelyCalendarHoliday(key, firstStartTime, lastEndTime) \ No newline at end of file diff --git a/toontown/src/ai/HolidayRepeaterAI.py b/toontown/src/ai/HolidayRepeaterAI.py index 731a14d1..ca047172 100644 --- a/toontown/src/ai/HolidayRepeaterAI.py +++ b/toontown/src/ai/HolidayRepeaterAI.py @@ -5,8 +5,8 @@ from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal -import HolidayBaseAI -import ToontownMagicWordManagerAI +from . import HolidayBaseAI +from . import ToontownMagicWordManagerAI scaleFactor = 12 restartWaitTime = 60 @@ -36,7 +36,7 @@ def start(self): taskMgr.doMethodLater(aiInitTime, self.startLoop, "WaitForAir") self.aiInitialized = 1 - for holiday in self.testHolidays.keys(): + for holiday in list(self.testHolidays.keys()): # Set the holiday state to show that it has not yet begun if self.air.holidayManager.isHolidayRunning(holiday): self.air.holidayManager.endHoliday(holiday, True) @@ -71,7 +71,7 @@ def handleNewHolidayState(self, holiday): self.air.holidayManager.forcePhase(holiday, curState) if nextStepIn == -1: count = 0 - for holiday in self.testHolidayStates.keys(): + for holiday in list(self.testHolidayStates.keys()): if self.testHolidayStates[holiday] == -1: count = count+1 if count == len(self.testHolidays): @@ -85,7 +85,7 @@ def stop(self): """ End all the Test holidays """ - for holiday in self.testHolidays.keys(): + for holiday in list(self.testHolidays.keys()): if taskMgr.hasTaskNamed("testHoliday_" + str(holiday)): taskMgr.remove("testHoliday_" + str(holiday)) self.air.holidayManager.endHoliday(holiday, True) diff --git a/toontown/src/ai/NewsManager.py b/toontown/src/ai/NewsManager.py index a5446618..28a0e741 100644 --- a/toontown/src/ai/NewsManager.py +++ b/toontown/src/ai/NewsManager.py @@ -5,9 +5,9 @@ from toontown.toonbase import ToontownBattleGlobals from toontown.battle import SuitBattleGlobals from toontown.toonbase import TTLocalizer -import HolidayDecorator -import HalloweenHolidayDecorator -import CrashedLeaderBoardDecorator +from . import HolidayDecorator +from . import HalloweenHolidayDecorator +from . import CrashedLeaderBoardDecorator from direct.interval.IntervalGlobal import * import calendar from copy import deepcopy @@ -254,11 +254,11 @@ def isEnding(id): def isStarting(id): return id not in self.holidayIdList # Which holidays are ending? - toEnd = filter(isEnding, self.holidayIdList) + toEnd = list(filter(isEnding, self.holidayIdList)) for endingHolidayId in toEnd: self.endHoliday(endingHolidayId) # Which holidays are starting? - toStart = filter(isStarting, holidayIdList) + toStart = list(filter(isStarting, holidayIdList)) for startingHolidayId in toStart: self.startHoliday(startingHolidayId) messenger.send("setHolidayIdList", [holidayIdList]) diff --git a/toontown/src/ai/NewsManagerAI.py b/toontown/src/ai/NewsManagerAI.py index 3e5ecbc2..4cf92e7f 100644 --- a/toontown/src/ai/NewsManagerAI.py +++ b/toontown/src/ai/NewsManagerAI.py @@ -15,7 +15,7 @@ def __init__(self, air): self.oncelyCalendarHolidays = [] self.relativelyCalendarHolidays = [] self.multipleStartHolidays = [] - + def generate(self): DistributedObjectAI.DistributedObjectAI.generate(self) self.accept("avatarEntered", self.__handleAvatarEntered) @@ -29,10 +29,6 @@ def __handleAvatarEntered(self, avatar): numRemaining = self.air.suitInvasionManager.getNumCogsRemaining() self.sendAvatarInvasionStatus(avatar.getDoId(), cogType, numRemaining, skeleton) - - # let them know about all holidays actually... - self.sendUpdateToAvatarId(avatar.getDoId(), "holidayNotify", []) - if self.everyoneChats: avatar.d_setCommonChatFlags(ToontownGlobals.CommonChat) @@ -56,7 +52,7 @@ def sendAvatarInvasionStatus(self, avId, cogType, numRemaining, skeleton): # Send an invasion update to only one avatar self.sendUpdateToAvatarId(avId, "setInvasionStatus", [ToontownGlobals.SuitInvasionBulletin, cogType, numRemaining, skeleton]) - + def sendSystemMessage(self, message, style = 0): # Use news manager to broadcast a system message to all the clients self.sendUpdate("sendSystemMessage", [message, style]) @@ -84,7 +80,7 @@ def trolleyHolidayStart(self): def trolleyHolidayEnd(self): self.sendUpdate("setTrolleyHolidayEnd", []) - + def trolleyWeekendStart(self): self.sendUpdate("setTrolleyWeekendStart", []) @@ -152,7 +148,7 @@ def sendMultipleStartHolidays(self): def sendOncelyCalendarHolidays(self): """Force a send of the oncely calendar holidays.""" self.sendUpdate("setOncelyCalendarHolidays", [self.oncelyCalendarHolidays]) - + def addRelativelyCalendarHoliday(self, holidayId, firstStartTime, lastEndTime): """Add a new oncely holiday.""" # Note the holiday can have breaks in it. e.g. no bloodsucker invasion diff --git a/toontown/src/ai/PhasedHolidayAI.py b/toontown/src/ai/PhasedHolidayAI.py index ffed3e64..825cfb55 100644 --- a/toontown/src/ai/PhasedHolidayAI.py +++ b/toontown/src/ai/PhasedHolidayAI.py @@ -87,7 +87,7 @@ def sanityCheckPhaseDates(self): self.notify.error("holiday %d, phaseDate=%s not in between start and end times" % (self.holidayId, phaseDate)) # check the phase dates are ascending - for index in xrange( len(self.phaseDates) -1): + for index in range( len(self.phaseDates) -1): if not (self.phaseDates[index] < self.phaseDates[index +1]): self.notify.error("phaseDate=%s coming before phaseDate=%s" % (self.phaseDates[index], self.phaseDates[index+1])) diff --git a/toontown/src/ai/RaiseMaxNPCFriends.py b/toontown/src/ai/RaiseMaxNPCFriends.py index 6b3aa954..3e9c9599 100644 --- a/toontown/src/ai/RaiseMaxNPCFriends.py +++ b/toontown/src/ai/RaiseMaxNPCFriends.py @@ -3,8 +3,8 @@ class game: process = "ai" __builtins__["game"] = game() -import RepairAvatars -import DatabaseObject +from . import RepairAvatars +from . import DatabaseObject import time class NPCFriendsFixer(RepairAvatars.AvatarIterator): @@ -18,7 +18,7 @@ def fieldsToGet(self, db): def processAvatar(self, av, db): self.printSometimes(av) if hasattr(av, "maxNPCFriends") and av.maxNPCFriends < 8: - print "Fixing %s: %s" % (av.doId, av.name) + print("Fixing %s: %s" % (av.doId, av.name)) av.b_setMaxNPCFriends(8) db2 = DatabaseObject.DatabaseObject(self.air, av.doId) db2.storeObject(av, ['setMaxNPCFriends']) @@ -27,11 +27,11 @@ def processAvatar(self, av, db): def printSometimes(self, av): now = time.time() if now - self.lastPrintTime > self.printInterval: - print "Avatar %d: %s" % (av.doId, av.name) + print("Avatar %d: %s" % (av.doId, av.name)) self.lastPrintTime = now -import UtilityStart +from . import UtilityStart f = NPCFriendsFixer(simbase.air) f.start() run() diff --git a/toontown/src/ai/RemoveDeadTasks.py b/toontown/src/ai/RemoveDeadTasks.py index 2d195314..4f69a361 100644 --- a/toontown/src/ai/RemoveDeadTasks.py +++ b/toontown/src/ai/RemoveDeadTasks.py @@ -1,5 +1,5 @@ -import RepairAvatars -import DatabaseObject +from . import RepairAvatars +from . import DatabaseObject import time # this removes all traces of a list of tasks from all avatars; if they are @@ -51,7 +51,7 @@ def processAvatar(self, av, db): # and store the changes in the DB if questsChanged: - print "Fixing %s: %s" % (av.doId, av.name) + print("Fixing %s: %s" % (av.doId, av.name)) fields = ['setQuests'] if questHistoryChanged: fields.append('setQuestHistory') @@ -63,15 +63,15 @@ def processAvatar(self, av, db): def printSometimes(self, av): now = time.time() if now - self.lastPrintTime > self.printInterval: - print "Avatar %d: %s" % (av.doId, av.name) + print("Avatar %d: %s" % (av.doId, av.name)) self.lastPrintTime = now -import UtilityStart -f = DeadTaskRemover(simbase.air, (range(6979, 6999+1) + - range(7979, 7999+1) + - range(8979, 8999+1) + - range(9979, 9999+1) + - range(10979, 10999+1))) +from . import UtilityStart +f = DeadTaskRemover(simbase.air, (list(range(6979, 6999+1)) + + list(range(7979, 7999+1)) + + list(range(8979, 8999+1)) + + list(range(9979, 9999+1)) + + list(range(10979, 10999+1)))) f.start() run() diff --git a/toontown/src/ai/RepairAvatars.py b/toontown/src/ai/RepairAvatars.py index 6c3597c8..ea308d28 100644 --- a/toontown/src/ai/RepairAvatars.py +++ b/toontown/src/ai/RepairAvatars.py @@ -1,4 +1,4 @@ -import DatabaseObject +from . import DatabaseObject from direct.showbase import DirectObject from direct.showbase.PythonUtil import intersection from toontown.toon import DistributedToonAI @@ -9,6 +9,7 @@ from toontown.quest import Quests from toontown.toon import NPCToons import time +from functools import reduce HEAL_TRACK = 0 TRAP_TRACK = 1 @@ -50,27 +51,27 @@ def getAvatar(self, avId, fields=None, event=None): # we need this to check if it's a Toon fields.append('setDNAString') db.getFields(fields) - print "Avatar %s requested." % avId + print("Avatar %s requested." % avId) def saveAvatarAll(self): # Writes all the fields on the current avatar back to the # database. db = DatabaseObject.DatabaseObject(self.air, self.av.doId) db.storeObject(self.av) - print "Saved avatar %s." % (self.av.doId) + print("Saved avatar %s." % (self.av.doId)) def saveAvatar(self, *fields): # Writes only the named fields (strings passed as parameters) # on the current avatar back to the database. if (len(fields) == 0): - print "Specify the fields to save in the parameter list, or use saveAvatarAll()." + print("Specify the fields to save in the parameter list, or use saveAvatarAll().") else: db = DatabaseObject.DatabaseObject(self.air, self.av.doId) db.storeObject(self.av, fields) - print "Saved %d fields on avatar %s." % (len(fields), self.av.doId) + print("Saved %d fields on avatar %s." % (len(fields), self.av.doId)) def __gotData(self, db, retcode): - if retcode == 0 and db.values.has_key('setDNAString'): + if retcode == 0 and 'setDNAString' in db.values: self.av = DistributedToonAI.DistributedToonAI(self.air) self.av.doId = db.doId self.av.inventory = InventoryBase.InventoryBase(self.av) @@ -80,11 +81,11 @@ def __gotData(self, db, retcode): # to prevent mem leaks, you should call toon.patchDelete at # some point. - print 'Got avatar %s, "%s".' % (self.av.doId, self.av.name) + print('Got avatar %s, "%s".' % (self.av.doId, self.av.name)) if self.event is not None: messenger.send(self.event, [self.av]) else: - print "Could not get avatar %s, retcode = %s." % (db.doId, retcode) + print("Could not get avatar %s, retcode = %s." % (db.doId, retcode)) if self.event is not None: messenger.send(self.event, [None]) @@ -162,7 +163,7 @@ def fieldsToGet(self, db): def __gotData(self, db, retcode): self.requested.remove(db.doId) - if retcode == 0 and db.values.has_key('setMoney'): + if retcode == 0 and 'setMoney' in db.values: av = DistributedToonAI.DistributedToonAI(self.air) av.doId = db.doId av.inventory = InventoryBase.InventoryBase(av) @@ -172,7 +173,7 @@ def __gotData(self, db, retcode): self.nonAvatar = 0 else: if self.objIdList != None: - print "Not an avatar: %s" % (db.doId) + print("Not an avatar: %s" % (db.doId)) self.nonAvatar += 1 if self.objIdList != None or self.nonAvatar < self.endOfListCount: @@ -184,7 +185,7 @@ def __gotData(self, db, retcode): def printSometimes(self, av): now = time.time() if now - self.lastPrintTime > self.printInterval: - print "%d: %s" % (av.doId, av.name) + print("%d: %s" % (av.doId, av.name)) self.lastPrintTime = now def processAvatar(self, av, db): @@ -192,7 +193,7 @@ def processAvatar(self, av, db): def done(self): now = time.time() - print "done, %s seconds." % (now - self.startTime) + print("done, %s seconds." % (now - self.startTime)) class HouseIterator(DirectObject.DirectObject): @@ -269,8 +270,8 @@ def fieldsToGet(self, db): def __gotData(self, db, retcode): self.requested.remove(db.doId) - if retcode == 0 and (db.values.has_key('setHouseType') or - db.values.has_key('setInteriorWallpaper')): + if retcode == 0 and ('setHouseType' in db.values or + 'setInteriorWallpaper' in db.values): # Fill in dummy values of estateId, zoneId, and posIndex house = DistributedHouseAI.DistributedHouseAI( self.air, db.doId, 0, 0, 0) @@ -279,7 +280,7 @@ def __gotData(self, db, retcode): self.nonHouse = 0 else: if self.objIdList != None: - print "Not a house: %s" % (db.doId) + print("Not a house: %s" % (db.doId)) self.nonHouse += 1 if self.objIdList != None or self.nonHouse < self.endOfListCount: @@ -291,7 +292,7 @@ def __gotData(self, db, retcode): def printSometimes(self, house): now = time.time() if now - self.lastPrintTime > self.printInterval: - print "%d: %s" % (house.doId, house.name) + print("%d: %s" % (house.doId, house.name)) self.lastPrintTime = now def processHouse(self, house, db): @@ -299,7 +300,7 @@ def processHouse(self, house, db): def done(self): now = time.time() - print "done, %s seconds." % (now - self.startTime) + print("done, %s seconds." % (now - self.startTime)) class PetIterator(DirectObject.DirectObject): @@ -388,7 +389,7 @@ def fieldsToGet(self, db): def __gotData(self, db, retcode): self.requested.remove(db.doId) - if retcode == 0 and len(intersection(db.values.keys(), + if retcode == 0 and len(intersection(list(db.values.keys()), self.fieldsToGet(None))) > 0: pet = DistributedPetAI.DistributedPetAI(self.air) db.fillin(pet, self.dclass) @@ -396,7 +397,7 @@ def __gotData(self, db, retcode): self.nonPet = 0 else: if self.objIdList != None: - print "Not a pet: %s" % (db.doId) + print("Not a pet: %s" % (db.doId)) self.nonPet += 1 self.getNextPet() @@ -414,11 +415,11 @@ def printSometimes(self, pet): percent = 100. * ((self.nextObjId - self.startId) / (self.endId - self.startId)) if percent is not None: - print "%s%% complete, %s seconds" % (percent, - (now - self.startTime)) + print("%s%% complete, %s seconds" % (percent, + (now - self.startTime))) else: - print "%d: %s, %s seconds" % (pet.doId, pet.petName, - (now - self.startTime)) + print("%d: %s, %s seconds" % (pet.doId, pet.petName, + (now - self.startTime))) self.lastPrintTime = now def processPet(self, pet, db): @@ -426,7 +427,7 @@ def processPet(self, pet, db): def done(self): now = time.time() - print "done, %s seconds." % (now - self.startTime) + print("done, %s seconds." % (now - self.startTime)) class AvatarFixer(AvatarIterator): @@ -436,8 +437,8 @@ def processAvatar(self, av, db): changed = av.fixAvatar() if changed: db2 = DatabaseObject.DatabaseObject(self.air, av.doId) - db2.storeObject(av, db.values.keys()) - print "%d: %s repaired (account %s)." % (av.doId, av.name, av.accountName) + db2.storeObject(av, list(db.values.keys())) + print("%d: %s repaired (account %s)." % (av.doId, av.name, av.accountName)) return numTracks = reduce(lambda a, b: a+b, av.trackArray) @@ -455,12 +456,12 @@ def processAvatar(self, av, db): toNpc = questDesc[2] if (not Quests.questExists(questId)): - print 'WARNING: av has quest that is not in quest dict: ', av.doId, questId + print('WARNING: av has quest that is not in quest dict: ', av.doId, questId) continue if (questId in [160, 161, 162, 161]): if rewardId != 100: - print ('WARNING: av has quest: %s with reward: %s' % (questId, rewardId)) + print(('WARNING: av has quest: %s with reward: %s' % (questId, rewardId))) questDesc[3] = 100 fixed = 1 continue @@ -475,10 +476,10 @@ def processAvatar(self, av, db): if ((toNpc != 1000) and (NPCToons.NPCToonDict[toNpc][5] == NPCToons.NPC_HQ)): - print ('WARNING: av has quest: %s to visit NPC_HQ: %s' % (questId, toNpc)) - print 'before: ', av.quests + print(('WARNING: av has quest: %s to visit NPC_HQ: %s' % (questId, toNpc))) + print('before: ', av.quests) questDesc[2] = Quests.ToonHQ - print 'after: ', av.quests + print('after: ', av.quests) fixed = 1 continue @@ -489,13 +490,13 @@ def processAvatar(self, av, db): # Make sure they are not training any tracks they have already trained if (trackProgressId >= 0) and (trackAccess[trackProgressId] == 1): print ("WARNING: av training track he already has") - print "Track progress id: ", trackProgressId - print "Track access: ", trackAccess - print "Tier: ", av.rewardTier + print("Track progress id: ", trackProgressId) + print("Track access: ", trackAccess) + print("Tier: ", av.rewardTier) if av.rewardTier in [0, 1]: - print "ERROR: You should not be here" + print("ERROR: You should not be here") elif av.rewardTier in [2, 3]: - print 'sound or heal' + print('sound or heal') if av.trackArray[SOUND_TRACK] and not av.trackArray[HEAL_TRACK]: trackProgressId = HEAL_TRACK elif av.trackArray[HEAL_TRACK] and not av.trackArray[SOUND_TRACK]: @@ -503,13 +504,13 @@ def processAvatar(self, av, db): else: trackProgressId = HEAL_TRACK av.b_setTrackProgress(trackProgressId, trackProgress) - print "Fixed trackProgressId: ", trackProgressId + print("Fixed trackProgressId: ", trackProgressId) fixed = 1 elif av.rewardTier in [4]: - print "ERROR: You should not be here" + print("ERROR: You should not be here") elif av.rewardTier in [5, 6]: - print 'drop or lure' + print('drop or lure') if av.trackArray[DROP_TRACK] and not av.trackArray[LURE_TRACK]: trackProgressId = LURE_TRACK elif av.trackArray[LURE_TRACK] and not av.trackArray[DROP_TRACK]: @@ -517,14 +518,14 @@ def processAvatar(self, av, db): else: trackProgressId = DROP_TRACK av.b_setTrackProgress(trackProgressId, trackProgress) - print "Fixed trackProgressId: ", trackProgressId + print("Fixed trackProgressId: ", trackProgressId) fixed = 1 elif av.rewardTier in [7]: - print "ERROR: You should not be here" + print("ERROR: You should not be here") elif av.rewardTier in [8]: - print "ERROR: You should not be here" + print("ERROR: You should not be here") elif av.rewardTier in [9, 10]: - print 'trap or heal, trap or sound' + print('trap or heal, trap or sound') if av.trackArray[SOUND_TRACK] and not av.trackArray[HEAL_TRACK]: trackProgressId = HEAL_TRACK elif av.trackArray[HEAL_TRACK] and not av.trackArray[SOUND_TRACK]: @@ -532,12 +533,12 @@ def processAvatar(self, av, db): else: trackProgressId = TRAP_TRACK av.b_setTrackProgress(trackProgressId, trackProgress) - print "Fixed trackProgressId: ", trackProgressId + print("Fixed trackProgressId: ", trackProgressId) fixed = 1 elif av.rewardTier in [11]: - print "ERROR: You should not be here" + print("ERROR: You should not be here") elif av.rewardTier in [12, 13]: - print 'all sort of choices' + print('all sort of choices') if not av.trackArray[HEAL_TRACK]: trackProgressId = HEAL_TRACK elif not av.trackArray[SOUND_TRACK]: @@ -549,13 +550,13 @@ def processAvatar(self, av, db): elif not av.trackArray[TRAP_TRACK]: trackProgressId = TRAP_TRACK else: - print "ERROR" + print("ERROR") av.b_setTrackProgress(trackProgressId, trackProgress) - print "Fixed trackProgressId: ", trackProgressId + print("Fixed trackProgressId: ", trackProgressId) fixed = 1 else: - print "ERROR: You should not be here" - print + print("ERROR: You should not be here") + print() # clean up track access if av.fixTrackAccess(): @@ -563,7 +564,7 @@ def processAvatar(self, av, db): # This was an unfortunate typo in Quests.py if maxMoney == 10: - print 'bad maxMoney limit == 10' + print('bad maxMoney limit == 10') av.b_setMaxMoney(100) # Fill er up cause we feel bad av.b_setMoney(100) @@ -571,13 +572,13 @@ def processAvatar(self, av, db): if av.rewardTier == 5: if hp < 25 or hp > 34: - print 'bad hp: ', + print('bad hp: ', end=' ') # Somehow they got here without choosing a track if trackProgressId == -1: - print 'bad track training in tier 5!' - print ('avId: %s, trackProgressId: %s, trackProgress: %s' % - (av.doId, trackProgressId, trackProgress)) + print('bad track training in tier 5!') + print(('avId: %s, trackProgressId: %s, trackProgress: %s' % + (av.doId, trackProgressId, trackProgress))) av.b_setQuestHistory([]) av.b_setQuests([]) # Make them choose again @@ -587,14 +588,14 @@ def processAvatar(self, av, db): av.inventory.zeroInv() av.inventory.maxOutInv() av.d_setInventory(av.inventory.makeNetString()) - print 'new track access: ', av.trackArray + print('new track access: ', av.trackArray) fixed = 1 elif av.rewardTier == 7: if hp < 34 or hp > 43: - print 'bad hp: ', + print('bad hp: ', end=' ') if trackProgressId != -1: - print 'bad track training in tier 7!' + print('bad track training in tier 7!') av.b_setQuestHistory([]) av.b_setQuests([]) av.b_setRewardHistory(7, []) @@ -612,8 +613,8 @@ def processAvatar(self, av, db): if fixed: db = DatabaseObject.DatabaseObject(self.air, av.doId) db.storeObject(av) - print "Avatar repaired." - print + print("Avatar repaired.") + print() return @@ -667,13 +668,13 @@ def processAvatar(self, av, db): #print 'new: ', newDNA if av.doId % 10000 == 0: - print ("Working on avatar: %s" % av.doId) + print(("Working on avatar: %s" % av.doId)) #print ("%s, %s, %s, %s, %s" % # (av.doId, av.maxHp, len(av.hoodsVisited), len(av.safeZonesVisited), cogCount)) self.hoodInfoStore.record(av.maxHp, len(av.hoodsVisited), len(av.safeZonesVisited)) return - print ("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s" % + print(("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s" % (av.doId, av.name, av.maxHp, @@ -698,7 +699,7 @@ def processAvatar(self, av, db): av.experience.experience[4], av.experience.experience[5], av.experience.experience[6], - )) + ))) @@ -731,11 +732,11 @@ def __init__(self): def maybePrint(self): self.__printCount += 1 if self.__printCount % 100 == 0: - for hp, count in self.avatarCount.items(): + for hp, count in list(self.avatarCount.items()): if count > 0: - print ("hp: %d count: %d hoods: %s sz: %s" % - (hp, count, self.hoodsVisited[hp], self.safeZonesVisited[hp])) - print + print(("hp: %d count: %d hoods: %s sz: %s" % + (hp, count, self.hoodsVisited[hp], self.safeZonesVisited[hp]))) + print() def record(self, hp, numHoods, numSafeZones): self.maybePrint() diff --git a/toontown/src/ai/ScavengerHuntMgrAI.py b/toontown/src/ai/ScavengerHuntMgrAI.py index 59eba8d5..a0683988 100644 --- a/toontown/src/ai/ScavengerHuntMgrAI.py +++ b/toontown/src/ai/ScavengerHuntMgrAI.py @@ -10,7 +10,7 @@ from toontown.uberdog import DataStoreGlobals import time -import cPickle +import pickle # This dictionary defines the relationship between the scavenger hunt goal id and the zone where the goal is located. # goalId: zoneId @@ -73,11 +73,11 @@ def start(self): # Create the hunt self.hunt = ScavengerHuntBase(scavengerHuntId, self.holidayId) - self.hunt.defineGoals(self.goals.keys()) + self.hunt.defineGoals(list(self.goals.keys())) # Send a list with one item in it: [0, (0, 1, 2, 3, 4, 5)] # This milestone defines the end of the hunt. - self.hunt.defineMilestones((x[0],x[1][0]) for x in self.milestones.items()) + self.hunt.defineMilestones((x[0],x[1][0]) for x in list(self.milestones.items())) self.createListeners() @@ -91,7 +91,7 @@ def createListeners(self): """ Create the listeners that will look for an event in the relavent zone """ - for id in self.goals.keys(): + for id in list(self.goals.keys()): mgrAI = DistributedScavengerHuntTargetAI.DistributedScavengerHuntTargetAI(self.air, self.hunt, id, @@ -105,7 +105,7 @@ def stop(self): # let the holiday system know we stopped bboard.remove(ScavengerHuntMgrAI.PostName) # remove the targetAI's and their distributed counterparts - for zone in self.goals.keys(): + for zone in list(self.goals.keys()): self.targets[zone].requestDelete() self.storeClient.closeStore() @@ -157,7 +157,7 @@ def __handleResult(self, avId, done_goals, goal): # if the scavenger hunt is complete and respond accordingly. if goal in done_goals: ScavengerHuntMgrAI.notify.debug( - `avId`+' already found Scavenger hunt target '+`goal`+': '+`self.goals.get(goal, 'INVALID GOAL ID IN '+self.PostName)`) + repr(avId)+' already found Scavenger hunt target '+repr(goal)+': '+repr(self.goals.get(goal, 'INVALID GOAL ID IN '+self.PostName))) av = self.air.doId2do.get(avId) milestoneIds = self.hunt.getRecentMilestonesHit(done_goals+[goal], goal) @@ -165,7 +165,7 @@ def __handleResult(self, avId, done_goals, goal): if milestoneIds: for id in milestoneIds: ScavengerHuntMgrAI.notify.debug( - `avId`+' hit milestone ' + `id` + ': ' + self.milestones.get(milestoneIds[id], [None, 'Undefined milestone id in '+self.PostName])[1]) + repr(avId)+' hit milestone ' + repr(id) + ': ' + self.milestones.get(milestoneIds[id], [None, 'Undefined milestone id in '+self.PostName])[1]) if (id == 0): # handle found all targets self.huntCompletedReward(avId, goal) @@ -173,9 +173,9 @@ def __handleResult(self, avId, done_goals, goal): self.huntGoalFound(avId, goal) else: self.huntGoalAlreadyFound(avId) - elif 0 <= goal <= len(self.goals.keys()): + elif 0 <= goal <= len(list(self.goals.keys())): ScavengerHuntMgrAI.notify.debug( - `avId`+' found Scavenger hunt target '+`goal`) + repr(avId)+' found Scavenger hunt target '+repr(goal)) av = self.air.doId2do.get(avId) if not av: @@ -187,11 +187,11 @@ def __handleResult(self, avId, done_goals, goal): if milestoneIds: for id in milestoneIds: ScavengerHuntMgrAI.notify.debug( - `avId`+' hit milestone ' + `id` + ': ' + self.milestones.get(milestoneIds[id], [None, 'Undefined milestone id in '+self.PostName])[1]) + repr(avId)+' hit milestone ' + repr(id) + ': ' + self.milestones.get(milestoneIds[id], [None, 'Undefined milestone id in '+self.PostName])[1]) if (id == 0): # handle found all targets # Wait for the goal found reward to complete - taskMgr.doMethodLater(10, self.huntCompletedReward, `avId`+'-huntCompletedReward', extraArgs = [avId, goal, True]) + taskMgr.doMethodLater(10, self.huntCompletedReward, repr(avId)+'-huntCompletedReward', extraArgs = [avId, goal, True]) self.huntGoalFound(avId, goal) else: self.huntGoalFound(avId, goal) diff --git a/toontown/src/ai/ServerEventBuffer.py b/toontown/src/ai/ServerEventBuffer.py index 08060c63..83f402ae 100644 --- a/toontown/src/ai/ServerEventBuffer.py +++ b/toontown/src/ai/ServerEventBuffer.py @@ -63,7 +63,7 @@ def flush(self): if not len(self.events): return msg = "" - eventNames = self.events.keys() + eventNames = list(self.events.keys()) eventNames.sort() for eventName in eventNames: msg += "%s:%s" % (eventName, self.events[eventName]) diff --git a/toontown/src/ai/ToontownAIMsgTypes.py b/toontown/src/ai/ToontownAIMsgTypes.py index 3f22f2e2..dbde0f5e 100644 --- a/toontown/src/ai/ToontownAIMsgTypes.py +++ b/toontown/src/ai/ToontownAIMsgTypes.py @@ -9,4 +9,6 @@ PARTY_MANAGER_UD_TO_ALL_AI = 1042 IN_GAME_NEWS_MANAGER_UD_TO_ALL_AI = 1043 +STATESERVER_ADD_SHARD = 2090 + DBSERVER_PET_OBJECT_TYPE = 5 diff --git a/toontown/src/ai/ToontownAIRepository.py b/toontown/src/ai/ToontownAIRepository.py index 13063c9d..0acaa53b 100644 --- a/toontown/src/ai/ToontownAIRepository.py +++ b/toontown/src/ai/ToontownAIRepository.py @@ -8,14 +8,14 @@ from toontown.safezone import DistributedMMPianoAI from toontown.safezone import DistributedDGFlowerAI from toontown.safezone import DistributedTrolleyAI -#from otp.friends import FriendManagerAI +from otp.friends import FriendManagerAI from toontown.shtiker import DeleteManagerAI from toontown.safezone import SafeZoneManagerAI -import ToontownMagicWordManagerAI +from . import ToontownMagicWordManagerAI from toontown.tutorial import TutorialManagerAI from toontown.catalog import CatalogManagerAI from otp.ai import TimeManagerAI -import WelcomeValleyManagerAI +from . import WelcomeValleyManagerAI from toontown.building import DistributedBuildingMgrAI from toontown.building import DistributedTrophyMgrAI from toontown.estate import DistributedBankMgrAI @@ -26,7 +26,6 @@ from toontown.hood import BRHoodDataAI from toontown.hood import DLHoodDataAI from toontown.hood import CSHoodDataAI -from toontown.hood import GSHoodDataAI from toontown.hood import OZHoodDataAI from toontown.hood import GZHoodDataAI from toontown.hood import CashbotHQDataAI @@ -39,7 +38,7 @@ from toontown.coghq import MintManagerAI from toontown.coghq import LawOfficeManagerAI from toontown.coghq import CountryClubManagerAI -import NewsManagerAI +from . import NewsManagerAI from toontown.hood import ZoneUtil from toontown.fishing import DistributedFishingPondAI from toontown.safezone import DistributedFishingSpotAI @@ -51,7 +50,7 @@ from toontown.safezone import ButterflyGlobals from toontown.estate import EstateManagerAI from toontown.suit import SuitInvasionManagerAI -import HolidayManagerAI +from . import HolidayManagerAI from toontown.effects import FireworkManagerAI from toontown.coghq import CogSuitManagerAI from toontown.coghq import PromotionManagerAI @@ -73,13 +72,13 @@ import os import time -import DatabaseObject +from . import DatabaseObject from direct.distributed.PyDatagram import PyDatagram from direct.distributed.PyDatagramIterator import PyDatagramIterator -from ToontownAIMsgTypes import * +from .ToontownAIMsgTypes import * from otp.otpbase.OTPGlobals import * from toontown.distributed.ToontownDistrictAI import ToontownDistrictAI -#from otp.distributed.DistributedDirectoryAI import DistributedDirectoryAI +from otp.distributed.DistributedDirectoryAI import DistributedDirectoryAI from toontown.toon import DistributedToonAI from otp.distributed import OtpDoGlobals from toontown.uberdog import DistributedPartyManagerAI @@ -88,17 +87,18 @@ from toontown.parties import ToontownTimeManager from toontown.coderedemption.TTCodeRedemptionMgrAI import TTCodeRedemptionMgrAI from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI +from toontown.ai.AIZoneData import AIZoneDataStore -import ToontownGroupManager +from . import ToontownGroupManager if __debug__: import pdb - + class ToontownAIRepository(AIDistrict): notify = DirectNotifyGlobal.directNotify.newCategory( "ToontownAIRepository") - # The zone table determines which dnaStores are created and + # The zone table determines which dnaStores are created and # whether bulding manager or suit planner ai objects are created. # The elements consist of: # (int the_zone_ID, bool create_building_manager, bool create_suit_planner) @@ -142,7 +142,7 @@ class ToontownAIRepository(AIDistrict): ), OutdoorZone: ([OutdoorZone, 0, 0], - ), + ), SellbotHQ: ([SellbotHQ, 0, 1], [SellbotHQ + 200, 0, 1], @@ -157,8 +157,8 @@ class ToontownAIRepository(AIDistrict): GolfZone: ([GolfZone, 0, 0], ), - BossbotHQ: ([BossbotHQ, 0, 0], - ), + BossbotHQ: ([BossbotHQ, 0, 0], + ), } @@ -193,7 +193,7 @@ def __init__(self, *args, **kw): # Set a hook so we can process queryToonMaxHp() requests. self.accept('queryToonMaxHp', self.__queryToonMaxHpResponse) - + # For debugging wantNewToonhall = simbase.config.GetBool('want-new-toonhall', 1) if (not wantNewToonhall) or \ @@ -202,14 +202,12 @@ def __init__(self, *args, **kw): npcId = 2018+i if npcId in NPCToons.NPCToonDict: del NPCToons.NPCToonDict[npcId] - - NPCToons.generateZone2NpcDict() if not simbase.config.GetBool('want-suits-everywhere', 1): # This is a special mode for development: we don't want # suits walking around all over the world. Turn off all # the SuitPlanner flags. - for zones in self.zoneTable.values(): + for zones in list(self.zoneTable.values()): for zone in zones: zone[2] = 0 @@ -245,7 +243,7 @@ def __init__(self, *args, **kw): self.bingoMgr = None self.toontownTimeManager = ToontownTimeManager.ToontownTimeManager() - self.toontownTimeManager.updateLoginTimes(time.time(), time.time(), globalClock.getRealTime()) + self.toontownTimeManager.updateLoginTimes(time.time(), time.time(), globalClock.getRealTime()) # turn on garbage-collection debugging to see if it's related # to the chugs we're seeing @@ -253,34 +251,22 @@ def __init__(self, *args, **kw): if simbase.config.GetBool('gc-debug', 0): import gc gc.set_debug(gc.DEBUG_STATS) - - self.deliveryManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_DELIVERY_MANAGER, - "DistributedDeliveryManager") - - self.mailManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_MAIL_MANAGER, - "DistributedMailManager") #self.partyManager = self.generateGlobalObject( # OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, - # "DistributedPartyManager") + # "DistributedPartyManager") #self.codeRedemptionManager = self.generateGlobalObject( # OtpDoGlobals.OTP_DO_ID_TOONTOWN_CODE_REDEMPTION_MANAGER, - # "TTCodeRedemptionMgr") + # "TTCodeRedemptionMgr") #self.randomSourceManager = self.generateGlobalObject( # OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE, - # "NonRepeatableRandomSource") + # "NonRepeatableRandomSource") - if simbase.config.GetBool('want-ddsm', 1): - self.dataStoreManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_TEMP_STORE_MANAGER, - "DistributedDataStoreManager") - self.groupManager = ToontownGroupManager.ToontownGroupManager() - + self.zoneDataStore = AIZoneDataStore() + def getGameDoId(self): return OTP_DO_ID_TOONTOWN @@ -311,7 +297,7 @@ def saveBuildings(self): Saves the state of all the buildings on all the managed streets, so it will be restored on AI restart. """ - for mgr in self.buildingManagers.values(): + for mgr in list(self.buildingManagers.values()): mgr.save() def genDNAFileName(self, zoneId): @@ -337,7 +323,7 @@ def lookupDNAFileName(self, filename): found = vfs.resolveFilename(dnaFile, self.dnaSearchPath) return dnaFile.cStr() - + ## phase = streetPhaseMap[hoodId] ## if hoodId==zoneId: ## zoneId="sz" @@ -361,7 +347,7 @@ def loadDNA(self): """ self.dnaStoreMap = {} self.dnaDataMap = {} - for zones in self.zoneTable.values(): + for zones in list(self.zoneTable.values()): for zone in zones: zoneId=zone[0] dnaStore = DNAStorage() @@ -369,8 +355,7 @@ def loadDNA(self): dnaData = self.loadDNAFileAI(dnaStore, dnaFileName) self.dnaStoreMap[zoneId] = dnaStore self.dnaDataMap[zoneId] = dnaData - - + def createObjects(self): # First, load up all of our DNA files for the world. self.loadDNA() @@ -394,28 +379,6 @@ def createObjects(self): self.timeManager.generateOtpObject( self.district.getDoId(), OTPGlobals.UberZone) - self.partyManager = DistributedPartyManagerAI.DistributedPartyManagerAI(self) - self.partyManager.generateOtpObject( - self.district.getDoId(), OTPGlobals.UberZone) - - self.inGameNewsMgr = DistributedInGameNewsMgrAI.DistributedInGameNewsMgrAI(self) - self.inGameNewsMgr.generateOtpObject( - self.district.getDoId(), OTPGlobals.UberZone) - - self.cpuInfoMgr = DistributedCpuInfoMgrAI.DistributedCpuInfoMgrAI(self) - self.cpuInfoMgr.generateOtpObject( - self.district.getDoId(), OTPGlobals.UberZone) - - if config.GetBool('want-code-redemption', 1): - self.codeRedemptionManager = TTCodeRedemptionMgrAI(self) - self.codeRedemptionManager.generateOtpObject( - self.district.getDoId(), OTPGlobals.UberZone) - - self.randomSourceManager = NonRepeatableRandomSourceAI(self) - # QuietZone so that the client doesn't get a generate - self.randomSourceManager.generateOtpObject( - self.district.getDoId(), OTPGlobals.QuietZone) - self.welcomeValleyManager = WelcomeValleyManagerAI.WelcomeValleyManagerAI(self) self.welcomeValleyManager.generateWithRequired(OTPGlobals.UberZone) @@ -429,8 +392,8 @@ def createObjects(self): self.bankMgr.generateWithRequired(OTPGlobals.UberZone) # The Friend Manager - #self.friendManager = FriendManagerAI.FriendManagerAI(self) - #self.friendManager.generateWithRequired(OTPGlobals.UberZone) + self.friendManager = FriendManagerAI.FriendManagerAI(self) + self.friendManager.generateWithRequired(OTPGlobals.UberZone) # The Delete Manager self.deleteManager = DeleteManagerAI.DeleteManagerAI(self) @@ -445,7 +408,7 @@ def createObjects(self): if magicWordString not in ('', '0', '#f'): self.magicWordManager = ToontownMagicWordManagerAI.ToontownMagicWordManagerAI(self) self.magicWordManager.generateWithRequired(OTPGlobals.UberZone) - + # The Tutorial manager self.tutorialManager = TutorialManagerAI.TutorialManagerAI(self) self.tutorialManager.generateWithRequired(OTPGlobals.UberZone) @@ -469,35 +432,35 @@ def createObjects(self): # The Firework Manager: This object really only exists so we can # fire off fireworks with magic words. Normally this is a holiday # manager driven event and therefore the constructor needs a - # holidayId. Pass in fourth of july as default. To do: override + # holidayId. Pass in fourth of july as default. To do: override # holiday ID with a magic word self.fireworkManager = FireworkManagerAI.FireworkManagerAI( self, NEWYEARS_FIREWORKS) - + # Create an NPC Dialogue manager that manages conversations # amongst a set of NPC's self.dialogueManager = NPCDialogueManagerAI.NPCDialogueManagerAI() - + # The News manager self.newsManager = NewsManagerAI.NewsManagerAI(self) self.newsManager.generateWithRequired(OTPGlobals.UberZone) # The Factory Manager self.factoryMgr = FactoryManagerAI.FactoryManagerAI(self) - + # The Mint Manager self.mintMgr = MintManagerAI.MintManagerAI(self) - + #the Law Office Manager self.lawMgr = LawOfficeManagerAI.LawOfficeManagerAI(self) # The Cog Country Club Manager - self.countryClubMgr = CountryClubManagerAI.CountryClubManagerAI(self) + self.countryClubMgr = CountryClubManagerAI.CountryClubManagerAI(self) if simbase.wantKarts: # The Race Manager self.raceMgr = RaceManagerAI.RaceManagerAI(self) - + self.cogSuitMgr = CogSuitManagerAI.CogSuitManagerAI(self) self.promotionMgr = PromotionManagerAI.PromotionManagerAI(self) @@ -517,12 +480,7 @@ def createObjects(self): self.startupHood(BRHoodDataAI.BRHoodDataAI(self)) self.startupHood(DLHoodDataAI.DLHoodDataAI(self)) self.startupHood(CSHoodDataAI.CSHoodDataAI(self)) - self.startupHood(GSHoodDataAI.GSHoodDataAI(self)) - self.startupHood(OZHoodDataAI.OZHoodDataAI(self)) - self.startupHood(GZHoodDataAI.GZHoodDataAI(self)) self.startupHood(CashbotHQDataAI.CashbotHQDataAI(self)) - self.startupHood(LawbotHQDataAI.LawbotHQDataAI(self)) - self.startupHood(BossbotHQDataAI.BossbotHQDataAI(self)) # The Holiday Manager should be instantiated after the each # of the hoods and estateMgrAI are generated because Bingo Night @@ -536,11 +494,18 @@ def createObjects(self): # them can be used to fill the world with requests for suit # buildings. if self.suitPlanners: - self.suitPlanners.values()[0].assignInitialSuitBuildings() - + list(self.suitPlanners.values())[0].assignInitialSuitBuildings() + # mark district as avaliable self.district.b_setAvailable(1) + # Register our AI with the StateServer. + dg = PyDatagram() + dg.addServerHeader(self.serverId, self.ourChannel, STATESERVER_ADD_SHARD) + dg.addUint32(self.districtId) + dg.addString(self.districtName) + self.send(dg) + # Now that everything's created, start checking the leader # boards for correctness. We only need to check every 30 # seconds or so. @@ -551,11 +516,11 @@ def createObjects(self): def __leaderboardFlush(self, task): messenger.send('leaderboardFlush') return Task.again - + def getWelcomeValleyCount(self): # avatars in Welcom Vally - return self.welcomeValleyManager.getAvatarCount(); - + return self.welcomeValleyManager.getAvatarCount(); + def getHandleClassNames(self): # This function should return a tuple or list of string names # that represent distributed object classes for which we want @@ -573,7 +538,7 @@ def deleteObjects(self): self.hoods = [] taskMgr.remove('leaderboardFlush') - + def queryToonMaxHp(self, toonId, callback, *args): """ Looks up the maxHp of the given toon, and calls the given @@ -636,7 +601,7 @@ def findPartyHats(self, dnaGroup, zoneId, overrideDNAZone = 0): if ((isinstance(dnaGroup, DNAGroup)) and # If it is a DNAGroup, and the name has party_gate, count it - (string.find(dnaGroup.getName(), 'party_gate') >= 0)): + (dnaGroup.getName().find('party_gate') >= 0)): # Here's a party hat! ph = DistributedPartyGateAI.DistributedPartyGateAI(self) ph.generateWithRequired(zoneId) @@ -653,7 +618,7 @@ def findPartyHats(self, dnaGroup, zoneId, overrideDNAZone = 0): for i in range(dnaGroup.getNumChildren()): childPartyHats = self.findPartyHats(dnaGroup.at(i), zoneId, overrideDNAZone) partyHats += childPartyHats - + return partyHats def findFishingPonds(self, dnaGroup, zoneId, area, overrideDNAZone = 0): @@ -670,7 +635,7 @@ def findFishingPonds(self, dnaGroup, zoneId, area, overrideDNAZone = 0): if ((isinstance(dnaGroup, DNAGroup)) and # If it is a DNAGroup, and the name starts with fishing_pond, count it - (string.find(dnaGroup.getName(), 'fishing_pond') >= 0)): + (dnaGroup.getName().find('fishing_pond') >= 0)): # Here's a fishing pond! fishingPondGroups.append(dnaGroup) fp = DistributedFishingPondAI.DistributedFishingPondAI(self, area) @@ -691,7 +656,7 @@ def findFishingPonds(self, dnaGroup, zoneId, area, overrideDNAZone = 0): fishingPonds += childFishingPonds fishingPondGroups += childFishingPondGroups return fishingPonds, fishingPondGroups - + def findFishingSpots(self, dnaPondGroup, distPond): """ Scans the given DNAGroup pond for fishing spots. These @@ -704,8 +669,8 @@ def findFishingSpots(self, dnaPondGroup, distPond): # Search the children of the pond for i in range(dnaPondGroup.getNumChildren()): dnaGroup = dnaPondGroup.at(i) - if ((isinstance(dnaGroup, DNAProp)) and - (string.find(dnaGroup.getCode(), 'fishing_spot') >= 0)): + if ((isinstance(dnaGroup, DNAProp)) and + (dnaGroup.getCode().find('fishing_spot') >= 0)): # Here's a fishing spot! pos = dnaGroup.getPos() hpr = dnaGroup.getHpr() @@ -720,7 +685,7 @@ def findFishingSpots(self, dnaPondGroup, distPond): def findRacingPads(self, dnaGroup, zoneId, area, overrideDNAZone = 0, type = 'racing_pad'): racingPads = [] racingPadGroups = [] - if ((isinstance(dnaGroup, DNAGroup)) and (string.find(dnaGroup.getName(), type) >= 0)): + if ((isinstance(dnaGroup, DNAGroup)) and (dnaGroup.getName().find(type) >= 0)): racingPadGroups.append(dnaGroup) if (type == 'racing_pad'): nameInfo = dnaGroup.getName().split('_') @@ -743,25 +708,25 @@ def findRacingPads(self, dnaGroup, zoneId, area, overrideDNAZone = 0, type = 'ra def getRacingPadList(self): list = [] - for do in self.doId2do.values(): + for do in list(self.doId2do.values()): if (isinstance(do, DistributedRacePadAI)): list.append(do.doId) return list def getViewPadList(self): list = [] - for do in self.doId2do.values(): + for do in list(self.doId2do.values()): if (isinstance(do, DistributedViewPadAI)): list.append(do.doId) return list def getStartingBlockDict(self): dict = {} - for do in self.doId2do.values(): + for do in list(self.doId2do.values()): if (isinstance(do, DistributedStartingBlockAI)): if (isinstance(do.kartPad, DistributedRacePadAI)): # Add the do to the dict - if (dict.has_key(do.kartPad.doId)): + if (do.kartPad.doId in dict): dict[do.kartPad.doId].append(do.doId) else: dict[do.kartPad.doId] = [do.doId] @@ -769,11 +734,11 @@ def getStartingBlockDict(self): def getViewingBlockDict(self): dict = {} - for do in self.doId2do.values(): + for do in list(self.doId2do.values()): if (isinstance(do, DistributedStartingBlockAI)): if (isinstance(do.kartPad, DistributedViewPadAI)): # Add the do to the dict - if (dict.has_key(do.kartPad.doId)): + if (do.kartPad.doId in dict): dict[do.kartPad.doId].append(do.doId) else: dict[do.kartPad.doId] = [do.doId] @@ -789,7 +754,7 @@ def findStartingBlocks(self, dnaRacingPadGroup, distRacePad): dnaGroup = dnaRacingPadGroup.at(i) # TODO - check if DNAProp instance - if ((string.find(dnaGroup.getName(), 'starting_block') >= 0)): + if ((dnaGroup.getName().find('starting_block') >= 0)): padLocation = dnaGroup.getName().split('_')[2] pos = dnaGroup.getPos() hpr = dnaGroup.getHpr() @@ -803,28 +768,28 @@ def findStartingBlocks(self, dnaRacingPadGroup, distRacePad): else: self.notify.debug("Found dnaGroup that is not a starting_block under a race pad group") return startingBlocks - + def findLeaderBoards(self, dnaPool, zoneID): ''' Find and return leader boards ''' leaderBoards = [] - if (string.find(dnaPool.getName(), 'leaderBoard') >= 0): + if (dnaPool.getName().find('leaderBoard') >= 0): #found a leader board pos = dnaPool.getPos() hpr = dnaPool.getHpr() - + lb = DistributedLeaderBoardAI(self, dnaPool.getName(), zoneID, [], pos, hpr) lb.generateWithRequired(zoneID) leaderBoards.append(lb) - else: + else: for i in range(dnaPool.getNumChildren()): result = self.findLeaderBoards(dnaPool.at(i), zoneID) if result: leaderBoards += result - + return leaderBoards - + def loadDNAFileAI(self, dnaStore, dnaFile): return loadDNAFileAI(dnaStore, dnaFile, CSDefault) @@ -855,7 +820,7 @@ def getEstate(self, avId, zone, callback): self.__queryEstateContext += 1 self.__queryEstateFuncMap[context] = callback self.__sendGetEstate(avId, context) - + def __sendGetEstate(self, avId, context): """ Sends the query-object message to the server. The return @@ -887,14 +852,14 @@ def __handleGetEstateResp(self, di): if (retCode == 0): estateId = di.getUint32() numFields = di.getUint16() - + for i in range(numFields): key = di.getString() #key = key[2:] #right why to do this???? ask Roger and/or Dave - value = di.getString() + value = di.getString().encode("ISO-8859-1") found = di.getUint8() - + #print key; #print value; #print found; @@ -905,15 +870,14 @@ def __handleGetEstateResp(self, di): #vdgi = PyDatagramIterator(vdg) # do something with this data estateVal[key] = value - - + numHouses = di.getUint16() self.notify.debug("numHouses = %s" % numHouses) houseId = [None] * numHouses for i in range(numHouses): houseId[i] = di.getUint32() self.notify.debug("houseId = %s" % houseId[i]) - + numHouseKeys = di.getUint16() self.notify.debug("numHouseKeys = %s" % numHouseKeys) houseKey = [None] * numHouseKeys @@ -928,7 +892,7 @@ def __handleGetEstateResp(self, di): assert(numHouses2 == numHouses) tempHouseVal[i] = [None] * numHouses for j in range(numHouses): - tempHouseVal[i][j] = di.getString() + tempHouseVal[i][j] = di.getString().encode("ISO-8859-1") # do we need a check for "value found" here? #print houseKey @@ -936,17 +900,16 @@ def __handleGetEstateResp(self, di): numHouseFound = di.getUint16() - # keep track of which attributes are found foundVal = [None] * numHouses for i in range(numHouses): foundVal[i] = [None] * numHouseVal - + # create empty dictionaries for each house houseVal = [] for i in range(numHouses): houseVal.append({}) - + for i in range(numHouseVal): hvLen = di.getUint16() for j in range(numHouses): @@ -959,7 +922,7 @@ def __handleGetEstateResp(self, di): numPets = di.getUint16() petIds = [] - for i in xrange(numPets): + for i in range(numPets): petIds.append(di.getUint32()) # create estate with houses @@ -969,12 +932,12 @@ def __handleGetEstateResp(self, di): callback(estateId, estateVal, numHouses, houseId, houseVal, petIds, estateVal) else: - print "ret code != 0, something went wrong with estate creation" + print("ret code != 0, something went wrong with estate creation") def getFirstBattle(self): # Return the first battle in the repository (for testing purposes) from toontown.battle import DistributedBattleBaseAI - for dobj in self.doId2do.values(): + for dobj in list(self.doId2do.values()): if isinstance( dobj, DistributedBattleBaseAI.DistributedBattleBaseAI): return dobj @@ -1000,7 +963,7 @@ def handleAvCatch(self, avId, zoneId, catch): the catch. catch - a fish tuple of (genus, species) returns: None - + This method instructs the BingoManagerAI to tell the appropriate PBMgrAI to update the catch of an avatar at the particular pond. This @@ -1017,7 +980,7 @@ def createPondBingoMgrAI(self, estate): estate - the estate for which the PBMgrAI should be created. returns: None - + This method instructs the BingoManagerAI to create a new PBMgrAI for a newly generated estate. @@ -1057,3 +1020,11 @@ def __handleInGameNewsManagerUdToAllAi(self,di): (globalId, OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER)) # Let the dclass finish the job do.dclass.receiveUpdate(do, di) + + def sendShardInfo(self): + dg = PyDatagram() + dg.addServerHeader(self.serverId, self.ourChannel, STATESERVER_UPDATE_SHARD) + dg.addString(self.districtName) + dg.addUint32(self._population) + dg.addUint32(self.getWelcomeValleyCount()) + self.send(dg) diff --git a/toontown/src/ai/ToontownGroupManager.py b/toontown/src/ai/ToontownGroupManager.py index 290e7c08..d6cec68d 100644 --- a/toontown/src/ai/ToontownGroupManager.py +++ b/toontown/src/ai/ToontownGroupManager.py @@ -111,7 +111,7 @@ def removeFromGroup(self, leaverId): print("removeFromGroup") group = self.getGroup(leaverId) if group and (leaverId in group[GROUPMEMBER]): - print("Group found for %s" % (leaverId)) + print(("Group found for %s" % (leaverId))) #send everyone in the group a message memberId has left for avId in group[GROUPMEMBER]: if avId != leaverId: @@ -133,14 +133,14 @@ def removeFromGroup(self, leaverId): if group and len(group[GROUPMEMBER]) <= 1: self.groupLists.remove(group) for member in group[GROUPMEMBER]: - if self.avIdDict.has_key(member): + if member in self.avIdDict: self.avIdDict.pop(member) # clear the member's group affiliation - if self.avIdDict.has_key(leaverId): + if leaverId in self.avIdDict: self.avIdDict.pop(leaverId) def getGroup(self, memberId): - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: return self.avIdDict[memberId] else: return None diff --git a/toontown/src/ai/ToontownMagicWordManager.py b/toontown/src/ai/ToontownMagicWordManager.py index 831f457b..09833370 100644 --- a/toontown/src/ai/ToontownMagicWordManager.py +++ b/toontown/src/ai/ToontownMagicWordManager.py @@ -100,10 +100,10 @@ def doMagicWord(self, word, avId, zoneId): #Fanfare.makeFanfareWithMessageImage(0, base.localAvatar, 1, "This is the message", Vec2(0,0.2), 0.08, base.localAvatar.inventory.buttonLookup(1, 1), Vec3(0,0,0), 4)[0].start() #Fanfare.makeFanfare(0, base.localAvatar).start() elif wordIs("~endgame"): - print "Requesting minigame abort..." + print("Requesting minigame abort...") messenger.send("minigameAbort") elif wordIs("~wingame"): - print "Requesting minigame victory..." + print("Requesting minigame victory...") messenger.send("minigameVictory") elif wordIs("~walk"): try: @@ -134,7 +134,7 @@ def doMagicWord(self, word, avId, zoneId): # no longer keep rogues obj around after creation, so we can make a different one elif wordIs("~showPaths"): - for obj in self.cr.doId2do.values(): + for obj in list(self.cr.doId2do.values()): if isinstance(obj, DistributedSuitPlanner.DistributedSuitPlanner): obj.showPaths() place = base.cr.playGame.getPlace() @@ -142,7 +142,7 @@ def doMagicWord(self, word, avId, zoneId): place.showPaths() elif wordIs("~hidePaths"): - for obj in self.cr.doId2do.values(): + for obj in list(self.cr.doId2do.values()): if isinstance(obj, DistributedSuitPlanner.DistributedSuitPlanner): obj.hidePaths() place = base.cr.playGame.getPlace() @@ -233,7 +233,7 @@ def doMagicWord(self, word, avId, zoneId): if not camParent.isEmpty(): myCam.wrtReparentTo(camParent) self.setMagicWordResponse(response) - print response + print(response) @@ -783,7 +783,7 @@ def identifyDistributedObjects(self, name): result = [] lowerName = string.lower(name) - for obj in base.cr.doId2do.values(): + for obj in list(base.cr.doId2do.values()): className = obj.__class__.__name__ try: name = obj.getName() @@ -860,7 +860,7 @@ def doBossBattle(self, word): # Find the particular Boss Cog that's in the same zone with # the avatar. bossCog = None - for distObj in self.cr.doId2do.values(): + for distObj in list(self.cr.doId2do.values()): if isinstance(distObj, DistributedBossCog.DistributedBossCog): bossCog = distObj break diff --git a/toontown/src/ai/ToontownMagicWordManagerAI.py b/toontown/src/ai/ToontownMagicWordManagerAI.py index 45eef261..6742349d 100644 --- a/toontown/src/ai/ToontownMagicWordManagerAI.py +++ b/toontown/src/ai/ToontownMagicWordManagerAI.py @@ -1,10 +1,8 @@ # python imports -import fpformat import string import time import random import datetime -from sets import Set # panda3d imports from pandac.PandaModules import * @@ -22,7 +20,7 @@ from toontown.suit import DistributedSuitPlannerAI from toontown.battle import DistributedBattleBaseAI from toontown.toon import DistributedToonAI -import WelcomeValleyManagerAI +from . import WelcomeValleyManagerAI from toontown.hood import ZoneUtil from toontown.battle import SuitBattleGlobals from toontown.quest import Quests @@ -95,7 +93,7 @@ def wordIs(w, word=word): av.doRestock(1) elif word == "~restockUber": av.doRestock(0) - + elif word == "~rich": av.b_setMoney(av.maxMoney) av.b_setBankMoney(av.maxBankMoney) @@ -177,7 +175,7 @@ def wordIs(w, word=word): newInv.maxOutInv() av.inventory.setToMin(newInv.inventory) av.d_setInventory(av.inventory.makeNetString()) - self.notify.debug("Setting exp to 9 for " + av.name) + self.notify.debug("Setting exp to 9 for " + av.name) elif word == "~professional": av.b_setTrackAccess([1, 1, 1, 1, 1, 1, 1]) av.b_setMaxCarry(ToontownGlobals.MaxCarryLimit) @@ -234,7 +232,7 @@ def wordIs(w, word=word): elif word[:4] == "~exp": self.doExp(word, av, zoneId, senderId) - + elif word[:7] == "~trophy": self.doTrophy(word, av, zoneId, senderId) @@ -277,7 +275,7 @@ def wordIs(w, word=word): av.b_setRewardHistory(2, []) av.fixAvatar() self.down_setMagicWordResponse(senderId, "Finished tutorial.") - + elif word == "~finishQuests": self.air.questManager.completeAllQuestsMagically(av) self.down_setMagicWordResponse(senderId, "Finished quests.") @@ -343,7 +341,7 @@ def wordIs(w, word=word): return # Should we check your reward history too? - + fromNpcId = Quests.ToonHQ # A reasonable default rewardId = Quests.getQuestReward(questId, av) @@ -355,7 +353,7 @@ def wordIs(w, word=word): if rewardId == Quests.Any: # Just give 100 jellybeans (rewardId = 604 from Quests.py) rewardId = 604 - + toNpcId = Quests.getQuestToNpcId(questId) # Account for some trickery in the quest description # If the toNpcId is marked or let's just use ToonHQ @@ -363,7 +361,7 @@ def wordIs(w, word=word): toNpcId = Quests.ToonHQ elif toNpcId == Quests.Same: toNpcId = Quests.ToonHQ - + startingQuest = Quests.isStartingQuest(questId) self.air.questManager.assignQuest(av.doId, fromNpcId, @@ -384,7 +382,7 @@ def wordIs(w, word=word): self.down_setMagicWordResponse( senderId, "Cancelled request for quest %s" % (questId)) return - + questId = int(args[1]) # Make sure this quest exists @@ -418,11 +416,11 @@ def wordIs(w, word=word): for quest in av.quests: quest[2] = Quests.ToonHQ av.b_setQuests(av.quests) - + elif wordIs('~teleportAll'): av.b_setHoodsVisited(ToontownGlobals.HoodsForTeleportAll) av.b_setTeleportAccess(ToontownGlobals.HoodsForTeleportAll) - + elif word[:10] == "~buildings": self.doBuildings(word, av, zoneId, senderId) @@ -514,7 +512,7 @@ def wordIs(w, word=word): bboard.post(postName, id) response = 'selected mint %s' % id self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~mintFloor'): args = word.split() postName = 'mintFloor-%s' % av.doId @@ -559,7 +557,7 @@ def wordIs(w, word=word): bboard.post(postName, id) response = 'selected mint room %s: %s' % (id, name) self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~stageRoom'): args = word.split() postName = 'stageRoom-%s' % av.doId @@ -585,7 +583,7 @@ def wordIs(w, word=word): bboard.post(postName, id) response = 'selected stage room %s: %s' % (id, name) self.down_setMagicWordResponse(senderId, response) - + elif wordIs("~autoRestock"): args = word.split() postName = 'autoRestock-%s' % av.doId @@ -606,7 +604,7 @@ def wordIs(w, word=word): state = 'OFF' bboard.remove(postName) self.down_setMagicWordResponse(senderId, 'autoRestock %s' % state) - + elif wordIs("~resistanceRestock"): from toontown.chat import ResistanceChat args = word.split() @@ -673,12 +671,12 @@ def wordIs(w, word=word): else: response = "Could not find house." self.down_setMagicWordResponse(senderId, response) - + # Fishing elif word == "~clearFishTank": av.b_setFishTank([], [], []) self.down_setMagicWordResponse(senderId, "Cleared fish tank.") - + elif word == "~sellFishTank": # Add up the total value of all the fish totalValue = 0 @@ -689,12 +687,12 @@ def wordIs(w, word=word): av.b_setFishTank([], [], []) # Feedback to sender self.down_setMagicWordResponse(senderId, ("Sold fish in tank for %s jellbeans." % totalValue)) - + elif word == "~clearFishCollection": av.b_setFishCollection([], [], []) av.b_setFishingTrophies([]) self.down_setMagicWordResponse(senderId, "Cleared fish collection.") - + elif word == "~completeFishCollection": from toontown.fishing import FishGlobals genusList = [] @@ -707,7 +705,7 @@ def wordIs(w, word=word): genusList.append(genus) speciesList.append(species) weightList.append(weight) - + av.b_setFishCollection(genusList, speciesList, weightList) self.down_setMagicWordResponse(senderId, "Complete fish collection.") @@ -717,7 +715,7 @@ def wordIs(w, word=word): elif word == "~allFishingTrophies": from toontown.fishing import FishGlobals - allTrophyList = FishGlobals.TrophyDict.keys() + allTrophyList = list(FishGlobals.TrophyDict.keys()) av.b_setFishingTrophies(allTrophyList) self.down_setMagicWordResponse(senderId, "All fishing trophies") @@ -733,7 +731,7 @@ def wordIs(w, word=word): av.b_setFishingRod(rodId) self.down_setMagicWordResponse(senderId, ("New fishing rod: %s" % (rodId))) - + elif wordIs('~inGameEdit'): # edit a level in the game engine # Note - do not call this as a toon - call ~edit instead. That @@ -835,7 +833,7 @@ def wordIs(w, word=word): factoryType = args[1] else: factoryType = ToontownGlobals.FT_FullSuit - + for dept in depts: av.giveGenericCogPart(factoryType, dept) @@ -891,7 +889,7 @@ def wordIs(w, word=word): elif cogType == 'off': av.b_setCogIndex(-1) return - + else: dept = SuitDNA.getSuitDept(cogType) if dept == None: @@ -907,7 +905,7 @@ def wordIs(w, word=word): maxLevel = ToontownGlobals.MaxCogSuitLevel + 1 else: maxLevel = minLevel + 4 - + if len(args) > 2: level = int(args[2]) - 1 if level < minLevel or level > maxLevel: @@ -939,8 +937,8 @@ def wordIs(w, word=word): av.b_setPinkSlips(numSlips) self.down_setMagicWordResponse(senderId, "Set PinkSlips: %s" % (numSlips)) - - + + elif wordIs("~setPaid"): args = word.split() depts = self.getDepts(args) @@ -1044,7 +1042,7 @@ def handlePetGenerated(success, pet, avId=av.doId, else: summonPet(petId) response = 'summoning pet %s...' % petId - + self.down_setMagicWordResponse(senderId, response) elif wordIs('~dismiss') and simbase.wantPets: @@ -1272,7 +1270,7 @@ def handlePetGenerated(success, pet, avId=av.doId, numPets = 56 # 50 friends, six Toons/acct #100 * 3 # 500 toons, 100 at estate, 3 pets per if len(args) > 1: numPets = int(args[1]) - for i in xrange(numPets): + for i in range(numPets): pet = DistributedPetAI.DistributedPetAI(self.air) # make up a fake owner doId pet._initFakePet(100+i, 'StressPet%s' % i) @@ -1314,7 +1312,7 @@ def handlePetGenerated(success, pet, avId=av.doId, elif wordIs('~spamTrick'): # spam the nearby pets with N commands to do the 'jump' trick from toontown.pets import PetObserve - for i in xrange(20): + for i in range(20): PetObserve.send(av.zoneId, PetObserve.getSCObserve(21200, av.doId)) @@ -1375,21 +1373,21 @@ def handlePetGenerated(success, pet, avId=av.doId, self.down_setMagicWordResponse( senderId, 'collisions %s for %s' % (action, showZone)) - ### Karting ### + ### Karting ### elif(word[:8] == '~BuyKart'): - if (simbase.wantKarts): + if (simbase.wantKarts): accList = av.getKartAccessoriesOwned() #accList[-1] = getDefaultColor() accList[-2] = getDefaultRim() - response = "Av %s now owns accessories: %s" % (av.getDoId(), accList) + response = "Av %s now owns accessories: %s" % (av.getDoId(), accList) av.b_setKartAccessoriesOwned(accList) self.down_setMagicWordResponse(senderId, response) elif(word[:13] == '~BuyAccessory'): if (simbase.wantKarts): response = "Av %s attempting to buy accessory %s" % (av.getDoId(), word[14:]) - av.addOwnedAccessory(int(word[14:])) + av.addOwnedAccessory(int(word[14:])) self.down_setMagicWordResponse(senderId, response) elif(word[:8] == '~Tickets'): @@ -1397,7 +1395,7 @@ def handlePetGenerated(success, pet, avId=av.doId, response = "Av %s now has %s tickets" % (av.getDoId(), word[9:]) av.b_setTickets(int(word[9:])) self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~allowSoloRace'): if (simbase.wantKarts): av.setAllowSoloRace(not av.allowSoloRace) @@ -1406,7 +1404,7 @@ def handlePetGenerated(success, pet, avId=av.doId, else: response = "Av %s can no longer Race solo" % (av.getDoId()) self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~allowRaceTimeout'): if (simbase.wantKarts): av.setAllowRaceTimeout(not av.allowRaceTimeout) @@ -1415,7 +1413,7 @@ def handlePetGenerated(success, pet, avId=av.doId, else: response = "Av %s can not timeout of races" % (av.getDoId()) self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~drive'): # Execute an arbitrary Python command on the AI. av.takeOutKart() @@ -1430,13 +1428,9 @@ def handlePetGenerated(success, pet, avId=av.doId, elif wordIs("~mail"): self.doMail(word, av, zoneId, senderId) - # Parties - elif wordIs("~party"): - self.doParty(word, av, zoneId, senderId) - #Gardening elif wordIs("~garden"): - self.doGarden(word, av, zoneId, senderId) + self.doGarden(word, av, zoneId, senderId) elif word == "~clearGardenSpecials": newWord = '~garden clearCarriedSpecials' @@ -1445,7 +1439,7 @@ def handlePetGenerated(success, pet, avId=av.doId, elif word == "~clearFlowerCollection": newWord = '~garden clearCollection' self.doGarden(newWord, av, zoneId, senderId) - + elif word == "~completeFlowerCollection": newWord = '~garden completeCollection' self.doGarden(newWord, av, zoneId, senderId) @@ -1453,11 +1447,11 @@ def handlePetGenerated(success, pet, avId=av.doId, elif wordIs('~startGarden'): newWord = '~garden start' self.doGarden(newWord, av, zoneId, senderId) - + elif wordIs('~clearGarden'): newWord = '~garden clear' self.doGarden(newWord, av, zoneId, senderId) - + elif wordIs('~cannons'): sender = simbase.air.doId2do.get(senderId) if sender: @@ -1479,7 +1473,7 @@ def handlePetGenerated(success, pet, avId=av.doId, zoneId = sender.zoneId estateOwnerDoId = simbase.air.estateMgr.zone2owner.get(zoneId) estate = simbase.air.estateMgr.estate.get(estateOwnerDoId) - + if hasattr(estate, 'gameTableFlag'): if estate.gameTableFlag: estate.endGameTable() @@ -1487,7 +1481,7 @@ def handlePetGenerated(success, pet, avId=av.doId, else: estate.startGameTable() response = 'Game Table Started' - + elif wordIs('~plantGarden'): newWord = '~garden plant' args = word.split() @@ -1495,7 +1489,7 @@ def handlePetGenerated(success, pet, avId=av.doId, newWord += ' ' newWord += args[i] self.doGarden(newWord, av, zoneId, senderId) - + elif wordIs('~trialerCount'): total = 0 trialer =0 @@ -1514,12 +1508,12 @@ def handlePetGenerated(success, pet, avId=av.doId, if unknown: response += "%d unknown" % unknown self.down_setMagicWordResponse(senderId, response) - + elif wordIs('~deleteBackupStores'): storeClient = DataStoreAIClient(self.air, DataStoreGlobals.GEN, None) storeClient.deleteBackupStores() - storeClient.closeStore() - + storeClient.closeStore() + elif wordIs("~autoRich"): # Available only __dev__ and GMs. Guard against hacked clients sending this. If a non-GM # needs to do this on LIVE, simply use ~rich instead. @@ -1528,7 +1522,7 @@ def handlePetGenerated(success, pet, avId=av.doId, if av.hasGMName(): self.air.writeServerEvent('GM', av.doId, 'GM %s used auto-rich' % av.getName()) assert self.notify.debug('GM %s %s used auto-rich' % (av.doId, av.getName())) - + args = word.split() postName = 'autoRich-%s' % av.doId enable = not bboard.get(postName, 0) @@ -1552,14 +1546,14 @@ def handlePetGenerated(success, pet, avId=av.doId, self.down_setMagicWordResponse(senderId, 'autoRich %s' % state) else: self.air.writeServerEvent('suspicious', av.doId, 'non-GM toon with name %s using ~autoRich' % av.getName()) - + else: # The word is not an AI-side magic word. If the sender is # different than the target avatar, then pass the magic # word down to the target client-side MagicWordManager to # execute a client-side magic word. if (senderId != av.doId): - self.sendUpdateToAvatarId(av.doId, 'setMagicWord', [word, av.doId, zoneId]) + self.sendUpdateToAvatarId(av.doId, 'setMagicWord', [word, av.doId, zoneId]) def doNpcFriend(self, av, npcId, numCalls): return av.attemptAddNPCFriend(npcId, numCalls) == 1 @@ -1593,7 +1587,7 @@ def getDepts(self, args): return depts else: return [0, 1, 2, 3] - + def doExp(self, word, av, zoneId, senderId): """Handle the ~exp magic word.""" @@ -1602,7 +1596,7 @@ def doExp(self, word, av, zoneId, senderId): trackIndex = -1 increment = 0 gotIncrement = 0 - + if len(args) > 1: trackStr = args[1] if trackStr != "all": @@ -1619,7 +1613,7 @@ def doExp(self, word, av, zoneId, senderId): # No increment specified; the default is whatever # it takes to get to the next track. increment = av.experience.getNextExpValue(trackIndex) - av.experience.getExp(trackIndex) - + self.notify.debug("Adding %d to %s track for %s." % (increment, ToontownBattleGlobals.Tracks[trackIndex], av.name)) av.experience.addExp(trackIndex, increment) else: @@ -1627,10 +1621,10 @@ def doExp(self, word, av, zoneId, senderId): # No increment specified; the default is whatever # it takes to get to the next track. increment = av.experience.getNextExpValue(trackIndex) - av.experience.getExp(trackIndex) - + self.notify.debug("Adding %d to %s track for %s." % (increment, ToontownBattleGlobals.Tracks[trackIndex], av.name)) av.experience.addExp(trackIndex, increment) - + av.d_setExperience(av.experience.makeNetString()) @@ -1661,7 +1655,7 @@ def doCheesyEffect(self, word, av, zoneId, senderId): else: hoodId = ZoneUtil.getCanonicalHoodId(zoneId) timeLimit = 10 - + args = word.split() try: effect = eval("ToontownGlobals.CE" + args[1]) @@ -1677,7 +1671,7 @@ def doCheesyEffect(self, word, av, zoneId, senderId): if len(args) > 2: timeLimit = int(args[2]) - + # Let it expire in timeLimit minutes. expireTime = (int)(time.time() / 60 + 0.5) + timeLimit av.b_setCheesyEffect(effect, hoodId, expireTime) @@ -1712,7 +1706,7 @@ def doCogTakeOver(self, word, av, zoneId, senderId): else: streetId=int(args[4]) - if not self.air.suitPlanners.has_key(streetId): + if streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) self.down_setMagicWordResponse(senderId, response) return @@ -1720,7 +1714,7 @@ def doCogTakeOver(self, word, av, zoneId, senderId): if streetId == 'all': # All buildings, everywhere. blockMap = {} - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): if sp.buildingMgr: blockMap[sp.buildingMgr] = sp.buildingMgr.getToonBlocks() @@ -1759,7 +1753,7 @@ def doCogTakeOver(self, word, av, zoneId, senderId): maxPathLen = None total = 0 - for bm, blocks in blockMap.items(): + for bm, blocks in list(blockMap.items()): total += len(blocks) for i in blocks: if now: @@ -1788,13 +1782,13 @@ def doCogTakeOver(self, word, av, zoneId, senderId): if suit == None: failureCount += 1 - self.notify.debug("cogTakeOver %s %s %d %d" % + self.notify.debug("cogTakeOver %s %s %d %d" % (track, level, i, zoneId)) response = "%d buildings." % (total) if (failureCount > 0): response += " %d failed." % (failureCount) - + self.down_setMagicWordResponse(senderId, response) def doCogdoTakeOver(self, word, av, zoneId, senderId): @@ -1821,7 +1815,7 @@ def doCogdoTakeOver(self, word, av, zoneId, senderId): else: streetId=int(args[4]) - if not self.air.suitPlanners.has_key(streetId): + if streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) self.down_setMagicWordResponse(senderId, response) return @@ -1829,7 +1823,7 @@ def doCogdoTakeOver(self, word, av, zoneId, senderId): if streetId == 'all': # All buildings, everywhere. blockMap = {} - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): if sp.buildingMgr: blockMap[sp.buildingMgr] = sp.buildingMgr.getToonBlocks() @@ -1868,7 +1862,7 @@ def doCogdoTakeOver(self, word, av, zoneId, senderId): maxPathLen = None total = 0 - for bm, blocks in blockMap.items(): + for bm, blocks in list(blockMap.items()): total += len(blocks) for i in blocks: if now: @@ -1899,13 +1893,13 @@ def doCogdoTakeOver(self, word, av, zoneId, senderId): if suit == None: failureCount += 1 - self.notify.debug("cogdoTakeOver %s %s %d %d" % + self.notify.debug("cogdoTakeOver %s %s %d %d" % (track, level, i, zoneId)) response = "%d cogdos." % (total) if (failureCount > 0): response += " %d failed." % (failureCount) - + self.down_setMagicWordResponse(senderId, response) def doToonTakeOver(self, word, av, zoneId, senderId): @@ -1918,7 +1912,7 @@ def doToonTakeOver(self, word, av, zoneId, senderId): else: streetId=int(args[2]) - if not self.air.suitPlanners.has_key(streetId): + if streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) self.down_setMagicWordResponse(senderId, response) return @@ -1926,7 +1920,7 @@ def doToonTakeOver(self, word, av, zoneId, senderId): if streetId == 'all': # All buildings, everywhere. blockMap = {} - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): if sp.buildingMgr: blockMap[sp.buildingMgr] = sp.buildingMgr.getSuitBlocks() @@ -1955,7 +1949,7 @@ def doToonTakeOver(self, word, av, zoneId, senderId): blockMap = { bm: blocks } total = 0 - for bm, blocks in blockMap.items(): + for bm, blocks in list(blockMap.items()): total += len(blocks) for i in blocks: building = bm.getBuilding(i) @@ -1971,12 +1965,12 @@ def formatWelcomeValley(self, hood): mgr = self.air.welcomeValleyManager if hood == mgr.newHood: - return "%s N" % (hood[0].zoneId) + return "%s N" % (hood.zoneId) elif hood in mgr.removingHoods: - return "%s R" % (hood[0].zoneId) + return "%s R" % (hood.zoneId) else: - return "%s" % (hood[0].zoneId) - + return "%s" % (hood.zoneId) + def doWelcome(self, word, av, zoneId, senderId): """Handle the ~welcome magic word, for managing Welcome Valley.""" args = word.split() @@ -2005,7 +1999,7 @@ def doWelcome(self, word, av, zoneId, senderId): # Welcome Valleys. response = "" - hoodIds = mgr.welcomeValleys.keys() + hoodIds = list(mgr.welcomeValleys.keys()) hoodIds.sort() for hoodId in hoodIds: hood = mgr.welcomeValleys[hoodId] @@ -2023,7 +2017,7 @@ def doWelcome(self, word, av, zoneId, senderId): # Welcome Valleys. response = "" - hoodIds = mgr.welcomeValleys.keys() + hoodIds = list(mgr.welcomeValleys.keys()) hoodIds.sort() for hoodId in hoodIds: hood = mgr.welcomeValleys[hoodId] @@ -2041,7 +2035,7 @@ def doWelcome(self, word, av, zoneId, senderId): # avId is an arbitrary number which should probably not # match any real avatars. avId = int(args[2]) - + zoneId = mgr.avatarRequestZone(avId, ToontownGlobals.WelcomeValleyToken) response = "%s assigned to %s." % (avId, zoneId) @@ -2125,7 +2119,7 @@ def doWelcome(self, word, av, zoneId, senderId): else: response = "Invalid welcome command: %s" % (args[1]) - + self.down_setMagicWordResponse(senderId, response) def __sortBuildingDist(self, a, b): @@ -2138,19 +2132,19 @@ def doBuildings(self, word, av, zoneId, senderId): if word == "~buildings where": # "~buildings where": report the distribution of buildings. dist = {} - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): if sp.buildingMgr: numActual = len(sp.buildingMgr.getSuitBlocks()) - if not dist.has_key(numActual): + if numActual not in dist: dist[numActual] = [] dist[numActual].append(sp.zoneId) # Sort the distribution by number of buildings. sorted = [] - for tuple in dist.items(): + for tuple in list(dist.items()): sorted.append(tuple) sorted.sort(self.__sortBuildingDist) - + # Now format the distribution into a text response. response = "" for numActual, zones in sorted: @@ -2161,7 +2155,7 @@ def doBuildings(self, word, av, zoneId, senderId): response = "No cog buildings." else: response = response[1:] - + else: # "~buildings zoneId" or "~buildings all" @@ -2179,7 +2173,7 @@ def doBuildings(self, word, av, zoneId, senderId): numAttempting = 0 numPerTrack = {} numPerHeight = {} - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): numTarget += sp.targetNumSuitBuildings if sp.buildingMgr: numActual += len(sp.buildingMgr.getSuitBlocks()) @@ -2193,7 +2187,7 @@ def doBuildings(self, word, av, zoneId, senderId): sp.formatNumSuitsPerTrack(numPerHeight), numTotalBuildings, numTarget, numAttempting) - elif not self.air.suitPlanners.has_key(streetId): + elif streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) else: @@ -2216,13 +2210,13 @@ def doBuildings(self, word, av, zoneId, senderId): sp.formatNumSuitsPerTrack(numPerTrack), sp.formatNumSuitsPerTrack(numPerHeight), numTotalBuildings, numTarget, numAttempting) - + self.down_setMagicWordResponse(senderId, response) def doBuildingPercent(self, word, av, zoneId, senderId): """Handle the ~buildingPercent magic word.""" percent = None - + args=word.split() if len(args) > 1: percent = int(args[1]) @@ -2231,13 +2225,13 @@ def doBuildingPercent(self, word, av, zoneId, senderId): response = "Suit building target percentage is %d" % (DistributedSuitPlannerAI.DistributedSuitPlannerAI.TOTAL_SUIT_BUILDING_PCT) else: DistributedSuitPlannerAI.DistributedSuitPlannerAI.TOTAL_SUIT_BUILDING_PCT = percent - sp = self.air.suitPlanners.values()[0] + sp = list(self.air.suitPlanners.values())[0] sp.assignInitialSuitBuildings() response = "Reset target percentage to %d" % (percent) self.down_setMagicWordResponse(senderId, response) - - + + def doCall(self, word, av, zoneId, senderId): """Handle the ~call magic word.""" streetId = ZoneUtil.getBranchZone(zoneId) @@ -2247,12 +2241,12 @@ def doCall(self, word, av, zoneId, senderId): level = None skelecog = None revives = None - + if len(args) > 1: name = args[1] if name == 'x': name = None - + if len(args) > 2: level = int(args[2]) @@ -2262,14 +2256,14 @@ def doCall(self, word, av, zoneId, senderId): if len(args) > 4: revives = int(args[4]) - if not self.air.suitPlanners.has_key(streetId): + if streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) else: sp = self.air.suitPlanners[streetId] map = sp.getZoneIdToPointMap() canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) - if not map.has_key(canonicalZoneId): + if canonicalZoneId not in map: response = "Zone %d isn't near a suit point." % (canonicalZoneId) else: points = map[canonicalZoneId][:] @@ -2285,7 +2279,7 @@ def doCall(self, word, av, zoneId, senderId): self.down_setMagicWordResponse(senderId, response) - + def doBattle(self, word, av, zoneId, senderId): """Handle the ~battle magic word.""" @@ -2317,7 +2311,7 @@ def __findInvolvedBattle(self, avId): is a participant, or None if the avatar is not involved in any battles.""" - for dobj in self.air.doId2do.values(): + for dobj in list(self.air.doId2do.values()): if (isinstance(dobj, DistributedBattleBaseAI.DistributedBattleBaseAI)): if avId in dobj.toons: return dobj @@ -2326,12 +2320,12 @@ def __findBattleInZone(self, zoneId): """Returns the battle, if any, in the indicated zoneId, or None if no battle is occurring in the indicated zone.""" - for dobj in self.air.doId2do.values(): + for dobj in list(self.air.doId2do.values()): if (isinstance(dobj, DistributedBattleBaseAI.DistributedBattleBaseAI)): if dobj.zoneId == zoneId: return dobj - - + + def doCogInvasion(self, word, av, zoneId, senderId): @@ -2379,7 +2373,7 @@ def stopCogInvasion(self, word, av, zoneId, senderId): response = ("No invasion found.") self.down_setMagicWordResponse(senderId, response) - + def getCogInvasion(self, word, av, zoneId, senderId): invMgr = self.air.suitInvasionManager @@ -2437,14 +2431,14 @@ def stopAllFireworks(self, word, av, zoneId, senderId): def doCogs(self, word, av, zoneId, senderId): """Handle the ~cogs magic word.""" streetId = ZoneUtil.getBranchZone(zoneId) - + args=word.split() firstKeyword = 1 sync = 0 fly = 0 count = -1 - + if len(args) > 1: if args[1] == "all": streetId = "all" @@ -2476,7 +2470,7 @@ def doCogs(self, word, av, zoneId, senderId): numActual = 0 numPerTrack = {} sp = None - for sp in self.air.suitPlanners.values(): + for sp in list(self.air.suitPlanners.values()): numTarget += sp.calcDesiredNumFlyInSuits() + sp.calcDesiredNumBuildingSuits() numActual += sp.numFlyInSuits + sp.numBuildingSuits sp.countNumSuitsPerTrack(numPerTrack) @@ -2492,8 +2486,8 @@ def doCogs(self, word, av, zoneId, senderId): else: response = "Overall, %d cogs (%s); target is %d." % ( numActual, sp.formatNumSuitsPerTrack(numPerTrack), numTarget) - - elif not self.air.suitPlanners.has_key(streetId): + + elif streetId not in self.air.suitPlanners: response = "Street %d is not known." % (streetId) else: @@ -2503,7 +2497,7 @@ def doCogs(self, word, av, zoneId, senderId): numActual = sp.numFlyInSuits + sp.numBuildingSuits numPerTrack = {} sp.countNumSuitsPerTrack(numPerTrack) - + if sync: sp.resyncSuits() if fly: @@ -2513,9 +2507,9 @@ def doCogs(self, word, av, zoneId, senderId): response = "Street %d has %d cogs (%s); target is %d." % ( streetId, numActual, sp.formatNumSuitsPerTrack(numPerTrack), numTarget) - + self.down_setMagicWordResponse(senderId, response) - + def doMinigame(self, word, av, zoneId, senderId): """Handle the ~minigame magic word: request a particular minigame.""" @@ -2596,7 +2590,7 @@ def doMinigame(self, word, av, zoneId, senderId): response += ", safezone %s" % mgSzId if mgKeep: response += ", keep=true" - + self.down_setMagicWordResponse(senderId, response) def doTreasures(self, word, av, zoneId, senderId): @@ -2615,7 +2609,7 @@ def doTreasures(self, word, av, zoneId, senderId): return tp = hood.treasurePlanner - + if len(args) == 1: # No parameter: report the current treasure count. response = "%s treasures." % (tp.numTreasures()) @@ -2627,7 +2621,7 @@ def doTreasures(self, word, av, zoneId, senderId): else: response = "Invalid treasures command: %s" % (args[1]) - + self.down_setMagicWordResponse(senderId, response) @@ -2654,7 +2648,7 @@ def doEmotes(self, word, av, zoneId, senderId): else: response = "Emote %d disabled" % emoteId self.down_setMagicWordResponse(senderId, response) - + def doCatalog(self, word, av, zoneId, senderId): """Handle the ~catalog magic word: manage catalogs""" @@ -2670,7 +2664,7 @@ def doCatalog(self, word, av, zoneId, senderId): afterMinutes = int(args[a + 1]) del args[a + 1] del args[a] - + if len(args) == 1: # No parameter: report the current catalog. duration = (av.catalogScheduleNextTime * 60) - time.time() @@ -2705,7 +2699,7 @@ def doCatalog(self, word, av, zoneId, senderId): else: mm = int(args[2]) dd = int(args[3]) - + self.air.catalogManager.forceMonthlyCatalog(av, mm, dd) response = "%s items for %d/%0d." % (len(av.monthlyCatalog), mm, dd) @@ -2731,16 +2725,16 @@ def doCatalog(self, word, av, zoneId, senderId): item.deliveryDate = deliveryTime av.onOrder.markDirty() av.b_setDeliverySchedule(av.onOrder) - + response = "Delivered %s item(s)." % (len(av.onOrder)) elif args[1] in ["reload", "dump"]: # These commands are handled by the client; we ignore them. return - + else: response = "Invalid catalog command: %s" % (args[1]) - + self.down_setMagicWordResponse(senderId, response) def doDna(self, word, av, zoneId, senderId): @@ -2783,7 +2777,7 @@ def doBossBattle(self, word, av, zoneId, senderId): # Find the particular Boss Cog that's in the same zone with # the avatar. bossCog = None - for distObj in self.air.doId2do.values(): + for distObj in list(self.air.doId2do.values()): if isinstance(distObj, DistributedBossCogAI.DistributedBossCogAI): if distObj.zoneId == zoneId: bossCog = distObj @@ -2802,7 +2796,7 @@ def doBossBattle(self, word, av, zoneId, senderId): dept = args[1] del args[1] deptIndex = SuitDNA.suitDepts.index(dept) - + if self.__bossBattleZoneId[deptIndex] == None: # Make up a new zone for the battle. zoneId = self.air.allocateZone() @@ -2834,7 +2828,7 @@ def doBossBattle(self, word, av, zoneId, senderId): response = response[2:] else: response = "No boss battles." - + elif args[1] == "spy": # ~bossBattle spy [smlc] : go visit the indicated # boss battle in ghost mode. @@ -2851,7 +2845,7 @@ def doBossBattle(self, word, av, zoneId, senderId): av.b_setGhostMode(2) else: response = "No boss battle in zone %s" % (zoneId) - + elif args[1] == "start": # ~bossBattle start: restart the boss battle. @@ -2913,7 +2907,7 @@ def doBossBattle(self, word, av, zoneId, senderId): response = "Battle three started." bossCog.acceptNewToons() bossCog.b_setState('BattleThree') - + elif args[1] == "preFour": # ~bossBattle preFour: preview to battle four. if not bossCog.hasToons(): @@ -2930,7 +2924,7 @@ def doBossBattle(self, word, av, zoneId, senderId): else: response = "Battle four started." bossCog.acceptNewToons() - bossCog.b_setState('BattleFour') + bossCog.b_setState('BattleFour') elif args[1] == "victory": # ~bossBattle victory: straight to the victory sequence. @@ -2962,15 +2956,15 @@ def doBossBattle(self, word, av, zoneId, senderId): # the undercarriage) and then applies the indicated damage # (as if we hit his upper body the indicated number of # times). - + if len(args) <= 2: damage = 1 else: damage = int(args[2]) ## - ## this is very suspect .. it is reasigning a internal var(msgSender).. - ## it is trying to make the message look like it came from a difrent avatarID + ## this is very suspect .. it is reasigning a internal var(msgSender).. + ## it is trying to make the message look like it came from a difrent avatarID ## to other areas of the code .. ??? self.air.msgSender = av.doId bossCog.magicWordHit(damage, av.doId) @@ -2983,7 +2977,7 @@ def doBossBattle(self, word, av, zoneId, senderId): elif args[1] == "avatarEnter": # ~bossBattle avatarEnter: Force a call to d_avatarEnter #This magic word is handled by the client. - pass + pass elif args[1] == "stun": # ~bossBattle stun: stun all of the goons in the CFO @@ -3005,7 +2999,7 @@ def doBossBattle(self, word, av, zoneId, senderId): # the number to the indicated value. if len(args) > 2: bossCog.maxGoons = int(args[2]) - + bossCog.magicWordResetGoons() elif args[1] == "toggleMove": # make the ceo toggle doing move attacks @@ -3022,7 +3016,7 @@ def doBossBattle(self, word, av, zoneId, senderId): def makeBossCog(self, dept, zoneId): bossCog = None - + if dept == 's': bossCog = DistributedSellbotBossAI.DistributedSellbotBossAI(self.air) bossCog.generateWithRequired(zoneId) @@ -3031,7 +3025,7 @@ def makeBossCog(self, dept, zoneId): elif dept == 'm': bossCog = DistributedCashbotBossAI.DistributedCashbotBossAI(self.air) bossCog.generateWithRequired(zoneId) - + elif dept == 'l': bossCog = DistributedLawbotBossAI.DistributedLawbotBossAI(self.air) bossCog.generateWithRequired(zoneId) @@ -3039,14 +3033,14 @@ def makeBossCog(self, dept, zoneId): elif dept == 'c': bossCog = DistributedBossbotBossAI.DistributedBossbotBossAI(self.air) bossCog.generateWithRequired(zoneId) - bossCog.b_setState('Frolic') + bossCog.b_setState('Frolic') else: - raise StandardError, 'Not implemented: boss cog %s' % (dept) + raise Exception('Not implemented: boss cog %s' % (dept)) return bossCog - - + + def doGarden(self, word, av, zoneId, senderId): """Handle the ~garden magic worde.""" @@ -3075,7 +3069,7 @@ def doGarden(self, word, av, zoneId, senderId): #clear the garden started flag messenger.send("gardenNuke", [senderId]) av.b_setGardenStarted(False) - response = "Garden Nuked" + response = "Garden Nuked" elif action == 'specials': #messenger.send("gardenSpecials", [senderId]) receiver = self.air.doId2do.get(senderId) @@ -3101,9 +3095,9 @@ def doGarden(self, word, av, zoneId, senderId): specificHardPoint = -1 if len(args) > 3: specificHardPoint = int(args[3]) - + messenger.send("waterGarden", [senderId, waterLevel, specificHardPoint] ) - + response = "water level changed to %d" % waterLevel elif action == 'growth': waterLevel = 1 @@ -3112,10 +3106,10 @@ def doGarden(self, word, av, zoneId, senderId): specificHardPoint = -1 if len(args) > 3: specificHardPoint = int(args[3]) - + messenger.send("growthGarden", [senderId, waterLevel, specificHardPoint] ) - - response = "growth level changed to %d" % waterLevel + + response = "growth level changed to %d" % waterLevel elif action == 'plant': type = 0 plot = 0 @@ -3132,9 +3126,9 @@ def doGarden(self, word, av, zoneId, senderId): growth = int(args[5]) if len(args) > 6: variety = int(args[6]) - + response = "Planting type=%d plot=%d water=%d growth=%d" % (type,plot,water,growth) - messenger.send("gardenPlant", [senderId, type, plot, water, growth, variety]) + messenger.send("gardenPlant", [senderId, type, plot, water, growth, variety]) elif action == 'clearCarriedSpecials': av.b_setGardenSpecials( []) response = "Cleared garden specials carried by toon" @@ -3151,14 +3145,14 @@ def doGarden(self, word, av, zoneId, senderId): for variety in range(numVarieties): speciesList.append(species) varietyList.append(variety) - + av.b_setFlowerCollection( speciesList, varietyList) av.b_setGardenTrophies([]) response = "Complete flower collection." elif action == 'epoch': numEpoch = 1 if len(args) > 2: - numEpoch = int(args[2]) + numEpoch = int(args[2]) messenger.send("epochGarden", [senderId, numEpoch]) response = "%d garden epoch has been run" % numEpoch elif action == 'shovel': @@ -3196,12 +3190,12 @@ def doGarden(self, word, av, zoneId, senderId): av.b_setWateringCan(wateringCan) av.b_setWateringCanSkill(skill) - response = "Set wateringCan=%d wateringCanSkill=%d" % (wateringCan,skill) + response = "Set wateringCan=%d wateringCanSkill=%d" % (wateringCan,skill) elif action == 'randomBasket': av.makeRandomFlowerBasket() self.down_setMagicWordResponse(senderId, "Created random flower basket") elif action == "allTrophies": - allTrophyList = GardenGlobals.TrophyDict.keys() + allTrophyList = list(GardenGlobals.TrophyDict.keys()) av.b_setGardenTrophies(allTrophyList) self.down_setMagicWordResponse(senderId, "All garden trophies") else: @@ -3212,16 +3206,16 @@ def doGarden(self, word, av, zoneId, senderId): def doGolf(self, word, av, zoneId, senderId): """Handle the ~golf magic words.""" args = word.split() - response = None + response = None action = None - + if len(args) == 1: # No parameter: change it to usage self.down_setMagicWordResponse( senderId, "Usage:\n~golf action \n'~golf help' for more info ") return - + action = args[1] if action == 'help': response = 'endHole\nendcourse\ntest\nclearHistory\nMaxHistory' @@ -3240,7 +3234,7 @@ def doGolf(self, word, av, zoneId, senderId): holeId, holeDoId = course.abortCurrentHole() response = "Aborting holeId %d, doId=%d" % (holeId, holeDoId) else: - response = "Couldn't find golf course" + response = "Couldn't find golf course" elif action == 'endcourse' or action == 'endCourse': course = GolfManagerAI.GolfManagerAI().findGolfCourse(senderId) if course: @@ -3283,7 +3277,7 @@ def doGolf(self, word, av, zoneId, senderId): av.b_setGolfHoleBest(emptyHoleBest) emptyCourseBest = [1] * 3 av.b_setGolfCourseBest(emptyCourseBest) - response = 'golf best maxed' + response = 'golf best maxed' elif action == 'clearHistory': response = 'clearHistory failed' emptyHistory = [0] * 18 @@ -3311,8 +3305,8 @@ def doGolf(self, word, av, zoneId, senderId): midHistory[GolfGlobals.MultiPlayerCoursesCompleted] = GolfGlobals.TrophyRequirements[GolfGlobals.MultiPlayerCoursesCompleted][0] midHistory[GolfGlobals.CourseZeroWins] = GolfGlobals.TrophyRequirements[GolfGlobals.CourseZeroWins][0] midHistory[GolfGlobals.CourseOneWins] = GolfGlobals.TrophyRequirements[GolfGlobals.CourseOneWins][0] - midHistory[GolfGlobals.CourseTwoWins] = GolfGlobals.TrophyRequirements[GolfGlobals.CourseTwoWins][0] - + midHistory[GolfGlobals.CourseTwoWins] = GolfGlobals.TrophyRequirements[GolfGlobals.CourseTwoWins][0] + av = simbase.air.doId2do.get(senderId) if av: av.b_setGolfHistory(midHistory) @@ -3375,25 +3369,25 @@ def doGolf(self, word, av, zoneId, senderId): response = "Selected hole %d as 1st hole" % holeId if holeKeep: response += ", keep=true" - - + + if response: self.down_setMagicWordResponse(senderId, response) - + def doMail(self,word, av, zoneId, senderId): """Handle mail magic words.""" args = word.split() - response = None + response = None action = None - + if len(args) == 1: # No parameter: change it to usage self.down_setMagicWordResponse( senderId, "Usage:\n~mail action \n'~mail help' for more info ") return - + action = args[1] if action == 'simple': @@ -3402,218 +3396,10 @@ def doMail(self,word, av, zoneId, senderId): else: recipient = int(args[2]) text = args[3] - for i in xrange(4, len(args)): + for i in range(4, len(args)): text += ' ' + args[i] self.air.mailManager.sendSimpleMail( senderId, recipient, text) if response: self.down_setMagicWordResponse(senderId, response) - - - def doParty(self,word, av, zoneId, senderId): - """Handle mail magic words.""" - args = word.split() - response = None - action = None - - if len(args) == 1: - # No parameter: change it to usage - self.down_setMagicWordResponse( - senderId, - "Available commands: plan, new, update, checkStart, end, debugGrid") - return - - action = args[1] - - if action == 'new': - if len(args) < 2: - response = "~party new ... " - else: - invitees = [] - for i in xrange(2, len(args)): - invitees.append( int(args[i])) - # start the party 1 minute from now - startTime = datetime.datetime.now(self.air.toontownTimeManager.serverTimeZone) + datetime.timedelta(minutes=-1) - endTime = startTime + datetime.timedelta(hours=PartyGlobals.DefaultPartyDuration) - - from toontown.parties.PartyEditorGrid import PartyEditorGrid - - # Make the avatar rich. - av.b_setMaxBankMoney(5000) - av.b_setMoney(av.maxMoney) - av.b_setBankMoney(av.maxBankMoney) - - gridEditor = PartyEditorGrid(None) - - # Flip on the Y so it matches the grid in-game. - gridEditor.grid.reverse() - - # Given a center coord (x or y) and a size (w or h), returns a list of indices in - # in the grid on that axis. (WARNING: Can return invalid indices.) - def gridComputeRange(centerGrid, size): - result = [] - if size == 1: - result = [centerGrid] - else: - # Need to round with negative values otherwise for center=0, size=3, the - # result will be [1, 0] when we expect [1, 0, -1]. - # The range without rounding: range(int(1.5), int(-1.5), -1) - # The range with rounding: range(int(1.5), int(-2), -1) - # Not a problem with center>=2 in this example: - # The range without rounding: range(int(3.5), int(0.5), -1) - # The range with rounding: range(int(3.5), int(0), -1) - result = range(int(centerGrid + size/2.0), - int(centerGrid - round(size/2.0)), -1) - - # The result list should be the same size as given. - assert len(result) == size, "Bad result range: c=%s s=%s result=%s" % (centerGrid, size, result) - - return result - - # Returns true if the given space is available centered at x,y with dims w,h. - def gridIsAvailable(x, y, w, h): - for j in gridComputeRange(y, h): - if 0 > j or j >= len(gridEditor.grid): - return False - for i in gridComputeRange(x, w): - if 0 > i or i >= len(gridEditor.grid[0]): - return False - if gridEditor.grid[j][i] == None: - return False - - #print "grid available: xy(%s %s) wh(%s %s)" % (x, y, w, h) - return True - - # Returns the first x,y (centered) that has space for w,h. - def gridGetAvailable(w, h): - for y in range(len(gridEditor.grid)): - for x in range(len(gridEditor.grid[0])): - if gridIsAvailable(x, y, w, h): - return x, y - return None, None - - # Returns True and an x,y (centered) coord for the given space. Marks that space used. - def gridTryPlace(w, h): - x, y = gridGetAvailable(w, h) - if not x == None: - for j in gridComputeRange(y, h): - for i in gridComputeRange(x, w): - gridEditor.grid[j][i] = None - return True, x, y - else: - return False, None, None - - actualActIdsToAdd = [ - #PartyGlobals.ActivityIds.PartyJukebox, # mut.ex: PartyJukebox40 - PartyGlobals.ActivityIds.PartyCannon, - #PartyGlobals.ActivityIds.PartyTrampoline, - PartyGlobals.ActivityIds.PartyCatch, - #PartyGlobals.ActivityIds.PartyDance, # mut.ex: PartyDance20 - PartyGlobals.ActivityIds.PartyTugOfWar, - PartyGlobals.ActivityIds.PartyFireworks, - PartyGlobals.ActivityIds.PartyClock, - PartyGlobals.ActivityIds.PartyJukebox40, - PartyGlobals.ActivityIds.PartyDance20, - PartyGlobals.ActivityIds.PartyCog, - PartyGlobals.ActivityIds.PartyVictoryTrampoline, # victory party - ] - - actualDecorIdsToAdd = [ - PartyGlobals.DecorationIds.BalloonAnvil, - PartyGlobals.DecorationIds.BalloonStage, - PartyGlobals.DecorationIds.Bow, - PartyGlobals.DecorationIds.Cake, - PartyGlobals.DecorationIds.Castle, - PartyGlobals.DecorationIds.GiftPile, - PartyGlobals.DecorationIds.Horn, - PartyGlobals.DecorationIds.MardiGras, - PartyGlobals.DecorationIds.NoiseMakers, - PartyGlobals.DecorationIds.Pinwheel, - PartyGlobals.DecorationIds.GagGlobe, - #PartyGlobals.DecorationIds.BannerJellyBean, - PartyGlobals.DecorationIds.CakeTower, - #PartyGlobals.DecorationIds.HeartTarget, # valentoons - #PartyGlobals.DecorationIds.HeartBanner, # valentoons - #PartyGlobals.DecorationIds.FlyingHeart, # valentoons - PartyGlobals.DecorationIds.Hydra, # 16: victory party - PartyGlobals.DecorationIds.BannerVictory, # 17: victory party - PartyGlobals.DecorationIds.CannonVictory, # 18: victory party - PartyGlobals.DecorationIds.CogStatueVictory, # 19: victory party - PartyGlobals.DecorationIds.TubeCogVictory, # 20: victory party - PartyGlobals.DecorationIds.cogIceCreamVictory, # 21: victory party - ] - - activities = [] - - for itemId in actualActIdsToAdd: - item = PartyGlobals.ActivityInformationDict[itemId] - success, x, y = gridTryPlace(*item['gridsize']) - if success: - print "~party new ADDED: Activity %s %s at %s, %s" % (itemId, str(item['gridsize']), x, y) - # item index, grid x, grid y, heading - partyItem = (itemId, x, y, 0) - activities.append(partyItem) - else: - print "~party new SKIPPED: No room for activity %s" % itemId - - decorations = [] - - for itemId in actualDecorIdsToAdd: - item = PartyGlobals.DecorationInformationDict[itemId] - success, x, y = gridTryPlace(*item['gridsize']) - if success: - print "~party new ADDED: Decoration %s %s at %s, %s" % (itemId, str(item['gridsize']), x, y) - # item index, grid x, grid y, heading - partyItem = (itemId, x, y, 0) - decorations.append(partyItem) - else: - print "~party new SKIPPED: No room for decoration %s" % itemId - - isPrivate = False - inviteTheme = PartyGlobals.InviteTheme.Birthday - self.air.partyManager.addPartyRequest( - senderId, - startTime.strftime("%Y-%m-%d %H:%M:%S"), - endTime.strftime("%Y-%m-%d %H:%M:%S"), - isPrivate, - inviteTheme, - activities, - decorations, - invitees, - ) - # force an immediate check of which parties can start - self.air.partyManager.forceCheckStart() - - elif action == 'update': - # simulate this avatarLogging in, which forces invites - # and party updates from the dbs - self.air.partyManager.partyUpdate(senderId) - - elif action == 'checkStart': - # force an immediate check of which parties can start - self.air.partyManager.forceCheckStart() - - elif action == 'unreleasedServer': - newVal = self.air.partyManager.toggleAllowUnreleasedServer() - response = "Allow Unreleased Server= %s" % newVal - - elif action == 'canBuy': - newVal = self.air.partyManager.toggleCanBuyParties() - response = "can buy parties= %s" % newVal - - elif action == 'end': - response = self.air.partyManager.magicWordEnd(senderId) - - elif action == 'plan': - response = "Going to party grounds to plan" - - # hoodId determines the loading - hoodId = ToontownGlobals.PartyHood - - self.sendUpdateToAvatarId(av.doId, 'requestTeleport', - ["safeZoneLoader", "party", - hoodId, 0, 0]) - - if response: - self.down_setMagicWordResponse(senderId, response) diff --git a/toontown/src/ai/TrickOrTreatMgrAI.py b/toontown/src/ai/TrickOrTreatMgrAI.py index 8553714b..d5260f0c 100644 --- a/toontown/src/ai/TrickOrTreatMgrAI.py +++ b/toontown/src/ai/TrickOrTreatMgrAI.py @@ -1,4 +1,4 @@ -import ScavengerHuntMgrAI +from . import ScavengerHuntMgrAI from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from toontown.ai import DistributedTrickOrTreatTargetAI @@ -35,7 +35,7 @@ def createListeners(self): """ Create the listeners that will look for an event in the relavent zone """ - for id in self.goals.keys(): + for id in list(self.goals.keys()): mgrAI = DistributedTrickOrTreatTargetAI.DistributedTrickOrTreatTargetAI(self.air, self.hunt, id, diff --git a/toontown/src/ai/UtilityStart.py b/toontown/src/ai/UtilityStart.py index f5147f34..0cf809ee 100644 --- a/toontown/src/ai/UtilityStart.py +++ b/toontown/src/ai/UtilityStart.py @@ -8,10 +8,10 @@ import ihooks ihooks.install() -print "Initializing..." +print("Initializing...") from otp.ai.AIBaseGlobal import * -import UtilityAIRepository +from . import UtilityAIRepository simbase.mdip = simbase.config.GetString("msg-director-ip", "localhost") simbase.mdport = simbase.config.GetInt("msg-director-port", 6665) diff --git a/toontown/src/ai/WelcomeValleyManagerAI.py b/toontown/src/ai/WelcomeValleyManagerAI.py index 08b1fa12..b1adadbe 100644 --- a/toontown/src/ai/WelcomeValleyManagerAI.py +++ b/toontown/src/ai/WelcomeValleyManagerAI.py @@ -59,7 +59,7 @@ # are teleporting to a friend in a Removing hood do not request this # zone change via the AI, and so will not be redirected to a different # hood--they will still arrive in the same hood with their friend.) -# For the purposes of balancing, we consider the replacement hood +# For the purposes of balancing, we consider the replacement hood # immediately contains its population plus that of the Removing # hood. @@ -85,10 +85,10 @@ class WelcomeValleyManagerAI(DistributedObjectAI.DistributedObjectAI): def __init__(self, air): DistributedObjectAI.DistributedObjectAI.__init__(self, air) - + self.welcomeValleyAllocator = UniqueIdAllocator( - ToontownGlobals.WelcomeValleyBegin / 2000, - ToontownGlobals.WelcomeValleyEnd / 2000 - 1) + ToontownGlobals.WelcomeValleyBegin // 2000, + ToontownGlobals.WelcomeValleyEnd // 2000 - 1) self.welcomeValleys = {} self.avatarZones = {} @@ -135,7 +135,7 @@ def delete(self): ## (zoneId < 61000 and zoneId != 11000 and zoneId != 12000 and zoneId != 13000): ## self.air.writeServerEvent('suspicious', avId, 'has cogIndex %s transitioning from zone %s to %s' % (avatar.cogIndex, lastZoneId, zoneId)) ## avatar.b_setCogIndex(-1) - + def toonSetZone(self, avId, zoneId): lastZoneId = self.avatarSetZone(avId, zoneId) @@ -171,7 +171,7 @@ def avatarSetZone(self, avId, zoneId): # this first so we don't risk momentarily bringing the # hood population to 0. hoodId = ZoneUtil.getHoodId(zoneId) - + # if this is a GS hoodId, just grab the TT hood if (hoodId % 2000) < 1000: hood = self.welcomeValleys.get(hoodId) @@ -179,11 +179,11 @@ def avatarSetZone(self, avId, zoneId): hood = self.welcomeValleys.get(hoodId - 1000) if hood: - hood[0].incrementPopulation(zoneId, 1) - if (hood == self.newHood) and hood[0].getPgPopulation() >= PGstable: + hood.incrementPopulation(zoneId, 1) + if (hood == self.newHood) and hood.getPgPopulation() >= PGstable: # This is now a stable hood. self.__newToStable(hood) - + self.avatarZones[avId] = zoneId if lastZoneId == None: @@ -201,12 +201,12 @@ def avatarSetZone(self, avId, zoneId): hood = self.welcomeValleys.get(lastHoodId - 1000) if hood: - hood[0].incrementPopulation(lastZoneId, -1) - if hood[0].getHoodPopulation() == 0: + hood.incrementPopulation(lastZoneId, -1) + if hood.getHoodPopulation() == 0: self.__hoodIsEmpty(hood) - elif (hood != self.newHood) and not hood[0].hasRedirect() and \ - hood[0].getPgPopulation() < PGminimum: + elif (hood != self.newHood) and not hood.hasRedirect() and \ + hood.getPgPopulation() < PGminimum: self.__stableToRemoving(hood) return lastZoneId @@ -227,7 +227,7 @@ def makeNew(self, hoodId): if hood in self.removingHoods: self.removingHoods.remove(hood) - hood[0].setRedirect(None) + hood.setRedirect(None) else: self.stableHoods.remove(hood) @@ -248,7 +248,7 @@ def makeStable(self, hoodId): self.__newToStable(hood) else: self.removingHoods.remove(hood) - hood[0].setRedirect(None) + hood.setRedirect(None) self.stableHoods.append(hood) return "Hood %s is now Stable." % (hoodId) @@ -276,7 +276,7 @@ def checkAvatars(self): # are not. Returns a list of the removed avId's. This is # normally used for magic word purposes only. removed = [] - for avId in self.avatarZones.keys(): + for avId in list(self.avatarZones.keys()): if avId not in self.air.doId2do: # Here's one for removing. removed.append(avId) @@ -287,7 +287,7 @@ def checkAvatars(self): def __newToStable(self, hood): # This New hood's population has reached the stable limit; # mark it as a Stable hood. - self.notify.info("Hood %s moved to Stable." % (hood[0].zoneId)) + self.notify.info("Hood %s moved to Stable." % (hood.zoneId)) assert(hood == self.newHood) self.newHood = None @@ -296,7 +296,7 @@ def __newToStable(self, hood): def __stableToRemoving(self, hood): # This hood's population has dropped too low; # schedule it for removal. - self.notify.info("Hood %s moved to Removing." % (hood[0].zoneId)) + self.notify.info("Hood %s moved to Removing." % (hood.zoneId)) assert(hood in self.stableHoods) self.stableHoods.remove(hood) @@ -306,21 +306,21 @@ def __stableToRemoving(self, hood): # replacement, so just keep this one. self.stableHoods.append(hood) else: - hood[0].setRedirect(replacementHood) + hood.setRedirect(replacementHood) self.removingHoods.append(hood) def __hoodIsEmpty(self, hood): - self.notify.info("Hood %s is now empty." % (hood[0].zoneId)) + self.notify.info("Hood %s is now empty." % (hood.zoneId)) - replacementHood = hood[0].replacementHood + replacementHood = hood.replacementHood self.destroyWelcomeValley(hood) # Also check the hood this one is redirecting to; we might # have just emptied it too. - if replacementHood and replacementHood[0].getHoodPopulation() == 0: + if replacementHood and replacementhood.getHoodPopulation() == 0: self.__hoodIsEmpty(replacementHood) - - + + def avatarRequestZone(self, avId, origZoneId): # This services a redirect-zone request for a particular @@ -328,23 +328,23 @@ def avatarRequestZone(self, avId, origZoneId): # zoneId, which should be a WelcomeValley zoneId; the AI # should choose which particular WelcomeValley to direct the # client to. - + if not ZoneUtil.isWelcomeValley(origZoneId): # All requests for static zones are returned unchanged. return origZoneId - + origHoodId = ZoneUtil.getHoodId(origZoneId) hood = self.welcomeValleys.get(origHoodId) if not hood: # If we don't know this hood, choose a new one. hood = self.chooseWelcomeValley() - + if not hood: self.notify.warning("Could not create new WelcomeValley hood for avatar %s." % (avId)) zoneId = ZoneUtil.getCanonicalZoneId(origZoneId) else: # use TTC hoodId - hoodId = hood[0].getRedirect().zoneId + hoodId = hood.getRedirect().zoneId zoneId = ZoneUtil.getTrueZoneId(origZoneId, hoodId) # Even though the client might choose not to go to the @@ -355,7 +355,7 @@ def avatarRequestZone(self, avId, origZoneId): self.avatarSetZone(avId, zoneId) return zoneId - + def requestZoneIdMessage(self, origZoneId, context): """ @@ -366,7 +366,7 @@ def requestZoneIdMessage(self, origZoneId, context): """ avId = self.air.getAvatarIdFromSender() zoneId = self.avatarRequestZone(avId, origZoneId) - + self.sendUpdateToAvatarId(avId, "requestZoneIdResponse", [zoneId, context]) @@ -384,7 +384,7 @@ def chooseWelcomeValley(self, allowCreateNew = 1): bestHood = None bestPopulation = None for hood in self.stableHoods: - population = hood[0].getPgPopulation() + population = hood.getPgPopulation() if bestHood == None or population < bestPopulation: bestHood = hood bestPopulation = population @@ -394,15 +394,15 @@ def chooseWelcomeValley(self, allowCreateNew = 1): if allowCreateNew and (bestHood == None or bestPopulation >= PGmaximum): self.newHood = self.createWelcomeValley() if self.newHood: - self.notify.info("Hood %s is New." % self.newHood[0].zoneId) + self.notify.info("Hood %s is New." % self.newHood.zoneId) return self.newHood return bestHood def createWelcomeValley(self): - # Creates new copy of ToontownCentral and Goofy Speedway and returns + # Creates new copy of ToontownCentral and returns # thier HoodDataAI. Returns None if no new hoods can be created. - + index = self.welcomeValleyAllocator.allocate() if index == -1: return None @@ -412,29 +412,23 @@ def createWelcomeValley(self): ttHood = TTHoodDataAI.TTHoodDataAI(self.air, ttHoodId) self.air.startupHood(ttHood) - # GS - gsHoodId = index * 2000 + 1000 - gsHood = GSHoodDataAI.GSHoodDataAI(self.air, gsHoodId) - self.air.startupHood(gsHood) - # both hoods are stored in a tuple and referenced by the TTC hoodId - self.welcomeValleys[ttHoodId] = (ttHood, gsHood) - + self.welcomeValleys[ttHoodId] = (ttHood) + # create a pond bingo manager ai for the new WV if simbase.wantBingo: self.notify.info('creating bingo mgr for Welcome Valley %s' % ttHoodId) self.air.createPondBingoMgrAI(ttHood) - return (ttHood, gsHood) + return (ttHood) def destroyWelcomeValley(self, hood): - hoodId = hood[0].zoneId + hoodId = hood.zoneId assert((hoodId % 2000) == 0) del self.welcomeValleys[hoodId] - self.welcomeValleyAllocator.free(hoodId / 2000) - self.air.shutdownHood(hood[0]) - self.air.shutdownHood(hood[1]) + self.welcomeValleyAllocator.free(hoodId // 2000) + self.air.shutdownHood(hood) if self.newHood == hood: self.newHood = None @@ -459,10 +453,10 @@ def getAvatarCount(self): if simbase.fakeDistrictPopulations: return 0 answer = 0 - hoodIds = self.welcomeValleys.keys() + hoodIds = list(self.welcomeValleys.keys()) for hoodId in hoodIds: hood = self.welcomeValleys[hoodId] - answer += hood[0].getHoodPopulation() + answer += hood.getHoodPopulation() return answer @@ -471,7 +465,7 @@ def reportWelcomeValleys(self): # of the Welcome Valley hoods. self.notify.info("Current Welcome Valleys:") - hoodIds = self.welcomeValleys.keys() + hoodIds = list(self.welcomeValleys.keys()) hoodIds.sort() for hoodId in hoodIds: hood = self.welcomeValleys[hoodId] @@ -483,6 +477,6 @@ def reportWelcomeValleys(self): flag = " " self.notify.info("%s %s %s/%s" % ( - hood[0].zoneId, flag, - hood[0].getPgPopulation(), hood[0].getHoodPopulation())) - + hood.zoneId, flag, + hood.getPgPopulation(), hood.getHoodPopulation())) + diff --git a/toontown/src/ai/WinterCarolingMgrAI.py b/toontown/src/ai/WinterCarolingMgrAI.py index 165d0fc0..e30b3092 100644 --- a/toontown/src/ai/WinterCarolingMgrAI.py +++ b/toontown/src/ai/WinterCarolingMgrAI.py @@ -1,4 +1,4 @@ -import ScavengerHuntMgrAI +from . import ScavengerHuntMgrAI from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from toontown.ai import DistributedWinterCarolingTargetAI @@ -35,7 +35,7 @@ def createListeners(self): """ Create the listeners that will look for an event in the relavent zone """ - for id in self.goals.keys(): + for id in list(self.goals.keys()): mgrAI = DistributedWinterCarolingTargetAI.DistributedWinterCarolingTargetAI(self.air, self.hunt, id, diff --git a/toontown/src/ai/portuguese/HolidayManagerAI_local.py b/toontown/src/ai/portuguese/HolidayManagerAI_local.py index 5157b79f..a37ed23e 100644 --- a/toontown/src/ai/portuguese/HolidayManagerAI_local.py +++ b/toontown/src/ai/portuguese/HolidayManagerAI_local.py @@ -39,7 +39,7 @@ ToontownGlobals.NEWYEARS_FIREWORKS : HolidayInfo_Yearly( FireworkManagerAI.FireworkManagerAI, # PST: December 31, 07:00 - December 31, 22:00 - [ (Month.DECEMBER, 31, 07, 0, 0), + [ (Month.DECEMBER, 31, 0o7, 0, 0), # Stop them in the middle of the final hour so we do not interrupt a show in the middle (Month.DECEMBER, 31, 22, 30, 0) ] ), diff --git a/toontown/src/ai/testAI.py b/toontown/src/ai/testAI.py index 51ec953b..bbc98d2b 100644 --- a/toontown/src/ai/testAI.py +++ b/toontown/src/ai/testAI.py @@ -1,8 +1,8 @@ # The AI side -from AIStart import * +from .AIStart import * start() -import DistributedTestAI +from . import DistributedTestAI dt = DistributedTestAI.DistributedTestAI(simbase.air) dt.setA(5) dt.setB("hello") diff --git a/toontown/src/battle/BattleBase.py b/toontown/src/battle/BattleBase.py index 4534121d..f0072e7d 100644 --- a/toontown/src/battle/BattleBase.py +++ b/toontown/src/battle/BattleBase.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToontownBattleGlobals import * from direct.task.Timer import * -import math +import math, functools from direct.directnotify import DirectNotifyGlobal from toontown.toon import NPCToons @@ -11,13 +11,13 @@ # used when calculating attack damage, accuracy bonus, and damage bonus # TOON_ID_COL = 0 -TOON_TRACK_COL = 1 -TOON_LVL_COL = 2 -TOON_TGT_COL = 3 -TOON_HP_COL = 4 -TOON_ACCBONUS_COL = 5 -TOON_HPBONUS_COL = 6 -TOON_KBBONUS_COL = 7 +TOON_TRACK_COL = 1 +TOON_LVL_COL = 2 +TOON_TGT_COL = 3 +TOON_HP_COL = 4 +TOON_ACCBONUS_COL = 5 +TOON_HPBONUS_COL = 6 +TOON_KBBONUS_COL = 7 SUIT_DIED_COL = 8 SUIT_REVIVE_COL = 9 @@ -40,15 +40,15 @@ PASS_ATTACK = -3 # used so we can display pass indicator NO_TRAP = -1 LURE_SUCCEEDED = -1 -PASS = 98 -SOS = 99 +PASS = 98 +SOS = 99 NPCSOS = 97 PETSOS = 96 FIRE = 100 # Defined in ToontownBattleGlobals.py HEAL = HEAL_TRACK TRAP = TRAP_TRACK -LURE = LURE_TRACK +LURE = LURE_TRACK SOUND = SOUND_TRACK THROW = THROW_TRACK SQUIRT = SQUIRT_TRACK @@ -67,20 +67,20 @@ TOON_SOUND_DELAY = 1.0 -TOON_THROW_DELAY = 0.5 +TOON_THROW_DELAY = 0.5 TOON_THROW_SUIT_DELAY = 1.0 TOON_SQUIRT_DELAY = 0.5 TOON_SQUIRT_SUIT_DELAY = 1.0 -TOON_DROP_DELAY = 0.8 +TOON_DROP_DELAY = 0.8 TOON_DROP_SUIT_DELAY = 1.0 TOON_RUN_T = 3.3 TIMEOUT_PER_USER = 5 -TOON_FIRE_DELAY = 0.5 +TOON_FIRE_DELAY = 0.5 TOON_FIRE_SUIT_DELAY = 1.0 @@ -98,8 +98,8 @@ CLIENT_INPUT_TIMEOUT = simbase.config.GetFloat('battle-input-timeout', TTLocalizer.BBbattleInputTimeout) def levelAffectsGroup(track, level): - #return (level % 2) - return attackAffectsGroup(track, level) #UBER + return (level % 2) + #return attackAffectsGroup(track, level) #UBER def attackAffectsGroup(track, level, type=None): #if (track == HEAL and (level % 2)): @@ -123,14 +123,14 @@ def attackAffectsGroup(track, level, type=None): def getToonAttack(id, track=NO_ATTACK, level=-1, target=-1): """ getToonAttack(id, track, level, target) """ - return [id, track, level, target, [], 0, 0, [], 0, 0] + return [id, track, level, target, [], 0, 0, [], 0] def getDefaultSuitAttacks(): """ getDefaultSuitAttacks() """ - suitAttacks = [[NO_ID, NO_ATTACK, -1, [], 0, 0, 0], - [NO_ID, NO_ATTACK, -1, [], 0, 0, 0], - [NO_ID, NO_ATTACK, -1, [], 0, 0, 0], + suitAttacks = [[NO_ID, NO_ATTACK, -1, [], 0, 0, 0], + [NO_ID, NO_ATTACK, -1, [], 0, 0, 0], + [NO_ID, NO_ATTACK, -1, [], 0, 0, 0], [NO_ID, NO_ATTACK, -1, [], 0, 0, 0]] return suitAttacks @@ -140,17 +140,17 @@ def getDefaultSuitAttack(): return [NO_ID, NO_ATTACK, -1, [], 0, 0, 0] def findToonAttack(toons, attacks, track): - """ findToonAttack(toons, attacks, track) + """ findToonAttack(toons, attacks, track) Return all attacks of the specified track sorted by increasing level """ foundAttacks = [] for t in toons: - if (attacks.has_key(t)): + if (t in attacks): attack = attacks[t] local_track = attack[TOON_TRACK_COL] # If it's an NPC, convert to the appropriate track if (track != NPCSOS and attack[TOON_TRACK_COL] == NPCSOS): - local_track = NPCToons.getNPCTrack(attack[TOON_TGT_COL]) + local_track = NPCToons.getNPCTrack(attack[TOON_TGT_COL]) if (local_track == track): if local_track == FIRE: canFire = 1 @@ -162,7 +162,7 @@ def findToonAttack(toons, attacks, track): if canFire: assert(t == attack[TOON_ID_COL]) foundAttacks.append(attack) - + else: assert(t == attack[TOON_ID_COL]) foundAttacks.append(attack) @@ -172,8 +172,8 @@ def compFunc(a, b): elif (a[TOON_LVL_COL] < b[TOON_LVL_COL]): return -1 return 0 - foundAttacks.sort(compFunc) - return foundAttacks + foundAttacks.sort(key=functools.cmp_to_key(compFunc)) + return foundAttacks # A little pad time added to server time calculations, to allow for # slow or out-of-sync clients. In general, the AI server will give @@ -214,7 +214,7 @@ class BattleBase: # For each number of suits in the battle (1, 2, 3, or 4), the # corresponding element of suitPoints is a list of n (pos, heading) # pairs for each of the n suits to stand. - + suitPoints = ( ((Point3(0, 5, 0), 179), ), @@ -230,7 +230,7 @@ class BattleBase: (Point3(-2, 6.3, 0), 190), (Point3(-6, 4.4, 0), 200), )) - + # And this defines the single set of points for suits who are # "pending": they have joined the battle, but are waiting for the # next round to begin before they take their place. @@ -245,7 +245,7 @@ class BattleBase: toonPoints = ( ((Point3(0, -6, 0), 0), ), - ((Point3(1.5, -6.5, 0), 5), + ((Point3(1.5, -6.5, 0), 5), (Point3(-1.5, -6.5, 0), -5), ), ((Point3(3, -6.75, 0), 5), @@ -264,7 +264,7 @@ class BattleBase: (Point3(3, -8, 0), 5), (Point3(5.5, -5.5, 0), 20), ) - + # These define the points on the perimeter of the battle circle # for suits and toons who are "joining"; this allows the avatar to # walk a circle around the battle to get to its pending point, @@ -348,12 +348,12 @@ def buildJoinPointList(self, avPos, destPos, toon=0): # In the default case, avatars walk around the perimeter of # the battle cell to get to their target point. Figure out # the shortest path around the circle. - + # First, find the closest battle join point minDist = 999999.0 nearestP = None for p in BattleBase.allPoints: - dist = Vec3(avPos - p).length() + dist = Vec3(avPos - p).length() if (dist < minDist): nearestP = p minDist = dist @@ -370,7 +370,7 @@ def buildJoinPointList(self, avPos, destPos, toon=0): if (toon == 1): if (nearestP == BattleBase.posE): self.notify.debug('buildJoinPointList() - posE') - plist = [BattleBase.posE] + plist = [BattleBase.posE] elif (BattleBase.toonCwise.count(nearestP) == 1): self.notify.debug('buildJoinPointList() - clockwise') index = BattleBase.toonCwise.index(nearestP) @@ -401,4 +401,4 @@ def addHelpfulToon(self, toonId): """Add toonId to our helpful toons, make sure it's in the list at most once.""" if toonId not in self.helpfulToons: self.helpfulToons.append(toonId) - + diff --git a/toontown/src/battle/BattleCalculatorAI.py b/toontown/src/battle/BattleCalculatorAI.py index 0e236c11..feda142e 100644 --- a/toontown/src/battle/BattleCalculatorAI.py +++ b/toontown/src/battle/BattleCalculatorAI.py @@ -1,11 +1,11 @@ -from BattleBase import * -from DistributedBattleAI import * +from .BattleBase import * +from .DistributedBattleAI import * from toontown.toonbase.ToontownBattleGlobals import * import random from toontown.suit import DistributedSuitBaseAI -import SuitBattleGlobals -import BattleExperienceAI +from . import SuitBattleGlobals +from . import BattleExperienceAI from toontown.toon import NPCToons from toontown.pets import PetTricks, DistributedPetProxyAI from direct.showbase.PythonUtil import lerp @@ -362,7 +362,7 @@ def __calcToonAtkHit(self, attackIndex, atkTargets): lure = atkTrack == LURE and \ ((not attackAffectsGroup(atkTrack, atkLevel, attack[TOON_TRACK_COL]) and \ - self.successfulLures.has_key(attack[TOON_TGT_COL])) or \ + attack[TOON_TGT_COL] in self.successfulLures) or \ attackAffectsGroup(atkTrack, atkLevel, attack[TOON_TRACK_COL])) if atkTrack == prevAtkTrack and \ (attack[TOON_TGT_COL] == prevAttack[TOON_TGT_COL] or \ @@ -577,7 +577,7 @@ def getSuitTrapType(self, suitId): the type of trap the specified suit has on it """ - if (self.traps.has_key(suitId)): + if (suitId in self.traps): if (self.traps[suitId][0] == self.TRAP_CONFLICT): return NO_TRAP else: @@ -590,7 +590,7 @@ def __suitTrapDamage(self, suitId): Returns the damage that will be done to the suit when its trap is sprung. """ - if (self.traps.has_key(suitId)): + if (suitId in self.traps): return self.traps[suitId][2] else: return 0 @@ -601,7 +601,7 @@ def addTrainTrapForJoiningSuit(self, suitId): """ self.notify.debug('addTrainTrapForJoiningSuit suit=%d self.traps=%s' % (suitId,self.traps)) trapInfoToUse = None - for trapInfo in self.traps.values(): + for trapInfo in list(self.traps.values()): if trapInfo[0] == UBER_GAG_LEVEL_INDEX: trapInfoToUse = trapInfo break @@ -624,7 +624,7 @@ def __addSuitGroupTrap(self, suitId, trapLvl, attackerId, allSuits, npcDamage = """ #import pdb; pdb.set_trace() if (npcDamage == 0): - if (self.traps.has_key(suitId)): + if (suitId in self.traps): # a trap level of TRAP_CONFLICT indicates that this suit has # had more than one trap placed on it this round so any new # traps placed on this suit should not stay @@ -639,7 +639,7 @@ def __addSuitGroupTrap(self, suitId, trapLvl, attackerId, allSuits, npcDamage = #mark all the suits as trap conflict for suit in allSuits: id = suit.doId - if (self.traps.has_key(id)): + if (id in self.traps): self.traps[id][0] = self.TRAP_CONFLICT else: self.traps[id] = [self.TRAP_CONFLICT, 0, 0] @@ -665,7 +665,7 @@ def __addSuitGroupTrap(self, suitId, trapLvl, attackerId, allSuits, npcDamage = else: # NPC traps defer to any pre-set traps, but they can take # the spot of two traps that collided - if (self.traps.has_key(suitId)): + if (suitId in self.traps): if (self.traps[suitId][0] == self.TRAP_CONFLICT): self.traps[suitId] = [trapLvl, 0, npcDamage] elif (not self.__suitIsLured(suitId)): @@ -680,7 +680,7 @@ def __addSuitTrap(self, suitId, trapLvl, attackerId, npcDamage = 0): place a trap in front of a specific suit """ if (npcDamage == 0): - if (self.traps.has_key(suitId)): + if (suitId in self.traps): # a trap level of TRAP_CONFLICT indicates that this suit has # had more than one trap placed on it this round so any new # traps placed on this suit should not stay @@ -707,7 +707,7 @@ def __addSuitTrap(self, suitId, trapLvl, attackerId, npcDamage = 0): else: # NPC traps defer to any pre-set traps, but they can take # the spot of two traps that collided - if (self.traps.has_key(suitId)): + if (suitId in self.traps): if (self.traps[suitId][0] == self.TRAP_CONFLICT): self.traps[suitId] = [trapLvl, 0, npcDamage] elif (not self.__suitIsLured(suitId)): @@ -719,7 +719,7 @@ def __removeSuitTrap(self, suitId): remove any trap from the specified suit """ - if self.traps.has_key(suitId): + if suitId in self.traps: del self.traps[suitId] def __clearTrapCreator(self, creatorId, suitId = None): @@ -733,11 +733,11 @@ def __clearTrapCreator(self, creatorId, suitId = None): no longer get exp credit for the trap """ if suitId == None: - for currTrap in self.traps.keys(): + for currTrap in list(self.traps.keys()): if creatorId == self.traps[currTrap][1]: self.traps[currTrap][1] = 0 else: - if self.traps.has_key(suitId): + if suitId in self.traps: assert(self.traps[suitId][1] == 0 or self.traps[suitId][1] == creatorId) self.traps[suitId][1] = 0 @@ -753,7 +753,7 @@ def __trapCreator(self, suitId): battle but used an overly-powerful trap item, 0 is returned. """ - if self.traps.has_key(suitId): + if suitId in self.traps: return self.traps[suitId][1] else: return 0 @@ -766,7 +766,7 @@ def __initTraps(self): 'trap conflicts' dont persist between rounds """ self.trainTrapTriggered = False - keysList = self.traps.keys() + keysList = list(self.traps.keys()) for currTrap in keysList: if (self.traps[currTrap][0] == self.TRAP_CONFLICT): del self.traps[currTrap] @@ -782,7 +782,7 @@ def __calcToonAtkHp(self, toonId): """ # generate a list of possible targets based on the attack and # determine the damage done to each - assert(self.battle.toonAttacks.has_key(toonId)) + assert(toonId in self.battle.toonAttacks) attack = self.battle.toonAttacks[toonId] targetList = self.__createToonTargetList(toonId) @@ -868,7 +868,7 @@ def __calcToonAtkHp(self, toonId): # of the target, we know that the target is not lured attackTrack = TRAP #attackLevel = targetList[currTarget].battleTrap - if (self.traps.has_key(targetId)): + if (targetId in self.traps): trapInfo = self.traps[targetId] attackLevel = trapInfo[0] else: @@ -935,8 +935,8 @@ def __calcToonAtkHp(self, toonId): # they cause the suit to be lured for a longer period of # time if targetLured and \ - (not self.successfulLures.has_key(targetId) or \ - (self.successfulLures.has_key(targetId) and \ + (targetId not in self.successfulLures or \ + (targetId in self.successfulLures and \ self.successfulLures[targetId][1] < \ atkLevel)): self.notify.debug("Adding target " + str(targetId) + @@ -1107,7 +1107,7 @@ def __calcToonAtkHp(self, toonId): # then be sure to put in the damage done to this target # by this lure since this might not be the actual lure # that ends up causing damage to the suit - if (self.successfulLures.has_key(targetId) and + if (targetId in self.successfulLures and atkTrack == LURE): self.notify.debug("Updating lure damage to " + str(result)) @@ -1285,7 +1285,7 @@ def __applyToonAttackDamages(self, toonId, hpbonus=0, kbbonus=0): totalDamages = 0 if not self.APPLY_HEALTH_ADJUSTMENTS: return totalDamages - assert(self.battle.toonAttacks.has_key(toonId)) + assert(toonId in self.battle.toonAttacks) attack = self.battle.toonAttacks[toonId] track = self.__getActualTrack(attack) if (track != NO_ATTACK and track != SOS and @@ -1320,7 +1320,7 @@ def __applyToonAttackDamages(self, toonId, hpbonus=0, kbbonus=0): # target of toon attack was another toon, we # don't want to apply any damage yet currTarget = targets[position] - assert(self.toonHPAdjusts.has_key(currTarget)) + assert(currTarget in self.toonHPAdjusts) if self.CAP_HEALS: # make sure to bound the toon's health to its # max health @@ -1521,14 +1521,14 @@ def __addDmgToBonuses(self, dmg, attackIndex, hp=1): attack = self.battle.toonAttacks[attackerId] track = self.__getActualTrack(attack) if hp: - if self.hpBonuses[tgtPos].has_key(track): + if track in self.hpBonuses[tgtPos]: self.hpBonuses[tgtPos][track].append([attackIndex, dmg]) else: self.hpBonuses[tgtPos][track] = [[attackIndex, dmg]] else: # only add a kbBonus value if the suit is currently lured if self.__suitIsLured(currTgt.getDoId()): - if self.kbBonuses[tgtPos].has_key(track): + if track in self.kbBonuses[tgtPos]: self.kbBonuses[tgtPos][track].append([attackIndex, dmg]) else: self.kbBonuses[tgtPos][track] = [[attackIndex, dmg]] @@ -1605,7 +1605,7 @@ def __processBonuses(self, hp=1): repr(self.kbBonuses)) tgtPos = 0 for currTgt in bonusList: - for currAtkType in currTgt.keys(): + for currAtkType in list(currTgt.keys()): # for an hpBonus we need at least 2 damages from a single # attack type, for kbBonuses we only need at least 1 damage # value @@ -1723,9 +1723,9 @@ def __rememberToonAttack(self, suitId, toonId, damage): it and it will attack back if it thinks the toon is worthy of his/her time """ - if not self.SuitAttackers.has_key(suitId): + if suitId not in self.SuitAttackers: self.SuitAttackers[suitId] = { toonId: damage } - elif not self.SuitAttackers[suitId].has_key(toonId): + elif toonId not in self.SuitAttackers[suitId]: self.SuitAttackers[suitId][toonId] = damage elif self.SuitAttackers[suitId][toonId] <= damage: # this toon has done more damage than was done on a previous @@ -1776,7 +1776,7 @@ def __postProcessToonAttacks(self): # Make sure traps are placed on the suits if (atkTrack == TRAP): - if (self.traps.has_key(currTgt.doId)): + if (currTgt.doId in self.traps): trapInfo = self.traps[currTgt.doId] currTgt.battleTrap = trapInfo[0] @@ -1803,7 +1803,7 @@ def __postProcessToonAttacks(self): # guy was lured and if so which attack successfully # lured him/her/it tgtId = currTgt.getDoId() - if (self.successfulLures.has_key(tgtId) and + if (tgtId in self.successfulLures and atkTrack == LURE): lureInfo = self.successfulLures[tgtId] self.notify.debug("applying lure data: " + @@ -1813,7 +1813,7 @@ def __postProcessToonAttacks(self): tgtPos = self.battle.activeSuits.index(currTgt) #check if a train trap will triger, if so remember it - if (self.traps.has_key(currTgt.doId)): + if (currTgt.doId in self.traps): trapInfo = self.traps[currTgt.doId] if trapInfo[0] == UBER_GAG_LEVEL_INDEX: self.notify.debug('train trap triggered for %d' % currTgt.doId) @@ -2074,7 +2074,7 @@ def __calculateToonAttacks(self): toonId) continue - assert(self.battle.toonAttacks.has_key(toonId)) + assert(toonId in self.battle.toonAttacks) attack = self.battle.toonAttacks[toonId] atkTrack = self.__getActualTrack(attack) @@ -2195,27 +2195,27 @@ def __calcSuitTarget(self, attackIndex): """ attack = self.battle.suitAttacks[attackIndex] suitId = attack[SUIT_ID_COL] - if self.SuitAttackers.has_key(suitId) and \ + if suitId in self.SuitAttackers and \ random.randint(0, 99) < 75: # first calculate the total damage done to this suit by all # recorded attackers, this is so we can create a frequency # list of damage percentages that we can randomly pick from totalDamage = 0 - for currToon in self.SuitAttackers[suitId].keys(): + for currToon in list(self.SuitAttackers[suitId].keys()): totalDamage += self.SuitAttackers[suitId][currToon] # create a list of damage percentages and pick one of the # weighted values, this tells us which toon attacker that # the suit should attack dmgs = [] - for currToon in self.SuitAttackers[suitId].keys(): + for currToon in list(self.SuitAttackers[suitId].keys()): dmgs.append((self.SuitAttackers[suitId][currToon] / totalDamage) * 100) dmgIdx = SuitBattleGlobals.pickFromFreqList(dmgs) if (dmgIdx == None): toonId = self.__pickRandomToon(suitId) else: - toonId = self.SuitAttackers[suitId].keys()[dmgIdx] + toonId = list(self.SuitAttackers[suitId].keys())[dmgIdx] if (toonId == -1 or toonId not in self.battle.activeToons): return -1 self.notify.debug("Suit attacking back at toon " + str(toonId)) @@ -2362,7 +2362,7 @@ def __getToonHp(self, toonDoId): Get the health of a toon given its doId """ handle = self.battle.getToon(toonDoId) - if handle != None and self.toonHPAdjusts.has_key(toonDoId): + if handle != None and toonDoId in self.toonHPAdjusts: return handle.hp + self.toonHPAdjusts[toonDoId] else: return 0 @@ -2377,7 +2377,7 @@ def __getToonMaxHp(self, toonDoId): """ handle = self.battle.getToon(toonDoId) if (handle != None): - assert(self.toonHPAdjusts.has_key(toonDoId)) + assert(toonDoId in self.toonHPAdjusts) return handle.maxHp else: return 0 @@ -2410,7 +2410,7 @@ def __applySuitAttackDamages(self, attackIndex): # attacks assert(position < len(attack[SUIT_HP_COL])) toonHp = self.__getToonHp(t) - assert(self.toonHPAdjusts.has_key(t)) + assert(t in self.toonHPAdjusts) if toonHp - attack[SUIT_HP_COL][position] <= 0: if self.notify.getDebug(): self.notify.debug("Toon %d has died, removing" % t) @@ -2440,14 +2440,14 @@ def __suitCanAttack(self, suitId): return 1 def __updateSuitAtkStat(self, toonId): - if self.suitAtkStats.has_key(toonId): + if toonId in self.suitAtkStats: self.suitAtkStats[toonId] += 1 else: self.suitAtkStats[toonId] = 1 def __printSuitAtkStats(self): self.notify.debug("Suit Atk Stats:") - for currTgt in self.suitAtkStats.keys(): + for currTgt in list(self.suitAtkStats.keys()): if not currTgt in self.battle.activeToons: continue tgtPos = self.battle.activeToons.index(currTgt) @@ -2565,7 +2565,7 @@ def __updateLureTimeouts(self): # on the suit, if not, randomly decide if the suit should 'magically # wake up' from the lure based on the fail chance of the particular # lure originally used on the suit - for currLuredSuit in self.currentlyLuredSuits.keys(): + for currLuredSuit in list(self.currentlyLuredSuits.keys()): self.__incLuredCurrRound(currLuredSuit) if self.__luredMaxRoundsReached(currLuredSuit) or \ self.__luredWakeupTime(currLuredSuit): @@ -2700,7 +2700,7 @@ def calculateRound(self): longest = max(len(self.battle.activeToons), len(self.battle.activeSuits)) for t in self.battle.activeToons: - assert(self.battle.toonAttacks.has_key(t)) + assert(t in self.battle.toonAttacks) for j in range(longest): self.battle.toonAttacks[t][TOON_HP_COL].append(-1) self.battle.toonAttacks[t][TOON_KBBONUS_COL].append(-1) @@ -2763,17 +2763,17 @@ def toonLeftBattle(self, toonId): """ if self.notify.getDebug(): self.notify.debug('toonLeftBattle()' + str(toonId)) - if self.toonSkillPtsGained.has_key(toonId): + if toonId in self.toonSkillPtsGained: del self.toonSkillPtsGained[toonId] - if self.suitAtkStats.has_key(toonId): + if toonId in self.suitAtkStats: del self.suitAtkStats[toonId] if not self.CLEAR_SUIT_ATTACKERS: # clear out the SuitAttackers map (which allows suits to remember # which toons attacked him/her last round) of the specified toonId oldSuitIds = [] - for s in self.SuitAttackers.keys(): - if self.SuitAttackers[s].has_key(toonId): + for s in list(self.SuitAttackers.keys()): + if toonId in self.SuitAttackers[s]: del self.SuitAttackers[s][toonId] if len(self.SuitAttackers[s]) == 0: oldSuitIds.append(s) @@ -2808,7 +2808,7 @@ def suitLeftBattle(self, suitId): # also make sure to remove the suit from the 'which toon attacked # me last round' list - if self.SuitAttackers.has_key(suitId): + if suitId in self.SuitAttackers: del self.SuitAttackers[suitId] # remove the suit from the traps list which helps us keep track of @@ -2842,8 +2842,8 @@ def __updateActiveToons(self): # which toons attacked him/her last round) of all toons that are # not found in the battle.activeToons list oldSuitIds = [] - for s in self.SuitAttackers.keys(): - for t in self.SuitAttackers[s].keys(): + for s in list(self.SuitAttackers.keys()): + for t in list(self.SuitAttackers[s].keys()): if not t in self.battle.activeToons: del self.SuitAttackers[s][t] if len(self.SuitAttackers[s]) == 0: @@ -2855,7 +2855,7 @@ def __updateActiveToons(self): # clear out any traps creator id's that refer to a toon not found # in the active toons list - for trap in self.traps.keys(): + for trap in list(self.traps.keys()): if not self.traps[trap][1] in self.battle.activeToons: self.notify.debug("Trap for toon " + str(self.traps[trap][1]) + @@ -2869,7 +2869,7 @@ def getLuredSuits(self): """ Get the doId's of all suits that are currently lured """ - luredSuits = self.currentlyLuredSuits.keys() + luredSuits = list(self.currentlyLuredSuits.keys()) # make sure that any suits that were still lured at the begining # of this round are still in the lured suits list that we return # to the battle @@ -2889,7 +2889,7 @@ def __suitIsLured(self, suitId, prevRound=0): Check to see if a suit is currently lured """ - inList = self.currentlyLuredSuits.has_key(suitId) + inList = suitId in self.currentlyLuredSuits if prevRound: # only return true if the suit has been lured for at least # one entire round @@ -2906,11 +2906,11 @@ def __findAvailLureId(self, lurerId): lure attacks from the same lurer can be distinguished from each other and exp can be given properly """ - luredSuits = self.currentlyLuredSuits.keys() + luredSuits = list(self.currentlyLuredSuits.keys()) lureIds = [] for currLured in luredSuits: lurerInfo = self.currentlyLuredSuits[currLured][3] - lurers = lurerInfo.keys() + lurers = list(lurerInfo.keys()) for currLurer in lurers: # if we have found a match for the specified lurer, add the # lureId to a list of lureId's for this toon @@ -2961,11 +2961,11 @@ def __addLuredSuitInfo(self, suitId, currRounds, maxRounds, wakeChance, else: credit = self.itemIsCredit(LURE, lureLvl) - if self.currentlyLuredSuits.has_key(suitId): + if suitId in self.currentlyLuredSuits: # This suit was already lured; we're just luring it more. lureInfo = self.currentlyLuredSuits[suitId] - if not lureInfo[3].has_key(lurer): + if lurer not in lureInfo[3]: # This toon hasn't lured this suit yet this time around. lureInfo[1] += maxRounds if wakeChance < lureInfo[2]: @@ -2992,7 +2992,7 @@ def __getLurers(self, suitId): suit """ if self.__suitIsLured(suitId): - return self.currentlyLuredSuits[suitId][3].keys() + return list(self.currentlyLuredSuits[suitId][3].keys()) return [] def __getLuredExpInfo(self, suitId): @@ -3037,10 +3037,10 @@ def __clearLurer(self, lurerId, lureId=-1): Remove any references to the specified toon from the lured suits list """ - luredSuits = self.currentlyLuredSuits.keys() + luredSuits = list(self.currentlyLuredSuits.keys()) for currLured in luredSuits: lurerInfo = self.currentlyLuredSuits[currLured][3] - lurers = lurerInfo.keys() + lurers = list(lurerInfo.keys()) for currLurer in lurers: if currLurer == lurerId and \ (lureId == -1 or lureId == lurerInfo[currLurer][1]): @@ -3162,7 +3162,7 @@ def __getActualTrackLevelHp(self, toonAttack): assert(trickId < len(PetTricks.TrickHeals)) healRange = PetTricks.TrickHeals[trickId] hp = 0 - if simbase.air.doId2do.has_key(petProxyId): + if petProxyId in simbase.air.doId2do: petProxy = simbase.air.doId2do[petProxyId] if trickId < len(petProxy.trickAptitudes): aptitude = petProxy.trickAptitudes[trickId] @@ -3174,7 +3174,7 @@ def __getActualTrackLevelHp(self, toonAttack): def __calculatePetTrickSuccess(self, toonAttack): petProxyId = toonAttack[TOON_TGT_COL] - if not simbase.air.doId2do.has_key(petProxyId): + if petProxyId not in simbase.air.doId2do: self.notify.warning("pet proxy %d not in doId2do!" % petProxyId) toonAttack[TOON_ACCBONUS_COL] = 1 return (0, 0) diff --git a/toontown/src/battle/BattleExperienceAI.py b/toontown/src/battle/BattleExperienceAI.py index aaeac7c6..995959e8 100644 --- a/toontown/src/battle/BattleExperienceAI.py +++ b/toontown/src/battle/BattleExperienceAI.py @@ -37,7 +37,7 @@ def getBattleExperience(numToons, activeToons, toonExp, BattleExperienceAINotify.warning("=============\nERROR ERROR helpfulToons=None in assignRewards , tell Red") if __debug__: import pdb; pdb.set_trace() - + p = [] for k in range(numToons): toon = None @@ -49,10 +49,9 @@ def getBattleExperience(numToons, activeToons, toonExp, p.append(-1) p.append([0, 0, 0, 0, 0, 0, 0]) p.append([0, 0, 0, 0, 0, 0, 0]) - p.append([]) # orig quests p.append([]) # items p.append([]) # missed items - p.append([0, 0, 0, 0]) # orig merits + p.append([0, 0, 0, 0]) # orig merits p.append([0, 0, 0, 0]) # merits p.append([0, 0, 0, 0]) # parts else: @@ -64,19 +63,16 @@ def getBattleExperience(numToons, activeToons, toonExp, earnedExp.append(getSkillGained(toonSkillPtsGained, toonId, i)) p.append(origExp) p.append(earnedExp) - origQuests = toonOrigQuests.get(toonId, []) - p.append(origQuests) items = toonItems.get(toonId, ([], [])) p.append(items[0]) p.append(items[1]) origMerits = toonOrigMerits.get(toonId, []) p.append(origMerits) - merits = toonMerits.get(toonId, [0, 0, 0, 0]) + merits = toonMerits.get(toonId, [0, 0, 0, 0]) p.append(merits) - parts = toonParts.get(toonId, [0, 0, 0, 0]) + parts = toonParts.get(toonId, [0, 0, 0, 0]) p.append(parts) - # Now make a list of the suits that were killed so we can update # quest progress during the movie deathList = [] @@ -126,23 +122,8 @@ def getBattleExperience(numToons, activeToons, toonExp, deathList.extend([typeNum, level, toonBits, flags]) # Put the deathList in the master array p.append(deathList) - - - #add the bitfields of the toons ubergags - #print("activeToons %s" % (activeToons)) - uberStats = getToonUberStatus(activeToons, numToons) - #uberStats = [77,42] - #print(uberStats) - p.append(uberStats) - #import pdb; pdb.set_trace() - #p.append([77,42]) - - if helpfulToonsList == None: - helpfulToonsList = [] - p.append(helpfulToonsList) - return p - + def getToonUberStatus(toons, numToons): #UBERCHANGE #print("getToonUberStatus") @@ -163,17 +144,16 @@ def getToonUberStatus(toons, numToons): if lenDif > 0: for index in range(lenDif): fieldList.append(-1) - #print(fieldList) + #print(fieldList) return fieldList - def assignRewards(activeToons, toonSkillPtsGained, suitsKilled, zoneId, helpfulToons=None): # First, build a list of active toons for the quest manager if helpfulToons == None: BattleExperienceAINotify.warning("=============\nERROR ERROR helpfulToons=None in assignRewards , tell Red") if __debug__: import pdb; pdb.set_trace() - + activeToonList = [] for t in activeToons: toon = simbase.air.doId2do.get(t) @@ -184,28 +164,24 @@ def assignRewards(activeToons, toonSkillPtsGained, suitsKilled, zoneId, helpfulT # toon. for toon in activeToonList: for i in range(len(ToontownBattleGlobals.Tracks)): - + uberIndex = ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1 exp = getSkillGained(toonSkillPtsGained, toon.doId, i) - needed = ToontownBattleGlobals.Levels[i][ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1] + ToontownBattleGlobals.UberSkill + needed = ToontownBattleGlobals.Levels[i][ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1] #print("Track %s Needed %s Current %s" % (ToontownBattleGlobals.Tracks[i], needed, exp + toon.experience.getExp(i))) assert(exp >= 0) - hasUber = 0 totalExp = exp + toon.experience.getExp(i) - if (toon.inventory.numItem(i, uberIndex) > 0): - hasUber = 1 if (totalExp >= (needed)) or (totalExp >= ToontownBattleGlobals.MaxSkill): - #the toon has exceeded the uberGag tredmill threshold + #the toon has exceeded the uberGag tredmill threshold #and needs to be awarded the USE of an ubergag #then the toon should have their exp level reduced to the amount needed to have the uber gag #print("uber threshold met") - if toon.inventory.totalProps < toon.getMaxCarry() and not hasUber: + if toon.inventory.totalProps < toon.getMaxCarry(): #make sure the toon has room for the uber gag #print("adding uber gag") uberLevel = ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1 #need to hang this and assign it after the toons play their movies #taskMgr.doMethodLater(3.0, toon.inventory.addItem, 'ToT-phrase-reset', extraArgs=[i, uberLevel]) - toon.inventory.addItem(i, uberLevel) toon.experience.setExp(i, ToontownBattleGlobals.Levels[i][ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1]) else: toon.experience.setExp(i, ToontownBattleGlobals.MaxSkill) @@ -242,5 +218,5 @@ def assignRewards(activeToons, toonSkillPtsGained, suitsKilled, zoneId, helpfulT simbase.air.questManager.toonKilledCogs(toon, suitsKilled, zoneId, activeToonList) # Tell the cog page manager about the cogs this toon killed simbase.air.cogPageManager.toonKilledCogs(toon, suitsKilled, zoneId) - - + + diff --git a/toontown/src/battle/BattleManagerAI.py b/toontown/src/battle/BattleManagerAI.py index 2fb7a8c0..39498b9d 100644 --- a/toontown/src/battle/BattleManagerAI.py +++ b/toontown/src/battle/BattleManagerAI.py @@ -1,4 +1,4 @@ -import DistributedBattleAI +from . import DistributedBattleAI from direct.directnotify import DirectNotifyGlobal class BattleManagerAI: @@ -23,10 +23,10 @@ def __init__(self, air): def cellHasBattle(self, cellId): """ cellHasBattle(cellId) """ - return (self.cellId2battle.has_key(cellId)) + return (cellId in self.cellId2battle) def getBattle(self, cellId): - if self.cellId2battle.has_key(cellId): + if cellId in self.cellId2battle: return self.cellId2battle[cellId] return None @@ -34,7 +34,7 @@ def newBattle(self, cellId, zoneId, pos, suit, toonId, finishCallback=None, maxSuits=4, interactivePropTrackBonus = -1): """ newBattle(zoneId, pos, suit, toonId, finishCallback, maxSuits) """ - if self.cellId2battle.has_key(cellId): + if cellId in self.cellId2battle: # if a battle already exists here, don't create a new one, # but instead make the suit join the battle or fly away. @@ -63,7 +63,7 @@ def newBattle(self, cellId, zoneId, pos, suit, toonId, def requestBattleAddSuit(self, cellId, suit): """ requestBattleAddSuit(zoneId, suit) """ - assert(self.cellId2battle.has_key(cellId)) + assert(cellId in self.cellId2battle) return (self.cellId2battle[cellId].suitRequestJoin(suit)) def destroy(self, battle): @@ -71,6 +71,6 @@ def destroy(self, battle): """ cellId = battle.battleCellId self.notify.debug('BattleManager - destroying battle %d' % cellId) - assert(self.cellId2battle.has_key(cellId)) + assert(cellId in self.cellId2battle) del self.cellId2battle[cellId] battle.requestDelete() diff --git a/toontown/src/battle/BattleProps.py b/toontown/src/battle/BattleProps.py index d73ed37b..01019b08 100644 --- a/toontown/src/battle/BattleProps.py +++ b/toontown/src/battle/BattleProps.py @@ -191,7 +191,7 @@ def __init__(self): self.propTypes[propName] = 'model' splatAnimFileName = self.getPath(3.5, 'splat-chan') - for splat in Splats.keys(): + for splat in list(Splats.keys()): propName = 'splat-' + splat self.propStrings[propName] = (self.getPath(3.5, 'splat-mod'), splatAnimFileName) self.propTypes[propName] = 'actor' @@ -366,7 +366,7 @@ def makeVariant(self, name): def unloadProps(self): """ unloadProps() """ - for p in self.props.values(): + for p in list(self.props.values()): # make sure it's loaded before we remove it if (type(p) != type(())): self.__delProp(p) @@ -376,15 +376,15 @@ def unloadProps(self): def getProp(self, name): """ getProp(name) """ - assert(self.propStrings.has_key(name)) + assert(name in self.propStrings) return self.__getPropCopy(name) def __getPropCopy(self, name): - assert(self.propStrings.has_key(name)) - assert(self.propTypes.has_key(name)) + assert(name in self.propStrings) + assert(name in self.propTypes) if (self.propTypes[name] == 'actor'): # make sure the props is loaded - if not self.props.has_key(name): + if name not in self.props: prop = Actor.Actor() prop.loadModel(self.propStrings[name][0]) animDict = {} @@ -398,7 +398,7 @@ def __getPropCopy(self, name): return Actor.Actor(other=self.props[name]) else: # make sure the props is loaded - if not self.props.has_key(name): + if name not in self.props: prop = loader.loadModel(self.propStrings[name][0]) prop.setName(name) self.storeProp(name, prop) @@ -428,7 +428,7 @@ def storeProp(self, name, prop): self.notify.debug("propCache = %s" % self.propCache) def getPropType(self, name): - assert(self.propTypes.has_key(name)) + assert(name in self.propTypes) return self.propTypes[name] def __delProp(self, prop): diff --git a/toontown/src/battle/BattleSounds.py b/toontown/src/battle/BattleSounds.py index e78849cd..a48c8461 100644 --- a/toontown/src/battle/BattleSounds.py +++ b/toontown/src/battle/BattleSounds.py @@ -72,7 +72,7 @@ def getSound(self, name): if not found: # If it's still not found, something's wrong. self.notify.warning('%s not found on:' % name) - print self.sfxSearchPath + print(self.sfxSearchPath) else: return self.mgr.getSound(filename.getFullpath()) diff --git a/toontown/src/battle/DistributedBattle.py b/toontown/src/battle/DistributedBattle.py index 8c0a7fb4..3f16f76a 100644 --- a/toontown/src/battle/DistributedBattle.py +++ b/toontown/src/battle/DistributedBattle.py @@ -1,17 +1,17 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from BattleBase import * +from .BattleBase import * from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals -import DistributedBattleBase +from . import DistributedBattleBase from direct.directnotify import DirectNotifyGlobal -import MovieUtil +from . import MovieUtil from toontown.suit import Suit from direct.actor import Actor from toontown.toon import TTEmote from otp.avatar import Emote -import SuitBattleGlobals +from . import SuitBattleGlobals from toontown.distributed import DelayDelete import random diff --git a/toontown/src/battle/DistributedBattleAI.py b/toontown/src/battle/DistributedBattleAI.py index c3b3420e..1e507969 100644 --- a/toontown/src/battle/DistributedBattleAI.py +++ b/toontown/src/battle/DistributedBattleAI.py @@ -1,10 +1,10 @@ from otp.ai.AIBase import * -from BattleBase import * -from BattleCalculatorAI import * +from .BattleBase import * +from .BattleCalculatorAI import * from toontown.toonbase.ToontownBattleGlobals import * -from SuitBattleGlobals import * +from .SuitBattleGlobals import * -import DistributedBattleBaseAI +from . import DistributedBattleBaseAI from direct.task import Task from direct.directnotify import DirectNotifyGlobal import random diff --git a/toontown/src/battle/DistributedBattleBase.py b/toontown/src/battle/DistributedBattleBase.py index ea0a32f7..93a5b08c 100644 --- a/toontown/src/battle/DistributedBattleBase.py +++ b/toontown/src/battle/DistributedBattleBase.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from BattleBase import * +from .BattleBase import * from direct.distributed.ClockDelta import * from toontown.toonbase import ToontownBattleGlobals @@ -10,13 +10,13 @@ from direct.fsm import State from direct.task.Task import Task from direct.directnotify import DirectNotifyGlobal -import Movie -import MovieUtil +from . import Movie +from . import MovieUtil from toontown.suit import Suit from direct.actor import Actor -import BattleProps +from . import BattleProps from direct.particles import ParticleEffect -import BattleParticles +from . import BattleParticles from toontown.hood import ZoneUtil from toontown.distributed import DelayDelete from toontown.toon import TTEmote @@ -192,7 +192,7 @@ def storeInterval(self, interval, name): self.activeIntervals[name] = interval def __cleanupIntervals(self): - for interval in self.activeIntervals.values(): + for interval in list(self.activeIntervals.values()): interval.finish() DelayDelete.cleanupDelayDeletes(interval) self.activeIntervals = {} @@ -200,18 +200,18 @@ def __cleanupIntervals(self): def clearInterval(self, name, finish=0): """ Clean up the specified Interval """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): ival = self.activeIntervals[name] if finish: ival.finish() else: ival.pause() - if self.activeIntervals.has_key(name): + if name in self.activeIntervals: DelayDelete.cleanupDelayDeletes(ival) # cleanupDelayDeletes might cause the involved avatar to be deleted, # which would clear the interval out of self.activeIntervals. Check # again to see if it's still in the dict - if self.activeIntervals.has_key(name): + if name in self.activeIntervals: del self.activeIntervals[name] else: self.notify.debug('interval: %s already cleared' % name) @@ -219,7 +219,7 @@ def clearInterval(self, name, finish=0): def finishInterval(self, name): """ Force the specified Interval to jump to the end """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): interval = self.activeIntervals[name] interval.finish() @@ -513,7 +513,7 @@ def setMembers(self, suits, suitsJoining, suitsPending, suitsActive, self.suits = [] suitGone = 0 for s in suits: - if (self.cr.doId2do.has_key(s)): + if (s in self.cr.doId2do): suit = self.cr.doId2do[s] suit.setState('Battle') self.suits.append(suit) @@ -1286,7 +1286,7 @@ def __makeToonRun(self, toon, ts): self.storeInterval(runMTrack, runName) def getToon(self, toonId): - if (self.cr.doId2do.has_key(toonId)): + if (toonId in self.cr.doId2do): return self.cr.doId2do[toonId] else: self.notify.warning('getToon() - toon: %d not in repository!' \ @@ -1452,7 +1452,7 @@ def exitWaitForInput(self): return None def __handleLocalToonBattleEvent(self, response): - assert(response.has_key('mode')) + assert('mode' in response) mode = response['mode'] noAttack = 0 if (mode == 'Attack'): @@ -1535,7 +1535,7 @@ def __handleLocalToonBattleEvent(self, response): petProxyId = response['id'] self.notify.debug('got a PETSOSINFO for pet: %d' % petProxyId) # Check to see if the proxy object has already been generated - if base.cr.doId2do.has_key(petProxyId): + if petProxyId in base.cr.doId2do: self.notify.debug("pet: %d was already in the repository" % petProxyId) # Throw the event that pet info is available proxyGenerateMessage = "petProxy-%d-generated" % petProxyId diff --git a/toontown/src/battle/DistributedBattleBaseAI.py b/toontown/src/battle/DistributedBattleBaseAI.py index c09f2fe8..4e41d6d3 100644 --- a/toontown/src/battle/DistributedBattleBaseAI.py +++ b/toontown/src/battle/DistributedBattleBaseAI.py @@ -1,11 +1,11 @@ from otp.ai.AIBase import * from direct.distributed.ClockDelta import * -from BattleBase import * -from BattleCalculatorAI import * +from .BattleBase import * +from .BattleCalculatorAI import * from toontown.toonbase.ToontownBattleGlobals import * -from SuitBattleGlobals import * +from .SuitBattleGlobals import * from pandac.PandaModules import * -import BattleExperienceAI +from . import BattleExperienceAI from direct.distributed import DistributedObjectAI from direct.fsm import ClassicFSM, State from direct.fsm import State @@ -23,7 +23,7 @@ class DistributedBattleBaseAI(DistributedObjectAI.DistributedObjectAI, BattleBase): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBattleBaseAI') - + def __init__(self, air, zoneId, finishCallback=None, maxSuits=4, bossBattle=0, tutorialFlag=0, interactivePropTrackBonus = -1): """__init__(air, zoneId, finishCallback, maxSuits, bossBattle) @@ -76,7 +76,7 @@ def __init__(self, air, zoneId, finishCallback=None, maxSuits=4, if self.air.holidayManager.isMoreXpHolidayRunning(): mult = getMoreXpHolidayMultiplier() self.battleCalc.setSkillCreditMultiplier(mult) - + self.fsm = None self.clearAttacks() @@ -207,7 +207,7 @@ def __init__(self, air, zoneId, finishCallback=None, maxSuits=4, self.startTime = globalClock.getRealTime() self.adjustingTimer = Timer() - + def clearAttacks(self): """ clearAttacks() @@ -244,7 +244,7 @@ def delete(self): for suit in self.suits: del suit.battleTrap del self.finishCallback - for petProxy in self.pets.values(): + for petProxy in list(self.pets.values()): petProxy.requestDelete() DistributedObjectAI.DistributedObjectAI.delete(self) @@ -269,11 +269,11 @@ def abortBattle(self): toonsCopy = self.toons[:] for toonId in toonsCopy: self.__removeToon(toonId) - + if (self.fsm.getCurrentState().getName() == 'PlayMovie' or self.fsm.getCurrentState().getName() == 'MakeMovie'): self.exitedToons.append(toonId) - + # Of course, the last toon is gone now. self.d_setMembers() @@ -428,7 +428,7 @@ def getMembers(self): def d_adjust(self): self.notify.debug('network:adjust()') self.sendUpdate('adjust', [globalClockDelta.getRealNetworkTime()]) - + # setInteractivePropTrackBonus def getInteractivePropTrackBonus(self): @@ -461,7 +461,7 @@ def getMovie(self): p.append(self.activeToons) p.append(suitIds) for t in self.activeToons: - if (self.toonAttacks.has_key(t)): + if (t in self.toonAttacks): ta = self.toonAttacks[t] index = -1 id = ta[TOON_ID_COL] @@ -479,7 +479,7 @@ def getMovie(self): if (ta[TOON_LVL_COL] == 1): ta[TOON_HPBONUS_COL] = random.randint(0, 10000) elif (track == SOS or track == NPCSOS or track == PETSOS): - + # We need to pass the actual doId in this case target = ta[TOON_TGT_COL] elif (track == HEAL): @@ -543,7 +543,7 @@ def getChosenToonAttacks(self): levels = [] targets = [] for t in self.activeToons: - if (self.toonAttacks.has_key(t)): + if (t in self.toonAttacks): ta = self.toonAttacks[t] else: ta = getToonAttack(t) @@ -571,7 +571,7 @@ def getBattleExperience(self): return returnValue # Add suit - + def getToonUberStatus(self): #UBERCHANGE fieldList = [] @@ -591,7 +591,7 @@ def addSuit(self, suit): # Initialize the suit trap suit.battleTrap = NO_TRAP self.numSuitsEver += 1 - + def __joinSuit(self, suit): # calculate the time it will take for the suit to go from # its current position to its pending position in the battle @@ -674,9 +674,9 @@ def suitRequestJoin(self, suit): # Add/Remove toon def addToon(self, avId): - print ("DBB-addToon %s" % (avId)) + print(("DBB-addToon %s" % (avId))) # Returns 1 if the toon is successfully added, 0 otherwise. - + self.notify.debug('addToon(%d)' % avId) toon = self.getToon(avId) if (toon == None): @@ -700,7 +700,7 @@ def addToon(self, avId): self.newToons.append(avId) self.toons.append(avId) - + toon = simbase.air.doId2do.get(avId) if toon: if hasattr(self, "doId"): @@ -710,13 +710,13 @@ def addToon(self, avId): messageToonAdded = ("Battle adding toon %s" % (avId)) messenger.send(messageToonAdded, [avId]) - assert(not self.responses.has_key(avId)) + assert(avId not in self.responses) if (self.fsm != None and self.fsm.getCurrentState().getName() == 'PlayMovie'): self.responses[avId] = 1 else: self.responses[avId] = 0 - assert(not self.adjustingResponses.has_key(avId)) + assert(avId not in self.adjustingResponses) self.adjustingResponses[avId] = 0 # Initialize experience per track @@ -741,7 +741,7 @@ def addToon(self, avId): for quest in toon.quests: flattenedQuests.extend(quest) self.toonOrigQuests[avId] = flattenedQuests - + # Initialize parts found if avId not in self.toonItems: self.toonItems[avId] = ([], []) @@ -866,7 +866,7 @@ def __handleUnexpectedExit(self, avId): userAborted = (disconnectCode == ToontownGlobals.DisconnectCloseWindow) self.__handleSuddenExit(avId, userAborted) - + def __handleSuddenExit(self, avId, userAborted): self.__removeToon(avId, userAborted=userAborted) if (self.fsm.getCurrentState().getName() == 'PlayMovie' or @@ -940,7 +940,7 @@ def __removeToon(self, toonId, userAborted=0): self.toonGone = 1 # Delete this Toon's pet proxy - if self.pets.has_key(toonId): + if toonId in self.pets: self.pets[toonId].requestDelete() del self.pets[toonId] @@ -958,7 +958,7 @@ def __removeToon(self, toonId, userAborted=0): event = "inSafezone-%s" % (toonId) self.avatarExitEvents.remove(event) self.ignore(event) - + toon = simbase.air.doId2do.get(toonId) if toon: toon.b_setBattleId(0) @@ -1014,10 +1014,10 @@ def __removeToon(self, toonId, userAborted=0): self.notify.info('killing mem leak from temporary DistributedToonAI %d' % toonId) toon.deleteDummy() - + def getToon(self, toonId): - if (self.air.doId2do.has_key(toonId)): + if (toonId in self.air.doId2do): return self.air.doId2do[toonId] else: self.notify.warning('getToon() - toon: %d not in repository!' \ @@ -1043,7 +1043,7 @@ def toonRequestRun(self): # See if anyone else is trying to heal the running toon for toon in self.activeToons: - if (self.toonAttacks.has_key(toon)): + if (toon in self.toonAttacks): ta = self.toonAttacks[toon] track = ta[TOON_TRACK_COL] level = ta[TOON_LVL_COL] @@ -1055,7 +1055,7 @@ def toonRequestRun(self): healerId) self.toonAttacks[toon] = getToonAttack(toon, track=UN_ATTACK) - assert(self.responses.has_key(healerId)) + assert(healerId in self.responses) self.responses[healerId] = 0 updateAttacks = 1 self.__makeToonRun(toonId, updateAttacks) @@ -1078,7 +1078,7 @@ def toonDied(self): toon.hp = -1 toon.inventory.zeroInv(1) self.__handleSuddenExit(toonId, 0) - + def signupToon(self, toonId, x, y, z): """ signupToon(toonId, x, y, z) @@ -1091,7 +1091,7 @@ def signupToon(self, toonId, x, y, z): # message completely. Don't even send back a deny # message, which would just confuse the client. return - + if (self.toonCanJoin()): if self.addToon(toonId): self.__joinToon(toonId, Point3(x, y, z)) @@ -1114,7 +1114,7 @@ def resetResponses(self): def allToonsResponded(self): for t in self.toons: - assert(self.responses.has_key(t)) + assert(t in self.responses) if (self.responses[t] == 0): return 0 self.ignoreResponses = 1 @@ -1122,7 +1122,7 @@ def allToonsResponded(self): def __allPendingActiveToonsResponded(self): for t in (self.pendingToons + self.activeToons): - assert(self.responses.has_key(t)) + assert(t in self.responses) if (self.responses[t] == 0): return 0 self.ignoreResponses = 1 @@ -1130,14 +1130,14 @@ def __allPendingActiveToonsResponded(self): def __allActiveToonsResponded(self): for t in self.activeToons: - assert(self.responses.has_key(t)) + assert(t in self.responses) if (self.responses[t] == 0): return 0 self.ignoreResponses = 1 return 1 def __removeResponse(self, toonId): - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) del self.responses[toonId] if (self.ignoreResponses == 0 and (len(self.toons) > 0)): currStateName = self.fsm.getCurrentState().getName() @@ -1164,14 +1164,14 @@ def __resetAdjustingResponses(self): def __allAdjustingToonsResponded(self): for t in self.toons: - assert(self.adjustingResponses.has_key(t)) + assert(t in self.adjustingResponses) if (self.adjustingResponses[t] == 0): return 0 self.ignoreAdjustingResponses = 1 return 1 def __removeAdjustingResponse(self, toonId): - if (self.adjustingResponses.has_key(toonId)): + if (toonId in self.adjustingResponses): del self.adjustingResponses[toonId] if (self.ignoreAdjustingResponses == 0 and (len(self.toons) > 0)): if (self.__allAdjustingToonsResponded()): @@ -1185,9 +1185,9 @@ def __addJoinResponse(self, avId, taskName, toon=0): for self to join the battle """ if (toon == 1): - for jr in self.joinResponses.values(): + for jr in list(self.joinResponses.values()): jr[avId] = 0 - assert(not self.joinResponses.has_key(avId)) + assert(avId not in self.joinResponses) self.joinResponses[avId] = {} for t in self.toons: self.joinResponses[avId][t] = 0 @@ -1200,8 +1200,8 @@ def __removeJoinResponses(self, avId): """ self.__removeJoinResponse(avId) removedOne = 0 - for j in self.joinResponses.values(): - if (j.has_key(avId)): + for j in list(self.joinResponses.values()): + if (avId in j): del j[avId] removedOne = 1 if (removedOne == 1): @@ -1214,7 +1214,7 @@ def __removeJoinResponse(self, avId): """ Remove a response dictionary for self joining the battle (if one exists) """ - if (self.joinResponses.has_key(avId)): + if (avId in self.joinResponses): taskMgr.remove(self.joinResponses[avId]['taskName']) del self.joinResponses[avId] @@ -1222,16 +1222,16 @@ def __allToonsRespondedJoin(self, avId): """ Return 1 if all toons in battle have responded that avId has successfully joined and is in the pending list """ - assert(self.joinResponses.has_key(avId)) + assert(avId in self.joinResponses) jr = self.joinResponses[avId] for t in self.toons: - assert(jr.has_key(t)) + assert(t in jr) if (jr[t] == 0): return 0 return 1 def __cleanupJoinResponses(self): - for jr in self.joinResponses.values(): + for jr in list(self.joinResponses.values()): taskMgr.remove(jr['taskName']) del jr @@ -1250,7 +1250,7 @@ def adjustDone(self): self.notify.warning('adjustDone() - toon: %d not in toon list' % \ toonId) return - assert(self.adjustingResponses.has_key(toonId)) + assert(toonId in self.adjustingResponses) self.adjustingResponses[toonId] += 1 self.notify.debug('toon: %d done adjusting' % toonId) if (self.__allAdjustingToonsResponded()): @@ -1271,7 +1271,7 @@ def timeout(self): return self.toonAttacks[toonId] = getToonAttack(toonId) self.d_setChosenToonAttacks() - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 self.notify.debug('toon: %d timed out' % toonId) if (self.__allActiveToonsResponded()): @@ -1290,7 +1290,7 @@ def movieDone(self): self.notify.warning('movieDone() - toon: %d not in toon list' % \ toonId) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 self.notify.debug('toon: %d done with movie' % toonId) if (self.__allPendingActiveToonsResponded()): @@ -1318,7 +1318,7 @@ def rewardDone(self): self.notify.warning('rewardDone() - toon: %d not in toon list' % \ toonId) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 self.notify.debug('toon: %d done with reward' % toonId) if (self.__allActiveToonsResponded()): @@ -1347,12 +1347,12 @@ def joinDone(self, avId): self.notify.warning('joinDone() - toon: %d not in toon list' % \ toonId) return - if (not self.joinResponses.has_key(avId)): + if (avId not in self.joinResponses): self.notify.debug('joinDone() - no entry for: %d - ignoring: %d' \ % (avId, toonId)) return jr = self.joinResponses[avId] - if (jr.has_key(toonId)): + if (toonId in jr): jr[toonId] += 1 self.notify.debug('client with localToon: %d done joining av: %d' % \ (toonId, avId)) @@ -1396,10 +1396,10 @@ def requestAttack(self, track, level, av): # Make sure the toon has the friend, and then remove it toon = self.getToon(toonId) if (toon == None): - return - if (toon.NPCFriendsDict.has_key(av)): + return + if (av in toon.NPCFriendsDict): npcCollision = 0 - if (self.npcAttacks.has_key(av)): + if (av in self.npcAttacks): callingToon = self.npcAttacks[av] if (self.activeToons.count(callingToon) == 1): self.toonAttacks[toonId] = getToonAttack(toonId, track=PASS) @@ -1411,12 +1411,12 @@ def requestAttack(self, track, level, av): #if (toon.NPCFriendsDict[av] <= 0): # del toon.NPCFriendsDict[av] #toon.d_setNPCFriendsDict(toon.NPCFriendsDict) - self.toonAttacks[toonId] = getToonAttack(toonId, + self.toonAttacks[toonId] = getToonAttack(toonId, track=NPCSOS, level=5, target=av) self.numNPCAttacks += 1 self.npcAttacks[av] = toonId #import pdb; pdb.set_trace() - + elif (track == PETSOS): self.notify.debug('toon: %d calls for pet: %d' % (toonId, av)) self.air.writeServerEvent('PETSOS', toonId, '%s' % (av)) @@ -1426,12 +1426,12 @@ def requestAttack(self, track, level, av): return if not self.validate(toonId, (level in toon.petTrickPhrases), 'requestAttack: invalid pet trickId: %s' % (level)): return - self.toonAttacks[toonId] = getToonAttack(toonId, + self.toonAttacks[toonId] = getToonAttack(toonId, track=PETSOS, level=level, target=av) elif (track == UN_ATTACK): self.notify.debug('toon: %d changed its mind' % toonId) self.toonAttacks[toonId] = getToonAttack(toonId, track=UN_ATTACK) - if (self.responses.has_key(toonId)): + if (toonId in self.responses): self.responses[toonId] = 0 validResponse = 0 elif (track == PASS): @@ -1450,11 +1450,11 @@ def requestAttack(self, track, level, av): return if not self.validate(toonId, (level >= 0 and level <= (MAX_LEVEL_INDEX)), 'requestAttack: invalid level %s' % (level)): - return + return # For now, we assume that the avId is being correctly # validated downstream of here. - + if (toon.inventory.numItem(track, level) == 0): # TODO: fix BUG: Somehow, this clause is getting executed when # the toon still has one prop left... @@ -1462,7 +1462,7 @@ def requestAttack(self, track, level, av): %d level: %d' % (track, level)) self.toonAttacks[toonId] = getToonAttack(toonId) return - + if (track == HEAL): # See if the target for the heal is running away if (self.runningToons.count(av) == 1 or @@ -1485,7 +1485,7 @@ def requestAttack(self, track, level, av): self.d_setChosenToonAttacks() - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) if (validResponse == 1): self.responses[toonId] += 1 self.notify.debug('toon: %d chose an attack' % toonId) @@ -1511,7 +1511,7 @@ def requestPetProxy(self, av): self.notify.warning('requestPetProxy() - no toon: %d' % toonId) return - petId = toon.getPetId() + petId = toon.getPetId() zoneId = self.zoneId if (petId == av): # See if pet has been generated already @@ -1520,7 +1520,7 @@ def requestPetProxy(self, av): #petProxy = simbase.air.doId2do[petId] #simbase.air.sendSetZone(petProxy, zoneId) #petProxy.zoneId = zoneId - if not self.pets.has_key(toonId): + if toonId not in self.pets: def handleGetPetProxy(success, petProxy, petId=petId, zoneId=zoneId, toonId=toonId): if success: if petId not in simbase.air.doId2do: @@ -1529,8 +1529,8 @@ def handleGetPetProxy(success, petProxy, petId=petId, zoneId=zoneId, toonId=toon petDO = simbase.air.doId2do[petId] petDO.requestDelete() simbase.air.deleteDistObject(petDO) - petProxy.dbObject = 1 - petProxy.generateWithRequiredAndId(petId, + petProxy.dbObject = 1 + petProxy.generateWithRequiredAndId(petId, self.air.districtId, zoneId) petProxy.broadcastDominantMood() @@ -1589,7 +1589,7 @@ def __makeMovie(self, task=None): self.notify.warning('battle %s in level %s' % ( self.doId, self.levelDoId)) return - + self.__removeTaskName(self.uniqueName('make-movie')) if (self.movieHasBeenMade == 1): self.notify.debug('__makeMovie() - movie has already been made') @@ -1600,10 +1600,10 @@ def __makeMovie(self, task=None): self.rewardHasPlayed = 0 # Make sure all toons have an attack entry (even if it's a no-attack) for t in self.activeToons: - if (not self.toonAttacks.has_key(t)): + if (t not in self.toonAttacks): self.toonAttacks[t] = getToonAttack(t) attack = self.toonAttacks[t] - + # Replace any PASS or UN_ATTACK with a NO_ATTACK if (attack[TOON_TRACK_COL] == PASS or attack[TOON_TRACK_COL] == UN_ATTACK): @@ -1614,7 +1614,7 @@ def __makeMovie(self, task=None): self.addHelpfulToon(t) self.battleCalc.calculateRound() - + # Tell the toons how much experience they will earn so far. # Also, from this point on until the end of the movie, the # toons will be allowed to accumulate more than their maxHp, @@ -1629,7 +1629,7 @@ def __makeMovie(self, task=None): # A free toonup first, to guarantee the battle # round won't kill this immortal toon. toon.toonUp(toon.maxHp) - + self.d_setMovie() self.b_setState('PlayMovie') return Task.done @@ -1707,7 +1707,7 @@ def enterWaitForInput(self): toon = self.air.doId2do.get(toonId) if toon is not None: toon.doRestock(0) - + def exitWaitForInput(self): self.npcAttacks = {} self.timer.stop() @@ -1779,7 +1779,7 @@ def __movieDone(self): toonHpDict = {} for toon in self.activeToons: toonHpDict[toon] = [0, 0, 0] - actualToon = self.getToon(toon) + actualToon = self.getToon(toon) assert(actualToon != None) self.notify.debug("BEFORE ROUND: toon: %d hp: %d" % (toon, actualToon.hp)) deadSuits = [] @@ -1787,7 +1787,7 @@ def __movieDone(self): suitsLuredOntoTraps = [] npcTrapAttacks = [] for activeToon in (self.activeToons + self.exitedToons): - if (self.toonAttacks.has_key(activeToon)): + if (activeToon in self.toonAttacks): attack = self.toonAttacks[activeToon] track = attack[TOON_TRACK_COL] npc_level = None @@ -1799,7 +1799,7 @@ def __movieDone(self): npcTrapAttacks.append(attack) toon = self.getToon(attack[TOON_ID_COL]) av = attack[TOON_TGT_COL] - if (toon != None and toon.NPCFriendsDict.has_key(av)): + if (toon != None and av in toon.NPCFriendsDict): toon.NPCFriendsDict[av] -= 1 if (toon.NPCFriendsDict[av] <= 0): del toon.NPCFriendsDict[av] @@ -1812,9 +1812,9 @@ def __movieDone(self): if (npc_level != None): level = npc_level if (attack[TOON_TRACK_COL] == NPCSOS): - toon = self.getToon(toonId) + toon = self.getToon(toonId) av = attack[TOON_TGT_COL] - if (toon != None and toon.NPCFriendsDict.has_key(av)): + if (toon != None and av in toon.NPCFriendsDict): toon.NPCFriendsDict[av] -= 1 if (toon.NPCFriendsDict[av] <= 0): del toon.NPCFriendsDict[av] @@ -1846,17 +1846,17 @@ def __movieDone(self): # If the PETSOS fails, the hp will be -1 # so skip to avoid losing hp if hp > 0: - toonHpDict[toon.doId][0] += hp + toonHpDict[toon.doId][0] += hp self.notify.debug("pet heal: toon: %d healed for hp: %d" % (toon.doId, hp)) else: self.notify.warning("Invalid targetIndex %s in hps %s." % (i, hps)) - + elif (track == NPC_RESTOCK_GAGS): for at in self.activeToons: toon = self.getToon(at) if (toon != None): toon.inventory.NPCMaxOutInv(npc_level) - toon.d_setInventory(toon.inventory.makeNetString()) + toon.d_setInventory(toon.inventory.makeNetString()) elif (track == HEAL): # Odd level heals affect all toons (except the caster) # except in the case of an NPC heal, which gets all @@ -1864,7 +1864,7 @@ def __movieDone(self): if (levelAffectsGroup(HEAL, level)): for i in range(len(self.activeToons)): at = self.activeToons[i] - if (at != toonId or + if (at != toonId or attack[TOON_TRACK_COL] == NPCSOS): toon = self.getToon(at) if (toon != None): @@ -1903,11 +1903,11 @@ def __movieDone(self): if suit.battleTrap == UBER_GAG_LEVEL_INDEX: pass #trainTrapTriggered = True - + suit.battleTrap = NO_TRAP needUpdate = 1 # Clear out any traps on this suit - if (trapDict.has_key(suit.doId)): + if (suit.doId in trapDict): del trapDict[suit.doId] if (suitsLuredOntoTraps.count(suit) == 0): suitsLuredOntoTraps.append(suit) @@ -1915,12 +1915,12 @@ def __movieDone(self): #WARNING, this section of code is duplicated below if (track == TRAP): targetId = suit.doId - if (trapDict.has_key(targetId)): + if (targetId in trapDict): trapDict[targetId].append(attack) else: trapDict[targetId] = [attack] needUpdate = 1 - + died = attack[SUIT_DIED_COL] & (1< len(b)): diff --git a/toontown/src/battle/MovieHeal.py b/toontown/src/battle/MovieHeal.py index 2430f2e5..56ab2de1 100644 --- a/toontown/src/battle/MovieHeal.py +++ b/toontown/src/battle/MovieHeal.py @@ -1,18 +1,18 @@ from direct.interval.IntervalGlobal import * -from BattleProps import * -from BattleSounds import * -from BattleBase import * +from .BattleProps import * +from .BattleSounds import * +from .BattleBase import * from direct.directnotify import DirectNotifyGlobal -import MovieCamera +from . import MovieCamera import random -import MovieUtil -import BattleParticles -import HealJokes +from . import MovieUtil +from . import BattleParticles +from . import HealJokes from toontown.toonbase import TTLocalizer from toontown.toonbase.ToontownBattleGlobals import AvPropDamage from toontown.toon import NPCToons -import MovieNPCSOS +from . import MovieNPCSOS from toontown.effects import Splash from direct.task import Task @@ -523,7 +523,7 @@ def __healJuggle(heal, hasInteractivePropHealBonus): # Determine if this is an NPC heal #print("heal Juggle Anim") npcId = 0 - if (heal.has_key('npcId')): + if ('npcId' in heal): npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if (toon == None): @@ -589,7 +589,7 @@ def __healDive(heal, hasInteractivePropHealBonus): splash.reparentTo(render) #import pdb; pdb.set_trace() npcId = 0 - if (heal.has_key('npcId')): + if ('npcId' in heal): npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if (toon == None): diff --git a/toontown/src/battle/MovieLure.py b/toontown/src/battle/MovieLure.py index 002b6c60..e733403b 100644 --- a/toontown/src/battle/MovieLure.py +++ b/toontown/src/battle/MovieLure.py @@ -1,17 +1,17 @@ from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * +from .BattleBase import * +from .BattleProps import * from toontown.suit.SuitBase import * from toontown.toon.ToonDNA import * -from BattleSounds import * +from .BattleSounds import * -import MovieCamera +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal -import MovieUtil +from . import MovieUtil from toontown.toonbase import ToontownBattleGlobals -import BattleParticles -import BattleProps -import MovieNPCSOS +from . import BattleParticles +from . import BattleProps +from . import MovieNPCSOS notify = DirectNotifyGlobal.directNotify.newCategory('MovieLures') @@ -279,7 +279,7 @@ def __createMagnetMultiTrack(lure, magnet, pos, hpr, scale, isSmallMagnet=1): def __createHypnoGogglesMultiTrack(lure, npcs = []): toon = lure['toon'] - if (lure.has_key('npc')): + if ('npc' in lure): toon = lure['npc'] targets = lure['target'] battle = lure['battle'] diff --git a/toontown/src/battle/MovieNPCSOS.py b/toontown/src/battle/MovieNPCSOS.py index 1c9daed5..d783e320 100644 --- a/toontown/src/battle/MovieNPCSOS.py +++ b/toontown/src/battle/MovieNPCSOS.py @@ -1,13 +1,13 @@ from direct.interval.IntervalGlobal import * -from BattleProps import * -from BattleSounds import * +from .BattleProps import * +from .BattleSounds import * from direct.directnotify import DirectNotifyGlobal -import MovieCamera +from . import MovieCamera import random -import MovieUtil -import BattleParticles -import HealJokes +from . import MovieUtil +from . import BattleParticles +from . import HealJokes from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownBattleGlobals from toontown.toon import NPCToons @@ -312,7 +312,7 @@ def doNPCTeleports(attacks): arrivals = Sequence() departures = Parallel() for attack in attacks: - if (attack.has_key('npcId')): + if ('npcId' in attack): npcId = attack['npcId'] npc = NPCToons.createLocalNPC(npcId) if (npc != None): diff --git a/toontown/src/battle/MoviePetSOS.py b/toontown/src/battle/MoviePetSOS.py index 85ca41d4..da0a47d2 100644 --- a/toontown/src/battle/MoviePetSOS.py +++ b/toontown/src/battle/MoviePetSOS.py @@ -1,13 +1,13 @@ from direct.interval.IntervalGlobal import * -from BattleProps import * -from BattleSounds import * +from .BattleProps import * +from .BattleSounds import * from direct.directnotify import DirectNotifyGlobal -import MovieCamera +from . import MovieCamera import random -import MovieUtil -import BattleParticles -import HealJokes +from . import MovieUtil +from . import BattleParticles +from . import HealJokes from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownBattleGlobals from toontown.pets import Pet, PetTricks @@ -105,7 +105,7 @@ def __healJuggle(heal): petProxyId = heal['petId'] pet = Pet.Pet() gender = 0 - if base.cr.doId2do.has_key(petProxyId): + if petProxyId in base.cr.doId2do: petProxy = base.cr.doId2do[petProxyId] if (petProxy == None): return diff --git a/toontown/src/battle/MovieSOS.py b/toontown/src/battle/MovieSOS.py index 8643776c..c5f9033c 100644 --- a/toontown/src/battle/MovieSOS.py +++ b/toontown/src/battle/MovieSOS.py @@ -1,6 +1,6 @@ from direct.interval.IntervalGlobal import * -import MovieCamera +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer from pandac.PandaModules import * diff --git a/toontown/src/battle/MovieSound.py b/toontown/src/battle/MovieSound.py index 2573a4dc..8837d8ca 100644 --- a/toontown/src/battle/MovieSound.py +++ b/toontown/src/battle/MovieSound.py @@ -1,15 +1,15 @@ from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * -from BattleSounds import * -import BattleParticles +from .BattleBase import * +from .BattleProps import * +from .BattleSounds import * +from . import BattleParticles -from RewardPanel import * +from .RewardPanel import * -import MovieCamera +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal -import MovieUtil -import MovieNPCSOS +from . import MovieUtil +from . import MovieNPCSOS from toontown.toonbase import ToontownBattleGlobals notify = DirectNotifyGlobal.directNotify.newCategory('MovieSound') @@ -213,7 +213,7 @@ def __doSoundsLevel(sounds, delay, hitCount, npcs): for sound in sounds: #soundfn_array( toon = sound['toon'] - if (sound.has_key('npc')): + if ('npc' in sound): toon = sound['npc'] level = sound['level'] targets = sound['target'] diff --git a/toontown/src/battle/MovieSquirt.py b/toontown/src/battle/MovieSquirt.py index 8f1ebbb0..a75e3e11 100644 --- a/toontown/src/battle/MovieSquirt.py +++ b/toontown/src/battle/MovieSquirt.py @@ -1,15 +1,15 @@ from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * -from BattleSounds import * +from .BattleBase import * +from .BattleProps import * +from .BattleSounds import * from toontown.toon.ToonDNA import * from toontown.suit.SuitDNA import * -import MovieUtil -import MovieCamera +from . import MovieUtil +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal -import BattleParticles +from . import BattleParticles from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals import random @@ -68,17 +68,17 @@ def doSquirts(squirts): if 1: target = squirt['target'][0] suitId = target['suit'].doId - if (suitSquirtsDict.has_key(suitId)): + if (suitId in suitSquirtsDict): suitSquirtsDict[suitId].append(squirt) else: suitSquirtsDict[suitId] = [squirt] else: suitId = squirt['target']['suit'].doId - if (suitSquirtsDict.has_key(suitId)): + if (suitId in suitSquirtsDict): suitSquirtsDict[suitId].append(squirt) else: suitSquirtsDict[suitId] = [squirt] - suitSquirts = suitSquirtsDict.values() + suitSquirts = list(suitSquirtsDict.values()) # Sort the suits based on the number of squirts per suit def compFunc(a, b): diff --git a/toontown/src/battle/MovieSuitAttacks.py b/toontown/src/battle/MovieSuitAttacks.py index 37bcad40..91e4839f 100644 --- a/toontown/src/battle/MovieSuitAttacks.py +++ b/toontown/src/battle/MovieSuitAttacks.py @@ -1,16 +1,16 @@ from toontown.toonbase.ToontownGlobals import * -from SuitBattleGlobals import * +from .SuitBattleGlobals import * from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * +from .BattleBase import * +from .BattleProps import * from toontown.suit.SuitDNA import * -from BattleBase import * -from BattleSounds import * -import MovieCamera +from .BattleBase import * +from .BattleSounds import * +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal -import MovieUtil +from . import MovieUtil from direct.particles import ParticleEffect -import BattleParticles +from . import BattleParticles from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -2256,8 +2256,8 @@ def doReOrg(attack): # special, reassign toon parts; cringe, jump; jump # The head track pops off the head, plays with it a bit, puts it back on upside down, # fixes it, rotates it backwards, and then restores it headParts = toon.getHeadParts() - print '***********headParts pos=', headParts[0].getPos() - print '***********headParts hpr=', headParts[0].getHpr() + print('***********headParts pos=', headParts[0].getPos()) + print('***********headParts hpr=', headParts[0].getHpr()) headTracks = Parallel() for partNum in range(0, headParts.getNumPaths()): part = headParts.getPath(partNum) @@ -2306,7 +2306,7 @@ def getChestTrack(part, attackDelay=attackDelay): arms = toon.findAllMatches('**/arms') sleeves = toon.findAllMatches('**/sleeves') hands = toon.findAllMatches('**/hands') - print '*************arms hpr=', arms[0].getHpr() + print('*************arms hpr=', arms[0].getHpr()) for partNum in range(0, arms.getNumPaths()): chestTracks.append(getChestTrack(arms.getPath(partNum))) diff --git a/toontown/src/battle/MovieThrow.py b/toontown/src/battle/MovieThrow.py index d24e5ad8..ccf29947 100644 --- a/toontown/src/battle/MovieThrow.py +++ b/toontown/src/battle/MovieThrow.py @@ -1,16 +1,16 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * -from BattleSounds import * +from .BattleBase import * +from .BattleProps import * +from .BattleSounds import * from toontown.toon.ToonDNA import * from toontown.suit.SuitDNA import * from direct.directnotify import DirectNotifyGlobal import random -import MovieCamera -import MovieUtil -from MovieUtil import calcAvgSuitPos +from . import MovieCamera +from . import MovieUtil +from .MovieUtil import calcAvgSuitPos notify = DirectNotifyGlobal.directNotify.newCategory('MovieThrow') @@ -51,7 +51,7 @@ def addHit (dict, suitId, hitCount): - if (dict.has_key(suitId)): + if (suitId in dict): dict[suitId] += hitCount else: dict[suitId] = hitCount @@ -87,12 +87,12 @@ def doThrows(throws): pass else: suitId = throw['target']['suit'].doId - if (suitThrowsDict.has_key(suitId)): + if (suitId in suitThrowsDict): suitThrowsDict[suitId].append(throw) else: suitThrowsDict[suitId] = [throw] # A list of lists of throws grouped by suit - suitThrows = suitThrowsDict.values() + suitThrows = list(suitThrowsDict.values()) # Sort the suits based on the number of throws per suit def compFunc(a, b): if (len(a) > len(b)): @@ -805,7 +805,7 @@ def __throwGroupPie(throw, delay, groupHitDict): else: #if none of the group throws hit at all, we can do a dodge - groupHitValues = groupHitDict.values() + groupHitValues = list(groupHitDict.values()) if groupHitValues.count(0) == len(groupHitValues): singleSuitResponseTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) diff --git a/toontown/src/battle/MovieToonVictory.py b/toontown/src/battle/MovieToonVictory.py index 81473920..6038627c 100644 --- a/toontown/src/battle/MovieToonVictory.py +++ b/toontown/src/battle/MovieToonVictory.py @@ -1,8 +1,8 @@ from direct.interval.IntervalGlobal import * -from RewardPanel import * -from BattleSounds import * +from .RewardPanel import * +from .BattleSounds import * -import MovieCamera +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal import types @@ -31,7 +31,7 @@ def doToonVictory(localToonActive, toons, rewardToonIds, rewardDicts, countToons = 0 uberListNew = [] for t in toons: - if isinstance(t, types.IntType): + if isinstance(t, int): t = base.cr.doId2do.get(t) if t: toonList.append(t) diff --git a/toontown/src/battle/MovieTrap.py b/toontown/src/battle/MovieTrap.py index fa9029fc..d33eb161 100644 --- a/toontown/src/battle/MovieTrap.py +++ b/toontown/src/battle/MovieTrap.py @@ -1,18 +1,18 @@ from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * -from BattleSounds import * +from .BattleBase import * +from .BattleProps import * +from .BattleSounds import * -import MovieUtil -import MovieCamera +from . import MovieUtil +from . import MovieCamera from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownBattleGlobals from direct.actor import Actor from direct.particles import ParticleEffect -import BattleParticles -import BattleProps -import MovieNPCSOS -from MovieSound import createSuitResetPosTrack +from . import BattleParticles +from . import BattleProps +from . import MovieNPCSOS +from .MovieSound import createSuitResetPosTrack notify = DirectNotifyGlobal.directNotify.newCategory('MovieTrap') @@ -33,7 +33,7 @@ def doTraps(traps): targets = trap['target'] if (len(targets) == 1): suitId = targets[0]['suit'].doId - if (suitTrapsDict.has_key(suitId)): + if (suitId in suitTrapsDict): suitTrapsDict[suitId].append(trap) else: suitTrapsDict[suitId] = [trap] @@ -43,7 +43,7 @@ def doTraps(traps): # however, to avoid tossing too many traps for target in targets: suitId = target['suit'].doId - if (not suitTrapsDict.has_key(suitId)): + if (suitId not in suitTrapsDict): suitTrapsDict[suitId] = [trap] break if trap['level'] == UBER_GAG_LEVEL_INDEX: @@ -56,7 +56,7 @@ def doTraps(traps): hasUberTrapConflict = True - suitTrapLists = suitTrapsDict.values() + suitTrapLists = list(suitTrapsDict.values()) mtrack = Parallel() for trapList in suitTrapLists: @@ -371,7 +371,7 @@ def placeDustExplosion(dustNode=dustNode, thrownProp=thrownProp, battle=battle): def __createPlacedTrapMultiTrack(trap, prop, propName, propPos=None, propHpr=None, explode=0, visibleOnlyForThisSuitId = None): toon = trap['toon'] - if (trap.has_key('npc')): + if ('npc' in trap): toon = trap['npc'] level = trap['level'] battle = trap['battle'] @@ -510,7 +510,7 @@ def __trapTrapdoor(trap, trapProps, explode): """ __trapTrapdoor(trap) """ toon = trap['toon'] - if (trap.has_key('npc')): + if ('npc' in trap): toon = trap['npc'] targets = trap['target'] for target in targets: @@ -535,7 +535,7 @@ def __trapTrain(trap, trapProps, explode): Do some funky stuff since we want to place only 1 train track, not 4 """ toon = trap['toon'] - if (trap.has_key('npc')): + if ('npc' in trap): toon = trap['npc'] targets = trap['target'] battle = trap['battle'] @@ -622,7 +622,7 @@ def __createPlacedGroupTrapTrack(trap, prop, propName, centerSuit,propPos=None, mainly to make the train track appear. We only want one, and parented to the battle """ toon = trap['toon'] - if (trap.has_key('npc')): + if ('npc' in trap): toon = trap['npc'] level = trap['level'] battle = trap['battle'] diff --git a/toontown/src/battle/MovieUtil.py b/toontown/src/battle/MovieUtil.py index c6bbe11e..5744d944 100644 --- a/toontown/src/battle/MovieUtil.py +++ b/toontown/src/battle/MovieUtil.py @@ -1,12 +1,12 @@ from direct.interval.IntervalGlobal import * -from BattleBase import * -from BattleProps import * +from .BattleBase import * +from .BattleProps import * from direct.directnotify import DirectNotifyGlobal import random from direct.particles import ParticleEffect -import BattleParticles -import BattleProps +from . import BattleParticles +from . import BattleProps from toontown.toonbase import TTLocalizer notify = DirectNotifyGlobal.directNotify.newCategory('MovieUtil') diff --git a/toontown/src/battle/PlayByPlayPanel.py b/toontown/src/battle/PlayByPlayPanel.py index e6669947..3fd34a15 100644 --- a/toontown/src/battle/PlayByPlayPanel.py +++ b/toontown/src/battle/PlayByPlayPanel.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToontownBattleGlobals import * from toontown.toonbase.ToontownGlobals import * -from SuitBattleGlobals import * +from .SuitBattleGlobals import * from direct.directnotify import DirectNotifyGlobal from direct.gui import OnscreenText diff --git a/toontown/src/battle/PlayByPlayText.py b/toontown/src/battle/PlayByPlayText.py index 3be1f8a2..860bad47 100644 --- a/toontown/src/battle/PlayByPlayText.py +++ b/toontown/src/battle/PlayByPlayText.py @@ -3,13 +3,13 @@ from toontown.toonbase import TTLocalizer from toontown.toonbase.ToontownBattleGlobals import * from toontown.toonbase.ToontownGlobals import * -from SuitBattleGlobals import * +from .SuitBattleGlobals import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal import string from direct.gui import OnscreenText -import BattleBase +from . import BattleBase class PlayByPlayText(OnscreenText.OnscreenText): """ diff --git a/toontown/src/battle/RewardPanel.py b/toontown/src/battle/RewardPanel.py index 5486aacb..066ebf6e 100644 --- a/toontown/src/battle/RewardPanel.py +++ b/toontown/src/battle/RewardPanel.py @@ -3,7 +3,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from toontown.toonbase import ToontownBattleGlobals -import BattleBase +from . import BattleBase from direct.directnotify import DirectNotifyGlobal import random import string @@ -16,7 +16,7 @@ import math from toontown.coghq import CogDisguiseGlobals from toontown.shtiker import DisguisePage -import Fanfare +from . import Fanfare from otp.otpbase import OTPGlobals class RewardPanel(DirectFrame): @@ -557,7 +557,7 @@ def getRandomCongratsPair(self, toon): numStrings = len(congratsStrings) assert(numStrings >= 2) - indexList = range(numStrings) + indexList = list(range(numStrings)) index1 = random.choice(indexList) indexList.remove(index1) @@ -748,7 +748,7 @@ def getTrackIntervalList(self, toon, track, origSkill, earnedSkill, hasUber, gue #check for corruptUberList #import pdb; pdb.set_trace() if hasUber < 0: - print(toon.doId, 'Reward Panel received an invalid hasUber from an uberList') + print((toon.doId, 'Reward Panel received an invalid hasUber from an uberList')) tickDelay = 0.16 intervalList = [] diff --git a/toontown/src/battle/SuitBattleGlobals.py b/toontown/src/battle/SuitBattleGlobals.py index 6883cc75..e5dff609 100644 --- a/toontown/src/battle/SuitBattleGlobals.py +++ b/toontown/src/battle/SuitBattleGlobals.py @@ -1,4 +1,4 @@ -from BattleBase import * +from .BattleBase import * import random from direct.directnotify import DirectNotifyGlobal @@ -155,7 +155,7 @@ def pickSuitAttack(attacks, suitLevel): # Return each different attack only once globally, then random. # A special debugging mode. for i in range(len(attacks)): - if not debugAttackSequence.has_key(attacks[i]): + if attacks[i] not in debugAttackSequence: debugAttackSequence[attacks[i]] = 1 return i return attackNum @@ -182,7 +182,7 @@ def getSuitAttack(suitName, suitLevel, attackNum=-1): adict['suitName'] = suitName name = attack[0] adict['name'] = name - adict['id'] = SuitAttacks.keys().index(name) + adict['id'] = list(SuitAttacks.keys()).index(name) adict['animName'] = SuitAttacks[name][0] adict['hp'] = attack[1][suitLevel] adict['acc'] = attack[2][suitLevel] @@ -1140,76 +1140,76 @@ def getSuitAttack(suitName, suitLevel, attackNum=-1): 'WriteOff': ('hold-pencil', ATK_TGT_SINGLE), } -AUDIT = SuitAttacks.keys().index('Audit') -BITE = SuitAttacks.keys().index('Bite') -BOUNCE_CHECK = SuitAttacks.keys().index('BounceCheck') -BRAIN_STORM = SuitAttacks.keys().index('BrainStorm') -BUZZ_WORD = SuitAttacks.keys().index('BuzzWord') -CALCULATE = SuitAttacks.keys().index('Calculate') -CANNED = SuitAttacks.keys().index('Canned') -CHOMP = SuitAttacks.keys().index('Chomp') -CIGAR_SMOKE = SuitAttacks.keys().index('CigarSmoke') -CLIPON_TIE = SuitAttacks.keys().index('ClipOnTie') -CRUNCH = SuitAttacks.keys().index('Crunch') -DEMOTION = SuitAttacks.keys().index('Demotion') -DOWNSIZE = SuitAttacks.keys().index('Downsize') -DOUBLE_TALK = SuitAttacks.keys().index('DoubleTalk') -EVICTION_NOTICE = SuitAttacks.keys().index('EvictionNotice') -EVIL_EYE = SuitAttacks.keys().index('EvilEye') -FILIBUSTER = SuitAttacks.keys().index('Filibuster') -FILL_WITH_LEAD = SuitAttacks.keys().index('FillWithLead') -FINGER_WAG = SuitAttacks.keys().index('FingerWag') -FIRED = SuitAttacks.keys().index('Fired') -FIVE_O_CLOCK_SHADOW = SuitAttacks.keys().index('FiveOClockShadow') -FLOOD_THE_MARKET = SuitAttacks.keys().index('FloodTheMarket') -FOUNTAIN_PEN = SuitAttacks.keys().index('FountainPen') -FREEZE_ASSETS = SuitAttacks.keys().index('FreezeAssets') -GAVEL = SuitAttacks.keys().index('Gavel') -GLOWER_POWER = SuitAttacks.keys().index('GlowerPower') -GUILT_TRIP = SuitAttacks.keys().index('GuiltTrip') -HALF_WINDSOR = SuitAttacks.keys().index('HalfWindsor') -HANG_UP = SuitAttacks.keys().index('HangUp') -HEAD_SHRINK = SuitAttacks.keys().index('HeadShrink') -HOT_AIR = SuitAttacks.keys().index('HotAir') -JARGON = SuitAttacks.keys().index('Jargon') -LEGALESE = SuitAttacks.keys().index('Legalese') -LIQUIDATE = SuitAttacks.keys().index('Liquidate') -MARKET_CRASH = SuitAttacks.keys().index('MarketCrash') -MUMBO_JUMBO = SuitAttacks.keys().index('MumboJumbo') -PARADIGM_SHIFT = SuitAttacks.keys().index('ParadigmShift') -PECKING_ORDER = SuitAttacks.keys().index('PeckingOrder') -PICK_POCKET = SuitAttacks.keys().index('PickPocket') -PINK_SLIP = SuitAttacks.keys().index('PinkSlip') -PLAY_HARDBALL = SuitAttacks.keys().index('PlayHardball') -POUND_KEY = SuitAttacks.keys().index('PoundKey') -POWER_TIE = SuitAttacks.keys().index('PowerTie') -POWER_TRIP = SuitAttacks.keys().index('PowerTrip') -QUAKE = SuitAttacks.keys().index('Quake') -RAZZLE_DAZZLE = SuitAttacks.keys().index('RazzleDazzle') -RED_TAPE = SuitAttacks.keys().index('RedTape') -RE_ORG = SuitAttacks.keys().index('ReOrg') -RESTRAINING_ORDER = SuitAttacks.keys().index('RestrainingOrder') -ROLODEX = SuitAttacks.keys().index('Rolodex') -RUBBER_STAMP = SuitAttacks.keys().index('RubberStamp') -RUB_OUT = SuitAttacks.keys().index('RubOut') -SACKED = SuitAttacks.keys().index('Sacked') -SANDTRAP = SuitAttacks.keys().index('SandTrap') -SCHMOOZE = SuitAttacks.keys().index('Schmooze') -SHAKE = SuitAttacks.keys().index('Shake') -SHRED = SuitAttacks.keys().index('Shred') -SONG_AND_DANCE = SuitAttacks.keys().index('SongAndDance') -SPIN = SuitAttacks.keys().index('Spin') -SYNERGY = SuitAttacks.keys().index('Synergy') -TABULATE = SuitAttacks.keys().index('Tabulate') -TEE_OFF = SuitAttacks.keys().index('TeeOff') -THROW_BOOK = SuitAttacks.keys().index('ThrowBook') -TREMOR = SuitAttacks.keys().index('Tremor') -WATERCOOLER = SuitAttacks.keys().index('Watercooler') -WITHDRAWAL = SuitAttacks.keys().index('Withdrawal') -WRITE_OFF = SuitAttacks.keys().index('WriteOff') +AUDIT = list(SuitAttacks.keys()).index('Audit') +BITE = list(SuitAttacks.keys()).index('Bite') +BOUNCE_CHECK = list(SuitAttacks.keys()).index('BounceCheck') +BRAIN_STORM = list(SuitAttacks.keys()).index('BrainStorm') +BUZZ_WORD = list(SuitAttacks.keys()).index('BuzzWord') +CALCULATE = list(SuitAttacks.keys()).index('Calculate') +CANNED = list(SuitAttacks.keys()).index('Canned') +CHOMP = list(SuitAttacks.keys()).index('Chomp') +CIGAR_SMOKE = list(SuitAttacks.keys()).index('CigarSmoke') +CLIPON_TIE = list(SuitAttacks.keys()).index('ClipOnTie') +CRUNCH = list(SuitAttacks.keys()).index('Crunch') +DEMOTION = list(SuitAttacks.keys()).index('Demotion') +DOWNSIZE = list(SuitAttacks.keys()).index('Downsize') +DOUBLE_TALK = list(SuitAttacks.keys()).index('DoubleTalk') +EVICTION_NOTICE = list(SuitAttacks.keys()).index('EvictionNotice') +EVIL_EYE = list(SuitAttacks.keys()).index('EvilEye') +FILIBUSTER = list(SuitAttacks.keys()).index('Filibuster') +FILL_WITH_LEAD = list(SuitAttacks.keys()).index('FillWithLead') +FINGER_WAG = list(SuitAttacks.keys()).index('FingerWag') +FIRED = list(SuitAttacks.keys()).index('Fired') +FIVE_O_CLOCK_SHADOW = list(SuitAttacks.keys()).index('FiveOClockShadow') +FLOOD_THE_MARKET = list(SuitAttacks.keys()).index('FloodTheMarket') +FOUNTAIN_PEN = list(SuitAttacks.keys()).index('FountainPen') +FREEZE_ASSETS = list(SuitAttacks.keys()).index('FreezeAssets') +GAVEL = list(SuitAttacks.keys()).index('Gavel') +GLOWER_POWER = list(SuitAttacks.keys()).index('GlowerPower') +GUILT_TRIP = list(SuitAttacks.keys()).index('GuiltTrip') +HALF_WINDSOR = list(SuitAttacks.keys()).index('HalfWindsor') +HANG_UP = list(SuitAttacks.keys()).index('HangUp') +HEAD_SHRINK = list(SuitAttacks.keys()).index('HeadShrink') +HOT_AIR = list(SuitAttacks.keys()).index('HotAir') +JARGON = list(SuitAttacks.keys()).index('Jargon') +LEGALESE = list(SuitAttacks.keys()).index('Legalese') +LIQUIDATE = list(SuitAttacks.keys()).index('Liquidate') +MARKET_CRASH = list(SuitAttacks.keys()).index('MarketCrash') +MUMBO_JUMBO = list(SuitAttacks.keys()).index('MumboJumbo') +PARADIGM_SHIFT = list(SuitAttacks.keys()).index('ParadigmShift') +PECKING_ORDER = list(SuitAttacks.keys()).index('PeckingOrder') +PICK_POCKET = list(SuitAttacks.keys()).index('PickPocket') +PINK_SLIP = list(SuitAttacks.keys()).index('PinkSlip') +PLAY_HARDBALL = list(SuitAttacks.keys()).index('PlayHardball') +POUND_KEY = list(SuitAttacks.keys()).index('PoundKey') +POWER_TIE = list(SuitAttacks.keys()).index('PowerTie') +POWER_TRIP = list(SuitAttacks.keys()).index('PowerTrip') +QUAKE = list(SuitAttacks.keys()).index('Quake') +RAZZLE_DAZZLE = list(SuitAttacks.keys()).index('RazzleDazzle') +RED_TAPE = list(SuitAttacks.keys()).index('RedTape') +RE_ORG = list(SuitAttacks.keys()).index('ReOrg') +RESTRAINING_ORDER = list(SuitAttacks.keys()).index('RestrainingOrder') +ROLODEX = list(SuitAttacks.keys()).index('Rolodex') +RUBBER_STAMP = list(SuitAttacks.keys()).index('RubberStamp') +RUB_OUT = list(SuitAttacks.keys()).index('RubOut') +SACKED = list(SuitAttacks.keys()).index('Sacked') +SANDTRAP = list(SuitAttacks.keys()).index('SandTrap') +SCHMOOZE = list(SuitAttacks.keys()).index('Schmooze') +SHAKE = list(SuitAttacks.keys()).index('Shake') +SHRED = list(SuitAttacks.keys()).index('Shred') +SONG_AND_DANCE = list(SuitAttacks.keys()).index('SongAndDance') +SPIN = list(SuitAttacks.keys()).index('Spin') +SYNERGY = list(SuitAttacks.keys()).index('Synergy') +TABULATE = list(SuitAttacks.keys()).index('Tabulate') +TEE_OFF = list(SuitAttacks.keys()).index('TeeOff') +THROW_BOOK = list(SuitAttacks.keys()).index('ThrowBook') +TREMOR = list(SuitAttacks.keys()).index('Tremor') +WATERCOOLER = list(SuitAttacks.keys()).index('Watercooler') +WITHDRAWAL = list(SuitAttacks.keys()).index('Withdrawal') +WRITE_OFF = list(SuitAttacks.keys()).index('WriteOff') def getFaceoffTaunt(suitName, doId): - if SuitFaceoffTaunts.has_key(suitName): + if suitName in SuitFaceoffTaunts: taunts = SuitFaceoffTaunts[suitName] else: taunts = TTLocalizer.SuitFaceoffDefaultTaunts @@ -1225,14 +1225,14 @@ def getAttackTauntIndexFromIndex(suit, attackIndex): return getAttackTauntIndex(adict['name']) def getAttackTauntIndex(attackName): - if (SuitAttackTaunts.has_key(attackName)): + if (attackName in SuitAttackTaunts): taunts = SuitAttackTaunts[attackName] return random.randint(0, len(taunts)-1) else: return 1 def getAttackTaunt(attackName, index=None): - if (SuitAttackTaunts.has_key(attackName)): + if (attackName in SuitAttackTaunts): taunts = SuitAttackTaunts[attackName] else: taunts = TTLocalizer.SuitAttackDefaultTaunts diff --git a/toontown/src/building/BoardingGroupShow.py b/toontown/src/building/BoardingGroupShow.py index 14b1cb5b..5daade72 100644 --- a/toontown/src/building/BoardingGroupShow.py +++ b/toontown/src/building/BoardingGroupShow.py @@ -301,7 +301,7 @@ def __isRunPathClear(self, elevatorModel, offsetWrtRender): queue.sortEntries() if queue.getNumEntries(): # Go through all the collision entries - for entryNum in xrange(queue.getNumEntries()): + for entryNum in range(queue.getNumEntries()): entry = queue.getEntry(entryNum) hitObject = entry.getIntoNodePath() # This collision ray might collide against another toon standing in front of it diff --git a/toontown/src/building/BoardingPartyBase.py b/toontown/src/building/BoardingPartyBase.py index 823ebd23..e92089c2 100644 --- a/toontown/src/building/BoardingPartyBase.py +++ b/toontown/src/building/BoardingPartyBase.py @@ -34,7 +34,7 @@ def setGroupSize(self, groupSize): self.maxSize = groupSize def getGroupLeader(self, avatarId): - if self.avIdDict.has_key(avatarId): + if avatarId in self.avIdDict: leaderId = self.avIdDict[avatarId] return leaderId else: @@ -51,7 +51,7 @@ def getGroupMemberList(self, avatarId): """ returns the memberlist with the leader at index 0 """ - if self.avIdDict.has_key(avatarId): + if avatarId in self.avIdDict: leaderId = self.avIdDict[avatarId] group = self.groupListDict.get(leaderId) if group: @@ -62,7 +62,7 @@ def getGroupMemberList(self, avatarId): return [] def getGroupInviteList(self, avatarId): - if self.avIdDict.has_key(avatarId): + if avatarId in self.avIdDict: leaderId = self.avIdDict[avatarId] group = self.groupListDict.get(leaderId) if group: @@ -73,7 +73,7 @@ def getGroupInviteList(self, avatarId): return [] def getGroupKickList(self, avatarId): - if self.avIdDict.has_key(avatarId): + if avatarId in self.avIdDict: leaderId = self.avIdDict[avatarId] group = self.groupListDict.get(leaderId) if group: @@ -100,7 +100,7 @@ def hasPendingInvite(self, avatarId): If the avatar is a non-leader just check if the avatar is there in it's leader's invite list. """ pendingInvite = False - if self.avIdDict.has_key(avatarId): + if avatarId in self.avIdDict: leaderId = self.avIdDict[avatarId] leaderInviteList = self.getGroupInviteList(leaderId) if (leaderId == avatarId): diff --git a/toontown/src/building/DistributedAnimDoor.py b/toontown/src/building/DistributedAnimDoor.py index 22ae5942..a49892e5 100644 --- a/toontown/src/building/DistributedAnimDoor.py +++ b/toontown/src/building/DistributedAnimDoor.py @@ -32,7 +32,7 @@ def getBuilding(self): """Return only a nodepath to our parent building. See also getAnimBuilding. """ - if (not self.__dict__.has_key('building')): + if ('building' not in self.__dict__): if self.doorType == DoorTypes.EXT_ANIM_STANDARD: searchStr = "**/??"+str(self.block)+":animated_building_*_DNARoot;+s" self.notify.debug("searchStr=%s" % searchStr) @@ -86,7 +86,7 @@ def setTriggerName(self): def getAnimBuilding(self): """Return a handle on the animated building prop.""" # Once we find it, we store it, so we don't have to find it again. - if (not self.__dict__.has_key('animBuilding')): + if ('animBuilding' not in self.__dict__): if self.doorType == DoorTypes.EXT_ANIM_STANDARD: #self.building = self.cr.playGame.hood.loader.geom.find( # "**/??"+str(self.block)+":animated_building_*_DNARoot;+s") diff --git a/toontown/src/building/DistributedAnimatedProp.py b/toontown/src/building/DistributedAnimatedProp.py index 8effe244..e712e49c 100644 --- a/toontown/src/building/DistributedAnimatedProp.py +++ b/toontown/src/building/DistributedAnimatedProp.py @@ -80,7 +80,7 @@ def setPropId(self, propId): required dc field. """ assert self.debugPrint("setPropId(%s)"%(propId,)) - assert not self.__dict__.has_key("propId") + assert "propId" not in self.__dict__ self.propId=propId def setAvatarInteract(self, avatarId): @@ -88,7 +88,7 @@ def setAvatarInteract(self, avatarId): required dc field. """ assert self.debugPrint("setAvatarInteract(%s)"%(avatarId,)) - assert not self.__dict__.has_key(avatarId) + assert avatarId not in self.__dict__ self.avatarId=avatarId def setOwnerDoId(self, ownerDoId): @@ -96,7 +96,7 @@ def setOwnerDoId(self, ownerDoId): required dc field. """ assert self.debugPrint("setOwnerDoId(%s)"%(ownerDoId,)) - assert not self.__dict__.has_key("ownerDoId") + assert "ownerDoId" not in self.__dict__ self.ownerDoId=ownerDoId def setState(self, state, timestamp): diff --git a/toontown/src/building/DistributedBBElevator.py b/toontown/src/building/DistributedBBElevator.py index 9dafb1a8..423b931e 100644 --- a/toontown/src/building/DistributedBBElevator.py +++ b/toontown/src/building/DistributedBBElevator.py @@ -1,6 +1,6 @@ -import DistributedElevator -import DistributedBossElevator -from ElevatorConstants import * +from . import DistributedElevator +from . import DistributedBossElevator +from .ElevatorConstants import * from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer diff --git a/toontown/src/building/DistributedBBElevatorAI.py b/toontown/src/building/DistributedBBElevatorAI.py index 051865c4..e5834909 100644 --- a/toontown/src/building/DistributedBBElevatorAI.py +++ b/toontown/src/building/DistributedBBElevatorAI.py @@ -1,5 +1,5 @@ -from ElevatorConstants import * -import DistributedBossElevatorAI +from .ElevatorConstants import * +from . import DistributedBossElevatorAI class DistributedBBElevatorAI(DistributedBossElevatorAI.DistributedBossElevatorAI): diff --git a/toontown/src/building/DistributedBoardingParty.py b/toontown/src/building/DistributedBoardingParty.py index bb26023c..736cb6cb 100644 --- a/toontown/src/building/DistributedBoardingParty.py +++ b/toontown/src/building/DistributedBoardingParty.py @@ -12,7 +12,7 @@ from toontown.hood import ZoneUtil from toontown.toontowngui import TeaserPanel from direct.interval.IntervalGlobal import * -import BoardingGroupShow +from . import BoardingGroupShow class DistributedBoardingParty(DistributedObject.DistributedObject, BoardingPartyBase.BoardingPartyBase): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBoardingParty') @@ -86,7 +86,7 @@ def postGroupInfo(self, leaderId, memberList, inviteeList, kickedList): self.notify.debug("postgroupInfo") isMyGroup = 0 removedMemberIdList = [] - if self.groupListDict.has_key(leaderId): + if leaderId in self.groupListDict: oldGroupEntry = self.groupListDict[leaderId] else: oldGroupEntry = [[],[],[]] @@ -119,7 +119,7 @@ def postGroupInfo(self, leaderId, memberList, inviteeList, kickedList): if (newGroupEntry[0]) == [0] or (not newGroupEntry[0]): # if the new memberList is empty dgroup = self.groupListDict.pop(leaderId) for memberId in dgroup[0]: - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: self.avIdDict.pop(memberId) if isMyGroup: @@ -419,17 +419,17 @@ def postGroupDissolve(self, quitterId, leaderId, memberList, kick): isMyGroup = 0 if (localAvatar.doId == quitterId) or (localAvatar.doId == leaderId): isMyGroup = 1 - if self.groupListDict.has_key(leaderId): + if leaderId in self.groupListDict: if leaderId == localAvatar.doId: isMyGroup = 1 - if self.avIdDict.has_key(leaderId): + if leaderId in self.avIdDict: self.avIdDict.pop(leaderId) dgroup = self.groupListDict.pop(leaderId) for memberId in memberList: if memberId == localAvatar.doId: isMyGroup = 1 - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: self.avIdDict.pop(memberId) if isMyGroup: @@ -541,7 +541,7 @@ def requestLeave(self): place = base.cr.playGame.getPlace() if place: if not (place.getState() == 'elevator'): - if self.avIdDict.has_key(localAvatar.doId): + if localAvatar.doId in self.avIdDict: leaderId = self.avIdDict[localAvatar.doId] self.sendUpdate("requestLeave", [leaderId]) diff --git a/toontown/src/building/DistributedBoardingPartyAI.py b/toontown/src/building/DistributedBoardingPartyAI.py index 8f8cef96..86e84ea8 100644 --- a/toontown/src/building/DistributedBoardingPartyAI.py +++ b/toontown/src/building/DistributedBoardingPartyAI.py @@ -2,7 +2,7 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * from direct.distributed import DistributedObjectAI from direct.fsm import ClassicFSM, State @@ -162,7 +162,7 @@ def requestInvite(self, inviteeId): self.sendUpdateToAvatarId(inviterId, "postInviteNotQualify", [inviterId, reason, self.elevatorIdList[0]]) return - if self.avIdDict.has_key(inviterId): #existing group + if inviterId in self.avIdDict: #existing group self.notify.debug("old group") leaderId = self.avIdDict[inviterId] groupList = self.groupListDict.get(leaderId) @@ -179,7 +179,7 @@ def requestInvite(self, inviteeId): groupList[1].append(inviteeId) self.groupListDict[leaderId] = groupList - if self.avIdDict.has_key(inviteeId): + if inviteeId in self.avIdDict: self.notify.warning('inviter %s tried to invite %s who already exists in the avIdDict.' %(inviterId, inviteeId)) self.air.writeServerEvent('suspicious: inviter', inviterId,' tried to invite %s who already exists in the avIdDict.' %inviteeId) self.avIdDict[inviteeId] = leaderId @@ -192,7 +192,7 @@ def requestInvite(self, inviteeId): elif inviterId in groupList[2]: self.sendUpdate("postKickReject", [leaderId, inviterId, inviteeId]) else: #creating new Group with inviter as leader - if self.avIdDict.has_key(inviteeId): + if inviteeId in self.avIdDict: self.notify.warning('inviter %s tried to invite %s who already exists in avIdDict.' %(inviterId, inviteeId)) self.air.writeServerEvent('suspicious: inviter', inviterId,' tried to invite %s who already exists in the avIdDict.' %inviteeId) @@ -206,7 +206,7 @@ def requestInvite(self, inviteeId): def requestCancelInvite(self, inviteeId): inviterId = self.air.getAvatarIdFromSender() - if self.avIdDict.has_key(inviterId): + if inviterId in self.avIdDict: leaderId = self.avIdDict[inviterId] groupList = self.groupListDict.get(leaderId) if groupList: @@ -217,14 +217,14 @@ def requestAcceptInvite(self, leaderId, inviterId): inviteeId = self.air.getAvatarIdFromSender() self.notify.debug("requestAcceptInvite leader%s inviter%s invitee%s" % (leaderId, inviterId, inviteeId)) - if self.avIdDict.has_key(inviteeId): + if inviteeId in self.avIdDict: # Send reject to the invitee if the invitee is already in a boarding group if self.hasActiveGroup(inviteeId): self.sendUpdateToAvatarId(inviteeId, "postAlreadyInGroup", []) return # Reject this acceptance if the leader is not part of the group. - if not self.avIdDict.has_key(leaderId) or not self.isInGroup(inviteeId, leaderId): + if leaderId not in self.avIdDict or not self.isInGroup(inviteeId, leaderId): self.sendUpdateToAvatarId(inviteeId, "postSomethingMissing", []) return @@ -260,7 +260,7 @@ def requestRejectInvite(self, leaderId, inviterId): def requestKick(self, kickId): leaderId = self.air.getAvatarIdFromSender() - if self.avIdDict.has_key(kickId): + if kickId in self.avIdDict: if self.avIdDict[kickId] == leaderId: self.removeFromGroup(leaderId, kickId, kick = 1) self.sendUpdateToAvatarId(kickId, "postKick", [leaderId]) @@ -268,7 +268,7 @@ def requestKick(self, kickId): def requestLeave(self, leaderId): # player is leaving a group voluntarly memberId = self.air.getAvatarIdFromSender() - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: if leaderId == self.avIdDict[memberId]: self.removeFromGroup(leaderId, memberId) ## else: @@ -302,7 +302,7 @@ def testBoard(self, leaderId, elevatorId, needSpace = 0): if elevatorId in self.elevatorIdList: elevator = simbase.air.doId2do.get(elevatorId) if elevator: - if self.avIdDict.has_key(leaderId): + if leaderId in self.avIdDict: if leaderId == self.avIdDict[leaderId]: boardOkay = BoardingPartyBase.BOARDCODE_OKAY for avId in self.getGroupMemberList(leaderId): @@ -346,7 +346,7 @@ def requestBoard(self, elevatorId): if elevatorId in self.elevatorIdList: elevator = simbase.air.doId2do.get(elevatorId) if elevator: - if self.avIdDict.has_key(leaderId): + if leaderId in self.avIdDict: if leaderId == self.avIdDict[leaderId]: group = self.groupListDict.get(leaderId) if group: @@ -376,7 +376,7 @@ def testGoButtonRequirements(self, leaderId, elevatorId): Return True if everything looks good. Send a reject to the leader and return False if somebody doesn't qualify. """ - if self.avIdDict.has_key(leaderId): + if leaderId in self.avIdDict: if leaderId == self.avIdDict[leaderId]: if elevatorId in self.elevatorIdList: elevator = simbase.air.doId2do.get(elevatorId) @@ -444,7 +444,7 @@ def sendAvatarsToDestinationTask(self, elevatorId, avList, task): def handleAvatarDisco(self, avId): self.notify.debug("handleAvatarDisco %s" % (avId)) - if self.avIdDict.has_key(avId): + if avId in self.avIdDict: leaderId = self.avIdDict[avId] self.removeFromGroup(leaderId, avId) @@ -452,7 +452,7 @@ def handleAvatarZoneChange(self, avId, zoneNew, zoneOld): self.notify.debug("handleAvatarZoneChange %s new%s old%s bp%s" % (avId, zoneNew, zoneOld, self.zoneId)) if zoneNew in self.visibleZones:#== self.zoneId: self.toonInZone(avId) - elif self.avIdDict.has_key(avId): + elif avId in self.avIdDict: leaderId = self.avIdDict[avId] self.removeFromGroup(leaderId, avId) @@ -463,7 +463,7 @@ def toonInZone(self, avId): right group """ #callerId = self.air.getAvatarIdFromSender() - if self.avIdDict.has_key(avId): + if avId in self.avIdDict: leaderId = self.avIdDict[avId] group = self.groupListDict.get(leaderId) if leaderId and group: @@ -497,10 +497,10 @@ def removeFromGroup(self, leaderId, memberId, kick = 0, post = 1): self.notify.debug ("Groups %s" % (self.groupListDict)) self.notify.debug ("avDict %s" % (self.avIdDict)) - if not (self.avIdDict.has_key(leaderId)): + if not (leaderId in self.avIdDict): # Dissolve the group if you can't find the leader. self.sendUpdate("postGroupDissolve",[memberId, leaderId, [], kick]) - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: self.avIdDict.pop(memberId) return self.removeWacthAvStatus(memberId) @@ -527,18 +527,18 @@ def removeFromGroup(self, leaderId, memberId, kick = 0, post = 1): # Either the leader wants to leave or the group has only 1 member, so dissolve the group. if (memberId == leaderId) or (len(group[0]) < 2): - if self.avIdDict.has_key(leaderId): + if leaderId in self.avIdDict: self.avIdDict.pop(leaderId) # Remove all the pending invitees of this group from avIdDict for inviteeId in group[1]: - if self.avIdDict.has_key(inviteeId): + if inviteeId in self.avIdDict: self.avIdDict.pop(inviteeId) # Send a message to the invitee to remove the invitee message. self.sendUpdateToAvatarId(inviteeId, "postInviteCanceled", []) dgroup = self.groupListDict.pop(leaderId) for dMemberId in dgroup[0]: - if self.avIdDict.has_key(dMemberId): + if dMemberId in self.avIdDict: self.avIdDict.pop(dMemberId) self.notify.debug("postGroupDissolve") # Adding the removed member to the list so that we can send this list to the clients. @@ -551,7 +551,7 @@ def removeFromGroup(self, leaderId, memberId, kick = 0, post = 1): self.notify.debug('Calling postGroupInfo from removeFromGroup') self.sendUpdate("postGroupInfo", [leaderId, group[0], group[1], group[2]]) - if self.avIdDict.has_key(memberId): + if memberId in self.avIdDict: self.avIdDict.pop(memberId) self.notify.debug("Remove from group END") diff --git a/toontown/src/building/DistributedBossElevator.py b/toontown/src/building/DistributedBossElevator.py index 91afd914..4e68899b 100644 --- a/toontown/src/building/DistributedBossElevator.py +++ b/toontown/src/building/DistributedBossElevator.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * -import DistributedElevator -import DistributedElevatorExt +from .ElevatorConstants import * +from .ElevatorUtils import * +from . import DistributedElevator +from . import DistributedElevatorExt from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM diff --git a/toontown/src/building/DistributedBossElevatorAI.py b/toontown/src/building/DistributedBossElevatorAI.py index 48163a02..8737a41c 100644 --- a/toontown/src/building/DistributedBossElevatorAI.py +++ b/toontown/src/building/DistributedBossElevatorAI.py @@ -1,10 +1,10 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * -import DistributedElevatorAI -import DistributedElevatorExtAI +from . import DistributedElevatorAI +from . import DistributedElevatorExtAI from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task diff --git a/toontown/src/building/DistributedBuilding.py b/toontown/src/building/DistributedBuilding.py index ec704eb8..c7cb76ed 100644 --- a/toontown/src/building/DistributedBuilding.py +++ b/toontown/src/building/DistributedBuilding.py @@ -5,9 +5,9 @@ from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from direct.directtools.DirectGeometry import * -from ElevatorConstants import * -from ElevatorUtils import * -from SuitBuildingGlobals import * +from .ElevatorConstants import * +from .ElevatorUtils import * +from .SuitBuildingGlobals import * from direct.gui.DirectGui import * from pandac.PandaModules import * @@ -1354,7 +1354,7 @@ def plantVictorsOutsideBldg(self): #print "planting Victors %s !" % self.victorList retVal = 0 for victor in self.victorList: - if victor != 0 and self.cr.doId2do.has_key(victor): + if victor != 0 and victor in self.cr.doId2do: toon = self.cr.doId2do[victor] toon.setPosHpr(self.elevatorModel, 0, -10, 0, 0, 0, 0) toon.startSmooth() @@ -1369,14 +1369,14 @@ def getVictoryRunTrack(self): delayDeletes = [] i = 0 for victor in self.victorList: - if victor != 0 and self.cr.doId2do.has_key(victor): + if victor != 0 and victor in self.cr.doId2do: toon = self.cr.doId2do[victor] delayDeletes.append(DelayDelete.DelayDelete(toon, 'getVictoryRunTrack')) toon.stopSmooth() toon.setParent(ToontownGlobals.SPHidden) origPosTrack.append(Func(toon.setPosHpr, self.elevatorNodePath, - apply(Point3, ElevatorPoints[i]), + Point3(*ElevatorPoints[i]), Point3(180, 0, 0))) origPosTrack.append(Func(toon.setParent, ToontownGlobals.SPRender)) @@ -1390,7 +1390,7 @@ def getVictoryRunTrack(self): runOutAll = Parallel() i = 0 for victor in self.victorList: - if victor != 0 and self.cr.doId2do.has_key(victor): + if victor != 0 and victor in self.cr.doId2do: toon = self.cr.doId2do[victor] p0 = Point3(0, 0, 0) p1 = Point3(ElevatorPoints[i][0], diff --git a/toontown/src/building/DistributedBuildingAI.py b/toontown/src/building/DistributedBuildingAI.py index 3bf3c631..ce9a9f57 100644 --- a/toontown/src/building/DistributedBuildingAI.py +++ b/toontown/src/building/DistributedBuildingAI.py @@ -12,16 +12,16 @@ from direct.fsm import State from direct.fsm import ClassicFSM, State from toontown.toonbase.ToontownGlobals import ToonHall -import DistributedToonInteriorAI -import DistributedToonHallInteriorAI -import DistributedSuitInteriorAI -import DistributedDoorAI -import DoorTypes -import DistributedElevatorExtAI -import DistributedKnockKnockDoorAI -import SuitPlannerInteriorAI -import SuitBuildingGlobals -import FADoorCodes +from . import DistributedToonInteriorAI +from . import DistributedToonHallInteriorAI +from . import DistributedSuitInteriorAI +from . import DistributedDoorAI +from . import DoorTypes +from . import DistributedElevatorExtAI +from . import DistributedKnockKnockDoorAI +from . import SuitPlannerInteriorAI +from . import SuitBuildingGlobals +from . import FADoorCodes from toontown.hood import ZoneUtil import random import time @@ -405,7 +405,7 @@ def setVictorReady(self): self.toonTakeOver() def setVictorExited(self, avId): - print "victor %d exited unexpectedly for bldg %d" % (avId, self.doId) + print("victor %d exited unexpectedly for bldg %d" % (avId, self.doId)) self.recordVictorResponse(avId) if self.allVictorsResponded(): self.toonTakeOver() @@ -421,7 +421,7 @@ def exitOff(self): ##### waitForVictors state ##### def getToon(self, toonId): - if (self.air.doId2do.has_key(toonId)): + if (toonId in self.air.doId2do): return self.air.doId2do[toonId] else: self.notify.warning('getToon() - toon: %d not in repository!' \ @@ -472,7 +472,7 @@ def enterWaitForVictors(self, victorList, savedBy): # Also, if a toon has disconnected, remove him from the list. for i in range(0, 4): victor = victorList[i] - if victor == None or not self.air.doId2do.has_key(victor): + if victor == None or victor not in self.air.doId2do: victorList[i] = 0 else: @@ -526,7 +526,7 @@ def enterWaitForVictorsFromCogdo(self, victorList, savedBy): # Also, if a toon has disconnected, remove him from the list. for i in range(0, 4): victor = victorList[i] - if victor == None or not self.air.doId2do.has_key(victor): + if victor == None or victor not in self.air.doId2do: victorList[i] = 0 else: @@ -601,13 +601,7 @@ def enterToon(self): # Create the DistributedDoor: exteriorZoneId, interiorZoneId=self.getExteriorAndInteriorZoneId() # Toon interior: - if simbase.config.GetBool("want-new-toonhall",1) and \ - ZoneUtil.getCanonicalZoneId(interiorZoneId)== ToonHall: - self.interior=DistributedToonHallInteriorAI.DistributedToonHallInteriorAI( - self.block, self.air, interiorZoneId, self) - else: - self.interior=DistributedToonInteriorAI.DistributedToonInteriorAI( - self.block, self.air, interiorZoneId, self) + self.interior=DistributedToonInteriorAI.DistributedToonInteriorAI(self.block, self.air, interiorZoneId, self) self.interior.generateWithRequired(interiorZoneId) # Outside door: diff --git a/toontown/src/building/DistributedBuildingMgrAI.py b/toontown/src/building/DistributedBuildingMgrAI.py index 24dfcf55..b9026647 100644 --- a/toontown/src/building/DistributedBuildingMgrAI.py +++ b/toontown/src/building/DistributedBuildingMgrAI.py @@ -7,12 +7,12 @@ import os from direct.task.Task import Task -import cPickle +import pickle from otp.ai.AIBaseGlobal import * -import DistributedBuildingAI -import HQBuildingAI -import GagshopBuildingAI -import PetshopBuildingAI +from . import DistributedBuildingAI +from . import HQBuildingAI +from . import GagshopBuildingAI +from . import PetshopBuildingAI from toontown.building.KartShopBuildingAI import KartShopBuildingAI from toontown.building import DistributedAnimBuildingAI #import DistributedDoorAI @@ -30,7 +30,7 @@ class DistributedBuildingMgrAI: buildings to whoever asks. Landmark data will be saved to an AI Server local file. - + *How landmark building info gets loaded: load list from dna; @@ -47,7 +47,7 @@ class DistributedBuildingMgrAI: make reasonable matches for suit blocks; create the building AI dictionary - + *Saving building data: check for backup buildings file; if present: @@ -81,14 +81,14 @@ def __init__(self, air, branchID, dnaStore, trophyMgr): def cleanup(self): taskMgr.remove(str(self.branchID)+'_delayed_save-timer') - for building in self.__buildings.values(): + for building in list(self.__buildings.values()): building.cleanup() self.__buildings = {} - + def isValidBlockNumber(self, blockNumber): """return true if that block refers to a real block""" assert(self.debugPrint("isValidBlockNumber(blockNumber="+str(blockNumber)+")")) - return self.__buildings.has_key(blockNumber) + return blockNumber in self.__buildings def delayedSaveTask(self, task): assert(self.debugPrint("delayedSaveTask()")) @@ -99,13 +99,13 @@ def delayedSaveTask(self, task): def isSuitBlock(self, blockNumber): """return true if that block is a suit block/building""" assert(self.debugPrint("isSuitBlock(blockNumber="+str(blockNumber)+")")) - assert(self.__buildings.has_key(blockNumber)) + assert(blockNumber in self.__buildings) return self.__buildings[blockNumber].isSuitBlock() def getSuitBlocks(self): assert(self.debugPrint("getSuitBlocks()")) blocks=[] - for i in self.__buildings.values(): + for i in list(self.__buildings.values()): if i.isSuitBlock(): blocks.append(i.getBlock()[0]) return blocks @@ -113,7 +113,7 @@ def getSuitBlocks(self): def getEstablishedSuitBlocks(self): assert(self.debugPrint("getEstablishedSuitBlocks()")) blocks=[] - for i in self.__buildings.values(): + for i in list(self.__buildings.values()): if i.isEstablishedSuitBlock(): blocks.append(i.getBlock()[0]) return blocks @@ -121,7 +121,7 @@ def getEstablishedSuitBlocks(self): def getToonBlocks(self): assert(self.debugPrint("getToonBlocks()")) blocks=[] - for i in self.__buildings.values(): + for i in list(self.__buildings.values()): if isinstance(i, HQBuildingAI.HQBuildingAI): continue if not i.isSuitBlock(): @@ -129,14 +129,14 @@ def getToonBlocks(self): return blocks def getBuildings(self): - return self.__buildings.values() + return list(self.__buildings.values()) def getFrontDoorPoint(self, blockNumber): """get any associated path point for the specified building, useful for suits to know where to go when exiting from a building""" assert(self.debugPrint("getFrontDoorPoint(blockNumber="+str(blockNumber)+")")) - assert(self.__buildings.has_key(blockNumber)) + assert(blockNumber in self.__buildings) return self.__buildings[blockNumber].getFrontDoorPoint() def getBuildingTrack(self, blockNumber): @@ -144,23 +144,23 @@ def getBuildingTrack(self, blockNumber): useful for suits to know where to go when exiting from a building""" assert(self.debugPrint("getBuildingTrack(blockNumber="+str(blockNumber)+")")) - assert(self.__buildings.has_key(blockNumber)) + assert(blockNumber in self.__buildings) return self.__buildings[blockNumber].track def getBuilding( self, blockNumber ): assert(self.debugPrint("getBuilding(%s)" %(str(blockNumber),))) - assert(self.__buildings.has_key(blockNumber)) + assert(blockNumber in self.__buildings) return self.__buildings[blockNumber] - + def setFrontDoorPoint(self, blockNumber, point): """get any associated path point for the specified building, useful for suits to know where to go when exiting from a building""" assert(self.debugPrint("setFrontDoorPoint(blockNumber="+str(blockNumber) +", point="+str(point)+")")) - assert(self.__buildings.has_key(blockNumber)) + assert(blockNumber in self.__buildings) return self.__buildings[blockNumber].setFrontDoorPoint(point) - + def getDNABlockLists(self): blocks=[] hqBlocks=[] @@ -172,19 +172,15 @@ def getDNABlockLists(self): blockNumber = self.dnaStore.getBlockNumberAt(i) buildingType = self.dnaStore.getBlockBuildingType(blockNumber) if (buildingType == 'hq'): - hqBlocks.append(blockNumber) + hqBlocks.append(blockNumber) elif (buildingType == 'gagshop'): gagshopBlocks.append(blockNumber) elif (buildingType == 'petshop'): petshopBlocks.append(blockNumber) - elif( buildingType == 'kartshop' ): - kartshopBlocks.append( blockNumber ) - elif( buildingType == 'animbldg' ): - animBldgBlocks.append( blockNumber ) else: blocks.append(blockNumber) return blocks, hqBlocks, gagshopBlocks, petshopBlocks, kartshopBlocks, animBldgBlocks - + def findAllLandmarkBuildings(self): assert(self.debugPrint("findAllLandmarkBuildings()")) # Load the saved buildings: @@ -194,27 +190,20 @@ def findAllLandmarkBuildings(self): for block in blocks: # Used saved data, if appropriate: self.newBuilding(block, buildings.get(block, None)) - for block in animBldgBlocks: - # Used saved data, if appropriate: - self.newAnimBuilding(block, buildings.get(block, None)) for block in hqBlocks: self.newHQBuilding(block) for block in gagshopBlocks: self.newGagshopBuilding(block) - + if simbase.wantPets: for block in petshopBlocks: self.newPetshopBuilding(block) - if( simbase.wantKarts ): - for block in kartshopBlocks: - self.newKartShopBuilding( block ) - def newBuilding(self, blockNumber, blockData=None): """Create a new building and keep track of it.""" assert(self.debugPrint("newBuilding(blockNumber="+str(blockNumber) +", blockData="+str(blockData)+")")) - assert(not self.__buildings.has_key(blockNumber)) + assert(blockNumber not in self.__buildings) building=DistributedBuildingAI.DistributedBuildingAI( self.air, blockNumber, self.branchID, self.trophyMgr) @@ -224,7 +213,7 @@ def newBuilding(self, blockNumber, blockData=None): building.difficulty = int(blockData.get("difficulty", 1)) building.numFloors = int(blockData.get("numFloors", 1)) building.numFloors = max(1, min(5, building.numFloors)) - if not ZoneUtil.isWelcomeValley(building.zoneId): + if not ZoneUtil.isWelcomeValley(building.zoneId): building.updateSavedBy(blockData.get("savedBy")) else: self.notify.warning('we had a cog building in welcome valley %d' % building.zoneId) @@ -249,7 +238,7 @@ def newAnimBuilding(self, blockNumber, blockData=None): """Create a new building and keep track of it.""" assert(self.debugPrint("newBuilding(blockNumber="+str(blockNumber) +", blockData="+str(blockData)+")")) - assert(not self.__buildings.has_key(blockNumber)) + assert(blockNumber not in self.__buildings) building=DistributedAnimBuildingAI.DistributedAnimBuildingAI( self.air, blockNumber, self.branchID, self.trophyMgr) @@ -258,7 +247,7 @@ def newAnimBuilding(self, blockNumber, blockData=None): building.track = blockData.get("track", "c") building.difficulty = int(blockData.get("difficulty", 1)) building.numFloors = int(blockData.get("numFloors", 1)) - if not ZoneUtil.isWelcomeValley(building.zoneId): + if not ZoneUtil.isWelcomeValley(building.zoneId): building.updateSavedBy(blockData.get("savedBy")) else: self.notify.warning('we had a cog building in welcome valley %d' % building.zoneId) @@ -274,11 +263,11 @@ def newAnimBuilding(self, blockNumber, blockData=None): else: building.setState("toon") self.__buildings[blockNumber] = building - return building + return building def newHQBuilding(self, blockNumber): """Create a new HQ building and keep track of it.""" - assert(not self.__buildings.has_key(blockNumber)) + assert(blockNumber not in self.__buildings) dnaStore = self.air.dnaStoreMap[self.canonicalBranchID] exteriorZoneId = dnaStore.getZoneFromBlockNumber(blockNumber) exteriorZoneId = ZoneUtil.getTrueZoneId(exteriorZoneId, self.branchID) @@ -292,7 +281,7 @@ def newHQBuilding(self, blockNumber): def newGagshopBuilding(self, blockNumber): """Create a new Gagshop building and keep track of it.""" assert(self.debugPrint("newGagshopBuilding(blockNumber="+str(blockNumber)+")")) - assert(not self.__buildings.has_key(blockNumber)) + assert(blockNumber not in self.__buildings) dnaStore = self.air.dnaStoreMap[self.canonicalBranchID] exteriorZoneId = dnaStore.getZoneFromBlockNumber(blockNumber) exteriorZoneId = ZoneUtil.getTrueZoneId(exteriorZoneId, self.branchID) @@ -300,11 +289,11 @@ def newGagshopBuilding(self, blockNumber): building=GagshopBuildingAI.GagshopBuildingAI(self.air, exteriorZoneId, interiorZoneId, blockNumber) self.__buildings[blockNumber] = building return building - + def newPetshopBuilding(self, blockNumber): """Create a new Petshop building and keep track of it.""" assert(self.debugPrint("newPetshopBuilding(blockNumber="+str(blockNumber)+")")) - assert(not self.__buildings.has_key(blockNumber)) + assert(blockNumber not in self.__buildings) dnaStore = self.air.dnaStoreMap[self.canonicalBranchID] exteriorZoneId = dnaStore.getZoneFromBlockNumber(blockNumber) exteriorZoneId = ZoneUtil.getTrueZoneId(exteriorZoneId, self.branchID) @@ -322,7 +311,7 @@ def newKartShopBuilding( self, blockNumber ): Return: None """ assert( self.debugPrint( "newKartShopBuilding(blockNumber=" + str( blockNumber ) + ")" ) ) - assert( not self.__buildings.has_key( blockNumber ) ) + assert( blockNumber not in self.__buildings ) dnaStore = self.air.dnaStoreMap[ self.canonicalBranchID ] @@ -335,29 +324,29 @@ def newKartShopBuilding( self, blockNumber ): self.__buildings[ blockNumber ] = building return building - + def getFileName(self): """Figure out the path to the saved state""" f = "%s%s_%d.buildings" % (self.serverDatafolder, self.shard, self.branchID) assert(self.debugPrint("getFileName() returning \""+str(f)+"\"")) return f - + def saveTo(self, file, block=None): """Save data to specified file""" assert(self.debugPrint("saveTo(file="+str(file)+", block="+str(block)+")")) if block: # Save just this one block to the file: pickleData=block.getPickleData() - cPickle.dump(pickleData, file) + pickle.dump(pickleData, file) else: # Save them all: - for i in self.__buildings.values(): + for i in list(self.__buildings.values()): # HQs do not need to be saved if isinstance(i, HQBuildingAI.HQBuildingAI): continue pickleData=i.getPickleData() - cPickle.dump(pickleData, file) - + pickle.dump(pickleData, file) + def fastSave(self, block): """Save data to default location""" return @@ -372,7 +361,7 @@ def fastSave(self, block): if os.path.exists(working): os.remove(working) os.rename(fileName, working) - file=open(working, 'w') + file=open(working, 'wb') file.seek(0, 2) self.saveTo(file, block) file.close() @@ -380,9 +369,9 @@ def fastSave(self, block): os.rename(working, fileName) except IOError: self.notify.error(str(sys.exc_info()[1])) - # Even if it's just the rename that failed, we don't want to + # Even if it's just the rename that failed, we don't want to # clobber the prior file. - + def save(self): """Save data to default location""" assert(self.debugPrint("save()")) @@ -392,7 +381,7 @@ def save(self): # Move current file as the backup file: if os.path.exists(fileName): os.rename(fileName, backup) - file=open(fileName, 'w') + file=open(fileName, 'wb') file.seek(0) self.saveTo(file) file.close() @@ -400,28 +389,28 @@ def save(self): os.remove(backup) except EnvironmentError: self.notify.warning(str(sys.exc_info()[1])) - # Even if it's just the rename that failed, we don't want to + # Even if it's just the rename that failed, we don't want to # clobber the prior file. - + def loadFrom(self, file): """Load data from specified file""" assert(self.debugPrint("loadFrom(file="+str(file)+")")) blocks={} try: while 1: - pickleData=cPickle.load(file) + pickleData=pickle.load(file) blocks[int(pickleData['block'])]=pickleData except EOFError: pass return blocks - + def load(self): """Load data from default location""" assert(self.debugPrint("load()")) fileName=self.getFileName() try: # Try to open the backup file: - file=open(fileName+self.backupExtension, 'r') + file=open(fileName+self.backupExtension, 'rb') # Remove the (assumed) broken file: if os.path.exists(fileName): os.remove(fileName) @@ -429,7 +418,7 @@ def load(self): # OK, there's no backup file, good. try: # Open the real file: - file=open(fileName, 'r') + file=open(fileName, 'rb') except IOError: # OK, there's no file. Start new list: return {} @@ -437,7 +426,7 @@ def load(self): blocks=self.loadFrom(file) file.close() return blocks - + if __debug__: def debugPrint(self, message): """for debugging""" diff --git a/toontown/src/building/DistributedCFOElevator.py b/toontown/src/building/DistributedCFOElevator.py index 5f11fa42..963ba7e0 100644 --- a/toontown/src/building/DistributedCFOElevator.py +++ b/toontown/src/building/DistributedCFOElevator.py @@ -1,6 +1,6 @@ -import DistributedElevator -import DistributedBossElevator -from ElevatorConstants import * +from . import DistributedElevator +from . import DistributedBossElevator +from .ElevatorConstants import * from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer diff --git a/toontown/src/building/DistributedCFOElevatorAI.py b/toontown/src/building/DistributedCFOElevatorAI.py index 24e2ebba..1de58141 100644 --- a/toontown/src/building/DistributedCFOElevatorAI.py +++ b/toontown/src/building/DistributedCFOElevatorAI.py @@ -1,5 +1,5 @@ -from ElevatorConstants import * -import DistributedBossElevatorAI +from .ElevatorConstants import * +from . import DistributedBossElevatorAI class DistributedCFOElevatorAI(DistributedBossElevatorAI.DistributedBossElevatorAI): diff --git a/toontown/src/building/DistributedCJElevator.py b/toontown/src/building/DistributedCJElevator.py index 27cd7a5d..7d9f1f15 100644 --- a/toontown/src/building/DistributedCJElevator.py +++ b/toontown/src/building/DistributedCJElevator.py @@ -1,6 +1,6 @@ -import DistributedElevator -import DistributedBossElevator -from ElevatorConstants import * +from . import DistributedElevator +from . import DistributedBossElevator +from .ElevatorConstants import * from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer diff --git a/toontown/src/building/DistributedCJElevatorAI.py b/toontown/src/building/DistributedCJElevatorAI.py index c19c9f8c..ce0658d7 100644 --- a/toontown/src/building/DistributedCJElevatorAI.py +++ b/toontown/src/building/DistributedCJElevatorAI.py @@ -1,5 +1,5 @@ -from ElevatorConstants import * -import DistributedBossElevatorAI +from .ElevatorConstants import * +from . import DistributedBossElevatorAI class DistributedCJElevatorAI(DistributedBossElevatorAI.DistributedBossElevatorAI): diff --git a/toontown/src/building/DistributedClubElevator.py b/toontown/src/building/DistributedClubElevator.py index 9052c15f..58e3b1bd 100644 --- a/toontown/src/building/DistributedClubElevator.py +++ b/toontown/src/building/DistributedClubElevator.py @@ -422,7 +422,7 @@ def kickEveryoneOut(self): #makes the toons leave the elevator bailFlag = 0 #print self.boardedAvIds - for avId, slot in self.boardedAvIds.items(): + for avId, slot in list(self.boardedAvIds.items()): #print("Kicking toon out! avId %s Slot %s" % (avId, slot)) self.emptySlot(slot, avId, bailFlag, globalClockDelta.getRealNetworkTime()) if avId == base.localAvatar.doId: @@ -519,12 +519,12 @@ def fillSlot(self, index, avId): # be taken. pass - elif not self.cr.doId2do.has_key(avId): + elif avId not in self.cr.doId2do: # It's someone who hasn't been generated yet. func = PythonUtil.Functor( self.gotToon, index, avId) - assert not self.toonRequests.has_key(index) + assert index not in self.toonRequests self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects( [avId], allCallback = func) @@ -657,7 +657,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp): self.deferredSlots = newSlots else: - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: # See if we need to reset the clock # (countdown assumes we've created a clockNode already) if (bailFlag == 1 and hasattr(self, 'clockNode')): @@ -777,5 +777,5 @@ def clearToonTracks(self): keyList.append(key) for key in keyList: - if self.__toonTracks.has_key(key): + if key in self.__toonTracks: self.clearToonTrack(key) diff --git a/toontown/src/building/DistributedClubElevatorAI.py b/toontown/src/building/DistributedClubElevatorAI.py index df5001af..fcd80ef1 100644 --- a/toontown/src/building/DistributedClubElevatorAI.py +++ b/toontown/src/building/DistributedClubElevatorAI.py @@ -193,7 +193,7 @@ def enterWaitEmpty(self): #print("WAIT EMPTY FLOOR VATOR") for i in range(len(self.seats)): self.seats[i] = None - print self.seats + print(self.seats) if self.wantState == 'closed': self.demand('Closing') else: diff --git a/toontown/src/building/DistributedDoor.py b/toontown/src/building/DistributedDoor.py index 4d1b6cbb..055e470d 100644 --- a/toontown/src/building/DistributedDoor.py +++ b/toontown/src/building/DistributedDoor.py @@ -13,9 +13,9 @@ from toontown.hood import ZoneUtil from toontown.suit import Suit from toontown.distributed import DelayDelete -import FADoorCodes +from . import FADoorCodes from direct.task.Task import Task -import DoorTypes +from . import DoorTypes from toontown.toontowngui import TTDialog from toontown.toonbase import TTLocalizer from toontown.toontowngui import TeaserPanel @@ -144,7 +144,7 @@ def disable(self): self.ignore("clearOutToonInterior") self.fsm.request("off") self.exitDoorFSM.request("off") - if self.__dict__.has_key('building'): + if 'building' in self.__dict__: del self.building # Clean up a little more gracefully; we might get a disable @@ -205,7 +205,7 @@ def getTriggerName(self): # HQ doors (toon, cog, and kartshop) need to have an index appended, since they are # the only type of door that supports multiple doors on a building. if (self.doorType == DoorTypes.INT_HQ or - self.specialDoorTypes.has_key(self.doorType) ): + self.doorType in self.specialDoorTypes ): return ("door_trigger_" + str(self.block) + "_" + str(self.doorIndex)) else: @@ -228,7 +228,7 @@ def getExitTriggerEvent(self): return "exit" + self.getTriggerName() def hideDoorParts(self): - if (self.specialDoorTypes.has_key(self.doorType)): + if (self.doorType in self.specialDoorTypes): # This work gets done by the DNA in non HQ buildings. self.hideIfHasFlat(self.findDoorNode("rightDoor")) self.hideIfHasFlat(self.findDoorNode("leftDoor")) @@ -246,7 +246,7 @@ def setTriggerName(self): # have the wrong name applied to the trigger poly # (door_trigger_), so we have to find it, and change it # to (door_trigger__). - if (self.specialDoorTypes.has_key(self.doorType)): + if (self.doorType in self.specialDoorTypes): building = self.getBuilding() doorTrigger = building.find("**/door_" + str(self.doorIndex) + "/**/door_trigger*") @@ -335,7 +335,7 @@ def doPostAnnounceGenerate(self): def getBuilding(self): # Once we find it, we store it, so we don't have to find it again. - if (not self.__dict__.has_key('building')): + if ('building' not in self.__dict__): if self.doorType == DoorTypes.INT_STANDARD: #if ZoneUtil.isInterior(self.zoneId): # building interior. @@ -375,13 +375,13 @@ def getBuilding(self): def getBuilding_wip(self): # Once we find it, we store it, so we don't have to find it again. - if (not self.__dict__.has_key('building')): - if self.__dict__.has_key('block'): + if ('building' not in self.__dict__): + if 'block' in self.__dict__: self.building=self.cr.playGame.hood.loader.geom.find( "**/??"+str(self.block)+":*_landmark_*_DNARoot;+s") else: self.building=self.cr.playGame.hood.loader.geom - print "---------------- door is interior -------" + print("---------------- door is interior -------") #if ZoneUtil.isInterior(self.zoneId): # self.building=self.cr.playGame.hood.loader.geom @@ -705,7 +705,7 @@ def getDoorNodePath(self): otherNP.setHpr(posHpr.getHpr()) # Store this for clean up later self.tempDoorNodePath=otherNP - elif (self.specialDoorTypes.has_key(self.doorType)): + elif (self.doorType in self.specialDoorTypes): building = self.getBuilding() otherNP = building.find("**/door_origin_" + str(self.doorIndex)) assert(not otherNP.isEmpty()) diff --git a/toontown/src/building/DistributedDoorAI.py b/toontown/src/building/DistributedDoorAI.py index 2a9b3130..5f9978ab 100644 --- a/toontown/src/building/DistributedDoorAI.py +++ b/toontown/src/building/DistributedDoorAI.py @@ -14,7 +14,7 @@ class DistributedDoorAI(DistributedObjectAI.DistributedObjectAI): """ - The server side representation of a single door. This is the + The server side representation of a single door. This is the object that remembers what the door is doing. The client side version updates the client's display based on the state of the door. """ @@ -121,14 +121,14 @@ def getDoorIndex(self): def setSwing(self, swing): self.swing = swing - + def getSwing(self): assert(self.debugPrint("getSwing()")) return self.swing def getDoorType(self): return self.doorType - + #def openDoor(self): # """if the door is closed, open it""" # assert(self.debugPrint("openDoor()")) @@ -140,45 +140,45 @@ def getDoorType(self): # assert(self.debugPrint("closeDoor()")) # if (self.isOpen()): # self.fsm.request('closing') - + def getZoneIdAndBlock(self): r=[self.zoneId, self.block] assert(self.debugPrint("getZoneIdAndBlock() returning: "+str(r))) return r - + def setOtherDoor(self, door): assert(self.debugPrint("setOtherDoor(door="+str(door)+")")) self.otherDoor=door - + def getZoneId(self): assert(self.debugPrint("getZoneId() returning "+str(self.zoneId))) return self.zoneId - + def getState(self): assert(self.debugPrint("getState()")) return [self.fsm.getCurrentState().getName(), globalClockDelta.getRealNetworkTime()] - + def getExitDoorState(self): assert(self.debugPrint("getExitDoorState()")) - return [self.exitDoorFSM.getCurrentState().getName(), + return [self.exitDoorFSM.getCurrentState().getName(), globalClockDelta.getRealNetworkTime()] - + def isOpen(self): """return true if the door is open or opening""" assert(self.debugPrint("isOpen()")) state=self.fsm.getCurrentState().getName() return state=='open' or state=='opening' - + def isClosed(self): """return true if the door is closed, closing, or off""" assert(self.debugPrint("isClosed()")) return not self.isOpen() - + def setDoorLock(self, locked): """Prevent avatars from entering this door.""" self.lockedDoor=locked - + def isLockedDoor(self): """Find out if the door is locked. 0 means no, positive values mean yes. Classes that inherit may attach special meanings to @@ -192,38 +192,38 @@ def isLockedDoor(self): def sendReject(self, avatarID, lockedVal): # Zero means the door is unlocked. Positive values mean - # the door is locked. + # the door is locked. # Classes that inherit from Distributed Door may # attach special meanings to different positive values. self.sendUpdateToAvatarId(avatarID, "rejectEnter", [lockedVal]) - + def requestEnter(self): assert(self.debugPrint("requestEnter()")) avatarID = self.air.getAvatarIdFromSender() assert(self.notify.debug(" avatarID:%s" % (str(avatarID),))) lockedVal = self.isLockedDoor() - + # Check that player has full access if not ToontownAccessAI.canAccess(avatarID, self.zoneId): lockedVal = True - + if lockedVal: self.sendReject(avatarID, lockedVal) else: self.enqueueAvatarIdEnter(avatarID) - self.sendUpdateToAvatarId(avatarID, "setOtherZoneIdAndDoId", + self.sendUpdateToAvatarId(avatarID, "setOtherZoneIdAndDoId", [self.otherDoor.getZoneId(), self.otherDoor.getDoId()]) - + def enqueueAvatarIdEnter(self, avatarID): assert(self.debugPrint("enqueueAvatarIdEnter(avatarID=%s)"%(avatarID,))) assert(self.debugPrint("enqueueAvatarIdEnter(avatarsWhoAreEntering=%s)"%(self.avatarsWhoAreEntering,))) # By storing the avatarID in the key, we're creating a set of # unique avatarIDs. - if not self.avatarsWhoAreEntering.has_key(avatarID): + if avatarID not in self.avatarsWhoAreEntering: self.avatarsWhoAreEntering[avatarID]=1 self.sendUpdate("avatarEnter", [avatarID]) self.openDoor(self.fsm) - + def openDoor(self, doorFsm): assert(self.debugPrint("openTheDoor(doorFsm=)")) stateName = doorFsm.getCurrentState().getName() @@ -232,7 +232,7 @@ def openDoor(self, doorFsm): doorFsm.request('open') elif stateName != 'opening': doorFsm.request('opening') - + def requestExit(self): assert(self.debugPrint("requestExit()")) avatarID = self.air.getAvatarIdFromSender() @@ -244,19 +244,19 @@ def requestExit(self): self.sendUpdate("avatarExit", [avatarID]) # Ok, now enqueue the avatar (which opens the door) self.enqueueAvatarIdExit(avatarID) - + def enqueueAvatarIdExit(self, avatarID): assert(self.debugPrint("enqueueAvatarIdExit(avatarID=%s)"%(avatarID,))) assert(self.debugPrint("enqueueAvatarIdExit(avatarsWhoAreExiting=%s)"%(self.avatarsWhoAreExiting,))) - if self.avatarsWhoAreEntering.has_key(avatarID): + if avatarID in self.avatarsWhoAreEntering: del self.avatarsWhoAreEntering[avatarID] - elif not self.avatarsWhoAreExiting.has_key(avatarID): + elif avatarID not in self.avatarsWhoAreExiting: self.avatarsWhoAreExiting[avatarID]=1 self.openDoor(self.exitDoorFSM) else: assert(self.notify.debug(str(avatarID) +" requested an exit, and they're already exiting")) - + def requestSuitEnter(self, avatarID): """ unlike requestEnter(), which is for toons, this is not a @@ -265,7 +265,7 @@ def requestSuitEnter(self, avatarID): """ assert(self.debugPrint("requestSuitEnter(avatarID=%s" % (avatarID,))) self.enqueueAvatarIdEnter(avatarID) - + def requestSuitExit(self, avatarID): """ unlike requestExit(), which is for toons, this is not a @@ -277,36 +277,36 @@ def requestSuitExit(self, avatarID): self.sendUpdate("avatarExit", [avatarID]) # Then open the door self.enqueueAvatarIdExit(avatarID) - + def d_setState(self, state): assert(self.debugPrint("d_setState(state="+str(state)+")")) self.sendUpdate('setState', [state, globalClockDelta.getRealNetworkTime()]) - + def d_setExitDoorState(self, state): assert(self.debugPrint("d_setExitDoorState(state="+str(state)+")")) self.sendUpdate('setExitDoorState', [state, globalClockDelta.getRealNetworkTime()]) - + if __debug__: def debugPrint(self, message): """for debugging""" return self.notify.debug( str(self.__dict__.get('block', '?'))+' '+message) - + ##### off state ##### - + def enterOff(self): assert(self.debugPrint("enterOff()")) - + def exitOff(self): assert(self.debugPrint("exitOff()")) - + ##### closing state ##### def openTask(self, task): assert(self.debugPrint("openTask()")) self.fsm.request("closing") return Task.done - + def enterClosing(self): assert(self.debugPrint("enterClosing()")) self.d_setState('closing') @@ -314,29 +314,29 @@ def enterClosing(self): 1, #CLOSING_DOOR_TIME, #TODO: define this elsewhere self.closingTask, self.uniqueName('door_closing-timer')) - + def exitClosing(self): assert(self.debugPrint("exitClosing()")) if self.doLaterTask: taskMgr.remove(self.doLaterTask) self.doLaterTask=None - + ##### closed state ##### def closingTask(self, task): assert(self.debugPrint("closingTask()")) self.fsm.request("closed") return Task.done - + def enterClosed(self): assert(self.debugPrint("enterClosed()")) self.d_setState('closed') - + def exitClosed(self): assert(self.debugPrint("exitClosed()")) - + ##### opening state ##### - + def enterOpening(self): assert(self.debugPrint("enterOpening()")) self.d_setState('opening') @@ -345,20 +345,20 @@ def enterOpening(self): #todo: define OPENING_DOOR_TIME elsewhere self.openingTask, self.uniqueName('door_opening-timer')) - + def exitOpening(self): assert(self.debugPrint("exitOpening()")) if self.doLaterTask: taskMgr.remove(self.doLaterTask) self.doLaterTask=None - + ##### open state ##### def openingTask(self, task): assert(self.debugPrint("openingTask()")) self.fsm.request("open") return Task.done - + def enterOpen(self): assert(self.debugPrint("enterOpen()")) self.d_setState('open') @@ -368,29 +368,29 @@ def enterOpen(self): #todo: define STAY_OPEN_DOOR_TIME elsewhere self.openTask, self.uniqueName('door_open-timer')) - + def exitOpen(self): assert(self.debugPrint("exitOpen()")) if self.doLaterTask: taskMgr.remove(self.doLaterTask) self.doLaterTask=None - + ##### Exit Door off state ##### - + def exitDoorEnterOff(self): assert(self.debugPrint("exitDoorEnterOff()")) - + def exitDoorExitOff(self): assert(self.debugPrint("exitDoorExitOff()")) - + ##### Exit Door closing state ##### def exitDoorOpenTask(self, task): assert(self.debugPrint("exitDoorOpenTask()")) self.exitDoorFSM.request("closing") return Task.done - + def exitDoorEnterClosing(self): assert(self.debugPrint("exitDoorEnterClosing()")) self.d_setExitDoorState('closing') @@ -398,32 +398,32 @@ def exitDoorEnterClosing(self): 1, #CLOSING_DOOR_TIME, #TODO: define this elsewhere self.exitDoorClosingTask, self.uniqueName('exit_door_closing-timer')) - + def exitDoorExitClosing(self): assert(self.debugPrint("exitDoorExitClosing()")) if self.exitDoorDoLaterTask: taskMgr.remove(self.exitDoorDoLaterTask) self.exitDoorDoLaterTask=None - + ##### Exit Door closed state ##### def exitDoorClosingTask(self, task): assert(self.debugPrint("exitDoorClosingTask()")) self.exitDoorFSM.request("closed") return Task.done - + def exitDoorEnterClosed(self): assert(self.debugPrint("exitDoorEnterClosed()")) self.d_setExitDoorState('closed') - + def exitDoorExitClosed(self): assert(self.debugPrint("exitDoorExitClosed()")) if self.exitDoorDoLaterTask: taskMgr.remove(self.exitDoorDoLaterTask) self.exitDoorDoLaterTask=None - + ##### Exit Door opening state ##### - + def exitDoorEnterOpening(self): assert(self.debugPrint("exitDoorEnterOpening()")) self.d_setExitDoorState('opening') @@ -432,20 +432,20 @@ def exitDoorEnterOpening(self): #todo: define OPENING_DOOR_TIME elsewhere self.exitDoorOpeningTask, self.uniqueName('exit_door_opening-timer')) - + def exitDoorExitOpening(self): assert(self.debugPrint("exitDoorExitOpening()")) if self.exitDoorDoLaterTask: taskMgr.remove(self.exitDoorDoLaterTask) self.exitDoorDoLaterTask=None - + ##### Exit Door open state ##### def exitDoorOpeningTask(self, task): assert(self.debugPrint("exitDoorOpeningTask()")) self.exitDoorFSM.request("open") return Task.done - + def exitDoorEnterOpen(self): assert(self.debugPrint("exitDoorEnterOpen()")) # Tell the clients: @@ -457,10 +457,9 @@ def exitDoorEnterOpen(self): #todo: define STAY_OPEN_DOOR_TIME elsewhere self.exitDoorOpenTask, self.uniqueName('exit_door_open-timer')) - + def exitDoorExitOpen(self): assert(self.debugPrint("exitDoorExitOpen()")) if self.exitDoorDoLaterTask: taskMgr.remove(self.exitDoorDoLaterTask) - self.exitDoorDoLaterTask=None - + self.exitDoorDoLaterTask=None \ No newline at end of file diff --git a/toontown/src/building/DistributedElevator.py b/toontown/src/building/DistributedElevator.py index b9ed3984..e54c5d49 100644 --- a/toontown/src/building/DistributedElevator.py +++ b/toontown/src/building/DistributedElevator.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * +from .ElevatorConstants import * +from .ElevatorUtils import * from direct.showbase import PythonUtil from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State @@ -157,7 +157,7 @@ def disable(self): if self.bldgRequest: self.cr.relatedObjectMgr.abortRequest(self.bldgRequest) self.bldgRequest = None - for request in self.toonRequests.values(): + for request in list(self.toonRequests.values()): self.cr.relatedObjectMgr.abortRequest(request) self.toonRequests = {} @@ -267,12 +267,12 @@ def fillSlot(self, index, avId, wantBoardingShow = 0): # be taken. pass - elif not self.cr.doId2do.has_key(avId): + elif avId not in self.cr.doId2do: # It's someone who hasn't been generated yet. func = PythonUtil.Functor( self.gotToon, index, avId) - assert not self.toonRequests.has_key(index) + assert index not in self.toonRequests self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects( [avId], allCallback = func) @@ -330,7 +330,7 @@ def fillSlot(self, index, avId, wantBoardingShow = 0): else: animInFunc = Sequence(Func(toon.setAnimState, "run", 1.0)) animFunc = Func(toon.setAnimState, "neutral", 1.0) - toon.headsUp(self.getElevatorModel(), apply(Point3, self.elevatorPoints[index])) + toon.headsUp(self.getElevatorModel(), Point3(*self.elevatorPoints[index])) track = Sequence( # Pos 1: -1.5, 5, 0 @@ -339,7 +339,7 @@ def fillSlot(self, index, avId, wantBoardingShow = 0): # Pos 4: 2.5, 3, 0 animInFunc, LerpPosInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.75, - apply(Point3, self.elevatorPoints[index]), + Point3(*self.elevatorPoints[index]), other=self.getElevatorModel()), LerpHprInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.25, Point3(180, 0, 0), @@ -443,7 +443,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp, timeSent = 0): timeToSet = self.countdownTime if timeSent > 0: timeToSet = timeSent - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: # See if we need to reset the clock # (countdown assumes we've created a clockNode already) if (bailFlag == 1 and hasattr(self, 'clockNode')): @@ -555,7 +555,7 @@ def rejectBoard(self, avId, reason = 0): # This should only be sent to us if our localToon requested # permission to board the elevator. # reason 0: unknown, 1: shuffle, 2: too low laff, 3: no seat, 4: need promotion - print("rejectBoard %s" % (reason)) + print(("rejectBoard %s" % (reason))) if hasattr(base.localAvatar, "elevatorNotifier"): if reason == REJECT_SHUFFLE: base.localAvatar.elevatorNotifier.showMe(TTLocalizer.ElevatorHoppedOff) @@ -633,7 +633,7 @@ def onDoorCloseFinish(self): """ # for any avatars that are still parented to us, remove them from the scene graph # so that they're not there when the doors open again - for avId in self.boardedAvIds.keys(): + for avId in list(self.boardedAvIds.keys()): av = self.cr.doId2do.get(avId) if av is not None: if av.getParent().compareTo(self.getElevatorModel()) == 0: @@ -766,7 +766,7 @@ def clearToonTracks(self): keyList.append(key) for key in keyList: - if self.__toonTracks.has_key(key): + if key in self.__toonTracks: self.clearToonTrack(key) def getDestName(self): @@ -786,7 +786,7 @@ def getOffsetPosWrtToonParent(self, toon, seatIndex = 0): teleport to or run to. Note: This is the pos reletive to the toon parent. """ - self.offsetNP.setPos(apply(Point3, self.getOffsetPos(seatIndex))) + self.offsetNP.setPos(Point3(*self.getOffsetPos(seatIndex))) return self.offsetNP.getPos(toon.getParent()) def getOffsetPosWrtRender(self, seatIndex = 0): @@ -795,7 +795,7 @@ def getOffsetPosWrtRender(self, seatIndex = 0): teleport to or run to. Note: This is the pos reletive to the render. """ - self.offsetNP.setPos(apply(Point3, self.getOffsetPos(seatIndex))) + self.offsetNP.setPos(Point3(*self.getOffsetPos(seatIndex))) return self.offsetNP.getPos(render) def canHideBoardingQuitBtn(self, avId): diff --git a/toontown/src/building/DistributedElevatorAI.py b/toontown/src/building/DistributedElevatorAI.py index 5fff67b0..7915e2df 100644 --- a/toontown/src/building/DistributedElevatorAI.py +++ b/toontown/src/building/DistributedElevatorAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * from direct.distributed import DistributedObjectAI from direct.fsm import ClassicFSM, State @@ -30,7 +30,7 @@ def __init__(self, air, bldg, numSeats = 4, antiShuffle = 0, minLaff = 0): simbase.air.elevatorTripId += 1 else: self.elevatorTripId = 0 - + for seat in range(numSeats): self.seats.append(None) #self.seats = [None, None, None, None] @@ -82,14 +82,14 @@ def delete(self): del self.bldg self.ignoreAll() DistributedObjectAI.DistributedObjectAI.delete(self) - + def setBoardingParty(self, party): self.boardingParty = party def generate(self): self.start() DistributedObjectAI.DistributedObjectAI.generate(self) - + def getBldgDoId(self): return self.bldgDoId @@ -98,7 +98,7 @@ def findAvailableSeat(self): if self.seats[i] == None: return i return None - + def findAvatar(self, avId): for i in range(len(self.seats)): @@ -112,7 +112,7 @@ def countFullSeats(self): if i: avCounter += 1 return avCounter - + def countOpenSeats(self): openSeats = 0 for i in range(len(self.seats)): @@ -120,22 +120,22 @@ def countOpenSeats(self): openSeats += 1 return openSeats - def rejectingBoardersHandler(self, avId, reason = 0, wantBoardingShow = 0): - self.rejectBoarder(avId, reason) + def rejectingBoardersHandler(self, avId, x, y, z, h, p, r, reason = 0, wantBoardingShow = 0): + self.rejectBoarder(avId) - def rejectBoarder(self, avId, reason = 0): - self.sendUpdateToAvatarId(avId, "rejectBoard", [avId, reason]) + def rejectBoarder(self, avId): + self.sendUpdateToAvatarId(avId, "rejectBoard", [avId]) - def acceptingBoardersHandler(self, avId, reason = 0, wantBoardingShow = 0): + def acceptingBoardersHandler(self, avId, x, y, z, h, p, r, reason = 0, wantBoardingShow = 0): self.notify.debug("acceptingBoardersHandler") seatIndex = self.findAvailableSeat() if seatIndex == None: self.rejectBoarder(avId, REJECT_NOSEAT) else: - self.acceptBoarder(avId, seatIndex, wantBoardingShow) + self.acceptBoarder(avId, x, y, z, h, p, r, seatIndex, wantBoardingShow) return None - def acceptBoarder(self, avId, seatIndex, wantBoardingShow = 0): + def acceptBoarder(self, avId, x, y, z, h, p, r, seatIndex, wantBoardingShow = 0): self.notify.debug("acceptBoarder") # Make sure we have a valid seat number #assert((seatIndex >= 0) and (seatIndex <=3)) @@ -144,17 +144,17 @@ def acceptBoarder(self, avId, seatIndex, wantBoardingShow = 0): assert(self.seats[seatIndex] == None) # Make sure this avatar isn't already seated if (self.findAvatar(avId) != None): - return + return # Put the avatar in that seat self.seats[seatIndex] = avId # Record the time of boarding self.timeOfBoarding = globalClock.getRealTime() - + if wantBoardingShow: self.timeOfGroupBoarding = globalClock.getRealTime() - + # Tell the clients to put the avatar in that seat - self.sendUpdate("fillSlot" + str(seatIndex), [avId, wantBoardingShow]) + self.sendUpdate("fillSlot" + str(seatIndex), [avId, x, y, z, h, p, r, self.timeOfBoarding]) def rejectingExitersHandler(self, avId): self.rejectExiter(avId) @@ -169,7 +169,7 @@ def acceptingExitersHandler(self, avId): def clearEmptyNow(self, seatIndex): self.sendUpdate("emptySlot" + str(seatIndex), - [0, 0, globalClockDelta.getRealNetworkTime(), 0]) + [0, 0, globalClockDelta.getRealNetworkTime()]) def clearFullNow(self, seatIndex): # Get the avatar id @@ -182,7 +182,7 @@ def clearFullNow(self, seatIndex): # Empty that seat self.seats[seatIndex] = None # Tell the clients that the avatar is no longer in that seat - self.sendUpdate("fillSlot" + str(seatIndex), [0, 0]) + self.sendUpdate("fillSlot" + str(seatIndex), [0, 0, 0, 0, 0, 0, 0, 0]) # If the avatar isn't in a seat, we don't care anymore, so # remove the hook to handle unexpected exits. self.ignore(self.air.getAvatarExitEvent(avId)) @@ -195,7 +195,7 @@ def getState(self): def avIsOKToBoard(self, av): return (av.hp > self.minLaff) and self.accepting - + def checkBoard(self, av): if (av.hp < self.minLaff): return REJECT_MINLAFF @@ -206,20 +206,20 @@ def requestBoard(self, *args): avId = self.air.getAvatarIdFromSender() if (self.findAvatar(avId) != None): self.notify.warning("Ignoring multiple requests from %s to board." % (avId)) - return + return av = self.air.doId2do.get(avId) if av: # Only toons with hp greater than the minLaff may board the elevator. boardResponse = self.checkBoard(av) newArgs = (avId,) + args + (boardResponse,) - + # Check that player has full access if not ToontownAccessAI.canAccess(avId, self.zoneId): self.notify.warning("Toon %s does not have access to theeleavtor. " % (avId)) self.rejectingBoardersHandler(*newArgs) return - + # Toons who have an active Boarding Group and # are not the leader will be rejected if they try to board the elevator. if self.boardingParty and self.boardingParty.hasActiveGroup(avId) and \ @@ -227,7 +227,7 @@ def requestBoard(self, *args): self.notify.warning('Rejecting %s from boarding the elevator because he is already part of a Boarding Group.' %avId) self.rejectingBoardersHandler(*newArgs) return - + if boardResponse == 0: self.acceptingBoardersHandler(*newArgs) else: @@ -238,16 +238,16 @@ def requestBoard(self, *args): % avId ) return - + def partyAvatarBoard(self, avatar, wantBoardingShow = 0): av = avatar avId = avatar.doId - + if (self.findAvatar(avId) != None): self.notify.warning("Ignoring multiple requests from %s to board." % (avId)) return - - if av: + + if av: # Only toons with hp greater than the minLaff may board the elevator. boardResponse = self.checkBoard(av) newArgs = (avId,) + (boardResponse,) + (wantBoardingShow,) @@ -356,34 +356,32 @@ def exitClosed(self): def enterWaitEmpty(self): self.d_setState('waitEmpty') self.accepting = 1 - + def exitWaitEmpty(self): self.accepting = 0 - + def setElevatorTripId(self, id): self.elevatorTripId = id - + def getElevatorTripId(self): return self.elevatorTripId - - + def newTrip(self): if self.antiShuffle: self.elevatorTripId = simbase.air.elevatorTripId if simbase.air.elevatorTripId > 2100000000: - simbase.air.elevatorTripId = 1 + simbase.air.elevatorTripId = 1 simbase.air.elevatorTripId += 1 - self.sendUpdate("setElevatorTripId", [self.elevatorTripId]) def setAntiShuffle(self, antiShuffle): self.antiShuffle = antiShuffle - + def getAntiShuffle(self): return self.antiShuffle - + def setMinLaff(self, minLaff): self.minLaff = minLaff - + def getMinLaff(self): return self.minLaff diff --git a/toontown/src/building/DistributedElevatorExt.py b/toontown/src/building/DistributedElevatorExt.py index 3d715058..b618a95f 100644 --- a/toontown/src/building/DistributedElevatorExt.py +++ b/toontown/src/building/DistributedElevatorExt.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * -import DistributedElevator +from .ElevatorConstants import * +from .ElevatorUtils import * +from . import DistributedElevator from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM diff --git a/toontown/src/building/DistributedElevatorExtAI.py b/toontown/src/building/DistributedElevatorExtAI.py index 50a905d4..ed9e36fc 100644 --- a/toontown/src/building/DistributedElevatorExtAI.py +++ b/toontown/src/building/DistributedElevatorExtAI.py @@ -1,25 +1,25 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * -import DistributedElevatorAI +from . import DistributedElevatorAI from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task from direct.directnotify import DirectNotifyGlobal class DistributedElevatorExtAI(DistributedElevatorAI.DistributedElevatorAI): - + notify = DirectNotifyGlobal.directNotify.newCategory("DistributedElevatorExtAI") - + def __init__(self, air, bldg, numSeats = 4, antiShuffle = 0, minLaff = 0): #antiShufflePOI DistributedElevatorAI.DistributedElevatorAI.__init__( self, air, bldg, numSeats, antiShuffle = antiShuffle, minLaff = minLaff) # Do we need this? # self.zoneId, dummy = bldg.getExteriorAndInteriorZoneId() # Flag that tells if any Toon has jumped out of the elevator yet - # (this is used to prevent the griefers who jump off at the last + # (this is used to prevent the griefers who jump off at the last # second) self.anyToonsBailed = 0 self.boardingParty = None @@ -33,14 +33,12 @@ def delete(self): self.clearFullNow(seatIndex) self.clearEmptyNow(seatIndex) DistributedElevatorAI.DistributedElevatorAI.delete(self) - - def d_setFloor(self, floorNumber): self.sendUpdate('setFloor', [floorNumber]) - def acceptBoarder(self, avId, seatIndex, wantBoardingShow = 0): - DistributedElevatorAI.DistributedElevatorAI.acceptBoarder(self, avId, seatIndex, wantBoardingShow) + def acceptBoarder(self, avId, x, y, z, h, p, r, seatIndex, wantBoardingShow = 0): + DistributedElevatorAI.DistributedElevatorAI.acceptBoarder(self, avId, x, y, z, h, p, r, seatIndex, wantBoardingShow) # Add a hook that handles the case where the avatar exits # the district unexpectedly self.acceptOnce(self.air.getAvatarExitEvent(avId), @@ -79,7 +77,7 @@ def acceptExiter(self, avId): # Empty that seat self.clearFullNow(seatIndex) # Make sure there's no griefing by jumping off the elevator - # at the last second + # at the last second bailFlag = 0 timeToSend = self.countdownTime if self.antiShuffle: @@ -88,7 +86,7 @@ def acceptExiter(self, avId): #print myTask.runningTotal #print myTask.dt #print myTask.time - #print myTask.wakeTime - globalClock.getFrameTime() + #print myTask.wakeTime - globalClock.getFrameTime() #self.uniqueName('countdown-timer') timeLeft = myTask.wakeTime - globalClock.getFrameTime() # This fixes an AI crash with a huge negative timeLeft. AI crash on 04/20/10. timeLeft = -44002.155374000002. @@ -99,18 +97,18 @@ def acceptExiter(self, avId): self.setCountdown(timeToSet) timeToSend = timeToSet self.sendUpdate("emptySlot" + str(seatIndex), - [avId, 1, globalClockDelta.getRealNetworkTime(), timeToSend]) + [avId, 1, globalClockDelta.getRealNetworkTime()]) elif (self.anyToonsBailed == 0): bailFlag = 1 # Reset the clock self.resetCountdown() self.anyToonsBailed = 1 self.sendUpdate("emptySlot" + str(seatIndex), - [avId, bailFlag, globalClockDelta.getRealNetworkTime(), timeToSend]) + [avId, bailFlag, globalClockDelta.getRealNetworkTime()]) else: self.sendUpdate("emptySlot" + str(seatIndex), - [avId, bailFlag, globalClockDelta.getRealNetworkTime(), timeToSend]) - + [avId, bailFlag, globalClockDelta.getRealNetworkTime()]) + # Tell the clients that the avatar is leaving that seat # If all the seats are empty, go back into waitEmpty state @@ -156,18 +154,18 @@ def timeToGoTask(self, task): else: self.fsm.request('waitEmpty') return Task.done - + def resetCountdown(self): taskMgr.remove(self.uniqueName('countdown-timer')) taskMgr.doMethodLater(self.countdownTime, self.timeToGoTask, self.uniqueName('countdown-timer')) - + def setCountdown(self, timeToSet): - + taskMgr.remove(self.uniqueName('countdown-timer')) taskMgr.doMethodLater(timeToSet, self.timeToGoTask, self.uniqueName('countdown-timer')) - + def enterAllAboard(self): DistributedElevatorAI.DistributedElevatorAI.enterAllAboard(self) currentTime = globalClock.getRealTime() @@ -185,17 +183,17 @@ def getBoardingShowTimeLeft(self): # If we get a number that is not between 0 and GROUP_BOARDING_TIME return 0. currentTime = globalClock.getRealTime() timeLeft = 0.0 - + if hasattr(self, 'timeOfGroupBoarding') and self.timeOfGroupBoarding: elapsedTime = currentTime - self.timeOfGroupBoarding timeLeft = max(MAX_GROUP_BOARDING_TIME - elapsedTime, 0) # In case the timeLeft is more than the theoretical maximum if (timeLeft > MAX_GROUP_BOARDING_TIME): timeLeft = 0.0 - + return timeLeft - - ##### Closing state ##### + + ##### Closing state ##### def closeTask(self, task): # It is possible that the players exited the district if self.countFullSeats() > 0: @@ -239,8 +237,7 @@ def elevatorClosed(self): # Switch back into opening mode. self.fsm.request("closed") - - + def requestExit(self, *args): self.notify.debug("requestExit") avId = self.air.getAvatarIdFromSender() diff --git a/toontown/src/building/DistributedElevatorFSM.py b/toontown/src/building/DistributedElevatorFSM.py index 6570d4e1..36959822 100644 --- a/toontown/src/building/DistributedElevatorFSM.py +++ b/toontown/src/building/DistributedElevatorFSM.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * +from .ElevatorConstants import * +from .ElevatorUtils import * from direct.showbase import PythonUtil from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM @@ -140,7 +140,7 @@ def disable(self): if self.bldgRequest: self.cr.relatedObjectMgr.abortRequest(self.bldgRequest) self.bldgRequest = None - for request in self.toonRequests.values(): + for request in list(self.toonRequests.values()): self.cr.relatedObjectMgr.abortRequest(request) self.toonRequests = {} @@ -249,12 +249,12 @@ def fillSlot(self, index, avId): # be taken. pass - elif not self.cr.doId2do.has_key(avId): + elif avId not in self.cr.doId2do: # It's someone who hasn't been generated yet. func = PythonUtil.Functor( self.gotToon, index, avId) - assert not self.toonRequests.has_key(index) + assert index not in self.toonRequests self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects( [avId], allCallback = func) @@ -284,7 +284,7 @@ def fillSlot(self, index, avId): else: toon.setAnimState("run", 1.0) animFunc = Func(toon.setAnimState, "neutral", 1.0) - toon.headsUp(self.getElevatorModel(), apply(Point3, self.getScaledPoint(index))) + toon.headsUp(self.getElevatorModel(), Point3(*self.getScaledPoint(index))) track = Sequence( # Pos 1: -1.5, 5, 0 @@ -292,7 +292,7 @@ def fillSlot(self, index, avId): # Pos 3: -2.5, 3, 0 # Pos 4: 2.5, 3, 0 LerpPosInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.75, - apply(Point3, self.getScaledPoint(index)), + Point3(*self.getScaledPoint(index)), other=self.getElevatorModel()), LerpHprInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.25, Point3(180, 0, 0), @@ -350,7 +350,7 @@ def notifyToonOffElevator(self, toon): pass def emptySlot(self, index, avId, bailFlag, timestamp): - print "Emptying slot: %d for %d" % (index, avId) + print("Emptying slot: %d for %d" % (index, avId)) # If localToon is exiting, he needs to change state if avId == 0: # This means that no one is currently exiting, and no action @@ -368,7 +368,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp): self.deferredSlots = newSlots else: - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: # See if we need to reset the clock # (countdown assumes we've created a clockNode already) if (bailFlag == 1 and hasattr(self, 'clockNode')): @@ -407,7 +407,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp): LerpPosInterval(toon, TOON_EXIT_ELEVATOR_TIME, Point3(0,-ElevatorData[self.type]['collRadius'],0), - startPos = apply(Point3, self.getScaledPoint(index)), + startPos = Point3(*self.getScaledPoint(index)), other=self.getElevatorModel() ), animFunc, @@ -439,7 +439,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp): def handleEnterSphere(self, collEntry): self.notify.debug("Entering Elevator Sphere....") - print("FSMhandleEnterSphere elevator%s avatar%s" % (self.elevatorTripId, localAvatar.lastElevatorLeft)) + print(("FSMhandleEnterSphere elevator%s avatar%s" % (self.elevatorTripId, localAvatar.lastElevatorLeft))) if self.elevatorTripId and (localAvatar.lastElevatorLeft == self.elevatorTripId): #print("NO BACKCIES!") self.rejectBoard(base.localAvatar.doId, REJECT_SHUFFLE) @@ -455,7 +455,7 @@ def rejectBoard(self, avId, reason = 0): # reason 0: unknown, 1: shuffle, 2: too low laff, 3: no seat, 4: need promotion # This should only be sent to us if our localToon requested # permission to board the elevator. - print("rejectBoard %s" % (reason)) + print(("rejectBoard %s" % (reason))) if hasattr(base.localAvatar, "elevatorNotifier"): if reason == REJECT_SHUFFLE: base.localAvatar.elevatorNotifier.showMe(TTLocalizer.ElevatorHoppedOff) @@ -546,7 +546,7 @@ def onDoorCloseFinish(self): #import pdb; pdb.set_trace() # for any avatars that are still parented to us, remove them from the scene graph # so that they're not there when the doors open again - for avId in self.boardedAvIds.keys(): + for avId in list(self.boardedAvIds.keys()): av = self.cr.doId2do.get(avId) if av is not None: if av.getParent().compareTo(self.getElevatorModel()) == 0: diff --git a/toontown/src/building/DistributedElevatorFSMAI.py b/toontown/src/building/DistributedElevatorFSMAI.py index f2d32a51..55d24bde 100644 --- a/toontown/src/building/DistributedElevatorFSMAI.py +++ b/toontown/src/building/DistributedElevatorFSMAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * from direct.distributed import DistributedObjectAI #from direct.fsm import ClassicFSM @@ -302,7 +302,7 @@ def exitClosing(self): def enterClosed(self): #print("DistributedElevatorAI.enterClosed") if hasattr(self, "doId"): - print self.doId + print(self.doId) self.d_setState('Closed') def exitClosed(self): @@ -316,7 +316,7 @@ def enterWaitEmpty(self): #print("WAIT EMPTY") for i in range(len(self.seats)): self.seats[i] = None - print self.seats + print(self.seats) self.d_setState('WaitEmpty') self.accepting = 1 diff --git a/toontown/src/building/DistributedElevatorFloor.py b/toontown/src/building/DistributedElevatorFloor.py index 448c9104..8dd55bd8 100644 --- a/toontown/src/building/DistributedElevatorFloor.py +++ b/toontown/src/building/DistributedElevatorFloor.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * -import DistributedElevatorFSM +from .ElevatorConstants import * +from .ElevatorUtils import * +from . import DistributedElevatorFSM from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM @@ -351,7 +351,7 @@ def kickEveryoneOut(self): #makes the toons leave the elevator bailFlag = 0 #print self.boardedAvIds - for avId, slot in self.boardedAvIds.items(): + for avId, slot in list(self.boardedAvIds.items()): #print("Kicking toon out! avId %s Slot %s" % (avId, slot)) self.emptySlot(slot, avId, bailFlag, globalClockDelta.getRealNetworkTime()) if avId == base.localAvatar.doId: diff --git a/toontown/src/building/DistributedElevatorFloorAI.py b/toontown/src/building/DistributedElevatorFloorAI.py index a50d6d93..2570aebe 100644 --- a/toontown/src/building/DistributedElevatorFloorAI.py +++ b/toontown/src/building/DistributedElevatorFloorAI.py @@ -1,9 +1,9 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * -import DistributedElevatorFSMAI +from . import DistributedElevatorFSMAI #from direct.fsm import ClassicFSM #from direct.fsm import State from direct.task import Task @@ -193,7 +193,7 @@ def enterWaitEmpty(self): #print("WAIT EMPTY FLOOR VATOR") for i in range(len(self.seats)): self.seats[i] = None - print self.seats + print(self.seats) if self.wantState == 'closed': self.demand('Closing') else: diff --git a/toontown/src/building/DistributedElevatorInt.py b/toontown/src/building/DistributedElevatorInt.py index 2fc7de3a..85a343d8 100644 --- a/toontown/src/building/DistributedElevatorInt.py +++ b/toontown/src/building/DistributedElevatorInt.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * -from ElevatorUtils import * -import DistributedElevator +from .ElevatorConstants import * +from .ElevatorUtils import * +from . import DistributedElevator from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM diff --git a/toontown/src/building/DistributedElevatorIntAI.py b/toontown/src/building/DistributedElevatorIntAI.py index 7a945a3c..d40a2de7 100644 --- a/toontown/src/building/DistributedElevatorIntAI.py +++ b/toontown/src/building/DistributedElevatorIntAI.py @@ -1,10 +1,10 @@ from otp.ai.AIBase import * from toontown.toonbase import ToontownGlobals from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * import copy -import DistributedElevatorAI +from . import DistributedElevatorAI from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task @@ -35,8 +35,8 @@ def checkBoard(self, av): result = DistributedElevatorAI.DistributedElevatorAI.checkBoard(self,av) return result - def acceptBoarder(self, avId, seatIndex, wantBoardingShow = 0): - DistributedElevatorAI.DistributedElevatorAI.acceptBoarder(self, avId, seatIndex, wantBoardingShow) + def acceptBoarder(self, avId, x, y, z, h, p, r, seatIndex, wantBoardingShow = 0): + DistributedElevatorAI.DistributedElevatorAI.acceptBoarder(self, avId, x, y, z, h, p, r, seatIndex, wantBoardingShow) # If all the avatars we are waiting for are now aboard, then # close the doors self.__closeIfNecessary() diff --git a/toontown/src/building/DistributedGagshopInterior.py b/toontown/src/building/DistributedGagshopInterior.py index 7c4c4ee3..9ab23be7 100644 --- a/toontown/src/building/DistributedGagshopInterior.py +++ b/toontown/src/building/DistributedGagshopInterior.py @@ -5,7 +5,7 @@ import random from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal -import ToonInteriorColors +from . import ToonInteriorColors from toontown.hood import ZoneUtil diff --git a/toontown/src/building/DistributedHQInterior.py b/toontown/src/building/DistributedHQInterior.py index 1fa4d3d7..20be16cb 100644 --- a/toontown/src/building/DistributedHQInterior.py +++ b/toontown/src/building/DistributedHQInterior.py @@ -6,8 +6,8 @@ from direct.task.Task import Task from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal -import ToonInteriorColors -import cPickle +from . import ToonInteriorColors +import pickle from toontown.toonbase import TTLocalizer class DistributedHQInterior(DistributedObject.DistributedObject): @@ -158,7 +158,7 @@ def setLeaderBoard(self, leaderData): # This message is sent from the AI when the leaderboard is updated # We assume that because we got this message, something must have changed, # or we are in our generate - avIds, names, scores = cPickle.loads(leaderData) + avIds, names, scores = pickle.loads(leaderData) # Note, these lists are in order, highest score first self.notify.debug("setLeaderBoard: avIds: %s, names: %s, scores: %s" % (avIds, names, scores)) self.leaderAvIds = avIds diff --git a/toontown/src/building/DistributedHQInteriorAI.py b/toontown/src/building/DistributedHQInteriorAI.py index 35db8454..1ad12b40 100644 --- a/toontown/src/building/DistributedHQInteriorAI.py +++ b/toontown/src/building/DistributedHQInteriorAI.py @@ -1,6 +1,6 @@ from direct.distributed import DistributedObjectAI from direct.directnotify import DirectNotifyGlobal -import cPickle +import pickle class DistributedHQInteriorAI(DistributedObjectAI.DistributedObjectAI): if __debug__: @@ -44,12 +44,12 @@ def leaderboardFlush(self): def sendNewLeaderBoard(self): if self.air: self.isDirty = False - self.sendUpdate("setLeaderBoard", [cPickle.dumps(self.air.trophyMgr.getLeaderInfo(), 1)]) + self.sendUpdate("setLeaderBoard", [pickle.dumps(self.air.trophyMgr.getLeaderInfo(), 1)]) def getLeaderBoard(self): # Since this is a required field, we need a getter # This needs to be returned as parallel lists of avIds, name, and scores - return cPickle.dumps(self.air.trophyMgr.getLeaderInfo(), 1) + return pickle.dumps(self.air.trophyMgr.getLeaderInfo(), 1) def getTutorial(self): return self.tutorial diff --git a/toontown/src/building/DistributedKnockKnockDoor.py b/toontown/src/building/DistributedKnockKnockDoor.py index b77a2d51..12648b50 100644 --- a/toontown/src/building/DistributedKnockKnockDoor.py +++ b/toontown/src/building/DistributedKnockKnockDoor.py @@ -7,12 +7,12 @@ from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * -from KnockKnockJokes import * +from .KnockKnockJokes import * from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedAnimatedProp +from . import DistributedAnimatedProp from toontown.distributed import DelayDelete from toontown.toonbase import TTLocalizer from toontown.hood import ZoneUtil @@ -111,13 +111,13 @@ def knockKnockTrack(self, avatar, duration): if self.propId == 44: joke = KnockKnockContestJokes[ToontownGlobals.SillyStreet] elif branch == ToontownGlobals.LoopyLane: - if self.propId in KnockKnockContestJokes[ToontownGlobals.LoopyLane].keys(): + if self.propId in list(KnockKnockContestJokes[ToontownGlobals.LoopyLane].keys()): joke = KnockKnockContestJokes[ToontownGlobals.LoopyLane][self.propId] elif branch == ToontownGlobals.PunchlinePlace: if self.propId == 1: joke = KnockKnockContestJokes[ToontownGlobals.PunchlinePlace] elif branch == ToontownGlobals.PolarPlace: - if self.propId in KnockKnockContestJokes[ToontownGlobals.PolarPlace].keys(): + if self.propId in list(KnockKnockContestJokes[ToontownGlobals.PolarPlace].keys()): joke = KnockKnockContestJokes[ToontownGlobals.PolarPlace][self.propId] self.nametag = None diff --git a/toontown/src/building/DistributedKnockKnockDoorAI.py b/toontown/src/building/DistributedKnockKnockDoorAI.py index 5241c1dc..59f48412 100644 --- a/toontown/src/building/DistributedKnockKnockDoorAI.py +++ b/toontown/src/building/DistributedKnockKnockDoorAI.py @@ -8,7 +8,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedAnimatedPropAI +from . import DistributedAnimatedPropAI from direct.task.Task import Task from direct.fsm import State diff --git a/toontown/src/building/DistributedPetshopInterior.py b/toontown/src/building/DistributedPetshopInterior.py index 65583e05..4362ce02 100644 --- a/toontown/src/building/DistributedPetshopInterior.py +++ b/toontown/src/building/DistributedPetshopInterior.py @@ -6,7 +6,7 @@ from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal from direct.actor import Actor -import ToonInteriorColors +from . import ToonInteriorColors from toontown.hood import ZoneUtil diff --git a/toontown/src/building/DistributedSuitInterior.py b/toontown/src/building/DistributedSuitInterior.py index 86c1b713..194e3a1d 100644 --- a/toontown/src/building/DistributedSuitInterior.py +++ b/toontown/src/building/DistributedSuitInterior.py @@ -2,9 +2,9 @@ from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * -import ElevatorUtils +from . import ElevatorUtils from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals from direct.directnotify import DirectNotifyGlobal @@ -233,7 +233,7 @@ def __removeToon(self, toon, unexpected=0): def __finishInterval(self, name): """ Force the specified interval to jump to the end """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): interval = self.activeIntervals[name] if (interval.isPlaying()): assert(self.notify.debug('finishInterval(): %s' % \ @@ -241,7 +241,7 @@ def __finishInterval(self, name): interval.finish() def __cleanupIntervals(self): - for interval in self.activeIntervals.values(): + for interval in list(self.activeIntervals.values()): interval.finish() self.activeIntervals = {} @@ -279,7 +279,7 @@ def setToons(self, toonIds, hack): self.toons = [] for toonId in toonIds: if (toonId != 0): - if (self.cr.doId2do.has_key(toonId)): + if (toonId in self.cr.doId2do): toon = self.cr.doId2do[toonId] toon.stopSmooth() self.toons.append(toon) @@ -300,7 +300,7 @@ def setSuits(self, suitIds, reserveIds, values): self.suits = [] self.joiningReserves = [] for suitId in suitIds: - if (self.cr.doId2do.has_key(suitId)): + if (suitId in self.cr.doId2do): suit = self.cr.doId2do[suitId] self.suits.append(suit) # Set this on the client @@ -319,7 +319,7 @@ def setSuits(self, suitIds, reserveIds, values): assert(len(reserveIds) == len(values)) for index in range(len(reserveIds)): suitId = reserveIds[index] - if (self.cr.doId2do.has_key(suitId)): + if (suitId in self.cr.doId2do): suit = self.cr.doId2do[suitId] self.reserveSuits.append((suit, values[index])) else: diff --git a/toontown/src/building/DistributedSuitInteriorAI.py b/toontown/src/building/DistributedSuitInteriorAI.py index f1677345..a7c86ecf 100644 --- a/toontown/src/building/DistributedSuitInteriorAI.py +++ b/toontown/src/building/DistributedSuitInteriorAI.py @@ -1,7 +1,7 @@ from toontown.toonbase.ToontownBattleGlobals import * from otp.ai.AIBaseGlobal import * from direct.distributed.ClockDelta import * -from ElevatorConstants import * +from .ElevatorConstants import * from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State @@ -10,7 +10,7 @@ from toontown.battle import DistributedBattleBldgAI from toontown.battle import BattleBase from direct.task import Timer -import DistributedElevatorIntAI +from . import DistributedElevatorIntAI import copy class DistributedSuitInteriorAI(DistributedObjectAI.DistributedObjectAI): @@ -150,7 +150,7 @@ def __handleUnexpectedExit(self, toonId): def __addToon(self, toonId): assert(self.notify.debug('addToon(%d)' % toonId)) - if (not self.air.doId2do.has_key(toonId)): + if (toonId not in self.air.doId2do): self.notify.warning('addToon() - no toon for doId: %d' % toonId) return @@ -160,7 +160,7 @@ def __addToon(self, toonId): self.accept(event, self.__handleUnexpectedExit, extraArgs=[toonId]) self.toons.append(toonId) - assert(not self.responses.has_key(toonId)) + assert(toonId not in self.responses) self.responses[toonId] = 0 def __removeToon(self, toonId): @@ -171,7 +171,7 @@ def __removeToon(self, toonId): if self.toonIds.count(toonId): self.toonIds[self.toonIds.index(toonId)] = None - if self.responses.has_key(toonId): + if toonId in self.responses: del self.responses[toonId] # Ignore future exit events for the toon @@ -188,7 +188,7 @@ def __resetResponses(self): def __allToonsResponded(self): for toon in self.toons: - assert(self.responses.has_key(toon)) + assert(toon in self.responses) if (self.responses[toon] == 0): return 0 self.ignoreResponses = 1 @@ -280,7 +280,7 @@ def setAvatarJoined(self): if avatar != None: self.savedByMap[avId] = (avatar.getName(), avatar.dna.asTuple()) - assert(self.responses.has_key(avId)) + assert(avId in self.responses) self.responses[avId] += 1 assert(self.notify.debug('toon: %d in suit interior' % avId)) if (self.__allToonsResponded()): @@ -306,7 +306,7 @@ def elevatorDone(self): assert(self.notify.debug('toons: %s toonIds: %s' % \ (self.toons, self.toonIds))) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 assert(self.notify.debug('toon: %d done with elevator' % toonId)) if (self.__allToonsResponded() and @@ -333,7 +333,7 @@ def reserveJoinDone(self): assert(self.notify.debug('toons: %s toonIds: %s' % \ (self.toons, self.toonIds))) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 assert(self.notify.debug('toon: %d done with joining reserves' % \ toonId)) diff --git a/toontown/src/building/DistributedToonHallInterior.py b/toontown/src/building/DistributedToonHallInterior.py index c0273320..7db3fd77 100644 --- a/toontown/src/building/DistributedToonHallInterior.py +++ b/toontown/src/building/DistributedToonHallInterior.py @@ -6,8 +6,8 @@ from direct.showbase import Audio3DManager from toontown.toonbase import ToontownGlobals -import cPickle -from DistributedToonInterior import DistributedToonInterior +import pickle +from .DistributedToonInterior import DistributedToonInterior from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.distributed import DistributedObject @@ -15,7 +15,7 @@ from direct.actor import Actor import random import time -import ToonInteriorColors +from . import ToonInteriorColors from toontown.hood import ZoneUtil from toontown.toon import ToonDNA from toontown.toon import ToonHead diff --git a/toontown/src/building/DistributedToonHallInteriorAI.py b/toontown/src/building/DistributedToonHallInteriorAI.py index ac7c6621..0bccb013 100644 --- a/toontown/src/building/DistributedToonHallInteriorAI.py +++ b/toontown/src/building/DistributedToonHallInteriorAI.py @@ -1,4 +1,4 @@ -from DistributedToonInteriorAI import * +from .DistributedToonInteriorAI import * from toontown.toonbase import ToontownGlobals class DistributedToonHallInteriorAI(DistributedToonInteriorAI): diff --git a/toontown/src/building/DistributedToonInterior.py b/toontown/src/building/DistributedToonInterior.py index 5662304a..8134b1cb 100644 --- a/toontown/src/building/DistributedToonInterior.py +++ b/toontown/src/building/DistributedToonInterior.py @@ -6,14 +6,14 @@ from direct.distributed.ClockDelta import * from toontown.toonbase import ToontownGlobals -import cPickle -import ToonInterior +import pickle +from . import ToonInterior from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.distributed import DistributedObject from direct.fsm import State import random -import ToonInteriorColors +from . import ToonInteriorColors from toontown.hood import ZoneUtil from toontown.toon import ToonDNA from toontown.toon import ToonHead @@ -281,7 +281,7 @@ def setZoneIdAndBlock(self, zoneId, block): def setToonData(self, toonData): assert self.notify.debugStateCall(self) - savedBy = cPickle.loads(toonData) + savedBy = pickle.loads(toonData) self.savedBy = savedBy def buildTrophy(self): @@ -305,7 +305,7 @@ def buildFrame(self, name, dnaTuple): frame = loader.loadModel('phase_3.5/models/modules/trophy_frame') dna = ToonDNA.ToonDNA() - apply(dna.newToonFromProperties, dnaTuple) + dna.newToonFromProperties(*dnaTuple) head = ToonHead.ToonHead() head.setupHead(dna) diff --git a/toontown/src/building/DistributedToonInteriorAI.py b/toontown/src/building/DistributedToonInteriorAI.py index 47412af3..7f6caeb8 100644 --- a/toontown/src/building/DistributedToonInteriorAI.py +++ b/toontown/src/building/DistributedToonInteriorAI.py @@ -6,7 +6,7 @@ from otp.ai.AIBaseGlobal import * from direct.distributed.ClockDelta import * -import cPickle +import pickle from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.distributed import DistributedObjectAI @@ -79,7 +79,7 @@ def getZoneIdAndBlock(self): def getToonData(self): assert(self.notify.debug("getToonData()")) - return cPickle.dumps(self.building.savedBy, 1) + return pickle.dumps(self.building.savedBy, 1) def getState(self): r=[self.fsm.getCurrentState().getName(), diff --git a/toontown/src/building/DistributedTrophyMgrAI.py b/toontown/src/building/DistributedTrophyMgrAI.py index 953f0057..fd69e3f5 100644 --- a/toontown/src/building/DistributedTrophyMgrAI.py +++ b/toontown/src/building/DistributedTrophyMgrAI.py @@ -38,13 +38,13 @@ def recomputeLeaders(self, avId, score): Computes a list of score,avId pairs in sorted order, highest first """ # Make a copy so we can manipulate it - i = map(lambda t: list(t), self.trophyDict.items()) + i = [list(t) for t in list(self.trophyDict.items())] # Recompute only if the score is greater than the lowest score # or if there are less than 10 players in the list if ((score > self.__minLeaderScore) or (len(i) < 10)): # Reverse the items so we have score first - map(lambda r: r.reverse(),i) + list(map(lambda r: r.reverse(),i)) # Sort by score i.sort() # Reverse that score so highest are first @@ -55,10 +55,10 @@ def recomputeLeaders(self, avId, score): # Keep some side tracking variables as an optimization so we # do not need to compute them every time. - self.__leaderScores = map(lambda t: t[0], self.__leaders) + self.__leaderScores = [t[0] for t in self.__leaders] self.__minLeaderScore = min(self.__leaderScores) - self.__leaderAvIds = map(lambda t: t[1], self.__leaders) - self.__leaderNames = map(lambda avId: self.nameDict[avId], self.__leaderAvIds) + self.__leaderAvIds = [t[1] for t in self.__leaders] + self.__leaderNames = [self.nameDict[avId] for avId in self.__leaderAvIds] self.notify.debug("recomputed leaders:\n leaderScores: %s\n leaderAvIds: %s\n leaderNames: %s" % (self.__leaderScores, self.__leaderAvIds, self.__leaderNames)) @@ -94,7 +94,7 @@ def addTrophy(self, avId, name, numFloors): 'trophy', avId, "%s|%s" % (score, addedScore)) def removeTrophy(self, avId, numFloors): - if self.trophyDict.has_key(avId): + if avId in self.trophyDict: removedScore = self.getScoreFromNumFloors(numFloors) score = self.getTrophyScore(avId) - removedScore self.trophyDict[avId] = score @@ -124,8 +124,8 @@ def getSortedScores(self): """ Returns a list of score,avId pairs in sorted order, highest first """ - i = map(lambda t: list(t), self.trophyDict.items()) - map(lambda r: r.reverse(),i) + i = [list(t) for t in list(self.trophyDict.items())] + list(map(lambda r: r.reverse(),i)) i.sort() i.reverse() return i diff --git a/toontown/src/building/DistributedTutorialInterior.py b/toontown/src/building/DistributedTutorialInterior.py index 81c32f66..aec68719 100644 --- a/toontown/src/building/DistributedTutorialInterior.py +++ b/toontown/src/building/DistributedTutorialInterior.py @@ -4,11 +4,11 @@ from direct.distributed.ClockDelta import * from toontown.toonbase import ToontownGlobals -import ToonInterior +from . import ToonInterior from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObject import random -import ToonInteriorColors +from . import ToonInteriorColors from toontown.hood import ZoneUtil from toontown.char import Char from toontown.suit import SuitDNA @@ -206,7 +206,7 @@ def setup(self): # of where to stand, but in this case the npc must be created first so the tutorial # can get a handle on him. Instead, I'll let the npc be created first which means # he will not find his origin. We'll just do that work here again. - npcOrigin = self.interior.find("**/npc_origin_" + `self.npc.posIndex`) + npcOrigin = self.interior.find("**/npc_origin_" + repr(self.npc.posIndex)) # Now he's no longer parented to render, but no one minds. if not npcOrigin.isEmpty(): self.npc.reparentTo(npcOrigin) diff --git a/toontown/src/building/ElevatorUtils.py b/toontown/src/building/ElevatorUtils.py index 8aad597f..6b19ea5d 100644 --- a/toontown/src/building/ElevatorUtils.py +++ b/toontown/src/building/ElevatorUtils.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from ElevatorConstants import * +from .ElevatorConstants import * def getLeftClosePoint(type): width = ElevatorData[type]["width"] diff --git a/toontown/src/building/GagshopBuildingAI.py b/toontown/src/building/GagshopBuildingAI.py index 5a8f31b7..e7a26bc9 100644 --- a/toontown/src/building/GagshopBuildingAI.py +++ b/toontown/src/building/GagshopBuildingAI.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import DistributedDoorAI -import DistributedGagshopInteriorAI -import FADoorCodes -import DoorTypes +from . import DistributedDoorAI +from . import DistributedGagshopInteriorAI +from . import FADoorCodes +from . import DoorTypes from toontown.toon import NPCToons from toontown.quest import Quests diff --git a/toontown/src/building/HQBuildingAI.py b/toontown/src/building/HQBuildingAI.py index a9f8245a..98802391 100644 --- a/toontown/src/building/HQBuildingAI.py +++ b/toontown/src/building/HQBuildingAI.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import DistributedDoorAI -import DistributedHQInteriorAI -import FADoorCodes -import DoorTypes +from . import DistributedDoorAI +from . import DistributedHQInteriorAI +from . import FADoorCodes +from . import DoorTypes from toontown.toon import NPCToons from toontown.quest import Quests diff --git a/toontown/src/building/PetshopBuildingAI.py b/toontown/src/building/PetshopBuildingAI.py index a3c092fb..834cac42 100644 --- a/toontown/src/building/PetshopBuildingAI.py +++ b/toontown/src/building/PetshopBuildingAI.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import DistributedDoorAI -import DistributedPetshopInteriorAI -import FADoorCodes -import DoorTypes +from . import DistributedDoorAI +from . import DistributedPetshopInteriorAI +from . import FADoorCodes +from . import DoorTypes from toontown.toon import NPCToons from toontown.toonbase import ToontownGlobals from toontown.quest import Quests diff --git a/toontown/src/building/SuitBuildingGlobals.py b/toontown/src/building/SuitBuildingGlobals.py index d3c399e6..2d36f6e1 100644 --- a/toontown/src/building/SuitBuildingGlobals.py +++ b/toontown/src/building/SuitBuildingGlobals.py @@ -1,4 +1,4 @@ -from ElevatorConstants import * +from .ElevatorConstants import * # floor and suit information for all suit buildings, organized by each # level of suit that originally took over the building (minus 1), used diff --git a/toontown/src/building/SuitInterior.py b/toontown/src/building/SuitInterior.py index e52d93aa..1b0c2df5 100644 --- a/toontown/src/building/SuitInterior.py +++ b/toontown/src/building/SuitInterior.py @@ -9,7 +9,7 @@ from direct.fsm import State from toontown.town import TownBattle from toontown.suit import Suit -import Elevator +from . import Elevator from direct.task.Task import Task from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals diff --git a/toontown/src/building/SuitPlannerInteriorAI.py b/toontown/src/building/SuitPlannerInteriorAI.py index 1a959e4e..f29f8e20 100644 --- a/toontown/src/building/SuitPlannerInteriorAI.py +++ b/toontown/src/building/SuitPlannerInteriorAI.py @@ -9,8 +9,8 @@ class which handles management of all suits within a suit building.""" from toontown.suit import SuitDNA from direct.directnotify import DirectNotifyGlobal from toontown.suit import DistributedSuitAI -import SuitBuildingGlobals -import types +from . import SuitBuildingGlobals +import types, functools class SuitPlannerInteriorAI: """ @@ -50,7 +50,7 @@ def __init__( self, numFloors, bldgLevel, bldgTrack, zone ): else: self.dbg_defaultSuitType = SuitDNA.getSuitType(dbg_defaultSuitName) - if (isinstance(bldgLevel, types.StringType)): + if (isinstance(bldgLevel, str)): self.notify.warning('bldgLevel is a string!') bldgLevel = int(bldgLevel) self._genSuitInfos( numFloors, bldgLevel, bldgTrack ) @@ -60,7 +60,7 @@ def __genJoinChances( self, num ): joinChances = [] for currChance in range( num ): joinChances.append( random.randint( 1, 100 ) ) - joinChances.sort( cmp ) + joinChances.sort(key=functools.cmp_to_key(cmp)) return joinChances def _genSuitInfos( self, numFloors, bldgLevel, bldgTrack ): @@ -82,7 +82,7 @@ def _genSuitInfos( self, numFloors, bldgLevel, bldgTrack ): "+1) and bldgTrack (" + str( bldgTrack ) + ")" ) - assert(bldgLevel >= 0 and + assert(bldgLevel >= 0 and bldgLevel < len(SuitBuildingGlobals.SuitBuildingInfo)) assert(numFloors > 0) @@ -116,8 +116,8 @@ def _genSuitInfos( self, numFloors, bldgLevel, bldgTrack ): tmp = lvls[newBossSpot] lvls[newBossSpot] = lvls[origBossSpot] lvls[origBossSpot] = tmp - - bldgInfo = SuitBuildingGlobals.SuitBuildingInfo[ bldgLevel ] + + bldgInfo = SuitBuildingGlobals.SuitBuildingInfo[ bldgLevel ] if len(bldgInfo) > SuitBuildingGlobals.SUIT_BLDG_INFO_REVIVES: revives = bldgInfo[ SuitBuildingGlobals.SUIT_BLDG_INFO_REVIVES ][0] else: @@ -127,7 +127,7 @@ def _genSuitInfos( self, numFloors, bldgLevel, bldgTrack ): type = self.__genNormalSuitType( level ) activeDict = {} activeDict['type'] = type - activeDict['track'] = bldgTrack + activeDict['track'] = bldgTrack activeDict['level'] = level activeDict['revives'] = revives activeDicts.append(activeDict) @@ -243,9 +243,9 @@ def __genLevelList( self, bldgLevel, currFloor, numFloors ): newLvl = random.randint( bossLvlRange[ 0 ], bossLvlRange[ 1 ] ) assert(self.notify.debug('boss level: %d' % newLvl)) lvlList.append( newLvl ) - - lvlList.sort( cmp ) + + lvlList.sort(key=functools.cmp_to_key(cmp)) self.notify.debug( "LevelList: " + repr( lvlList ) ) return lvlList @@ -264,7 +264,7 @@ def __setupSuitInfo( self, suit, bldgTrack, suitLevel, suitType ): # if our type is already specified, we might need to # constrain the level to fit. suitLevel = min(max(suitLevel, suitType), suitType + 4) - + dna = SuitDNA.SuitDNA() dna.newSuitRandom( suitType, bldgTrack ) suit.dna = dna @@ -321,7 +321,7 @@ def myPrint(self): str( currInfo[ 0 ][ currActive ][ 1 ] ) + " and of level " + str( currInfo[ 0 ][ currActive ][ 2 ] ) ) - + self.notify.debug( " Floor " + str( whichSuitInfo ) + " has " + str( len( currInfo[ 1 ] ) ) + @@ -345,16 +345,16 @@ def genFloorSuits(self, floor): assert(floor < len(self.suitInfos)) assert(self.notify.debug('generating suits for floor: %d' % floor)) suitHandles = {} - floorInfo = self.suitInfos[floor] + floorInfo = self.suitInfos[floor] activeSuits = [] for activeSuitInfo in floorInfo['activeSuits']: suit = self.__genSuitObject(self.zoneId, activeSuitInfo['type'], - activeSuitInfo['track'], + activeSuitInfo['track'], activeSuitInfo['level'], activeSuitInfo['revives']) - + activeSuits.append(suit) assert(len(activeSuits) > 0) suitHandles['activeSuits'] = activeSuits @@ -363,7 +363,7 @@ def genFloorSuits(self, floor): for reserveSuitInfo in floorInfo['reserveSuits']: suit = self.__genSuitObject(self.zoneId, reserveSuitInfo['type'], - reserveSuitInfo['track'], + reserveSuitInfo['track'], reserveSuitInfo['level'], reserveSuitInfo['revives']) reserveSuits.append((suit, reserveSuitInfo['joinChance'])) @@ -377,7 +377,7 @@ def genSuits( self ): // suits that should exist inside of a suit building // Parameters: none // Changes: - // Returns: a map + // Returns: a map """ assert(self.notify.debug('genSuits() for zone: %d' % self.zoneId)) diff --git a/toontown/src/building/ToonInterior.py b/toontown/src/building/ToonInterior.py index 5a9a705c..ad5dff28 100644 --- a/toontown/src/building/ToonInterior.py +++ b/toontown/src/building/ToonInterior.py @@ -251,7 +251,7 @@ def enterDFACallback(self, requestStatus, doneStatus): else: # Some return code that is not handled self.notify.error("Unknown done status for DownloadForceAcknowledge: " - + `doneStatus`) + + repr(doneStatus)) # NPCFA state @@ -284,7 +284,7 @@ def enterNPCFACallback(self, requestStatus, doneStatus): else: # Some return code that is not handled self.notify.error("Unknown done status for NPCForceAcknowledge: " - + `doneStatus`) + + repr(doneStatus)) # npca reject state @@ -329,7 +329,7 @@ def enterHFACallback(self, requestStatus, doneStatus): else: # Some return code that is not handled self.notify.error("Unknown done status for HealthForceAcknowledge: " - + `doneStatus`) + + repr(doneStatus)) # hfa reject state diff --git a/toontown/src/building/TutorialBuildingAI.py b/toontown/src/building/TutorialBuildingAI.py index 07c2e5bf..14d1cdde 100644 --- a/toontown/src/building/TutorialBuildingAI.py +++ b/toontown/src/building/TutorialBuildingAI.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import DistributedDoorAI -import DistributedTutorialInteriorAI -import FADoorCodes -import DoorTypes +from . import DistributedDoorAI +from . import DistributedTutorialInteriorAI +from . import FADoorCodes +from . import DoorTypes from toontown.toon import NPCToons from toontown.toonbase import TTLocalizer diff --git a/toontown/src/building/TutorialHQBuildingAI.py b/toontown/src/building/TutorialHQBuildingAI.py index 3243bd48..376109ca 100644 --- a/toontown/src/building/TutorialHQBuildingAI.py +++ b/toontown/src/building/TutorialHQBuildingAI.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import DistributedDoorAI -import DistributedHQInteriorAI -import FADoorCodes -import DoorTypes +from . import DistributedDoorAI +from . import DistributedHQInteriorAI +from . import FADoorCodes +from . import DoorTypes from toontown.toon import NPCToons from toontown.quest import Quests from toontown.toonbase import TTLocalizer diff --git a/toontown/src/catalog/CatalogAnimatedFurnitureItem.py b/toontown/src/catalog/CatalogAnimatedFurnitureItem.py index 3fd6179d..6fd5e179 100644 --- a/toontown/src/catalog/CatalogAnimatedFurnitureItem.py +++ b/toontown/src/catalog/CatalogAnimatedFurnitureItem.py @@ -1,4 +1,4 @@ -from CatalogFurnitureItem import * +from .CatalogFurnitureItem import * # The first 6 CatalogFurnitureItem properties are defined in CatalogFurnitureItem.py # They are: diff --git a/toontown/src/catalog/CatalogAtticItem.py b/toontown/src/catalog/CatalogAtticItem.py index a77ca226..d729b722 100644 --- a/toontown/src/catalog/CatalogAtticItem.py +++ b/toontown/src/catalog/CatalogAtticItem.py @@ -1,121 +1,67 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import TTLocalizer from direct.showbase import PythonUtil -from direct.gui.DirectGui import * from toontown.toonbase import ToontownGlobals class CatalogAtticItem(CatalogItem.CatalogItem): - """CatalogAtticItem - - This is a base class for a family of items (CatalogFurnitureItem, - CatalogWindowItem, CatalogWallpaperItem) that must all be stored - in the player's attic. It contains some common methods that check - for space available in the attic. - - """ + __module__ = __name__ def storedInAttic(self): - # Returns true if this kind of item takes up space in the - # avatar's attic, false otherwise. return 1 def isDeletable(self): - # Returns true if the item can be deleted from the attic, - # false otherwise. return 1 def getHouseInfo(self, avatar): - # Looks up the house for the avatar, and checks the available - # space in the attic. A helper function for recordPurchase(). - - # Returns a pair: (house, retcode), where house is the house - # object if it can be determined, and retcode is the return - # code if there is a failure. If retcode is positive the - # object should be added to the attic. - houseId = avatar.houseId if not houseId: - self.notify.warning("Avatar %s has no houseId associated." % (avatar.doId)) + self.notify.warning('Avatar %s has no houseId associated.' % avatar.doId) return (None, ToontownGlobals.P_InvalidIndex) house = simbase.air.doId2do.get(houseId) if not house: - self.notify.warning("House %s (for avatar %s) not instantiated." % (houseId, avatar.doId)) + self.notify.warning('House %s (for avatar %s) not instantiated.' % (houseId, avatar.doId)) return (None, ToontownGlobals.P_InvalidIndex) - numAtticItems = len(house.atticItems) + len(house.atticWallpaper) + len(house.atticWindows) numHouseItems = numAtticItems + len(house.interiorItems) - if numHouseItems >= ToontownGlobals.MaxHouseItems and \ - not self.replacesExisting(): - # No more room in the house. - return (house, ToontownGlobals.P_NoRoomForItem) - + if numHouseItems >= ToontownGlobals.MaxHouseItems and not self.replacesExisting(): + return ( + house, ToontownGlobals.P_NoRoomForItem) return (house, ToontownGlobals.P_ItemAvailable) + return def requestPurchase(self, phone, callback): - # Orders the item via the indicated telephone. Some items - # will pop up a dialog querying the user for more information - # before placing the order; other items will order - # immediately. - - # In either case, the function will return immediately before - # the transaction is finished, but the given callback will be - # called later with two parameters: the return code (one of - # the P_* symbols defined in ToontownGlobals.py), followed by the - # item itself. - - # This method is only called on the client. from toontown.toontowngui import TTDialog avatar = base.localAvatar - itemsOnOrder = 0 for item in avatar.onOrder + avatar.mailboxContents: if item.storedInAttic() and not item.replacesExisting(): itemsOnOrder += 1 numHouseItems = phone.numHouseItems + itemsOnOrder - if numHouseItems >= ToontownGlobals.MaxHouseItems and \ - not self.replacesExisting(): - # If the avatar's house is full, pop up a dialog warning - # the user, and give him a chance to bail out. + if numHouseItems >= ToontownGlobals.MaxHouseItems and not self.replacesExisting(): self.requestPurchaseCleanup() - buttonCallback = PythonUtil.Functor( - self.__handleFullPurchaseDialog, phone, callback) - self.dialog = TTDialog.TTDialog( - style = TTDialog.YesNo, - text = TTLocalizer.CatalogPurchaseHouseFull, - text_wordwrap = 15, - command = buttonCallback, - ) + buttonCallback = PythonUtil.Functor(self.__handleFullPurchaseDialog, phone, callback) + self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.CatalogPurchaseHouseFull, text_wordwrap=15, command=buttonCallback) self.dialog.show() - else: - # The avatar's house isn't full; just buy it. CatalogItem.CatalogItem.requestPurchase(self, phone, callback) def requestPurchaseCleanup(self): - if hasattr(self, "dialog"): + if hasattr(self, 'dialog'): self.dialog.cleanup() del self.dialog def __handleFullPurchaseDialog(self, phone, callback, buttonValue): from toontown.toontowngui import TTDialog self.requestPurchaseCleanup() - if buttonValue == DGG.DIALOG_OK: - # Go ahead and purchase it. + if buttonValue == TTDialog.DIALOG_OK: CatalogItem.CatalogItem.requestPurchase(self, phone, callback) else: - # Don't purchase it. callback(ToontownGlobals.P_UserCancelled, self) - def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). if retcode == ToontownGlobals.P_ItemAvailable: return TTLocalizer.CatalogAcceptInAttic elif retcode == ToontownGlobals.P_NoRoomForItem: return TTLocalizer.CatalogAcceptHouseFull - return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) - + return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) \ No newline at end of file diff --git a/toontown/src/catalog/CatalogBeanItem.py b/toontown/src/catalog/CatalogBeanItem.py index bbe4ad2d..1162eb76 100644 --- a/toontown/src/catalog/CatalogBeanItem.py +++ b/toontown/src/catalog/CatalogBeanItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer diff --git a/toontown/src/catalog/CatalogChatItem.py b/toontown/src/catalog/CatalogChatItem.py index c5263fd0..0aae727d 100644 --- a/toontown/src/catalog/CatalogChatItem.py +++ b/toontown/src/catalog/CatalogChatItem.py @@ -1,43 +1,20 @@ from pandac.PandaModules import * -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from otp.otpbase import OTPLocalizer from toontown.toonbase import TTLocalizer -# Scandalous phrases not appropriate to toontown -bannedPhrases = [ 11009 ] - class CatalogChatItem(CatalogItem.CatalogItem): - """CatalogChatItem - - This represents a particular custom menu item in the SpeedChat - that a player may purchase. + __module__ = __name__ - """ - def makeNewItem(self, customIndex): self.customIndex = customIndex - CatalogItem.CatalogItem.makeNewItem(self) def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 1 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - #assert avatar.onGiftOrder, "on gift order is None" - #print avatar.onGiftOrder - #print "self in onGiftOrder: %s" % (self in avatar.onGiftOrder) - if self in avatar.onOrder or self in avatar.mailboxContents or self in avatar.onGiftOrder \ - or self in avatar.awardMailboxContents or self in avatar.onAwardOrder: - return 1 - #if avatar != localAvatar: - #pass - #import pdb; pdb.set_trace() return avatar.customMessages.count(self.customIndex) != 0 def getTypeName(self): @@ -51,37 +28,18 @@ def getDisplayName(self): def recordPurchase(self, avatar, optional): if avatar.customMessages.count(self.customIndex) != 0: - # We already have this chat item. return ToontownGlobals.P_ReachedPurchaseLimit - if len(avatar.customMessages) >= ToontownGlobals.MaxCustomMessages: - # Oops, too many custom messages. - - # Delete the old index if so requested by the client. if optional >= 0 and optional < len(avatar.customMessages): del avatar.customMessages[optional] - if len(avatar.customMessages) >= ToontownGlobals.MaxCustomMessages: - # Still too many. return ToontownGlobals.P_NoRoomForItem - avatar.customMessages.append(self.customIndex) avatar.d_setCustomMessages(avatar.customMessages) return ToontownGlobals.P_ItemAvailable - - def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). - if retcode == ToontownGlobals.P_ItemAvailable: - return TTLocalizer.CatalogAcceptChat - return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) - - def output(self, store = ~0): - return "CatalogChatItem(%s%s)" % ( - self.customIndex, - self.formatOptionalData(store)) + + def output(self, store=-1): + return 'CatalogChatItem(%s%s)' % (self.customIndex, self.formatOptionalData(store)) def compareTo(self, other): return self.customIndex - other.customIndex @@ -90,92 +48,35 @@ def getHashContents(self): return self.customIndex def getBasePrice(self): - # Special holiday-themed chat phrases (>= 10000) are a bit - # more expensive. if self.customIndex >= 10000: return 150 - return 100 def decodeDatagram(self, di, versionNumber, store): CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store) self.customIndex = di.getUint16() - - # The following will generate an exception if self.customIndex - # is wrong. text = OTPLocalizer.CustomSCStrings[self.customIndex] def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) dg.addUint16(self.customIndex) - - def acceptItem(self, mailbox, index, callback): - # Accepts the item from the mailbox. Some items will pop up a - # dialog querying the user for more information before - # accepting the item; other items will accept it immediately. - - # This method is only called on the client. - if (len(base.localAvatar.customMessages) < ToontownGlobals.MaxCustomMessages): - mailbox.acceptItem(self, index, callback) - else: - # else make them make a choice - self.showMessagePickerOnAccept(mailbox, index, callback) - def requestPurchase(self, phone, callback): - # make sure we have room for this in the chat menu - if (len(base.localAvatar.customMessages) < ToontownGlobals.MaxCustomMessages): - # if so request the purchase + if len(base.localAvatar.customMessages) < ToontownGlobals.MaxCustomMessages: CatalogItem.CatalogItem.requestPurchase(self, phone, callback) else: - # else make them make a choice self.showMessagePicker(phone, callback) - + def showMessagePicker(self, phone, callback): - # we will need these later self.phone = phone self.callback = callback - # pop up a toontown dialog with message picker - import CatalogChatItemPicker - self.messagePicker = CatalogChatItemPicker.CatalogChatItemPicker(self.__handlePickerDone, - self.customIndex) + from . import CatalogChatItemPicker + self.messagePicker = CatalogChatItemPicker.CatalogChatItemPicker(self.__handlePickerDone, self.customIndex) self.messagePicker.show() - - - def showMessagePickerOnAccept(self, mailbox, index, callback): - # we will need these later - self.mailbox = mailbox - self.callback = callback - self.index = index - # pop up a toontown dialog with message picker - import CatalogChatItemPicker - self.messagePicker = CatalogChatItemPicker.CatalogChatItemPicker(self.__handlePickerOnAccept, - self.customIndex) - self.messagePicker.show() - - def __handlePickerOnAccept(self, status, pickedMessage=None): - print("Picker Status%s" % (status)) - if (status == "pick"): - # user has deleted custom phrase, so add this one now - self.mailbox.acceptItem(self, self.index, self.callback, pickedMessage) - else: - print("picker canceled") - self.callback(ToontownGlobals.P_UserCancelled, None, self.index) - - self.messagePicker.hide() - self.messagePicker.destroy() - del self.messagePicker - del self.callback - del self.mailbox - def __handlePickerDone(self, status, pickedMessage=None): - if (status == "pick"): - # user has deleted custom phrase, so add this one now - CatalogItem.CatalogItem.requestPurchase(self, - self.phone, - self.callback, - pickedMessage) + if status == 'pick': + CatalogItem.CatalogItem.requestPurchase(self, self.phone, self.callback, pickedMessage) self.messagePicker.hide() self.messagePicker.destroy() del self.messagePicker @@ -183,61 +84,32 @@ def __handlePickerDone(self, status, pickedMessage=None): del self.phone def getPicture(self, avatar): - chatBalloon = loader.loadModel("phase_3/models/props/chatbox.bam") - chatBalloon.find("**/top").setPos(1,0,5) - chatBalloon.find("**/middle").setScale(1,1,3) + chatBalloon = loader.loadModelCopy('phase_3/models/props/chatbox.bam') + chatBalloon.find('**/top').setPos(1, 0, 5) + chatBalloon.find('**/middle').setScale(1, 1, 3) frame = self.makeFrame() chatBalloon.reparentTo(frame) - - #chatBalloon.setPos(-1.92,0,-1.53) - chatBalloon.setPos(-2.19,0,-1.74) - chatBalloon.setScale(0.4) - - #bMin, bMax = chatBalloon.getTightBounds() - #center = (bMin + bMax)/2.0 - #chatBalloon.setPos(-center[0], -center[1], -center[2]) - #corner = Vec3(bMax - center) - #print bMin, bMax, center, corner - #chatBalloon.setScale(1.0/corner[2]) - - assert (not self.hasPicture) - self.hasPicture=True - - return (frame, None) - - # nametag = NametagGroup() - # nametag.setFont(ToontownGlobals.getInterfaceFont()) - # nametag.manage(base.marginManager) - # nametag.setActive(1) - # nametag.getNametag3d().setContents(Nametag.CName | Nametag.CSpeech | Nametag.CThought) - # chatString = TTLocalizer.ChatItemQuotes % (OTPLocalizer.CustomSCStrings[self.customIndex]) - # nametag.setChat(chatString, CFSpeech) - # nametagNodePath = NodePath(nametag.getNametag3d().upcastToPandaNode()) - # return self.makeFrameModel(nametagNodePath, spin=0) - + chatBalloon.setPos(-1.92, 0, -1.53) + chatBalloon.setScale(0.35) + return ( + frame, None) + return def getChatRange(fromIndex, toIndex, *otherRanges): - # This function returns a list of the chat items within the - # indicated range(s). - - # Make sure we got an even number of otherRanges - assert(len(otherRanges)%2 == 0) - list = [] - - froms = [fromIndex,] - tos = [toIndex,] - + froms = [ + fromIndex] + tos = [toIndex] i = 0 while i < len(otherRanges): froms.append(otherRanges[i]) - tos.append(otherRanges[i+1]) + tos.append(otherRanges[(i + 1)]) i += 2 - + for chatId in OTPLocalizer.CustomSCStrings.keys(): - for fromIndex, toIndex in zip(froms, tos): - if chatId >= fromIndex and chatId <= toIndex and (chatId not in bannedPhrases): + for (fromIndex, toIndex) in zip(froms, tos): + if chatId >= fromIndex and chatId <= toIndex: list.append(CatalogChatItem(chatId)) - - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogChatItemPicker.py b/toontown/src/catalog/CatalogChatItemPicker.py index 76c62916..2b710592 100644 --- a/toontown/src/catalog/CatalogChatItemPicker.py +++ b/toontown/src/catalog/CatalogChatItemPicker.py @@ -1,134 +1,46 @@ from direct.gui.DirectGui import * -from pandac.PandaModules import * from direct.showbase import DirectObject -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer from toontown.toontowngui import TTDialog - NUM_ITEMS_SHOWN = 15 class CatalogChatItemPicker(DirectObject.DirectObject): - """CatalogChatItemPicker - - This represents a gui element that prompts the user to choose - a phrase from their custom phrase list to remove when it is full. + __module__ = __name__ - """ - def __init__(self, callback, newMsg): self.confirmDelete = None - - # this callback is how we will let the caller know we are done self.doneCallback = callback - - # make a panel to hold everything - self.panel = DirectFrame( - relief = None, - geom = DGG.getDefaultDialogGeom(), - geom_color = ToontownGlobals.GlobalDialogColor, - geom_scale = (1.4, 1, 1.6), - text = TTLocalizer.MessagePickerTitle % OTPLocalizer.CustomSCStrings[newMsg], - text_pos = (0, 0.68), - text_scale = 0.05, - text_wordwrap = 24, - pos = (0, 0, 0), - ) - #self.panel.hide() - - # make the buttons for the picker + self.panel = DirectFrame(relief=None, geom=getDefaultDialogGeom(), geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=(1.4, 1, 1.6), text=TTLocalizer.MessagePickerTitle % OTPLocalizer.CustomSCStrings[newMsg], text_pos=(0, 0.68), text_scale=0.05, text_wordwrap=24, pos=(0, 0, 0)) msgStrings = [] for msg in base.localAvatar.customMessages: msgStrings.append(OTPLocalizer.CustomSCStrings[msg]) - # make the scrolling pick list for the custom phrases - gui = loader.loadModel("phase_3.5/models/gui/friendslist_gui") - self.picker = DirectScrolledList( - parent = self.panel, - relief = None, - pos = (0, 0, 0), - # inc and dec are DirectButtons - incButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - incButton_relief = None, - incButton_scale = (1.3,1.3,-1.3), - incButton_pos = (0,0,-0.5), - # Make the disabled button fade out - incButton_image3_color = Vec4(1,1,1,0.2), - decButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - decButton_relief = None, - decButton_scale = (1.3,1.3,1.3), - decButton_pos = (0,0,0.5), - # Make the disabled button fade out - decButton_image3_color = Vec4(1,1,1,0.2), - # itemFrame is a DirectFrame - itemFrame_pos = (0, 0, 0.39), - itemFrame_scale = 1.0, - itemFrame_relief = DGG.SUNKEN, - itemFrame_frameSize = (-0.55,0.55,-0.85,0.06), - itemFrame_frameColor = (0.85,0.95,1,1), - itemFrame_borderWidth = (0.01, 0.01), - itemMakeFunction = self.makeMessageButton, - itemMakeExtraArgs=[base.localAvatar.customMessages], - numItemsVisible = NUM_ITEMS_SHOWN, - items = msgStrings, - ) - - # Set up a clipping plane to truncate phrases that would extend - # off the right end of the scrolled list. + gui = loader.loadModelOnce('phase_3.5/models/gui/friendslist_gui') + self.picker = DirectScrolledList(parent=self.panel, relief=None, pos=(0, 0, 0), incButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(1.3, 1.3, -1.3), incButton_pos=(0, 0, -0.5), incButton_image3_color=Vec4(1, 1, 1, 0.2), decButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(1.3, 1.3, 1.3), decButton_pos=(0, 0, 0.5), decButton_image3_color=Vec4(1, 1, 1, 0.2), itemFrame_pos=(0, 0, 0.39), itemFrame_scale=1.0, itemFrame_relief=SUNKEN, itemFrame_frameSize=(-0.55, 0.55, -0.85, 0.06), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), itemMakeFunction=self.makeMessageButton, itemMakeExtraArgs=[base.localAvatar.customMessages], numItemsVisible=NUM_ITEMS_SHOWN, items=msgStrings) clipper = PlaneNode('clipper') clipper.setPlane(Plane(Vec3(-1, 0, 0), Point3(0.55, 0, 0))) - clipNP = self.picker.attachNewNode(clipper) - self.picker.setClipPlane(clipNP) - + self.picker.attachNewNode(clipper) + cpa = ClipPlaneAttrib.make(ClipPlaneAttrib.OSet, clipper) + self.picker.node().setAttrib(cpa) gui.removeNode() - - # make a cancel button - buttonModels = loader.loadModel("phase_3.5/models/gui/inventory_gui") - upButton = buttonModels.find("**/InventoryButtonUp") - downButton = buttonModels.find("**/InventoryButtonDown") - rolloverButton = buttonModels.find("**/InventoryButtonRollover") - - # setup exit button - exitButton = DirectButton( - parent = self.panel, - relief = None, - pos = (0, 0, -0.7), - text = TTLocalizer.MessagePickerCancel, - text_scale = TTLocalizer.CCIPmessagePickerCancel, - text_pos = (-0.005,-0.01), - text_fg = Vec4(1,1,1,1), - textMayChange = 0, - image = (upButton, - downButton, - rolloverButton, - ), - image_scale = 1.1, - image_color = (0, 0.6, 1, 1), - command = self.__handleCancel, - ) + buttonModels = loader.loadModelOnce('phase_3.5/models/gui/inventory_gui') + upButton = buttonModels.find('**/InventoryButtonUp') + downButton = buttonModels.find('**/InventoryButtonDown') + rolloverButton = buttonModels.find('**/InventoryButtonRollover') + exitButton = DirectButton(parent=self.panel, relief=None, pos=(0, 0, -0.7), text=TTLocalizer.MessagePickerCancel, text_scale=0.06, text_pos=(-0.005, -0.01), text_fg=Vec4(1, 1, 1, 1), textMayChange=0, image=(upButton, downButton, rolloverButton), image_scale=1.1, image_color=(0, 0.6, 1, 1), command=self.__handleCancel) buttonModels.removeNode() + return def hide(self): - base.transitions.noTransitions() self.panel.hide() def show(self): - base.transitions.fadeScreen(0.5) - self.panel.setBin('gui-popup', 0) self.panel.show() def destroy(self): - # clean up gui items - base.transitions.noTransitions() self.panel.destroy() del self.panel del self.picker @@ -137,45 +49,29 @@ def destroy(self): self.confirmDelete.cleanup() del self.confirmDelete self.confirmDelete = None + return def makeMessageButton(self, name, number, *extraArgs): - # index into our particular msg msg = extraArgs[0][0][number] - return DirectButton( - relief = None, - text = OTPLocalizer.CustomSCStrings[msg], - text_pos = (-0.5, 0, 0), - text_scale = 0.05, - text_align = TextNode.ALeft, - text1_bg = Vec4(1,1,0,1), - text2_bg = Vec4(0.5,0.9,1,1), - text3_fg = Vec4(0.4,0.8,0.4,1), - command = self.__handleDelete, - extraArgs = [msg], - ) + return DirectButton(relief=None, text=OTPLocalizer.CustomSCStrings[msg], text_pos=(-0.5, 0, 0), text_scale=0.05, text_align=TextNode.ALeft, text1_bg=Vec4(1, 1, 0, 1), text2_bg=Vec4(0.5, 0.9, 1, 1), text3_fg=Vec4(0.4, 0.8, 0.4, 1), command=self.__handleDelete, extraArgs=[msg]) + return def __handleDelete(self, msg): - # prompt the user to verify purchase - self.confirmDelete = TTDialog.TTGlobalDialog( - doneEvent = "confirmDelete", - message = TTLocalizer.MessageConfirmDelete % (OTPLocalizer.CustomSCStrings[msg]), - style = TTDialog.TwoChoice) + self.confirmDelete = TTDialog.TTGlobalDialog(doneEvent='confirmDelete', message=TTLocalizer.MessageConfirmDelete % OTPLocalizer.CustomSCStrings[msg], style=TTDialog.TwoChoice) self.confirmDelete.msg = msg - self.hide() self.confirmDelete.show() - self.accept("confirmDelete", self.__handleDeleteConfirm) - + self.accept('confirmDelete', self.__handleDeleteConfirm) + def __handleCancel(self): - self.doneCallback("cancel") - + self.doneCallback('cancel') + def __handleDeleteConfirm(self): status = self.confirmDelete.doneStatus msg = self.confirmDelete.msg - self.ignore("confirmDelete") + self.ignore('confirmDelete') self.confirmDelete.cleanup() del self.confirmDelete self.confirmDelete = None - if (status == "ok"): - self.doneCallback("pick", base.localAvatar.customMessages.index(msg)) - else: - self.show() + if status == 'ok': + self.doneCallback('pick', base.localAvatar.customMessages.index(msg)) + return \ No newline at end of file diff --git a/toontown/src/catalog/CatalogClothingItem.py b/toontown/src/catalog/CatalogClothingItem.py index 06b89cd3..803d50c4 100644 --- a/toontown/src/catalog/CatalogClothingItem.py +++ b/toontown/src/catalog/CatalogClothingItem.py @@ -1,16 +1,13 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.toon import ToonDNA import random from direct.showbase import PythonUtil -from direct.gui.DirectGui import * from pandac.PandaModules import * - CTArticle = 0 CTString = 1 CTBasePrice = 2 - ABoysShirt = 0 AGirlsShirt = 1 AShirt = 2 @@ -18,446 +15,112 @@ AGirlsShorts = 4 AGirlsSkirt = 5 AShorts = 6 - - -# These index numbers are written to the database. Don't mess with them. -ClothingTypes = { - # Basic boy's shirts (also available from Make-A-Toon) - 101 : (ABoysShirt, 'bss1', 40), - 102 : (ABoysShirt, 'bss2', 40), - 103 : (ABoysShirt, 'bss3', 40), - 105 : (ABoysShirt, 'bss4', 40), - 104 : (ABoysShirt, 'bss5', 40), - 106 : (ABoysShirt, 'bss6', 40), - 107 : (ABoysShirt, 'bss7', 40), - 108 : (ABoysShirt, 'bss8', 40), - 109 : (ABoysShirt, 'bss9', 40), - 111 : (ABoysShirt, 'bss11', 40), - 115 : (ABoysShirt, 'bss15', 40), - # Catalog exclusive shirts are a bit pricier - 116 : (ABoysShirt, 'c_ss1', 80), # Series 1 - 117 : (ABoysShirt, 'c_ss2', 80), # Series 1 - 118 : (ABoysShirt, 'c_bss1', 80), # Series 1 - 119 : (ABoysShirt, 'c_bss2', 80), # Series 1 - - 120 : (ABoysShirt, 'c_ss3', 80), # Series 2 - 121 : (ABoysShirt, 'c_bss3', 80), # Series 2 - 122 : (ABoysShirt, 'c_bss4', 80), # Series 2 - - 123 : (ABoysShirt, 'c_ss4', 120), # Series 3 - 124 : (ABoysShirt, 'c_ss5', 120), # Series 3 - - 125 : (AShirt, 'c_ss6', 120), # Series 4 - 126 : (AShirt, 'c_ss7', 120), # Series 4 - 127 : (AShirt, 'c_ss8', 120), # Series 4 - 128 : (AShirt, 'c_ss9', 120), # Series 4 - 129 : (AShirt, 'c_ss10', 120), # Series 4 - 130 : (AShirt, 'c_ss11', 120), # Series 4 - - 131 : (ABoysShirt, 'c_ss12', 160), # Series 7 - - # Basic girl's shirts (also available from Make-A-Toon) - 201 : (AGirlsShirt, 'gss1', 40), - 202 : (AGirlsShirt, 'gss2', 40), - 203 : (AGirlsShirt, 'gss3', 40), - 205 : (AGirlsShirt, 'gss4', 40), - 204 : (AGirlsShirt, 'gss5', 40), - 206 : (AGirlsShirt, 'gss6', 40), - 207 : (AGirlsShirt, 'gss7', 40), - 208 : (AGirlsShirt, 'gss8', 40), - 209 : (AGirlsShirt, 'gss9', 40), - 211 : (AGirlsShirt, 'gss11', 40), - 215 : (AGirlsShirt, 'gss15', 40), - - # Catalog exclusive shirts are a bit pricier - 216 : (AGirlsShirt, 'c_ss1', 80), # Series 1 - 217 : (AGirlsShirt, 'c_ss2', 80), # Series 1 - 218 : (AGirlsShirt, 'c_gss1', 80), # Series 1 - 219 : (AGirlsShirt, 'c_gss2', 80), # Series 1 - 220 : (AGirlsShirt, 'c_ss3', 80), # Series 2 - 221 : (AGirlsShirt, 'c_gss3', 80), # Series 2 - 222 : (AGirlsShirt, 'c_gss4', 80), # Series 2 - 223 : (AGirlsShirt, 'c_gss5', 80), # UNUSED - 224 : (AGirlsShirt, 'c_ss4', 120), # Series 3 - 225 : (AGirlsShirt, 'c_ss13', 160), # Series 7 - - # Basic shorts for boys (available from Make-A-Toon) - 301 : (ABoysShorts, 'bbs1', 50), - 302 : (ABoysShorts, 'bbs2', 50), - 303 : (ABoysShorts, 'bbs3', 50), - 304 : (ABoysShorts, 'bbs4', 50), - 305 : (ABoysShorts, 'bbs5', 50), - 308 : (ABoysShorts, 'bbs8', 50), - # Catalog exclusive shorts - 310 : (ABoysShorts, 'c_bs1', 120), # Series 3 - 311 : (ABoysShorts, 'c_bs2', 120), # Series 3 - 312 : (ABoysShorts, 'c_bs3', 120), # Series 4 - 313 : (ABoysShorts, 'c_bs4', 120), # Series 4 - 314 : (ABoysShorts, 'c_bs5', 160), # Series 7 - - # Basic shorts/skirts for girls (available from Make-A-Toon) - 401 : (AGirlsSkirt, 'gsk1', 50), - 403 : (AGirlsSkirt, 'gsk3', 50), - 404 : (AGirlsSkirt, 'gsk4', 50), - 405 : (AGirlsSkirt, 'gsk5', 50), - 407 : (AGirlsSkirt, 'gsk7', 50), - # Catalog exclusive skirts are a bit pricier - 408 : (AGirlsSkirt, 'c_gsk1', 100), - 409 : (AGirlsSkirt, 'c_gsk2', 100), - 410 : (AGirlsSkirt, 'c_gsk3', 100), - 411 : (AGirlsSkirt, 'c_gsk4', 120), - 412 : (AGirlsSkirt, 'c_gsk5', 120), # Series 4 - 413 : (AGirlsSkirt, 'c_gsk6', 120), # Series 4 - 414 : (AGirlsSkirt, 'c_gsk7', 160), # Series 7 - # Shorts - 451 : (AGirlsShorts, 'gsh1', 50), - 452 : (AGirlsShorts, 'gsh2', 50), - 453 : (AGirlsShorts, 'gsh3', 50), - - # Halloween-themed clothes. - 1001 : (AShirt, 'hw_ss1', 200), - 1002 : (AShirt, 'hw_ss2', 200), - # Winter Holiday clothes. - 1100 : (AShirt, 'wh_ss1', 200), - 1101 : (AShirt, 'wh_ss2', 200), - 1102 : (AShirt, 'wh_ss3', 200), - 1103 : (AShirt, 'wh_ss4', 200), - 1104 : (ABoysShorts, 'wh_bs1', 200), - 1105 : (ABoysShorts, 'wh_bs2', 200), - 1106 : (ABoysShorts, 'wh_bs3', 200), - 1107 : (ABoysShorts, 'wh_bs4', 200), - 1108 : (AGirlsSkirt, 'wh_gsk1', 200), - 1109 : (AGirlsSkirt, 'wh_gsk2', 200), - 1110 : (AGirlsSkirt, 'wh_gsk3', 200), - 1111 : (AGirlsSkirt, 'wh_gsk4', 200), - # Valentines clothes. - 1200 : (AGirlsShirt, 'vd_ss1', 200), - 1201 : (AShirt, 'vd_ss2', 200), - 1202 : (ABoysShirt, 'vd_ss3', 200), - 1203 : (AGirlsShirt, 'vd_ss4', 200), - 1204 : (AGirlsSkirt, 'vd_gs1', 200), - 1205 : (ABoysShorts, 'vd_bs1', 200), - 1206 : (AShirt, 'vd_ss5', 200), - 1207 : (AShirt, 'vd_ss6', 200), - 1208 : (ABoysShorts, 'vd_bs2', 200), - 1209 : (ABoysShorts, 'vd_bs3', 200), - 1210 : (AGirlsSkirt, 'vd_gs2', 200), - 1211 : (AGirlsSkirt, 'vd_gs3', 200), - 1212 : (AShirt, 'vd_ss7', 200), - # St. Patricks Day clothes - 1300 : (AShirt, 'sd_ss1', 200), - 1301 : (AShirt, 'sd_ss2', 225), - 1302 : (AGirlsShorts, 'sd_gs1', 200), - 1303 : (ABoysShorts, 'sd_bs1', 200), - # T-Shirt Contest Shirts - 1400 : (AShirt, 'tc_ss1', 200), - 1401 : (AShirt, 'tc_ss2', 200), - 1402 : (AShirt, 'tc_ss3', 200), - 1403 : (AShirt, 'tc_ss4', 200), - 1404 : (AShirt, 'tc_ss5', 200), - 1405 : (AShirt, 'tc_ss6', 200), - 1406 : (AShirt, 'tc_ss7', 200), - # July 4th clothes - 1500 : (AShirt, 'j4_ss1', 200), - 1501 : (AShirt, 'j4_ss2', 200), - 1502 : (ABoysShorts, 'j4_bs1', 200), - 1503 : (AGirlsSkirt, 'j4_gs1', 200), - # Loyalty Gag Pajamas - 1600 : (AShirt, 'pj_ss1', 500), - 1601 : (AShirt, 'pj_ss2', 500), - 1602 : (AShirt, 'pj_ss3', 500), - 1603 : (ABoysShorts, 'pj_bs1', 500), - 1604 : (ABoysShorts, 'pj_bs2', 500), - 1605 : (ABoysShorts, 'pj_bs3', 500), - 1606 : (AGirlsShorts, 'pj_gs1', 500), - 1607 : (AGirlsShorts, 'pj_gs2', 500), - 1608 : (AGirlsShorts, 'pj_gs3', 500), - # Special Award Clothes - 1700 : (AShirt, 'sa_ss1', 200), - 1701 : (AShirt, 'sa_ss2', 200), - 1702 : (AShirt, 'sa_ss3', 200), - 1703 : (AShirt, 'sa_ss4', 200), - 1704 : (AShirt, 'sa_ss5', 200), - 1705 : (AShirt, 'sa_ss6', 200), - 1706 : (AShirt, 'sa_ss7', 200), - 1707 : (AShirt, 'sa_ss8', 200), - 1708 : (AShirt, 'sa_ss9', 200), - 1709 : (AShirt, 'sa_ss10', 200), - 1710 : (AShirt, 'sa_ss11', 200), - - 1711 : (ABoysShorts, 'sa_bs1', 200), - 1712 : (ABoysShorts, 'sa_bs2', 200), - 1713 : (ABoysShorts, 'sa_bs3', 200), - 1714 : (ABoysShorts, 'sa_bs4', 200), - 1715 : (ABoysShorts, 'sa_bs5', 200), - - 1716 : (AGirlsSkirt, 'sa_gs1', 200), - 1717 : (AGirlsSkirt, 'sa_gs2', 200), - 1718 : (AGirlsSkirt, 'sa_gs3', 200), - 1719 : (AGirlsSkirt, 'sa_gs4', 200), - 1720 : (AGirlsSkirt, 'sa_gs5', 200), - - 1721 : (AShirt, 'sa_ss12', 200), - 1722 : (AShirt, 'sa_ss13', 200), - 1723 : (AShirt, 'sa_ss14', 250), - 1724 : (AShirt, 'sa_ss15', 250), - 1725 : (AShirt, 'sa_ss16', 200), - 1726 : (AShirt, 'sa_ss17', 200), - 1727 : (AShirt, 'sa_ss18', 200), - 1728 : (AShirt, 'sa_ss19', 200), - 1729 : (AShirt, 'sa_ss20', 200), - 1730 : (AShirt, 'sa_ss21', 200), - 1731 : (AShirt, 'sa_ss22', 200), - 1732 : (AShirt, 'sa_ss23', 200), - - 1733 : (ABoysShorts, 'sa_bs6', 200), - 1734 : (ABoysShorts, 'sa_bs7', 250), - 1735 : (ABoysShorts, 'sa_bs8', 250), - 1736 : (ABoysShorts, 'sa_bs9', 200), - 1737 : (ABoysShorts, 'sa_bs10', 200), - - 1738 : (AGirlsSkirt, 'sa_gs6', 200), - 1739 : (AGirlsSkirt, 'sa_gs7', 250), - 1740 : (AGirlsSkirt, 'sa_gs8', 250), - 1741 : (AGirlsSkirt, 'sa_gs9', 200), - 1742 : (AGirlsSkirt, 'sa_gs10', 200), - - 1743 : (AShirt, 'sa_ss24', 250), - 1744 : (AShirt, 'sa_ss25', 250), - 1745 : (ABoysShorts, 'sa_bs11', 250), - 1746 : (ABoysShorts, 'sa_bs12', 250), - 1747 : (AGirlsSkirt, 'sa_gs11', 250), - 1748 : (AGirlsSkirt, 'sa_gs12', 250), - - # I'm setting the cost of any Code Redemption clothing item to an obvious - # 5000 jellybeans. They should never be offered for sale in the catalog. - # They should only be available through the code redemption system. - 1749 : (AShirt, 'sil_1', 1), # Silly Mailbox Shirt - 1750 : (AShirt, 'sil_2', 1), # Silly Trash Can Shirt - 1751 : (AShirt, 'sil_3', 1), # Loony Labs Shirt - 1752 : (AShirt, 'sil_4', 5000), # Silly Hydrant Shirt - 1753 : (AShirt, 'sil_5', 5000), # Sillymeter Whistle Shirt - 1754 : (AShirt, 'sil_6', 1), # Silly Cogbuster Shirt - 1755 : (ABoysShorts, 'sil_bs1', 1), # Silly Cogbuster Shorts - 1756 : (AGirlsShorts, 'sil_gs1', 1), # Silly Cogbuster Shorts - 1757 : (AShirt, 'sil_7', 20), # Victory Party Shirt 1 - 1758 : (AShirt, 'sil_8', 20), # Victory Party Shirt 2 - - 1762 : (AShirt, 'sa_ss26', 200), - } - -# A list of clothes that are loyalty items, needed by award manager -LoyaltyClothingItems = (1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608) +ClothingTypes = {101: (ABoysShirt, 'bss1', 40), 102: (ABoysShirt, 'bss2', 40), 103: (ABoysShirt, 'bss3', 40), 105: (ABoysShirt, 'bss4', 40), 104: (ABoysShirt, 'bss5', 40), 106: (ABoysShirt, 'bss6', 40), 107: (ABoysShirt, 'bss7', 40), 108: (ABoysShirt, 'bss8', 40), 109: (ABoysShirt, 'bss9', 40), 111: (ABoysShirt, 'bss11', 40), 115: (ABoysShirt, 'bss15', 40), 116: (ABoysShirt, 'c_ss1', 80), 117: (ABoysShirt, 'c_ss2', 80), 118: (ABoysShirt, 'c_bss1', 80), 119: (ABoysShirt, 'c_bss2', 80), 120: (ABoysShirt, 'c_ss3', 80), 121: (ABoysShirt, 'c_bss3', 80), 122: (ABoysShirt, 'c_bss4', 80), 123: (ABoysShirt, 'c_ss4', 120), 124: (ABoysShirt, 'c_ss5', 120), 125: (AShirt, 'c_ss6', 120), 126: (AShirt, 'c_ss7', 120), 127: (AShirt, 'c_ss8', 120), 128: (AShirt, 'c_ss9', 120), 129: (AShirt, 'c_ss10', 120), 130: (AShirt, 'c_ss11', 120), 131: (ABoysShirt, 'c_ss12', 160), 201: (AGirlsShirt, 'gss1', 40), 202: (AGirlsShirt, 'gss2', 40), 203: (AGirlsShirt, 'gss3', 40), 205: (AGirlsShirt, 'gss4', 40), 204: (AGirlsShirt, 'gss5', 40), 206: (AGirlsShirt, 'gss6', 40), 207: (AGirlsShirt, 'gss7', 40), 208: (AGirlsShirt, 'gss8', 40), 209: (AGirlsShirt, 'gss9', 40), 211: (AGirlsShirt, 'gss11', 40), 215: (AGirlsShirt, 'gss15', 40), 216: (AGirlsShirt, 'c_ss1', 80), 217: (AGirlsShirt, 'c_ss2', 80), 218: (AGirlsShirt, 'c_gss1', 80), 219: (AGirlsShirt, 'c_gss2', 80), 220: (AGirlsShirt, 'c_ss3', 80), 221: (AGirlsShirt, 'c_gss3', 80), 222: (AGirlsShirt, 'c_gss4', 80), 223: (AGirlsShirt, 'c_gss5', 80), 224: (AGirlsShirt, 'c_ss4', 120), 225: (AGirlsShirt, 'c_ss13', 160), 301: (ABoysShorts, 'bbs1', 50), 302: (ABoysShorts, 'bbs2', 50), 303: (ABoysShorts, 'bbs3', 50), 304: (ABoysShorts, 'bbs4', 50), 305: (ABoysShorts, 'bbs5', 50), 308: (ABoysShorts, 'bbs8', 50), 310: (ABoysShorts, 'c_bs1', 120), 311: (ABoysShorts, 'c_bs2', 120), 312: (ABoysShorts, 'c_bs3', 120), 313: (ABoysShorts, 'c_bs4', 120), 314: (ABoysShorts, 'c_bs5', 160), 401: (AGirlsSkirt, 'gsk1', 50), 403: (AGirlsSkirt, 'gsk3', 50), 404: (AGirlsSkirt, 'gsk4', 50), 405: (AGirlsSkirt, 'gsk5', 50), 407: (AGirlsSkirt, 'gsk7', 50), 408: (AGirlsSkirt, 'c_gsk1', 100), 409: (AGirlsSkirt, 'c_gsk2', 100), 410: (AGirlsSkirt, 'c_gsk3', 100), 411: (AGirlsSkirt, 'c_gsk4', 120), 412: (AGirlsSkirt, 'c_gsk5', 120), 413: (AGirlsSkirt, 'c_gsk6', 120), 414: (AGirlsSkirt, 'c_gsk7', 160), 451: (AGirlsShorts, 'gsh1', 50), 452: (AGirlsShorts, 'gsh2', 50), 453: (AGirlsShorts, 'gsh3', 50), 1001: (AShirt, 'hw_ss1', 200), 1002: (AShirt, 'hw_ss2', 200), 1100: (AShirt, 'wh_ss1', 200), 1101: (AShirt, 'wh_ss2', 200), 1102: (AShirt, 'wh_ss3', 200), 1103: (AShirt, 'wh_ss4', 200), 1200: (AGirlsShirt, 'vd_ss1', 200), 1201: (AShirt, 'vd_ss2', 200), 1202: (ABoysShirt, 'vd_ss3', 200), 1203: (AGirlsShirt, 'vd_ss4', 200), 1204: (AGirlsSkirt, 'vd_gs1', 200), 1205: (ABoysShorts, 'vd_bs1', 200), 1300: (AShirt, 'sd_ss1', 200), 1301: (AShirt, 'sd_ss2', 225), 1302: (AGirlsShorts, 'sd_gs1', 200), 1303: (ABoysShorts, 'sd_bs1', 200), 1400: (AShirt, 'tc_ss1', 200), 1401: (AShirt, 'tc_ss2', 200), 1402: (AShirt, 'tc_ss3', 200), 1500: (AShirt, 'j4_ss1', 200), 1501: (AShirt, 'j4_ss2', 200), 1502: (ABoysShorts, 'j4_bs1', 200), 1503: (AGirlsSkirt, 'j4_gs1', 200)} class CatalogClothingItem(CatalogItem.CatalogItem): - """CatalogClothingItem - This corresponds to an item of clothing, either a shirt or a - bottom (shorts or skirt). The clothingType indexes into the - above map, which returns the appropriate clothing string for - either a girl or a boy toon. - - """ - - def makeNewItem(self, clothingType, colorIndex, loyaltyDays = 0): + def makeNewItem(self, clothingType, colorIndex): self.clothingType = clothingType self.colorIndex = colorIndex - self.loyaltyDays = loyaltyDays CatalogItem.CatalogItem.makeNewItem(self) def storedInCloset(self): - # Returns true if this kind of item takes up space in the - # avatar's closet, false otherwise. return 1 def notOfferedTo(self, avatar): - # Boys can only buy boy clothing, and girls can only buy girl - # clothing. Sorry. article = ClothingTypes[self.clothingType][CTArticle] - if article == AShirt or article == AShorts: - # This article is androgynous. return 0 - - forBoys = (article == ABoysShirt or article == ABoysShorts) + forBoys = article == ABoysShirt or article == ABoysShorts if avatar.getStyle().getGender() == 'm': return not forBoys else: return forBoys - - def forBoysOnly(self): - article = ClothingTypes[self.clothingType][CTArticle] - if (article == ABoysShirt or article == ABoysShorts): - return 1 - else: - return 0 - - def forGirlsOnly(self): - article = ClothingTypes[self.clothingType][CTArticle] - if (article == AGirlsShirt or article == AGirlsSkirt or article == AGirlsShorts): - return 1 - else: - return 0 - def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 1 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - if avatar.onOrder.count(self) != 0: - # It's on the way. - return 1 - - if avatar.onGiftOrder.count(self) != 0: - # someone has given it to you return 1 if avatar.mailboxContents.count(self) != 0: - # It's waiting in the mailbox. return 1 - if self in avatar.awardMailboxContents or self in avatar.onAwardOrder: - # check award queue and award mailbox too - return 1 - str = ClothingTypes[self.clothingType][CTString] - dna = avatar.getStyle() if self.isShirt(): - # Check if the avatar is already wearing this shirt. defn = ToonDNA.ShirtStyles[str] - if (dna.topTex == defn[0] and - dna.topTexColor == defn[2][self.colorIndex][0] and - dna.sleeveTex == defn[1] and - dna.sleeveTexColor == defn[2][self.colorIndex][1]): + if dna.topTex == defn[0] and dna.topTexColor == defn[2][self.colorIndex][0] and dna.sleeveTex == defn[1] and dna.sleeveTexColor == defn[2][self.colorIndex][1]: return 1 - # Check if the shirt is in the avatar's closet. l = avatar.clothesTopsList for i in range(0, len(l), 4): - if (l[i] == defn[0] and - l[i + 1] == defn[2][self.colorIndex][0] and - l[i + 2] == defn[1] and - l[i + 3] == defn[2][self.colorIndex][1]): + if l[i] == defn[0] and l[i + 1] == defn[2][self.colorIndex][0] and l[i + 2] == defn[1] and l[i + 3] == defn[2][self.colorIndex][1]: return 1 + else: - # Check if the avatar is already wearing these shorts/skirt. defn = ToonDNA.BottomStyles[str] - if (dna.botTex == defn[0] and - dna.botTexColor == defn[1][self.colorIndex]): + if dna.botTex == defn[0] and dna.botTexColor == defn[1][self.colorIndex]: return 1 - # Check if the shorts/skirt is in the avatar's closet. l = avatar.clothesBottomsList for i in range(0, len(l), 2): - if (l[i] == defn[0] and - l[i + 1] == defn[1][self.colorIndex]): + if l[i] == defn[0] and l[i + 1] == defn[1][self.colorIndex]: return 1 - # Not found anywhere; go ahead and buy it. return 0 - def getTypeName(self): - # e.g. "shirt", "shorts", etc. - #article = ClothingTypes[self.clothingType][CTArticle] - #return TTLocalizer.ClothingArticleNames[article] - - # Until we have descriptive names per-item below, just return - # "Clothing" here. return TTLocalizer.ClothingTypeName def getName(self): typeName = TTLocalizer.ClothingTypeNames.get(self.clothingType, 0) - # check for a specific item name if typeName: return typeName - # otherwise use a generic name else: article = ClothingTypes[self.clothingType][CTArticle] return TTLocalizer.ClothingArticleNames[article] def recordPurchase(self, avatar, optional): - # Updates the appropriate field on the avatar to indicate the - # purchase (or delivery). This makes the item available to - # use by the avatar. This method is only called on the AI side. - if avatar.isClosetFull(): return ToontownGlobals.P_NoRoomForItem - str = ClothingTypes[self.clothingType][CTString] - - # Save the avatar's current clothes in his closet. dna = avatar.getStyle() if self.isShirt(): - added = avatar.addToClothesTopsList(dna.topTex, dna.topTexColor, - dna.sleeveTex, dna.sleeveTexColor) + added = avatar.addToClothesTopsList(dna.topTex, dna.topTexColor, dna.sleeveTex, dna.sleeveTexColor) if added: avatar.b_setClothesTopsList(avatar.getClothesTopsList()) - self.notify.info('Avatar %s put shirt %d,%d,%d,%d in closet.' % (avatar.doId, - dna.topTex, dna.topTexColor, - dna.sleeveTex, dna.sleeveTexColor)) + self.notify.info('Avatar %s put shirt %d,%d,%d,%d in closet.' % (avatar.doId, dna.topTex, dna.topTexColor, dna.sleeveTex, dna.sleeveTexColor)) else: self.notify.warning('Avatar %s %s lost current shirt; closet full.' % (avatar.doId, dna.asTuple())) - defn = ToonDNA.ShirtStyles[str] dna.topTex = defn[0] dna.topTexColor = defn[2][self.colorIndex][0] dna.sleeveTex = defn[1] dna.sleeveTexColor = defn[2][self.colorIndex][1] - else: added = avatar.addToClothesBottomsList(dna.botTex, dna.botTexColor) if added: avatar.b_setClothesBottomsList(avatar.getClothesBottomsList()) - self.notify.info('Avatar %s put bottoms %d,%d in closet.' % (avatar.doId, - dna.botTex, dna.botTexColor)) + self.notify.info('Avatar %s put bottoms %d,%d in closet.' % (avatar.doId, dna.botTex, dna.botTexColor)) else: self.notify.warning('Avatar %s %s lost current bottoms; closet full.' % (avatar.doId, dna.asTuple())) - defn = ToonDNA.BottomStyles[str] dna.botTex = defn[0] dna.botTexColor = defn[1][self.colorIndex] - - # Store the new clothes on the avatar. avatar.b_setDNAString(dna.makeNetString()) - # need to call this to make sure generateToonClothes is called on client avatar.d_catalogGenClothes() return ToontownGlobals.P_ItemAvailable def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. - return 60 # 1 hour. + return 60 def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - - # Don't import this at the top of the file, since this code - # must run on the AI. from toontown.toon import Toon - - assert (not self.hasPicture) - self.hasPicture=True - - # Make an ToonDNA suitable for showing this clothing. - # First, we start with a copy of the avatar's dna. - dna = ToonDNA.ToonDNA(type = 't', dna = avatar.style) - - # Now we apply the properties from this clothing. + dna = ToonDNA.ToonDNA(type='t', dna=avatar.style) str = ClothingTypes[self.clothingType][CTString] - if self.isShirt(): - # It's a shirt. defn = ToonDNA.ShirtStyles[str] dna.topTex = defn[0] dna.topTexColor = defn[2][self.colorIndex][0] @@ -465,89 +128,50 @@ def getPicture(self, avatar): dna.sleeveTexColor = defn[2][self.colorIndex][1] pieceNames = ('**/1000/**/torso-top', '**/1000/**/sleeves') else: - # It's a skirt or shorts. defn = ToonDNA.BottomStyles[str] dna.botTex = defn[0] dna.botTexColor = defn[1][self.colorIndex] pieceNames = ('**/1000/**/torso-bot',) - - # Create a toon wearing the clothing, then pull out the - # appropriate clothes and throw the rest away. toon = Toon.Toon() toon.setDNA(dna) - model = NodePath('clothing') - for name in pieceNames: - for piece in toon.findAllMatches(name): + for piece in toon.findAllMatches(name).asList(): piece.wrtReparentTo(model) - - model.setH(180) - toon.delete() - - + model.setH(180) return self.makeFrameModel(model) def requestPurchase(self, phone, callback): - # Orders the item via the indicated telephone. Some items - # will pop up a dialog querying the user for more information - # before placing the order; other items will order - # immediately. - - # In either case, the function will return immediately before - # the transaction is finished, but the given callback will be - # called later with two parameters: the return code (one of - # the P_* symbols defined in ToontownGlobals.py), followed by the - # item itself. - - # This method is only called on the client. from toontown.toontowngui import TTDialog avatar = base.localAvatar - clothesOnOrder = 0 for item in avatar.onOrder + avatar.mailboxContents: if item.storedInCloset(): clothesOnOrder += 1 - + if avatar.isClosetFull(clothesOnOrder): - # If the avatar's closet is full, pop up a dialog warning - # the user, and give him a chance to bail out. self.requestPurchaseCleanup() - buttonCallback = PythonUtil.Functor( - self.__handleFullPurchaseDialog, phone, callback) - self.dialog = TTDialog.TTDialog( - style = TTDialog.YesNo, - text = TTLocalizer.CatalogPurchaseClosetFull, - text_wordwrap = 15, - command = buttonCallback, - ) + buttonCallback = PythonUtil.Functor(self.__handleFullPurchaseDialog, phone, callback) + self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.CatalogPurchaseClosetFull, text_wordwrap=15, command=buttonCallback) self.dialog.show() - else: - # The avatar's closet isn't full; just buy it. CatalogItem.CatalogItem.requestPurchase(self, phone, callback) def requestPurchaseCleanup(self): - if hasattr(self, "dialog"): + if hasattr(self, 'dialog'): self.dialog.cleanup() del self.dialog def __handleFullPurchaseDialog(self, phone, callback, buttonValue): from toontown.toontowngui import TTDialog self.requestPurchaseCleanup() - if buttonValue == DGG.DIALOG_OK: - # Go ahead and purchase it. + if buttonValue == TTDialog.DIALOG_OK: CatalogItem.CatalogItem.requestPurchase(self, phone, callback) else: - # Don't purchase it. callback(ToontownGlobals.P_UserCancelled, self) def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). if retcode == ToontownGlobals.P_ItemAvailable: if self.isShirt(): return TTLocalizer.CatalogAcceptShirt @@ -558,46 +182,32 @@ def getAcceptItemErrorText(self, retcode): elif retcode == ToontownGlobals.P_NoRoomForItem: return TTLocalizer.CatalogAcceptClosetFull return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) - def getColorChoices(self): - # Returns the list from ToonDNA that defines the clothing - # item and its color options. str = ClothingTypes[self.clothingType][CTString] - if self.isShirt(): - # It's a shirt. return ToonDNA.ShirtStyles[str][2] else: - # It's a skirt or shorts. return ToonDNA.BottomStyles[str][1] def isShirt(self): - # Returns true if the article is a shirt, false if it is a - # pair of shorts or a skirt. article = ClothingTypes[self.clothingType][CTArticle] return article < ABoysShorts def isSkirt(self): - # Returns true if the article is a skirt, false if it is a - # pair of shorts or a shirt. article = ClothingTypes[self.clothingType][CTArticle] return article == AGirlsSkirt - def output(self, store = ~0): - return "CatalogClothingItem(%s, %s%s)" % ( - self.clothingType, self.colorIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogClothingItem(%s, %s%s)' % (self.clothingType, self.colorIndex, self.formatOptionalData(store)) def getFilename(self): str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): - # It's a shirt. defn = ToonDNA.ShirtStyles[str] topTex = defn[0] return ToonDNA.Shirts[topTex] else: - # It's a skirt or shorts. defn = ToonDNA.BottomStyles[str] botTex = defn[0] article = ClothingTypes[self.clothingType][CTArticle] @@ -609,24 +219,22 @@ def getFilename(self): def getColor(self): str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): - # It's a shirt. defn = ToonDNA.ShirtStyles[str] topTexColor = defn[2][self.colorIndex][0] return ToonDNA.ClothesColors[topTexColor] else: - # It's a skirt or shorts. defn = ToonDNA.BottomStyles[str] botTexColor = defn[1][self.colorIndex] return ToonDNA.ClothesColors[botTexColor] - def compareTo(self, other): if self.clothingType != other.clothingType: return self.clothingType - other.clothingType return self.colorIndex - other.colorIndex def getHashContents(self): - return (self.clothingType, self.colorIndex) + return ( + self.clothingType, self.colorIndex) def getBasePrice(self): return ClothingTypes[self.clothingType][CTBasePrice] @@ -635,51 +243,24 @@ def decodeDatagram(self, di, versionNumber, store): CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store) self.clothingType = di.getUint16() self.colorIndex = di.getUint8() - if versionNumber >= 6: - self.loyaltyDays = di.getUint16() - else: - #RAU this seeems safe, as an old user would never have the new loyalty items - self.loyaltyDays = 0 - - # Now validate the indices by assigning into a variable, - # color, which we don't care about other than to prove the - # clothingType and colorIndex map to a valid definition. If - # they don't, the following will raise an exception. str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): color = ToonDNA.ShirtStyles[str][2][self.colorIndex] else: color = ToonDNA.BottomStyles[str][1][self.colorIndex] - + def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) dg.addUint16(self.clothingType) dg.addUint8(self.colorIndex) - dg.addUint16(self.loyaltyDays) - - def isGift(self): - if (self.loyaltyRequirement() > 0): - return 0 - else: - if self.clothingType in LoyaltyClothingItems: - # we can get this case through award manager - # catalog generator is not creating the catalog item, hence no loyalty days - return 0 - else: - return 1 -def getAllClothes(*clothingTypes): - # This function returns a list of all possible - # CatalogClothingItems (that is, all color variants) for the - # indicated type index(es). +def getAllClothes(*clothingTypes): list = [] for clothingType in clothingTypes: base = CatalogClothingItem(clothingType, 0) - list.append(base) for n in range(1, len(base.getColorChoices())): list.append(CatalogClothingItem(clothingType, n)) - return list - + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogEmoteItem.py b/toontown/src/catalog/CatalogEmoteItem.py index fce3ee47..5dc09dc3 100644 --- a/toontown/src/catalog/CatalogEmoteItem.py +++ b/toontown/src/catalog/CatalogEmoteItem.py @@ -1,52 +1,24 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer from direct.interval.IntervalGlobal import * -# A list of emotesthat are loyalty items, needed by award manager -LoyaltyEmoteItems = (20, 21, 22, 23, 24) - class CatalogEmoteItem(CatalogItem.CatalogItem): - """ - This represents a particular emote animation. - """ - + __module__ = __name__ sequenceNumber = 0 - pictureToon = None - def makeNewItem(self, emoteIndex, loyaltyDays = 0): + + def makeNewItem(self, emoteIndex): self.emoteIndex = emoteIndex - self.loyaltyDays = loyaltyDays CatalogItem.CatalogItem.makeNewItem(self) def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 1 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - if self in avatar.onOrder or self in avatar.mailboxContents or self in avatar.onGiftOrder \ - or self in avatar.awardMailboxContents or self in avatar.onAwardOrder: - return 1 - if self.emoteIndex >= len(avatar.emoteAccess): - return 0 return avatar.emoteAccess[self.emoteIndex] != 0 - - def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). - if retcode == ToontownGlobals.P_ItemAvailable: - return TTLocalizer.CatalogAcceptEmote - return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def getTypeName(self): @@ -57,102 +29,41 @@ def getName(self): def recordPurchase(self, avatar, optional): if self.emoteIndex < 0 or self.emoteIndex > len(avatar.emoteAccess): - self.notify.warning("Invalid emote access: %s for avatar %s" % (self.emoteIndex, avatar.doId)) + self.notify.warning('Invalid emote access: %s for avatar %s' % (self.emoteIndex, avatar.doId)) return ToontownGlobals.P_InvalidIndex - avatar.emoteAccess[self.emoteIndex] = 1 avatar.d_setEmoteAccess(avatar.emoteAccess) return ToontownGlobals.P_ItemAvailable def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - - # Don't import this at the top of the file, since this code - # must run on the AI. from toontown.toon import Toon from toontown.toon import ToonHead from toontown.toon import TTEmote from otp.avatar import Emote - - assert (not self.hasPicture) - self.hasPicture=True - if self.emoteIndex in Emote.globalEmote.getHeadEmotes(): toon = ToonHead.ToonHead() - toon.setupHead(avatar.style, forGui = 1) + toon.setupHead(avatar.style, forGui=1) else: toon = Toon.Toon() toon.setDNA(avatar.style) toon.loop('neutral') - toon.setH(180) - model, ival = self.makeFrameModel(toon, 0) - - - # Discard the ival from makeFrameModel, since we don't want to - # spin. - - track, duration = Emote.globalEmote.doEmote(toon, self.emoteIndex, volume = self.volume) - + (model, ival) = self.makeFrameModel(toon, 0) + (track, duration) = Emote.globalEmote.doEmote(toon, self.emoteIndex) if duration == None: duration = 0 - name = "emote-item-%s" % (self.sequenceNumber) + name = 'emote-item-%s' % self.sequenceNumber CatalogEmoteItem.sequenceNumber += 1 if track != None: - track = Sequence(Sequence(track, duration = 0), - Wait(duration + 2), - name = name) + track = Sequence(Sequence(track, duration=0), Wait(duration + 2), name=name) else: - track = Sequence(Func(Emote.globalEmote.doEmote, toon, self.emoteIndex), - Wait(duration + 4), - name = name) - self.pictureToon = toon - return (model, track) - - def changeIval(self, volume): - """Return an interval of the toon doing the emote, with a possible change in volume.""" - # Don't import this at the top of the file, since this code - # must run on the AI. - from toontown.toon import Toon - from toontown.toon import ToonHead - from toontown.toon import TTEmote - from otp.avatar import Emote + track = Sequence(Func(Emote.globalEmote.doEmote, toon, self.emoteIndex), Wait(duration + 4), name=name) + return ( + model, track) + return - self.volume = volume - - # assumes getPicture has been called previously - if not hasattr(self, 'pictureToon'): - return Sequence() - track, duration = Emote.globalEmote.doEmote(self.pictureToon, self.emoteIndex, volume = self.volume) - if duration == None: - duration = 0 - name = "emote-item-%s" % (self.sequenceNumber) - CatalogEmoteItem.sequenceNumber += 1 - if track != None: - track = Sequence(Sequence(track, duration = 0), - Wait(duration + 2), - name = name) - else: - track = Sequence(Func(Emote.globalEmote.doEmote, toon, self.emoteIndex), - Wait(duration + 4), - name = name) - return track - - def cleanupPicture(self): - CatalogItem.CatalogItem.cleanupPicture(self) - assert self.pictureToon - self.pictureToon.emote.finish() - self.pictureToon.emote = None - self.pictureToon.delete() - self.pictureToon = None - - def output(self, store = ~0): - return "CatalogEmoteItem(%s%s)" % ( - self.emoteIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogEmoteItem(%s%s)' % (self.emoteIndex, self.formatOptionalData(store)) def compareTo(self, other): return self.emoteIndex - other.emoteIndex @@ -161,31 +72,14 @@ def getHashContents(self): return self.emoteIndex def getBasePrice(self): - # All emotes are the same price for now. return 550 def decodeDatagram(self, di, versionNumber, store): CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store) self.emoteIndex = di.getUint8() - if versionNumber >= 6: - self.loyaltyDays = di.getUint16() - else: - #RAU this seeems safe, as an old user would never have the new loyalty items - self.loyaltyDays = 0 if self.emoteIndex > len(OTPLocalizer.EmoteList): raise ValueError - + def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) - dg.addUint8(self.emoteIndex) - dg.addUint16(self.loyaltyDays) - - def isGift(self): - if (self.loyaltyRequirement() > 0): - return 0 - else: - if self.emoteIndex in LoyaltyEmoteItems: - return 0 - else: - return 1 - + dg.addUint8(self.emoteIndex) \ No newline at end of file diff --git a/toontown/src/catalog/CatalogFlooringItem.py b/toontown/src/catalog/CatalogFlooringItem.py index ca4d3210..7acb8ee1 100644 --- a/toontown/src/catalog/CatalogFlooringItem.py +++ b/toontown/src/catalog/CatalogFlooringItem.py @@ -1,105 +1,22 @@ -from CatalogSurfaceItem import * - -# Indicies into Flooring Textures Dictionary +from .CatalogSurfaceItem import * FTTextureName = 0 FTColor = 1 FTBasePrice = 2 - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.FlooringNames. -FlooringTypes = { - ## Series 1 ## - 1000 : ("phase_5.5/maps/floor_wood_neutral.jpg", - CTBasicWoodColorOnWhite, 150), - 1010 : ("phase_5.5/maps/flooring_carpetA_neutral.jpg", - CTFlatColorDark, 150), - 1020 : ("phase_4/maps/flooring_tile_neutral.jpg", # In phase 4 because it's also on the PetShopInterior model. - CTFlatColorDark, 150), - 1030 : ("phase_5.5/maps/flooring_tileB2.jpg", - None, 150), - # Grass, just for fun - 1040 : ("phase_4/maps/grass.jpg", None, 150), - # Beige bricks - 1050 : ("phase_4/maps/floor_tile_brick_diagonal2.jpg", None, 150), - # Red bricks - 1060 : ("phase_4/maps/floor_tile_brick_diagonal.jpg", None, 150), - # Square beige tiles - 1070 : ("phase_4/maps/plazz_tile.jpg", None, 150), - # Sidewalk with colors - 1080 : ("phase_4/maps/sidewalk.jpg", CTFlatColorDark, 150), - # Boardwalk - 1090 : ("phase_3.5/maps/boardwalk_floor.jpg", None, 150), - # Dirt - 1100 : ("phase_3.5/maps/dustroad.jpg", None, 150), - - ## Series 2 ## - # Wood Tile - 1110 : ("phase_5.5/maps/floor_woodtile_neutral.jpg", - CTBasicWoodColorOnWhite, 150), - # Floor Tile - 1120 : ("phase_5.5/maps/floor_tile_neutral.jpg", - CTBasicWoodColorOnWhite + CTFlatColorDark, 150), - # Floor Tile Honeycomb - 1130 : ("phase_5.5/maps/floor_tile_honeycomb_neutral.jpg", - CTBasicWoodColorOnWhite, 150), - - ## Series 3 ## - # Water floor - 1140 : ("phase_5.5/maps/UWwaterFloor1.jpg", - None, 150), - - # Peach conch tile - 1150 : ("phase_5.5/maps/UWtileFloor4.jpg", - None, 150), - - # Peach shell tile - 1160 : ("phase_5.5/maps/UWtileFloor3.jpg", - None, 150), - - # Sand shell tile - 1170 : ("phase_5.5/maps/UWtileFloor2.jpg", - None, 150), - - # Sand conch tile - 1180 : ("phase_5.5/maps/UWtileFloor1.jpg", - None, 150), - - # Sandy floor - 1190 : ("phase_5.5/maps/UWsandyFloor1.jpg", - None, 150), - - - ## WINTER HOLIDAY ## - # Ice cube - 10000 : ("phase_5.5/maps/floor_icecube.jpg", CTWhite, 225), - 10010 : ("phase_5.5/maps/floor_snow.jpg", CTWhite, 225), - - ## St. Patricks Day ## - # Gold shamrock - 11000 : ("phase_5.5/maps/StPatsFloor1.jpg", CTWhite, 225), - # Green shamrock - 11010 : ("phase_5.5/maps/StPatsFloor2.jpg", CTWhite, 225), - } +FlooringTypes = {1000: ('phase_5.5/maps/floor_wood_neutral.jpg', CTBasicWoodColorOnWhite, 150), 1010: ('phase_5.5/maps/flooring_carpetA_neutral.jpg', CTFlatColorDark, 150), 1020: ('phase_4/maps/flooring_tile_neutral.jpg', CTFlatColorDark, 150), 1030: ('phase_5.5/maps/flooring_tileB2.jpg', None, 150), 1040: ('phase_4/maps/grass.jpg', None, 150), 1050: ('phase_4/maps/floor_tile_brick_diagonal2.jpg', None, 150), 1060: ('phase_4/maps/floor_tile_brick_diagonal.jpg', None, 150), 1070: ('phase_4/maps/plazz_tile.jpg', None, 150), 1080: ('phase_4/maps/sidewalk.jpg', CTFlatColorDark, 150), 1090: ('phase_3.5/maps/boardwalk_floor.jpg', None, 150), 1100: ('phase_3.5/maps/dustroad.jpg', None, 150), 1110: ('phase_5.5/maps/floor_woodtile_neutral.jpg', CTBasicWoodColorOnWhite, 150), 1120: ('phase_5.5/maps/floor_tile_neutral.jpg', CTBasicWoodColorOnWhite + CTFlatColorDark, 150), 1130: ('phase_5.5/maps/floor_tile_honeycomb_neutral.jpg', CTBasicWoodColorOnWhite, 150), 1140: ('phase_5.5/maps/UWwaterFloor1.jpg', None, 150), 1150: ('phase_5.5/maps/UWtileFloor4.jpg', None, 150), 1160: ('phase_5.5/maps/UWtileFloor3.jpg', None, 150), 1170: ('phase_5.5/maps/UWtileFloor2.jpg', None, 150), 1180: ('phase_5.5/maps/UWtileFloor1.jpg', None, 150), 1190: ('phase_5.5/maps/UWsandyFloor1.jpg', None, 150), 10000: ('phase_5.5/maps/floor_icecube.jpg', CTWhite, 225), 10010: ('phase_5.5/maps/floor_snow.jpg', CTWhite, 225), 11000: ('phase_5.5/maps/StPatsFloor1.jpg', CTWhite, 225), 11010: ('phase_5.5/maps/StPatsFloor2.jpg', CTWhite, 225)} class CatalogFlooringItem(CatalogSurfaceItem): - """CatalogFlooringItem + __module__ = __name__ - This represents a texture/color combination for floors. - - """ - - def makeNewItem(self, patternIndex, colorIndex = None): + def makeNewItem(self, patternIndex, colorIndex=None): self.patternIndex = patternIndex self.colorIndex = colorIndex CatalogSurfaceItem.makeNewItem(self) def needsCustomize(self): - # Returns true if the item still needs to be customized by the - # user (e.g. by choosing a color). return self.colorIndex == None + return def getTypeName(self): - # e.g. "wallpaper", "wainscoting", etc. return TTLocalizer.SurfaceNames[STFlooring] def getName(self): @@ -109,41 +26,27 @@ def getName(self): return self.getTypeName() def getSurfaceType(self): - # Returns a value reflecting the type of surface this - # pattern is intended to be applied to. return STFlooring def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. frame = self.makeFrame() - - sample = loader.loadModel('phase_5.5/models/estate/wallpaper_sample') + sample = loader.loadModelCopy('phase_5.5/models/estate/wallpaper_sample') a = sample.find('**/a') b = sample.find('**/b') c = sample.find('**/c') - - # Flooring gets applied to the whole thing. a.setTexture(self.loadTexture(), 1) a.setColorScale(*self.getColor()) b.setTexture(self.loadTexture(), 1) b.setColorScale(*self.getColor()) c.setTexture(self.loadTexture(), 1) c.setColorScale(*self.getColor()) - sample.reparentTo(frame) + return ( + frame, None) + return -## assert (not self.hasPicture) - self.hasPicture=True - - return (frame, None) - - def output(self, store = ~0): - return "CatalogFlooringItem(%s, %s%s)" % ( - self.patternIndex, self.colorIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogFlooringItem(%s, %s%s)' % (self.patternIndex, self.colorIndex, self.formatOptionalData(store)) def getFilename(self): return FlooringTypes[self.patternIndex][FTTextureName] @@ -169,7 +72,6 @@ def loadTexture(self): def getColor(self): if self.colorIndex == None: - # If no color index is set yet, use first color in color list colorIndex = 0 else: colorIndex = self.colorIndex @@ -178,10 +80,11 @@ def getColor(self): if colorIndex < len(colors): return colors[colorIndex] else: - print "Warning: colorIndex not in colors. Returning white." + print('Warning: colorIndex not in colors. Returning white.') return CT_WHITE else: return CT_WHITE + return def decodeDatagram(self, di, versionNumber, store): CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store) @@ -189,73 +92,62 @@ def decodeDatagram(self, di, versionNumber, store): self.patternIndex = di.getUint8() else: self.patternIndex = di.getUint16() - if (versionNumber < 4) or (store & CatalogItem.Customization): + if versionNumber < 4 or store & CatalogItem.Customization: self.colorIndex = di.getUint8() else: self.colorIndex = None - - # The following will generate an exception if - # self.patternIndex is invalid. The other fields can take - # care of themselves. wtype = FlooringTypes[self.patternIndex] - + return + def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) dg.addUint16(self.patternIndex) - if (store & CatalogItem.Customization): + if store & CatalogItem.Customization: dg.addUint8(self.colorIndex) + def getFloorings(*indexList): - # This function returns a list of CatalogFlooringItems - # The returned items will all need to be customized (i.e - # have a color chosen by the user. Until customization, - # use a default color index of 0 (if the pattern has a color - # list) or CT_WHITE if the pattern has no color list list = [] for index in indexList: list.append(CatalogFlooringItem(index)) + return list + def getAllFloorings(*indexList): - # This function returns a list of all possible - # CatalogFlooringItems (that is, all color variants) for the - # indicated type index(es). list = [] for index in indexList: colors = FlooringTypes[index][FTColor] if colors: for n in range(len(colors)): list.append(CatalogFlooringItem(index, n)) + else: list.append(CatalogFlooringItem(index, 0)) - return list -def getFlooringRange(fromIndex, toIndex, *otherRanges): - # This function returns a list of all possible - # CatalogFlooringItems (that is, all color variants) for the - # indicated type index(es). + return list - # Make sure we got an even number of otherRanges - assert(len(otherRanges)%2 == 0) +def getFlooringRange(fromIndex, toIndex, *otherRanges): list = [] - - froms = [fromIndex,] - tos = [toIndex,] - + froms = [ + fromIndex] + tos = [toIndex] i = 0 while i < len(otherRanges): froms.append(otherRanges[i]) - tos.append(otherRanges[i+1]) + tos.append(otherRanges[(i + 1)]) i += 2 - - for patternIndex in FlooringTypes.keys(): - for fromIndex, toIndex in zip(froms,tos): + + for patternIndex in list(FlooringTypes.keys()): + for (fromIndex, toIndex) in zip(froms, tos): if patternIndex >= fromIndex and patternIndex <= toIndex: colors = FlooringTypes[patternIndex][FTColor] if colors: for n in range(len(colors)): list.append(CatalogFlooringItem(patternIndex, n)) + else: list.append(CatalogFlooringItem(patternIndex, 0)) - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogFurnitureItem.py b/toontown/src/catalog/CatalogFurnitureItem.py index ce1d2c56..33577e2d 100644 --- a/toontown/src/catalog/CatalogFurnitureItem.py +++ b/toontown/src/catalog/CatalogFurnitureItem.py @@ -1,925 +1,102 @@ -import CatalogAtticItem -import CatalogItem +from . import CatalogAtticItem, CatalogItem import random from toontown.toonbase import TTLocalizer - FTModelName = 0 FTColor = 1 FTColorOptions = 2 FTBasePrice = 3 FTFlags = 4 FTScale = 5 - -FLBank = 0x0001 -FLCloset = 0x0002 -FLRug = 0x0004 -FLPainting = 0x0008 -FLOnTable = 0x0010 -FLIsTable = 0x0020 -FLPhone = 0x0040 -FLBillboard = 0x0080 - -# this is essentially the same as HouseGlobals.houseColors2 with the addition of alpha = 1 +FLBank = 1 +FLCloset = 2 +FLRug = 4 +FLPainting = 8 +FLOnTable = 16 +FLIsTable = 32 +FLPhone = 64 +FLBillboard = 128 furnitureColors = [ - (0.792, 0.353, 0.290, 1.0), # red - (0.176, 0.592, 0.439, 1.0), # green - (0.439, 0.424, 0.682, 1.0), # purple - (0.325, 0.580, 0.835, 1.0), # blue - (0.753, 0.345, 0.557, 1.0), # pink - (0.992, 0.843, 0.392, 1.0), # yellow - ] - + ( + 0.792, 0.353, 0.29, 1.0), (0.176, 0.592, 0.439, 1.0), (0.439, 0.424, 0.682, 1.0), (0.325, 0.58, 0.835, 1.0), (0.753, 0.345, 0.557, 1.0), (0.992, 0.843, 0.392, 1.0)] woodColors = [ - (0.9330, 0.7730, 0.5690, 1.0), # burly wood - (0.9333, 0.6785, 0.0550, 1.0), # dark goldenrod - (0.5450, 0.4510, 0.3330, 1.0), # peach puff - (0.5410, 0.0000, 0.0000, 1.0), # deep red - (0.5451, 0.2706, 0.0745, 1.0), # chocolate - (0.5451, 0.4118, 0.4118, 1.0), # rosey brown - ] - - -# This table maps the various bank ID's to the amount of jellybeans -# they hold. -BankToMoney = { - 1300 : 1000, - 1310 : 2500, - 1320 : 5000, - 1330 : 7500, - 1340 : 10000, - } + ( + 0.933, 0.773, 0.569, 1.0), (0.9333, 0.6785, 0.055, 1.0), (0.545, 0.451, 0.333, 1.0), (0.541, 0.0, 0.0, 1.0), (0.5451, 0.2706, 0.0745, 1.0), (0.5451, 0.4118, 0.4118, 1.0)] +BankToMoney = {1300: 1000, 1310: 2500, 1320: 5000, 1330: 7500, 1340: 10000} MoneyToBank = {} -for bankId, maxMoney in BankToMoney.items(): +for (bankId, maxMoney) in list(BankToMoney.items()): MoneyToBank[maxMoney] = bankId -MaxBankId = 1340 - -# This table maps the various closet ID's to the amount of clothes -# they hold. -ClosetToClothes = { - 500 : 10, - 502 : 15, - 504 : 20, - 506 : 25, - 510 : 10, - 512 : 15, - 514 : 20, - 516 : 25, - } -ClothesToCloset = {} -for closetId, maxClothes in ClosetToClothes.items(): - # There is not a 1-to-1 mapping like the banks since there are boys - # and girls closets, so we'll store a bank Id tuple. - if not ClothesToCloset.has_key(maxClothes): - ClothesToCloset[maxClothes] = (closetId,) - else: - ClothesToCloset[maxClothes] += (closetId,) -MaxClosetIds = (506, 516) - - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.FurnitureNames and TTLocalizer.AwardManagerFurnitureNames -FurnitureTypes = { - - # These are examples to illustrate how we might apply color - # options to furniture, and/or hide and show pieces or replace - # textures to extend a single model for multiple purposes. - -## # Wooden chair -## 100 : ("phase_5.5/models/estate/cushionChair", -## (("**/cushion*", None)), -## None, -## 50), - -## # Cushioned chair -## 110 : ("phase_5.5/models/estate/cushionChair", -## None, -## None, -## 100), - -## # Velvet chair -## 120 : ("phase_5.5/models/estate/cushionChair", -## (("**/cushion*", "phase_5.5/maps/velvet_cushion.jpg")), -## { 0 : (("**/cushion*", (1, 0, 0, 1)),), -## 1 : (("**/cushion*", (0.6, 0.2, 1, 1)),), -## 2 : (("**/cushion*", (0.2, 0.2, 0.6, 1)),), -## }, -## 250), - -## # Library chair -## 130 : ("phase_5.5/models/estate/libraryChair", -## None, -## None, -## 500), - - ## CHAIRS ## - # Chair A - Series 1 - 100 : ("phase_5.5/models/estate/chairA", - None, None, 80), - - # Chair A desaturated - Series 7 - 105 : ("phase_5.5/models/estate/chairAdesat", - None, - { 0 : (("**/cushion*", furnitureColors[0]), ("**/arm*", furnitureColors[0]),), - 1 : (("**/cushion*", furnitureColors[1]), ("**/arm*", furnitureColors[1]),), - 2 : (("**/cushion*", furnitureColors[2]), ("**/arm*", furnitureColors[2]),), - 3 : (("**/cushion*", furnitureColors[3]), ("**/arm*", furnitureColors[3]),), - 4 : (("**/cushion*", furnitureColors[4]), ("**/arm*", furnitureColors[4]),), - 5 : (("**/cushion*", furnitureColors[5]), ("**/arm*", furnitureColors[5]),), - }, - 160), - - # Chair - Series 1 - 110 : ("phase_3.5/models/modules/chair", - None, None, 40), - - # Desk chair - Series 2 - 120 : ("phase_5.5/models/estate/deskChair", - None, None, 60), - - # Bug room chair - Series 2 - 130 : ("phase_5.5/models/estate/BugRoomChair", - None, None, 160), - - # Underwater lobster chair - Series 3 - 140 : ("phase_5.5/models/estate/UWlobsterChair", - None, None, 200), - - # Underwater lifesaver chair - Series 3 - 145 : ("phase_5.5/models/estate/UWlifeSaverChair", - None, None, 200), - - # Western saddle stool - Series 4 - 150 : ("phase_5.5/models/estate/West_saddleStool2", - None, None, 160), - - # Western native chair - Series 4 - 160 : ("phase_5.5/models/estate/West_nativeChair", - None, None, 160), - - # Candy cupcake Chair - Series 6 - 170 : ("phase_5.5/models/estate/cupcakeChair", - None, None, 240), - - - ## BEDS ## - # Boy's bed - Initial Furniture - 200 : ("phase_5.5/models/estate/regular_bed", - None, None, 400), - - # Boy's bed destaturated - Series 7 - 205 : ("phase_5.5/models/estate/regular_bed_desat", - None, - { 0 : (("**/bar*", woodColors[0]),("**/post*", woodColors[0]),("**/*support", woodColors[0]), - ("**/top", woodColors[0]),("**/bottom", woodColors[0]),("**/pPlane*", woodColors[0]),), - 1 : (("**/bar*", woodColors[1]),("**/post*", woodColors[1]),("**/*support", woodColors[1]), - ("**/top", woodColors[1]),("**/bottom", woodColors[1]),("**/pPlane*", woodColors[1]),), - 2 : (("**/bar*", woodColors[2]),("**/post*", woodColors[2]),("**/*support", woodColors[2]), - ("**/top", woodColors[2]),("**/bottom", woodColors[2]),("**/pPlane*", woodColors[2]),), - 3 : (("**/bar*", woodColors[3]),("**/post*", woodColors[3]),("**/*support", woodColors[3]), - ("**/top", woodColors[3]),("**/bottom", woodColors[3]),("**/pPlane*", woodColors[3]),), - 4 : (("**/bar*", woodColors[4]),("**/post*", woodColors[4]),("**/*support", woodColors[4]), - ("**/top", woodColors[4]),("**/bottom", woodColors[4]),("**/pPlane*", woodColors[4]),), - 5 : (("**/bar*", woodColors[5]),("**/post*", woodColors[5]),("**/*support", woodColors[5]), - ("**/top", woodColors[5]),("**/bottom", woodColors[5]),("**/pPlane*", woodColors[5]),), - }, - 800), - - # Girl's bed - Series 1 - 210 : ("phase_5.5/models/estate/girly_bed", - None, None, 450), - - # Bathtub bed - Series 1 - 220 : ("phase_5.5/models/estate/bathtub_bed", - None, None, 550), - - # Bug Room Bed - Series 2 - 230 : ("phase_5.5/models/estate/bugRoomBed", - None, None, 600), - - # Underwater Boat bed - Series 3 - 240 : ("phase_5.5/models/estate/UWBoatBed", - None, None, 600), - - # Western Cactus Hammoc bed - Series 4 - 250 : ("phase_5.5/models/estate/West_cactusHammoc", - None, None, 550), - - # Candy ice cream bed - Series 6 - 260 : ("phase_5.5/models/estate/icecreamBed", - None, None, 700), - - # Trolley bed - CatalogAnimatedFurnitureItem - 270 : ("phase_5.5/models/estate/trolley_bed", - None, None, 1200, None, None, 0.25), - - ## MUSICAL INSTRUMENTS - # Piano - Series 2 - 300 : ("phase_5.5/models/estate/Piano", - None, None, 1000, FLIsTable), - - # Organ - Series 2 - 310 : ("phase_5.5/models/estate/Organ", - None, None, 2500), - - - ## FIREPLACES ## - # Square Fireplace - Initial Furniture - 400 : ("phase_5.5/models/estate/FireplaceSq", - None, None, 800), - - # Girly Fireplace - Series 1 - 410 : ("phase_5.5/models/estate/FireplaceGirlee", - None, None, 800), - - # Round Fireplace - Series 2 - 420 : ("phase_5.5/models/estate/FireplaceRound", - None, None, 800), - - # Bug Room Fireplace - Series 2 - 430 : ("phase_5.5/models/estate/bugRoomFireplace", - None, None, 800), - - # Candy Carmel Apple Fireplace - Series 6 - 440 : ("phase_5.5/models/estate/CarmelAppleFireplace", - None, None, 800), - - # Coral Fireplace - 450 : ("phase_5.5/models/estate/fireplace_coral", - None, None, 950), - - # Coral Fireplace with fire - 460 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_coral", - None, None, 1250, None, None, 0.5), - - # Square Fireplace with fire - 470 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_square", - None, None, 1100, None, None, 0.5), - - # Round Fireplace with fire - 480 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_round", - None, None, 1100, None, None, 0.5), - - # Girly Fireplace with fire - 490 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_girlee", - None, None, 1100, None, None, 0.5), - - # Bug Room Fireplace with fire - 491 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_bugRoom", - None, None, 1100, None, None, 0.5), - - # Candy Caramel Apple Fireplace with fire - 492 : ("phase_5.5/models/estate/tt_m_prp_int_fireplace_caramelApple", - None, None, 1100, None, None, 0.5), - - ## WARDROBES ## - # Boy's Wardrobe, 10 items - Initial Furniture - 500 : ("phase_5.5/models/estate/closetBoy", - None, None, 500, FLCloset, 0.85), - - # Boy's Wardrobe, 15 items - Series 1 - 502 : ("phase_5.5/models/estate/closetBoy", - None, None, 500, FLCloset, 1.0), - - # Boy's Wardrobe, 20 items - 504 : ("phase_5.5/models/estate/closetBoy", - None, None, 500, FLCloset, 1.15), - - # Boy's Wardrobe, 25 items - 506 : ("phase_5.5/models/estate/closetBoy", - None, None, 500, FLCloset, 1.3), - - - # Girl's Wardrobe, 10 items - Initial Furniture - 510 : ("phase_5.5/models/estate/closetGirl", - None, None, 500, FLCloset, 0.85), - - # Girl's Wardrobe, 15 items - Series 1 - 512 : ("phase_5.5/models/estate/closetGirl", - None, None, 500, FLCloset, 1.0), - - # Girl's Wardrobe, 20 items - 514 : ("phase_5.5/models/estate/closetGirl", - None, None, 500, FLCloset, 1.15), - - # Girl's Wardrobe, 25 items - 516 : ("phase_5.5/models/estate/closetGirl", - None, None, 500, FLCloset, 1.3), - - ## LAMPS ## - # Short lamp - Series 1 - 600 : ("phase_3.5/models/modules/lamp_short", - None, None, 45, FLOnTable), - - # Tall lamp - Series 2 - 610 : ("phase_3.5/models/modules/lamp_tall", - None, None, 45), - - # Lamp A - Series 1 - 620 : ("phase_5.5/models/estate/lampA", - None, None, 35, FLOnTable), - - # Lamp A Desaturated - Series 7 - 625 : ("phase_5.5/models/estate/lampADesat", - None, - { 0 : (("**/top", furnitureColors[0]),), - 1 : (("**/top", furnitureColors[1]),), - 2 : (("**/top", furnitureColors[2]),), - 3 : (("**/top", furnitureColors[3]),), - 4 : (("**/top", furnitureColors[4]),), - 5 : (("**/top", furnitureColors[5]),), - }, - 70, FLOnTable), - - # Bug Room Daisy Lamp 1 - Series 2 - 630 : ("phase_5.5/models/estate/bugRoomDaisyLamp1", - None, None, 55), - - # Bug Room Daisy Lamp 2 - Series 2 - 640 : ("phase_5.5/models/estate/bugRoomDaisyLamp2", - None, None, 55), - - # Underwater Lamp 1 - Series 3 - 650 : ("phase_5.5/models/estate/UWlamp_jellyfish", - None, None, 55, FLOnTable), - - # Underwater Lamp 2 - Series 3 - 660 : ("phase_5.5/models/estate/UWlamps_jellyfishB", - None, None, 55, FLOnTable), - - # Cowboy Lamp - series 4 - 670 : ("phase_5.5/models/estate/West_cowboyLamp", - None, None, 55, FLOnTable), - - # Lamps - 680: ("phase_5.5/models/estate/tt_m_ara_int_candlestick", - None, - { 0 : (("**/candlestick/candlestick", (1.0, 1.0, 1.0, 1.0),),), - 1 : (("**/candlestick/candlestick", furnitureColors[1]),), - 2 : (("**/candlestick/candlestick", furnitureColors[2]),), - 3 : (("**/candlestick/candlestick", furnitureColors[3]),), - 4 : (("**/candlestick/candlestick", furnitureColors[4]),), - 5 : (("**/candlestick/candlestick", furnitureColors[5]),), - 6 : (("**/candlestick/candlestick", furnitureColors[0]),), - }, - 20, FLOnTable), - - 681: ("phase_5.5/models/estate/tt_m_ara_int_candlestickLit", - None, - { 0 : (("**/candlestick/candlestick", (1.0, 1.0, 1.0, 1.0),),), - 1 : (("**/candlestickLit/candlestick", furnitureColors[1]),), - 2 : (("**/candlestickLit/candlestick", furnitureColors[2]),), - 3 : (("**/candlestickLit/candlestick", furnitureColors[3]),), - 4 : (("**/candlestickLit/candlestick", furnitureColors[4]),), - 5 : (("**/candlestickLit/candlestick", furnitureColors[5]),), - 6 : (("**/candlestickLit/candlestick", furnitureColors[0]),), - }, - 25, FLOnTable), - - ## COUCHES ## - # 1-person couch - Series 1 - 700 : ("phase_3.5/models/modules/couch_1person", - None, None, 230), - - # 1-person couch desaturated - Series 7 - 705 : ("phase_5.5/models/estate/couch_1personDesat", - None, - { 0 : (("**/*couch", furnitureColors[0]),), - 1 : (("**/*couch", furnitureColors[1]),), - 2 : (("**/*couch", furnitureColors[2]),), - 3 : (("**/*couch", furnitureColors[3]),), - 4 : (("**/*couch", furnitureColors[4]),), - 5 : (("**/*couch", furnitureColors[5]),), - }, - 460), - - # 2-person couch - Series 1 - 710 : ("phase_3.5/models/modules/couch_2person", - None, None, 230), - - # 2-person couch desaturated - Series 7 - 715 : ("phase_5.5/models/estate/couch_2personDesat", - None, - { 0 : (("**/*couch", furnitureColors[0]),), - 1 : (("**/*couch", furnitureColors[1]),), - 2 : (("**/*couch", furnitureColors[2]),), - 3 : (("**/*couch", furnitureColors[3]),), - 4 : (("**/*couch", furnitureColors[4]),), - 5 : (("**/*couch", furnitureColors[5]),), - }, - 460), - - # Western Hay couch - Series 4 - 720 : ("phase_5.5/models/estate/West_HayCouch", - None, None, 420), - - # Candy Twinkie couch - Series 6 - 730 : ("phase_5.5/models/estate/twinkieCouch", - None, None, 480), - - - ## DESKS ## - # Desk - Series 1 - 800 : ("phase_3.5/models/modules/desk_only_wo_phone", - None, None, 65, FLIsTable), - - # Bug Room Desk - Series 2 - 810 : ("phase_5.5/models/estate/BugRoomDesk", - None, None, 125, FLIsTable), - - - ## MISC PROPS ## - # Umbrella stand - Series 1 - 900 : ("phase_3.5/models/modules/umbrella_stand", - None, None, 30), - - # Coat rack - Series 1 - 910 : ("phase_3.5/models/modules/coatrack", - None, None, 75), - - # Trashcan - Series 2 - 920 : ("phase_3.5/models/modules/paper_trashcan", - None, None, 30), - - # Bug Room Red Pot - Series 2 - 930 : ("phase_5.5/models/estate/BugRoomRedMushroomPot", - None, None, 60), - - # Bug Room Yellow Pot - Series 2 - 940 : ("phase_5.5/models/estate/BugRoomYellowMushroomPot", - None, None, 60), - - # Underwater coat rack - Series 3 - 950 : ("phase_5.5/models/estate/UWcoralClothRack", - None, None, 75), - - # Western barrel stand - Series 4 - 960 : ("phase_5.5/models/estate/west_barrelStand", - None, None, 75), - - # Western fat cactus plant - Series 4 - 970 : ("phase_5.5/models/estate/West_fatCactus", - None, None, 75), - - # Western tepee - Series 4 - 980 : ("phase_5.5/models/estate/West_Tepee", - None, None, 150), - - # Gag fan - CatalogAnimatedFurnitureItem - 990 : ("phase_5.5/models/estate/gag_fan", - None, None, 500, None, None, 0.5), - - ## RUGS ## - # Square Rug - Series 1 - 1000 : ("phase_3.5/models/modules/rug", - None, None, 75, FLRug), - - # Round Rug A - Series 1 - 1010 : ("phase_5.5/models/estate/rugA", - None, None, 75, FLRug), - - # Round Rug A desaturated - Series 7 - 1015 : ("phase_5.5/models/estate/rugADesat", - None, - { 0 : (("**/pPlane*", furnitureColors[0]),), - 1 : (("**/pPlane*", furnitureColors[1]),), - 2 : (("**/pPlane*", furnitureColors[2]),), - 3 : (("**/pPlane*", furnitureColors[3]),), - 4 : (("**/pPlane*", furnitureColors[4]),), - 5 : (("**/pPlane*", furnitureColors[5]),), - }, - 150, FLRug), - - # Round Rug B - Series 1 - 1020 : ("phase_5.5/models/estate/rugB", - None, None, 75, FLRug, 2.5), - - # Bug Room Leaf Mat - Series 2 - 1030 : ("phase_5.5/models/estate/bugRoomLeafMat", - None, None, 75, FLRug), - - # Presents - 1040 : ("phase_5.5/models/estate/tt_m_ara_int_presents", - None, None, 300), - - # Sled - 1050 : ("phase_5.5/models/estate/tt_m_ara_int_sled", - None, None, 400), - - ## CABINETS ## - # Red Wood Cabinet - Series 1 - 1100 : ("phase_5.5/models/estate/cabinetRwood", - None, None, 825), - - # Yellow Wood Cabinet - Series 2 - 1110 : ("phase_5.5/models/estate/cabinetYwood", - None, None, 825), - - # Bookcase - Series 2 - 1120 : ("phase_3.5/models/modules/bookcase", - None, None, 650, FLIsTable), - - # Bookcase - Series 2 - 1130 : ("phase_3.5/models/modules/bookcase_low", - None, None, 650, FLIsTable), - - # Candy ice cream chest - Series 6 - 1140 : ("phase_5.5/models/estate/icecreamChest", - None, None, 750), - - - ## TABLES ## - # End table - Series 1 - 1200 : ("phase_3.5/models/modules/ending_table", - None, None, 60, FLIsTable), - - # Radio table - Series 1 - 1210 : ("phase_5.5/models/estate/table_radio", - None, None, 60, FLIsTable, 50.0), - - # Radio table desaturated - Series 7 - 1215 : ("phase_5.5/models/estate/table_radioDesat", - None, - { 0 : (("**/RADIOTABLE_*", woodColors[0]),), - 1 : (("**/RADIOTABLE_*", woodColors[1]),), - 2 : (("**/RADIOTABLE_*", woodColors[2]),), - 3 : (("**/RADIOTABLE_*", woodColors[3]),), - 4 : (("**/RADIOTABLE_*", woodColors[4]),), - 5 : (("**/RADIOTABLE_*", woodColors[5]),), - }, - 120, FLIsTable, 50.0), - - # Coffee table - Series 2 - 1220 : ("phase_5.5/models/estate/coffeetableSq", - None, None, 180, FLIsTable), - - # Coffee table - Series 2 - 1230 : ("phase_5.5/models/estate/coffeetableSq_BW", - None, None, 180, FLIsTable), - - # Underwater coffee table - Series 3 - 1240 : ("phase_5.5/models/estate/UWtable", - None, None, 180, FLIsTable), - - # Candy cookie table - Series 6 - 1250 : ("phase_5.5/models/estate/cookieTableA", - None, None, 220, FLIsTable), - - # Desaturated bedside table - Series 7 - 1260 : ("phase_5.5/models/estate/TABLE_Bedroom_Desat", - None, - { 0 : (("**/Bedroom_Table", woodColors[0]),), - 1 : (("**/Bedroom_Table", woodColors[1]),), - 2 : (("**/Bedroom_Table", woodColors[2]),), - 3 : (("**/Bedroom_Table", woodColors[3]),), - 4 : (("**/Bedroom_Table", woodColors[4]),), - 5 : (("**/Bedroom_Table", woodColors[5]),), - }, - 220, FLIsTable), - - - ## IN GAME INTERFACE DEVICES ## - # Jellybean Bank, 1000 beans - Initial Furniture - 1300 : ("phase_5.5/models/estate/jellybeanBank", - None, None, 0, FLBank, 0.75), - - # Jellybean Bank, 2500 beans - Series 1 - 1310 : ("phase_5.5/models/estate/jellybeanBank", - None, None, 400, FLBank, 1.0), - - # Jellybean Bank, 5000 beans - Series 1 - 1320 : ("phase_5.5/models/estate/jellybeanBank", - None, None, 800, FLBank, 1.125), - - # Jellybean Bank, 7500 beans - Series 1 - 1330 : ("phase_5.5/models/estate/jellybeanBank", - None, None, 1600, FLBank, 1.25), - - # Jellybean Bank, 10000 beans - Series 1 - 1340 : ("phase_5.5/models/estate/jellybeanBank", - None, None, 3200, FLBank, 1.5), - - # Phone - Initial Furniture - 1399 : ("phase_5.5/models/estate/prop_phone-mod", - None, None, 0, FLPhone), - - - ## PAINTINGS ## - # Painting: Cezanne Toon - Series 1 - 1400 : ("phase_5.5/models/estate/cezanne_toon", - None, None, 425, FLPainting, 2.0), - - # Painting: Flowers - Series 1 - 1410 : ("phase_5.5/models/estate/flowers", - None, None, 425, FLPainting, 2.0), - - # Painting: Modern Mickey - Series 1 - 1420 : ("phase_5.5/models/estate/modernistMickey", - None, None, 425, FLPainting, 2.0), - - # Painting: Rembrandt Toon - Series 1 - 1430 : ("phase_5.5/models/estate/rembrandt_toon", - None, None, 425, FLPainting, 2.0), - - # Painting: Toon Landscape - Series 2 - 1440 : ("phase_5.5/models/estate/landscape", - None, None, 425, FLPainting, 100.0), - - # Painting: Whistler's Horse - Series 2 - 1441 : ("phase_5.5/models/estate/whistler-horse", - None, None, 425, FLPainting, 2.0), - - # Painting: Degas Toon Star - Series 2 - 1442 : ("phase_5.5/models/estate/degasHorseStar", - None, None, 425, FLPainting, 2.5), - - # Painting: Toon Pie - Series 2 - 1443 : ("phase_5.5/models/estate/MagPie", - None, None, 425, FLPainting, 2.0), - - # Painting: Valentines Day - Mickey and Minney - 1450 : ("phase_5.5/models/estate/tt_m_prp_int_painting_valentine", - None, None, 425, FLPainting), - - - ## APPLIANCES ## - # Radio A - Series 2 - 1500 : ("phase_5.5/models/estate/RADIO_A", - None, None, 25, FLOnTable, 15.0), - - # Radio B - Series 1 - 1510 : ("phase_5.5/models/estate/RADIO_B", - None, None, 25, FLOnTable, 15.0), - - # Radio C - Series 2 - 1520 : ("phase_5.5/models/estate/radio_c", - None, None, 25, FLOnTable, 15.0), - - # Bug Room TV - Series 2 - 1530 : ("phase_5.5/models/estate/bugRoomTV", - None, None, 675), - - - ## VASES ## - # Vase A short - Series 1 - 1600 : ("phase_5.5/models/estate/vaseA_short", - None, None, 120, FLOnTable), - - # Vase A tall - Series 1 - 1610 : ("phase_5.5/models/estate/vaseA_tall", - None, None, 120, FLOnTable), - - # Vase B short - Series 2 - 1620 : ("phase_5.5/models/estate/vaseB_short", - None, None, 120, FLOnTable), - - # Vase B tall - Series 2 - 1630 : ("phase_5.5/models/estate/vaseB_tall", - None, None, 120, FLOnTable), - - # Vase C short - Series 2 - 1640 : ("phase_5.5/models/estate/vaseC_short", - None, None, 120, FLOnTable), - - # Vase D short - Series 2 - 1650 : ("phase_5.5/models/estate/vaseD_short", - None, None, 120, FLOnTable), - - # Underwater coral vase - Series 3 - 1660 : ("phase_5.5/models/estate/UWcoralVase", - None, None, 120, (FLOnTable | FLBillboard)), - - # Underwater shell vase - Series 3 - 1661 : ("phase_5.5/models/estate/UWshellVase", - None, None, 120, (FLOnTable | FLBillboard) ), - - # Valentines Day Vase - Rose Vase - 1670 : ("phase_5.5/models/estate/tt_m_prp_int_roseVase_valentine", - None, None, 200, (FLOnTable)), - - # Valentines Day Vase - Rose Water Can - 1680 : ("phase_5.5/models/estate/tt_m_prp_int_roseWatercan_valentine", - None, None, 200, (FLOnTable)), - - - ## KITSCH ## - # Popcorn cart - Series 2 - 1700 : ("phase_5.5/models/estate/popcornCart", - None, None, 400), - - # Bug Room Ladybug - Series 2 - 1710 : ("phase_5.5/models/estate/bugRoomLadyBug", - None, None, 260), - - # Underwater skateboarder statue - Series 3 - 1720 : ("phase_5.5/models/estate/UWfountain", - None, None, 450), - - # Underwater clothes dryer - Series 3 - 1725 : ("phase_5.5/models/estate/UWOceanDryer", - None, None, 400), - - - ## Fishbowls ## - # Underwater skull fish bowl - Series 3 - 1800 : ("phase_5.5/models/estate/UWskullBowl", - None, None, 120, FLOnTable), - - # Underwater lizard fish bowl - Series 3 - 1810 : ("phase_5.5/models/estate/UWlizardBowl", - None, None, 120, FLOnTable), - - - ## Wall hangings ## - # Underwater swordFish wall hanging - Series 3 - 1900 : ("phase_5.5/models/estate/UWswordFish", - None, None, 425, FLPainting, .5), - - # Underwater hammerhead wall hanging - Series 3 - 1910 : ("phase_5.5/models/estate/UWhammerhead", - None, None, 425, FLPainting), - - # Western hanging horns - Series 4 - 1920 : ("phase_5.5/models/estate/West_hangingHorns", - None, None, 475, FLPainting), - - # Western sombrero - Series 4 - 1930 : ("phase_5.5/models/estate/West_Sombrero", - None, None, 425, FLPainting), - - # Western fancy sombrero - Series 4 - 1940 : ("phase_5.5/models/estate/West_fancySombrero", - None, None, 450, FLPainting), - - # Western coyote paw - Series 4 - 1950 : ("phase_5.5/models/estate/West_CoyotePawdecor", - None, None, 475, FLPainting), - - # Western horse shoe - Series 4 - 1960 : ("phase_5.5/models/estate/West_Horseshoe", - None, None, 475, FLPainting), - - # Western bison portrait - Series 4 - 1970 : ("phase_5.5/models/estate/West_bisonPortrait", - None, None, 475, FLPainting), - - - - ## Play Area Items ## - # Candy swingset - Series 6 - 2000 : ("phase_5.5/models/estate/candySwingSet", - None, None, 300), - - # Candy cake slide - Series 6 - 2010 : ("phase_5.5/models/estate/cakeSlide", - None, None, 200), - - - ## Bathing Items ## - # Candy banana split shower - Series 6 - 3000 : ("phase_5.5/models/estate/BanannaSplitShower", - None, None, 400), - - - ## SPECIAL HOLIDAY THEMED ITEMS FOLLOW ## - # short pumpkin - Halloween - 10000 : ("phase_4/models/estate/pumpkin_short", - None, None, 200, FLOnTable), - - # tall pumpkin - Halloween - 10010 : ("phase_4/models/estate/pumpkin_tall", - None, None, 250, FLOnTable), - - # winter tree - 10020 : ("phase_5.5/models/estate/tt_m_prp_int_winter_tree", - None, None, 500, None, None, 0.1), - - # winter wreath - 10030 : ("phase_5.5/models/estate/tt_m_prp_int_winter_wreath", - None, None, 200, FLPainting), - - } -# If you add any new Animated furniture, update CatalogAnimatedFurniture.AnimatedFurnitureItemKeys +MaxBankId = 1340 +FurnitureTypes = {100: ('phase_5.5/models/estate/chairA', None, None, 80), 105: ('phase_5.5/models/estate/chairAdesat', None, {0: (('**/cushion*', furnitureColors[0]), ('**/arm*', furnitureColors[0])), 1: (('**/cushion*', furnitureColors[1]), ('**/arm*', furnitureColors[1])), 2: (('**/cushion*', furnitureColors[2]), ('**/arm*', furnitureColors[2])), 3: (('**/cushion*', furnitureColors[3]), ('**/arm*', furnitureColors[3])), 4: (('**/cushion*', furnitureColors[4]), ('**/arm*', furnitureColors[4])), 5: (('**/cushion*', furnitureColors[5]), ('**/arm*', furnitureColors[5]))}, 160), 110: ('phase_3.5/models/modules/chair', None, None, 40), 120: ('phase_5.5/models/estate/deskChair', None, None, 60), 130: ('phase_5.5/models/estate/BugRoomChair', None, None, 160), 140: ('phase_5.5/models/estate/UWlobsterChair', None, None, 200), 145: ('phase_5.5/models/estate/UWlifeSaverChair', None, None, 200), 150: ('phase_5.5/models/estate/West_saddleStool2', None, None, 160), 160: ('phase_5.5/models/estate/West_nativeChair', None, None, 160), 170: ('phase_5.5/models/estate/cupcakeChair', None, None, 240), 200: ('phase_5.5/models/estate/regular_bed', None, None, 400), 205: ('phase_5.5/models/estate/regular_bed_desat', None, {0: (('**/bar*', woodColors[0]), ('**/post*', woodColors[0]), ('**/*support', woodColors[0]), ('**/top', woodColors[0]), ('**/bottom', woodColors[0]), ('**/pPlane*', woodColors[0])), 1: (('**/bar*', woodColors[1]), ('**/post*', woodColors[1]), ('**/*support', woodColors[1]), ('**/top', woodColors[1]), ('**/bottom', woodColors[1]), ('**/pPlane*', woodColors[1])), 2: (('**/bar*', woodColors[2]), ('**/post*', woodColors[2]), ('**/*support', woodColors[2]), ('**/top', woodColors[2]), ('**/bottom', woodColors[2]), ('**/pPlane*', woodColors[2])), 3: (('**/bar*', woodColors[3]), ('**/post*', woodColors[3]), ('**/*support', woodColors[3]), ('**/top', woodColors[3]), ('**/bottom', woodColors[3]), ('**/pPlane*', woodColors[3])), 4: (('**/bar*', woodColors[4]), ('**/post*', woodColors[4]), ('**/*support', woodColors[4]), ('**/top', woodColors[4]), ('**/bottom', woodColors[4]), ('**/pPlane*', woodColors[4])), 5: (('**/bar*', woodColors[5]), ('**/post*', woodColors[5]), ('**/*support', woodColors[5]), ('**/top', woodColors[5]), ('**/bottom', woodColors[5]), ('**/pPlane*', woodColors[5]))}, 800), 210: ('phase_5.5/models/estate/girly_bed', None, None, 450), 220: ('phase_5.5/models/estate/bathtub_bed', None, None, 550), 230: ('phase_5.5/models/estate/bugRoomBed', None, None, 600), 240: ('phase_5.5/models/estate/UWBoatBed', None, None, 600), 250: ('phase_5.5/models/estate/West_cactusHammoc', None, None, 550), 260: ('phase_5.5/models/estate/icecreamBed', None, None, 700), 300: ('phase_5.5/models/estate/Piano', None, None, 1000, FLIsTable), 310: ('phase_5.5/models/estate/Organ', None, None, 2500), 400: ('phase_5.5/models/estate/FireplaceSq', None, None, 800), 410: ('phase_5.5/models/estate/FireplaceGirlee', None, None, 800), 420: ('phase_5.5/models/estate/FireplaceRound', None, None, 800), 430: ('phase_5.5/models/estate/bugRoomFireplace', None, None, 800), 440: ('phase_5.5/models/estate/CarmelAppleFireplace', None, None, 800), 500: ('phase_5.5/models/estate/closetBoy', None, None, 500, FLCloset, 0.85), 502: ('phase_5.5/models/estate/closetBoy', None, None, 500, FLCloset, 1.0), 510: ('phase_5.5/models/estate/closetGirl', None, None, 500, FLCloset, 0.85), 512: ('phase_5.5/models/estate/closetGirl', None, None, 500, FLCloset, 1.0), 600: ('phase_3.5/models/modules/lamp_short', None, None, 45, FLOnTable), 610: ('phase_3.5/models/modules/lamp_tall', None, None, 45), 620: ('phase_5.5/models/estate/lampA', None, None, 35, FLOnTable), 625: ('phase_5.5/models/estate/lampADesat', None, {0: (('**/top', furnitureColors[0]),), 1: (('**/top', furnitureColors[1]),), 2: (('**/top', furnitureColors[2]),), 3: (('**/top', furnitureColors[3]),), 4: (('**/top', furnitureColors[4]),), 5: (('**/top', furnitureColors[5]),)}, 70, FLOnTable), 630: ('phase_5.5/models/estate/bugRoomDaisyLamp1', None, None, 55), 640: ('phase_5.5/models/estate/bugRoomDaisyLamp2', None, None, 55), 650: ('phase_5.5/models/estate/UWlamp_jellyfish', None, None, 55, FLOnTable), 660: ('phase_5.5/models/estate/UWlamps_jellyfishB', None, None, 55, FLOnTable), 670: ('phase_5.5/models/estate/West_cowboyLamp', None, None, 55, FLOnTable), 700: ('phase_3.5/models/modules/couch_1person', None, None, 230), 705: ('phase_5.5/models/estate/couch_1personDesat', None, {0: (('**/*couch', furnitureColors[0]),), 1: (('**/*couch', furnitureColors[1]),), 2: (('**/*couch', furnitureColors[2]),), 3: (('**/*couch', furnitureColors[3]),), 4: (('**/*couch', furnitureColors[4]),), 5: (('**/*couch', furnitureColors[5]),)}, 460), 710: ('phase_3.5/models/modules/couch_2person', None, None, 230), 715: ('phase_5.5/models/estate/couch_2personDesat', None, {0: (('**/*couch', furnitureColors[0]),), 1: (('**/*couch', furnitureColors[1]),), 2: (('**/*couch', furnitureColors[2]),), 3: (('**/*couch', furnitureColors[3]),), 4: (('**/*couch', furnitureColors[4]),), 5: (('**/*couch', furnitureColors[5]),)}, 460), 720: ('phase_5.5/models/estate/West_HayCouch', None, None, 420), 730: ('phase_5.5/models/estate/twinkieCouch', None, None, 480), 800: ('phase_3.5/models/modules/desk_only_wo_phone', None, None, 65, FLIsTable), 810: ('phase_5.5/models/estate/BugRoomDesk', None, None, 125, FLIsTable), 900: ('phase_3.5/models/modules/umbrella_stand', None, None, 30), 910: ('phase_3.5/models/modules/coatrack', None, None, 75), 920: ('phase_3.5/models/modules/paper_trashcan', None, None, 30), 930: ('phase_5.5/models/estate/BugRoomRedMushroomPot', None, None, 60), 940: ('phase_5.5/models/estate/BugRoomYellowMushroomPot', None, None, 60), 950: ('phase_5.5/models/estate/UWcoralClothRack', None, None, 75), 960: ('phase_5.5/models/estate/west_barrelStand', None, None, 75), 970: ('phase_5.5/models/estate/West_fatCactus', None, None, 75), 980: ('phase_5.5/models/estate/West_Tepee', None, None, 150), 1000: ('phase_3.5/models/modules/rug', None, None, 75, FLRug), 1010: ('phase_5.5/models/estate/rugA', None, None, 75, FLRug), 1015: ('phase_5.5/models/estate/rugADesat', None, {0: (('**/pPlane*', furnitureColors[0]),), 1: (('**/pPlane*', furnitureColors[1]),), 2: (('**/pPlane*', furnitureColors[2]),), 3: (('**/pPlane*', furnitureColors[3]),), 4: (('**/pPlane*', furnitureColors[4]),), 5: (('**/pPlane*', furnitureColors[5]),)}, 150, FLRug), 1020: ('phase_5.5/models/estate/rugB', None, None, 75, FLRug, 2.5), 1030: ('phase_5.5/models/estate/bugRoomLeafMat', None, None, 75, FLRug), 1100: ('phase_5.5/models/estate/cabinetRwood', None, None, 825), 1110: ('phase_5.5/models/estate/cabinetYwood', None, None, 825), 1120: ('phase_3.5/models/modules/bookcase', None, None, 650, FLIsTable), 1130: ('phase_3.5/models/modules/bookcase_low', None, None, 650, FLIsTable), 1140: ('phase_5.5/models/estate/icecreamChest', None, None, 750), 1200: ('phase_3.5/models/modules/ending_table', None, None, 60, FLIsTable), 1210: ('phase_5.5/models/estate/table_radio', None, None, 60, FLIsTable, 50.0), 1215: ('phase_5.5/models/estate/table_radioDesat', None, {0: (('**/RADIOTABLE_*', woodColors[0]),), 1: (('**/RADIOTABLE_*', woodColors[1]),), 2: (('**/RADIOTABLE_*', woodColors[2]),), 3: (('**/RADIOTABLE_*', woodColors[3]),), 4: (('**/RADIOTABLE_*', woodColors[4]),), 5: (('**/RADIOTABLE_*', woodColors[5]),)}, 120, FLIsTable, 50.0), 1220: ('phase_5.5/models/estate/coffeetableSq', None, None, 180, FLIsTable), 1230: ('phase_5.5/models/estate/coffeetableSq_BW', None, None, 180, FLIsTable), 1240: ('phase_5.5/models/estate/UWtable', None, None, 180, FLIsTable), 1250: ('phase_5.5/models/estate/cookieTableA', None, None, 220, FLIsTable), 1260: ('phase_5.5/models/estate/TABLE_Bedroom_Desat', None, {0: (('**/Bedroom_Table', woodColors[0]),), 1: (('**/Bedroom_Table', woodColors[1]),), 2: (('**/Bedroom_Table', woodColors[2]),), 3: (('**/Bedroom_Table', woodColors[3]),), 4: (('**/Bedroom_Table', woodColors[4]),), 5: (('**/Bedroom_Table', woodColors[5]),)}, 220, FLIsTable), 1300: ('phase_5.5/models/estate/jellybeanBank', None, None, 0, FLBank, 0.75), 1310: ('phase_5.5/models/estate/jellybeanBank', None, None, 400, FLBank, 1.0), 1320: ('phase_5.5/models/estate/jellybeanBank', None, None, 800, FLBank, 1.125), 1330: ('phase_5.5/models/estate/jellybeanBank', None, None, 1600, FLBank, 1.25), 1340: ('phase_5.5/models/estate/jellybeanBank', None, None, 3200, FLBank, 1.5), 1399: ('phase_5.5/models/estate/prop_phone-mod', None, None, 0, FLPhone), 1400: ('phase_5.5/models/estate/cezanne_toon', None, None, 425, FLPainting, 2.0), 1410: ('phase_5.5/models/estate/flowers', None, None, 425, FLPainting, 2.0), 1420: ('phase_5.5/models/estate/modernistMickey', None, None, 425, FLPainting, 2.0), 1430: ('phase_5.5/models/estate/rembrandt_toon', None, None, 425, FLPainting, 2.0), 1440: ('phase_5.5/models/estate/landscape', None, None, 425, FLPainting, 100.0), 1441: ('phase_5.5/models/estate/whistler-horse', None, None, 425, FLPainting, 2.0), 1442: ('phase_5.5/models/estate/degasHorseStar', None, None, 425, FLPainting, 2.5), 1443: ('phase_5.5/models/estate/MagPie', None, None, 425, FLPainting, 2.0), 1500: ('phase_5.5/models/estate/RADIO_A', None, None, 25, FLOnTable, 15.0), 1510: ('phase_5.5/models/estate/RADIO_B', None, None, 25, FLOnTable, 15.0), 1520: ('phase_5.5/models/estate/radio_c', None, None, 25, FLOnTable, 15.0), 1530: ('phase_5.5/models/estate/bugRoomTV', None, None, 675), 1600: ('phase_5.5/models/estate/vaseA_short', None, None, 120, FLOnTable), 1610: ('phase_5.5/models/estate/vaseA_tall', None, None, 120, FLOnTable), 1620: ('phase_5.5/models/estate/vaseB_short', None, None, 120, FLOnTable), 1630: ('phase_5.5/models/estate/vaseB_tall', None, None, 120, FLOnTable), 1640: ('phase_5.5/models/estate/vaseC_short', None, None, 120, FLOnTable), 1650: ('phase_5.5/models/estate/vaseD_short', None, None, 120, FLOnTable), 1660: ('phase_5.5/models/estate/UWcoralVase', None, None, 120, FLOnTable | FLBillboard), 1661: ('phase_5.5/models/estate/UWshellVase', None, None, 120, FLOnTable | FLBillboard), 1700: ('phase_5.5/models/estate/popcornCart', None, None, 400), 1710: ('phase_5.5/models/estate/bugRoomLadyBug', None, None, 260), 1720: ('phase_5.5/models/estate/UWfountain', None, None, 450), 1725: ('phase_5.5/models/estate/UWOceanDryer', None, None, 400), 1800: ('phase_5.5/models/estate/UWskullBowl', None, None, 120, FLOnTable), 1810: ('phase_5.5/models/estate/UWlizardBowl', None, None, 120, FLOnTable), 1900: ('phase_5.5/models/estate/UWswordFish', None, None, 425, FLPainting, 0.5), 1910: ('phase_5.5/models/estate/UWhammerhead', None, None, 425, FLPainting), 1920: ('phase_5.5/models/estate/West_hangingHorns', None, None, 475, FLPainting), 1930: ('phase_5.5/models/estate/West_Sombrero', None, None, 425, FLPainting), 1940: ('phase_5.5/models/estate/West_fancySombrero', None, None, 450, FLPainting), 1950: ('phase_5.5/models/estate/West_CoyotePawdecor', None, None, 475, FLPainting), 1960: ('phase_5.5/models/estate/West_Horseshoe', None, None, 475, FLPainting), 1970: ('phase_5.5/models/estate/West_bisonPortrait', None, None, 475, FLPainting), 2000: ('phase_5.5/models/estate/candySwingSet', None, None, 300), 2010: ('phase_5.5/models/estate/cakeSlide', None, None, 200), 3000: ('phase_5.5/models/estate/BanannaSplitShower', None, None, 400), 10000: ('phase_5.5/models/estate/pumpkin_short', None, None, 200, FLOnTable), 10010: ('phase_5.5/models/estate/pumpkin_tall', None, None, 250, FLOnTable)} class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem): - """CatalogFurnitureItem + __module__ = __name__ - This represents a piece of furniture that the player may purchase - and store in his house or possibly in his lawn. Each item of - furniture corresponds to a particular model file (possibly with - some pieces hidden and/or texture swapped); there may also be a - number of user-customizable options for a given piece of furniture - (e.g. changing colors). - - """ - - def makeNewItem(self, furnitureType, colorOption = None, posHpr = None): + def makeNewItem(self, furnitureType, colorOption=None, posHpr=None): self.furnitureType = furnitureType self.colorOption = colorOption self.posHpr = posHpr - CatalogAtticItem.CatalogAtticItem.makeNewItem(self) def needsCustomize(self): - # Returns true if the item still needs to be customized by the - # user (e.g. by choosing a color). - return self.colorOption == None and \ - FurnitureTypes[self.furnitureType][FTColorOptions] != None + return self.colorOption == None and FurnitureTypes[self.furnitureType][FTColorOptions] != None + return def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def replacesExisting(self): - # Returns true if an item of this type will, when purchased, - # replace an existing item of the same type, or false if items - # accumulate. - return (self.getFlags() & (FLCloset | FLBank)) != 0 + return self.getFlags() & (FLCloset | FLBank) != 0 def hasExisting(self): - # If replacesExisting returns true, this returns true if an - # item of this class is already owned by the avatar, false - # otherwise. If replacesExisting returns false, this is - # undefined. - - # We always have a closet and bank. return 1 def getYourOldDesc(self): - # If replacesExisting returns true, this returns the name of - # the already existing object, in sentence construct: "your - # old ...". If replacesExisting returns false, this is undefined. - - if (self.getFlags() & FLCloset): + if self.getFlags() & FLCloset: return TTLocalizer.FurnitureYourOldCloset - elif (self.getFlags() & FLBank): + elif self.getFlags() & FLBank: return TTLocalizer.FurnitureYourOldBank else: return None + return def notOfferedTo(self, avatar): - if (self.getFlags() & FLCloset): - # Boys can only buy boy wardrobes, and girls can only buy - # girl wardrobes. Sorry. - decade = self.furnitureType - (self.furnitureType % 10) - forBoys = (decade == 500) + if self.getFlags() & FLCloset: + decade = self.furnitureType - self.furnitureType % 10 + forBoys = decade == 500 if avatar.getStyle().getGender() == 'm': return not forBoys else: return forBoys - - # All other items are completely androgynous. return 0 def isDeletable(self): - # Returns true if the item can be deleted from the attic, - # false otherwise. - return (self.getFlags() & (FLBank | FLCloset | FLPhone)) == 0 + return self.getFlags() & (FLBank | FLCloset | FLPhone) == 0 def getMaxBankMoney(self): - # This special method is only defined for bank type items, - # and returns the capacity of the bank in jellybeans. return BankToMoney.get(self.furnitureType) def getMaxClothes(self): - # This special method is only defined for wardrobe type items, - # and returns the number of clothing items the wardrobe holds. index = self.furnitureType % 10 if index == 0: return 10 elif index == 2: return 15 - elif index == 4: - return 20 - elif index == 6: - return 25 else: return None + return def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. if self.getFlags() & FLBank: - # No point in buying an equal or smaller bank. if self.getMaxBankMoney() <= avatar.getMaxBankMoney(): return 1 - - # Also if this particular bank is on order, we don't need - # another one. if self in avatar.onOrder or self in avatar.mailboxContents: return 1 - if self.getFlags() & FLCloset: - # No point in buying an equal or smaller wardrobe. if self.getMaxClothes() <= avatar.getMaxClothes(): return 1 - - # Also if this particular wardrobe is on order, we don't need - # another one. if self in avatar.onOrder or self in avatar.mailboxContents: return 1 - return 0 def getTypeName(self): @@ -933,60 +110,28 @@ def getName(self): return TTLocalizer.FurnitureNames[self.furnitureType] def getFlags(self): - # Returns the special flag word associated with this furniture - # item. This controls special properties of the item, and is - # one or more of the bits defined above with the symbols FL*. defn = FurnitureTypes[self.furnitureType] if FTFlags < len(defn): - flag = defn[FTFlags] - if (flag == None): - return 0 - else: - return flag + return defn[FTFlags] else: return 0 - - def isGift(self): - if self.getFlags() & (FLCloset | FLBank): - return 0 - else: - return 1 def recordPurchase(self, avatar, optional): - # Updates the appropriate field on the avatar to indicate the - # purchase (or delivery). This makes the item available to - # use by the avatar. This method is only called on the AI side. - house, retcode = self.getHouseInfo(avatar) - self.giftTag = None + (house, retcode) = self.getHouseInfo(avatar) if retcode >= 0: house.addAtticItem(self) - if (self.getFlags() & FLBank): - # A special case: if we just bought a new bank, change - # our maximum bank money accordingly. This property - # is stored on the toon. + if self.getFlags() & FLBank: avatar.b_setMaxBankMoney(self.getMaxBankMoney()) - if (self.getFlags() & FLCloset): - # Another special case: if we just bought a new - # wardrobe, change our maximum clothing items - # accordingly. This property is also stored on the - # toon. + if self.getFlags() & FLCloset: avatar.b_setMaxClothes(self.getMaxClothes()) - return retcode def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. - return 24 * 60 # 24 hours. + return 24 * 60 def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. model = self.loadModel() spin = 1 - flags = self.getFlags() if flags & FLRug: spin = 0 @@ -996,16 +141,10 @@ def getPicture(self, avatar): elif flags & FLBillboard: spin = 0 model.setBin('unsorted', 0, 1) - -## assert (not self.hasPicture) - self.hasPicture=True - return self.makeFrameModel(model, spin) - def output(self, store = ~0): - return "CatalogFurnitureItem(%s%s)" % ( - self.furnitureType, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogFurnitureItem(%s%s)' % (self.furnitureType, self.formatOptionalData(store)) def getFilename(self): type = FurnitureTypes[self.furnitureType] @@ -1022,122 +161,67 @@ def getBasePrice(self): def loadModel(self): type = FurnitureTypes[self.furnitureType] - model = loader.loadModel(type[FTModelName]) + model = loader.loadModelCopy(type[FTModelName]) self.applyColor(model, type[FTColor]) if type[FTColorOptions] != None: if self.colorOption == None: - # The user hasn't picked a color option; choose a - # random one. - option = random.choice(type[FTColorOptions].values()) + option = random.choice(list(type[FTColorOptions].values())) else: - # Use the user's specified color option. option = type[FTColorOptions].get(self.colorOption) - self.applyColor(model, option) - - if (FTScale < len(type)): - scale = type[FTScale] - if not (scale == None): - # Also apply a scale. - model.setScale(scale) - model.flattenLight() + if FTScale < len(type): + model.setScale(type[FTScale]) + model.flattenLight() return model + return def decodeDatagram(self, di, versionNumber, store): CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store) self.furnitureType = di.getInt16() self.colorOption = None - - # The following will raise an exception if self.furnitureType - # is not valid. type = FurnitureTypes[self.furnitureType] - if type[FTColorOptions]: if store & CatalogItem.Customization: self.colorOption = di.getUint8() - - # The following will raise an exception if - # self.colorOption is not valid. option = type[FTColorOptions][self.colorOption] - + return + def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) dg.addInt16(self.furnitureType) if FurnitureTypes[self.furnitureType][FTColorOptions]: if store & CatalogItem.Customization: dg.addUint8(self.colorOption) - + def nextAvailableBank(avatar, duplicateItems): bankId = MoneyToBank.get(avatar.getMaxBankMoney()) if bankId == None or bankId == MaxBankId: - # No more banks for this avatar. return None - bankId += 10 item = CatalogFurnitureItem(bankId) - - # But if this bank is already on order, don't offer the same bank - # again. Skip to the next one instead. - while item in avatar.onOrder or \ - item in avatar.mailboxContents: + while item in avatar.onOrder or item in avatar.mailboxContents: bankId += 10 if bankId > MaxBankId: return None item = CatalogFurnitureItem(bankId) return item + return + def getAllBanks(): list = [] - for bankId in BankToMoney.keys(): + for bankId in list(BankToMoney.keys()): list.append(CatalogFurnitureItem(bankId)) - return list - -def nextAvailableCloset(avatar, duplicateItems): - # detemine which closet index in the tuple to use - if avatar.getStyle().getGender() == 'm': - index = 0 - else: - index = 1 - # handle a race a condition - dist toon ai cleaned up? - if not hasattr(avatar, "maxClothes"): - return None - closetIds = ClothesToCloset.get(avatar.getMaxClothes()) - # we can't guarantee order on these dict values, so we'll sort them as a list - closetIds = list(closetIds) - closetIds.sort() - closetId = closetIds[index] - if closetId == None or closetId == MaxClosetIds[index]: - # No more closets for this avatar. - return None - - closetId += 2 - item = CatalogFurnitureItem(closetId) - # But if this closet is already on order, don't offer the same bank - # again. Skip to the next one instead. - while item in avatar.onOrder or \ - item in avatar.mailboxContents: - closetId += 2 - if closetId > MaxClosetIds[index]: - return None - item = CatalogFurnitureItem(closetId) - - return item - -def getAllClosets(): - list = [] - for closetId in ClosetsToClothes.keys(): - list.append(CatalogFurnitureItem(closetId)) return list + def getAllFurnitures(index): - # This function returns a list of all possible - # CatalogFurnitureItems (that is, all color variants) - # for the indicated type index(es). list = [] colors = FurnitureTypes[index][FTColorOptions] for n in range(len(colors)): list.append(CatalogFurnitureItem(index, n)) - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogGardenItem.py b/toontown/src/catalog/CatalogGardenItem.py index 1c33a6c1..0a0d4371 100644 --- a/toontown/src/catalog/CatalogGardenItem.py +++ b/toontown/src/catalog/CatalogGardenItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer @@ -200,8 +200,8 @@ def isSkillTooLow(self, avatar): result = True # make the Toon Statue special, requiring 639 skill if not result and \ - GardenGlobals.Specials.has_key(self.gardenIndex) and \ - GardenGlobals.Specials[self.gardenIndex].has_key('minSkill'): + self.gardenIndex in GardenGlobals.Specials and \ + 'minSkill' in GardenGlobals.Specials[self.gardenIndex]: minSkill = GardenGlobals.Specials[self.gardenIndex]['minSkill'] if avatar.shovelSkill < minSkill: result = True diff --git a/toontown/src/catalog/CatalogGardenStarterItem.py b/toontown/src/catalog/CatalogGardenStarterItem.py index 18913717..507a0f14 100644 --- a/toontown/src/catalog/CatalogGardenStarterItem.py +++ b/toontown/src/catalog/CatalogGardenStarterItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem import time from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer diff --git a/toontown/src/catalog/CatalogGenerator.py b/toontown/src/catalog/CatalogGenerator.py index 76de5c71..b830d97c 100644 --- a/toontown/src/catalog/CatalogGenerator.py +++ b/toontown/src/catalog/CatalogGenerator.py @@ -1,1552 +1,110 @@ from direct.directnotify import DirectNotifyGlobal -import CatalogItem -import CatalogItemList -from CatalogFurnitureItem import CatalogFurnitureItem, nextAvailableBank, getAllBanks, nextAvailableCloset, getAllClosets -from CatalogAnimatedFurnitureItem import CatalogAnimatedFurnitureItem -from CatalogClothingItem import CatalogClothingItem, getAllClothes -from CatalogChatItem import CatalogChatItem, getChatRange -from CatalogEmoteItem import CatalogEmoteItem -from CatalogWallpaperItem import CatalogWallpaperItem, getWallpapers -from CatalogFlooringItem import CatalogFlooringItem, getFloorings -from CatalogMouldingItem import CatalogMouldingItem, getAllMouldings -from CatalogWainscotingItem import CatalogWainscotingItem, getAllWainscotings -from CatalogWindowItem import CatalogWindowItem -from CatalogPoleItem import nextAvailablePole, getAllPoles -from CatalogPetTrickItem import CatalogPetTrickItem, getAllPetTricks -from CatalogGardenItem import CatalogGardenItem -from CatalogToonStatueItem import CatalogToonStatueItem -from CatalogRentalItem import CatalogRentalItem -from CatalogGardenStarterItem import CatalogGardenStarterItem -from CatalogNametagItem import CatalogNametagItem +from . import CatalogItem, CatalogItemList +from .CatalogFurnitureItem import CatalogFurnitureItem, nextAvailableBank, getAllBanks +from .CatalogClothingItem import CatalogClothingItem, getAllClothes +from .CatalogChatItem import CatalogChatItem, getChatRange +from .CatalogEmoteItem import CatalogEmoteItem +from .CatalogWallpaperItem import CatalogWallpaperItem, getWallpapers +from .CatalogFlooringItem import CatalogFlooringItem, getFloorings +from .CatalogMouldingItem import CatalogMouldingItem, getAllMouldings +from .CatalogWainscotingItem import CatalogWainscotingItem, getAllWainscotings +from .CatalogWindowItem import CatalogWindowItem +from .CatalogPoleItem import nextAvailablePole, getAllPoles +from .CatalogPetTrickItem import CatalogPetTrickItem, getAllPetTricks from direct.actor import Actor from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals -import types -import random -import time +import types, random, time from pandac.PandaModules import * +MetaItems = {100: getAllClothes(101, 102, 103, 104, 105, 106, 107, 108, 109, 109, 111, 115, 201, 202, 203, 204, 205, 206, 207, 208, 209, 209, 211, 215), + 300: getAllClothes(301, 302, 303, 304, 305, 308, 401, 403, 404, 405, 407, 451, 452, 453), + 2000: getChatRange(0, 1999), 2010: getChatRange(2000, 2999), 2020: getChatRange(3000, 3999), 2030: getChatRange(4000, 4999), 2040: getChatRange(6000, 6999), 2050: getChatRange(7000, 7999), 2900: getChatRange(10000, 10099), 2910: getChatRange(11000, 11099), 2920: getChatRange(12000, 12099), 2930: getChatRange(13000, 13099), 3000: getWallpapers(1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100), + 3010: getWallpapers(2200, 2300, 2400, 2500, 2600, 2700, 2800), + 3020: getWallpapers(2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600), 3030: getWallpapers(3700, 3800, 3900), 3500: getAllWainscotings(1000, 1010), 3510: getAllWainscotings(1020), 3520: getAllWainscotings(1030), 3530: getAllWainscotings(1040), 4000: getFloorings(1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100), + 4010: getFloorings(1110, 1120, 1130), 4020: getFloorings(1140, 1150, 1160, 1170, 1180, 1190), 4500: getAllMouldings(1000, 1010), 4510: getAllMouldings(1020, 1030, 1040), 4520: getAllMouldings(1070), 5000: getAllPetTricks()} -# Index numbers that stand for catalog items within this file, -# e.g. for MetaItems, are local to this file only. These index -# numbers are not saved in the database or stored on a toon; they are -# used only to define the relationship between catalog items chosen at -# random. - -MetaItems = { - # Basic shirts - 100: getAllClothes(101, 102, 103, 104, 105, 106, 107, 108, 109, - 109, 111, 115, - 201, 202, 203, 204, 205, 206, 207, 208, 209, - 209, 211, 215), - - # Basic shorts and/or skirts - 300: getAllClothes(301, 302, 303, 304, 305, 308, - 401, 403, 404, 405, 407, 451, 452, 453), - - # Series 1 chat - 2000: getChatRange(0, 1999), - # Series 2 chat - 2010: getChatRange(2000, 2999), - # Series 3 chat - 2020: getChatRange(3000, 3999), - # Series 4 chat - 2030: getChatRange(4000, 4999), - # Series 6 chat - 2040: getChatRange(6000, 6999), - # Series 7 chat - 2050: getChatRange(7000, 7999), - - # Halloween chat - 2900: getChatRange(10000, 10099), - # Fall Festivus chat - 2910: getChatRange(11000, 11099), - # Valentines love chat - 2920: getChatRange(12000, 12049), - # Valentines love chat - 2921: getChatRange(12050, 12099), - # St Patrick's Day chat - 2930: getChatRange(13000, 13099), - # Estate Party Chat - 2940: getChatRange(14000, 14099), - - # Wallpaper Series 1 - 3000: getWallpapers(1000, 1100, 1200, 1300, - 1400, 1500, 1600, 1700, - 1800, 1900, 2000, 2100), - - # Wallpaper Series 2 - 3010: getWallpapers(2200, 2300, 2400, 2500, - 2600, 2700, 2800), - - # Wallpaper Series 3 - 3020: getWallpapers(2900,3000,3100,3200,3300,3400,3500,3600), - - # Wallpaper Series 4 - 3030: getWallpapers(3700, 3800, 3900), - - # Basic wainscoting - Series 1 - 3500 : getAllWainscotings(1000, 1010), - # Basic wainscoting - Series 2 - 3510 : getAllWainscotings(1020), - # Valentines wainscoting - 3520 : getAllWainscotings(1030), - # Underwater wainscoting - 3530 : getAllWainscotings(1040), - - # Basic flooring Series 1 - 4000: getFloorings(1000, 1010, 1020, 1030, - 1040, 1050, 1060, 1070, - 1080, 1090, 1100), - - # Basic flooring Series 2 - 4010: getFloorings(1110, 1120, 1130), - - # Basic flooring Series 3 - 4020: getFloorings(1140, 1150, 1160, 1170, 1180, 1190), - - # Basic moulding - 4500: getAllMouldings(1000, 1010), - 4510: getAllMouldings(1020, 1030, 1040), - 4520: getAllMouldings(1070,), - - # A random pet trick. Presently this selects from the entire pool - # of available tricks; one day we may have level 1 pet tricks and - # level 2 pet tricks (and level 3 tricks, etc.) - 5000: getAllPetTricks(), - - } - -# some of the chat keys above are not sold, these keys are the ones sold in the catalog -MetaItemChatKeysSold = (2000, 2010, 2020, 2030, 2040, 2050, 2900, 2910, 2920, 2921, 2930) - - -def getAllChatItemsSold(): - """Give me a list of every single catalog chat item we offer.""" - result = [] - for key in MetaItemChatKeysSold: - result += MetaItems[key] - return result - -# This class is used in the below schedules to wrap around a catalog -# week or a particular item to indicate that it is a "sale item" or -# that all items in the week are "sale items". class Sale: + __module__ = __name__ + def __init__(self, *args): self.args = args -MonthlySchedule = ( - - # startMM, startDD, endMM, endDD, (item, item, item, ...) - - # Halloween items -- on sale 10/1 through 10/31. - (10, 1, 10, 31, - ((3, 2900), - CatalogChatItem(10003), - CatalogClothingItem(1001, 0), - CatalogClothingItem(1002, 0), - CatalogClothingItem(1743, 0), - CatalogClothingItem(1744, 0), - CatalogClothingItem(1745, 0), - CatalogClothingItem(1746, 0), - CatalogClothingItem(1747, 0), - CatalogClothingItem(1748, 0), - CatalogClothingItem(1739, 0), - CatalogClothingItem(1740, 0), - CatalogClothingItem(1734, 0), - CatalogClothingItem(1735, 0), - CatalogClothingItem(1723, 0), - CatalogClothingItem(1724, 0), - CatalogWallpaperItem(10100), - CatalogWallpaperItem(10200), - CatalogFurnitureItem(10000), - CatalogFurnitureItem(10010), - CatalogNametagItem(9), - - - )), - - # Winter items -- on sale 11/18 through 12/31 - # moved a little earlier to get thanksgiving phrases - # before thanksgiving happens - (11, 18, 1, 1, - ((3, 2910), - CatalogChatItem(11020), # Have a Wonderful Winter! - CatalogClothingItem(1100, 0), - CatalogClothingItem(1101, 0), - CatalogClothingItem(1102, 0), - CatalogClothingItem(1103, 0), - CatalogWallpaperItem(11000), - CatalogWallpaperItem(11100), - CatalogWallpaperItem(11200), - CatalogFlooringItem(10000), - CatalogFlooringItem(10010), - CatalogGardenItem(130, 1), # snowman - CatalogAnimatedFurnitureItem(10020), # winter tree - CatalogFurnitureItem(10030, 0), # winter wreath - )), - - # Valentines items -- on sale 2/1 through 2/16 - (2, 1, 2, 16, - ((3, 2920), - (2, 2921), - CatalogClothingItem(1200, 0), - CatalogClothingItem(1201, 0), - CatalogClothingItem(1202, 0), - CatalogClothingItem(1203, 0), - CatalogClothingItem(1204, 0), - CatalogClothingItem(1205, 0), - CatalogWallpaperItem(12000), - CatalogWallpaperItem(12100), - CatalogWallpaperItem(12200), - CatalogWallpaperItem(12300), - CatalogWainscotingItem(1030, 0), - CatalogWainscotingItem(1030, 1), - CatalogMouldingItem(1060, 0), - CatalogMouldingItem(1060, 1), - - # 2009 Valentines Day Items - CatalogClothingItem(1206, 0), # Valentines Day Shirt 1 - CatalogClothingItem(1207, 0), # Valentines Day Shirt 2 - CatalogClothingItem(1208, 0), # Valentines Day Shorts 1 - CatalogClothingItem(1209, 0), # Valentines Day Shorts 2 - CatalogClothingItem(1210, 0), # Valentines Day Skirt 1 - CatalogClothingItem(1211, 0), # Valentines Day Skirt 2 - CatalogClothingItem(1212, 0), # Valentines Day Shirt 3 - 2010 VDay Shirt - CatalogFurnitureItem(1670), # Valentines Day Vase - Rose Vase - CatalogFurnitureItem(1680), # Valentines Day Vase - Rose Water Can - CatalogFurnitureItem(1450), # Valentines Day Painting - Mickey and Minnie - CatalogMouldingItem(1100, 0), # Valentines Day Moulding - Cupid - CatalogMouldingItem(1110, 0), # Valentines Day Moulding - Hearts 1 - CatalogMouldingItem(1120, 0), # Valentines Day Moulding - Hearts 2 - )), - - # St Patrick's items -- on sale 3/8 through 3/21 - (3, 8, 3, 21, - ((3, 2930), - CatalogClothingItem(1300, 0), - CatalogClothingItem(1301, 0), - CatalogClothingItem(1302, 0), - CatalogClothingItem(1303, 0), - CatalogWallpaperItem(13000), - CatalogWallpaperItem(13100), - CatalogWallpaperItem(13200), - CatalogWallpaperItem(13300), - CatalogFlooringItem(11000), - CatalogFlooringItem(11010), - )), - - # T-Shirt Contest items -- on sale 5/25 through 6/25 - (5, 25, 6, 25, - ( - CatalogClothingItem(1400, 0), - CatalogClothingItem(1401, 0), - CatalogClothingItem(1402, 0), - ) - ), - - # T-Shirt 2 Contest items -- on sale 8/1 through 8/31 - (8, 1, 8, 31, - ( - CatalogClothingItem(1403, 0), - CatalogClothingItem(1404, 0), - CatalogClothingItem(1405, 0), - CatalogClothingItem(1406, 0), - ) - ), - - # Furniture Contest items -- on sale 9/24 through 10/24 - (9, 24, 10, 24, - ( - CatalogFurnitureItem(450), # Coral Fireplace - CatalogAnimatedFurnitureItem(460), # Coral Fireplace with fire - CatalogAnimatedFurnitureItem(270), # Trolley Bed - CatalogAnimatedFurnitureItem(990), # Gag Fan - ) - ), - - # Estate Party speedchat items -- on sale 6/15 through 8/15 - (6, 15, 8, 15, - ((4, 2940), - ) - ), - - # July 4th clothing items -- on sale 6/18 through 7/16 - (6, 18, 7, 16, - ( - CatalogClothingItem(1500, 0), - CatalogClothingItem(1501, 0), - CatalogClothingItem(1502, 0), - CatalogClothingItem(1503, 0), - ) - ), - - # Winter Holiday items - on sale 12/17 to 1/20 - (12, 8, 1, 20, - ( - CatalogClothingItem(1104, 0), # Winter Holiday Shorts Style 1 - CatalogClothingItem(1105, 0), # Winter Holiday Shorts Style 2 - CatalogClothingItem(1106, 0), # Winter Holiday Shorts Style 3 - CatalogClothingItem(1107, 0), # Winter Holiday Shorts Style 4 - CatalogClothingItem(1108, 0), # Winter Holiday Skirt Style 1 - CatalogClothingItem(1109, 0), # Winter Holiday Skirt Style 2 - CatalogClothingItem(1110, 0), # Winter Holiday Skirt Style 3 - CatalogClothingItem(1111, 0), # Winter Holiday Skirt Style 4 - - CatalogMouldingItem(1080, 0), # Winter String Lights Moulding 1 - CatalogMouldingItem(1085, 0), # Winter String Lights Moulding 2 - CatalogMouldingItem(1090, 0), # Winter String Lights Moulding 3 - - CatalogFurnitureItem(680), # Candle - - CatalogFurnitureItem(681), # Lit Candle - - CatalogFurnitureItem(1040), # Presents - CatalogFurnitureItem(1050), # Sled - ) - ), - - # Silly Story Loony Labs Atom Shirt - on sale 6/9 to 7/15 - (6, 9, 7, 15, - ( - CatalogClothingItem(1751, 0), # Silly Story Loony Labs Atom Shirt - ) - ), - - # Silly Story Cogbuster Outfit - on sale 6/14 to 7/15 - (6, 14, 7, 15, - ( - CatalogClothingItem(1754, 0), # Silly Story Silly Cogbuster Shirt - CatalogClothingItem(1755, 0), # Silly Story Silly Cogbuster Shorts - CatalogClothingItem(1756, 0), # Silly Story Silly Cogbuster Shorts - - ) - ), - - # Victory Party and Silly Story shirts - on sale 7/21 to 8/17 - (7, 21, 8, 17, - ( - CatalogClothingItem(1749, 0), # Silly Mailbox Shirt - CatalogClothingItem(1750, 0), # Silly Trash Can Shirt - CatalogClothingItem(1757, 0), # Victory Party Shirt 1 - CatalogClothingItem(1758, 0), # Victory Party Shirt 2 - ) - ), - - # Items - on sale 1/1 through 12/31, always available - (1, 1, 12, 31, - ( - # Gardening Items - CatalogGardenItem(100, 1), - CatalogGardenItem(101, 1), - # save accelerator for later - #CatalogGardenItem(102, 1), - CatalogGardenItem(103, 1), - CatalogGardenItem(104, 1), - CatalogToonStatueItem(105, endPoseIndex = 108), - - # Rental Items - CatalogRentalItem(1, 2880, 1000), # Renatl Cannon -## CatalogRentalItem(2, 2880, 1000), # Rental Game Table - CatalogGardenStarterItem(), - - # Basic Nametags - CatalogNametagItem(100), - CatalogNametagItem(0), - - # Loyalty Items # WARNING update CatalogClothingItem.LoyaltyItems if you add more - CatalogClothingItem(1608, 0, 720), # Purple Pajama girl pants - CatalogClothingItem(1605, 0, 720), # Purple Pajama boy pants - CatalogClothingItem(1602, 0, 720), # Purple Glasses Pajama - CatalogClothingItem(1607, 0, 540), # Red Pajama girl pants - CatalogClothingItem(1604, 0, 540), # Red Pajama boy pants - CatalogClothingItem(1601, 0, 540), # Red Horn Pajama - CatalogClothingItem(1606, 0, 360), # Blue Pajama girl pants - CatalogClothingItem(1603, 0, 360), # Blue Pajama boy pants - CatalogClothingItem(1600, 0, 360), # Blue Banana Pajama - - # WARNING update CatalogEmoteItem.LoyaltyItems if you add more loyalty emotes - CatalogEmoteItem(20, 90), # surprise - CatalogEmoteItem(21, 180), # cry - CatalogEmoteItem(22, 360), # delighted - CatalogEmoteItem(23, 540), # furious - CatalogEmoteItem(24, 720), # laugh - ) - ), - ) +MonthlySchedule = ( + ( + 10, 1, 10, 31, ((3, 2900), CatalogClothingItem(1001, 0), CatalogClothingItem(1002, 0), CatalogWallpaperItem(10100), CatalogWallpaperItem(10200), CatalogFurnitureItem(10000), CatalogFurnitureItem(10010))), (12, 1, 1, 1, ((3, 2910), CatalogClothingItem(1100, 0), CatalogClothingItem(1101, 0), CatalogClothingItem(1102, 0), CatalogClothingItem(1103, 0), CatalogWallpaperItem(11000), CatalogWallpaperItem(11100), CatalogWallpaperItem(11200), CatalogFlooringItem(10000), CatalogFlooringItem(10010))), (2, 1, 2, 14, ((3, 2920), CatalogClothingItem(1200, 0), CatalogClothingItem(1201, 0), CatalogClothingItem(1202, 0), CatalogClothingItem(1203, 0), CatalogClothingItem(1204, 0), CatalogClothingItem(1205, 0), CatalogWallpaperItem(12000), CatalogWallpaperItem(12100), CatalogWallpaperItem(12200), CatalogWallpaperItem(12300), CatalogWainscotingItem(1030, 0), CatalogWainscotingItem(1030, 1), CatalogMouldingItem(1060, 0), CatalogMouldingItem(1060, 1))), (3, 8, 3, 21, ((3, 2930), CatalogClothingItem(1300, 0), CatalogClothingItem(1301, 0), CatalogClothingItem(1302, 0), CatalogClothingItem(1303, 0), CatalogWallpaperItem(13000), CatalogWallpaperItem(13100), CatalogWallpaperItem(13200), CatalogWallpaperItem(13300), CatalogFlooringItem(11000), CatalogFlooringItem(11010))), (5, 25, 6, 25, (CatalogClothingItem(1400, 0), CatalogClothingItem(1401, 0), CatalogClothingItem(1402, 0))), (6, 18, 7, 4, (CatalogClothingItem(1500, 0), CatalogClothingItem(1501, 0), CatalogClothingItem(1502, 0), CatalogClothingItem(1503, 0)))) WeeklySchedule = ( - - ############################# SERIES 1 ############################# - - # Series 1, week 1 (overall week 1) - (100, # Basic shirt - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogEmoteItem(5), # Shrug - CatalogFurnitureItem(210, 0), # Girly bed - CatalogFurnitureItem(220, 0), # Bathtub bed - ), - - # Series 1, week 2 (overall week 2) - (100, # Basic shirt - (5, 2000), # Basic chat - CatalogFurnitureItem(1400), # Painting: Cezanne Toon - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(600), # Short lamp - CatalogFurnitureItem(610), # Tall lamp - CatalogClothingItem(116, 0), # Exclusive boy shirt (yellow hooded sweatshirt) - CatalogClothingItem(216, 0), # Exclusive girl shirt (yellow hooded sweatshirt) - ), - - # Series 1, week 3 (overall week 3) - (300, # Basic bottoms - (5, 2000), # Basic chat - CatalogFurnitureItem(1410), # Painting: Flowers - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(1100), # Cabinet Red Wood - CatalogFurnitureItem(1020), # Rug Round B - CatalogClothingItem(408, 0), # Exclusive girl skirt (blue and tan skirt) - 5000, # Pet trick - ), - - # Series 1, week 4 (overall week 4) - (100, # Basic shirt - (5, 2000), # Basic chat - CatalogWindowItem(40), # Window view: City - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(110), # Chair - CatalogFurnitureItem(100), # Chair A - nextAvailablePole, - ), - - # Series 1, week 5 (overall week 5) - (100, # Basic shirt - (5, 2000), # Basic chat - CatalogFurnitureItem(1420), # Painting: Modern Mickey - CatalogEmoteItem(9), # Applause - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(700), # Small couch - CatalogFurnitureItem(710), # Large couch - ), - - # Series 1, week 6 (overall week 6) - (300, # Basic bottoms - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(410), # Girly Fireplace - CatalogAnimatedFurnitureItem(490), # Girly Fireplace with fire - CatalogFurnitureItem(1000), # Rug square - nextAvailableBank, # Bank - CatalogClothingItem(117, 0), # Exclusive boy shirt (yellow with palm) - CatalogClothingItem(217, 0), # Exclusive girl shirt (yellow with palm) - ), - - # Series 1, week 7 (overall week 7) - (100, # Basic shirt - (5, 2000), # Basic chat - CatalogFurnitureItem(1430), # Painting: Rembrandt Toon - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(1510), # Radio B - CatalogFurnitureItem(1610), # Vase B - 5000, # Pet trick - CatalogNametagItem(1), - ), - - # Series 1, week 8 (overall week 8) - (100, # Basic shirt - (5, 2000), # Basic chat - CatalogWindowItem(70), # Window view: Tropical Island - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(1210), # Table - CatalogClothingItem(409, 0), # Exclusive girl shirt (pink and purple skirt) - nextAvailablePole, - ), - - # Series 1, week 9 (overall week 9) - (300, # Basic bottoms - (5, 2000), # Basic chat - CatalogEmoteItem(13), # Bow - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(1200), # Night Stand (end table) - CatalogFurnitureItem(900), # Umbrella Stand - ), - - # Series 1, week 10 (overall week 10) - (100, # Basic shirt - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(910), # Coat Rack - CatalogFurnitureItem(1600), # Vase A - CatalogClothingItem(118, 0), # Exclusive boy shirt (blue with blue and white stripes) - CatalogClothingItem(218, 0), # Exclusive girl shirt (blue with 3 yellow stripes) - ), - - # Series 1, week 11 (overall week 11) - (100, # Basic shirt - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(800), # Desk - CatalogFurnitureItem(1010), # Round Rug A - CatalogClothingItem(410, 0), # Exclusive girl shirt (green and yellow with star) - 5000, # Pet trick - ), - - # Series 1, week 12 (overall week 12) - (300, # Basic bottoms - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogFurnitureItem(620), # Lamp A - nextAvailableBank, # Bank - nextAvailablePole, # Pole - nextAvailableCloset, # Wardrobe - ), - - # Series 1, week 13 (overall week 13) - (300, # Basic bottoms - (5, 2000), # Basic chat - 3000, # Wallpaper - 3500, # Basic wainscoting - 4000, # Basic flooring - 4500, # Basic moulding - CatalogClothingItem(119, 0), # Exclusive boy shirt (orange) - CatalogClothingItem(219, 0), # Exclusive girl shirt (pink and beige) - ), - - ############################# SERIES 2 ############################# - - # Series 2, week 1 (overall week 14) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1110), # Yellow Wood Cabinet - CatalogFurnitureItem(630), # Bug Room Daisy Lamp 1 - CatalogFurnitureItem(1630), # Vase B tall - CatalogEmoteItem(11), # Emote: Confused - CatalogNametagItem(11), - ), - - # Series 2, week 2 (overall week 15) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(230), # Bug Room Bed - CatalogFurnitureItem(920), # Trashcan - CatalogFurnitureItem(1440), # Painting: Toon Landscape - ), - - # Series 2, week 3 (overall week 16) - (300, # Basic bottoms - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(420), # Round Fireplace - CatalogAnimatedFurnitureItem(480), # Round Fireplace with fire - CatalogFurnitureItem(120), # Desk chair - CatalogClothingItem(120, 0),# Exclusive boy shirt - CatalogClothingItem(220, 0),# Exclusive girl shirt - nextAvailablePole, # Next Fishing pole - 5000, # Pet trick - ), - - # Series 2, week 4 (overall week 17) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1700), # Popcorn cart - CatalogFurnitureItem(640), # Bug Room Daisy Lamp 2 - CatalogWindowItem(50), # Window view: Western - ), - - # Series 2, week 5 (overall week 18) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1120), # Bookcase - Tall - CatalogFurnitureItem(930), # Bug Room Red Pot - CatalogFurnitureItem(1500), # Radio A - CatalogEmoteItem(6), # Emote: Victory Dance - nextAvailableCloset, # Wardrobe - ), - - # Series 2, week 6 (overall week 19) - (300, # Basic bottoms - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(430), # Bug Room Fireplace - CatalogAnimatedFurnitureItem(491), # Bug Room Fireplace with fire - CatalogFurnitureItem(1620), # Vase B short - CatalogFurnitureItem(1442), # Painting: Degas Toon Star - nextAvailableBank, # Bank - ), - - # Series 2, week 7 (overall week 20) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(610), # Tall lamp - CatalogFurnitureItem(940), # Bug Room Yellow Pot - CatalogClothingItem(121, 0),# Exclusive boy shirt - CatalogClothingItem(221, 0),# Exclusive girl shirt - nextAvailablePole, # Next Fishing pole - 5000, # Pet trick - ), - - # Series 2, week 8 (overall week 21) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1710), # Bug Room Ladybug - CatalogFurnitureItem(1030), # Bug Room Leaf Mat - CatalogWindowItem(60), # Window view: Underwater - CatalogNametagItem(7), - ), - - # Series 2, week 9 (overall week 22) - (300, # Basic bottoms - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1130), # Bookcase - Low - CatalogFurnitureItem(130), # Bug room chair - CatalogEmoteItem(8), # Emote: Bored - ), - - # Series 2, week 10 (overall week 23) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(1530), # Bug Room TV - CatalogFurnitureItem(1640), # Vase C short - CatalogFurnitureItem(1441), # Painting: Whistler's horse - ), - - # Series 2, week 11 (overall week 24) - (100, # Basic shirt - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(300), # Piano - CatalogFurnitureItem(1220), # Coffee table - nextAvailablePole, # Next Fishing pole - 5000, # Pet trick - ), - - # Series 2, week 12 (overall week 25) - (300, # Basic bottoms - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(810), # Bug Room Desk - CatalogFurnitureItem(1230), # Coffee table - CatalogFurnitureItem(1443), # Painting: Magritte Toon Pie - nextAvailableBank, # Bank - ), - - # Series 2, week 13 (overall week 26) - (300, # Basic bottoms - (2, 2000), # Basic chat from series 1 - (3, 2010), # Basic chat from series 2 - 3010, # Wallpaper - 3510, # Basic wainscoting - 4010, # Basic flooring - 4510, # Basic moulding - CatalogFurnitureItem(310), # Organ - CatalogFurnitureItem(1520), # Radio C - CatalogFurnitureItem(1650), # Vase D short - CatalogWindowItem(80), # Window view: Starry night - #CatalogClothingItem(120, 0),# Exclusive boy shirt - CatalogClothingItem(222, 0),# Exclusive girl shirt - nextAvailableCloset, # Wardrobe - ), - - ############################# SERIES 3 ############################# - - # Series 3, week 1 (overall week 27) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(1240), # Snorkelers Table - CatalogFurnitureItem(1661), # Shell Vase - CatalogEmoteItem(5), # Shrug - ), - # Series 3, week 2 (overall week 28) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(1800), # Fish Bowl 1 - CatalogFurnitureItem(240), # Boat bed - CatalogFurnitureItem(1200), # Night Stand (end table) - CatalogNametagItem(12), - ), - # Series 3, week 3 (overall week 29) - (300, # Basic bottoms - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(145), # Lifejacket chair - CatalogClothingItem(123, 0),# Exclusive shirt (tie dye boy) - CatalogClothingItem(224, 0),# Exclusive shirt (tie dye girl) - nextAvailablePole, # Next Fishing pole - 5000, # Pet trick - ), - # Series 3, week 4 (overall week 30) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogWindowItem(100), # Window view: Snow - CatalogFurnitureItem(1810), # Fish Bowl 2 - nextAvailableCloset, # Wardrobe - ), - # Series 3, week 5 (overall week 31) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(650), # Jellyfish Lamp 1 - CatalogFurnitureItem(1900), # Swordfish Trophy - ), - # Series 3, week 6 (overall week 32) - (300, # Basic bottoms - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(1725), # Washing Machine - nextAvailableBank, # Bank - ), - # Series 3, week 7 (overall week 33) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogWindowItem(90), # Window view: Pool - CatalogClothingItem(124, 0),# Exclusive boy shirt - CatalogClothingItem(411, 0),# Exclusive girl skirt, rainbow - nextAvailablePole, # Next Fishing pole - ), - # Series 3, week 8 (overall week 34) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(140), # Lobster chair - CatalogFurnitureItem(1020), # Rug Round B - CatalogEmoteItem(13), # Bow - ), - # Series 3, week 9 (overall week 35) - (300, # Basic bottoms - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(950), # Coral Coat Rack - CatalogFurnitureItem(1660), # Coral Vase - CatalogClothingItem(310, 0),# Exclusive shorts (orange w/ blue side stripes) - CatalogNametagItem(2), - ), - # Series 3, week 10 (overall week 36) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(400), # Square Fireplace - CatalogAnimatedFurnitureItem(470), # Square Fireplace with fire - CatalogFurnitureItem(660), # Jellyfish Lamp 2 - CatalogFurnitureItem(1200), # Night Stand (end table) - nextAvailableCloset, # Wardrobe - 5000, # Pet trick - ), - # Series 3, week 11 (overall week 37) - (100, # Basic shirt - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(1910), # Hammerhead trophy - nextAvailablePole, # Next Fishing pole - CatalogFurnitureItem(1000), # Rug square - ), - # Series 3, week 12 (overall week 38) - (300, # Basic bottoms - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(1720), # Fountain - nextAvailableBank, # Bank - CatalogEmoteItem(9), # Applause - ), - # Series 3, week 13 (overall week 39) - (300, # Basic bottoms - (1, 2000), # Basic chat from series 1 - (2, 2010), # Basic chat from series 2 - (3, 2020), # Basic chat from series 3 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogWindowItem(110), # Window view: Farm - CatalogClothingItem(311, 0),# Exclusive shorts (blue with yellow cuff) - ), - - ############################# SERIES 4 ############################# - - # Series 4, week 1 (overall week 40) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogWindowItem(120), # Window view: Native Camp. - CatalogClothingItem(125, 0),# Cowboy shirts. - 5000, # Pet trick - ), - # Series 4, week 2 (overall week 41) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogClothingItem(412, 0),# Girls western skirts. - CatalogClothingItem(312, 0),# Boys cowboy shorts. - CatalogFurnitureItem(1920), # Hanging Horns. - ), - # Series 4, week 3 (overall week 42) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - nextAvailablePole, # Next Fishing pole - CatalogWallpaperItem(3900), # Hat Wallpaper. - CatalogFurnitureItem(980), # Tepee. - CatalogNametagItem(13), - ), - # Series 4, week 4 (overall week 43) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogClothingItem(130, 0),# Cowboy shirts. - CatalogFurnitureItem(150), # Saddle Stool. - nextAvailableCloset, # Wardrobe - ), - # Series 4, week 5 (overall week 44) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogClothingItem(128, 0),# Cowboy shirts. - CatalogWallpaperItem(3700), # Boot Wallpaper. - CatalogFurnitureItem(160), # Native Chair. - ), - # Series 4, week 6 (overall week 45) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - nextAvailableBank, # Bank - CatalogClothingItem(313, 0),# Boys cowboy shorts. - CatalogClothingItem(413, 0),# Girls western skirts. - CatalogFurnitureItem(960), # Barrel Stand. - CatalogEmoteItem(7), # Think - ), - # Series 4, week 7 (overall week 46) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # gBasic moulding - nextAvailablePole, # Next Fishing pole - CatalogFurnitureItem(1930), # Simple Sombrero. - CatalogFurnitureItem(670), # Cowboy Lamp. - ), - # Series 4, week 8 (overall week 47) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogClothingItem(126, 0),# Cowboy shirts. - CatalogFurnitureItem(1970), # Bison portrait. - 5000, # Pet trick - ), - # Series 4, week 9 (overall week 48) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(720), # Hay Couch. - CatalogFurnitureItem(970), # Fat Cactus. - nextAvailableCloset, # Wardrobe - ), - # Series 4, week 10 (overall week 49) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogClothingItem(127, 0),# Cowboy shirts. - CatalogFurnitureItem(1950), # Coyote paw wall hanging. - CatalogNametagItem(4), - ), - # Series 4, week 11 (overall week 50) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - nextAvailablePole, # Next Fishing pole - CatalogFurnitureItem(1940), # Fancy Sombrero. - CatalogWindowItem(130), # Main Street View. - ), - # Series 4, week 12 (overall week 51) - (300, # Basic bottoms - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - nextAvailableBank, # Bank - CatalogWallpaperItem(3800), # Cactus Wallpaper. - CatalogClothingItem(129, 0),# Cowboy shirts. - CatalogEmoteItem(10), # Cringe - ), - # Series 4, week 13 (overall week 52) - (100, # Basic shirt - (1, 2010), # Basic chat from series 2 - (2, 2020), # Basic chat from series 3 - (3, 2030), # Basic chat from series 4 - 3020, # Wallpaper - 3530, # Basic wainscoting - 4020, # Basic flooring - 4520, # Basic moulding - CatalogFurnitureItem(250), # Cactus Hammoc. - CatalogFurnitureItem(1960), # Horseshoe wall hanging. - nextAvailablePole, # Next Fishing pole - ), - - ############################# SERIES 5 ############################# - - ## NOTE: This is a short catalog (only 5 weeks). The remainder of this - ## thirteen week period is provided by Catalog Series 6 (8 weeks). - - # Series 5, week 1 (overall week 53) - Furniture Sale - Sale( - CatalogFurnitureItem(210, 0), # Girly bed - CatalogFurnitureItem(220, 0), # Bathtub bed - CatalogFurnitureItem(1100), # Cabinet Red Wood - CatalogFurnitureItem(110), # Chair - CatalogFurnitureItem(100), # Chair A - CatalogFurnitureItem(700), # Small couch - CatalogFurnitureItem(710), # Large couch - CatalogFurnitureItem(410), # Girly Fireplace - CatalogAnimatedFurnitureItem(490), # Girly Fireplace with fire - CatalogFurnitureItem(1210), # Table - CatalogFurnitureItem(1200), # Night Stand (end table) - CatalogFurnitureItem(800), # Desk - CatalogFurnitureItem(1110), # Yellow Wood Cabinet - CatalogFurnitureItem(230), # Bug Room Bed - CatalogFurnitureItem(420), # Round Fireplace - CatalogAnimatedFurnitureItem(480), # Round Fireplace with fire - CatalogFurnitureItem(120), # Desk chair - CatalogFurnitureItem(1700), # Popcorn cart - CatalogFurnitureItem(1120), # Bookcase - Tall - CatalogFurnitureItem(430), # Bug Room Fireplace - CatalogAnimatedFurnitureItem(491), # Bug Room Fireplace - CatalogFurnitureItem(1130), # Bookcase - Low - CatalogFurnitureItem(130), # Bug room chair - CatalogFurnitureItem(300), # Piano - CatalogFurnitureItem(1220), # Coffee table - CatalogFurnitureItem(810), # Bug Room Desk - CatalogFurnitureItem(1230), # Coffee table - CatalogFurnitureItem(310), # Organ - CatalogFurnitureItem(1240), # Snorkelers Table - CatalogFurnitureItem(240), # Boat bed - CatalogFurnitureItem(145), # Lifejacket chair - CatalogFurnitureItem(1725), # Washing Machine - CatalogFurnitureItem(140), # Lobster chair - CatalogFurnitureItem(950), # Coral Coat Rack - CatalogFurnitureItem(1720), # Fountain - ), - - # Series 5, week 2 (overall week 54) - Clothing Sale - Sale( - CatalogClothingItem(116, 0), # Exclusive boy shirt (yellow hooded sweatshirt) - CatalogClothingItem(216, 0), # Exclusive girl shirt (yellow hooded sweatshirt) - CatalogClothingItem(408, 0), # Exclusive girl skirt (blue and tan skirt) - CatalogClothingItem(117, 0), # Exclusive boy shirt (yellow with palm) - CatalogClothingItem(217, 0), # Exclusive girl shirt (yellow with palm) - CatalogClothingItem(409, 0), # Exclusive girl shirt (pink and purple skirt) - CatalogClothingItem(118, 0), # Exclusive boy shirt (blue with blue and white stripes) - CatalogClothingItem(218, 0), # Exclusive girl shirt (blue with 3 yellow stripes) - CatalogClothingItem(410, 0), # Exclusive girl shirt (green and yellow with star) - CatalogClothingItem(119, 0), # Exclusive boy shirt (orange) - CatalogClothingItem(219, 0), # Exclusive girl shirt (pink and beige) - CatalogClothingItem(120, 0), # Exclusive boy shirt - CatalogClothingItem(220, 0), # Exclusive girl shirt - CatalogClothingItem(121, 0), # Exclusive boy shirt - CatalogClothingItem(221, 0), # Exclusive girl shirt - CatalogClothingItem(222, 0), # Exclusive girl shirt - CatalogClothingItem(123, 0), # Exclusive shirt (tie dye boy) - CatalogClothingItem(224, 0), # Exclusive shirt (tie dye girl) - CatalogClothingItem(411, 0), # Exclusive girl skirt, rainbow - CatalogClothingItem(311, 0), # Exclusive shorts (blue with yellow cuff) - CatalogClothingItem(310, 0), # Exclusive shorts (orange w/ blue side stripes) - ), - - # Series 5, week 3 (overall week 55) - Window View Sale - Sale( - CatalogWindowItem(40), # Window view: City - CatalogWindowItem(70), # Window view: Tropical Island - CatalogWindowItem(50), # Window view: Western - CatalogWindowItem(60), # Window view: Underwater - CatalogWindowItem(80), # Window view: Starry night - CatalogWindowItem(100), # Window view: Snow - CatalogWindowItem(90), # Window view: Pool - CatalogWindowItem(110), # Window view: Farm - ), - - # Series 5, week 4 (overall week 56) - Emote Sale - Sale( - CatalogEmoteItem(5), # Shrug - CatalogEmoteItem(9), # Applause - CatalogEmoteItem(13), # Bow - CatalogEmoteItem(11), # Confused - CatalogEmoteItem(6), # Victory Dance - CatalogEmoteItem(8), # Bored - CatalogNametagItem(10), - ), - - # Series 5, week 5 (overall week 57) - Knick-knack Sale - Sale( - CatalogFurnitureItem(600), # Short lamp - CatalogFurnitureItem(610), # Tall lamp - CatalogFurnitureItem(620), # Lamp A - CatalogFurnitureItem(630), # Bug Room Daisy Lamp 1 - CatalogFurnitureItem(640), # Bug Room Daisy Lamp 2 - CatalogFurnitureItem(650), # Jellyfish Lamp 1 - CatalogFurnitureItem(660), # Jellyfish Lamp 2 - CatalogFurnitureItem(900), # Umbrella Stand - CatalogFurnitureItem(910), # Coat Rack - CatalogFurnitureItem(920), # Trashcan - CatalogFurnitureItem(930), # Bug Room Red Pot - CatalogFurnitureItem(940), # Bug Room Yellow Pot - CatalogFurnitureItem(1000), # Rug square - CatalogFurnitureItem(1010), # Round Rug A - CatalogFurnitureItem(1020), # Rug Round B - CatalogFurnitureItem(1030), # Bug Room Leaf Mat - CatalogFurnitureItem(1400), # Painting: Cezanne Toon - CatalogFurnitureItem(1410), # Painting: Flowers - CatalogFurnitureItem(1420), # Painting: Modern Mickey - CatalogFurnitureItem(1430), # Painting: Rembrandt Toon - CatalogFurnitureItem(1440), # Painting: Toon Landscape - CatalogFurnitureItem(1441), # Painting: Whistler's horse - CatalogFurnitureItem(1442), # Painting: Degas Toon Star - CatalogFurnitureItem(1443), # Painting: Magritte Toon Pie - CatalogFurnitureItem(1500), # Radio A - CatalogFurnitureItem(1510), # Radio B - CatalogFurnitureItem(1520), # Radio C - CatalogFurnitureItem(1530), # Bug Room TV - CatalogFurnitureItem(1600), # Vase A - CatalogFurnitureItem(1610), # Vase B - CatalogFurnitureItem(1620), # Vase B short - CatalogFurnitureItem(1630), # Vase B tall - CatalogFurnitureItem(1640), # Vase C short - CatalogFurnitureItem(1650), # Vase D short - CatalogFurnitureItem(1660), # Coral Vase - CatalogFurnitureItem(1661), # Shell Vase - CatalogFurnitureItem(1710), # Bug Room gLadybug - CatalogFurnitureItem(1800), # Fish Bowl 1 - CatalogFurnitureItem(1810), # Fish Bowl 2 - CatalogFurnitureItem(1900), # Swordfish Trophy - CatalogFurnitureItem(1910), # Hammerhead trophy - ), - - ############################# SERIES 6 ############################# - - ## NOTE: This is a short catalog (only 8 weeks). This series makes up the - ## difference between the sale catalog (Series 5) and a full catalog. - - # Series 6, week 1 (overall week 58) - Candy Items - (300, # Basic bottoms - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(730), # Twinkie Couch - nextAvailablePole, # Next Fishing pole - ), - - # Series 6, week 2 (overall week 59) - Candy Items - (100, # Basic shirt - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(260), # Ice Cream Bed - nextAvailableBank, # Bank - ), - - # Series 6, week 3 (overall week 60) - Candy Items - (300, # Basic bottoms - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(440), # Caramel Apple Fireplace - CatalogAnimatedFurnitureItem(492), # Caramel Apple Fireplace with fire - nextAvailableCloset, # Wardrobe - 5000, # Pet trick - ), - - # Series 6, week 4 (overall week 61) - Candy Items - (100, # Basic shirt - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(170), # Cupcake Chair - CatalogFurnitureItem(1250), # Cookie Table - ), - - # Series 6, week 5 (overall week 62) - Candy Items - (300, # Basic bottoms - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(1140), # Ice Cream Chest - nextAvailablePole, # Next Fishing pole - ), - - # Series 6, week 6 (overall week 63) - Candy Items - (100, # Basic shirt - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(2010), # Candy Cake Slide - CatalogNametagItem(8), - ), - - # Series 6, week 7 (overall week 64) - Candy Items - (300, # Basic bottoms - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(2000), # Candy Swing Set - 5000, # Pet trick - ), - - # Series 6, week 8 (overall week 65) - Candy Items - (100, # Basic shirt - (1, 2020), # Basic chat from series 3 - (2, 2030), # Basic chat from series 4 - (3, 2040), # Basic chat from series 6 - CatalogFurnitureItem(3000), # Candy Banana Split Shower - nextAvailableBank, # Bank - ), - - ############################# SERIES 7 ############################# - - # Series 7, week 1 (overall week 66) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogClothingItem(131, 0), # Green shirt w/ yellow buttons - CatalogClothingItem(225, 0), # Purple shirt w/ big flower - nextAvailablePole, # Next Fishing pole - ), - - # Series 7, week 2 (overall week 67) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(105), # Desat Chair A - nextAvailableCloset, # Wardrobe - ), - - # Series 7, week 3 (overall week 68) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(205), # Desat Boy's Bed - ), - - # Series 7, week 4 (overall week 69) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(625), # Desat Lamp A - ), - - # Series 7, week 5 (overall week 70) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - nextAvailablePole, # Next Fishing pole - CatalogEmoteItem(12), # Belly Flop - CatalogNametagItem(5), - ), - - # Series 7, week 6 (overall week 71) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogClothingItem(314, 0), # Green striped shorts - CatalogClothingItem(414, 0), # Blue skirt w/ big flower - nextAvailableBank, # Bank - ), - - # Series 7, week 7 (overall week 72) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(715), # Desat 2-person couch - nextAvailableCloset, # Wardrobe - ), - - # Series 7, week 8 (overall week 73) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(1015), # Desat Round Rug - CatalogNametagItem(6), - ), - - # Series 7, week 9 (overall week 74) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(1215), # Desat Radio table - nextAvailablePole, # Next Fishing pole - ), - - # Series 7, week 10 (overall week 75) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogEmoteItem(14), # Banana Peel - ), - - # Series 7, week 11 (overall week 76) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(1260), # Desat Bedroom table - ), - - # Series 7, week 12 (overall week 77) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - CatalogFurnitureItem(705), # Desat 1-person couch - CatalogNametagItem(3), - ), - - # Series 7, week 13 (overall week 78) - Color Setable Items - (300, # Basic bottoms - (1, 2030), # Basic chat from series 4 - (2, 2040), # Basic chat from series 5 - (3, 2050), # Basic chat from series 7 - nextAvailableBank, # Bank - nextAvailablePole, # Next Fishing pole - nextAvailableCloset, # Wardrobe - ), - - ) - -assert(len(WeeklySchedule) == ToontownGlobals.CatalogNumWeeks) + ( + 100, (5, 2000), 3000, 3500, 4000, 4500, CatalogEmoteItem(5), CatalogFurnitureItem(210, 0), CatalogFurnitureItem(220, 0)), (100, (5, 2000), CatalogFurnitureItem(1400), 3000, 3500, 4000, 4500, CatalogFurnitureItem(600), CatalogFurnitureItem(610), CatalogClothingItem(116, 0), CatalogClothingItem(216, 0)), (300, (5, 2000), CatalogFurnitureItem(1410), 3000, 3500, 4000, 4500, CatalogFurnitureItem(1100), CatalogFurnitureItem(1020), CatalogClothingItem(408, 0), 5000), (100, (5, 2000), CatalogWindowItem(40), 3000, 3500, 4000, 4500, CatalogFurnitureItem(110), CatalogFurnitureItem(100), nextAvailablePole), (100, (5, 2000), CatalogFurnitureItem(1420), CatalogEmoteItem(9), 3000, 3500, 4000, 4500, CatalogFurnitureItem(700), CatalogFurnitureItem(710)), (300, (5, 2000), 3000, 3500, 4000, 4500, CatalogFurnitureItem(410), CatalogFurnitureItem(1000), nextAvailableBank, CatalogClothingItem(117, 0), CatalogClothingItem(217, 0)), (100, (5, 2000), CatalogFurnitureItem(1430), 3000, 3500, 4000, 4500, CatalogFurnitureItem(1510), CatalogFurnitureItem(1610), 5000), (100, (5, 2000), CatalogWindowItem(70), 3000, 3500, 4000, 4500, CatalogFurnitureItem(1210), CatalogClothingItem(409, 0), nextAvailablePole), (300, (5, 2000), CatalogEmoteItem(13), 3000, 3500, 4000, 4500, CatalogFurnitureItem(1200), CatalogFurnitureItem(900)), (100, (5, 2000), 3000, 3500, 4000, 4500, CatalogFurnitureItem(910), CatalogFurnitureItem(1600), CatalogClothingItem(118, 0), CatalogClothingItem(218, 0)), (100, (5, 2000), 3000, 3500, 4000, 4500, CatalogFurnitureItem(800), CatalogFurnitureItem(1010), CatalogClothingItem(410, 0), 5000), (300, (5, 2000), 3000, 3500, 4000, 4500, CatalogFurnitureItem(620), nextAvailableBank, nextAvailablePole), (300, (5, 2000), 3000, 3500, 4000, 4500, CatalogFurnitureItem(502), CatalogFurnitureItem(512), CatalogClothingItem(119, 0), CatalogClothingItem(219, 0)), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1110), CatalogFurnitureItem(630), CatalogFurnitureItem(1630), CatalogEmoteItem(11)), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(230), CatalogFurnitureItem(920), CatalogFurnitureItem(1440)), (300, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(420), CatalogFurnitureItem(120), CatalogClothingItem(120, 0), CatalogClothingItem(220, 0), nextAvailablePole, 5000), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1700), CatalogFurnitureItem(640), CatalogWindowItem(50)), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1120), CatalogFurnitureItem(930), CatalogFurnitureItem(1500), CatalogEmoteItem(6)), (300, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(430), CatalogFurnitureItem(1620), CatalogFurnitureItem(1442), nextAvailableBank), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(610), CatalogFurnitureItem(940), CatalogClothingItem(121, 0), CatalogClothingItem(221, 0), nextAvailablePole, 5000), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1710), CatalogFurnitureItem(1030), CatalogWindowItem(60)), (300, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1130), CatalogFurnitureItem(130), CatalogEmoteItem(8)), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(1530), CatalogFurnitureItem(1640), CatalogFurnitureItem(1441)), (100, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(300), CatalogFurnitureItem(1220), nextAvailablePole, 5000), (300, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(810), CatalogFurnitureItem(1230), CatalogFurnitureItem(1443), nextAvailableBank), (300, (2, 2000), (3, 2010), 3010, 3510, 4010, 4510, CatalogFurnitureItem(310), CatalogFurnitureItem(1520), CatalogFurnitureItem(1650), CatalogWindowItem(80), CatalogClothingItem(222, 0)), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(1240), CatalogFurnitureItem(1661), CatalogEmoteItem(5)), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(1800), CatalogFurnitureItem(240), CatalogFurnitureItem(1200)), (300, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(145), CatalogClothingItem(123, 0), CatalogClothingItem(224, 0), nextAvailablePole, 5000), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogWindowItem(100), CatalogFurnitureItem(1810)), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(650), CatalogFurnitureItem(1900)), (300, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(1725), nextAvailableBank), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogWindowItem(90), CatalogClothingItem(124, 0), CatalogClothingItem(411, 0), nextAvailablePole), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(140), CatalogFurnitureItem(1020), CatalogEmoteItem(13)), (300, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(950), CatalogFurnitureItem(1660), CatalogClothingItem(310, 0)), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(660), CatalogFurnitureItem(1200), 5000), (100, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(1910), nextAvailablePole, CatalogFurnitureItem(1000)), (300, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogFurnitureItem(1720), nextAvailableBank, CatalogEmoteItem(9)), (300, (1, 2000), (2, 2010), (3, 2020), 3020, 3530, 4020, 4520, CatalogWindowItem(110), CatalogClothingItem(311, 0)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogWindowItem(120), CatalogClothingItem(125, 0), 5000), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogClothingItem(412, 0), CatalogClothingItem(312, 0), CatalogFurnitureItem(1920)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, nextAvailablePole, CatalogWallpaperItem(3900), CatalogFurnitureItem(980)), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogClothingItem(130, 0), CatalogFurnitureItem(150)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogClothingItem(128, 0), CatalogWallpaperItem(3700), CatalogFurnitureItem(160)), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, nextAvailableBank, CatalogClothingItem(313, 0), CatalogClothingItem(413, 0), CatalogFurnitureItem(960), CatalogEmoteItem(7)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, nextAvailablePole, CatalogFurnitureItem(1930), CatalogFurnitureItem(670)), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogClothingItem(126, 0), CatalogFurnitureItem(1970), 5000), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogFurnitureItem(720), CatalogFurnitureItem(970)), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogClothingItem(127, 0), CatalogFurnitureItem(1950)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, nextAvailablePole, CatalogFurnitureItem(1940), CatalogWindowItem(130)), (300, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, nextAvailableBank, CatalogWallpaperItem(3800), CatalogClothingItem(129, 0), CatalogEmoteItem(10)), (100, (1, 2010), (2, 2020), (3, 2030), 3020, 3530, 4020, 4520, CatalogFurnitureItem(250), CatalogFurnitureItem(1960), nextAvailablePole), + Sale(CatalogFurnitureItem(210, 0), CatalogFurnitureItem(220, 0), CatalogFurnitureItem(1100), CatalogFurnitureItem(110), CatalogFurnitureItem(100), CatalogFurnitureItem(700), CatalogFurnitureItem(710), CatalogFurnitureItem(410), CatalogFurnitureItem(1210), CatalogFurnitureItem(1200), CatalogFurnitureItem(800), CatalogFurnitureItem(502), CatalogFurnitureItem(512), CatalogFurnitureItem(1110), CatalogFurnitureItem(230), CatalogFurnitureItem(420), CatalogFurnitureItem(120), CatalogFurnitureItem(1700), CatalogFurnitureItem(1120), CatalogFurnitureItem(430), CatalogFurnitureItem(1130), CatalogFurnitureItem(130), CatalogFurnitureItem(300), CatalogFurnitureItem(1220), CatalogFurnitureItem(810), CatalogFurnitureItem(1230), CatalogFurnitureItem(310), CatalogFurnitureItem(1240), CatalogFurnitureItem(240), CatalogFurnitureItem(145), CatalogFurnitureItem(1725), CatalogFurnitureItem(140), CatalogFurnitureItem(950), CatalogFurnitureItem(1720)), + Sale(CatalogClothingItem(116, 0), CatalogClothingItem(216, 0), CatalogClothingItem(408, 0), CatalogClothingItem(117, 0), CatalogClothingItem(217, 0), CatalogClothingItem(409, 0), CatalogClothingItem(118, 0), CatalogClothingItem(218, 0), CatalogClothingItem(410, 0), CatalogClothingItem(119, 0), CatalogClothingItem(219, 0), CatalogClothingItem(120, 0), CatalogClothingItem(220, 0), CatalogClothingItem(121, 0), CatalogClothingItem(221, 0), CatalogClothingItem(222, 0), CatalogClothingItem(123, 0), CatalogClothingItem(224, 0), CatalogClothingItem(411, 0), CatalogClothingItem(311, 0), CatalogClothingItem(310, 0)), + Sale(CatalogWindowItem(40), CatalogWindowItem(70), CatalogWindowItem(50), CatalogWindowItem(60), CatalogWindowItem(80), CatalogWindowItem(100), CatalogWindowItem(90), CatalogWindowItem(110)), + Sale(CatalogEmoteItem(5), CatalogEmoteItem(9), CatalogEmoteItem(13), CatalogEmoteItem(11), CatalogEmoteItem(6), CatalogEmoteItem(8)), + Sale(CatalogFurnitureItem(600), CatalogFurnitureItem(610), CatalogFurnitureItem(620), CatalogFurnitureItem(630), CatalogFurnitureItem(640), CatalogFurnitureItem(650), CatalogFurnitureItem(660), CatalogFurnitureItem(900), CatalogFurnitureItem(910), CatalogFurnitureItem(920), CatalogFurnitureItem(930), CatalogFurnitureItem(940), CatalogFurnitureItem(1000), CatalogFurnitureItem(1010), CatalogFurnitureItem(1020), CatalogFurnitureItem(1030), CatalogFurnitureItem(1400), CatalogFurnitureItem(1410), CatalogFurnitureItem(1420), CatalogFurnitureItem(1430), CatalogFurnitureItem(1440), CatalogFurnitureItem(1441), CatalogFurnitureItem(1442), CatalogFurnitureItem(1443), CatalogFurnitureItem(1500), CatalogFurnitureItem(1510), CatalogFurnitureItem(1520), CatalogFurnitureItem(1530), CatalogFurnitureItem(1600), CatalogFurnitureItem(1610), CatalogFurnitureItem(1620), CatalogFurnitureItem(1630), CatalogFurnitureItem(1640), CatalogFurnitureItem(1650), CatalogFurnitureItem(1660), CatalogFurnitureItem(1661), CatalogFurnitureItem(1710), CatalogFurnitureItem(1800), CatalogFurnitureItem(1810), CatalogFurnitureItem(1900), CatalogFurnitureItem(1910)), (300, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(730), nextAvailablePole), (100, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(260), nextAvailableBank), (300, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(440), 5000), (100, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(170), CatalogFurnitureItem(1250)), (300, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(1140), nextAvailablePole), (100, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(2010)), (300, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(2000), 5000), (100, (1, 2020), (2, 2030), (3, 2040), CatalogFurnitureItem(3000), nextAvailableBank), (300, (1, 2030), (2, 2040), (3, 2050), CatalogClothingItem(131, 0), CatalogClothingItem(225, 0), nextAvailablePole), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(105)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(205)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(625)), (300, (1, 2030), (2, 2040), (3, 2050), nextAvailablePole, CatalogEmoteItem(12)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogClothingItem(314, 0), CatalogClothingItem(414, 0), nextAvailableBank), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(715)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(1015)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(1215), nextAvailablePole), (300, (1, 2030), (2, 2040), (3, 2050), CatalogEmoteItem(14)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(1260)), (300, (1, 2030), (2, 2040), (3, 2050), CatalogFurnitureItem(705)), (300, (1, 2030), (2, 2040), (3, 2050), nextAvailableBank, nextAvailablePole)) class CatalogGenerator: - """CatalogGenerator - - This class is responsible for constructing a catalog of available - items for a particular avatar. It normally exists only on the AI. - - """ - - notify = DirectNotifyGlobal.directNotify.newCategory("CatalogGenerator") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CatalogGenerator') def __init__(self): self.__itemLists = {} def generateMonthlyCatalog(self, avatar, weekStart): - # Generates the list of items that should be offered to the - # given avatar based on the seasonal specials this month. - - # weekStart is the date at which the catalog is considered to - # have been generated, as minutes elapsed since the epoch. - - # This method is designed for use on the AI, but will function - # properly on the client, given LocalToon (which is mainly - # useful for testing). - - # Get the day offset. dayNumber = int(weekStart / (24 * 60)) itemLists = self.__getMonthlyItemLists(dayNumber, weekStart) - - # Now build a list of items for this avatar. - monthlyCatalog = CatalogItemList.CatalogItemList() - for list in itemLists: for item in list: monthlyCatalog += self.__selectItem(avatar, item, []) + return monthlyCatalog def generateWeeklyCatalog(self, avatar, week, monthlyCatalog): - # Generates the list of items that should be offered to the - # given avatar for the current week. We must have the actual - # DistributedAvatar object handy so we can query it. - - # This method is designed for use on the AI, but will function - # properly on the client, given LocalToon (which is mainly - # useful for testing). - weeklyCatalog = CatalogItemList.CatalogItemList() - - self.notify.debug("Generating catalog for %s for week %s." % (avatar.doId, week)) + self.notify.debug('Generating catalog for %s for week %s.' % (avatar.doId, week)) if week >= 1 and week <= len(WeeklySchedule): saleItem = 0 - schedule = WeeklySchedule[week - 1] + schedule = WeeklySchedule[(week - 1)] if isinstance(schedule, Sale): schedule = schedule.args saleItem = 1 - for item in schedule: - weeklyCatalog += self.__selectItem(avatar, item, monthlyCatalog, - saleItem = saleItem) + weeklyCatalog += self.__selectItem(avatar, item, monthlyCatalog, saleItem=saleItem) + + if time.time() < 1096617600.0: - # Here is an ugly hack for ensuring that everyone gets at - # least one pet trick offered in their first catalog when pets - # goes live for the first time. If it is not yet the end of - # the month of September 2004 (the month in which pets goes - # live), and neither the newly-generated catalog nor the - # avatar's current catalog or back catalog includes a pet - # trick already, then we will artificially add a random pet - # trick. - if time.time() < 1096617600.0: # 'Fri Oct 1 01:00:00 2004' def hasPetTrick(catalog): for item in catalog: if isinstance(item, CatalogPetTrickItem): return 1 - return 0 - - if not hasPetTrick(weeklyCatalog) and not \ - hasPetTrick(avatar.weeklyCatalog) and not \ - hasPetTrick(avatar.backCatalog): - self.notify.debug("Artificially adding pet trick to catalog") - weeklyCatalog += self.__selectItem(avatar, 5000, monthlyCatalog, saleItem = saleItem) - self.notify.debug("Generated catalog: %s" % (weeklyCatalog)) + return 0 + if not hasPetTrick(weeklyCatalog) and not hasPetTrick(avatar.weeklyCatalog) and not hasPetTrick(avatar.backCatalog): + self.notify.debug('Artificially adding pet trick to catalog') + weeklyCatalog += self.__selectItem(avatar, 5000, monthlyCatalog, saleItem=saleItem) + self.notify.debug('Generated catalog: %s' % weeklyCatalog) return weeklyCatalog def generateBackCatalog(self, avatar, week, previousWeek, weeklyCatalog): - # Generates the list of items that the avatar has seen offered - # on previous catalogs. backCatalog = CatalogItemList.CatalogItemList() lastBackCatalog = avatar.backCatalog[:] - - # Add in the items for weeks we may have skipped over, in - # reverse order. thisWeek = min(len(WeeklySchedule), week - 1) lastWeek = min(len(WeeklySchedule), previousWeek) for week in range(thisWeek, lastWeek, -1): - self.notify.debug("Adding items from week %s to back catalog" % (week)) - schedule = WeeklySchedule[week - 1] - if not isinstance(schedule, Sale): # Don't bother with a sale week. + self.notify.debug('Adding items from week %s to back catalog' % week) + schedule = WeeklySchedule[(week - 1)] + if not isinstance(schedule, Sale): for item in schedule: for item in self.__selectItem(avatar, item, weeklyCatalog + backCatalog): item.putInBackCatalog(backCatalog, lastBackCatalog) - # Add the items in our current catalog. if previousWeek < week: - self.notify.debug("Adding current items from week %s to back catalog" % (previousWeek)) + self.notify.debug('Adding current items from week %s to back catalog' % previousWeek) for item in avatar.weeklyCatalog: item.putInBackCatalog(backCatalog, lastBackCatalog) - # Also add in all of the items already on the back catalog. backCatalog += lastBackCatalog - - # Remove any repeated items we just generated this week from - # the newly-generated back catalog. It's confusing if an item - # shows up both in the new catalog and also in the back - # catalog. for item in weeklyCatalog: while item in backCatalog: backCatalog.remove(item) @@ -1554,79 +112,44 @@ def generateBackCatalog(self, avatar, week, previousWeek, weeklyCatalog): return backCatalog def __getMonthlyItemLists(self, dayNumber, weekStart): - # Returns a list of lists of seasonal items that should be - # selected from for monthlyCatalogs generated on the indicated - # day. Since the answer is always the same for a particular - # day, we save some time by computing this only once for each - # different day. - itemLists = self.__itemLists.get(dayNumber) if itemLists != None: return itemLists - - # Hasn't been generated yet today; do so now. nowtuple = time.localtime(weekStart * 60) month = nowtuple[1] day = nowtuple[2] - - self.notify.debug("Generating seasonal itemLists for %s/%s." % (month, day)) + self.notify.debug('Generating seasonal itemLists for %s/%s.' % (month, day)) itemLists = [] - - for startMM, startDD, endMM, endDD, list in MonthlySchedule: - pastStart = (month > startMM) or (month == startMM and day >= startDD) - beforeEnd = (month < endMM) or (month == endMM and day <= endDD) - - # We are within the range if we are pastStart and - # beforeEnd (the normal case), or (pastStart or - # beforeEnd) (if end < start, and we're - # wrapping around at the end of the year). - + for (startMM, startDD, endMM, endDD, list) in MonthlySchedule: + pastStart = month > startMM or month == startMM and day >= startDD + beforeEnd = month < endMM or month == endMM and day <= endDD if endMM < startMM: - if (pastStart or beforeEnd): - itemLists.append(list) - else: - if (pastStart and beforeEnd): + if pastStart or beforeEnd: itemLists.append(list) + elif pastStart and beforeEnd: + itemLists.append(list) self.__itemLists[dayNumber] = itemLists return itemLists + return - - def __selectItem(self, avatar, item, duplicateItems, saleItem = 0): - # Evaluates the item code into a list of CatalogItem objects that - # are suitable for purchase by the avatar. - + def __selectItem(self, avatar, item, duplicateItems, saleItem=0): chooseCount = 1 - - # If the item is wrapped in a sale wrapper, it's a sale item. if isinstance(item, Sale): - assert(len(item.args) == 1) item = item.args[0] saleItem = 1 - - # If the item is a function, call it. It should then return - # an actual item, a list of items, or a (chooseCount, list). if callable(item): item = item(avatar, duplicateItems) - - if isinstance(item, types.TupleType): - # Unpack a 2-tuple into a (chooseCount, list). - chooseCount, item = item - - if isinstance(item, types.IntType): - # If the item is a MetaItem, it's really a list. + if isinstance(item, tuple): + (chooseCount, item) = item + if isinstance(item, int): item = MetaItems[item] - selection = [] - if isinstance(item, CatalogItem.CatalogItem): if not item.notOfferedTo(avatar): item.saleItem = saleItem selection.append(item) - elif item != None: - # Choose n of the given list. That means we should make a - # copy of the list first. list = item[:] for i in range(chooseCount): if len(list) == 0: @@ -1637,23 +160,13 @@ def __selectItem(self, avatar, item, duplicateItems, saleItem = 0): selection.append(item) return selection + return def __chooseFromList(self, avatar, list, duplicateItems): index = random.randrange(len(list)) item = list[index] del list[index] - - # Is this an acceptable item? - # Make sure you can offer this item to the given avatar, - # that the avatar hasn't reached his/her purchase limit, - # and that the item isn't already in the duplicate or - # backorder list - while item.notOfferedTo(avatar) or \ - item.reachedPurchaseLimit(avatar) or \ - item in duplicateItems or \ - item in avatar.backCatalog or \ - item in avatar.weeklyCatalog: - # The current item is unacceptable, see if there is another one + while item.notOfferedTo(avatar) or item.reachedPurchaseLimit(avatar) or item in duplicateItems or item in avatar.backCatalog or item in avatar.weeklyCatalog: if len(list) == 0: return None index = random.randrange(len(list)) @@ -1661,149 +174,93 @@ def __chooseFromList(self, avatar, list, duplicateItems): del list[index] return item + return def outputSchedule(self, filename): - out = open(Filename(filename).toOsSpecific(), "w") - + out = open(Filename(filename).toOsSpecific(), 'w') sched = self.generateScheduleDictionary() - - # Now put the items into sorted order, which will collect - # similar items together for the user's convenience. - items = sched.keys() + items = list(sched.keys()) items.sort() - for item in items: - weeklist, maybeWeeklist = sched[item] - + (weeklist, maybeWeeklist) = sched[item] color = self.__formatColor(item.getColor()) - - # Figure out which series(es) in which the item is - # offered. seriesDict = {} self.__determineSeries(seriesDict, weeklist) self.__determineSeries(seriesDict, maybeWeeklist) - seriesList = seriesDict.keys() + seriesList = list(seriesDict.keys()) seriesList.sort() series = str(seriesList)[1:-1] - week = self.__formatWeeklist(weeklist) maybeWeek = self.__formatWeeklist(maybeWeeklist) - - line = '"%s"\t"%s"\t"%s"\t%s\t"%s"\t"%s"\t"%s"\t"%s"\t"%s"' % ( - item.output(store = 0), - item.getTypeName(), - item.getDisplayName(), - item.getBasePrice(), - item.getFilename(), - color, - series, - week, - maybeWeek, - ) + line = '"%s"\t"%s"\t"%s"\t%s\t"%s"\t"%s"\t"%s"\t"%s"\t"%s"' % (item.output(store=0), item.getTypeName(), item.getDisplayName(), item.getBasePrice(), item.getFilename(), color, series, week, maybeWeek) out.write(line + '\n') out.close() def __formatColor(self, color): if color == None: - return "" + return '' else: - return "(%0.2f, %0.2f, %0.2f)" % (color[0], color[1], color[2]) + return '(%0.2f, %0.2f, %0.2f)' % (color[0], color[1], color[2]) + return def __determineSeries(self, seriesDict, weeklist): for week in weeklist: - if isinstance(week, types.IntType): - # If the week is an integer, it's the week number (as - # opposed to a string, which represents a season). - series = ((week - 1) / ToontownGlobals.CatalogNumWeeksPerSeries) + 1 + if isinstance(week, int): + series = (week - 1) / ToontownGlobals.CatalogNumWeeksPerSeries + 1 seriesDict[series] = None - def __formatWeeklist(self, weeklist): - # Returns a string representing a friendly way to represent - # the list of weeks. + return + def __formatWeeklist(self, weeklist): str = '' for week in weeklist: - str += ', %s' % (week) - return str[2:] + str += ', %s' % week + return str[2:] def generateScheduleDictionary(self): - # Build up a dictionary of item to: - # [weeklist, maybeWeeklist] - - # where each weeklist is a list of week numbers and/or season - # strings. A season string is of the form "10/01 - 10/31". The - # first list is the list of weeks/seasons in which the item is - # definitely offered to everyone; the second list is the list - # of weeks/seasons in which the item is just one of a larger - # pool of items that is offered to everyone (so each player - # may or may not be offered any one particular item). - sched = {} - for index in range(len(WeeklySchedule)): week = index + 1 - schedule = WeeklySchedule[index] if isinstance(schedule, Sale): schedule = schedule.args - self.__recordSchedule(sched, week, schedule) - for startMM, startDD, endMM, endDD, list in MonthlySchedule: - string = "%02d/%02d - %02d/%02d" % (startMM, startDD, endMM, endDD) + for (startMM, startDD, endMM, endDD, list) in MonthlySchedule: + string = '%02d/%02d - %02d/%02d' % (startMM, startDD, endMM, endDD) self.__recordSchedule(sched, string, list) return sched def __recordSchedule(self, sched, weekCode, schedule): for item in schedule: - - # If the item is a function, we have to handle it as a - # special case. if callable(item): if item == nextAvailablePole: item = getAllPoles() - elif item == nextAvailableBank: item = getAllBanks() - - elif item == nextAvailableCloset: - item = getAllClosets() - else: - self.notify.warning("Don't know how to interpret function " % (repr(name))) + self.notify.warning("Don't know how to interpret function " % repr(name)) item = None - - elif isinstance(item, types.TupleType): - # A tuple is (chooseCount, list). We don't care about - # the chooseCount here. + elif isinstance(item, tuple): item = item[1] - - if isinstance(item, types.IntType): - # If the item is a MetaItem, it's really a list. + if isinstance(item, int): item = MetaItems[item] - if isinstance(item, CatalogItem.CatalogItem): - # Just one item, definitely offered. self.__recordScheduleItem(sched, weekCode, None, item) - elif item != None: - # Multiple items, each of which may be offered. - #if item == MetaItems[3020] or item == MetaItems[3010]: - # print "%s: %s" % (weekCode, item) for i in item: self.__recordScheduleItem(sched, None, weekCode, i) + return + def __recordScheduleItem(self, sched, weekCode, maybeWeekCode, item): - if not sched.has_key(item): + if item not in sched: sched[item] = [[], []] - - #if item == CatalogWallpaperItem(2900) or item == CatalogWallpaperItem(2210): - # print "%s,%s: %s" % (item, maybeWeekCode, sched[item]) if weekCode != None: sched[item][0].append(weekCode) if maybeWeekCode != None: sched[item][1].append(maybeWeekCode) - + return \ No newline at end of file diff --git a/toontown/src/catalog/CatalogGui.py b/toontown/src/catalog/CatalogGui.py index 8e6bb605..a5b93bcc 100644 --- a/toontown/src/catalog/CatalogGui.py +++ b/toontown/src/catalog/CatalogGui.py @@ -1,88 +1,44 @@ from direct.gui.DirectGui import * -from pandac.PandaModules import * -import CatalogItemPanel - -# how many items of master list are visible at once in the scrolling list +from . import CatalogItemPanel NUM_ITEMS_SHOWN = 3 class CatalogGui: - """CatalogGui - - This class presents the user interface to an individual catalog. It consists of - a title and a scrolling list of catalog items. - - """ + __module__ = __name__ def __init__(self, type, list=[], parent=None): - self.type = type self.itemList = list self.parent = parent - self.panelPicker = None self.frame = DirectFrame(parent=parent, relief=None) self.load() + return def show(self): self.frame.show() - + def hide(self): self.frame.hide() def load(self): - # scrolled list wants a list of strings itemStrings = [] for i in range(0, len(self.itemList)): itemStrings.append(self.itemList[i].getName()) - gui = loader.loadModel("phase_3.5/models/gui/friendslist_gui") - # make a scrolled list of item panels - self.panelPicker = DirectScrolledList( - parent = self.frame, - items = itemStrings, - command = self.scrollItem, - itemMakeFunction = CatalogItemPanel.CatalogItemPanel, - itemMakeExtraArgs=[self.itemList, self.type], - numItemsVisible = NUM_ITEMS_SHOWN, - pos = (0.5, 0, 0.4), - # inc and dec are DirectButtons - incButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - incButton_relief = None, - incButton_scale = (1.3,1.3,-1.3), - incButton_pos = (0,0,-1.05), - # Make the disabled button fade out - incButton_image3_color = Vec4(1,1,1,0.3), - decButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - decButton_relief = None, - decButton_scale = (1.3,1.3,1.3), - decButton_pos = (0,0,0.25), - # Make the disabled button fade out - decButton_image3_color = Vec4(1,1,1,0.3), - ) - - + gui = loader.loadModelOnce('phase_3.5/models/gui/friendslist_gui') + self.panelPicker = DirectScrolledList(parent=self.frame, items=itemStrings, command=self.scrollItem, itemMakeFunction=CatalogItemPanel.CatalogItemPanel, itemMakeExtraArgs=[self.itemList, self.type], numItemsVisible=NUM_ITEMS_SHOWN, pos=(0.5, 0, 0.4), incButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(1.3, 1.3, -1.3), incButton_pos=(0, 0, -1.05), incButton_image3_color=Vec4(1, 1, 1, 0.3), decButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(1.3, 1.3, 1.3), decButton_pos=(0, 0, 0.25), decButton_image3_color=Vec4(1, 1, 1, 0.3)) + return + def unload(self): - # remove all graphical elements del self.parent del self.itemList del self.panelPicker self.frame.destroy() - def update(self): - # call this when toon's money count changes to update the buy buttons for item in self.panelPicker['items']: - if (type(item) != type("")): + if type(item) != type(''): item.updateBuyButton() - + def scrollItem(self): - pass - + pass \ No newline at end of file diff --git a/toontown/src/catalog/CatalogInvalidItem.py b/toontown/src/catalog/CatalogInvalidItem.py index 6ea49fed..92b7742b 100644 --- a/toontown/src/catalog/CatalogInvalidItem.py +++ b/toontown/src/catalog/CatalogInvalidItem.py @@ -1,25 +1,16 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import TTLocalizer from direct.showbase import PythonUtil from toontown.toonbase import ToontownGlobals class CatalogInvalidItem(CatalogItem.CatalogItem): - """CatalogInvalidItem - - This special item type may be returned by CatalogItem.getItem() - and similar functions. It represents a CatalogItem that was not - correctly decoded from the encoded blob; its purposes is to stand - in as a placeholder for the broken item, so that AI code will not - necessarily crash when an invalid message is received from a - client. - - """ + __module__ = __name__ def requestPurchase(self, phone, callback): - self.notify.error("Attempt to purchase invalid item.") + self.notify.error('Attempt to purchase invalid item.') def acceptItem(self, mailbox, index, callback): - self.notify.error("Attempt to accept invalid item.") + self.notify.error('Attempt to accept invalid item.') - def output(self, store = ~0): - return "CatalogInvalidItem()" + def output(self, store=-1): + return 'CatalogInvalidItem()' \ No newline at end of file diff --git a/toontown/src/catalog/CatalogItem.py b/toontown/src/catalog/CatalogItem.py index 78a86871..9716af7c 100644 --- a/toontown/src/catalog/CatalogItem.py +++ b/toontown/src/catalog/CatalogItem.py @@ -1,249 +1,95 @@ from direct.directnotify import DirectNotifyGlobal -from pandac.PandaModules import * from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals +from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.distributed.PyDatagram import PyDatagram from direct.distributed.PyDatagramIterator import PyDatagramIterator - - -import types -import sys - -# This is created in decodeCatalogItem, below, as a map that reverses -# the lookup for the indexes defined in CatalogItemTypes.py. +import types, sys CatalogReverseType = None - -# This is the current version number that is written to the datagram -# stream describing how the CatalogItems are formatted. It is similar -# to the bam minor version number. When you introduce a change to the -# code that makes old records invalid, increment the version number, -# and put the appropriate conditionals in the decodeDatagram() methods -# based on the version number. This helps us avoid having to do -# database patches every time something changes here. -CatalogItemVersion = 8 -# version 2: adds pr to posHpr -# version 3: makes wallpaper type 16-bit -# version 4: make wallpaper color index a customization option -# version 5: use new hprs instead of old hprs (temp-hpr-fix) -# version 6: add loyaltyDays to Clothing, Emote, -# version 7: add cost to RentalItem -# version 8: add specialEventId - -# How much default markup for backorder items? +CatalogItemVersion = 5 CatalogBackorderMarkup = 1.2 - -# How much to reduce for sale items? CatalogSaleMarkdown = 0.75 - -# These are bits that represent the additional data that might be -# stored in the blob along with the CatalogItem. This must be known -# in order to properly decode the CatalogItem into or from a blob; -# context will indicate which values are appropriate to store along -# with the CatalogItem. -Customization = 0x01 -DeliveryDate = 0x02 -Location = 0x04 -WindowPlacement = 0x08 -GiftTag = 0x10 #usually contains the name of the sender - -# These are flags that indicate which kind of catalog the item is -# stored on. This is not stored on the item itself, but is rather -# stored on the list. +Customization = 1 +DeliveryDate = 2 +Location = 4 +WindowPlacement = 8 CatalogTypeUnspecified = 0 CatalogTypeWeekly = 1 CatalogTypeBackorder = 2 CatalogTypeMonthly = 3 -CatalogTypeLoyalty = 4 class CatalogItem: - """CatalogItem""" - notify = DirectNotifyGlobal.directNotify.newCategory("CatalogItem") + notify = DirectNotifyGlobal.directNotify.newCategory('CatalogItem') def __init__(self, *args, **kw): - # This init function is designed to be directly inherited (not - # overridden) by each of the base classes. It performs a - # dispatch based on the parameter types to construct a - # CatalogItem either from a datagram or directly from its - # parameters. - self.saleItem = 0 self.deliveryDate = None self.posHpr = None - self.giftTag = None - self.giftCode = 0 - self.hasPicture = False - self.volume = 0 - self.specialEventId = 0 # Code assumes that if non zero, then this item is an award - if (len(args) >= 1 and isinstance(args[0], DatagramIterator)): - # If we are called with di, versionNumber, store then we - # meant to decode the CatalogItem from a datagram. + if len(args) >= 1 and isinstance(args[0], DatagramIterator): self.decodeDatagram(*args, **kw) else: - # Otherwise, we are creating a new CatalogItem. self.makeNewItem(*args, **kw) - - def isAward(self): - """Return true if this catalog item is an award.""" - result = self.specialEventId != 0 - return result + return def makeNewItem(self): - # This is to be used as the primary constructor-from-arguments - # method for CatalogItem derivatives. pass - + def needsCustomize(self): - # Returns true if the item still needs to be customized by the - # user (e.g. by choosing a color). return 0 def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 0 - - def getBackSticky(self): - #some items should hang around in the back catalog - itemType = 0 #the types that should stick around - numSticky = 0 #how many should stick around - return itemType, numSticky def putInBackCatalog(self, backCatalog, lastBackCatalog): - # Appends the item to the backCatalog. For reference, the - # current back catalog is passed in as well; this list will be - # appended to the backCatalog after all items have been added - # (so that older items appear at the end of the list). It is - # legal to modify the lastBackCatalog list. - if self.saveHistory() and not self.isSaleItem(): - # There should be only one of a given item in the back - # catalog at any given time. If we get more than one, we - # should remove the old one. if not self in backCatalog: if self in lastBackCatalog: lastBackCatalog.remove(self) backCatalog.append(self) def replacesExisting(self): - # Returns true if an item of this type will, when purchased, - # replace an existing item of the same type, or false if items - # accumulate. return 0 def hasExisting(self): - # If replacesExisting returns true, this returns true if an - # item of this class is already owned by the avatar, false - # otherwise. If replacesExisting returns false, this is - # undefined. return 0 def getYourOldDesc(self): - # If replacesExisting returns true, this returns the name of - # the already existing object, in sentence construct: "your - # old ...". If replacesExisting returns false, this is undefined. return None + return def storedInCloset(self): - # Returns true if this kind of item takes up space in the - # avatar's closet, false otherwise. return 0 def storedInAttic(self): - # Returns true if this kind of item takes up space in the - # avatar's attic, false otherwise. return 0 def notOfferedTo(self, avatar): - # Returns true if the item cannot be bought by the indicated - # avatar (pass in the actual DistributdAvatarAI object), for - # instance because the avatar already has one and cannot have - # two. This is normally called only on the AI side. return 0 def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 0 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - return 0 - - def hasBeenGifted(self, avatar): - # returns true if this item is on your onGiftOrderList - if avatar.onGiftOrder.count(self) != 0: - # someone has given it to you - return 1 return 0 def getTypeName(self): - # Returns the name of the general type of item. - # No need to localize this string; it should never be - # displayed except in case of error. - return "Unknown Type Item" + return 'Unknown Type Item' def getName(self): - # Returns the name of the item. - - # No need to localize this string; it should never be - # displayed except in case of error. - return "Unnamed Item" + return 'Unnamed Item' def getDisplayName(self): - # Used in the catalog gui display return self.getName() def recordPurchase(self, avatar, optional): - # Updates the appropriate field on the avatar to indicate the - # purchase (or delivery). This makes the item available to - # use by the avatar. This method is only called on the AI side. - - # The optional parameter may be 0 or some number passed up - # from the client which has different meaning to the various - # different kinds of CatalogItems (and may indicate, for - # instance, the index number of the item to replace). - - # This should return one of the P_* tokens from ToontownGlobals. - # If the return value is zero or positive, the item is removed - # from the mailbox. - - self.notify.warning("%s has no purchase method." % (self)) + self.notify.warning('%s has no purchase method.' % self) return ToontownGlobals.P_NoPurchaseMethod def isSaleItem(self): - # Returns true if this particular item was tagged as a "sale" - # item in the catalog generator. This means (a) it has a - # reduced price, and (b) it does not get placed in the - # backorder catalog. return self.saleItem - - def isGift(self): - return 1 - - def isRental(self): - return 0 - - def forBoysOnly(self): - return 0 - - def forGirlsOnly(self): - return 0 - - def setLoyaltyRequirement(self, days): - self.loyaltyDays = days - - def loyaltyRequirement(self): - """Return. the number of days an account must have to purchase.""" - if not hasattr(self, "loyaltyDays"): - return 0 - else: - return self.loyaltyDays def getPrice(self, catalogType): - assert(catalogType != CatalogTypeUnspecified) if catalogType == CatalogTypeBackorder: return self.getBackPrice() elif self.isSaleItem(): @@ -252,222 +98,99 @@ def getPrice(self, catalogType): return self.getCurrentPrice() def getCurrentPrice(self): - # Returns the price of the item when it is listed in the - # current catalog. - return int(self.getBasePrice()) + return self.getBasePrice() def getBackPrice(self): - # Returns the price of the item when it is listed in the back - # catalog. return int(self.getBasePrice() * CatalogBackorderMarkup) def getSalePrice(self): - # Returns the price of the item when it is listed in the - # current catalog as a sale item. return int(self.getBasePrice() * CatalogSaleMarkdown) def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. return 0 def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - assert (not self.hasPicture) - self.hasPicture=True - return (None, None) - - def cleanupPicture(self): - assert self.hasPicture - self.hasPicture=False - - + return ( + None, None) + return def requestPurchase(self, phone, callback, optional=-1): - # Orders the item via the indicated telephone. Some items - # will pop up a dialog querying the user for more information - # before placing the order; other items will order - # immediately. - - # In either case, the function will return immediately before - # the transaction is finished, but the given callback will be - # called later with two parameters: the return code (one of - # the P_* symbols defined in ToontownGlobals.py), followed by the - # item itself. - - # This method is only called on the client. - - assert(not self.needsCustomize()) phone.requestPurchase(self, callback, optional) - - def requestGiftPurchase(self, phone, targetDoID,callback, optional=-1): - # Orders the item via the indicated telephone. Some items - # will pop up a dialog querying the user for more information - # before placing the order; other items will order - # immediately. - - # In either case, the function will return immediately before - # the transaction is finished, but the given callback will be - # called later with two parameters: the return code (one of - # the P_* symbols defined in ToontownGlobals.py), followed by the - # item itself. - - # This method is only called on the client. - - # assert 0, "Gift Purchase" - - assert(not self.needsCustomize()) - phone.requestGiftPurchase(self, targetDoID, callback, optional) - #base.cr.deliveryManager.sendRequestPurchaseGift(self, targetDoID, callback) - def requestPurchaseCleanup(self): - # This will be called on the client side to clean up any - # objects created in requestPurchase(), above. pass def getRequestPurchaseErrorText(self, retcode): - # PLEASE NOTE: this is not usually an error message, usually this returns a confiramtion -JML - # Returns a string describing the error that occurred on - # attempting to order the item from the phone. The input - # parameter is the retcode returned by - # phone.requestPurchase(). - if retcode == ToontownGlobals.P_ItemAvailable: # worked can use right away + if retcode == ToontownGlobals.P_ItemAvailable: return TTLocalizer.CatalogPurchaseItemAvailable - elif retcode == ToontownGlobals.P_ItemOnOrder: # worked and will be delivered - return TTLocalizer.CatalogPurchaseItemOnOrder - elif retcode == ToontownGlobals.P_MailboxFull: #failure messages + elif retcode == ToontownGlobals.P_ItemOnOrder: + return TTLocalizer.CatalogPurchaseItemOnOrder + elif retcode == ToontownGlobals.P_MailboxFull: return TTLocalizer.CatalogPurchaseMailboxFull elif retcode == ToontownGlobals.P_OnOrderListFull: return TTLocalizer.CatalogPurchaseOnOrderListFull else: - return TTLocalizer.CatalogPurchaseGeneralError % (retcode) - - def getRequestGiftPurchaseErrorText(self, retcode): - # PLEASE NOTE: this is not usually an error message, usually this returns a confiramtion -JML - # Returns a string describing the error that occurred on - # attempting to order the item from the phone. The input - # parameter is the retcode returned by - # phone.requestPurchase(). - if retcode == ToontownGlobals.P_ItemAvailable: # worked can use right away - return TTLocalizer.CatalogPurchaseGiftItemAvailable - elif retcode == ToontownGlobals.P_ItemOnOrder: # worked and will be delivered - return TTLocalizer.CatalogPurchaseGiftItemOnOrder - elif retcode == ToontownGlobals.P_MailboxFull: #failure messages - return TTLocalizer.CatalogPurchaseGiftMailboxFull - elif retcode == ToontownGlobals.P_OnOrderListFull: - return TTLocalizer.CatalogPurchaseGiftOnOrderListFull - elif retcode == ToontownGlobals.P_NotAGift: - return TTLocalizer.CatalogPurchaseGiftNotAGift - elif retcode == ToontownGlobals.P_WillNotFit: - return TTLocalizer.CatalogPurchaseGiftWillNotFit - elif retcode == ToontownGlobals.P_ReachedPurchaseLimit: - return TTLocalizer.CatalogPurchaseGiftLimitReached - elif retcode == ToontownGlobals.P_NotEnoughMoney: - return TTLocalizer.CatalogPurchaseGiftNotEnoughMoney - else: - return TTLocalizer.CatalogPurchaseGiftGeneralError % {'friend' : "%s",'error' : retcode} + return TTLocalizer.CatalogPurchaseGeneralError % retcode def acceptItem(self, mailbox, index, callback): - # Accepts the item from the mailbox. Some items will pop up a - # dialog querying the user for more information before - # accepting the item; other items will accept it immediately. - - # In either case, the function will return immediately before - # the transaction is finished, but the given callback will be - # called later with three parameters: the return code (one of - # the P_* symbols defined in ToontownGlobals.py), followed by - # the item itself, and the supplied index number. - - # The index is the position of this item within the avatar's - # mailboxContents list, which is used by the AI to know which - # item to remove from the list (and also to doublecheck that - # we're accepting the expected item). - - # This method is only called on the client. - mailbox.acceptItem(self, index, callback) - - def discardItem(self, mailbox, index, callback): - print("Item discardItem") - # Discards the item from the mailbox. - # This method is only called on the client. - - mailbox.discardItem(self, index, callback) def acceptItemCleanup(self): - # This will be called on the client side to clean up any - # objects created in acceptItem(), above. pass def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). - if retcode == ToontownGlobals.P_NoRoomForItem: - return TTLocalizer.CatalogAcceptRoomError - elif retcode == ToontownGlobals.P_ReachedPurchaseLimit: - return TTLocalizer.CatalogAcceptLimitError - elif retcode == ToontownGlobals.P_WillNotFit: - return TTLocalizer.CatalogAcceptFitError - elif retcode == ToontownGlobals.P_InvalidIndex: - return TTLocalizer.CatalogAcceptInvalidError - else: - return TTLocalizer.CatalogAcceptGeneralError % (retcode) + return TTLocalizer.CatalogAcceptGeneralError % retcode - def output(self, store = ~0): - return "CatalogItem" + def output(self, store=-1): + return 'CatalogItem' def getFilename(self): - # This returns a filename if it makes sense for the particular - # item. This is only used for documentation purposes. - return "" + return '' def getColor(self): - # This returns a VBase4 color which is applied to the above - # filename, if it makes sense for the particular item. This - # may be used for documentation purposes, but some item types - # define this specifically for their own use. return None + return - def formatOptionalData(self, store = ~0): - # This is used within output() to format optional data - # (according to the bits indicated in store). - result = "" - if (store & Location) and self.posHpr != None: - result += ", posHpr = (%s, %s, %s, %s, %s, %s)" % (self.posHpr) + def formatOptionalData(self, store=-1): + result = '' + if store & Location and self.posHpr != None: + result += ', posHpr = (%s, %s, %s, %s, %s, %s)' % self.posHpr return result - + return + def __str__(self): return self.output() - + def __repr__(self): return self.output() def compareTo(self, other): - # All CatalogItem type objects are equivalent. - # Specializations of this class will redefine this method - # appropriately. return 0 def getHashContents(self): - # Specializations of this class will redefine this method to - # return whatever pieces of the class are uniquely different - # to each instance. return None + return + + def __lt__(self, other): + c = self.__class__ == other.__class__ + if not c: + return 0 + + return self.compareTo(other) < 0 + + def __gt__(self, other): + c = self.__class__ == other.__class__ + if not c: + return 0 + + return self.compareTo(other) > 0 - def __cmp__(self, other): - # If the classes are different, they must be different objects. - c = cmp(self.__class__, other.__class__) - if c != 0: - return c + def __eq__(self, other): + c = self.__class__ == other.__class__ + if not c: + return 0 - # Otherwise, they are the same class; use compareTo. - return self.compareTo(other) + return self.compareTo(other) == 0 def __hash__(self): return hash((self.__class__, self.getHashContents())) @@ -477,6 +200,7 @@ def getBasePrice(self): def loadModel(self): return None + return def decodeDatagram(self, di, versionNumber, store): if store & DeliveryDate: @@ -490,25 +214,18 @@ def decodeDatagram(self, di, versionNumber, store): p = 0.0 r = 0.0 elif versionNumber < 5: - h = di.getArg(STInt8, 256.0/360.0) - p = di.getArg(STInt8, 256.0/360.0) - r = di.getArg(STInt8, 256.0/360.0) + h = di.getArg(STInt16, 256.0 / 360.0) + p = di.getArg(STInt16, 256.0 / 360.0) + r = di.getArg(STInt16, 256.0 / 360.0) hpr = oldToNewHpr(VBase3(h, p, r)) h = hpr[0] p = hpr[1] r = hpr[2] else: - h = di.getArg(STInt8, 256.0/360.0) - p = di.getArg(STInt8, 256.0/360.0) - r = di.getArg(STInt8, 256.0/360.0) - + h = di.getArg(STInt8, 256.0 / 360.0) + p = di.getArg(STInt8, 256.0 / 360.0) + r = di.getArg(STInt8, 256.0 / 360.0) self.posHpr = (x, y, z, h, p, r) - if store & GiftTag: - self.giftTag = di.getString() - if versionNumber >= 8: - self.specialEventId = di.getUint8() - else: - self.specialEventId = 0 def encodeDatagram(self, dg, store): if store & DeliveryDate: @@ -517,225 +234,128 @@ def encodeDatagram(self, dg, store): dg.putArg(self.posHpr[0], STInt16, 10) dg.putArg(self.posHpr[1], STInt16, 10) dg.putArg(self.posHpr[2], STInt16, 100) - dg.putArg(self.posHpr[3], STInt8, 256.0/360.0) - dg.putArg(self.posHpr[4], STInt8, 256.0/360.0) - dg.putArg(self.posHpr[5], STInt8, 256.0/360.0) - if store & GiftTag: - dg.addString(self.giftTag) - dg.addUint8(self.specialEventId) - + dg.putArg(self.posHpr[3], STInt16, 256.0 / 360.0) + dg.putArg(self.posHpr[4], STInt16, 256.0 / 360.0) + dg.putArg(self.posHpr[5], STInt16, 256.0 / 360.0) + def getTypeCode(self): - import CatalogItemTypes + from . import CatalogItemTypes return CatalogItemTypes.CatalogItemTypes[self.__class__] def applyColor(self, model, colorDesc): - """ - - This method is used to apply a color/texture description to - a model. The colorDesc is a list of tuples, each of which has - one of the forms: - - (partName, None) - hide the given part(s) - (partName, "texture name") - apply the texture to the given part(s) - (partName, (r, g, b, a)) - apply the color to the given part(s) - - """ if model == None or colorDesc == None: return - for partName, color in colorDesc: + for (partName, color) in colorDesc: matches = model.findAllMatches(partName) - if (color == None): + if color == None: matches.hide() - - elif isinstance(color, types.StringType): - tex = loader.loadTexture(color) - tex.setMinfilter(Texture.FTLinearMipmapLinear) - tex.setMagfilter(Texture.FTLinear) - for i in range(matches.getNumPaths()): - matches.getPath(i).setTexture(tex, 1) - else: - needsAlpha = (color[3] != 1) + if isinstance(color, bytes): + tex = loader.loadTexture(color) + tex.setMinfilter(Texture.FTLinearMipmapLinear) + tex.setMagfilter(Texture.FTLinear) + for i in range(matches.getNumPaths()): + matches.getPath(i).setTexture(tex, 1) + + needsAlpha = color[3] != 1 color = VBase4(color[0], color[1], color[2], color[3]) for i in range(matches.getNumPaths()): - #matches.getPath(i).setColor(color, 1) matches.getPath(i).setColorScale(color, 1) if needsAlpha: matches.getPath(i).setTransparency(1) + return + def makeFrame(self): - # Returns a DirectFrame suitable for holding models returned - # by getPicture(). - - # Don't import this at the top of the file, since this code - # must run on the AI. from direct.gui.DirectGui import DirectFrame - - frame = DirectFrame(parent = hidden, - frameSize = (-1.0, 1.0, -1.0, 1.0), - relief = None, - ) + frame = DirectFrame(parent=hidden, frameSize=(-1.0, 1.0, -1.0, 1.0), relief=None) return frame + return - def makeFrameModel(self, model, spin = 1): - # Returns a (DirectWidget, Interval) pair to spin the - # indicated model, an arbitrary NodePath, on a panel. Called - # only on the client, from getPicture(), by derived classes - # like CatalogFurnitureItem and CatalogClothingItem. - + def makeFrameModel(self, model, spin=1): frame = self.makeFrame() ival = None if model: - # This 3-d model will be drawn in the 2-d scene. model.setDepthTest(1) model.setDepthWrite(1) - if spin: - # We need two nested nodes: one to pitch down to the user, - # and one to rotate. pitch = frame.attachNewNode('pitch') rotate = pitch.attachNewNode('rotate') scale = rotate.attachNewNode('scale') model.reparentTo(scale) - # Translate model to the center. - bMin,bMax = model.getTightBounds() - center = (bMin + bMax)/2.0 + (bMin, bMax) = model.getTightBounds() + center = (bMin + bMax) / 2.0 model.setPos(-center[0], -center[1], -center[2]) pitch.setP(20) - # Scale the model to fit within a 2x2 box - bMin,bMax = pitch.getTightBounds() - center = (bMin + bMax)/2.0 + (bMin, bMax) = pitch.getTightBounds() + center = (bMin + bMax) / 2.0 corner = Vec3(bMax - center) - #scale.setScale(1.0/corner[2]) - scale.setScale(1.0/max(corner[0],corner[1],corner[2])) + scale.setScale(1.0 / max(corner[0], corner[1], corner[2])) pitch.setY(2) - ival = LerpHprInterval(rotate, 10, VBase3(-270, 0, 0), - startHpr = VBase3(90, 0, 0)) + ival = LerpHprInterval(rotate, 10, VBase3(-270, 0, 0), startHpr=VBase3(90, 0, 0)) else: - # This case is simpler, we do not need all the extra nodes scale = frame.attachNewNode('scale') model.reparentTo(scale) - # Translate model to the center. - bMin,bMax = model.getTightBounds() - center = (bMin + bMax)/2.0 + (bMin, bMax) = model.getTightBounds() + center = (bMin + bMax) / 2.0 model.setPos(-center[0], 2, -center[2]) corner = Vec3(bMax - center) - #scale.setScale(1.0/corner[2]) - scale.setScale(1.0/max(corner[0],corner[1],corner[2])) - - return (frame, ival) + scale.setScale(1.0 / max(corner[0], corner[1], corner[2])) + return ( + frame, ival) + return - def getBlob(self, store = 0): + def getBlob(self, store=0): dg = PyDatagram() dg.addUint8(CatalogItemVersion) encodeCatalogItem(dg, self, store) return dg.getMessage() - - - def getRequestPurchaseErrorTextTimeout(self): - """ - #RAU How long do we display RequestPurchaseErrorText. - Created since we need to display the text longer for garden supplies - """ - return 6 - - def getDaysToGo(self, avatar): - """Return the number of days the toon has to wait before he can buy this.""" - accountDays = avatar.getAccountDays() - daysToGo = self.loyaltyRequirement() - accountDays - if daysToGo <0: - daysToGo = 0 - return int(daysToGo) - -def encodeCatalogItem(dg, item, store): - """encodeCatalogItem - Encodes a CatalogItem of some type into the datagram stream, - writing the type number first so that decodeCatalogItem() can - successfully decode it. - """ - import CatalogItemTypes +def encodeCatalogItem(dg, item, store): + from . import CatalogItemTypes flags = item.getTypeCode() if item.isSaleItem(): flags |= CatalogItemTypes.CatalogItemSaleFlag - if item.giftTag != None: - flags |= CatalogItemTypes.CatalogItemGiftTag dg.addUint8(flags) - if item.giftTag != None: - dg.addUint32(item.giftTag) - if not item.giftCode: - item.giftCode = 0 - dg.addUint8(item.giftCode) - else: - pass - #print("No Gift Tag") - item.encodeDatagram(dg, store) def decodeCatalogItem(di, versionNumber, store): - """decodeCatalogItem - - This function decodes a CatalogItem of an unknown type from the - given datagram stream, reversing the logic used by - encodeCatalogItem(). The new catalog item is returned. - """ - - import CatalogItemTypes global CatalogReverseType + from . import CatalogItemTypes if CatalogReverseType == None: - # First, we have to create the reverse lookup. CatalogReverseType = {} - for itemClass, index in CatalogItemTypes.CatalogItemTypes.items(): + for (itemClass, index) in list(CatalogItemTypes.CatalogItemTypes.items()): CatalogReverseType[index] = itemClass startIndex = di.getCurrentIndex() try: flags = di.getUint8() typeIndex = flags & CatalogItemTypes.CatalogItemTypeMask - gift = None - code = None - if flags & CatalogItemTypes.CatalogItemGiftTag: - - gift = di.getUint32() - code = di.getUint8() - else: - - pass itemClass = CatalogReverseType[typeIndex] - item = itemClass(di, versionNumber, store = store) - - except Exception, e: - CatalogItem.notify.warning("Invalid catalog item in stream: %s, %s" % ( - sys.exc_info()[0], e)) + item = itemClass(di, versionNumber, store=store) + except Exception as e: + CatalogItem.notify.warning('Invalid catalog item in stream: %s, %s' % (sys.exc_info()[0], e)) d = Datagram(di.getDatagram().getMessage()[startIndex:]) d.dumpHex(Notify.out()) - #import pdb; pdb.set_trace()#debug on invalid catalog items - import CatalogInvalidItem + from . import CatalogInvalidItem return CatalogInvalidItem.CatalogInvalidItem() if flags & CatalogItemTypes.CatalogItemSaleFlag: item.saleItem = 1 - item.giftTag = gift - item.giftCode = code - return item + return -def getItem(blob, store = 0): - """getItem - - Returns the CatalogItem written by a previous call to item.getBlob(). - """ +def getItem(blob, store=0): dg = PyDatagram(blob) di = PyDatagramIterator(dg) try: versionNumber = di.getUint8() return decodeCatalogItem(di, versionNumber, store) - except Exception, e: - CatalogItem.notify.warning("Invalid catalog item: %s, %s" % ( - sys.exc_info()[0], e)) + except Exception as e: + CatalogItem.notify.warning('Invalid catalog item: %s, %s' % (sys.exc_info()[0], e)) dg.dumpHex(Notify.out()) - import CatalogInvalidItem - return CatalogInvalidItem.CatalogInvalidItem() + from . import CatalogInvalidItem + return CatalogInvalidItem.CatalogInvalidItem() \ No newline at end of file diff --git a/toontown/src/catalog/CatalogItemList.py b/toontown/src/catalog/CatalogItemList.py index 2862109f..2c215eab 100644 --- a/toontown/src/catalog/CatalogItemList.py +++ b/toontown/src/catalog/CatalogItemList.py @@ -1,113 +1,51 @@ -import CatalogItem +from . import CatalogItem from pandac.PandaModules import * -import types +import types, functools from direct.distributed.PyDatagram import PyDatagram from direct.distributed.PyDatagramIterator import PyDatagramIterator class CatalogItemList: - """CatalogItemList - - This class presents itself as a list of CatalogItem objects. It - behaves like a normal Python list, except it supports lazy - decoding: it can be initialized from a blob received by the - network system; it won't attempt to decode the blob until some - properties of the catalog list are requested. This saves some CPU - time for the majority of cases when we download the - CatalogItemList but don't care about inspecting it. - """ - - def __init__(self, source = None, store = 0): - # The source may be either a list, a string blob, or another - # CatalogItemList object. - - # The store parameter indicates the bitmask of additional - # properties we will store in (or decode from) the blob along - # with each CatalogItem. See CatalogItem.py. + + def __init__(self, source=None, store=0): self.store = store - - # The data is stored in either or both of self.__blob and - # self.__list. If either one is None, the current data is - # stored in the other. If both are None, the data represents - # an empty list. self.__blob = None self.__list = None - - if isinstance(source, types.StringType): + if isinstance(source, bytes): self.__blob = source - elif isinstance(source, types.ListType): + elif isinstance(source, list): self.__list = source[:] elif isinstance(source, CatalogItemList): - # Copy from another CatalogItemList. if source.store == store: - # If the store types are the same, we can get away - # with copying the list (if it is defined), and also - # copying the blob. if source.__list != None: self.__list = source.__list[:] self.__blob = source.__blob else: - # If the store types are different, we must copy the list. self.__list = source[:] - else: - assert(source == None) + return def markDirty(self): - # Call this whenever you know one of the items has changed - # internally and you need to regenerate a new blob that - # reflects that change. if self.__list: self.__blob = None + return - def getBlob(self, store = None): + def getBlob(self, store=None): if store == None or store == self.store: - # If we are asking for a blob that matches our store type, - # we can just return our cached value. if self.__blob == None: self.__encodeList() return self.__blob - - # Otherwise, we must compute a new blob according to the - # indicated store type. return self.__makeBlob(store) + return def getNextDeliveryDate(self): - # Returns the minimum of all the listed items' delivery times, - # or None if the list is empty. - if len(self) == 0: - return None - nextDeliveryDate = None for item in self: - #print ("item %s" %(item)) - if item: - if nextDeliveryDate == None or \ - item.deliveryDate < nextDeliveryDate: - nextDeliveryDate = item.deliveryDate + if nextDeliveryDate == None or item.deliveryDate < nextDeliveryDate: + nextDeliveryDate = item.deliveryDate return nextDeliveryDate - - def getNextDeliveryItem(self): - # Returns the minimum of all the listed items' delivery times, - # or None if the list is empty. - if len(self) == 0: - return None - - nextDeliveryDate = None - nextDeliveryItem = None - for item in self: - if item: - if nextDeliveryDate == None or \ - item.deliveryDate < nextDeliveryDate: - nextDeliveryDate = item.deliveryDate - nextDeliveryItem = item - - return nextDeliveryItem + return def extractDeliveryItems(self, cutoffTime): - # Extracts from the list the set of items whose delivery time - # is on or before the cutoff time. Returns a list of items to - # be delivered and a list of items still on the way. - beforeTime = [] afterTime = [] for item in self: @@ -116,59 +54,46 @@ def extractDeliveryItems(self, cutoffTime): else: afterTime.append(item) - return (CatalogItemList(beforeTime, store = self.store), - CatalogItemList(afterTime, store = self.store)) + return ( + CatalogItemList(beforeTime, store=self.store), CatalogItemList(afterTime, store=self.store)) def extractOldestItems(self, count): - # Extracts from the list the count oldest items. Returns a - # list of the extracted items and a list of remaining items. - - # Actually, we can cheat because we know new items are always - # appended to the end of the list. So just extract the first - # n items. - return (self[0:count], self[count:]) - + return ( + self[0:count], self[count:]) + def __encodeList(self): - # We shouldn't try to call this function twice. - assert(self.__blob == None) self.__blob = self.__makeBlob(self.store) def __makeBlob(self, store): - # Construct a new datagram and fill it up with the items in - # the list. dg = PyDatagram() - if self.__list: # empty list or None means nothing on the list. + if self.__list: dg.addUint8(CatalogItem.CatalogItemVersion) for item in self.__list: CatalogItem.encodeCatalogItem(dg, item, store) + return dg.getMessage() - + def __decodeList(self): - # We shouldn't try to call this function twice. - assert(self.__list == None) self.__list = self.__makeList(self.store) def __makeList(self, store): - # Construct a new list and populate it with the items decoded - # from the blob. list = [] - if self.__blob: # empty string or None means nothing on the list. + if self.__blob: dg = PyDatagram(self.__blob) di = PyDatagramIterator(dg) versionNumber = di.getUint8() while di.getRemainingSize() > 0: item = CatalogItem.decodeCatalogItem(di, versionNumber, store) list.append(item) - return list + return list - # Functions to make this act just like a Python list. - def append(self, item): if self.__list == None: self.__decodeList() self.__list.append(item) self.__blob = None + return def extend(self, items): self += items @@ -177,19 +102,22 @@ def count(self, item): if self.__list == None: self.__decodeList() return self.__list.count(item) + return def index(self, item): if self.__list == None: self.__decodeList() return self.__list.index(item) + return def insert(self, index, item): if self.__list == None: self.__decodeList() self.__list.insert(index, item) self.__blob = None + return - def pop(self, index = None): + def pop(self, index=None): if self.__list == None: self.__decodeList() self.__blob = None @@ -197,69 +125,80 @@ def pop(self, index = None): return self.__list.pop() else: return self.__list.pop(index) + return def remove(self, item): if self.__list == None: self.__decodeList() self.__list.remove(item) self.__blob = None + return def reverse(self): if self.__list == None: self.__decodeList() self.__list.reverse() self.__blob = None + return - def sort(self, cmpfunc = None): + def sort(self, cmpfunc=None): if self.__list == None: self.__decodeList() if cmpfunc == None: self.__list.sort() else: - self.__list.sort(cmpfunc) + self.__list.sort(key=functools.cmp_to_key(cmpfunc)) self.__blob = None + return def __len__(self): if self.__list == None: self.__decodeList() return len(self.__list) + return def __getitem__(self, index): if self.__list == None: self.__decodeList() return self.__list[index] + return def __setitem__(self, index, item): if self.__list == None: self.__decodeList() self.__list[index] = item self.__blob = None + return def __delitem__(self, index): if self.__list == None: self.__decodeList() del self.__list[index] self.__blob = None + return def __getslice__(self, i, j): if self.__list == None: self.__decodeList() - return CatalogItemList(self.__list[i : j], store = self.store) + return CatalogItemList(self.__list[i:j], store=self.store) + return def __setslice__(self, i, j, s): if self.__list == None: self.__decodeList() if isinstance(s, CatalogItemList): - self.__list[i : j] = s.__list + self.__list[i:j] = s.__list else: - self.__list[i : j] = s + self.__list[i:j] = s self.__blob = None + return def __delslice__(self, i, j): if self.__list == None: self.__decodeList() - del self.__list[i : j] + del self.__list[i:j] self.__blob = None + return def __iadd__(self, other): if self.__list == None: @@ -267,24 +206,25 @@ def __iadd__(self, other): self.__list += list(other) self.__blob = None return self + return def __add__(self, other): - copy = CatalogItemList(self, store = self.store) + copy = CatalogItemList(self, store=self.store) copy += other return copy - def __repr__(self): return self.output() def __str__(self): return self.output() - def output(self, store = ~0): + def output(self, store=-1): if self.__list == None: self.__decodeList() - inner = "" + inner = '' for item in self.__list: - inner += ", %s" % (item.output(store)) - return "CatalogItemList([%s])" % (inner[2:]) + inner += ', %s' % item.output(store) + return 'CatalogItemList([%s])' % inner[2:] + return \ No newline at end of file diff --git a/toontown/src/catalog/CatalogItemPanel.py b/toontown/src/catalog/CatalogItemPanel.py index 555a9453..1cd06865 100644 --- a/toontown/src/catalog/CatalogItemPanel.py +++ b/toontown/src/catalog/CatalogItemPanel.py @@ -1,75 +1,37 @@ from direct.gui.DirectGui import * -from pandac.PandaModules import * from toontown.toonbase import ToontownGlobals from toontown.toontowngui import TTDialog from toontown.toonbase import TTLocalizer -import CatalogItemTypes -import CatalogItem -from CatalogWallpaperItem import getAllWallpapers -from CatalogFlooringItem import getAllFloorings -from CatalogMouldingItem import getAllMouldings -from CatalogWainscotingItem import getAllWainscotings -from CatalogFurnitureItem import getAllFurnitures -from toontown.toontowngui.TeaserPanel import TeaserPanel -from otp.otpbase import OTPGlobals - -CATALOG_PANEL_WORDWRAP = 10 -CATALOG_PANEL_CHAT_WORDWRAP = 9 +from . import CatalogItemTypes, CatalogItem +from .CatalogWallpaperItem import getAllWallpapers +from .CatalogFlooringItem import getAllFloorings +from .CatalogMouldingItem import getAllMouldings +from .CatalogWainscotingItem import getAllWainscotings +from .CatalogFurnitureItem import getAllFurnitures +CATALOG_PANEL_WORDWRAP = 8 class CatalogItemPanel(DirectFrame): - """ - CatalogItemPanel + __module__ = __name__ - This class presents the graphical represntation of a catalog item in the - Catalog GUI. - """ - def __init__(self, parent=aspect2d, parentCatalogScreen = None ,**kw): - optiondefs = ( - # Define type of DirectGuiWidget - ('item', None, DGG.INITOPT), - ('type', CatalogItem.CatalogTypeUnspecified, DGG.INITOPT), - ('relief', None, None), - ) - self.parentCatalogScreen = parentCatalogScreen; - # Merge keyword options with default options + def __init__(self, parent=aspect2d, **kw): + optiondefs = (('item', None, INITOPT), ('type', CatalogItem.CatalogTypeUnspecified, INITOPT), ('relief', None, None)) self.defineoptions(kw, optiondefs) - # Initialize superclasses DirectFrame.__init__(self, parent) self.loaded = 0 - - # Loading is done lazily as we display each item. - # This reduces the initial load time when first opening the catalog - # and nicely spreads it out - # self.load() - # Call initialization methods self.initialiseoptions(CatalogItemPanel) - assert parentCatalogScreen != None, "parentCatalogScreen: is none" - + return + def load(self): - # Loading is guarded so things only get loaded once if self.loaded: return self.loaded = 1 - # Init variables self.verify = None - # Some items know how to draw themselves. Put this first so - # it will be below any text on the frame. - # Add a picture Frame so draw order is preserved if you change - # the picture self.pictureFrame = self.attachNewNode('pictureFrame') self.pictureFrame.setScale(0.15) self.itemIndex = 0 self.ival = None - # If this is an item that needs customization, add buttons - # to scroll through variations typeCode = self['item'].getTypeCode() - if (self['item'].needsCustomize() and - ((typeCode == CatalogItemTypes.WALLPAPER_ITEM) or - (typeCode == CatalogItemTypes.FLOORING_ITEM) or - (typeCode == CatalogItemTypes.MOULDING_ITEM) or - (typeCode == CatalogItemTypes.FURNITURE_ITEM) or - (typeCode == CatalogItemTypes.WAINSCOTING_ITEM) or - (typeCode == CatalogItemTypes.TOON_STATUE_ITEM))): + if self['item'].needsCustomize() and (typeCode == CatalogItemTypes.WALLPAPER_ITEM or typeCode == CatalogItemTypes.FLOORING_ITEM or typeCode == CatalogItemTypes.MOULDING_ITEM or typeCode == CatalogItemTypes.FURNITURE_ITEM or typeCode == CatalogItemTypes.WAINSCOTING_ITEM): if typeCode == CatalogItemTypes.WALLPAPER_ITEM: self.items = getAllWallpapers(self['item'].patternIndex) elif typeCode == CatalogItemTypes.FLOORING_ITEM: @@ -78,588 +40,174 @@ def load(self): self.items = getAllMouldings(self['item'].patternIndex) elif typeCode == CatalogItemTypes.FURNITURE_ITEM: self.items = getAllFurnitures(self['item'].furnitureType) - elif typeCode == CatalogItemTypes.TOON_STATUE_ITEM: - self.items = self['item'].getAllToonStatues() elif typeCode == CatalogItemTypes.WAINSCOTING_ITEM: self.items = getAllWainscotings(self['item'].patternIndex) self.numItems = len(self.items) if self.numItems > 1: - guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui') + guiItems = loader.loadModelCopy('phase_5.5/models/gui/catalog_gui') nextUp = guiItems.find('**/arrow_up') nextRollover = guiItems.find('**/arrow_Rollover') nextDown = guiItems.find('**/arrow_Down') prevUp = guiItems.find('**/arrowUp') prevDown = guiItems.find('**/arrowDown1') prevRollover = guiItems.find('**/arrowRollover') - self.nextVariant = DirectButton( - parent = self, - relief = None, - image = (nextUp, nextDown, nextRollover, nextUp), - image3_color = (1,1,1,.4), - pos = (0.13,0,0), - command = self.showNextVariant, - ) - self.prevVariant = DirectButton( - parent = self, - relief = None, - image = (prevUp, prevDown, prevRollover, prevUp), - image3_color = (1,1,1,.4), - pos = (-0.13,0,0), - command = self.showPrevVariant, - state = DGG.DISABLED, - ) - self.variantPictures = [(None, None)] * self.numItems + self.nextVariant = DirectButton(parent=self, relief=None, image=(nextUp, nextDown, nextRollover, nextUp), image3_color=(1, 1, 1, 0.4), pos=(0.13, 0, 0), command=self.showNextVariant) + self.prevVariant = DirectButton(parent=self, relief=None, image=(prevUp, prevDown, prevRollover, prevUp), image3_color=(1, 1, 1, 0.4), pos=(-0.13, 0, 0), command=self.showPrevVariant, state=DISABLED) + self.variantPictures = [ + ( + None, None)] * self.numItems else: - self.variantPictures = [(None, None)] + self.variantPictures = [ + ( + None, None)] self.showCurrentVariant() else: - # Some items know how to draw themselves. Put this first so - # it will be below any text on the frame. - - picture,self.ival = self['item'].getPicture(base.localAvatar) + (picture, self.ival) = self['item'].getPicture(base.localAvatar) if picture: picture.reparentTo(self) picture.setScale(0.15) - - self.items = [self['item']] + self.items = [ + self['item']] self.variantPictures = [(picture, self.ival)] - # type label - self.typeLabel = DirectLabel( - parent = self, - relief = None, - pos = (0,0,0.24), - scale = 0.075, - text = self['item'].getTypeName(), - text_fg = (0.95, 0.95, 0, 1), - text_shadow = (0, 0, 0, 1), - text_font = ToontownGlobals.getInterfaceFont(), - text_wordwrap = CATALOG_PANEL_WORDWRAP, - ) - # aux text label - self.auxText = DirectLabel( - parent = self, - relief = None, - scale = 0.05, - pos = (-0.20, 0, 0.16), - ) - # Put this one at a jaunty angle - self.auxText.setHpr(0,0,-30) - - self.nameLabel = DirectLabel( - parent = self, - relief = None, - text = self['item'].getDisplayName(), - text_fg = (0, 0, 0, 1), - text_font = ToontownGlobals.getInterfaceFont(), - text_scale = TTLocalizer.CIPnameLabel, - text_wordwrap = CATALOG_PANEL_WORDWRAP + TTLocalizer.CIPwordwrapOffset, - ) - + self.typeLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, 0.24), scale=0.075, text=self['item'].getTypeName(), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=CATALOG_PANEL_WORDWRAP) + self.auxText = DirectLabel(parent=self, relief=None, scale=0.05, pos=(-0.24, 0, 0.16)) + self.auxText.setHpr(0, 0, 30) + self.nameLabel = DirectLabel(parent=self, relief=None, text=self['item'].getDisplayName(), text_fg=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=CATALOG_PANEL_WORDWRAP) if self['item'].getTypeCode() == CatalogItemTypes.CHAT_ITEM: - # adjust wordwrap as the bubbles are narrower - self.nameLabel['text_wordwrap'] = CATALOG_PANEL_CHAT_WORDWRAP - # Center the text vertically on the chat balloon based - # on the number of rows of text numRows = self.nameLabel.component('text0').textNode.getNumRows() if numRows == 1: - namePos = (0,0,-0.06) + namePos = ( + 0, 0, -0.06) elif numRows == 2: - namePos = (0,0,-0.03) + namePos = ( + 0, 0, -0.03) else: - namePos = (0,0,0) + namePos = ( + 0, 0, 0) nameScale = 0.063 else: - namePos = (0,0,-.22) + namePos = ( + 0, 0, -0.22) nameScale = 0.06 self.nameLabel.setPos(*namePos) self.nameLabel.setScale(nameScale) - - priceStr = str(self['item'].getPrice(self['type'])) + " " + TTLocalizer.CatalogCurrency + priceStr = str(self['item'].getPrice(self['type'])) + ' ' + TTLocalizer.CatalogCurrency priceScale = 0.07 - # prepend sale sign if necessary if self['item'].isSaleItem(): priceStr = TTLocalizer.CatalogSaleItem + priceStr priceScale = 0.06 - # price label - self.priceLabel = DirectLabel( - parent = self, - relief = None, - pos = (0,0,-0.3), - scale = priceScale, - text = priceStr, - text_fg = (0.95, 0.95, 0, 1), - text_shadow = (0, 0, 0, 1), - text_font = ToontownGlobals.getSignFont(), - text_align = TextNode.ACenter, - ) + self.priceLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, -0.3), scale=priceScale, text=priceStr, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ACenter) + buttonModels = loader.loadModelOnce('phase_3.5/models/gui/inventory_gui') + upButton = buttonModels.find('**/InventoryButtonUp') + downButton = buttonModels.find('**/InventoryButtonDown') + rolloverButton = buttonModels.find('**/InventoryButtonRollover') + self.buyButton = DirectButton(parent=self, relief=None, pos=(0.2, 0, 0.15), scale=(0.7, 1, 0.8), text=TTLocalizer.CatalogBuyText, text_scale=(0.06, 0.05), text_pos=(-0.005, -0.01), image=(upButton, downButton, rolloverButton, upButton), image_color=(1.0, 0.2, 0.2, 1), image0_color=Vec4(1.0, 0.4, 0.4, 1), image3_color=Vec4(1.0, 0.4, 0.4, 0.4), command=self.__handlePurchaseRequest) + self.updateBuyButton() + return - # buy button - buttonModels = loader.loadModel( - "phase_3.5/models/gui/inventory_gui") - upButton = buttonModels.find("**/InventoryButtonUp") - downButton = buttonModels.find("**/InventoryButtonDown") - rolloverButton = buttonModels.find("**/InventoryButtonRollover") - - buyText = TTLocalizer.CatalogBuyText - - if self['item'].isRental(): - buyText = TTLocalizer.CatalogRentText - - self.buyButton = DirectButton( - parent = self, - relief = None, - pos = (0.2, 0, 0.15), - scale = (0.7,1,0.8), - text = buyText, - text_scale = (0.06, 0.05), - text_pos = (-0.005,-0.01), - image = (upButton, - downButton, - rolloverButton, - upButton, - ), - image_color = (1.0, 0.2, 0.2, 1), - # Make the rollover button pop out - image0_color = Vec4(1.0, 0.4, 0.4, 1), - # Make the disabled button fade out - image3_color = Vec4(1.0, 0.4, 0.4, 0.4), - command = self.__handlePurchaseRequest, - ) - #self.updateBuyButton() - - soundIcons = loader.loadModel('phase_5.5/models/gui/catalogSoundIcons') - soundOn = soundIcons.find('**/sound07') - - soundOff = soundIcons.find('**/sound08') - - self.soundOnButton = DirectButton( - parent = self, - relief = None, - pos = (0.2, 0, -0.15), - scale = (0.7,1,0.8), - #geom = soundOn, - #text = TTLocalizer.CatalogSndOnText, - text_scale = (0.06, 0.05), - text_pos = (-0.005,-0.01), - image = (upButton, - downButton, - rolloverButton, - upButton, - ), - image_color = (0.2, 0.5, 0.2, 1), - # Make the rollover button pop out - image0_color = Vec4(0.4, 0.5, 0.4, 1), - # Make the disabled button fade out - image3_color = Vec4(0.4, 0.5, 0.4, 0.4), - command = self.handleSoundOnButton, - ) - self.soundOnButton.hide() - soundOn.setScale(0.1) - soundOn.reparentTo(self.soundOnButton) - - self.soundOffButton = DirectButton( - parent = self, - relief = None, - pos = (0.2, 0, -0.15), - scale = (0.7,1,0.8), - #text = TTLocalizer.CatalogSndOffText, - text_scale = (0.06, 0.05), - text_pos = (-0.005,-0.01), - image = (upButton, - downButton, - rolloverButton, - upButton, - ), - image_color = (0.2, 1.0, 0.2, 1), - # Make the rollover button pop out - image0_color = Vec4(0.4, 1.0, 0.4, 1), - # Make the disabled button fade out - image3_color = Vec4(0.4, 1.0, 0.4, 0.4), - command = self.handleSoundOffButton, - ) - self.soundOffButton.hide() - soundOff = self.soundOffButton.attachNewNode('soundOff') - soundOn.copyTo(soundOff) - #soundOff.setScale(0.1) - soundOff.reparentTo(self.soundOffButton) - - upGButton = buttonModels.find("**/InventoryButtonUp") - downGButton = buttonModels.find("**/InventoryButtonDown") - rolloverGButton = buttonModels.find("**/InventoryButtonRollover") - - ##if len(base.localAvatar.friendsList) > 0: - self.giftButton = DirectButton( - parent = self, - relief = None, - pos = (0.2, 0, 0.15), - scale = (0.7,1,0.8), - text = TTLocalizer.CatalogGiftText, - text_scale = (0.06, 0.05), - text_pos = (-0.005,-0.01), - image = (upButton, - downButton, - rolloverButton, - upButton, - ), - image_color = (1.0, 0.2, 0.2, 1), - # Make the rollover button pop out - image0_color = Vec4(1.0, 0.4, 0.4, 1), - # Make the disabled button fade out - image3_color = Vec4(1.0, 0.4, 0.4, 0.4), - command = self.__handleGiftRequest, - ) - self.updateButtons() - def showNextVariant(self): - messenger.send('wakeup') self.hideCurrentVariant() self.itemIndex += 1 if self.itemIndex >= self.numItems - 1: self.itemIndex = self.numItems - 1 - self.nextVariant['state'] = DGG.DISABLED + self.nextVariant['state'] = DISABLED else: - self.nextVariant['state'] = DGG.NORMAL - self.prevVariant['state'] = DGG.NORMAL + self.nextVariant['state'] = NORMAL + self.prevVariant['state'] = NORMAL self.showCurrentVariant() - + def showPrevVariant(self): - messenger.send('wakeup') self.hideCurrentVariant() self.itemIndex -= 1 if self.itemIndex < 0: self.itemIndex = 0 - self.prevVariant['state'] = DGG.DISABLED + self.prevVariant['state'] = DISABLED else: - self.prevVariant['state'] = DGG.NORMAL - self.nextVariant['state'] = DGG.NORMAL + self.prevVariant['state'] = NORMAL + self.nextVariant['state'] = NORMAL self.showCurrentVariant() - + def showCurrentVariant(self): - newPic, self.ival = self.variantPictures[self.itemIndex] + (newPic, self.ival) = self.variantPictures[self.itemIndex] if self.ival: self.ival.finish() if not newPic: variant = self.items[self.itemIndex] - newPic, self.ival = variant.getPicture(base.localAvatar) + (newPic, self.ival) = variant.getPicture(base.localAvatar) self.variantPictures[self.itemIndex] = (newPic, self.ival) newPic.reparentTo(self.pictureFrame) if self.ival: self.ival.loop() - if (self['item'].getTypeCode() == CatalogItemTypes.TOON_STATUE_ITEM): - if hasattr(self, 'nameLabel'): - self.nameLabel['text'] = self.items[self.itemIndex].getDisplayName() - self['item'].gardenIndex = self.items[self.itemIndex].gardenIndex - + def hideCurrentVariant(self): currentPic = self.variantPictures[self.itemIndex][0] if currentPic: currentPic.detachNode() - + def unload(self): if not self.loaded: DirectFrame.destroy(self) return self.loaded = 0 - - # Getting Toon Statue to the first pose before exiting. - if (self['item'].getTypeCode() == CatalogItemTypes.TOON_STATUE_ITEM): - self['item'].deleteAllToonStatues() - self['item'].gardenIndex = self['item'].startPoseIndex - self.nameLabel['text'] = self['item'].getDisplayName() - - # Cleanup any items created during requestPurchase self['item'].requestPurchaseCleanup() - # Clear out instance variables - for picture, ival in self.variantPictures: + for (picture, ival) in self.variantPictures: if picture: picture.destroy() if ival: ival.finish() - self.variantPictures=None - if self.ival: - self.ival.finish() - self.ival = None - if(len(self.items)): - self.items[0].cleanupPicture() - self.pictureFrame.remove() - self.pictureFrame=None - self.items=[] + self.ival = None if self.verify: self.verify.cleanup() DirectFrame.destroy(self) - + return + def destroy(self): - # this is only so the DirectGui code cleans us up properly - self.parentCatalogScreen=None self.unload() - def getTeaserPanel(self): - # display the appropriate page of the feature browser for this catalog item type - typeName = self['item'].getTypeName() - if (typeName == TTLocalizer.EmoteTypeName) or (typeName == TTLocalizer.ChatTypeName): - page = 'emotions' - elif (typeName == TTLocalizer.GardenTypeName) or (typeName == TTLocalizer.GardenStarterTypeName): - page = 'gardening' - else: - # default - page = 'clothing' - def showTeaserPanel(): - TeaserPanel(pageName=page) - return showTeaserPanel - def updateBuyButton(self): - # display the correct button based on item status - # if reached purchase limit if not self.loaded: return - - # Only paid members can purchase - if not base.cr.isPaid(): - self.buyButton['command'] = self.getTeaserPanel() - - #print (self['item'].getName()) - # Show if on order - self.buyButton.show() - - typeCode = self['item'].getTypeCode() - orderCount = base.localAvatar.onOrder.count(self['item']) - if (orderCount > 0): + orderCount = base.localAvatar.onOrder.count(self['item']) + if orderCount > 0: if orderCount > 1: - auxText = "%d %s" % (orderCount, TTLocalizer.CatalogOnOrderText) + auxText = '%d %s' % (orderCount, TTLocalizer.CatalogOnOrderText) else: auxText = TTLocalizer.CatalogOnOrderText - #self.buyButton.hide() else: - auxText = "" - # else if you have the current nametag - isNameTag = (typeCode == CatalogItemTypes.NAMETAG_ITEM) - if isNameTag and not (localAvatar.getGameAccess() == OTPGlobals.AccessFull): - # If the item panel is the free player nametag - if (self['item'].nametagStyle == 100): - if (localAvatar.getFont() == ToontownGlobals.getToonFont()): - auxText = TTLocalizer.CatalogCurrent - self.buyButton['state'] = DGG.DISABLED - elif isNameTag and (self['item'].nametagStyle == localAvatar.getNametagStyle()): - auxText = TTLocalizer.CatalogCurrent - self.buyButton['state'] = DGG.DISABLED - elif (self['item'].reachedPurchaseLimit(base.localAvatar)): + auxText = '' + if self['item'].reachedPurchaseLimit(base.localAvatar): max = self['item'].getPurchaseLimit() - # Override aux text if max <= 1: auxText = TTLocalizer.CatalogPurchasedText - if self['item'].hasBeenGifted(base.localAvatar): - auxText = TTLocalizer.CatalogGiftedText else: auxText = TTLocalizer.CatalogPurchasedMaxText - self.buyButton['state'] = DGG.DISABLED - #self.buyButton.hide() - # else if can afford - elif ( hasattr(self['item'], 'noGarden') and - self['item'].noGarden(base.localAvatar)): - auxText = TTLocalizer.NoGarden - self.buyButton['state'] = DGG.DISABLED - elif ( hasattr(self['item'], 'isSkillTooLow') and - self['item'].isSkillTooLow(base.localAvatar)): - auxText = TTLocalizer.SkillTooLow - self.buyButton['state'] = DGG.DISABLED - elif ( hasattr(self['item'], 'getDaysToGo') and - self['item'].getDaysToGo(base.localAvatar)): - auxText = TTLocalizer.DaysToGo % self['item'].getDaysToGo(base.localAvatar) - self.buyButton['state'] = DGG.DISABLED - elif ( self['item'].getPrice(self['type']) <= - (base.localAvatar.getMoney() + - base.localAvatar.getBankMoney()) ): - self.buyButton['state'] = DGG.NORMAL - self.buyButton.show() - # else ghosted buy button + self.buyButton['state'] = DISABLED + self.buyButton.show() + elif self['item'].getPrice(self['type']) <= base.localAvatar.getMoney() + base.localAvatar.getBankMoney(): + self.buyButton['state'] = NORMAL + self.buyButton.show() else: - self.buyButton['state'] = DGG.DISABLED + self.buyButton['state'] = DISABLED self.buyButton.show() self.auxText['text'] = auxText - + def __handlePurchaseRequest(self): - # prompt the user to verify purchase if self['item'].replacesExisting() and self['item'].hasExisting(): - message = TTLocalizer.CatalogOnlyOnePurchase % { - 'old' : self['item'].getYourOldDesc(), - 'item' : self['item'].getName(), - 'price' : self['item'].getPrice(self['type']), - } + message = TTLocalizer.CatalogOnlyOnePurchase % {'old': self['item'].getYourOldDesc(), 'item': self['item'].getName(), 'price': self['item'].getPrice(self['type'])} else: - if self['item'].isRental(): - message = TTLocalizer.CatalogVerifyRent % { - 'item' : self['item'].getName(), - 'price' : self['item'].getPrice(self['type']), - } - else: - message = TTLocalizer.CatalogVerifyPurchase % { - 'item' : self['item'].getName(), - 'price' : self['item'].getPrice(self['type']), - } - - self.verify = TTDialog.TTGlobalDialog( - doneEvent = "verifyDone", - message = message, - style = TTDialog.TwoChoice) + message = TTLocalizer.CatalogVerifyPurchase % {'item': self['item'].getName(), 'price': self['item'].getPrice(self['type'])} + self.verify = TTDialog.TTGlobalDialog(doneEvent='verifyDone', message=message, style=TTDialog.TwoChoice) self.verify.show() - self.accept("verifyDone", self.__handleVerifyPurchase) - + self.accept('verifyDone', self.__handleVerifyPurchase) + def __handleVerifyPurchase(self): - # prompt the user to verify purchase status = self.verify.doneStatus - self.ignore("verifyDone") + self.ignore('verifyDone') self.verify.cleanup() del self.verify self.verify = None - if (status == "ok"): - # ask the AI to clear this purchase + if status == 'ok': item = self.items[self.itemIndex] - messenger.send("CatalogItemPurchaseRequest", [item]) - self.buyButton['state'] = DGG.DISABLED - - def __handleGiftRequest(self): - # prompt the user to verify purchase - if self['item'].replacesExisting() and self['item'].hasExisting(): - message = TTLocalizer.CatalogOnlyOnePurchase % { - 'old' : self['item'].getYourOldDesc(), - 'item' : self['item'].getName(), - 'price' : self['item'].getPrice(self['type']), - } - else: - friendIndex = self.parentCatalogScreen.friendGiftIndex - friendText = "Error"; - numFriends = len(base.localAvatar.friendsList) + len(base.cr.avList) - 1 - if numFriends > 0: - #friendPair = base.localAvatar.friendsList[self.parentCatalogScreen.friendGiftIndex] - #handle = base.cr.identifyFriend(friendPair[0]) - #friendText = self.parentCatalogScreen.friendGiftHandle.getName() - friendText = self.parentCatalogScreen.receiverName - message = TTLocalizer.CatalogVerifyGift % { - 'item' : self['item'].getName(), - 'price' : self['item'].getPrice(self['type']), - 'friend' : friendText, - } - - self.verify = TTDialog.TTGlobalDialog( - doneEvent = "verifyGiftDone", - message = message, - style = TTDialog.TwoChoice) - self.verify.show() - self.accept("verifyGiftDone", self.__handleVerifyGift) - - def __handleVerifyGift(self): - # prompt the user to verify purchase - status = self.verify.doneStatus - self.ignore("verifyGiftDone") - self.verify.cleanup() - del self.verify - self.verify = None - if (status == "ok"): - # ask the AI to clear this purchase - self.giftButton['state'] = DGG.DISABLED - item = self.items[self.itemIndex] - messenger.send("CatalogItemGiftPurchaseRequest", [item]) - - def updateButtons(self, giftActivate = 0): - if self.parentCatalogScreen.gifting == -1: - self.updateBuyButton() - if self.loaded: - self.giftButton.hide() - else: - #print("update gift button") - self.updateGiftButton(giftActivate) - if self.loaded: - self.buyButton.hide() - - def updateGiftButton(self, giftUpdate = 0): - # display the correct button based on item status - # if reached purchase limit - if not self.loaded: - return - self.giftButton.show() - if giftUpdate == 0: - return - - # Only paid members can purchase gifts - if not base.cr.isPaid(): - self.giftButton['command'] = self.getTeaserPanel() - - self.auxText['text'] = " " - numFriends = len(base.localAvatar.friendsList) + len(base.cr.avList) - 1 - if numFriends > 0: - # Start as ghosted and disabled - self.giftButton['state'] = DGG.DISABLED - #self.giftButton['state'] = DGG.NORMAL #REMOVE ME - self.giftButton.show() - #return # REMOVE ME - #friendPair = base.localAvatar.friendsList[self.parentCatalogScreen.friendGiftIndex] - #if it's not a gift hide it - auxText = " " - if (self['item'].isGift() <= 0): - self.giftButton.show() - self.giftButton['state'] = DGG.DISABLED - auxText = TTLocalizer.CatalogNotAGift - self.auxText['text'] = auxText - return - #print "not a gift" - #self.giftButton.hide() - #otherwise if you have a valid avater for your friend attempt to activate the button - elif (self.parentCatalogScreen.gotAvatar == 1): - avatar = self.parentCatalogScreen.giftAvatar #aliasing the giftAvater - #if it is for the other gender then fail - if((self['item'].forBoysOnly() and avatar.getStyle().getGender() == 'f') or (self['item'].forGirlsOnly() and avatar.getStyle().getGender() == 'm')): - self.giftButton.show() - self.giftButton['state'] = DGG.DISABLED - auxText = TTLocalizer.CatalogNoFit - self.auxText['text'] = auxText - #print "fit" - return - #if it's purchase limit is reached fail - elif(self['item'].reachedPurchaseLimit(avatar)): - self.giftButton.show() - self.giftButton['state'] = DGG.DISABLED - auxText = TTLocalizer.CatalogPurchasedGiftText - self.auxText['text'] = auxText - #print "limit" - return - #if their onGiftorder box is full - elif len(avatar.mailboxContents) + len(avatar.onGiftOrder) >= ToontownGlobals.MaxMailboxContents: - self.giftButton.show() - self.giftButton['state'] = DGG.DISABLED - auxText = TTLocalizer.CatalogMailboxFull - self.auxText['text'] = auxText - #print "full" - return - #if can you afford it activate the gift button - elif ( self['item'].getPrice(self['type']) <= - (base.localAvatar.getMoney() + - base.localAvatar.getBankMoney()) ): - self.giftButton['state'] = DGG.NORMAL - self.giftButton.show() - - def handleSoundOnButton(self): - """Handle the user clicking on the sound.""" - #import pdb; pdb.set_trace() - item = self.items[self.itemIndex] - self.soundOnButton.hide() - self.soundOffButton.show() - if hasattr(item, 'changeIval'): - if self.ival: - self.ival.finish() - self.ival = None - self.ival = item.changeIval(volume = 1) - self.ival.loop() - - def handleSoundOffButton(self): - """Handle the user clicking off the sound.""" - #import pdb; pdb.set_trace() - item = self.items[self.itemIndex] - self.soundOffButton.hide() - self.soundOnButton.show() - if hasattr(item, 'changeIval'): - if self.ival: - self.ival.finish() - self.ival = None - self.ival = item.changeIval(volume = 0) - self.ival.loop() + messenger.send('CatalogItemPurchaseRequest', [item]) + return \ No newline at end of file diff --git a/toontown/src/catalog/CatalogItemTypes.py b/toontown/src/catalog/CatalogItemTypes.py index 84988dc2..c93d02fe 100644 --- a/toontown/src/catalog/CatalogItemTypes.py +++ b/toontown/src/catalog/CatalogItemTypes.py @@ -1,108 +1,16 @@ -import CatalogFurnitureItem -import CatalogChatItem -import CatalogClothingItem -import CatalogEmoteItem -import CatalogWallpaperItem -import CatalogFlooringItem -import CatalogWainscotingItem -import CatalogMouldingItem -import CatalogWindowItem -import CatalogPoleItem -import CatalogPetTrickItem -import CatalogBeanItem -import CatalogGardenItem -import CatalogInvalidItem -import CatalogRentalItem -import CatalogGardenStarterItem -import CatalogNametagItem -import CatalogToonStatueItem -import CatalogAnimatedFurnitureItem - -# Catalog item type codes. These code numbers are written to the -# database to represent each particular type of catalog item; you may -# add to this list, but don't change previous numbers once they have -# been published. -# As you add more item types, please add to TTLocalizer.CatalogItemTypeNames too -INVALID_ITEM = 0 -FURNITURE_ITEM = 1 -CHAT_ITEM = 2 -CLOTHING_ITEM = 3 -EMOTE_ITEM = 4 -WALLPAPER_ITEM = 5 -WINDOW_ITEM = 6 -FLOORING_ITEM = 7 -MOULDING_ITEM = 8 +from . import CatalogFurnitureItem, CatalogChatItem, CatalogClothingItem, CatalogEmoteItem, CatalogWallpaperItem, CatalogFlooringItem, CatalogWainscotingItem, CatalogMouldingItem, CatalogWindowItem, CatalogPoleItem, CatalogPetTrickItem, CatalogInvalidItem +INVALID_ITEM = 0 +FURNITURE_ITEM = 1 +CHAT_ITEM = 2 +CLOTHING_ITEM = 3 +EMOTE_ITEM = 4 +WALLPAPER_ITEM = 5 +WINDOW_ITEM = 6 +FLOORING_ITEM = 7 +MOULDING_ITEM = 8 WAINSCOTING_ITEM = 9 -POLE_ITEM = 10 -PET_TRICK_ITEM = 11 -BEAN_ITEM = 12 -GARDEN_ITEM = 13 -RENTAL_ITEM = 14 -GARDENSTARTER_ITEM = 15 -NAMETAG_ITEM = 16 -TOON_STATUE_ITEM = 17 -ANIMATED_FURNITURE_ITEM = 18 - -NonPermanentItemTypes = (RENTAL_ITEM, ) - -CatalogItemTypes = { - CatalogInvalidItem.CatalogInvalidItem : INVALID_ITEM, - CatalogFurnitureItem.CatalogFurnitureItem : FURNITURE_ITEM, - CatalogChatItem.CatalogChatItem : CHAT_ITEM, - CatalogClothingItem.CatalogClothingItem : CLOTHING_ITEM, - CatalogEmoteItem.CatalogEmoteItem : EMOTE_ITEM, - CatalogWallpaperItem.CatalogWallpaperItem : WALLPAPER_ITEM, - CatalogWindowItem.CatalogWindowItem : WINDOW_ITEM, - CatalogFlooringItem.CatalogFlooringItem : FLOORING_ITEM, - CatalogMouldingItem.CatalogMouldingItem : MOULDING_ITEM, - CatalogWainscotingItem.CatalogWainscotingItem : WAINSCOTING_ITEM, - CatalogPoleItem.CatalogPoleItem : POLE_ITEM, - CatalogPetTrickItem.CatalogPetTrickItem : PET_TRICK_ITEM, - CatalogBeanItem.CatalogBeanItem : BEAN_ITEM, - CatalogGardenItem.CatalogGardenItem : GARDEN_ITEM, - CatalogRentalItem.CatalogRentalItem : RENTAL_ITEM, - CatalogGardenStarterItem.CatalogGardenStarterItem : GARDENSTARTER_ITEM, - CatalogNametagItem.CatalogNametagItem : NAMETAG_ITEM, - CatalogToonStatueItem.CatalogToonStatueItem : TOON_STATUE_ITEM, - CatalogAnimatedFurnitureItem.CatalogAnimatedFurnitureItem : ANIMATED_FURNITURE_ITEM, - } - -# for each catalog item type, indicates whether or not toons are allowed to have more than one -# of any particular item of that type -CatalogItemType2multipleAllowed = { - INVALID_ITEM : False, - FURNITURE_ITEM : True, - CHAT_ITEM : False, - CLOTHING_ITEM : False, - EMOTE_ITEM : False, - WALLPAPER_ITEM : True, - WINDOW_ITEM : True, - FLOORING_ITEM : True, - MOULDING_ITEM : True, - WAINSCOTING_ITEM : True, - POLE_ITEM : False, - PET_TRICK_ITEM : False, - BEAN_ITEM : True, - GARDEN_ITEM : False, - RENTAL_ITEM : False, - GARDENSTARTER_ITEM : False, - NAMETAG_ITEM : False, - TOON_STATUE_ITEM : False, - ANIMATED_FURNITURE_ITEM : True, - } - -assert len(CatalogItemType2multipleAllowed) == len(CatalogItemTypes) - -# We only use the bottom n bits of the type byte to encode the type -# number. For now, we reserve 5 bits, which gives us type codes up to -# 31. We can change this if we need more type codes or more -# high-order bits later. -CatalogItemTypeMask = 0x1f -assert(CatalogItemTypeMask > max(CatalogItemTypes.values())) - -# The remaining high-order bits are reserved for esoteric flags on the -# catalog items. -CatalogItemSaleFlag = 0x80 -CatalogItemGiftTag = 0x40 - - +POLE_ITEM = 10 +PET_TRICK_ITEM = 11 +CatalogItemTypes = {CatalogInvalidItem.CatalogInvalidItem: INVALID_ITEM, CatalogFurnitureItem.CatalogFurnitureItem: FURNITURE_ITEM, CatalogChatItem.CatalogChatItem: CHAT_ITEM, CatalogClothingItem.CatalogClothingItem: CLOTHING_ITEM, CatalogEmoteItem.CatalogEmoteItem: EMOTE_ITEM, CatalogWallpaperItem.CatalogWallpaperItem: WALLPAPER_ITEM, CatalogWindowItem.CatalogWindowItem: WINDOW_ITEM, CatalogFlooringItem.CatalogFlooringItem: FLOORING_ITEM, CatalogMouldingItem.CatalogMouldingItem: MOULDING_ITEM, CatalogWainscotingItem.CatalogWainscotingItem: WAINSCOTING_ITEM, CatalogPoleItem.CatalogPoleItem: POLE_ITEM, CatalogPetTrickItem.CatalogPetTrickItem: PET_TRICK_ITEM} +CatalogItemTypeMask = 31 +CatalogItemSaleFlag = 128 \ No newline at end of file diff --git a/toontown/src/catalog/CatalogManager.py b/toontown/src/catalog/CatalogManager.py index b581a507..cce2b3e6 100644 --- a/toontown/src/catalog/CatalogManager.py +++ b/toontown/src/catalog/CatalogManager.py @@ -2,56 +2,31 @@ from direct.directnotify import DirectNotifyGlobal class CatalogManager(DistributedObject.DistributedObject): - notify = DirectNotifyGlobal.directNotify.newCategory("CatalogManager") - - # We should never disable this guy. + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CatalogManager') neverDisable = 1 def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) - ### Interface methods ### - - ### DistributedObject methods ### - def generate(self): - """ - This method is called when the DistributedObject is reintroduced - to the world, either for the first time or from the cache. - """ if base.cr.catalogManager != None: base.cr.catalogManager.delete() base.cr.catalogManager = self DistributedObject.DistributedObject.generate(self) - - # The first time a particular toon enters the world, start its - # catalog system running. - # We only want Toons to start the catalog manager running, however, - # not gateway avatars, etc. - if (hasattr(base.localAvatar, "catalogScheduleNextTime") and - base.localAvatar.catalogScheduleNextTime == 0): + if hasattr(base.localAvatar, 'catalogScheduleNextTime') and base.localAvatar.catalogScheduleNextTime == 0: self.d_startCatalog() + return def disable(self): - """ - This method is called when the DistributedObject is removed from - active duty and stored in a cache. - """ - #self.notify.warning("Hey! The CatalogManager was disabled!") base.cr.catalogManager = None DistributedObject.DistributedObject.disable(self) + return def delete(self): - """ - This method is called when the DistributedObject is permanently - removed from the world and deleted from the cache. - """ - #self.notify.warning("Hey! The CatalogManager was deleted!") base.cr.catalogManager = None DistributedObject.DistributedObject.delete(self) + return def d_startCatalog(self): - self.sendUpdate("startCatalog", []) - - - + self.sendUpdate('startCatalog', []) \ No newline at end of file diff --git a/toontown/src/catalog/CatalogManagerAI.py b/toontown/src/catalog/CatalogManagerAI.py index f9d5753c..e953977b 100644 --- a/toontown/src/catalog/CatalogManagerAI.py +++ b/toontown/src/catalog/CatalogManagerAI.py @@ -6,8 +6,8 @@ from direct.distributed import DistributedObjectAI from direct.directnotify import DirectNotifyGlobal -import CatalogGenerator -import CatalogItem +from . import CatalogGenerator +from . import CatalogItem from toontown.toonbase import ToontownGlobals import time import math @@ -38,10 +38,10 @@ def __init__(self, air): self.uniqueIdToReturnCode = {} #cache for return phone calls self.notify.info("Catalog time scale %s." % (self.timeScale)) - + #DATA holders for gifting an item. So item can be handled on response - - + + def generate(self): DistributedObjectAI.DistributedObjectAI.generate(self) @@ -59,7 +59,7 @@ def forceCatalog(self, avatar, week, afterMinutes = 0): # Temporarily force skipWeeks to true by setting a local # instance variable. self.skipWeeks = 1 - + self.deliverCatalogFor(avatar) # Delete the instance variable to re-expose the class variable. @@ -137,7 +137,7 @@ def deliverCatalogFor(self, avatar): newMonthlyCatalog = (currentWeek != avatar.catalogScheduleCurrentWeek) previousWeek = avatar.catalogScheduleCurrentWeek - + newWeeklyCatalog = (currentWeek != avatar.catalogScheduleCurrentWeek) self.notify.debug("Avatar %s at catalog week %s (previous %s)." % ( @@ -158,10 +158,10 @@ def deliverCatalogFor(self, avatar): backCatalog = self.generator.generateBackCatalog(avatar, modCurrentWeek, previousWeek, weeklyCatalog) # Truncate the old items in the back catalog if it's too # long. - + #import pdb; pdb.set_trace() - + if len(backCatalog) > ToontownGlobals.MaxBackCatalog: stickDict = {} #print ("Back Catalog \n\n%s\n\nend back" % (backCatalog)) @@ -169,7 +169,7 @@ def deliverCatalogFor(self, avatar): itemType, numSticky = item.getBackSticky() #print ("type %s numSticky %s" % (itemType, numSticky)) if numSticky > 0: - if stickDict.has_key(itemType): + if itemType in stickDict: #print("has Key") if (len(stickDict[itemType]) < numSticky): stickDict[itemType].append(item) @@ -187,7 +187,7 @@ def deliverCatalogFor(self, avatar): else: weeklyCatalog = avatar.weeklyCatalog backCatalog = avatar.backCatalog - + avatar.b_setCatalog(monthlyCatalog, weeklyCatalog, backCatalog) if (len(monthlyCatalog) + len(weeklyCatalog) != 0): avatar.b_setCatalogNotify(ToontownGlobals.NewItems, avatar.mailboxNotify) @@ -200,7 +200,7 @@ def purchaseItem(self, avatar, item, optional): # appropriate status code from ToontownGlobals.py. If the item # requires a delayed delivery, this will schedule the # delivery; otherwise, it will be purchased immediately. - + retcode = None if item in avatar.monthlyCatalog: @@ -239,7 +239,7 @@ def purchaseItem(self, avatar, item, optional): self.deductMoney(avatar, price, item) return retcode - + def deductMoney(self, avatar, price, item): bankPrice = min(avatar.getBankMoney(), price) @@ -252,7 +252,7 @@ def deductMoney(self, avatar, price, item): 'catalog-purchase', avatar.doId, "%s|%s" % (price, item)) #pdb.set_trace() - + def refundMoney(self, avatarId, refund): avatar = self.air.doId2do.get(avatarId) if avatar: @@ -261,7 +261,7 @@ def refundMoney(self, avatarId, refund): 'refunded-money', avatar.doId, "%s" % (refund)) #pdb.set_trace() - + def setDelivery(self, avatar, item, deliveryTime, retcode, doUpdateLater): if len(avatar.mailboxContents) + len(avatar.onOrder) >= ToontownGlobals.MaxMailboxContents: self.notify.debug("Avatar %s has %s in mailbox and %s on order, too many." % (avatar.doId, len(avatar.mailboxContents), len(avatar.onOrder))) @@ -285,7 +285,7 @@ def setDelivery(self, avatar, item, deliveryTime, retcode, doUpdateLater): #pdb.set_trace() return retcode - + def payForGiftItem(self, avatar, item, retcode): print("in pay for Gift Item") if item in avatar.monthlyCatalog: @@ -300,14 +300,14 @@ def payForGiftItem(self, avatar, item, retcode): self.notify.warning("Avatar %s weekly: %s" % (avatar.doId, avatar.weeklyCatalog)) retcode = ToontownGlobals.P_NotInCatalog return 0 - + price = item.getPrice(catalogType) if price > avatar.getTotalMoney(): self.air.writeServerEvent('suspicious', avatar.doId, 'purchaseItem %s not enough money' % (item)) self.notify.warning("Avatar %s attempted to purchase %s, not enough money." % (avatar.doId, item)) retcode = ToontownGlobals.P_NotEnoughMoney return 0 - + self.deductMoney(avatar, price, item) return 1 @@ -320,6 +320,6 @@ def startCatalog(self): avatar = self.air.doId2do.get(avId) if avatar and avatar.catalogScheduleNextTime == 0: - print("starting catalog for %s" % (avatar.getName())) + print(("starting catalog for %s" % (avatar.getName()))) self.deliverCatalogFor(avatar) diff --git a/toontown/src/catalog/CatalogMouldingItem.py b/toontown/src/catalog/CatalogMouldingItem.py index 2ac1a30e..f5103518 100644 --- a/toontown/src/catalog/CatalogMouldingItem.py +++ b/toontown/src/catalog/CatalogMouldingItem.py @@ -1,55 +1,18 @@ -from CatalogSurfaceItem import * - -# Indicies into Moulding Textures Dictionary +from .CatalogSurfaceItem import * MTTextureName = 0 MTColor = 1 MTBasePrice = 2 - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.MouldingNames. -MouldingTypes = { - # Wood - Series 1 - 1000 : ("phase_3.5/maps/molding_wood1.jpg", CTBasicWoodColorOnWhite, 150), - # Plain with colors - Series 1 - 1010 : ("phase_5.5/maps/bd_grey_border1.jpg", CTFlatColorDark, 150), - # Dental wood - Series 2 - 1020 : ("phase_5.5/maps/dental_Border_wood_neutral.jpg", CTFlatColorDark, 150), - # Flowers - Series 2 - 1030 : ("phase_5.5/maps/littleFlowers_border.jpg", CTWhite, 150), - 1040 : ("phase_5.5/maps/littleFlowers_border_neutral.jpg", CTFlatColorDark, 150), - # Ladybug - Unused - 1050 : ("phase_5.5/maps/ladybugs2_Border.jpg", CTFlatColorDark, 150), - # Valentines - 1060 : ("phase_5.5/maps/bd_grey_border1.jpg", CTValentinesColors, 150), - # Beach - 1070 : ("phase_5.5/maps/bd_grey_border1.jpg", CTUnderwaterColors, 150), - # Winter String Lights 1 - 1080 : ("phase_5.5/maps/tt_t_ara_int_border_winterLights1.jpg", CTWhite, 150), - # Winter String Lights 2 - 1085 : ("phase_5.5/maps/tt_t_ara_int_border_winterLights2.jpg", CTWhite, 150), - # Winter String Lights 3 - 1090 : ("phase_5.5/maps/tt_t_ara_int_border_winterLights3.jpg", CTWhite, 150), - # Valentines Day - Cupid - 1100 : ("phase_5.5/maps/tt_t_ara_int_border_valentine_cupid.jpg", CTWhite, 150), - # Valentines Day - Heart 1 - 1110 : ("phase_5.5/maps/tt_t_ara_int_border_valentine_heart1.jpg", CTWhite, 150), - # Valentines Day - Heart 2 - 1120 : ("phase_5.5/maps/tt_t_ara_int_border_valentine_heart2.jpg", CTWhite, 150), - } +MouldingTypes = {1000: ('phase_3.5/maps/molding_wood1.jpg', CTBasicWoodColorOnWhite, 150), 1010: ('phase_5.5/maps/bd_grey_border1.jpg', CTFlatColorDark, 150), 1020: ('phase_5.5/maps/dental_Border_wood_neutral.jpg', CTFlatColorDark, 150), 1030: ('phase_5.5/maps/littleFlowers_border.jpg', CTWhite, 150), 1040: ('phase_5.5/maps/littleFlowers_border_neutral.jpg', CTFlatColorDark, 150), 1050: ('phase_5.5/maps/ladybugs2_Border.jpg', CTFlatColorDark, 150), 1060: ('phase_5.5/maps/bd_grey_border1.jpg', CTValentinesColors, 150), 1070: ('phase_5.5/maps/bd_grey_border1.jpg', CTUnderwaterColors, 150)} class CatalogMouldingItem(CatalogSurfaceItem): - """CatalogMouldingItem + __module__ = __name__ - This represents a texture/color combination for moulding. - """ - def makeNewItem(self, patternIndex, colorIndex): self.patternIndex = patternIndex self.colorIndex = colorIndex CatalogSurfaceItem.makeNewItem(self) def getTypeName(self): - # e.g. "wallpaper", "wainscoting", etc. return TTLocalizer.SurfaceNames[STMoulding] def getName(self): @@ -59,41 +22,25 @@ def getName(self): return self.getTypeName() def getSurfaceType(self): - # Returns a value reflecting the type of surface this - # pattern is intended to be applied to. return STMoulding def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - -## assert (not self.hasPicture) - self.hasPicture=True - frame = self.makeFrame() - - sample = loader.loadModel('phase_5.5/models/estate/wallpaper_sample') + sample = loader.loadModelCopy('phase_5.5/models/estate/wallpaper_sample') a = sample.find('**/a') b = sample.find('**/b') c = sample.find('**/c') - - # Moulding gets applied to the top 1/3, with the bottom - # 2/3 hidden. a.setTexture(self.loadTexture(), 1) a.setColorScale(*self.getColor()) b.hide() c.hide() - sample.reparentTo(frame) + return ( + frame, None) + return - return (frame, None) - - def output(self, store = ~0): - return "CatalogMouldingItem(%s, %s%s)" % ( - self.patternIndex, self.colorIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogMouldingItem(%s, %s%s)' % (self.patternIndex, self.colorIndex, self.formatOptionalData(store)) def getFilename(self): return MouldingTypes[self.patternIndex][MTTextureName] @@ -104,7 +51,8 @@ def compareTo(self, other): return self.colorIndex - other.colorIndex def getHashContents(self): - return (self.patternIndex, self.colorIndex) + return ( + self.patternIndex, self.colorIndex) def getBasePrice(self): return MouldingTypes[self.patternIndex][MTBasePrice] @@ -119,7 +67,6 @@ def loadTexture(self): def getColor(self): if self.colorIndex == None: - # If no color index is set yet, use first color in color list colorIndex = 0 else: colorIndex = self.colorIndex @@ -128,10 +75,11 @@ def getColor(self): if colorIndex < len(colors): return colors[colorIndex] else: - print "Warning: colorIndex not in colors. Returning white." + print('Warning: colorIndex not in colors. Returning white.') return CT_WHITE else: return CT_WHITE + return def decodeDatagram(self, di, versionNumber, store): CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store) @@ -140,70 +88,56 @@ def decodeDatagram(self, di, versionNumber, store): else: self.patternIndex = di.getUint16() self.colorIndex = di.getUint8() - - # The following will generate an exception if - # self.patternIndex is invalid. The other fields can take - # care of themselves. wtype = MouldingTypes[self.patternIndex] - + def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) dg.addUint16(self.patternIndex) dg.addUint8(self.colorIndex) + def getMouldings(*indexList): - # This function returns a list of CatalogMouldingItems - # The returned items will all need to be customized (i.e - # have a color chosen by the user. Until customization, - # use a default color index of 0 (if the pattern has a color - # list) or CT_WHITE if the pattern has no color list list = [] for index in indexList: list.append(CatalogMouldingItem(index)) + return list - + def getAllMouldings(*indexList): - # This function returns a list of all possible - # CatalogMouldingItems (that is, all color variants) for the - # indicated type index(es). list = [] for index in indexList: colors = MouldingTypes[index][MTColor] if colors: for n in range(len(colors)): list.append(CatalogMouldingItem(index, n)) + else: list.append(CatalogMouldingItem(index, 0)) - return list - -def getMouldingRange(fromIndex, toIndex, *otherRanges): - # This function returns a list of all possible - # CatalogMouldingItems (that is, all color variants) for the - # indicated type index(es). + return list - # Make sure we got an even number of otherRanges - assert(len(otherRanges)%2 == 0) +def getMouldingRange(fromIndex, toIndex, *otherRanges): list = [] - - froms = [fromIndex,] - tos = [toIndex,] - + froms = [ + fromIndex] + tos = [toIndex] i = 0 while i < len(otherRanges): froms.append(otherRanges[i]) - tos.append(otherRanges[i+1]) + tos.append(otherRanges[(i + 1)]) i += 2 - - for patternIndex in MouldingTypes.keys(): - for fromIndex, toIndex in zip(froms,tos): + + for patternIndex in list(MouldingTypes.keys()): + for (fromIndex, toIndex) in zip(froms, tos): if patternIndex >= fromIndex and patternIndex <= toIndex: colors = MouldingTypes[patternIndex][MTColor] if colors: for n in range(len(colors)): list.append(CatalogMouldingItem(patternIndex, n)) + else: list.append(CatalogMouldingItem(patternIndex, 0)) - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogNametagItem.py b/toontown/src/catalog/CatalogNametagItem.py index 49b79195..1d82b10f 100644 --- a/toontown/src/catalog/CatalogNametagItem.py +++ b/toontown/src/catalog/CatalogNametagItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer diff --git a/toontown/src/catalog/CatalogNotifyDialog.py b/toontown/src/catalog/CatalogNotifyDialog.py index d5940ca4..66b9b2b4 100644 --- a/toontown/src/catalog/CatalogNotifyDialog.py +++ b/toontown/src/catalog/CatalogNotifyDialog.py @@ -5,92 +5,43 @@ from pandac.PandaModules import * class CatalogNotifyDialog: - """CatalogNotifyDialog: - - Pops up to tell you when you have a new catalog, or a new delivery - from the catalog. - """ - - notify = DirectNotifyGlobal.directNotify.newCategory("CatalogNotifyDialog") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CatalogNotifyDialog') def __init__(self, message): self.message = message self.messageIndex = 0 - - framePosX = 0.40 - from toontown.toon import LocalToon # import here to stop cyclic import - if LocalToon.WantNewsPage: - framePosX += LocalToon.AdjustmentForNewsButton - self.frame = DirectFrame( - relief = None, - image = DGG.getDefaultDialogGeom(), - image_color = ToontownGlobals.GlobalDialogColor, - image_scale = (1.2, 1.0, 0.4), - text = message[0], - text_wordwrap = 16, - text_scale = 0.06, - text_pos = (-0.1, 0.1), - pos = (framePosX, 0, 0.78), - ) - - - buttons = loader.loadModel( - 'phase_3/models/gui/dialog_box_buttons_gui') - cancelImageList = (buttons.find('**/CloseBtn_UP'), - buttons.find('**/CloseBtn_DN'), - buttons.find('**/CloseBtn_Rllvr')) - okImageList = (buttons.find('**/ChtBx_OKBtn_UP'), - buttons.find('**/ChtBx_OKBtn_DN'), - buttons.find('**/ChtBx_OKBtn_Rllvr')) - - self.nextButton = DirectButton( - parent = self.frame, - relief = None, - image = okImageList, - command = self.handleButton, - pos = (0, 0, -0.14), - ) - - self.doneButton = DirectButton( - parent = self.frame, - relief = None, - image = cancelImageList, - command = self.handleButton, - pos = (0, 0, -0.14), - ) + self.frame = DirectFrame(relief=None, image=getDefaultDialogGeom(), image_color=ToontownGlobals.GlobalDialogColor, image_scale=(1.2, 1.0, 0.4), text=message[0], text_wordwrap=16, text_scale=0.06, text_pos=(-0.1, 0.1), pos=(0.4, 0, 0.78)) + buttons = loader.loadModelOnce('phase_3/models/gui/dialog_box_buttons_gui') + cancelImageList = ( + buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')) + okImageList = ( + buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')) + self.nextButton = DirectButton(parent=self.frame, relief=None, image=okImageList, command=self.handleButton, pos=(0, 0, -0.14)) + self.doneButton = DirectButton(parent=self.frame, relief=None, image=cancelImageList, command=self.handleButton, pos=(0, 0, -0.14)) if len(message) == 1: self.nextButton.hide() else: self.doneButton.hide() + return def handleButton(self): self.messageIndex += 1 if self.messageIndex >= len(self.message): - # That was the last message. self.cleanup() return - - # There's more text to display. self.frame['text'] = self.message[self.messageIndex] if self.messageIndex + 1 == len(self.message): - # That's the last message. self.nextButton.hide() self.doneButton.show() - + def cleanup(self): - """cleanup(self): - Cancels any pending request and removes the panel from the - screen, unanswered. - """ if self.frame: self.frame.destroy() self.frame = None - if self.nextButton: - self.nextButton.destroy() self.nextButton = None - if self.doneButton: - self.doneButton.destroy() self.doneButton = None + return def __handleButton(self, value): - self.cleanup() + self.cleanup() \ No newline at end of file diff --git a/toontown/src/catalog/CatalogPetTrickItem.py b/toontown/src/catalog/CatalogPetTrickItem.py index cc6fc81a..a698c336 100644 --- a/toontown/src/catalog/CatalogPetTrickItem.py +++ b/toontown/src/catalog/CatalogPetTrickItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem from toontown.pets import PetTricks from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -6,44 +6,19 @@ from direct.interval.IntervalGlobal import * class CatalogPetTrickItem(CatalogItem.CatalogItem): - """ - This represents a phrase you can say to teach your pet to do a - particular trick. - """ - sequenceNumber = 0 - petPicture = None + def makeNewItem(self, trickId): self.trickId = trickId - CatalogItem.CatalogItem.makeNewItem(self) def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 1 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - if self in avatar.onOrder or self in avatar.mailboxContents or self in avatar.onGiftOrder \ - or self in avatar.awardMailboxContents or self in avatar.onAwardOrder: - return 1 return self.trickId in avatar.petTrickPhrases - - def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). - if retcode == ToontownGlobals.P_ItemAvailable: - return TTLocalizer.CatalogAcceptPet - return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def getTypeName(self): @@ -59,60 +34,30 @@ def recordPurchase(self, avatar, optional): return ToontownGlobals.P_ItemAvailable def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - - # Don't import this at the top of the file, since this code - # must run on the AI. from toontown.pets import PetDNA, Pet - - pet = Pet.Pet(forGui = 1) - - # We use the avatar's own pet if he/she has a pet (and we know - # its DNA), otherwise use a random pet. + pet = Pet.Pet(forGui=1) dna = avatar.petDNA if dna == None: dna = PetDNA.getRandomPetDNA() pet.setDNA(dna) - pet.setH(180) - model, ival = self.makeFrameModel(pet, 0) + (model, ival) = self.makeFrameModel(pet, 0) pet.setScale(2.0) pet.setP(-40) - - # Discard the ival from makeFrameModel, since we don't want to - # spin. - track = PetTricks.getTrickIval(pet, self.trickId) - name = "petTrick-item-%s" % (self.sequenceNumber) + name = 'petTrick-item-%s' % self.sequenceNumber CatalogPetTrickItem.sequenceNumber += 1 if track != None: - track = Sequence(Sequence(track), - ActorInterval(pet, 'neutral', duration = 2), - name = name) + track = Sequence(Sequence(track), ActorInterval(pet, 'neutral', duration=2), name=name) else: pet.animFSM.request('neutral') - track = Sequence(Wait(4), - name = name) - self.petPicture = pet - - assert (not self.hasPicture) - self.hasPicture=True - - return (model, track) - - def cleanupPicture(self): - CatalogItem.CatalogItem.cleanupPicture(self) - assert self.petPicture - self.petPicture.delete() - self.petPicture = None - - def output(self, store = ~0): - return "CatalogPetTrickItem(%s%s)" % ( - self.trickId, - self.formatOptionalData(store)) + track = Sequence(Wait(4), name=name) + return ( + model, track) + return + + def output(self, store=-1): + return 'CatalogPetTrickItem(%s%s)' % (self.trickId, self.formatOptionalData(store)) def compareTo(self, other): return self.trickId - other.trickId @@ -121,7 +66,6 @@ def getHashContents(self): return self.trickId def getBasePrice(self): - # All petTricks are the same price for now. return 500 def decodeDatagram(self, di, versionNumber, store): @@ -130,17 +74,16 @@ def decodeDatagram(self, di, versionNumber, store): self.dna = None if self.trickId not in PetTricks.TrickId2scIds: raise ValueError - + return + def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) dg.addUint8(self.trickId) - + def getAllPetTricks(): - # Returns a list of all valid CatalogPetTrickItems. list = [] for trickId in PetTricks.TrickId2scIds.keys(): list.append(CatalogPetTrickItem(trickId)) - return list - + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogPoleItem.py b/toontown/src/catalog/CatalogPoleItem.py index 7bd64a4f..d79591f4 100644 --- a/toontown/src/catalog/CatalogPoleItem.py +++ b/toontown/src/catalog/CatalogPoleItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.fishing import FishGlobals from direct.actor import Actor @@ -6,126 +6,65 @@ from direct.interval.IntervalGlobal import * class CatalogPoleItem(CatalogItem.CatalogItem): - """CatalogPoleItem - - This represents any of the fishing pole models you might be able - to buy. We assume that you can buy fishing poles only in - sequence, and that the rodId number increases with each better - pole. - - """ - + __module__ = __name__ sequenceNumber = 0 - + def makeNewItem(self, rodId): self.rodId = rodId - CatalogItem.CatalogItem.makeNewItem(self) def getPurchaseLimit(self): - # Returns the maximum number of this particular item an avatar - # may purchase. This is either 0, 1, or some larger number; 0 - # stands for infinity. return 1 def reachedPurchaseLimit(self, avatar): - # Returns true if the item cannot be bought because the avatar - # has already bought his limit on this item. - return avatar.getFishingRod() >= self.rodId or \ - self in avatar.onOrder or \ - self in avatar.mailboxContents - + return avatar.getFishingRod() >= self.rodId or self in avatar.onOrder or self in avatar.mailboxContents def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def getTypeName(self): return TTLocalizer.PoleTypeName def getName(self): - return TTLocalizer.FishingRod % (TTLocalizer.FishingRodNameDict[self.rodId]) + return TTLocalizer.FishingRod % TTLocalizer.FishingRodNameDict[self.rodId] def recordPurchase(self, avatar, optional): if self.rodId < 0 or self.rodId > FishGlobals.MaxRodId: - self.notify.warning("Invalid fishing pole: %s for avatar %s" % (self.rodId, avatar.doId)) + self.notify.warning('Invalid fishing pole: %s for avatar %s' % (self.rodId, avatar.doId)) return ToontownGlobals.P_InvalidIndex - if self.rodId < avatar.getFishingRod(): - self.notify.warning("Avatar already has pole: %s for avatar %s" % (self.rodId, avatar.doId)) + self.notify.warning('Avatar already has pole: %s for avatar %s' % (self.rodId, avatar.doId)) return ToontownGlobals.P_ItemUnneeded - avatar.b_setFishingRod(self.rodId) return ToontownGlobals.P_ItemAvailable - - def isGift(self): - return 0 def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. - return 24 * 60 # 24 hours. + return 24 * 60 def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. - rodPath = FishGlobals.RodFileDict.get(self.rodId) - - pole = Actor.Actor(rodPath, {'cast' : 'phase_4/models/props/fishing-pole-chan'}) - - pole.setPosHpr( - 1.47, 0, -1.67, - 90, 55, -90) + pole = Actor.Actor(rodPath, {'cast': 'phase_4/models/props/fishing-pole-chan'}) + pole.setPosHpr(1.47, 0, -1.67, 90, 55, -90) pole.setScale(0.8) - pole.setDepthTest(1) pole.setDepthWrite(1) - frame = self.makeFrame() frame.attachNewNode(pole.node()) - - name = "pole-item-%s" % (self.sequenceNumber) + name = 'pole-item-%s' % self.sequenceNumber CatalogPoleItem.sequenceNumber += 1 - - # Not sure if this looks good or not. This interval makes the - # pole slowly wind and unwind. For now, we'll just put in an - # interval that leaves the pole posed at its wound frame. (We - # have to use an interval instead of just posing the actor and - # forgetting it, because otherwise the Actor python object - # will destruct and forget about the pose.) - -## track = Sequence(ActorInterval(pole, 'cast', startFrame=84, endFrame=130), -## ActorInterval(pole, 'cast', startFrame=130, endFrame=84), -## Wait(2), -## name = name) - track = Sequence(Func(pole.pose, 'cast', 130), - Wait(100), - name = name) - assert (not self.hasPicture) - self.hasPicture=True - - return (frame, track) + track = Sequence(Func(pole.pose, 'cast', 130), Wait(100), name=name) + return ( + frame, track) def getAcceptItemErrorText(self, retcode): - # Returns a string describing the error that occurred on - # attempting to accept the item from the mailbox. The input - # parameter is the retcode returned by recordPurchase() or by - # mailbox.acceptItem(). if retcode == ToontownGlobals.P_ItemAvailable: return TTLocalizer.CatalogAcceptPole elif retcode == ToontownGlobals.P_ItemUnneeded: return TTLocalizer.CatalogAcceptPoleUnneeded - return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) - def output(self, store = ~0): - return "CatalogPoleItem(%s%s)" % ( - self.rodId, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogPoleItem(%s%s)' % (self.rodId, self.formatOptionalData(store)) def getFilename(self): return FishGlobals.RodFileDict.get(self.rodId) @@ -142,37 +81,31 @@ def getBasePrice(self): def decodeDatagram(self, di, versionNumber, store): CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store) self.rodId = di.getUint8() - - # The following will generate an exception if self.rodId is - # invalid. price = FishGlobals.RodPriceDict[self.rodId] def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) dg.addUint8(self.rodId) - + def nextAvailablePole(avatar, duplicateItems): rodId = avatar.getFishingRod() + 1 if rodId > FishGlobals.MaxRodId: - # No more fishing rods for this avatar. return None - item = CatalogPoleItem(rodId) - - # But if this rod is already on order, don't offer the same rod - # again. Skip to the next one instead. - while item in avatar.onOrder or \ - item in avatar.mailboxContents: + while item in avatar.onOrder or item in avatar.mailboxContents: rodId += 1 if rodId > FishGlobals.MaxRodId: return None item = CatalogPoleItem(rodId) return item + return + def getAllPoles(): list = [] for rodId in range(0, FishGlobals.MaxRodId + 1): list.append(CatalogPoleItem(rodId)) - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogRentalItem.py b/toontown/src/catalog/CatalogRentalItem.py index 25164062..67faa530 100644 --- a/toontown/src/catalog/CatalogRentalItem.py +++ b/toontown/src/catalog/CatalogRentalItem.py @@ -1,4 +1,4 @@ -import CatalogItem +from . import CatalogItem import time from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer diff --git a/toontown/src/catalog/CatalogScreen.py b/toontown/src/catalog/CatalogScreen.py index ed9f278c..d91de717 100644 --- a/toontown/src/catalog/CatalogScreen.py +++ b/toontown/src/catalog/CatalogScreen.py @@ -1,81 +1,29 @@ -from pandac.PandaModules import * from direct.gui.DirectGui import * -from pandac.PandaModules import * from direct.gui.DirectScrolledList import * from toontown.toonbase import ToontownGlobals from toontown.toontowngui import TTDialog -import CatalogItem -import CatalogInvalidItem +from . import CatalogItem from toontown.toonbase import TTLocalizer -import CatalogItemPanel -import CatalogItemTypes +from . import CatalogItemPanel, CatalogItemTypes from direct.actor import Actor import random -from toontown.toon import DistributedToon -from direct.directnotify import DirectNotifyGlobal - NUM_CATALOG_ROWS = 3 NUM_CATALOG_COLS = 2 - - -# Center of square frames used for positioning gui elements -CatalogPanelCenters = [[Point3(-0.95, 0, 0.91), - Point3(-0.275, 0, 0.91)], - [Point3(-0.95, 0, 0.275), - Point3(-0.275, 0, 0.275)], - [Point3(-0.95, 0, -0.4), - Point3(-0.275, 0, -0.4)]] - -CatalogPanelColors = { - CatalogItemTypes.FURNITURE_ITEM : Vec4(0.733, 0.780, 0.933, 1.000), - CatalogItemTypes.CHAT_ITEM : Vec4(0.922, 0.922, 0.753, 1.0), - CatalogItemTypes.CLOTHING_ITEM : Vec4(0.918, 0.690, 0.690, 1.000), - CatalogItemTypes.EMOTE_ITEM : Vec4(0.922, 0.922, 0.753, 1.0), - CatalogItemTypes.WALLPAPER_ITEM : Vec4(0.749, 0.984, 0.608, 1.000), - CatalogItemTypes.WINDOW_ITEM : Vec4(0.827, 0.910, 0.659, 1.000), - } +CatalogPanelCenters = [ + [ + Point3(-0.95, 0, 0.91), Point3(-0.275, 0, 0.91)], [Point3(-0.95, 0, 0.275), Point3(-0.275, 0, 0.275)], [Point3(-0.95, 0, -0.4), Point3(-0.275, 0, -0.4)]] +CatalogPanelColors = {CatalogItemTypes.FURNITURE_ITEM: Vec4(0.733, 0.78, 0.933, 1.0), CatalogItemTypes.CHAT_ITEM: Vec4(0.922, 0.922, 0.753, 1.0), CatalogItemTypes.CLOTHING_ITEM: Vec4(0.918, 0.69, 0.69, 1.0), CatalogItemTypes.EMOTE_ITEM: Vec4(0.922, 0.922, 0.753, 1.0), CatalogItemTypes.WALLPAPER_ITEM: Vec4(0.749, 0.984, 0.608, 1.0), CatalogItemTypes.WINDOW_ITEM: Vec4(0.827, 0.91, 0.659, 1.0)} class CatalogScreen(DirectFrame): - """ - CatalogScreen - This class presents the user interface to an individual's catalog. - """ - notify = DirectNotifyGlobal.directNotify.newCategory("CatalogScreen") - + __module__ = __name__ + def __init__(self, parent=aspect2d, **kw): - guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui') + guiItems = loader.loadModelCopy('phase_5.5/models/gui/catalog_gui') background = guiItems.find('**/catalog_background') - guiButton = loader.loadModel("phase_3/models/gui/quit_button") - guiBack = loader.loadModel('phase_5.5/models/gui/package_delivery_panel') - optiondefs = ( - # Define type of DirectGuiWidget - ('scale', 0.667, None), - ('pos', (0,1,0.025), None), - ('phone', None, None), - ('doneEvent', None, None), - ('image', background, None), - ('relief', None, None), - ) - # Merge keyword options with default options + optiondefs = (('scale', 0.667, None), ('pos', (0, 1, 0.025), None), ('phone', None, None), ('doneEvent', None, None), ('image', background, None), ('relief', None, None)) self.defineoptions(kw, optiondefs) - # Initialize superclasses DirectFrame.__init__(self, parent) - # Create items - self.friendGiftIndex = 0 #remove this - self.friendGiftHandle = None #handle to the friend you are gifting - self.frienddoId = None #doId of the friend you are gifting - self.receiverName = "Error Nameless Toon" - self.friends = {} - self.family = {} - self.ffList = [] - self.textRolloverColor = Vec4(1,1,0,1) - self.textDownColor = Vec4(0.5,0.9,1,1) - self.textDisabledColor = Vec4(0.4,0.8,0.4,1) - self.giftAvatar = None; #avatar for gifting - self.gotAvatar = 0; #flag to know if the gifting avatar has been received - self.allowGetDetails = 1 - self.load(guiItems, guiButton, guiBack) - # Call initialization functions + self.load(guiItems) self.initialiseoptions(CatalogScreen) self.enableBackorderCatalogButton() self.setMaxPageIndex(self.numNewPages) @@ -84,90 +32,55 @@ def __init__(self, parent=aspect2d, **kw): self.hide() self.clarabelleChatNP = None self.clarabelleChatBalloon = None - self.gifting = -1 - self.createdGiftGui = None - self.viewing = None + return def show(self): - # listen for update requests - self.accept("CatalogItemPurchaseRequest", self.__handlePurchaseRequest) - self.accept("CatalogItemGiftPurchaseRequest", self.__handleGiftPurchaseRequest) - self.accept(localAvatar.uniqueName("moneyChange"), self.__moneyChange) - self.accept(localAvatar.uniqueName("bankMoneyChange"), self.__bankMoneyChange) - deliveryText = "setDeliverySchedule-%s" % (base.localAvatar.doId) - self.accept(deliveryText, self.remoteUpdate) - - # Hide the world since we have a fullscreen interface - # this will improve our framerate a bit while in the catalog + self.accept('CatalogItemPurchaseRequest', self.__handlePurchaseRequest) + self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange) + self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__bankMoneyChange) render.hide() DirectFrame.show(self) + def clarabelleGreeting(task): self.setClarabelleChat(TTLocalizer.CatalogGreeting) + def clarabelleHelpText1(task): self.setClarabelleChat(TTLocalizer.CatalogHelpText1) - taskMgr.doMethodLater(1.0, clarabelleGreeting, "clarabelleGreeting") - taskMgr.doMethodLater(12.0, clarabelleHelpText1, "clarabelleHelpText1") - if hasattr(self, "giftToggle"): - self.giftToggle['state'] = DGG.DISABLED - self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleWait - base.cr.deliveryManager.sendAck() - self.accept("DeliveryManagerAck", self.__handleUDack) - taskMgr.doMethodLater(10.0, self.__handleNoAck, "ackTimeOut") + + taskMgr.doMethodLater(1.0, clarabelleGreeting, 'clarabelleGreeting') + taskMgr.doMethodLater(12.0, clarabelleHelpText1, 'clarabelleHelpText1') def hide(self): - self.ignore("CatalogItemPurchaseRequest") - self.ignore("CatalogItemGiftPurchaseRequest") - self.ignore("DeliveryManagerAck") - taskMgr.remove("ackTimeOut") - self.ignore(localAvatar.uniqueName("moneyChange")) - self.ignore(localAvatar.uniqueName("bankMoneyChange")) - deliveryText = "setDeliverySchedule-%s" % (base.localAvatar.doId) - self.ignore(deliveryText) - # Show the world once again + self.ignore('CatalogItemPurchaseRequest') + self.ignore(localAvatar.uniqueName('moneyChange')) + self.ignore(localAvatar.uniqueName('bankMoneyChange')) render.show() DirectFrame.hide(self) + def setNumNewPages(self, numNewPages): self.numNewPages = numNewPages + def setNumBackPages(self, numBackPages): self.numBackPages = numBackPages - def setNumLoyaltyPages(self, numLoyaltyPages): - self.numLoyaltyPages = numLoyaltyPages + def setPageIndex(self, index): self.pageIndex = index + def setMaxPageIndex(self, numPages): self.maxPageIndex = max(numPages - 1, -1) + def enableBackorderCatalogButton(self): - self.backCatalogButton['state'] = DGG.NORMAL - self.newCatalogButton['state'] = DGG.DISABLED - self.loyaltyCatalogButton['state'] = DGG.DISABLED + self.backCatalogButton['state'] = NORMAL + self.newCatalogButton['state'] = DISABLED + def enableNewCatalogButton(self): - self.backCatalogButton['state'] = DGG.DISABLED - self.newCatalogButton['state'] = DGG.NORMAL - self.loyaltyCatalogButton['state'] = DGG.DISABLED - def enableLoyaltyCatalogButton(self): - self.backCatalogButton['state'] = DGG.DISABLED - self.newCatalogButton['state'] = DGG.DISABLED - self.loyaltyCatalogButton['state'] = DGG.NORMAL - - def modeBackorderCatalog(self): - self.backCatalogButton['state'] = DGG.DISABLED - self.newCatalogButton['state'] = DGG.NORMAL - self.loyaltyCatalogButton['state'] = DGG.NORMAL - def modeNewCatalog(self): - self.backCatalogButton['state'] = DGG.NORMAL - self.newCatalogButton['state'] = DGG.DISABLED - self.loyaltyCatalogButton['state'] = DGG.NORMAL - def modeLoyaltyCatalog(self): - self.backCatalogButton['state'] = DGG.NORMAL - self.newCatalogButton['state'] = DGG.NORMAL - self.loyaltyCatalogButton['state'] = DGG.DISABLED - - def showNewItems(self, index = None): - # If you got here, you do not need to see this text - taskMgr.remove("clarabelleHelpText1") - messenger.send('wakeup') + self.backCatalogButton['state'] = DISABLED + self.newCatalogButton['state'] = NORMAL + + def showNewItems(self, index=None): + taskMgr.remove('clarabelleHelpText1') self.viewing = 'New' - self.modeNewCatalog() + self.enableBackorderCatalogButton() self.setMaxPageIndex(self.numNewPages) if self.numNewPages == 0: self.setPageIndex(-1) @@ -176,197 +89,101 @@ def showNewItems(self, index = None): else: self.setPageIndex(0) self.showPageItems() - def showBackorderItems(self, index = None): - # If you got here, you do not need to see this text - taskMgr.remove("clarabelleHelpText1") - messenger.send('wakeup') + return + + def showBackorderItems(self): + taskMgr.remove('clarabelleHelpText1') self.viewing = 'Backorder' - self.modeBackorderCatalog() + self.enableNewCatalogButton() self.setMaxPageIndex(self.numBackPages) if self.numBackPages == 0: self.setPageIndex(-1) - elif index is not None: - self.setPageIndex(index) - else: - self.setPageIndex(0) - self.showPageItems() - def showLoyaltyItems(self, index = None): - # If you got here, you do not need to see this text - taskMgr.remove("clarabelleHelpText1") - messenger.send('wakeup') - self.viewing = 'Loyalty' - self.modeLoyaltyCatalog() - self.setMaxPageIndex(self.numLoyaltyPages) - if self.numLoyaltyPages == 0: - self.setPageIndex(-1) - elif index is not None: - self.setPageIndex(index) else: self.setPageIndex(0) self.showPageItems() + def showNextPage(self): - # If you got here, you do not need to see this text - taskMgr.remove("clarabelleHelpText1") - messenger.send('wakeup') + taskMgr.remove('clarabelleHelpText1') self.pageIndex = self.pageIndex + 1 - if self.viewing == None: - self.modeNewCatalog() - self.viewing == 'New' - - - if ((self.viewing == 'New') and - (self.pageIndex > self.maxPageIndex) and - (self.numBackPages > 0)): + if self.viewing == 'New' and self.pageIndex > self.maxPageIndex and self.numBackPages > 0: self.showBackorderItems() - if ((self.viewing == 'New') and - (self.pageIndex > self.maxPageIndex) and - (self.numLoyaltyPages > 0)): - self.showLoyaltyItems() - elif ((self.viewing == 'Backorder') and - (self.pageIndex > self.maxPageIndex) and - (self.numLoyaltyPages > 0)): - self.showLoyaltyItems() else: - # If viewing backorder catalog, just clamp at last page self.pageIndex = min(self.pageIndex, self.maxPageIndex) self.showPageItems() - + def showBackPage(self): - # If you got here, you do not need to see this text - taskMgr.remove("clarabelleHelpText1") - messenger.send('wakeup') + taskMgr.remove('clarabelleHelpText1') self.pageIndex = self.pageIndex - 1 - if ((self.viewing == 'Backorder') and - (self.pageIndex < 0) and - (self.numNewPages > 0)): - self.showNewItems(self.numNewPages - 1) - elif ((self.viewing == 'Loyalty') and - (self.pageIndex < 0) and - (self.numBackPages > 0)): - self.showBackorderItems(self.numBackPages - 1) - elif ((self.viewing == 'Loyalty') and - (self.pageIndex < 0) and - (self.numNewPages > 0)): + if self.viewing == 'Backorder' and self.pageIndex < 0 and self.numNewPages > 0: self.showNewItems(self.numNewPages - 1) else: self.pageIndex = max(self.pageIndex, -1) self.showPageItems() - + def showPageItems(self): self.hidePages() - if self.viewing == None: - self.viewing = 'New' if self.pageIndex < 0: self.closeCover() else: - # Make sure cover is open if self.pageIndex == 0: self.openCover() - # Show appropriate catalog page if self.viewing == 'New': page = self.pageList[self.pageIndex] - newOrBackOrLoyalty = 0 - elif self.viewing == 'Backorder': + newOrBack = 0 + else: page = self.backPageList[self.pageIndex] - newOrBackOrLoyalty = 1 - elif self.viewing == 'Loyalty': - page = self.loyaltyPageList[self.pageIndex] - newOrBackOrLoyalty = 2 + newOrBack = 1 page.show() for panel in self.panelDict[page.id()]: panel.load() if panel.ival: panel.ival.loop() self.visiblePanels.append(panel) - # Now color panels + pIndex = 0 randGen = random.Random() - randGen.seed( - base.localAvatar.catalogScheduleCurrentWeek + - (self.pageIndex << 8) + - (newOrBackOrLoyalty << 16)) + randGen.seed(base.localAvatar.catalogScheduleCurrentWeek + (self.pageIndex << 8) + (newOrBack << 16)) for i in range(NUM_CATALOG_ROWS): for j in range(NUM_CATALOG_COLS): if pIndex < len(self.visiblePanels): type = self.visiblePanels[pIndex]['item'].getTypeCode() - #self.squares[i][j].setColor(CatalogPanelColors[type]) - self.squares[i][j].setColor( - CatalogPanelColors.values()[ - randGen.randint(0,len(CatalogPanelColors) - 1)]) + self.squares[i][j].setColor(list(CatalogPanelColors.values())[randGen.randint(0, len(CatalogPanelColors) - 1)]) cs = 0.7 + 0.3 * randGen.random() - self.squares[i][j].setColorScale( - 0.7 + 0.3 * randGen.random(), - 0.7 + 0.3 * randGen.random(), - 0.7 + 0.3 * randGen.random(),1) + self.squares[i][j].setColorScale(0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 1) else: - self.squares[i][j].setColor( - CatalogPanelColors[CatalogItemTypes.CHAT_ITEM]) + self.squares[i][j].setColor(CatalogPanelColors[CatalogItemTypes.CHAT_ITEM]) self.squares[i][j].clearColorScale() pIndex += 1 - # get the appropriate text" + if self.viewing == 'New': text = TTLocalizer.CatalogNew - elif self.viewing == 'Loyalty': - text = TTLocalizer.CatalogLoyalty - elif self.viewing == 'Backorder': + else: text = TTLocalizer.CatalogBackorder - self.pageLabel['text'] = text + (' - %d' % (self.pageIndex + 1)) - # Adjust next and backorder buttons + self.pageLabel['text'] = text + ' - %d' % (self.pageIndex + 1) if self.pageIndex < self.maxPageIndex: self.nextPageButton.show() - elif ((self.viewing == 'New') and (self.numBackPages == 0) and (self.numLoyaltyPages == 0)): - self.nextPageButton.hide() - elif ((self.viewing == 'Backorder') and (self.numLoyaltyPages == 0)): + elif self.viewing == 'Backorder' or self.viewing == 'New' and self.numBackPages == 0: self.nextPageButton.hide() - elif (self.viewing == 'Loyalty'): - self.nextPageButton.hide() - - - self.adjustForSound() - self.update() - def adjustForSound(self): - """Properly set the state for the snd buttons.""" - # first lets count the number of emote items in the visible panels - numEmoteItems = 0 - emotePanels = [] - for visIndex in xrange(len(self.visiblePanels)): - panel = self.visiblePanels[visIndex] - item = panel['item'] - catalogType = item.getTypeCode() - if catalogType == CatalogItemTypes.EMOTE_ITEM: - numEmoteItems += 1 - emotePanels.append(panel) - else: - # make sure the buttons don't show - panel.soundOnButton.hide() - panel.soundOffButton.hide() - - if numEmoteItems == 1: - # we have exactly 1 item, turn on the sound - emotePanels[0].handleSoundOnButton() - elif numEmoteItems > 1: - # we have more than 1, turn off all the sounds - for panel in emotePanels: - panel.handleSoundOffButton() - - def hidePages(self): for page in self.pageList: page.hide() + for page in self.backPageList: page.hide() - for page in self.loyaltyPageList: - page.hide() + for panel in self.visiblePanels: if panel.ival: panel.ival.finish() + self.visiblePanels = [] + def openCover(self): self.cover.hide() self.hideDummyTabs() self.backPageButton.show() self.pageLabel.show() + def closeCover(self): self.cover.show() self.showDummyTabs() @@ -374,35 +191,30 @@ def closeCover(self): self.backPageButton.hide() self.pageLabel.hide() self.hidePages() + def showDummyTabs(self): - # Put in 2nd back catalog button which is enabled when in down posn if self.numNewPages > 0: self.newCatalogButton2.show() if self.numBackPages > 0: self.backCatalogButton2.show() - if self.numLoyaltyPages > 0: - self.loyaltyCatalogButton2.show() self.newCatalogButton.hide() self.backCatalogButton.hide() - self.loyaltyCatalogButton.hide() + def hideDummyTabs(self): - # Put in 2nd back catalog button which is enabled when in down posn self.newCatalogButton2.hide() self.backCatalogButton2.hide() - self.loyaltyCatalogButton2.hide() if self.numNewPages > 0: self.newCatalogButton.show() if self.numBackPages > 0: self.backCatalogButton.show() - if self.numLoyaltyPages > 0: - self.loyaltyCatalogButton.show() + def packPages(self, panelList, pageList, prefix): i = 0 j = 0 numPages = 0 pageName = prefix + '_page%d' % numPages for item in panelList: - if (i==0) and (j==0): + if i == 0 and j == 0: numPages += 1 pageName = prefix + '_page%d' % numPages page = self.base.attachNewNode(pageName) @@ -418,649 +230,214 @@ def packPages(self, panelList, pageList, prefix): i += 1 if i == NUM_CATALOG_ROWS: i = 0 + return numPages - - def load(self, guiItems, guiButton, guiBack): - # Initialize variables + def load(self, guiItems): self.pageIndex = -1 self.maxPageIndex = 0 self.numNewPages = 0 self.numBackPages = 5 - self.numLoyaltyPages = 0 self.viewing = 'New' self.panelList = [] self.backPanelList = [] self.pageList = [] self.backPageList = [] - self.loyaltyPanelList = [] - self.loyaltyPageList = [] self.panelDict = {} self.visiblePanels = [] self.responseDialog = None - # Create components - # Background, behind catalog items catalogBase = guiItems.find('**/catalog_base') - self.base = DirectLabel( - self, relief = None, image = catalogBase) - # Catalog tabs + self.base = DirectLabel(self, relief=None, image=catalogBase) newDown = guiItems.find('**/new1') newUp = guiItems.find('**/new2') backDown = guiItems.find('**/previous2') backUp = guiItems.find('**/previous1') - giftToggleUp = guiItems.find('**/giftButtonUp') - giftToggleDown = guiItems.find('**/giftButtonDown') - giftFriends = guiItems.find('**/gift_names') - - lift = 0.40 - smash = 0.80 - - self.newCatalogButton = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, 0.45, 1.2), - image = [newDown, newDown, newDown, newUp], - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,lift), - pressEffect = 0, - command = self.showNewItems, - text = TTLocalizer.CatalogNew, - text_font = ToontownGlobals.getSignFont(), - text_pos = (-0.40 -lift, 0.13), - text3_pos = (-0.40 -lift, 0.1), - text_scale = 0.08, - text_fg = (0.353, 0.627, 0.627, 1.000), - text2_fg = (0.353, 0.427, 0.427, 1.000), - ) - self.newCatalogButton.hide() - - self.newCatalogButton2 = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, 0.45, 1.2), - image = newDown, - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,lift), - pressEffect = 0, - command = self.showNewItems, - text = TTLocalizer.CatalogNew,# + "2",# + "foo", - text_font = ToontownGlobals.getSignFont(), - text_pos = (-0.40 - lift, 0.13), - text_scale = 0.08, - text_fg = (0.353, 0.627, 0.627, 1.000), - text2_fg = (0.353, 0.427, 0.427, 1.000), - ) - self.newCatalogButton2.hide() - - self.backCatalogButton = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, -0.2, 0.40), - image = [backDown, backDown, backDown, backUp], - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,lift), - pressEffect = 0, - command = self.showBackorderItems, - text = TTLocalizer.CatalogBackorder, - text_font = ToontownGlobals.getSignFont(), - text_pos = (0.30 - lift,.132), - text3_pos = (0.30 -lift,.112), - text_scale = TTLocalizer.CSbackCatalogButton, - text_fg = (0.392, 0.549, 0.627, 1.000), - text2_fg = (0.392, 0.349, 0.427, 1.000), - ) + self.backCatalogButton = DirectButton(self.base, relief=None, image=[backDown, backDown, backDown, backUp], pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.355, 0.132), text3_pos=(0.355, 0.112), text_scale=0.065, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0)) self.backCatalogButton.hide() - - self.backCatalogButton2 = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, -0.2, 0.40), - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,lift), - image = backDown, - pressEffect = 0, - command = self.showBackorderItems, - text = TTLocalizer.CatalogBackorder,# + "2",# + "foo", - text_font = ToontownGlobals.getSignFont(), - text_pos = (0.30 - lift , .132), - text_scale = TTLocalizer.CSbackCatalogButton, - text_fg = (0.392, 0.549, 0.627, 1.000), - text2_fg = (0.392, 0.349, 0.427, 1.000), - ) + self.newCatalogButton = DirectButton(self.base, relief=None, image=[newDown, newDown, newDown, newUp], pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.49, 0.13), text3_pos=(-0.49, 0.1), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0)) + self.newCatalogButton.hide() + self.backCatalogButton2 = DirectButton(self.base, relief=None, image=backDown, pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.355, 0.132), text_scale=0.065, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0)) self.backCatalogButton2.hide() - - self.loyaltyCatalogButton = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, -0.85, -0.3), - image = [newDown, newDown, newDown, newUp], - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,-1.4 + lift), - pressEffect = 0, - command = self.showLoyaltyItems, - text = TTLocalizer.CatalogLoyalty, - text_font = ToontownGlobals.getSignFont(), - text_pos = (0.95 - lift,.132), - text3_pos = (0.95 -lift,.112), - text_scale = 0.065, - text_fg = (0.353, 0.627, 0.627, 1.000), - text2_fg = (0.353, 0.427, 0.427, 1.000), - ) - self.loyaltyCatalogButton.hide() - - self.loyaltyCatalogButton2 = DirectButton( - self.base, relief = None, - frameSize = (-0.2, 0.25, -0.85, -0.3), - image_scale = (1.0, 1.0,smash), - image_pos = (0.0,0.0,-1.4 + lift), - image = newDown, - pressEffect = 0, - command = self.showLoyaltyItems, - text = TTLocalizer.CatalogLoyalty,# + "2",# + "foo", - text_font = ToontownGlobals.getSignFont(), - text_pos = (0.95 - lift , .132), - text_scale = 0.065, - text_fg = (0.353, 0.627, 0.627, 1.000), - text2_fg = (0.353, 0.427, 0.427, 1.000), - ) - self.loyaltyCatalogButton2.hide() - - - #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - #Friends list - self.__makeFFlist() - - if len(self.ffList) > 0: - self.giftToggle = DirectButton( - self.base, - relief = None, - pressEffect = 0, - image = (giftToggleUp, - giftToggleDown, - giftToggleUp, - ), - image_scale = (1.0,1,0.7), - command = self.__giftToggle, - #state = DGG.DISABLED, - text = TTLocalizer.CatalogGiftToggleOff, - text_font = ToontownGlobals.getSignFont(), - text_pos = TTLocalizer.CSgiftTogglePos, - text_scale = TTLocalizer.CSgiftToggle, - text_fg = (0.353, 0.627, 0.627, 1.000), - text3_fg = (0.15, 0.3, 0.3, 1.000), - text2_fg = (0.353, 0.427, 0.427, 1.000), - image_color = Vec4(1.0, 1.0, 0.2, 1.0), - image1_color = Vec4(0.9, 0.85, 0.2, 1.0), - image2_color = Vec4(0.9, 0.85, 0.2, 1.0), - image3_color = Vec4(0.5, 0.45, 0.2, 1.0), - ) - self.giftToggle.setPos(0.0,0,-0.035) - - #says "this gift is for" - self.giftLabel = DirectLabel( - self.base, relief = None, - image = giftFriends, - image_scale = (1.15,1,1.14), - text = " ",#TTLocalizer.CatalogGiftFor, #HARD - text_font = ToontownGlobals.getSignFont(), - text_pos = (1.2,-0.97), - text_scale = 0.07, - text_fg = (0.392, 0.549, 0.627, 1.000), - sortOrder = 100, - textMayChange = 1, - ) - self.giftLabel.setPos(-0.15,0,0.080) - self.giftLabel.hide() - - #says the name of the friend the gift is for - self.friendLabel = DirectLabel( - self.base, relief = None, - text = "Friend Name", #HARD - text_font = ToontownGlobals.getSignFont(), - text_pos = (-0.25,.132), - text_scale = 0.068, - text_align = TextNode.ALeft, - text_fg = (0.992, 0.949, 0.327, 1.000), - sortOrder = 100, - textMayChange = 1, - ) - self.friendLabel.setPos(0.5,0,-0.42) - self.friendLabel.hide() - - gui = loader.loadModel("phase_3.5/models/gui/friendslist_gui") - - self.scrollList = DirectScrolledList( - parent = self, - relief = None, - # inc and dec are DirectButtons - incButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - incButton_relief = None, - incButton_pos = (0.0, 0.0, -0.316), - # Make the disabled button darker - incButton_image1_color = Vec4(1.0, 0.9, 0.4, 1.0), - incButton_image3_color = Vec4(1.0, 1.0, 0.6, 0.5), - incButton_scale = (1.0, 1.0, -1.0), - decButton_image = (gui.find("**/FndsLst_ScrollUp"), - gui.find("**/FndsLst_ScrollDN"), - gui.find("**/FndsLst_ScrollUp_Rllvr"), - gui.find("**/FndsLst_ScrollUp"), - ), - decButton_relief = None, - decButton_pos = (0.0, 0.0, 0.117), - # Make the disabled button darker - decButton_image1_color = Vec4(1.0, 1.0, 0.6, 1.0), - decButton_image3_color = Vec4(1.0, 1.0, 0.6, 0.6), - - # itemFrame is a DirectFrame - itemFrame_pos = (-0.17, 0.0, 0.06), - itemFrame_relief = None, - # each item is a button with text on it - numItemsVisible = 8, - items = [], - ) - self.scrollList.setPos(1.2,0,-0.58) - self.scrollList.setScale(1.5) - self.scrollList.hide() - - # Set up a clipping plane to truncate names that would extend - # off the right end of the scrolled list. - clipper = PlaneNode('clipper') - clipper.setPlane(Plane(Vec3(-1, 0, 0), Point3(0.17, 0, 0))) - clipNP = self.scrollList.attachNewNode(clipper) - self.scrollList.setClipPlane(clipNP) - - #self.__addFamilyToScrollList() - #self.__updateScrollList() - - self.__makeScrollList() - - #self.__setFriendLabelName() #sets the label name - #self.__loadFriend() - - friendId = self.ffList[0] - self.__chooseFriend(self.ffList[0][0], self.ffList[0][1]) - self.update() - - self.createdGiftGui = 1; - - #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + self.newCatalogButton2 = DirectButton(self.base, relief=None, image=newDown, pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.49, 0.13), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0)) + self.newCatalogButton2.hide() for i in range(4): - - self.newCatalogButton.component('text%d' % i).setR(90) - self.newCatalogButton2.component('text%d' % i).setR(90) self.backCatalogButton.component('text%d' % i).setR(90) + self.newCatalogButton.component('text%d' % i).setR(90) self.backCatalogButton2.component('text%d' % i).setR(90) - self.loyaltyCatalogButton.component('text%d' % i).setR(90) - self.loyaltyCatalogButton2.component('text%d' % i).setR(90) - # Squares - self.squares = [[],[],[],[]] + self.newCatalogButton2.component('text%d' % i).setR(90) + + self.squares = [[], [], [], []] for i in range(NUM_CATALOG_ROWS): for j in range(NUM_CATALOG_COLS): - square = guiItems.find('**/square%d%db' % (i+1,j+1)) - # Use normal state to block rollover of new and prev - # catalog buttons - label = DirectLabel(self.base, image = square, relief = None, - state = 'normal') + square = guiItems.find('**/square%d%db' % (i + 1, j + 1)) + label = DirectLabel(self.base, image=square, relief=None, state='normal') self.squares[i].append(label) - def priceSort(a,b,type): + + def priceSort(a, b, type): priceA = a.getPrice(type) priceB = b.getPrice(type) - return priceB - priceA - - itemList = (base.localAvatar.monthlyCatalog + - base.localAvatar.weeklyCatalog) - itemList.sort(lambda a,b: priceSort(a,b,CatalogItem.CatalogTypeWeekly)) + return priceA - priceB + + itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog + itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly)) itemList.reverse() for item in itemList: - if isinstance(item, CatalogInvalidItem.CatalogInvalidItem): - self.notify.warning("skipping catalog invalid item %s" % item) - continue - - #check for loyalty program - if item.loyaltyRequirement() != 0: - self.loyaltyPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeLoyalty, - parentCatalogScreen = self, - )) - - else: - self.panelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeWeekly, - parentCatalogScreen = self, - )) - + self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly)) + itemList = base.localAvatar.backCatalog - itemList.sort( - lambda a,b: priceSort(a,b,CatalogItem.CatalogTypeBackorder)) + itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder)) itemList.reverse() for item in itemList: - if isinstance(item, CatalogInvalidItem.CatalogInvalidItem): - self.notify.warning("skipping catalog invalid item %s" % item) - continue - - #check for loyalty program - if item.loyaltyRequirement() != 0: - self.loyaltyPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeLoyalty, - parentCatalogScreen = self, - )) - else: - self.backPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeBackorder, - parentCatalogScreen = self, - )) - + self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder)) + numPages = self.packPages(self.panelList, self.pageList, 'new') self.setNumNewPages(numPages) - numPages = self.packPages(self.backPanelList,self.backPageList,'back') + numPages = self.packPages(self.backPanelList, self.backPageList, 'back') self.setNumBackPages(numPages) - - numPages = self.packPages(self.loyaltyPanelList,self.loyaltyPageList,'loyalty') - self.setNumLoyaltyPages(numPages) - currentWeek = base.localAvatar.catalogScheduleCurrentWeek - 1 - if currentWeek < 57: seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 1 weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1 - # Catalog Series 5 & 6 are short. Need some special math here. - elif currentWeek < 65: + elif currentWeek < 65: seriesNumber = 6 - weekNumber = (currentWeek - 56) - # All catalogs after 5 & 6 now need to get bumped up by - # one since the last 13 weeks used two series numbers. + weekNumber = currentWeek - 56 else: seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 2 weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1 - - # Cover. We find the items we want out of the gui object and - # reparent them to a new node, partly to ensure the ordering - # is OK, and partly because we don't necessarily want all the - # nodes. geom = NodePath('cover') - cover = guiItems.find('**/cover') - - # if the catalog has wrapped around, wrap around the images too - maxSeries = (ToontownGlobals.CatalogNumWeeks / ToontownGlobals.CatalogNumWeeksPerSeries) + 1 - coverSeries = ((seriesNumber - 1) % maxSeries) + 1 - - coverPicture = cover.find('**/cover_picture%s' % (coverSeries)) + maxSeries = ToontownGlobals.CatalogNumWeeks / ToontownGlobals.CatalogNumWeeksPerSeries + 1 + coverSeries = (seriesNumber - 1) % maxSeries + 1 + coverPicture = cover.find('**/cover_picture%s' % coverSeries) if not coverPicture.isEmpty(): coverPicture.reparentTo(geom) - bottomSquare = cover.find('**/cover_bottom') topSquare = guiItems.find('**/square12b2') - if seriesNumber == 1: - topSquare.setColor(0.651, 0.404, 0.322, 1.000) - bottomSquare.setColor(0.655, 0.522, 0.263, 1.000) + topSquare.setColor(0.651, 0.404, 0.322, 1.0) + bottomSquare.setColor(0.655, 0.522, 0.263, 1.0) else: - topSquare.setColor(0.651, 0.404, 0.322, 1.000) - bottomSquare.setColor(0.655, 0.522, 0.263, 1.000) - + topSquare.setColor(0.651, 0.404, 0.322, 1.0) + bottomSquare.setColor(0.655, 0.522, 0.263, 1.0) bottomSquare.reparentTo(geom) topSquare.reparentTo(geom) cover.find('**/clarabelle_text').reparentTo(geom) cover.find('**/blue_circle').reparentTo(geom) cover.find('**/clarabelle').reparentTo(geom) cover.find('**/circle_green').reparentTo(geom) - self.cover = DirectLabel( - self.base, relief = None, geom = geom) - # Cover Labels - - self.catalogNumber = DirectLabel( - self.cover, - relief = None, - scale = 0.2, - pos = (-0.22, 0, -0.33), - text = "#%d" % weekNumber, - text_fg = (0.95, 0.95, 0, 1), - text_shadow = (0, 0, 0, 1), - text_font = ToontownGlobals.getInterfaceFont() - ) - self.catalogSeries = DirectLabel( - self.cover, - relief = None, - scale = (0.22, 1, 0.18), - pos = (-0.76, 0, -0.90), - text = TTLocalizer.CatalogSeriesLabel % seriesNumber, - text_fg = (0.9, 0.9, 0.4, 1), - text_shadow = (0, 0, 0, 1), - text_font = ToontownGlobals.getInterfaceFont() - ) + self.cover = DirectLabel(self.base, relief=None, geom=geom) + self.catalogNumber = DirectLabel(self.cover, relief=None, scale=0.2, pos=(-0.22, 0, -0.33), text='#%d' % weekNumber, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont()) + self.catalogSeries = DirectLabel(self.cover, relief=None, scale=(0.22, 1, 0.18), pos=(-0.76, 0, -0.9), text=TTLocalizer.CatalogSeriesLabel % seriesNumber, text_fg=(0.9, 0.9, 0.4, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont()) self.catalogSeries.setShxz(0.4) - - # Rings, visible when catalog is open - self.rings = DirectLabel( - self.base, relief = None, geom = guiItems.find('**/rings')) - # Frame to hold clarabelle character - self.clarabelleFrame = DirectLabel( - self, relief = None, - image = guiItems.find('**/clarabelle_frame')) - # Hangup button + self.rings = DirectLabel(self.base, relief=None, geom=guiItems.find('**/rings')) + self.clarabelleFrame = DirectLabel(self, relief=None, image=guiItems.find('**/clarabelle_frame')) hangupGui = guiItems.find('**/hangup') hangupRolloverGui = guiItems.find('**/hangup_rollover') - self.hangup = DirectButton( - self, relief = None, - pos = (1.78, 0, -1.3), - image = [hangupGui, hangupRolloverGui, - hangupRolloverGui, hangupGui], - text = ["", TTLocalizer.CatalogHangUp, TTLocalizer.CatalogHangUp], - text_fg = Vec4(1), - text_scale = 0.07, - text_pos = (0.0,0.14), - command = self.hangUp) - # Jellybean indicator - self.beanBank = DirectLabel( - self, relief = None, - image = guiItems.find('**/bean_bank'), - text = str(base.localAvatar.getMoney() + - base.localAvatar.getBankMoney()), - text_align = TextNode.ARight, - text_scale = 0.11, - text_fg = (0.95, 0.95, 0, 1), - text_shadow = (0, 0, 0, 1), - text_pos = (0.75,-0.81), - text_font = ToontownGlobals.getSignFont(), - ) - # Page turners + self.hangup = DirectButton(self, relief=None, pos=(1.78, 0, -1.3), image=[hangupGui, hangupRolloverGui, hangupRolloverGui, hangupGui], text=['', TTLocalizer.CatalogHangUp, TTLocalizer.CatalogHangUp], text_fg=Vec4(1), text_scale=0.07, text_pos=(0.0, 0.14), command=self.hangUp) + self.beanBank = DirectLabel(self, relief=None, image=guiItems.find('**/bean_bank'), text=str(base.localAvatar.getMoney() + base.localAvatar.getBankMoney()), text_align=TextNode.ARight, text_scale=0.11, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.75, -0.81), text_font=ToontownGlobals.getSignFont()) nextUp = guiItems.find('**/arrow_up') nextRollover = guiItems.find('**/arrow_Rollover') nextDown = guiItems.find('**/arrow_Down') prevUp = guiItems.find('**/arrowUp') prevDown = guiItems.find('**/arrowDown1') prevRollover = guiItems.find('**/arrowRollover') - self.nextPageButton = DirectButton( - self, relief = None, - pos = (-0.1,0,-0.9), - image = [nextUp, nextDown, nextRollover, nextUp], - image_color = (.9,.9,.9,1), - image2_color = (1,1,1,1), - command = self.showNextPage) - self.backPageButton = DirectButton( - self, relief = None, - pos = (-0.1,0,-0.9), - image = [prevUp, prevDown, prevRollover, prevUp], - image_color = (.9,.9,.9,1), - image2_color = (1,1,1,1), - command = self.showBackPage) + self.nextPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[nextUp, nextDown, nextRollover, nextUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showNextPage) + self.backPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[prevUp, prevDown, prevRollover, prevUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showBackPage) self.backPageButton.hide() - self.pageLabel = DirectLabel( - self.base, relief = None, - pos = (-1.33,0,-0.9), - scale = 0.06, - text = TTLocalizer.CatalogPagePrefix, - text_fg = (0.95, 0.95, 0, 1), - text_shadow = (0, 0, 0, 1), - text_font = ToontownGlobals.getSignFont(), - text_align = TextNode.ALeft, - ) + self.pageLabel = DirectLabel(self.base, relief=None, pos=(-1.33, 0, -0.9), scale=0.06, text=TTLocalizer.CatalogPagePrefix, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft) self.loadClarabelle() + return def loadClarabelle(self): - # Create a separate reality for clarabelle self.cRender = NodePath('cRender') - # It gets its own camera self.cCamera = self.cRender.attachNewNode('cCamera') self.cCamNode = Camera('cCam') self.cLens = PerspectiveLens() - self.cLens.setFov(40,40) + self.cLens.setFov(40, 40) self.cLens.setNear(0.1) self.cLens.setFar(100.0) self.cCamNode.setLens(self.cLens) self.cCamNode.setScene(self.cRender) self.cCam = self.cCamera.attachNewNode(self.cCamNode) - self.cDr = base.win.makeDisplayRegion(0.58, 0.82, 0.53, 0.85) self.cDr.setSort(1) - self.cDr.setClearDepthActive(1) self.cDr.setClearColorActive(1) - self.cDr.setClearColor(Vec4(0.3,0.3,0.3,1)) + self.cDr.setClearColor(Vec4(0.3, 0.3, 0.3, 1)) self.cDr.setCamera(self.cCam) - - # Add Clarabelle model - self.clarabelle = Actor.Actor("phase_5.5/models/char/Clarabelle-zero", - { "listen" : "phase_5.5/models/char/Clarabelle-listens" } ) - self.clarabelle.loop("listen") - - # Force her eyes to render back-to-front, by the simple - # expedient of parenting them to the fixed bin in order. + self.clarabelle = Actor.Actor('phase_5.5/models/char/Clarabelle-zero', {'listen': 'phase_5.5/models/char/Clarabelle-listens'}) + self.clarabelle.loop('listen') self.clarabelle.find('**/eyes').setBin('fixed', 0) self.clarabelle.find('**/pupilL').setBin('fixed', 1) self.clarabelle.find('**/pupilR').setBin('fixed', 1) self.clarabelle.find('**/glassL').setBin('fixed', 2) self.clarabelle.find('**/glassR').setBin('fixed', 2) - - # Get the switchboard too. - switchboard = loader.loadModel("phase_5.5/models/estate/switchboard") + switchboard = loader.loadModel('phase_5.5/models/estate/switchboard') switchboard.reparentTo(self.clarabelle) switchboard.setPos(0, -2, 0) - - # self.clarabelle = Char.Char() - # clarabelleDNA = CharDNA.CharDNA() - # clarabelleDNA.newChar('cl') - # self.clarabelle.setDNA(clarabelleDNA) - # self.clarabelle.hideName() self.clarabelle.reparentTo(self.cRender) - self.clarabelle.setPosHprScale(-0.56, 6.43, -3.81, - 121.61, 0.00, 0.00, - 1.00, 1.00, 1.00) - # Match up existing gui frame - self.clarabelleFrame.setPosHprScale(-0.00, 0.00, 0.00, - 0.00, 0.00, 0.00, - 1.00, 1.00, 1.00) + self.clarabelle.setPosHprScale(-0.56, 6.43, -3.81, 121.61, 0.0, 0.0, 1.0, 1.0, 1.0) + self.clarabelleFrame.setPosHprScale(-0.04, 0.0, 0.17, 0.0, 0.0, 0.0, 1.05, 1.0, 0.84) + def reload(self): - for panel in (self.panelList + self.backPanelList + self.loyaltyPanelList): + for panel in self.panelList + self.backPanelList: panel.destroy() - def priceSort(a,b,type): + + def priceSort(a, b, type): priceA = a.getPrice(type) priceB = b.getPrice(type) - return priceB - priceA - # Initialize variables + return priceA - priceB + self.pageIndex = -1 self.maxPageIndex = 0 self.numNewPages = 0 self.numBackPages = 5 - self.numLoyaltyPages = 0 self.viewing = 'New' self.panelList = [] self.backPanelList = [] - self.loyaltyList = [] self.pageList = [] self.backPageList = [] - self.loyaltyPanelList = [] - self.loyaltyPageList = [] self.panelDict = {} self.visiblePanels = [] - itemList = (base.localAvatar.monthlyCatalog + - base.localAvatar.weeklyCatalog) - itemList.sort(lambda a,b: priceSort(a,b,CatalogItem.CatalogTypeWeekly)) + itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog + itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly)) itemList.reverse() for item in itemList: - if item.loyaltyRequirement() != 0: - self.loyaltyPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeLoyalty, - parentCatalogScreen = self, - )) - - else: - self.panelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeWeekly - )) + self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly)) + itemList = base.localAvatar.backCatalog - itemList.sort( - lambda a,b: priceSort(a,b,CatalogItem.CatalogTypeBackorder)) + itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder)) itemList.reverse() for item in itemList: - if item.loyaltyRequirement() != 0: - self.loyaltyPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeLoyalty, - parentCatalogScreen = self, - )) - - else: - self.backPanelList.append( - CatalogItemPanel.CatalogItemPanel( - parent = hidden, - item=item, - type=CatalogItem.CatalogTypeBackorder - )) + self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder)) + numPages = self.packPages(self.panelList, self.pageList, 'new') self.setNumNewPages(numPages) - numPages = self.packPages(self.backPanelList,self.backPageList,'back') + numPages = self.packPages(self.backPanelList, self.backPageList, 'back') self.setNumBackPages(numPages) - - numPages = self.packPages(self.loyaltyPanelList,self.loyaltyPageList,'loyalty') - self.setNumLoyaltyPages(numPages) - seriesNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) / ToontownGlobals.CatalogNumWeeksPerSeries + 1 self.catalogSeries['text'] = Localizer.CatalogSeriesLabel % seriesNumber weekNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) % ToontownGlobals.CatalogNumWeeksPerSeries + 1 - self.catalogNumber['text'] = "#%d" % weekNumber + self.catalogNumber['text'] = '#%d' % weekNumber self.enableBackorderCatalogButton() self.setMaxPageIndex(self.numNewPages) self.setPageIndex(-1) self.showPageItems() - + self.update() + def unload(self): - taskMgr.remove("clearClarabelleChat") - taskMgr.remove("postGoodbyeHangUp") - taskMgr.remove("clarabelleGreeting") - taskMgr.remove("clarabelleHelpText1") - taskMgr.remove("clarabelleAskAnythingElse") - if self.giftAvatar: - base.cr.cancelAvatarDetailsRequest(self.giftAvatar) - # Make sure to remove Hook + taskMgr.remove('clearClarabelleChat') + taskMgr.remove('postGoodbyeHangUp') + taskMgr.remove('clarabelleGreeting') + taskMgr.remove('clarabelleHelpText1') + taskMgr.remove('clarabelleAskAnythingElse') self.hide() - # remove all graphical elements self.destroy() - # Clean up variables del self.base del self.squares - for panel in (self.panelList + self.backPanelList + self.loyaltyPanelList): + for panel in self.panelList + self.backPanelList: panel.destroy() + del self.panelList del self.backPanelList del self.cover @@ -1070,30 +447,16 @@ def unload(self): del self.beanBank del self.nextPageButton del self.backPageButton - del self.newCatalogButton - del self.newCatalogButton2 del self.backCatalogButton + del self.newCatalogButton del self.backCatalogButton2 - del self.loyaltyCatalogButton - del self.loyaltyCatalogButton2 - + del self.newCatalogButton2 del self.pageLabel - if self.createdGiftGui: - del self.giftToggle - del self.giftLabel - del self.friendLabel - del self.scrollList self.unloadClarabelle() - # delete dialog (if present) if self.responseDialog: self.responseDialog.cleanup() self.responseDialog = None - - if self.giftAvatar: - if hasattr(self.giftAvatar, 'doId'): - self.giftAvatar.delete() - else: - self.giftAvatar = None + return def unloadClarabelle(self): base.win.removeDisplayRegion(self.cDr) @@ -1108,9 +471,6 @@ def unloadClarabelle(self): def hangUp(self): self.setClarabelleChat(random.choice(TTLocalizer.CatalogGoodbyeList)) - # Flip to the front cover and hide the arrow and tabs - # so you can not get out of this mode. We do not want people - # purchasing items after hanging up self.setPageIndex(-1) self.showPageItems() self.nextPageButton.hide() @@ -1119,323 +479,66 @@ def hangUp(self): self.newCatalogButton2.hide() self.backCatalogButton.hide() self.backCatalogButton2.hide() - self.loyaltyCatalogButton.hide() - self.loyaltyCatalogButton2.hide() self.hangup.hide() + taskMgr.remove('clarabelleGreeting') + taskMgr.remove('clarabelleHelpText1') + taskMgr.remove('clarabelleAskAnythingElse') - # No more helpful text - taskMgr.remove("clarabelleGreeting") - taskMgr.remove("clarabelleHelpText1") - taskMgr.remove("clarabelleAskAnythingElse") - def postGoodbyeHangUp(task): messenger.send(self['doneEvent']) self.unload() - taskMgr.doMethodLater(1.5, postGoodbyeHangUp, "postGoodbyeHangUp") - - def remoteUpdate(self): - #print("remoteupdate") - #print self.gifting - self.update() - # button handlers - def update(self, lock = 0):#, giftActivate = 0): - #print("update") - if not hasattr(self.giftAvatar, 'doId'): - if self.gifting == 1: - self.__giftToggle() - # Update amount in jellybean bank if the catalog is still open - if hasattr(self, "beanBank"): - self.beanBank['text'] = str(base.localAvatar.getTotalMoney()) - # call this when toon's money count changes to update the buy buttons - #print lock - if lock == 0: - for item in (self.panelList + self.backPanelList + self.loyaltyPanelList): - if (type(item) != type("")): - #item.updateButtons(giftActivate) + taskMgr.doMethodLater(1.5, postGoodbyeHangUp, 'postGoodbyeHangUp') + + def update(self): + self.beanBank['text'] = str(base.localAvatar.getTotalMoney()) + for item in self.panelList + self.backPanelList: + if type(item) != type(''): + item.updateBuyButton() - item.updateButtons(self.gifting) - #item.updateBuyButton() - #item.updateGiftButton(giftActivate) - def __handlePurchaseRequest(self, item): - # ask the user to customize this purchase (if necessary) and - # then ask AI to make the purchase. item.requestPurchase(self['phone'], self.__handlePurchaseResponse) - # If you are buying something else, she should not say this - taskMgr.remove("clarabelleAskAnythingElse") - - def __handleGiftPurchaseRequest(self, item): - # ask the user to customize this purchase (if necessary) and - # then ask AI to make the purchase. - #friendPair = base.localAvatar.friendsList[self.friendGiftIndex] - #frienddoId = base.cr.identifyFriend(friendPair[0]).getDoId() - item.requestGiftPurchase(self['phone'], self.frienddoId,self.__handleGiftPurchaseResponse) - # If you are buying something else, she should not say this - taskMgr.remove("clarabelleAskAnythingElse") + taskMgr.remove('clarabelleAskAnythingElse') def __handlePurchaseResponse(self, retCode, item): - # AI has returned the status of the purchase in retCode - if retCode == ToontownGlobals.P_UserCancelled: - # No big deal; the user bailed. - return - self.setClarabelleChat(item.getRequestPurchaseErrorText(retCode), - item.getRequestPurchaseErrorTextTimeout()) - """ - self.responseDialog = TTDialog.TTDialog( - style = TTDialog.Acknowledge, - text = item.getRequestPurchaseErrorText(retCode), - text_wordwrap = 15, - fadeScreen = 1, - command = self.__clearDialog, - ) - """ - - def __handleGiftPurchaseResponse(self, retCode, item): - # AI has returned the status of the purchase in retCode if retCode == ToontownGlobals.P_UserCancelled: - # No big deal; the user bailed. - return - if self.isEmpty() or self.isHidden(): - # the user hung up the phone before we got the uberdog response return - self.setClarabelleChat(item.getRequestGiftPurchaseErrorText(retCode) % (self.receiverName)); - self.__loadFriend() + self.setClarabelleChat(item.getRequestPurchaseErrorText(retCode)) def askAnythingElse(task): self.setClarabelleChat(TTLocalizer.CatalogAnythingElse) - + if retCode >= 0: - # success: update catalog screen and buttons - # After a while, have Clarabelle ask if there is anything else you would like - taskMgr.doMethodLater(8, askAnythingElse, "clarabelleAskAnythingElse") - - + self.update() + taskMgr.doMethodLater(8, askAnythingElse, 'clarabelleAskAnythingElse') + def __clearDialog(self, event): self.responseDialog.cleanup() self.responseDialog = None + return def setClarabelleChat(self, str, timeout=6): self.clearClarabelleChat() if not self.clarabelleChatBalloon: - self.clarabelleChatBalloon = loader.loadModel("phase_3/models/props/chatbox.bam") + self.clarabelleChatBalloon = loader.loadModel('phase_3/models/props/chatbox.bam') self.clarabelleChat = ChatBalloon(self.clarabelleChatBalloon.node()) - chatNode = self.clarabelleChat.generate( - str, - ToontownGlobals.getInterfaceFont(), - 10, - Vec4(0,0,0,1), - Vec4(1,1,1,1), - 0, - 0, - 0, - NodePath(), - 0, - 0, - NodePath(), - ) - self.clarabelleChatNP = self.attachNewNode(chatNode,1000) + chatNode = self.clarabelleChat.generate(str, ToontownGlobals.getInterfaceFont(), 10, Vec4(0, 0, 0, 1), Vec4(1, 1, 1, 1), 0, 0, 0, NodePath(), 0, 0, NodePath()) + self.clarabelleChatNP = self.attachNewNode(chatNode, 1000) self.clarabelleChatNP.setScale(0.08) - self.clarabelleChatNP.setPos(0.7,0,0.6) + self.clarabelleChatNP.setPos(0.7, 0, 0.6) if timeout: - taskMgr.doMethodLater(timeout, self.clearClarabelleChat, "clearClarabelleChat") - + taskMgr.doMethodLater(timeout, self.clearClarabelleChat, 'clearClarabelleChat') + def clearClarabelleChat(self, task=None): - # Clean up old chat - taskMgr.remove("clearClarabelleChat") + taskMgr.remove('clearClarabelleChat') if self.clarabelleChatNP: self.clarabelleChatNP.removeNode() self.clarabelleChatNP = None del self.clarabelleChat - + return def __moneyChange(self, money): - if self.gifting > 0: - self.update(1) - else: - self.update(0) - #print ("__moneyChange") - - def __bankMoneyChange(self, bankMoney): - if self.gifting > 0: - self.update(1) - else: - self.update(0) - #print ("__bankMoneyChange") - - def checkFamily(self, doId): - test = 0 - for familyMember in base.cr.avList: - if familyMember.id == doId: - test = 1 - return test - - - def __makeFFlist(self): - for familyMember in base.cr.avList: - if familyMember.id != base.localAvatar.doId: - newFF = (familyMember.id, familyMember.name, NametagGroup.CCNonPlayer) - self.ffList.append(newFF) - for friendPair in base.localAvatar.friendsList: - friendId, flags = friendPair - #print "adding friend" - handle = base.cr.identifyFriend(friendId) - if handle and not self.checkFamily(friendId): - if hasattr(handle, 'getName'): - colorCode = NametagGroup.CCSpeedChat - if (flags & ToontownGlobals.FriendChat): - colorCode = NametagGroup.CCFreeChat - newFF = (friendPair[0], handle.getName(), colorCode) - self.ffList.append(newFF) - else: - self.notify.warning("Bad Handle for getName in makeFFlist") - hasManager = hasattr(base.cr, "playerFriendsManager") - if hasManager: - for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars(): - handle = base.cr.playerFriendsManager.getAvHandleFromId(avatarId) - playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId) - playerInfo = base.cr.playerFriendsManager.getFriendInfo(playerId) - freeChat = playerInfo.understandableYesNo - if handle and not self.checkFamily(avatarId): - if hasattr(handle, 'getName'): - colorCode = NametagGroup.CCSpeedChat - if freeChat: - colorCode = NametagGroup.CCFreeChat - newFF = (avatarId, handle.getName(), colorCode) - self.ffList.append(newFF) - else: - self.notify.warning("Bad Handle for getName in makeFFlist") - #import pdb; pdb.set_trace() - - def __makeScrollList(self): - for ff in self.ffList: - ffbutton = self.makeFamilyButton(ff[0], ff[1], ff[2]) - if ffbutton: - #print "adding button" - self.scrollList.addItem(ffbutton, refresh=0) - self.friends[ff] = ffbutton - else: - pass - #print "not adding button" - #import pdb; pdb.set_trace() - self.scrollList.refresh() - - - - def makeFamilyButton(self, familyId, familyName, colorCode): - - #print("Making Family Button") - #print familyId - # What color should we display the name in? Use the - # appropriate nametag color, according to whether we are - # "special friends" or not. - fg = NametagGlobals.getNameFg(colorCode, PGButton.SInactive) - - #print "made family button" - - return DirectButton( - relief = None, - text = familyName, - text_scale = 0.04, - text_align = TextNode.ALeft, - text_fg = fg, - text1_bg = self.textDownColor, - text2_bg = self.textRolloverColor, - text3_fg = self.textDisabledColor, - textMayChange = 0, - command = self.__chooseFriend, - extraArgs = [familyId, familyName], - ) - - - def __chooseFriend(self, friendId, friendName): - """selects a friend for loading""" - #messenger.send('wakeup') # I have no idea what this is for - #handle = base.cr.identifyFriend(friendId) # the friend handle is throw awayused to get the doId for an avatar - #if 0 and handle != None: - # friendText = handle.getName() - # self.friendLabel['text'] = (TTLocalizer.CatalogGiftTo % (friendText)) - # self.friendGiftHandle = handle; - # self.frienddoId = handle.getDoId() - # self.__loadFriend() - messenger.send('wakeup') - self.frienddoId = friendId - self.receiverName = friendName - self.friendLabel['text'] = (TTLocalizer.CatalogGiftTo % (self.receiverName)) - self.__loadFriend() - - def __loadFriend(self): - - #return - """Requests a detail avatar from the database""" - if self.allowGetDetails == 0: - CatalogScreen.notify.warning("smashing requests") - if self.frienddoId and self.allowGetDetails: - if self.giftAvatar: - if hasattr(self.giftAvatar, 'doId'): - self.giftAvatar.delete() - self.giftAvatar = None - self.giftAvatar = DistributedToon.DistributedToon(base.cr) #sets up a dummy avatar - self.giftAvatar.doId = self.frienddoId #the doId is required for getAvatarDetails to work - # getAvatarDetails puts a DelayDelete on the avatar, and this - # is not a real DO, so bypass the 'generated' check - self.giftAvatar.forceAllowDelayDelete() - base.cr.getAvatarDetails(self.giftAvatar, self.__handleAvatarDetails, "DistributedToon") #request to the database - self.gotAvatar = 0 #sets the flag to false so we know we have a database request pending - self.allowGetDetails = 0 - self.scrollList['state'] = DGG.DISABLED - - def __handleAvatarDetails(self, gotData, avatar, dclass): - - """Receives and uses the detail avatar""" - #if something goes wrong set teh flag as invlaid - if self.giftAvatar.doId != avatar.doId or gotData == 0: - CatalogScreen.notify.error("Get Gift Avatar Failed") - self.gotAvatar = 0 - return - #otherwise set the flag to valid and update the catalog - else: - self.gotAvatar = 1 - self.giftAvatar = avatar - #self.giftAvatar = DistributedToon.DistributedToon(base.cr) #error test case 1 - #self.giftAvatar = None #error test case 2 - self.scrollList['state'] = DGG.NORMAL - self.allowGetDetails = 1 self.update() - - def __giftToggle(self): - messenger.send('wakeup') - if self.gifting == -1: - self.gifting = 1 - self.giftLabel.show() - self.friendLabel.show() - self.scrollList.show() - self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOn - self.__loadFriend() - else: - self.gifting = -1 - self.giftLabel.hide() - self.friendLabel.hide() - self.scrollList.hide() - self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff - self.update() - - def __handleUDack(self, caller = None): - taskMgr.remove("ackTimeOut") - if hasattr(self, 'giftToggle') and self.giftToggle: - self.giftToggle['state'] = DGG.NORMAL - self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff - - def __handleNoAck(self, caller = None): - if hasattr(self, 'giftToggle') and self.giftToggle: - self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleNoAck - - - - - - - - - + def __bankMoneyChange(self, bankMoney): + self.update() \ No newline at end of file diff --git a/toontown/src/catalog/CatalogSurfaceColors.py b/toontown/src/catalog/CatalogSurfaceColors.py index f47af15a..b079511e 100644 --- a/toontown/src/catalog/CatalogSurfaceColors.py +++ b/toontown/src/catalog/CatalogSurfaceColors.py @@ -1,103 +1,63 @@ - -## COLORS ## -CT_WHITE = (1.000, 1.000, 1.000, 1.000) -CT_RED = (1.000, 0.500, 0.500, 1.000) -CT_BROWN = (0.641, 0.355, 0.270, 1.000) -CT_CANTELOPE = (0.839, 0.651, 0.549, 1.000) -CT_TAN = (0.996, 0.695, 0.512, 1.000) -CT_ORANGE = (0.992, 0.480, 0.168, 1.000) -CT_CORAL = (0.832, 0.500, 0.297, 1.000) -CT_PEACH = (1.000, 0.820, 0.700, 1.000) -CT_BEIGE = (1.000, 0.800, 0.600, 1.000) -CT_TAN2 = (0.808, 0.678, 0.510, 1.000) -CT_SIENNA = (0.570, 0.449, 0.164, 1.000) -CT_YELLOW = (0.996, 0.898, 0.320, 1.000) -CT_CREAM = (0.996, 0.957, 0.598, 1.000) -CT_BEIGE2 = (1.000, 1.000, 0.600, 1.000) -CT_YELLOW2 = (1.000, 1.000, 0.700, 1.000) -CT_CITRINE = (0.855, 0.934, 0.492, 1.000) -CT_FOREST_GREEN = (0.500, 0.586, 0.400, 1.000) -CT_LINE = (0.551, 0.824, 0.324, 1.000) -CT_PALE_GREEN = (0.789, 1.000, 0.700, 1.000) -CT_GREEN = (0.305, 0.969, 0.402, 1.000) -CT_TEAL = (0.600, 1.000, 0.800, 1.000) -CT_SEA_GREEN = (0.242, 0.742, 0.516, 1.000) -CT_LIGHT_BLUE = (0.434, 0.906, 0.836, 1.000) -CT_AQUA = (0.348, 0.820, 0.953, 1.000) -CT_BLUE = (0.191, 0.563, 0.773, 1.000) -CT_LIGHT_BLUE2 = (0.875, 0.937, 1.000, 1.000) -CT_PERIWINKLE = (0.559, 0.590, 0.875, 1.000) -CT_ROYAL_BLUE = (0.285, 0.328, 0.727, 1.000) -CT_GREY = (0.700, 0.700, 0.800, 1.000) -CT_BLUE2 = (0.600, 0.600, 1.000, 1.000) -CT_SLATE_BLUE = (0.461, 0.379, 0.824, 1.000) -CT_PURPLE = (0.547, 0.281, 0.750, 1.000) -CT_LAVENDER = (0.727, 0.473, 0.859, 1.000) -CT_PINK = (0.898, 0.617, 0.906, 1.000) -CT_PINK2 = (1.000, 0.600, 1.000, 1.000) -CT_MAROON = (0.711, 0.234, 0.438, 1.000) -CT_PEACH2 = (0.969, 0.691, 0.699, 1.000) -CT_RED2 = (0.863, 0.406, 0.418, 1.000) -CT_BRIGHT_RED = (0.934, 0.266, 0.281, 1.000) - -# Wood colors -CT_DARK_WOOD = (0.690, 0.741, 0.710, 1.000) -CT_DARK_WALNUT = (0.549, 0.412, 0.259, 1.000) -CT_GENERIC_DARK = (0.443, 0.333, 0.176, 1.000) -CT_PINE = (1.000, 0.812, 0.490, 1.000) -CT_CHERRY = (0.710, 0.408, 0.267, 1.000) -CT_BEECH = (0.961, 0.659, 0.400, 1.000) - -# Color tables - -# To be applied to flat_wallpaper1. +CT_WHITE = ( + 1.0, 1.0, 1.0, 1.0) +CT_RED = (1.0, 0.5, 0.5, 1.0) +CT_BROWN = (0.641, 0.355, 0.27, 1.0) +CT_CANTELOPE = (0.839, 0.651, 0.549, 1.0) +CT_TAN = (0.996, 0.695, 0.512, 1.0) +CT_ORANGE = (0.992, 0.48, 0.168, 1.0) +CT_CORAL = (0.832, 0.5, 0.297, 1.0) +CT_PEACH = (1.0, 0.82, 0.7, 1.0) +CT_BEIGE = (1.0, 0.8, 0.6, 1.0) +CT_TAN2 = (0.808, 0.678, 0.51, 1.0) +CT_SIENNA = (0.57, 0.449, 0.164, 1.0) +CT_YELLOW = (0.996, 0.898, 0.32, 1.0) +CT_CREAM = (0.996, 0.957, 0.598, 1.0) +CT_BEIGE2 = (1.0, 1.0, 0.6, 1.0) +CT_YELLOW2 = (1.0, 1.0, 0.7, 1.0) +CT_CITRINE = (0.855, 0.934, 0.492, 1.0) +CT_FOREST_GREEN = (0.5, 0.586, 0.4, 1.0) +CT_LINE = (0.551, 0.824, 0.324, 1.0) +CT_PALE_GREEN = (0.789, 1.0, 0.7, 1.0) +CT_GREEN = (0.305, 0.969, 0.402, 1.0) +CT_TEAL = (0.6, 1.0, 0.8, 1.0) +CT_SEA_GREEN = (0.242, 0.742, 0.516, 1.0) +CT_LIGHT_BLUE = (0.434, 0.906, 0.836, 1.0) +CT_AQUA = (0.348, 0.82, 0.953, 1.0) +CT_BLUE = (0.191, 0.563, 0.773, 1.0) +CT_LIGHT_BLUE2 = (0.875, 0.937, 1.0, 1.0) +CT_PERIWINKLE = (0.559, 0.59, 0.875, 1.0) +CT_ROYAL_BLUE = (0.285, 0.328, 0.727, 1.0) +CT_GREY = (0.7, 0.7, 0.8, 1.0) +CT_BLUE2 = (0.6, 0.6, 1.0, 1.0) +CT_SLATE_BLUE = (0.461, 0.379, 0.824, 1.0) +CT_PURPLE = (0.547, 0.281, 0.75, 1.0) +CT_LAVENDER = (0.727, 0.473, 0.859, 1.0) +CT_PINK = (0.898, 0.617, 0.906, 1.0) +CT_PINK2 = (1.0, 0.6, 1.0, 1.0) +CT_MAROON = (0.711, 0.234, 0.438, 1.0) +CT_PEACH2 = (0.969, 0.691, 0.699, 1.0) +CT_RED2 = (0.863, 0.406, 0.418, 1.0) +CT_BRIGHT_RED = (0.934, 0.266, 0.281, 1.0) +CT_DARK_WOOD = ( + 0.69, 0.741, 0.71, 1.0) +CT_DARK_WALNUT = (0.549, 0.412, 0.259, 1.0) +CT_GENERIC_DARK = (0.443, 0.333, 0.176, 1.0) +CT_PINE = (1.0, 0.812, 0.49, 1.0) +CT_CHERRY = (0.71, 0.408, 0.267, 1.0) +CT_BEECH = (0.961, 0.659, 0.4, 1.0) CTFlatColor = [ - CT_BEIGE, - CT_TEAL, - CT_BLUE2, - CT_PINK2, - CT_BEIGE2, - CT_RED, - ] - + CT_BEIGE, CT_TEAL, CT_BLUE2, CT_PINK2, CT_BEIGE2, CT_RED] CTValentinesColors = [ - CT_PINK2, - CT_RED, - ] - + CT_PINK2, CT_RED] CTUnderwaterColors = [ - CT_WHITE, - CT_TEAL, - CT_SEA_GREEN, - CT_LIGHT_BLUE, - CT_PALE_GREEN, - CT_AQUA, - CT_CORAL, - CT_PEACH, - ] - - -# Create darkened versions of the flat colors These are useful for modlings -# and borders and such + CT_WHITE, CT_TEAL, CT_SEA_GREEN, CT_LIGHT_BLUE, CT_PALE_GREEN, CT_AQUA, CT_CORAL, CT_PEACH] CTFlatColorDark = [] tint = 0.75 for color in CTFlatColor: - CTFlatColorDark.append((color[0] * tint, - color[1] * tint, - color[2] * tint, - 1.0)) + CTFlatColorDark.append((color[0] * tint, color[1] * tint, color[2] * tint, 1.0)) CTFlatColorAll = CTFlatColor + CTFlatColorDark - -# To be applied to grayscale textures. CTBasicWoodColorOnWhite = [ - CT_DARK_WALNUT, - CT_GENERIC_DARK, - CT_PINE, - CT_CHERRY, - CT_BEECH, - ] - -CTWhite = [CT_WHITE,] - - + CT_DARK_WALNUT, CT_GENERIC_DARK, CT_PINE, CT_CHERRY, CT_BEECH] +CTWhite = [ + CT_WHITE] \ No newline at end of file diff --git a/toontown/src/catalog/CatalogSurfaceItem.py b/toontown/src/catalog/CatalogSurfaceItem.py index d22476e1..17130397 100644 --- a/toontown/src/catalog/CatalogSurfaceItem.py +++ b/toontown/src/catalog/CatalogSurfaceItem.py @@ -1,11 +1,7 @@ -import CatalogItem -import CatalogAtticItem +from . import CatalogItem, CatalogAtticItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -from CatalogSurfaceColors import * - -# Surface type. This must be a contiguous series in the range 0-3 to -# index into DistributedHouse.activeWallpaper. +from .CatalogSurfaceColors import * STWallpaper = 0 STMoulding = 1 STFlooring = 2 @@ -13,16 +9,11 @@ NUM_ST_TYPES = 4 class CatalogSurfaceItem(CatalogAtticItem.CatalogAtticItem): - """CatalogSurfaceItem - - Parent class for all house surface items (wallpapers, flooring - moulding, and wainscotings. These specify the texture/color - combination for walls and trim. - """ + __module__ = __name__ def makeNewItem(self): CatalogAtticItem.CatalogAtticItem.makeNewItem(self) - + def setPatternIndex(self, patternIndex): self.patternIndex = patternIndex @@ -30,22 +21,13 @@ def setColorIndex(self, colorIndex): self.colorIndex = colorIndex def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def recordPurchase(self, avatar, optional): - # Updates the appropriate field on the avatar to indicate the - # purchase (or delivery). This makes the item available to - # use by the avatar. This method is only called on the AI side. - self.giftTag = None - house, retcode = self.getHouseInfo(avatar) + (house, retcode) = self.getHouseInfo(avatar) if retcode >= 0: house.addWallpaper(self) return retcode def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. - return 60 # 1 hour. - + return 60 \ No newline at end of file diff --git a/toontown/src/catalog/CatalogToonStatueItem.py b/toontown/src/catalog/CatalogToonStatueItem.py index e68dc1a0..e577aad4 100644 --- a/toontown/src/catalog/CatalogToonStatueItem.py +++ b/toontown/src/catalog/CatalogToonStatueItem.py @@ -1,4 +1,4 @@ -import CatalogGardenItem +from . import CatalogGardenItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPLocalizer diff --git a/toontown/src/catalog/CatalogWainscotingItem.py b/toontown/src/catalog/CatalogWainscotingItem.py index cda71f8b..c3d05fb6 100644 --- a/toontown/src/catalog/CatalogWainscotingItem.py +++ b/toontown/src/catalog/CatalogWainscotingItem.py @@ -1,40 +1,18 @@ -from CatalogSurfaceItem import * - -# Indicies into Wainscoting Textures Dictionary +from .CatalogSurfaceItem import * WSTTextureName = 0 WSTColor = 1 WSTBasePrice = 2 - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.WainscotingNames. -WainscotingTypes = { - # Plain - 1000 : ("phase_3.5/maps/wall_paper_b3.jpg", CTFlatColorDark, 200), - # Wood version - 1010 : ("phase_5.5/maps/wall_paper_b4_greyscale.jpg", - CTBasicWoodColorOnWhite, 200), - # Wood version - series 2 - 1020 : ("phase_5.5/maps/wainscotings_neutral.jpg", CTBasicWoodColorOnWhite, 200), - # Painted, valentines - 1030 : ("phase_3.5/maps/wall_paper_b3.jpg", CTValentinesColors, 200), - # Painted, underwater colors - 1040 : ("phase_3.5/maps/wall_paper_b3.jpg", CTUnderwaterColors, 200), - } +WainscotingTypes = {1000: ('phase_3.5/maps/wall_paper_b3.jpg', CTFlatColorDark, 200), 1010: ('phase_5.5/maps/wall_paper_b4_greyscale.jpg', CTBasicWoodColorOnWhite, 200), 1020: ('phase_5.5/maps/wainscotings_neutral.jpg', CTBasicWoodColorOnWhite, 200), 1030: ('phase_3.5/maps/wall_paper_b3.jpg', CTValentinesColors, 200), 1040: ('phase_3.5/maps/wall_paper_b3.jpg', CTUnderwaterColors, 200)} class CatalogWainscotingItem(CatalogSurfaceItem): - """CatalogWainscotingItem + __module__ = __name__ - This represents a texture/color combination for wainscoting. - - """ - def makeNewItem(self, patternIndex, colorIndex): self.patternIndex = patternIndex self.colorIndex = colorIndex CatalogSurfaceItem.makeNewItem(self) def getTypeName(self): - # e.g. "wallpaper", "wainscoting", etc. return TTLocalizer.SurfaceNames[STWainscoting] def getName(self): @@ -44,40 +22,25 @@ def getName(self): return self.getTypeName() def getSurfaceType(self): - # Returns a value reflecting the type of surface this - # pattern is intended to be applied to. return STWainscoting def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. frame = self.makeFrame() - - sample = loader.loadModel('phase_5.5/models/estate/wallpaper_sample') + sample = loader.loadModelCopy('phase_5.5/models/estate/wallpaper_sample') a = sample.find('**/a') b = sample.find('**/b') c = sample.find('**/c') - - # Wainscoting gets applied to the bottom 1/3, with the top - # 2/3 hidden. a.hide() b.hide() c.setTexture(self.loadTexture(), 1) c.setColorScale(*self.getColor()) - sample.reparentTo(frame) - -## assert (not self.hasPicture) - self.hasPicture=True - - return (frame, None) + return ( + frame, None) + return - def output(self, store = ~0): - return "CatalogWainscotingItem(%s, %s%s)" % ( - self.patternIndex, self.colorIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogWainscotingItem(%s, %s%s)' % (self.patternIndex, self.colorIndex, self.formatOptionalData(store)) def getFilename(self): return WainscotingTypes[self.patternIndex][WSTTextureName] @@ -88,7 +51,8 @@ def compareTo(self, other): return self.colorIndex - other.colorIndex def getHashContents(self): - return (self.patternIndex, self.colorIndex) + return ( + self.patternIndex, self.colorIndex) def getBasePrice(self): return WainscotingTypes[self.patternIndex][WSTBasePrice] @@ -103,7 +67,6 @@ def loadTexture(self): def getColor(self): if self.colorIndex == None: - # If no color index is set yet, use first color in color list colorIndex = 0 else: colorIndex = self.colorIndex @@ -112,10 +75,11 @@ def getColor(self): if colorIndex < len(colors): return colors[colorIndex] else: - print "Warning: colorIndex not in colors. Returning white." + print('Warning: colorIndex not in colors. Returning white.') return CT_WHITE else: return CT_WHITE + return def decodeDatagram(self, di, versionNumber, store): CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store) @@ -124,70 +88,56 @@ def decodeDatagram(self, di, versionNumber, store): else: self.patternIndex = di.getUint16() self.colorIndex = di.getUint8() - - # The following will generate an exception if - # self.patternIndex is invalid. The other fields can take - # care of themselves. wtype = WainscotingTypes[self.patternIndex] - + def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) dg.addUint16(self.patternIndex) dg.addUint8(self.colorIndex) + def getWainscotings(*indexList): - # This function returns a list of CatalogWainscotingItems - # The returned items will all need to be customized (i.e - # have a color chosen by the user. Until customization, - # use a default color index of 0 (if the pattern has a color - # list) or CT_WHITE if the pattern has no color list list = [] for index in indexList: list.append(CatalogWainscotingItem(index)) + return list - + def getAllWainscotings(*indexList): - # This function returns a list of all possible - # CatalogWainscotingItems (that is, all color variants) for the - # indicated type index(es). list = [] for index in indexList: colors = WainscotingTypes[index][WSTColor] if colors: for n in range(len(colors)): list.append(CatalogWainscotingItem(index, n)) + else: list.append(CatalogWainscotingItem(index, 0)) - return list - -def getWainscotingRange(fromIndex, toIndex, *otherRanges): - # This function returns a list of all possible - # CatalogWainscotingItems (that is, all color variants) for the - # indicated type index(es). + return list - # Make sure we got an even number of otherRanges - assert(len(otherRanges)%2 == 0) +def getWainscotingRange(fromIndex, toIndex, *otherRanges): list = [] - - froms = [fromIndex,] - tos = [toIndex,] - + froms = [ + fromIndex] + tos = [toIndex] i = 0 while i < len(otherRanges): froms.append(otherRanges[i]) - tos.append(otherRanges[i+1]) + tos.append(otherRanges[(i + 1)]) i += 2 - - for patternIndex in WainscotingTypes.keys(): - for fromIndex, toIndex in zip(froms,tos): + + for patternIndex in list(WainscotingTypes.keys()): + for (fromIndex, toIndex) in zip(froms, tos): if patternIndex >= fromIndex and patternIndex <= toIndex: colors = WainscotingTypes[patternIndex][WSTColor] if colors: for n in range(len(colors)): list.append(CatalogWainscotingItem(patternIndex, n)) + else: list.append(CatalogWainscotingItem(patternIndex, 0)) - return list + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogWallpaperItem.py b/toontown/src/catalog/CatalogWallpaperItem.py index 7b8cb114..76daf09c 100644 --- a/toontown/src/catalog/CatalogWallpaperItem.py +++ b/toontown/src/catalog/CatalogWallpaperItem.py @@ -1,362 +1,77 @@ -from CatalogSurfaceItem import * - -## TODO: -# Get rid of XXX2 wallpaper pattens -# Initialize borderIndex and borderColorIndex - -# Indicies into Wallpaper Textures Dictionary +from .CatalogSurfaceItem import * WTTextureName = 0 WTColor = 1 WTBorderList = 2 WTBasePrice = 3 - BDTextureName = 0 BDColor = 1 - -All = (1000,1010,1020,1030,1040,1050,1060,1070) - - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.WallpaperNames. -# Each is a list of (model, colorlist, border list, price) -# 0 in border list means no border -WallpaperTypes = { - # Parchment - 1000 : ("phase_5.5/maps/flat_wallpaper1.jpg", CTFlatColor, (0,1000,), 180), - # Milan - 1100 : ("phase_5.5/maps/big_stripes1.jpg", CTWhite, (0,1010,), 180), - 1110 : ("phase_5.5/maps/big_stripes2.jpg", CTWhite, (0,1040,), 180), - 1120 : ("phase_5.5/maps/big_stripes3.jpg", CTWhite, (0,1030,), 180), - 1130 : ("phase_5.5/maps/big_stripes4.jpg", CTWhite, (0,1010,), 180), - 1140 : ("phase_5.5/maps/big_stripes5.jpg", CTWhite, (0,1020,), 180), - 1150 : ("phase_5.5/maps/big_stripes6.jpg", CTWhite, (0,1020,), 180), - # Dover - 1200 : ("phase_5.5/maps/stripeB1.jpg", CTWhite, (0,1000,), 180), - 1210 : ("phase_5.5/maps/stripeB2.jpg", CTWhite, (0,1000,), 180), - 1220 : ("phase_5.5/maps/stripeB3.jpg", CTWhite, (0,1000,), 180), - 1230 : ("phase_5.5/maps/stripeB4.jpg", CTWhite, (0,1000,), 180), - # stripeB5 ends up in phase3.5 because it is placed on some of the - # toon_interior walls. - 1240 : ("phase_3.5/maps/stripeB5.jpg", CTWhite, (0,1000,), 180), - 1250 : ("phase_5.5/maps/stripeB6.jpg", CTWhite, (0,1000,), 180), - 1260 : ("phase_5.5/maps/stripeB7.jpg", CTWhite, (0,1000,), 180), - # Victoria - 1300 : ("phase_5.5/maps/squiggle1.jpg", CTWhite, (0,), 180), - 1310 : ("phase_5.5/maps/squiggle2.jpg", CTWhite, (0,), 180), - 1320 : ("phase_5.5/maps/squiggle3.jpg", CTWhite, (0,), 180), - 1330 : ("phase_5.5/maps/squiggle4.jpg", CTWhite, (0,), 180), - 1340 : ("phase_5.5/maps/squiggle5.jpg", CTWhite, (0,), 180), - 1350 : ("phase_5.5/maps/squiggle6.jpg", CTWhite, (0,), 180), - # Newport - 1400 : ("phase_5.5/maps/stripes_cyan.jpg", CTWhite, (0,1000,), 180), - 1410 : ("phase_5.5/maps/stripes_green.jpg", CTWhite, (0,1000,), 180), - 1420 : ("phase_5.5/maps/stripes_magenta.jpg", CTWhite, (0,1000,), 180), - 1430 : ("phase_5.5/maps/two_stripes1.jpg", CTWhite, (0,1000,), 180), - 1440 : ("phase_5.5/maps/two_stripes2.jpg", CTWhite, (0,1000,), 180), - 1450 : ("phase_5.5/maps/two_stripes3.jpg", CTWhite, (0,1000,), 180), - # Pastoral - 1500 : ("phase_5.5/maps/leaves1.jpg", CTWhite, (0,), 180), - 1510 : ("phase_5.5/maps/leaves2.jpg", CTWhite, (0,), 180), - 1520 : ("phase_5.5/maps/leaves3.jpg", CTWhite, (0,), 180), - # Harlequin - 1600 : ("phase_5.5/maps/diamonds2_cherries.jpg", CTWhite, (0,1000,), 180), - 1610 : ("phase_5.5/maps/diamonds3_cherries.jpg", CTWhite, (0,1000,), 180), - 1620 : ("phase_5.5/maps/diamonds3_cherry.jpg", CTWhite, (0,1000,), 180), - 1630 : ("phase_5.5/maps/diamonds4_cherries.jpg", CTWhite, (0,1000,), 180), - 1640 : ("phase_5.5/maps/diamonds4_cherry.jpg", CTWhite, (0,1000,), 180), - 1650 : ("phase_5.5/maps/diamonds5_cherries.jpg", CTWhite, (0,1000,), 180), - 1660 : ("phase_5.5/maps/diamonds6_cherry.jpg", CTWhite, (0,1000,), 180), - # Moon - 1700 : ("phase_5.5/maps/moon1.jpg", CTWhite, (0,), 180), - 1710 : ("phase_5.5/maps/moon2.jpg", CTWhite, (0,), 180), - 1720 : ("phase_5.5/maps/moon3.jpg", CTWhite, (0,), 180), - 1730 : ("phase_5.5/maps/moon4.jpg", CTWhite, (0,), 180), - 1740 : ("phase_5.5/maps/moon5.jpg", CTWhite, (0,), 180), - 1750 : ("phase_5.5/maps/moon6.jpg", CTWhite, (0,), 180), - 1760 : ("phase_5.5/maps/moon7.jpg", CTWhite, (0,), 180), - # Stars - 1800 : ("phase_5.5/maps/stars1.jpg", CTWhite, (0,), 180), - 1810 : ("phase_5.5/maps/stars2.jpg", (CT_BLUE2, CT_PINK2, CT_RED), (0,), 180), - 1820 : ("phase_5.5/maps/stars3.jpg", (CT_BLUE2, CT_PINK2, CT_RED, CT_WHITE), (0,), 180), - 1830 : ("phase_5.5/maps/stars4.jpg", CTWhite, (0,), 180), - 1840 : ("phase_5.5/maps/stars5.jpg", CTWhite, (0,), 180), - 1850 : ("phase_5.5/maps/stars6.jpg", CTWhite, (0,), 180), - 1860 : ("phase_5.5/maps/stars7.jpg", (CT_BEIGE2, CT_WHITE), (0,), 180), - # Flowers - 1900 : ("phase_5.5/maps/wall_paper_flower1.jpg", CTWhite, (0,1000), 180), - 1910 : ("phase_5.5/maps/wall_paper_flower2.jpg", CTWhite, (0,1000), 180), - 1920 : ("phase_5.5/maps/wall_paper_flower3.jpg", CTWhite, (0,1000), 180), - 1930 : ("phase_5.5/maps/wall_paper_flower4.jpg", CTWhite, (0,1000), 180), - 1940 : ("phase_5.5/maps/wall_paper_flower5.jpg", CTWhite, (0,1000), 180), - 1950 : ("phase_5.5/maps/wall_paper_flower6.jpg", CTWhite, (0,1000), 180), - # Spring Garden - 2000 : ("phase_5.5/maps/flat_wallpaper1.jpg", (CT_BEIGE, CT_BEIGE2, CT_RED), (1050,), 180), - 2010 : ("phase_5.5/maps/flat_wallpaper1.jpg", (CT_BLUE2, CT_PINK2), (1060,), 180), - 2020 : ("phase_5.5/maps/flat_wallpaper1.jpg", (CT_BEIGE2, CT_BLUE2, CT_PINK2, CT_BEIGE, CT_RED), (1070,), 180), - # Formal Garden - 2100 : ("phase_5.5/maps/big_stripes1.jpg", CTWhite, (1050,), 180), - 2110 : ("phase_5.5/maps/big_stripes2.jpg", CTWhite, (1050,), 180), - 2120 : ("phase_5.5/maps/big_stripes3.jpg", CTWhite, (1060,), 180), - 2130 : ("phase_5.5/maps/big_stripes3.jpg", CTWhite, (1070,), 180), - 2140 : ("phase_5.5/maps/big_stripes6.jpg", CTWhite, (1070,), 180), - - # Race Day - 2200 : ("phase_5.5/maps/wall_paper_car.jpg", CTWhite, (0,1000), 180,), - 2210 : ("phase_5.5/maps/wall_paper_car_neutral.jpg", CTFlatColor, - (0,1000), 180,), - - # Touchdown - 2300 : ("phase_5.5/maps/wall_paper_football_neutral.jpg", - CTFlatColor, (0,1080), 180,), - - # Cloud 9 - 2400 : ("phase_5.5/maps/wall_paper_clouds.jpg", CTWhite, (0,1000), 180,), - - # Climbing Vine - 2500 : ("phase_5.5/maps/wall_paper_vine_neutral.jpg", - CTFlatColorAll, (0,1090), 180,), - - # Springtime - 2600 : ("phase_5.5/maps/basket.jpg", CTWhite, (0,1000), 180,), - 2610 : ("phase_5.5/maps/basket_neutral.jpg", CTFlatColor, (0, 1000), 180,), - - # Kokeshi - 2700 : ("phase_5.5/maps/doll.jpg", CTWhite, (0,1000,1110), 180,), - 2710 : ("phase_5.5/maps/doll_neutral.jpg",CTFlatColor,(0,1100,1110),180,), - - # Posies - 2800 : ("phase_5.5/maps/littleFlowers.jpg", CTWhite, (0,1000), 180,), - 2810 : ("phase_5.5/maps/littleFlowers_neutral.jpg",CTFlatColor,(0,1000),180,), - - # Underwater - # Angel Fish - 2900 : ("phase_5.5/maps/UWwallPaperAngelFish.jpg", CTWhite, (0,1120,1160), 180,), - 2910 : ("phase_5.5/maps/UWwallPaperAngelFishColor.jpg", CTWhite, (0,1120,1160), 180,), - - # keep here temporarily so DB doesn't freak out. These keys were originally offered - # on the test server, but it turns out this indexing scheme doesn't work right, so - # they weren't offered on live. If we get rid of these indices (2920-2980) we shoul - # patch the DB on TEST - 2920 : ("phase_5.5/maps/UWwallPaperBubbles.jpg", CTWhite, (0,1120,1160), 180,), - 2930 : ("phase_5.5/maps/UWwallPaperBubbles2.jpg", CTWhite, (0,1120,1160), 180,), - 2940 : ("phase_5.5/maps/UWwallPaperGreenFish.jpg", CTWhite, (0,1120,1160), 180,), - 2950 : ("phase_5.5/maps/UWwallPaperRedFish.jpg", CTWhite, (0,1120,1160), 180,), - 2960 : ("phase_5.5/maps/UWwallPaperSea_horse.jpg", CTWhite, (0,1120,1160), 180,), - 2970 : ("phase_5.5/maps/UWwallPaperShells.jpg", CTWhite, (0,1140,1150), 180), - 2980 : ("phase_5.5/maps/UWwaterFloor1.jpg", (CT_WHITE, CT_PALE_GREEN, CT_LIGHT_BLUE), (0,), 180), - - # Bubbles - 3000 : ("phase_5.5/maps/UWwallPaperBubbles.jpg", CTWhite, (0,1120,1160), 180,), - 3100 : ("phase_5.5/maps/UWwallPaperBubbles2.jpg", CTWhite, (0,1120,1160), 180,), - - # Fish - 3200 : ("phase_5.5/maps/UWwallPaperGreenFish.jpg", CTWhite, (0,1120,1160), 180,), - 3300 : ("phase_5.5/maps/UWwallPaperRedFish.jpg", CTWhite, (0,1120,1160), 180,), - 3400 : ("phase_5.5/maps/UWwallPaperSea_horse.jpg", CTWhite, (0,1120,1160), 180,), - - # Shells - 3500 : ("phase_5.5/maps/UWwallPaperShells.jpg", (CT_WHITE, CT_SEA_GREEN, CT_LIGHT_BLUE), (0,1140,1150), 180), - - # Water - 3600 : ("phase_5.5/maps/UWwaterFloor1.jpg", (CT_WHITE, CT_PALE_GREEN, CT_LIGHT_BLUE), (0,), 180), - - # Western - 3700 : ("phase_5.5/maps/WesternBootWallpaper1.jpg", CTWhite, (0,1170,1180), 180,), - 3800 : ("phase_5.5/maps/WesternCactusWallpaper1.jpg", CTWhite, (0,1170,1180), 180,), - 3900 : ("phase_5.5/maps/WesternHatWallpaper1.jpg", CTWhite, (0,1170,1180), 180,), - - # Holiday themed wallpapers - - # Halloween - 10100 : ("phase_5.5/maps/cats1.jpg", CTWhite, (0, 10010, 10020), 400), - 10200 : ("phase_5.5/maps/bats2.jpg", CTWhite, (0, 10010, 10020), 400), - - # Christmas - # Snowflake - 11000 : ("phase_5.5/maps/wall_paper_snowflakes.jpg", CTWhite, - (0,11000,11010), 400,), - # Hollyleaf - 11100 : ("phase_5.5/maps/wall_paper_hollyleaf.jpg", CTWhite, - (0,11000,11010), 400,), - # Snowman - 11200 : ("phase_5.5/maps/wall_paper_snowman.jpg", CTWhite, - (0,11000,11010), 400,), - - # Valentines - # add valentines here - # - 12000 : ("phase_5.5/maps/VdayWall1.jpg", CTWhite, - (0,12000,12010,12020), 400,), - # - 12100 : ("phase_5.5/maps/VdayWall2.jpg", CTWhite, - (0,12000,12010,12020), 400,), - # - 12200 : ("phase_5.5/maps/VdayWall3.jpg", CTWhite, - (0,12000,12010,12020), 400,), - # - 12300 : ("phase_5.5/maps/VdayWall4.jpg", CTWhite, - (0,12000,12010,12020), 400,), - - # St. Patrick's day - # - 13000 : ("phase_5.5/maps/StPatWallpaper1.jpg", CTWhite, (0,13000), 400), - # - 13100 : ("phase_5.5/maps/StPatWallpaper2.jpg", CTWhite, (0,13000), 400), - # - 13200 : ("phase_5.5/maps/StPatWallpaper3.jpg", CTWhite, (0,13000), 400), - # - 13300 : ("phase_5.5/maps/StPatWallpaper4.jpg", CTWhite, (0,13000), 400), - } - -WallpaperGroups = { - 1100 : (1100, 1110, 1120, 1130, 1140, 1150,), - 1200 : (1200, 1210, 1220, 1230, 1240, 1250, 1260,), - 1300 : (1300, 1310, 1320, 1330, 1340, 1350,), - 1400 : (1400, 1410, 1420, 1430, 1440, 1450,), - 1500 : (1500, 1510, 1520,), - 1600 : (1600, 1610, 1620, 1630, 1640, 1650, 1660,), - 1700 : (1700, 1710, 1720, 1730, 1740, 1750, 1760,), - 1800 : (1800, 1810, 1820, 1830, 1840, 1850, 1860,), - 1900 : (1900, 1910, 1920, 1930, 1940, 1950,), - 2000 : (2000, 2010, 2020,), - 2100 : (2100, 2110, 2120, 2130, 2140,), - 2200 : (2200, 2210,), - 2600 : (2600, 2610,), - 2700 : (2700, 2710,), - 2800 : (2800, 2810,), - 2900 : (2900, 2910,), - } - - -# Possible border types -BorderTypes = { - # Index of 0 means no border - 1000 : ("phase_5.5/maps/bd_grey_border1.jpg", CTFlatColorDark), - 1010 : ("phase_5.5/maps/diamonds_border2.jpg", CTWhite), - 1020 : ("phase_5.5/maps/diamonds_border2ch.jpg", CTWhite), - 1030 : ("phase_5.5/maps/diamonds_border3ch.jpg", CTWhite), - 1040 : ("phase_5.5/maps/diamonds_border4ch.jpg", CTWhite), - 1050 : ("phase_5.5/maps/flower_border2.jpg", CTWhite), - 1060 : ("phase_5.5/maps/flower_border5.jpg", CTWhite), - 1070 : ("phase_5.5/maps/flower_border6.jpg", CTWhite), - 1080 : ("phase_5.5/maps/football_border_neutral.jpg", CTFlatColorDark), - 1090 : ("phase_5.5/maps/vine_border1.jpg", CTFlatColorDark), - 1100 : ("phase_5.5/maps/doll_board.jpg", CTWhite), - 1110 : ("phase_5.5/maps/doll_board_neutral.jpg", CTFlatColorDark), - # Underwater - 1120 : ("phase_5.5/maps/UWwallPaperPlantBorder.jpg", CTWhite), - 1130 : ("phase_5.5/maps/UWwallPaperSea_horseBorder.jpg", CTWhite), - 1140 : ("phase_5.5/maps/UWwallPaperShellBorder1.jpg", CTWhite), - 1150 : ("phase_5.5/maps/UWwallPaperShellBorder2.jpg", CTWhite), - 1160 : ("phase_5.5/maps/UWwallPaperWaveBorder.jpg", CTWhite), - # Western - 1170 : ("phase_5.5/maps/WesternSkullBorder.jpg", CTWhite), - 1180 : ("phase_5.5/maps/WesternStarBorder.jpg", CTWhite), - - # Holiday themed borders - - # Halloween - 10010 : ("phase_5.5/maps/border_ScarryMoon1.jpg", CTWhite), - 10020 : ("phase_5.5/maps/border_candy1.jpg", CTWhite), - - # Christmas - 11000 : ("phase_5.5/maps/flakes_border.jpg", CTWhite), - 11010 : ("phase_5.5/maps/hollyleaf_border.jpg", CTWhite), - - # Valentines - 12000 : ("phase_5.5/maps/Vborder1a.jpg", CTWhite), - 12010 : ("phase_5.5/maps/Vborder1b.jpg", CTWhite), - 12020 : ("phase_5.5/maps/Vborder2b.jpg", CTWhite), - - # St Patrick's - 13000 : ("phase_5.5/maps/StPatBorder1.jpg", CTWhite), - } +All = ( + 1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070) +WallpaperTypes = {1000: ('phase_5.5/maps/flat_wallpaper1.jpg', CTFlatColor, (0, 1000), 180), 1100: ('phase_5.5/maps/big_stripes1.jpg', CTWhite, (0, 1010), 180), 1110: ('phase_5.5/maps/big_stripes2.jpg', CTWhite, (0, 1040), 180), 1120: ('phase_5.5/maps/big_stripes3.jpg', CTWhite, (0, 1030), 180), 1130: ('phase_5.5/maps/big_stripes4.jpg', CTWhite, (0, 1010), 180), 1140: ('phase_5.5/maps/big_stripes5.jpg', CTWhite, (0, 1020), 180), 1150: ('phase_5.5/maps/big_stripes6.jpg', CTWhite, (0, 1020), 180), 1200: ('phase_5.5/maps/stripeB1.jpg', CTWhite, (0, 1000), 180), 1210: ('phase_5.5/maps/stripeB2.jpg', CTWhite, (0, 1000), 180), 1220: ('phase_5.5/maps/stripeB3.jpg', CTWhite, (0, 1000), 180), 1230: ('phase_5.5/maps/stripeB4.jpg', CTWhite, (0, 1000), 180), 1240: ('phase_3.5/maps/stripeB5.jpg', CTWhite, (0, 1000), 180), 1250: ('phase_5.5/maps/stripeB6.jpg', CTWhite, (0, 1000), 180), 1260: ('phase_5.5/maps/stripeB7.jpg', CTWhite, (0, 1000), 180), 1300: ('phase_5.5/maps/squiggle1.jpg', CTWhite, (0,), 180), 1310: ('phase_5.5/maps/squiggle2.jpg', CTWhite, (0,), 180), 1320: ('phase_5.5/maps/squiggle3.jpg', CTWhite, (0,), 180), 1330: ('phase_5.5/maps/squiggle4.jpg', CTWhite, (0,), 180), 1340: ('phase_5.5/maps/squiggle5.jpg', CTWhite, (0,), 180), 1350: ('phase_5.5/maps/squiggle6.jpg', CTWhite, (0,), 180), 1400: ('phase_5.5/maps/stripes_cyan.jpg', CTWhite, (0, 1000), 180), 1410: ('phase_5.5/maps/stripes_green.jpg', CTWhite, (0, 1000), 180), 1420: ('phase_5.5/maps/stripes_magenta.jpg', CTWhite, (0, 1000), 180), 1430: ('phase_5.5/maps/two_stripes1.jpg', CTWhite, (0, 1000), 180), 1440: ('phase_5.5/maps/two_stripes2.jpg', CTWhite, (0, 1000), 180), 1450: ('phase_5.5/maps/two_stripes3.jpg', CTWhite, (0, 1000), 180), 1500: ('phase_5.5/maps/leaves1.jpg', CTWhite, (0,), 180), 1510: ('phase_5.5/maps/leaves2.jpg', CTWhite, (0,), 180), 1520: ('phase_5.5/maps/leaves3.jpg', CTWhite, (0,), 180), 1600: ('phase_5.5/maps/diamonds2_cherries.jpg', CTWhite, (0, 1000), 180), 1610: ('phase_5.5/maps/diamonds3_cherries.jpg', CTWhite, (0, 1000), 180), 1620: ('phase_5.5/maps/diamonds3_cherry.jpg', CTWhite, (0, 1000), 180), 1630: ('phase_5.5/maps/diamonds4_cherries.jpg', CTWhite, (0, 1000), 180), 1640: ('phase_5.5/maps/diamonds4_cherry.jpg', CTWhite, (0, 1000), 180), 1650: ('phase_5.5/maps/diamonds5_cherries.jpg', CTWhite, (0, 1000), 180), 1660: ('phase_5.5/maps/diamonds6_cherry.jpg', CTWhite, (0, 1000), 180), 1700: ('phase_5.5/maps/moon1.jpg', CTWhite, (0,), 180), 1710: ('phase_5.5/maps/moon2.jpg', CTWhite, (0,), 180), 1720: ('phase_5.5/maps/moon3.jpg', CTWhite, (0,), 180), 1730: ('phase_5.5/maps/moon4.jpg', CTWhite, (0,), 180), 1740: ('phase_5.5/maps/moon5.jpg', CTWhite, (0,), 180), 1750: ('phase_5.5/maps/moon6.jpg', CTWhite, (0,), 180), 1760: ('phase_5.5/maps/moon7.jpg', CTWhite, (0,), 180), 1800: ('phase_5.5/maps/stars1.jpg', CTWhite, (0,), 180), 1810: ('phase_5.5/maps/stars2.jpg', (CT_BLUE2, CT_PINK2, CT_RED), (0,), 180), 1820: ('phase_5.5/maps/stars3.jpg', (CT_BLUE2, CT_PINK2, CT_RED, CT_WHITE), (0,), 180), 1830: ('phase_5.5/maps/stars4.jpg', CTWhite, (0,), 180), 1840: ('phase_5.5/maps/stars5.jpg', CTWhite, (0,), 180), 1850: ('phase_5.5/maps/stars6.jpg', CTWhite, (0,), 180), 1860: ('phase_5.5/maps/stars7.jpg', (CT_BEIGE2, CT_WHITE), (0,), 180), 1900: ('phase_5.5/maps/wall_paper_flower1.jpg', CTWhite, (0, 1000), 180), 1910: ('phase_5.5/maps/wall_paper_flower2.jpg', CTWhite, (0, 1000), 180), 1920: ('phase_5.5/maps/wall_paper_flower3.jpg', CTWhite, (0, 1000), 180), 1930: ('phase_5.5/maps/wall_paper_flower4.jpg', CTWhite, (0, 1000), 180), 1940: ('phase_5.5/maps/wall_paper_flower5.jpg', CTWhite, (0, 1000), 180), 1950: ('phase_5.5/maps/wall_paper_flower6.jpg', CTWhite, (0, 1000), 180), 2000: ('phase_5.5/maps/flat_wallpaper1.jpg', (CT_BEIGE, CT_BEIGE2, CT_RED), (1050,), 180), 2010: ('phase_5.5/maps/flat_wallpaper1.jpg', (CT_BLUE2, CT_PINK2), (1060,), 180), 2020: ('phase_5.5/maps/flat_wallpaper1.jpg', (CT_BEIGE2, CT_BLUE2, CT_PINK2, CT_BEIGE, CT_RED), (1070,), 180), 2100: ('phase_5.5/maps/big_stripes1.jpg', CTWhite, (1050,), 180), 2110: ('phase_5.5/maps/big_stripes2.jpg', CTWhite, (1050,), 180), 2120: ('phase_5.5/maps/big_stripes3.jpg', CTWhite, (1060,), 180), 2130: ('phase_5.5/maps/big_stripes3.jpg', CTWhite, (1070,), 180), 2140: ('phase_5.5/maps/big_stripes6.jpg', CTWhite, (1070,), 180), 2200: ('phase_5.5/maps/wall_paper_car.jpg', CTWhite, (0, 1000), 180), 2210: ('phase_5.5/maps/wall_paper_car_neutral.jpg', CTFlatColor, (0, 1000), 180), 2300: ('phase_5.5/maps/wall_paper_football_neutral.jpg', CTFlatColor, (0, 1080), 180), 2400: ('phase_5.5/maps/wall_paper_clouds.jpg', CTWhite, (0, 1000), 180), 2500: ('phase_5.5/maps/wall_paper_vine_neutral.jpg', CTFlatColorAll, (0, 1090), 180), 2600: ('phase_5.5/maps/basket.jpg', CTWhite, (0, 1000), 180), 2610: ('phase_5.5/maps/basket_neutral.jpg', CTFlatColor, (0, 1000), 180), 2700: ('phase_5.5/maps/doll.jpg', CTWhite, (0, 1000, 1110), 180), 2710: ('phase_5.5/maps/doll_neutral.jpg', CTFlatColor, (0, 1100, 1110), 180), 2800: ('phase_5.5/maps/littleFlowers.jpg', CTWhite, (0, 1000), 180), 2810: ('phase_5.5/maps/littleFlowers_neutral.jpg', CTFlatColor, (0, 1000), 180), 2900: ('phase_5.5/maps/UWwallPaperAngelFish.jpg', CTWhite, (0, 1120, 1160), 180), 2910: ('phase_5.5/maps/UWwallPaperAngelFishColor.jpg', CTWhite, (0, 1120, 1160), 180), 2920: ('phase_5.5/maps/UWwallPaperBubbles.jpg', CTWhite, (0, 1120, 1160), 180), 2930: ('phase_5.5/maps/UWwallPaperBubbles2.jpg', CTWhite, (0, 1120, 1160), 180), 2940: ('phase_5.5/maps/UWwallPaperGreenFish.jpg', CTWhite, (0, 1120, 1160), 180), 2950: ('phase_5.5/maps/UWwallPaperRedFish.jpg', CTWhite, (0, 1120, 1160), 180), 2960: ('phase_5.5/maps/UWwallPaperSea_horse.jpg', CTWhite, (0, 1120, 1160), 180), 2970: ('phase_5.5/maps/UWwallPaperShells.jpg', CTWhite, (0, 1140, 1150), 180), 2980: ('phase_5.5/maps/UWwaterFloor1.jpg', (CT_WHITE, CT_PALE_GREEN, CT_LIGHT_BLUE), (0,), 180), 3000: ('phase_5.5/maps/UWwallPaperBubbles.jpg', CTWhite, (0, 1120, 1160), 180), 3100: ('phase_5.5/maps/UWwallPaperBubbles2.jpg', CTWhite, (0, 1120, 1160), 180), 3200: ('phase_5.5/maps/UWwallPaperGreenFish.jpg', CTWhite, (0, 1120, 1160), 180), 3300: ('phase_5.5/maps/UWwallPaperRedFish.jpg', CTWhite, (0, 1120, 1160), 180), 3400: ('phase_5.5/maps/UWwallPaperSea_horse.jpg', CTWhite, (0, 1120, 1160), 180), 3500: ('phase_5.5/maps/UWwallPaperShells.jpg', (CT_WHITE, CT_SEA_GREEN, CT_LIGHT_BLUE), (0, 1140, 1150), 180), 3600: ('phase_5.5/maps/UWwaterFloor1.jpg', (CT_WHITE, CT_PALE_GREEN, CT_LIGHT_BLUE), (0,), 180), 3700: ('phase_5.5/maps/WesternBootWallpaper1.jpg', CTWhite, (0, 1170, 1180), 180), 3800: ('phase_5.5/maps/WesternCactusWallpaper1.jpg', CTWhite, (0, 1170, 1180), 180), 3900: ('phase_5.5/maps/WesternHatWallpaper1.jpg', CTWhite, (0, 1170, 1180), 180), 10100: ('phase_5.5/maps/cats1.jpg', CTWhite, (0, 10010, 10020), 400), 10200: ('phase_5.5/maps/bats2.jpg', CTWhite, (0, 10010, 10020), 400), 11000: ('phase_5.5/maps/wall_paper_snowflakes.jpg', CTWhite, (0, 11000, 11010), 400), 11100: ('phase_5.5/maps/wall_paper_hollyleaf.jpg', CTWhite, (0, 11000, 11010), 400), 11200: ('phase_5.5/maps/wall_paper_snowman.jpg', CTWhite, (0, 11000, 11010), 400), 12000: ('phase_5.5/maps/VdayWall1.jpg', CTWhite, (0, 12000, 12010, 12020), 400), 12100: ('phase_5.5/maps/VdayWall2.jpg', CTWhite, (0, 12000, 12010, 12020), 400), 12200: ('phase_5.5/maps/VdayWall3.jpg', CTWhite, (0, 12000, 12010, 12020), 400), 12300: ('phase_5.5/maps/VdayWall4.jpg', CTWhite, (0, 12000, 12010, 12020), 400), 13000: ('phase_5.5/maps/StPatWallpaper1.jpg', CTWhite, (0, 13000), 400), 13100: ('phase_5.5/maps/StPatWallpaper2.jpg', CTWhite, (0, 13000), 400), 13200: ('phase_5.5/maps/StPatWallpaper3.jpg', CTWhite, (0, 13000), 400), 13300: ('phase_5.5/maps/StPatWallpaper4.jpg', CTWhite, (0, 13000), 400)} +WallpaperGroups = {1100: (1100, 1110, 1120, 1130, 1140, 1150), 1200: (1200, 1210, 1220, 1230, 1240, 1250, 1260), 1300: (1300, 1310, 1320, 1330, 1340, 1350), 1400: (1400, 1410, 1420, 1430, 1440, 1450), 1500: (1500, 1510, 1520), 1600: (1600, 1610, 1620, 1630, 1640, 1650, 1660), 1700: (1700, 1710, 1720, 1730, 1740, 1750, 1760), 1800: (1800, 1810, 1820, 1830, 1840, 1850, 1860), 1900: (1900, 1910, 1920, 1930, 1940, 1950), 2000: (2000, 2010, 2020), 2100: (2100, 2110, 2120, 2130, 2140), 2200: (2200, 2210), 2600: (2600, 2610), 2700: (2700, 2710), 2800: (2800, 2810), 2900: (2900, 2910)} +BorderTypes = {1000: ('phase_5.5/maps/bd_grey_border1.jpg', CTFlatColorDark), 1010: ('phase_5.5/maps/diamonds_border2.jpg', CTWhite), 1020: ('phase_5.5/maps/diamonds_border2ch.jpg', CTWhite), 1030: ('phase_5.5/maps/diamonds_border3ch.jpg', CTWhite), 1040: ('phase_5.5/maps/diamonds_border4ch.jpg', CTWhite), 1050: ('phase_5.5/maps/flower_border2.jpg', CTWhite), 1060: ('phase_5.5/maps/flower_border5.jpg', CTWhite), 1070: ('phase_5.5/maps/flower_border6.jpg', CTWhite), 1080: ('phase_5.5/maps/football_border_neutral.jpg', CTFlatColorDark), 1090: ('phase_5.5/maps/vine_border1.jpg', CTFlatColorDark), 1100: ('phase_5.5/maps/doll_board.jpg', CTWhite), 1110: ('phase_5.5/maps/doll_board_neutral.jpg', CTFlatColorDark), 1120: ('phase_5.5/maps/UWwallPaperPlantBorder.jpg', CTWhite), 1130: ('phase_5.5/maps/UWwallPaperSea_horseBorder.jpg', CTWhite), 1140: ('phase_5.5/maps/UWwallPaperShellBorder1.jpg', CTWhite), 1150: ('phase_5.5/maps/UWwallPaperShellBorder2.jpg', CTWhite), 1160: ('phase_5.5/maps/UWwallPaperWaveBorder.jpg', CTWhite), 1170: ('phase_5.5/maps/WesternSkullBorder.jpg', CTWhite), 1180: ('phase_5.5/maps/WesternStarBorder.jpg', CTWhite), 10010: ('phase_5.5/maps/border_ScarryMoon1.jpg', CTWhite), 10020: ('phase_5.5/maps/border_candy1.jpg', CTWhite), 11000: ('phase_5.5/maps/flakes_border.jpg', CTWhite), 11010: ('phase_5.5/maps/hollyleaf_border.jpg', CTWhite), 12000: ('phase_5.5/maps/Vborder1a.jpg', CTWhite), 12010: ('phase_5.5/maps/Vborder1b.jpg', CTWhite), 12020: ('phase_5.5/maps/Vborder2b.jpg', CTWhite), 13000: ('phase_5.5/maps/StPatBorder1.jpg', CTWhite)} class CatalogWallpaperItem(CatalogSurfaceItem): - """ - This represents a texture/color combination for walls and trim. - It includes wallpaper as well as moulding, wainscoting, and - flooring. - """ - - def makeNewItem(self, patternIndex, colorIndex = None, - # Default to no border - borderIndex = 0, borderColorIndex = 0): + + def makeNewItem(self, patternIndex, colorIndex=None, borderIndex=0, borderColorIndex=0): self.patternIndex = patternIndex self.colorIndex = colorIndex - # Index of 0 means no border self.borderIndex = borderIndex self.borderColorIndex = borderColorIndex CatalogSurfaceItem.makeNewItem(self) def needsCustomize(self): - # Returns true if the item still needs to be customized by the - # user (e.g. by choosing a color). - return (self.colorIndex == None) or (self.borderIndex == None) + return self.colorIndex == None or self.borderIndex == None + return def getTypeName(self): - # e.g. "wallpaper", "wainscoting", etc. return TTLocalizer.SurfaceNames[STWallpaper] def getName(self): name = TTLocalizer.WallpaperNames.get(self.patternIndex) if name == None: - century = self.patternIndex - (self.patternIndex % 100) + century = self.patternIndex - self.patternIndex % 100 name = TTLocalizer.WallpaperNames.get(century) if name: return name return self.getTypeName() + return def getSurfaceType(self): - # Returns a value reflecting the type of surface this - # pattern is intended to be applied to. return STWallpaper def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. frame = self.makeFrame() - - sample = loader.loadModel('phase_5.5/models/estate/wallpaper_sample') + sample = loader.loadModelCopy('phase_5.5/models/estate/wallpaper_sample') a = sample.find('**/a') b = sample.find('**/b') c = sample.find('**/c') - - # Wallpaper gets applied to the top 2/3, with the border - # on the bottom 1/3. a.setTexture(self.loadTexture(), 1) a.setColorScale(*self.getColor()) b.setTexture(self.loadTexture(), 1) b.setColorScale(*self.getColor()) c.setTexture(self.loadBorderTexture(), 1) c.setColorScale(*self.getBorderColor()) - sample.reparentTo(frame) -## assert (not self.hasPicture) - self.hasPicture=True - - return (frame, None) + return ( + frame, None) + return - def output(self, store = ~0): - return "CatalogWallpaperItem(%s, %s, %s, %s%s)" % ( - self.patternIndex, self.colorIndex, - self.borderIndex, self.borderColorIndex, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogWallpaperItem(%s, %s, %s, %s%s)' % (self.patternIndex, self.colorIndex, self.borderIndex, self.borderColorIndex, self.formatOptionalData(store)) def getFilename(self): return WallpaperTypes[self.patternIndex][WTTextureName] def compareTo(self, other): if self.patternIndex != other.patternIndex: - century = self.patternIndex - (self.patternIndex % 100) - otherCentury = other.patternIndex - (other.patternIndex % 100) + century = self.patternIndex - self.patternIndex % 100 + otherCentury = other.patternIndex - other.patternIndex % 100 return century - otherCentury return 0 def getHashContents(self): - century = self.patternIndex - (self.patternIndex % 100) + century = self.patternIndex - self.patternIndex % 100 return century def getBasePrice(self): @@ -372,7 +87,6 @@ def loadTexture(self): def getColor(self): if self.colorIndex == None: - # If no color index is set yet, use first color in color list colorIndex = 0 else: colorIndex = self.colorIndex @@ -380,13 +94,13 @@ def getColor(self): if colorIndex < len(colors): return colors[colorIndex] else: - print "Warning: colorIndex > len(colors). Returning white." + print('Warning: colorIndex > len(colors). Returning white.') return CT_WHITE + return def loadBorderTexture(self): from pandac.PandaModules import Texture - if ((self.borderIndex == None) or (self.borderIndex == 0)): - # Border hasn't been picked or no border specified + if self.borderIndex == None or self.borderIndex == 0: return self.loadTexture() borderInfo = BorderTypes[self.borderIndex] filename = borderInfo[BDTextureName] @@ -394,28 +108,27 @@ def loadBorderTexture(self): texture.setMinfilter(Texture.FTLinearMipmapLinear) texture.setMagfilter(Texture.FTLinear) return texture + return def getBorderColor(self): - if ((self.borderIndex == None) or (self.borderIndex == 0)): + if self.borderIndex == None or self.borderIndex == 0: return self.getColor() else: colors = BorderTypes[self.borderIndex][BDColor] - # Get specified color or return CT_WHITE as default if self.borderColorIndex < len(colors): return colors[self.borderColorIndex] else: return CT_WHITE + return def decodeDatagram(self, di, versionNumber, store): CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store) - # Set some default values self.colorIndex = None - if (store & CatalogItem.Customization): + if store & CatalogItem.Customization: self.borderIndex = 0 else: self.borderIndex = None self.borderColorIndex = 0 - # Update as needed if versionNumber < 3: self.patternIndex = di.getUint8() self.colorIndex = di.getUint8() @@ -428,44 +141,29 @@ def decodeDatagram(self, di, versionNumber, store): self.colorIndex = di.getUint8() self.borderIndex = di.getUint16() self.borderColorIndex = di.getUint8() - - # The following will generate an exception if - # self.patternIndex is invalid. The other fields can take - # care of themselves. wtype = WallpaperTypes[self.patternIndex] + return - def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) dg.addUint16(self.patternIndex) - if (store & CatalogItem.Customization): + if store & CatalogItem.Customization: dg.addUint8(self.colorIndex) dg.addUint16(self.borderIndex) dg.addUint8(self.borderColorIndex) + def getWallpapers(*typeList): - # This function returns a list of CatalogWallpaperItems - # The returned items will all need to be customized (i.e - # have a color chosen by the user. Until customization, - # use a default color index of 0 (if the pattern has a color - # list) or CT_WHITE if the pattern has no color list list = [] for type in typeList: list.append(CatalogWallpaperItem(type)) + return list - + def getAllWallpapers(*typeList): - # This function returns a list of all possible - # CatalogWallpaperItems (that is, all color variants) for the - # indicated type index(es). - # If the specified type index is in the group dictionary - # get all corresponding patterns from the wallpaperTypes dictionary - # This returns an item that has already been customized list = [] for type in typeList: - # If its a group, return a list of all associated textures, - # otherwise, return a simple list of the type itself group = WallpaperGroups.get(type, [type]) for index in group: borderKeys = WallpaperTypes[index][WTBorderList] @@ -478,31 +176,24 @@ def getAllWallpapers(*typeList): for borderColorIndex in range(numBorderColors): colors = WallpaperTypes[index][WTColor] for n in range(len(colors)): - list.append(CatalogWallpaperItem( - index, n, borderKey, borderColorIndex)) + list.append(CatalogWallpaperItem(index, n, borderKey, borderColorIndex)) + return list - -def getWallpaperRange(fromIndex, toIndex, *otherRanges): - # This function returns a list of all possible - # CatalogWallpaperItems (that is, all color variants) for the - # indicated type index(es). - # Make sure we got an even number of otherRanges - assert(len(otherRanges)%2 == 0) +def getWallpaperRange(fromIndex, toIndex, *otherRanges): list = [] - - froms = [fromIndex,] - tos = [toIndex,] - + froms = [ + fromIndex] + tos = [toIndex] i = 0 while i < len(otherRanges): froms.append(otherRanges[i]) - tos.append(otherRanges[i+1]) + tos.append(otherRanges[(i + 1)]) i += 2 - + for patternIndex in WallpaperTypes.keys(): - for fromIndex, toIndex in zip(froms,tos): + for (fromIndex, toIndex) in zip(froms, tos): if patternIndex >= fromIndex and patternIndex <= toIndex: borderKeys = WallpaperTypes[patternIndex][WTBorderList] for borderKey in borderKeys: @@ -514,6 +205,6 @@ def getWallpaperRange(fromIndex, toIndex, *otherRanges): for borderColorIndex in range(numBorderColors): colors = WallpaperTypes[patternIndex][WTColor] for n in range(len(colors)): - list.append(CatalogWallpaperItem( - patternIndex, n, borderKey, borderColorIndex)) - return list + list.append(CatalogWallpaperItem(patternIndex, n, borderKey, borderColorIndex)) + + return list \ No newline at end of file diff --git a/toontown/src/catalog/CatalogWindowItem.py b/toontown/src/catalog/CatalogWindowItem.py index b31536a5..c204900b 100644 --- a/toontown/src/catalog/CatalogWindowItem.py +++ b/toontown/src/catalog/CatalogWindowItem.py @@ -1,55 +1,21 @@ from pandac.PandaModules import * -import CatalogAtticItem -import CatalogItem +from . import CatalogAtticItem, CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer - - WVTModelName = 0 WVTBasePrice = 1 WVTSkyName = 2 - -# These index numbers are written to the database. Don't mess with them. -# Also see TTLocalizer.WindowViewNames. - -# The third entry in the is the name of the backdrop node for a hack Drose -# and I put in to fix some draw order problems in the render2d drawing -# of the window views. If not None, we find the node and do some hacky -# rendering/draworder/binning tricks to get it to draw properly behind -# alpha'd items in front of it. - -WindowViewTypes = { - 10 : ("phase_5.5/models/estate/Garden1", 900, None), - 20 : ("phase_5.5/models/estate/GardenA", 900, None), # Initial View - 30 : ("phase_5.5/models/estate/GardenB", 900, None), - 40 : ("phase_5.5/models/estate/cityView", 900, None), # Catalog Series 1 - 50 : ("phase_5.5/models/estate/westernView", 900, None), # Catalog Series 2 - 60 : ("phase_5.5/models/estate/underwaterView", 900, None), # Catalog Series 2 - 70 : ("phase_5.5/models/estate/tropicView", 900, None), # Catalog Series 1 - 80 : ("phase_5.5/models/estate/spaceView", 900, None), # Catalog Series 2 - 90 : ("phase_5.5/models/estate/PoolView", 900, None), # Catalog Series 3 - 100 : ("phase_5.5/models/estate/SnowView", 900, None), # Catalog Series 3 - 110 : ("phase_5.5/models/estate/FarmView", 900, None), # Catalog Series 3 - 120 : ("phase_5.5/models/estate/IndianView", 900, None), # Catalog Series 4 - 130 : ("phase_5.5/models/estate/WesternMainStreetView", 900, None), # Catalog Series 4 - # Warning! 8-bit index number. 255 max value. - } +WindowViewTypes = {10: ('phase_5.5/models/estate/Garden1', 900, None), 20: ('phase_5.5/models/estate/GardenA', 900, None), 30: ('phase_5.5/models/estate/GardenB', 900, None), 40: ('phase_5.5/models/estate/cityView', 900, None), 50: ('phase_5.5/models/estate/westernView', 900, None), 60: ('phase_5.5/models/estate/underwaterView', 900, None), 70: ('phase_5.5/models/estate/tropicView', 900, None), 80: ('phase_5.5/models/estate/spaceView', 900, None), 90: ('phase_5.5/models/estate/PoolView', 900, None), 100: ('phase_5.5/models/estate/SnowView', 900, None), 110: ('phase_5.5/models/estate/FarmView', 900, None), 120: ('phase_5.5/models/estate/IndianView', 900, None), 130: ('phase_5.5/models/estate/WesternMainStreetView', 900, None)} class CatalogWindowItem(CatalogAtticItem.CatalogAtticItem): - """CatalogWindowItem + __module__ = __name__ - # This represents a view to hang outside a window in a house. - - """ - - def makeNewItem(self, windowType, placement = None): + def makeNewItem(self, windowType, placement=None): self.windowType = windowType self.placement = placement CatalogAtticItem.CatalogAtticItem.makeNewItem(self) def saveHistory(self): - # Returns true if items of this type should be saved in the - # back catalog, false otherwise. return 1 def getTypeName(self): @@ -59,34 +25,19 @@ def getName(self): return TTLocalizer.WindowViewNames.get(self.windowType) def recordPurchase(self, avatar, optional): - # Updates the appropriate field on the avatar to indicate the - # purchase (or delivery). This makes the item available to - # use by the avatar. This method is only called on the AI side. - self.giftTag = None - house, retcode = self.getHouseInfo(avatar) + (house, retcode) = self.getHouseInfo(avatar) if retcode >= 0: house.addWindow(self) return retcode def getDeliveryTime(self): - # Returns the elapsed time in minutes from purchase to - # delivery for this particular item. - return 4 * 60 # 4 hours. - + return 4 * 60 + def getPicture(self, avatar): - # Returns a (DirectWidget, Interval) pair to draw and animate a - # little representation of the item, or (None, None) if the - # item has no representation. This method is only called on - # the client. frame = self.makeFrame() model = self.loadModel() - - # This 3-d model will be drawn in the 2-d scene. model.setDepthTest(1) model.setDepthWrite(1) - - # Set up clipping planes to cut off the parts of the view that - # would extend beyond the frame. clipperLeft = PlaneNode('clipper') clipperRight = PlaneNode('clipper') clipperTop = PlaneNode('clipper') @@ -95,49 +46,39 @@ def getPicture(self, avatar): clipperRight.setPlane(Plane(Vec3(-1, 0, 0), Point3(1, 0, 0))) clipperTop.setPlane(Plane(Vec3(0, 0, -1), Point3(0, 0, 1))) clipperBottom.setPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, -1))) - model.setClipPlane(frame.attachNewNode(clipperLeft)) - model.setClipPlane(frame.attachNewNode(clipperRight)) - model.setClipPlane(frame.attachNewNode(clipperTop)) - model.setClipPlane(frame.attachNewNode(clipperBottom)) - - # Fix draw order of background + cpa = ClipPlaneAttrib.make(ClipPlaneAttrib.OAdd, clipperLeft, clipperRight, clipperTop, clipperBottom) + model.node().setAttrib(cpa) + frame.attachNewNode(clipperLeft) + frame.attachNewNode(clipperRight) + frame.attachNewNode(clipperTop) + frame.attachNewNode(clipperBottom) bgName = WindowViewTypes[self.windowType][WVTSkyName] if bgName: - bgNodePath = model.find("**/" + bgName) + bgNodePath = model.find('**/' + bgName) if not bgNodePath.isEmpty(): - # Put it at the front of the list to be drawn first bgNodePath.reparentTo(model, -1) - - # Get rid of the window frame that is in the model - windowFrame = model.find("**/frame") + windowFrame = model.find('**/frame') if not windowFrame.isEmpty(): windowFrame.removeNode() - - model.setPos(0,2,0) + model.setPos(0, 2, 0) model.setScale(0.4) model.reparentTo(frame) - - assert (not self.hasPicture) - self.hasPicture=True - return (frame, None) + return - def output(self, store = ~0): - return "CatalogWindowItem(%s%s)" % ( - self.windowType, - self.formatOptionalData(store)) + def output(self, store=-1): + return 'CatalogWindowItem(%s%s)' % (self.windowType, self.formatOptionalData(store)) def getFilename(self): type = WindowViewTypes[self.windowType] return type[WVTModelName] - def formatOptionalData(self, store = ~0): - # This is used within output() to format optional data - # (according to the bits indicated in store). + def formatOptionalData(self, store=-1): result = CatalogAtticItem.CatalogAtticItem.formatOptionalData(self, store) - if (store & CatalogItem.WindowPlacement) and self.placement != None: - result += ", placement = %s" % (self.placement) + if store & CatalogItem.WindowPlacement and self.placement != None: + result += ', placement = %s' % self.placement return result + return def compareTo(self, other): return self.windowType - other.windowType @@ -150,8 +91,7 @@ def getBasePrice(self): def loadModel(self): type = WindowViewTypes[self.windowType] - model = loader.loadModel(type[WVTModelName]) - + model = loader.loadModelCopy(type[WVTModelName]) return model def decodeDatagram(self, di, versionNumber, store): @@ -160,13 +100,11 @@ def decodeDatagram(self, di, versionNumber, store): if store & CatalogItem.WindowPlacement: self.placement = di.getUint8() self.windowType = di.getUint8() - - # The following will generate an exception if - # self.windowType is invalid. wvtype = WindowViewTypes[self.windowType] + return def encodeDatagram(self, dg, store): CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store) if store & CatalogItem.WindowPlacement: dg.addUint8(self.placement) - dg.addUint8(self.windowType) + dg.addUint8(self.windowType) \ No newline at end of file diff --git a/toontown/src/catalog/MailboxScreen.py b/toontown/src/catalog/MailboxScreen.py index e53819f6..f4effd9a 100644 --- a/toontown/src/catalog/MailboxScreen.py +++ b/toontown/src/catalog/MailboxScreen.py @@ -1,797 +1,216 @@ -from direct.directnotify.DirectNotifyGlobal import * from direct.gui.DirectGui import * -from direct.showbase import DirectObject, PythonUtil -from pandac.PandaModules import * -from toontown.parties import PartyGlobals -from toontown.parties.InviteInfo import InviteInfoBase -from toontown.parties.PartyGlobals import InviteStatus -from toontown.parties.SimpleMailBase import SimpleMailBase -from toontown.toonbase import TTLocalizer, ToontownGlobals +from direct.directnotify.DirectNotifyGlobal import * +from toontown.toonbase import ToontownGlobals +from direct.showbase import DirectObject +from . import CatalogItem +from toontown.toonbase import TTLocalizer from toontown.toontowngui import TTDialog -from toontown.toontowngui.TeaserPanel import TeaserPanel -from toontown.parties.InviteVisual import InviteVisual -from toontown.toon import GMUtils -import CatalogItem -from direct.showbase.PythonUtil import StackTrace +from direct.showbase import PythonUtil class MailboxScreen(DirectObject.DirectObject): - """ + __module__ = __name__ + notify = directNotify.newCategory('MailboxScreen') - This class allows the user to accept items one at a time out of - his or her mailbox. - - """ - notify = directNotify.newCategory("MailboxScreen") - - def __init__(self, mailbox, avatar, doneEvent = None): - assert( MailboxScreen.notify.debug("__init__") ) - # This is the DistributedMailbox that is handling our transactions. + def __init__(self, mailbox, avatar, doneEvent=None): self.mailbox = mailbox - # This is the avatar we're accepting for. self.avatar = avatar - self.items = self.getItems() - # Send this when we are done so whoever made us can get a callback + self.items = self.avatar.mailboxContents self.doneEvent = doneEvent - self.itemIndex = 0 self.itemPanel = None - self.itemPicture = None self.ival = None self.itemText = None - self.giftTag = None self.acceptingIndex = None self.numAtticAccepted = 0 - - self.dialogBox = None - + self.acceptErrorDialog = None self.load() self.hide() - + return + def show(self): - assert( MailboxScreen.notify.debug("show") ) self.frame.show() - self.__showCurrentItem() def hide(self): - assert( MailboxScreen.notify.debug("hide") ) - self.ignore("friendsListChanged") - if hasattr(self,'frame'): - self.frame.hide() - else: - self.notify.warning("hide called, but frame is deleted, self.frame deleted in:") - if hasattr(self, "frameDelStackTrace"): - print self.frameDelStackTrace - self.notify.warning("current stackTrace =") - print StackTrace() - self.notify.warning("crash averted, but root cause unknown") - # this will force a crash, hopefully we get the log with it - #self.frame.hide() + self.frame.hide() def load(self): - assert( MailboxScreen.notify.debug("load") ) - self.accept("setMailboxContents-%s" % (base.localAvatar.doId), self.__refreshItems) - self.accept("setAwardMailboxContents-%s" % (base.localAvatar.doId), self.__refreshItems) - # load the buttons model = loader.loadModel('phase_5.5/models/gui/package_delivery_panel') - background = model.find('**/bg') itemBoard = model.find('**/item_board') - - self.frame = DirectFrame(scale = 1.1, relief = DGG.FLAT, - frameSize = (-0.5,0.5,-0.45,-0.05), - frameColor = (0.737, 0.573, 0.345, 1.000)) - - self.background = DirectFrame(self.frame, - image = background, - image_scale = 0.05, - relief = None, - pos = (0,1,0), - ) - self.itemBoard = DirectFrame(parent = self.frame, - image = itemBoard, - image_scale = 0.05, - image_color = (.922, 0.922, 0.753, 1), - relief = None, - pos = (0,1,0), - ) - # shows how many items you have to browse through - self.itemCountLabel = DirectLabel( - parent = self.frame, - relief = None, - text = self.__getNumberOfItemsText(), - text_wordwrap = 16, - pos = (0.0, 0.0, 0.7), - scale = 0.09, - ) - + self.frame = DirectFrame(scale=1.1, relief=FLAT, frameSize=(-0.5, 0.5, -0.45, -0.05), frameColor=(0.737, 0.573, 0.345, 1.0)) + self.background = DirectFrame(self.frame, image=background, image_scale=0.05, relief=None, pos=(0, 1, 0)) + self.itemBoard = DirectFrame(parent=self.frame, image=itemBoard, image_scale=0.05, image_color=(0.922, 0.922, 0.753, 1), relief=None, pos=(0, 1, 0)) + self.itemCountLabel = DirectLabel(parent=self.frame, relief=None, text=self.__getNumberOfItemsText(), text_wordwrap=16, pos=(0.0, 0.0, 0.7), scale=0.09) exitUp = model.find('**/bu_return_rollover') exitDown = model.find('**/bu_return_rollover') exitRollover = model.find('**/bu_return_rollover') exitUp.setP(-90) exitDown.setP(-90) exitRollover.setP(-90) - # click this button to discard/decline an item in your mailbox - self.DiscardButton = DirectButton( - parent = self.frame, - relief = None, - image = (exitUp, exitDown, exitRollover, exitUp), - pos = (-0.01, 1.0, -0.36), - scale = 0.048, - text = ("", TTLocalizer.MailBoxDiscard, - TTLocalizer.MailBoxDiscard, ""), - text_scale = 1.0, - text_pos = (0, -0.08), - textMayChange = 1, - command = self.__makeDiscardInterface, - ) - - gui2 = loader.loadModel("phase_3/models/gui/quit_button") - # click this button to stop interacting with the mailbox - self.quitButton = DirectButton( - parent = self.frame, - relief = None, - image = (gui2.find("**/QuitBtn_UP"), - gui2.find("**/QuitBtn_DN"), - gui2.find("**/QuitBtn_RLVR"), - ), - pos = (0.5, 1.0, -0.42), - scale = 0.90, - text = TTLocalizer.MailboxExitButton, - text_font = ToontownGlobals.getSignFont(), - text0_fg = (0.152, 0.750, 0.258, 1), - text1_fg = (0.152, 0.750, 0.258, 1), - text2_fg = (0.977, 0.816, 0.133, 1), - text_scale = 0.045, - text_pos = (0, -0.01), - command = self.__handleExit, - ) - - self.gettingText = DirectLabel( - parent = self.frame, - relief = None, - text = '', - text_wordwrap = 10, - pos = (0.0, 0.0, 0.32), - scale = 0.09, - ) + self.exitButton = DirectButton(parent=self.frame, relief=None, image=(exitUp, exitDown, exitRollover, exitUp), pos=(-0.01, 1.0, -0.36), scale=0.048, text=('', TTLocalizer.MailboxExitButton, TTLocalizer.MailboxExitButton, ''), text_scale=1.0, text_pos=(0, -0.08), textMayChange=0, command=self.__handleExit) + self.gettingText = DirectLabel(parent=self.frame, relief=None, text='', text_wordwrap=10, pos=(0.0, 0.0, 0.32), scale=0.09) self.gettingText.hide() - - # label describing who the item is from - self.giftTagPanel = DirectLabel( - parent = self.frame, - relief = None, - text = 'Gift TAG!!', - text_wordwrap = 16, - pos = (0.0, 0.0, 0.01), - scale = 0.06, - ) - self.giftTagPanel.hide() - - # description of the item. For invites, this might be the body of the - # invite. - self.itemText = DirectLabel( - parent = self.frame, - relief = None, - text = '', - text_wordwrap = 16, - pos = (0.0, 0.0, -0.022), - scale = 0.07, - ) + self.itemText = DirectLabel(parent=self.frame, relief=None, text='', text_wordwrap=16, pos=(0.0, 0.0, -0.025), scale=0.09) self.itemText.hide() - acceptUp = model.find('**/bu_check_up') acceptDown = model.find('**/bu_check_down') acceptRollover = model.find('**/bu_check_rollover') acceptUp.setP(-90) acceptDown.setP(-90) acceptRollover.setP(-90) - # click this button to accept an item - self.acceptButton = DirectButton( - parent = self.frame, - relief = None, - image = (acceptUp, acceptDown, acceptRollover, acceptUp), - image3_color = (0.8, 0.8, 0.8, 0.6), - pos = (-0.01, 1.0, -0.16), - scale = 0.048, - text = ("", TTLocalizer.MailboxAcceptButton, - TTLocalizer.MailboxAcceptButton, ""), - text_scale = 1.0, - text_pos = (0, -0.09), - textMayChange = 1, - command = self.__handleAccept, - state = DGG.DISABLED, - ) - - nextUp = model.find("**/bu_next_up") + self.acceptButton = DirectButton(parent=self.frame, relief=None, image=(acceptUp, acceptDown, acceptRollover, acceptUp), image3_color=(0.8, 0.8, 0.8, 0.6), pos=(-0.01, 1.0, -0.16), scale=0.048, text=('', TTLocalizer.MailboxAcceptButton, TTLocalizer.MailboxAcceptButton, ''), text_scale=1.0, text_pos=(0, -0.09), textMayChange=0, command=self.__handleAccept, state=DISABLED) + nextUp = model.find('**/bu_next_up') nextUp.setP(-90) - nextDown = model.find("**/bu_next_down") + nextDown = model.find('**/bu_next_down') nextDown.setP(-90) - nextRollover = model.find("**/bu_next_rollover") + nextRollover = model.find('**/bu_next_rollover') nextRollover.setP(-90) - # click this button to go to the next item in my mailbox - self.nextButton = DirectButton( - parent = self.frame, - relief = None, - image = (nextUp, nextDown, nextRollover, nextUp), - image3_color = (0.8, 0.8, 0.8, 0.6), - pos = (0.31, 1.0, -0.26), - scale = 0.05, - text = ("", TTLocalizer.MailboxItemNext, - TTLocalizer.MailboxItemNext, ""), - text_scale = 1, - text_pos = (-0.2, 0.3), - text_fg = (1,1,1,1), - text_shadow = (0,0,0,1), - textMayChange = 0, - command = self.__nextItem, - state = DGG.DISABLED, - ) - - prevUp = model.find("**/bu_previous_up") + self.nextButton = DirectButton(parent=self.frame, relief=None, image=(nextUp, nextDown, nextRollover, nextUp), image3_color=(0.8, 0.8, 0.8, 0.6), pos=(0.31, 1.0, -0.26), scale=0.05, text=('', TTLocalizer.MailboxItemNext, TTLocalizer.MailboxItemNext, ''), text_scale=1, text_pos=(-0.2, 0.3), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), textMayChange=0, command=self.__nextItem, state=DISABLED) + prevUp = model.find('**/bu_previous_up') prevUp.setP(-90) - prevDown = model.find("**/bu_previous_down") + prevDown = model.find('**/bu_previous_down') prevDown.setP(-90) - prevRollover = model.find("**/bu_previous_rollover") + prevRollover = model.find('**/bu_previous_rollover') prevRollover.setP(-90) - # click this button to go to the previous item in my mailbox - self.prevButton = DirectButton( - parent = self.frame, - relief = None, - image = (prevUp, prevDown, prevRollover, prevUp), - pos = (-0.35, 1, -0.26), - scale = 0.05, - image3_color = (0.8, 0.8, 0.8, 0.6), - text = ("", TTLocalizer.MailboxItemPrev, - TTLocalizer.MailboxItemPrev, ""), - text_scale = 1, - text_pos = (0, 0.3), - text_fg = (1,1,1,1), - text_shadow = (0,0,0,1), - textMayChange = 0, - command = self.__prevItem, - state = DGG.DISABLED, - ) - self.currentItem=None - - self.partyInviteVisual = InviteVisual(self.frame) - self.partyInviteVisual.setScale(0.73) - self.partyInviteVisual.setPos(0.0, 0.0, 0.48) - self.partyInviteVisual.stash() - + self.prevButton = DirectButton(parent=self.frame, relief=None, image=(prevUp, prevDown, prevRollover, prevUp), pos=(-0.35, 1, -0.26), scale=0.05, image3_color=(0.8, 0.8, 0.8, 0.6), text=('', TTLocalizer.MailboxItemPrev, TTLocalizer.MailboxItemPrev, ''), text_scale=1, text_pos=(0, 0.3), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), textMayChange=0, command=self.__prevItem, state=DISABLED) + return + def unload(self): - assert( MailboxScreen.notify.debug("unload") ) self.__clearCurrentItem() - if hasattr(self,"frame"): - self.frame.destroy() - del self.frame - self.frameDelStackTrace = StackTrace() - else: - self.notify.warning("unload, no self.frame") - if hasattr(self, "mailbox"): - del self.mailbox - else: - self.notify.warning("unload, no self.mailbox") - - if self.dialogBox: - self.dialogBox.cleanup() - self.dialogBox = None - - # Clean up all the items also. + self.frame.destroy() + del self.frame + del self.mailbox + if self.acceptErrorDialog: + self.acceptErrorDialog.cleanup() + self.acceptErrorDialog = None for item in self.items: - if isinstance(item, CatalogItem.CatalogItem): - item.acceptItemCleanup() - + item.acceptItemCleanup() + self.ignoreAll() + return - # button handlers - - def justExit(self): - assert( MailboxScreen.notify.debug("justExit") ) - #self.__handleExit() - self.__acceptExit() - def __handleExit(self): - assert( MailboxScreen.notify.debug("__handleExit") ) if self.numAtticAccepted == 0: self.__acceptExit() elif self.numAtticAccepted == 1: - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.Acknowledge, - text = TTLocalizer.CatalogAcceptInAttic, - text_wordwrap = 15, - command = self.__acceptExit, - ) - self.dialogBox.show() + self.acceptErrorDialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=TTLocalizer.CatalogAcceptInAttic, text_wordwrap=15, command=self.__acceptExit) + self.acceptErrorDialog.show() else: - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.Acknowledge, - text = TTLocalizer.CatalogAcceptInAtticP, - text_wordwrap = 15, - command = self.__acceptExit, - ) - self.dialogBox.show() + self.acceptErrorDialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=TTLocalizer.CatalogAcceptInAtticP, text_wordwrap=15, command=self.__acceptExit) + self.acceptErrorDialog.show() + + def __acceptExit(self, buttonValue=None): + self.hide() + self.unload() + messenger.send(self.doneEvent) - def __acceptExit(self, buttonValue = None): - assert( MailboxScreen.notify.debug("__acceptExit") ) - if hasattr(self, 'frame'): - self.hide() - self.unload() - messenger.send(self.doneEvent) - def __handleAccept(self): - assert( MailboxScreen.notify.debug("__handleAccept") ) if self.acceptingIndex != None: - # Ignore an extraneous click. return + self.acceptingIndex = self.itemIndex + self.acceptButton['state'] = DISABLED + self.__showCurrentItem() item = self.items[self.itemIndex] - isAward = False - if isinstance(item, CatalogItem.CatalogItem): - isAward = item.isAward() - if not base.cr.isPaid() and not (isinstance(item, InviteInfoBase) or isAward): - # make sure free players can accept party invites or awards - TeaserPanel(pageName='clothing') - else: - self.acceptingIndex = self.itemIndex - self.acceptButton['state'] = DGG.DISABLED - - self.__showCurrentItem() - - item = self.items[self.itemIndex] - item.acceptItem(self.mailbox, self.acceptingIndex, - self.__acceptItemCallback) - - def __handleDiscard(self, buttonValue = None): - assert( MailboxScreen.notify.debug("__handleDiscard") ) - #print ("Discard Button Value:%s " % (buttonValue)) + item.acceptItem(self.mailbox, self.acceptingIndex, self.__acceptItemCallback) + return - if self.acceptingIndex != None: - # Ignore an extraneous click. - return - elif buttonValue == -1: - if self.dialogBox: - self.dialogBox.cleanup() - self.dialogBox = None - self.__showCurrentItem() - - else: - self.acceptingIndex = self.itemIndex - self.acceptButton['state'] = DGG.DISABLED - - self.__showCurrentItem() - - item = self.items[self.itemIndex] - item.discardItem(self.mailbox, self.acceptingIndex, - self.__discardItemCallback) - - def __discardItemCallback(self, retcode, item, index): - assert( MailboxScreen.notify.debug("__discardItemCallback") ) - if not hasattr(self, "frame"): - # The gui might have been closed down already by an - # impatient user. If so, we quietly ignore the callback. - return - if self.dialogBox: - self.dialogBox.cleanup() - self.dialogBox = None - self.acceptingIndex = None - self.__updateItems() - if isinstance(item, InviteInfoBase): - callback = self.__incIndexRemoveDialog - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.Acknowledge, - text = item.getDiscardItemErrorText(retcode), - text_wordwrap = 15, - command = callback, - ) - self.dialogBox.show() - #self.__acceptOk(index) - - def __makeDiscardInterface(self): - assert( MailboxScreen.notify.debug("__makeDiscardInterface") ) - if self.itemIndex >= 0 and self.itemIndex < len(self.items): #check to see if index is within range, should help with button mashing - item = self.items[self.itemIndex] - if isinstance(item, InviteInfoBase): - itemText = (TTLocalizer.MailBoxRejectVerify % (self.getItemName(item))) - yesText = TTLocalizer.MailboxReject - else: - itemText = (TTLocalizer.MailBoxDiscardVerify % (self.getItemName(item))) - yesText = TTLocalizer.MailboxDiscard - #self.notify.info("Could not take item %s: retcode %s" % (item, retcode)) - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.TwoChoiceCustom, #TwoChoice YesNo - text = itemText, #what happens when you try to take chat from the mailbox - text_wordwrap = 15, - command = self.__handleDiscard, - buttonText = [yesText, TTLocalizer.MailboxLeave], - ) - self.dialogBox.show() - def __acceptItemCallback(self, retcode, item, index): - assert( MailboxScreen.notify.debug("__acceptItemCallback") ) - needtoUpdate = 0 - - if self.acceptingIndex == None: - needtoUpdate = 1 - #if the setMailboxContents call won the race back here then - #we need to update our current item list - - if not hasattr(self, "frame"): - # The gui might have been closed down already by an - # impatient user. If so, we quietly ignore the callback. - return - - if retcode == ToontownGlobals.P_UserCancelled: - print("mailbox screen user canceled") - #user canceled probably for a chatitem - self.acceptingIndex = None - self.__updateItems() - #self.__acceptOk(index+1) + if not hasattr(self, 'frame'): return - if self.acceptingIndex != index: - self.notify.warning("Got unexpected callback for index %s, expected %s." % (index, self.acceptingIndex)) + self.notify.warning('Got unexpected callback for index %s, expected %s.' % index) return - self.acceptingIndex = None - if retcode < 0: - # There was some error with the accept. Pop up an - # appropriate dialog. - self.notify.info("Could not take item %s: retcode %s" % (item, retcode)) - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.TwoChoiceCustom, #TwoChoice YesNo - text = item.getAcceptItemErrorText(retcode), #what happens when you try to take chat from the mailbox - text_wordwrap = 15, - command = self.__handleDiscard, - buttonText = [ TTLocalizer.MailboxDiscard, TTLocalizer.MailboxLeave] - ) - """ - #buttonText = [TTLocalizer.MailboxOverflowButtonDicard, - #TTLocalizer.MailboxOverflowButtonLeave] - """ - #import pdb; pdb.set_trace() - - self.dialogBox.show() - + self.notify.info('Could not take item %s: retcode %s' % (item, retcode)) + self.acceptErrorDialog = TTDialog.TTDialog(style=TTDialog.CancelOnly, text=item.getAcceptItemErrorText(retcode), text_wordwrap=15, command=self.__acceptError) + self.acceptErrorDialog.show() + elif item.storedInAttic(): + self.numAtticAccepted += 1 + self.__acceptOk(index) else: - # The item was accepted successfully. - if hasattr(item,'storedInAttic') and item.storedInAttic(): - # It's an attic item; collect these messages to - # display just one dialog box at the end. - self.numAtticAccepted += 1 - self.itemIndex += 1 - #self.__acceptOk(index) - if needtoUpdate == 1: - self.__updateItems(); - - else: - # It's some other kind of item; display the accept - # dialog immediately. - #callback = PythonUtil.Functor(self.__acceptOk, index) - - # TODO force it to just discard the item when appropriate - # e.g. invites to cancelled parties - if isinstance(item, InviteInfoBase): - self.__updateItems(); - callback = self.__incIndexRemoveDialog - # tell player that the party's host got their response - self.dialogBox = TTDialog.TTDialog( - style = TTDialog.Acknowledge, - text = item.getAcceptItemErrorText(retcode), - text_wordwrap = 15, - command = callback, - ) - self.dialogBox.show() - - - def __acceptError(self, buttonValue = None): - assert( MailboxScreen.notify.debug("__acceptError") ) - self.dialogBox.cleanup() - self.dialogBox = None + callback = PythonUtil.Functor(self.__acceptOk, index) + self.acceptErrorDialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=item.getAcceptItemErrorText(retcode), text_wordwrap=15, command=callback) + self.acceptErrorDialog.show() + return + + def __acceptError(self, buttonValue=None): + self.acceptErrorDialog.cleanup() + self.acceptErrorDialog = None self.__showCurrentItem() - - def __incIndexRemoveDialog(self, junk = 0): - assert( MailboxScreen.notify.debug("__incIndexRemoveDialog") ) - self.__incIndex() - self.dialogBox.cleanup() - self.dialogBox = None - self.__showCurrentItem() - - def __incIndex(self, junk = 0): - assert( MailboxScreen.notify.debug("__incIndex") ) - self.itemIndex += 1 - - def __acceptOk(self, index, buttonValue = None): - assert( MailboxScreen.notify.debug("__acceptOk") ) - self.acceptingIndex = None - if self.dialogBox: - self.dialogBox.cleanup() - self.dialogBox = None + return - # We have a new set of items now. - self.items = self.getItems() + def __acceptOk(self, index, buttonValue=None): + if self.acceptErrorDialog: + self.acceptErrorDialog.cleanup() + self.acceptErrorDialog = None + self.items = self.avatar.mailboxContents if self.itemIndex > index or self.itemIndex >= len(self.items): - print("adjusting item index -1") self.itemIndex -= 1 - - if len(self.items) < 1: - #print("exiting due to lack of items") - # No more items in the mailbox. - self.__handleExit() - return - - # Show the next item in the mailbox. - self.itemCountLabel['text'] = self.__getNumberOfItemsText(), - self.__showCurrentItem() - - def __refreshItems(self): - assert( MailboxScreen.notify.debug("__refreshItems") ) - self.acceptingIndex = None - self.__updateItems() - - def __updateItems(self): - assert( MailboxScreen.notify.debug("__updateItems") ) - if self.dialogBox: - self.dialogBox.cleanup() - self.dialogBox = None - - # We have a new set of items now. - self.items = self.getItems() - if self.itemIndex >= len(self.items): - print("adjusting item index -1") - self.itemIndex = len(self.items) - 1 - if len(self.items) == 0: - print("exiting due to lack of items") - # No more items in the mailbox. self.__handleExit() return - - # Show the current item in the mailbox. - self.itemCountLabel['text'] = self.__getNumberOfItemsText(), + self.itemCountLabel['text'] = ( + self.__getNumberOfItemsText(),) self.__showCurrentItem() + return def __getNumberOfItemsText(self): - assert( MailboxScreen.notify.debug("__getNumberOfItemsText") ) - # Returns the string displayed across the top of the panel: - # how many items remain in the mailbox. if len(self.items) == 1: return TTLocalizer.MailboxOneItem else: - return TTLocalizer.MailboxNumberOfItems % (len(self.items)) + return TTLocalizer.MailboxNumberOfItems % len(self.items) def __clearCurrentItem(self): - assert( MailboxScreen.notify.debug("__clearCurrentItem") ) if self.itemPanel: self.itemPanel.destroy() self.itemPanel = None if self.ival: self.ival.finish() self.ival = None - if not self.gettingText.isEmpty(): - self.gettingText.hide() - if not self.itemText.isEmpty(): - self.itemText.hide() - if not self.giftTagPanel.isEmpty(): - self.giftTagPanel.hide() - if not self.acceptButton.isEmpty(): - self.acceptButton['state'] = DGG.DISABLED - if(self.currentItem): - if isinstance(self.currentItem, CatalogItem.CatalogItem): - self.currentItem.cleanupPicture() - self.currentItem = None - - def checkFamily(self, doId): - assert( MailboxScreen.notify.debug("checkFamily") ) - for familyMember in base.cr.avList: - #print ("Family %s %s" % (familyMember.name, familyMember.id)) - if familyMember.id == doId: - #print("found it") - #import pdb; pdb.set_trace() - return familyMember - return None - + self.gettingText.hide() + self.itemText.hide() + self.acceptButton['state'] = DISABLED + return + def __showCurrentItem(self): - assert( MailboxScreen.notify.debug("__showCurrentItem") ) self.__clearCurrentItem() - if len(self.items) < 1: - # No more items in the mailbox. - self.__handleExit() - return - self.partyInviteVisual.stash() - if (self.itemIndex + 1) > len(self.items): - self.itemIndex = len(self.items) - 1 - item = self.items[self.itemIndex] - if self.itemIndex == self.acceptingIndex: - # We are currently waiting on the AI to accept this item. - self.gettingText['text'] = TTLocalizer.MailboxGettingItem % (self.getItemName(item)) + self.gettingText['text'] = TTLocalizer.MailboxGettingItem % item.getName() self.gettingText.show() return - - # This item is available to be accepted. - self.itemText['text'] = self.getItemName(item) - assert(self.itemPanel == None and self.ival == None) - self.currentItem=item - # giftTag is the senders do Id - # giftCode is the type of tag to use (added after giftTag or I would have named them differently) - if isinstance(item, CatalogItem.CatalogItem): - self.acceptButton['text'] = ("", TTLocalizer.MailboxAcceptButton, - TTLocalizer.MailboxAcceptButton, "") - self.DiscardButton['text'] = ("", TTLocalizer.MailBoxDiscard, - TTLocalizer.MailBoxDiscard, "") - if item.isAward(): - self.giftTagPanel['text'] = TTLocalizer.SpecialEventMailboxStrings[item.specialEventId] - elif item.giftTag != None: - # if it's a gift add the tag - nameOfSender = self.getSenderName(item.giftTag) - - if item.giftCode == ToontownGlobals.GIFT_RAT: - self.giftTagPanel['text'] = TTLocalizer.CatalogAcceptRATBeans - else: - self.giftTagPanel['text'] = (TTLocalizer.MailboxGiftTag % (nameOfSender)) - - else: - self.giftTagPanel['text'] = "" - self.itemPanel, self.ival = item.getPicture(base.localAvatar) - elif isinstance(item, SimpleMailBase): - self.acceptButton['text'] = ("", TTLocalizer.MailboxAcceptButton, - TTLocalizer.MailboxAcceptButton, "") - self.DiscardButton['text'] = ("", TTLocalizer.MailBoxDiscard, - TTLocalizer.MailBoxDiscard, "") - senderId = item.senderId - nameOfSender = self.getSenderName(senderId) - self.giftTagPanel['text'] = (TTLocalizer.MailFromTag % (nameOfSender)) - self.itemText['text'] = item.body - elif isinstance(item, InviteInfoBase): - self.acceptButton['text'] = ("", TTLocalizer.MailboxAcceptInvite, - TTLocalizer.MailboxAcceptInvite, "") - self.DiscardButton['text'] = ("", TTLocalizer.MailBoxRejectInvite, - TTLocalizer.MailBoxRejectInvite, "") - partyInfo = None - for party in self.avatar.partiesInvitedTo: - if party.partyId == item.partyId: - partyInfo = party - break - else: # could not find party info - MailboxScreen.notify.error("Unable to find party with id %d to match invitation %s"%(item.partyId, item)) - if self.mailbox: - if item.status == PartyGlobals.InviteStatus.NotRead: - self.mailbox.sendInviteReadButNotReplied(item.inviteKey) - senderId = partyInfo.hostId - nameOfSender = self.getSenderName(senderId) - self.giftTagPanel['text'] = "" - self.itemText['text'] = "" - self.partyInviteVisual.updateInvitation(nameOfSender, partyInfo) - self.partyInviteVisual.unstash() - self.itemPanel = None - self.ival = None - else: - self.acceptButton['text'] = ("", TTLocalizer.MailboxAcceptButton, - TTLocalizer.MailboxAcceptButton, "") - self.DiscardButton['text'] = ("", TTLocalizer.MailBoxDiscard, - TTLocalizer.MailBoxDiscard, "") - self.giftTagPanel['text'] = " " - self.itemPanel = None - self.ival = None + self.itemText['text'] = item.getName() self.itemText.show() - self.giftTagPanel.show() - - if self.itemPanel and (item.getTypeName() != TTLocalizer.ChatTypeName): - # Ensure the item panel is behind any other text. - self.itemPanel.reparentTo(self.itemBoard, -1) - self.itemPanel.setPos(0, 0, 0.40) - self.itemPanel.setScale(0.21) - self.itemText['text_wordwrap'] = 16 - self.itemText.setPos(0.0, 0.0, 0.075) - elif isinstance(item, CatalogItem.CatalogItem) and \ - (item.getTypeName() == TTLocalizer.ChatTypeName): - # Ensure the item panel is behind any other text. + (self.itemPanel, self.ival) = item.getPicture(base.localAvatar) + if self.itemPanel: self.itemPanel.reparentTo(self.itemBoard, -1) self.itemPanel.setPos(0, 0, 0.35) - self.itemPanel.setScale(0.21) - # Scooch the item text into the chat bubble - self.itemText['text_wordwrap'] = 10 - self.itemText.setPos(0, 0, 0.30) + self.itemPanel.setScale(0.25) + self.itemText.setPos(0.0, 0.0, -0.025) else: - # There's no picture for this item. Scooch the item text - # up to fill up the space. self.itemText.setPos(0, 0, 0.3) - if self.ival: self.ival.loop() if self.acceptingIndex == None: - self.acceptButton['state'] = DGG.NORMAL - + self.acceptButton['state'] = NORMAL if self.itemIndex > 0: - self.prevButton['state'] = DGG.NORMAL + self.prevButton['state'] = NORMAL else: - self.prevButton['state'] = DGG.DISABLED - + self.prevButton['state'] = DISABLED if self.itemIndex + 1 < len(self.items): - self.nextButton['state'] = DGG.NORMAL + self.nextButton['state'] = NORMAL else: - self.nextButton['state'] = DGG.DISABLED + self.nextButton['state'] = DISABLED + return - def __nextItem(self): - assert( MailboxScreen.notify.debug("__nextItem") ) - messenger.send('wakeup') if self.itemIndex + 1 < len(self.items): self.itemIndex += 1 self.__showCurrentItem() - + def __prevItem(self): - assert( MailboxScreen.notify.debug("__prevItem") ) - messenger.send('wakeup') if self.itemIndex > 0: self.itemIndex -= 1 - self.__showCurrentItem() - - def getItemName(self, item): - """Return the name of the item.""" - assert( MailboxScreen.notify.debug("getItemName") ) - if isinstance(item, CatalogItem.CatalogItem): - return item.getName() - elif isinstance(item, str): - return TTLocalizer.MailSimpleMail - elif isinstance(item, InviteInfoBase): - return TTLocalizer.InviteInvitation - else: - return '' - - def getItems(self): - """Return the mailbox items which can be of multiple types.""" - assert( MailboxScreen.notify.debug("getItems") ) - result = [] - result = self.avatar.awardMailboxContents[:] - result += self.avatar.mailboxContents[:] - if self.avatar.mail: - result += self.avatar.mail - mailboxInvites = self.avatar.getInvitesToShowInMailbox() - if mailboxInvites: - result += mailboxInvites - return result - - - def getNumberOfAwardItems(self): - """Return the number of award items in self.items.""" - # since award items go first, the index being sent to ai needs to be adjusted - result = 0 - for item in self.items: - if isinstance(item, CatalogItem.CatalogItem) and item.specialEventId > 0: - result += 1 - else: - break - return result - - - def getSenderName(self,avId): - """Return the name of the toon that matches avId.""" - assert( MailboxScreen.notify.debug("getSenderName") ) - sender = base.cr.identifyFriend(avId) - nameOfSender = "" - if sender: - nameOfSender = sender.getName() - else: - sender = self.checkFamily(avId) # check family - if sender: - nameOfSender = sender.name # careful a family member returns a PotentialAvatar not a handle - elif hasattr(base.cr, "playerFriendsManager"): # check transient toons - sender = base.cr.playerFriendsManager.getAvHandleFromId(avId) - if sender: - nameOfSender = sender.getName() - - if GMUtils.testGMIdentity(nameOfSender): - nameOfSender = GMUtils.handleGMName(nameOfSender) - - if not sender: - nameOfSender = TTLocalizer.MailboxGiftTagAnonymous - if hasattr(base.cr, "playerFriendsManager"): # request the info - base.cr.playerFriendsManager.requestAvatarInfo(avId) - self.accept('friendsListChanged', self.__showCurrentItem) # accepts this as long as it stays up - return nameOfSender - - - + self.__showCurrentItem() \ No newline at end of file diff --git a/toontown/src/catalog/__init__.py b/toontown/src/catalog/__init__.py index e69de29b..fc80254b 100644 --- a/toontown/src/catalog/__init__.py +++ b/toontown/src/catalog/__init__.py @@ -0,0 +1 @@ +pass \ No newline at end of file diff --git a/toontown/src/char/Char.py b/toontown/src/char/Char.py index 8bd6e5c9..eb6fb6bd 100644 --- a/toontown/src/char/Char.py +++ b/toontown/src/char/Char.py @@ -281,14 +281,14 @@ def generateChar(self): # Clear the net transforms first, in case we have # merge-lod-bundles on (which would mean this is really # just one bundle). - for bundle in self.getPartBundleDict().values(): + for bundle in list(self.getPartBundleDict().values()): bundle = bundle['modelRoot'].getBundle() earNull = bundle.findChild("sphere3") if not earNull: earNull = bundle.findChild("*sphere3") earNull.clearNetTransforms() - for bundle in self.getPartBundleDict().values(): + for bundle in list(self.getPartBundleDict().values()): charNodepath = bundle['modelRoot'].partBundleNP bundle = bundle['modelRoot'].getBundle() earNull = bundle.findChild("sphere3") diff --git a/toontown/src/char/DistributedChar.py b/toontown/src/char/DistributedChar.py index d11f767c..5acbf8ab 100644 --- a/toontown/src/char/DistributedChar.py +++ b/toontown/src/char/DistributedChar.py @@ -1,7 +1,7 @@ """DistributedChar module: contains the DistributedChar class""" from otp.avatar import DistributedAvatar -import Char +from . import Char class DistributedChar(DistributedAvatar.DistributedAvatar, Char.Char): """DistributedChar class:""" diff --git a/toontown/src/char/LocalChar.py b/toontown/src/char/LocalChar.py index 3c9f98cb..e2beb008 100644 --- a/toontown/src/char/LocalChar.py +++ b/toontown/src/char/LocalChar.py @@ -1,9 +1,9 @@ """LocalChar module: contains the LocalChar class""" -import DistributedChar +from . import DistributedChar from otp.avatar import LocalAvatar from otp.chat import ChatManager -import Char +from . import Char class LocalChar(DistributedChar.DistributedChar, LocalAvatar.LocalAvatar): """LocalChar class:""" diff --git a/toontown/src/chat/ResistanceChat.py b/toontown/src/chat/ResistanceChat.py index a37b85ae..9b89a962 100644 --- a/toontown/src/chat/ResistanceChat.py +++ b/toontown/src/chat/ResistanceChat.py @@ -79,9 +79,9 @@ def validateId(textId): # Returns true if the id is valid, false otherwise. if textId < 0: return 0 - + menuIndex, itemIndex = decodeId(textId) - if not resistanceDict.has_key(menuIndex): + if menuIndex not in resistanceDict: return 0 if itemIndex >= len(resistanceDict[menuIndex]['values']): @@ -101,11 +101,11 @@ def getItemText(textId): value = resistanceDict[menuIndex]['values'][itemIndex] text = resistanceDict[menuIndex]['itemText'] if menuIndex is RESISTANCE_TOONUP: - if value is -1: + if value == -1: value = TTL.ResistanceToonupItemMax elif menuIndex is RESISTANCE_RESTOCK: value = resistanceDict[menuIndex]['extra'][itemIndex] - + return text % str(value) def getChatText(textId): @@ -131,7 +131,7 @@ def doEffect(textId, speakingToon, nearbyToons): # Plays the particle effect of the resistance chat out of # speakingToon, and briefly colors all involved toons, so they can # tell what's up. - + menuIndex, itemIndex = decodeId(textId) itemValue = getItemValue(textId) @@ -152,7 +152,7 @@ def doEffect(textId, speakingToon, nearbyToons): 'particles-4' : (0, 0, 1, 1), 'particles-5' : (1, 0, 1, 1), } - for name, color in colors.items(): + for name, color in list(colors.items()): node = bean.copyTo(NodePath()) node.setColorScale(*color) @@ -175,7 +175,7 @@ def doEffect(textId, speakingToon, nearbyToons): icons.append(invModel.find('**/%s' % (iconName))) else: # Choose a random six items, one from each of six tracks. - tracks = range(7) + tracks = list(range(7)) random.shuffle(tracks) for i in range(6): track = tracks[i] @@ -192,7 +192,7 @@ def doEffect(textId, speakingToon, nearbyToons): 'particles-5' : icons[4], 'particles-6' : icons[5], } - for name, icon in iconDict.items(): + for name, icon in list(iconDict.items()): p = effect.getParticlesNamed(name) p.renderer.setFromNode(icon) @@ -216,4 +216,4 @@ def doEffect(textId, speakingToon, nearbyToons): Sequence(Wait(0.2), recolorToons), autoFinish = 1) i.start() - + diff --git a/toontown/src/chat/TTChatInputNormal.py b/toontown/src/chat/TTChatInputNormal.py index 2735056c..3997dd14 100644 --- a/toontown/src/chat/TTChatInputNormal.py +++ b/toontown/src/chat/TTChatInputNormal.py @@ -107,7 +107,7 @@ def delete(self): def importExecNamespace(self): ChatInputNormal.ChatInputNormal.importExecNamespace(self) - exec 'from toontown.toonbase.ToonBaseGlobal import *' in globals(), self.ExecNamespace + exec('from toontown.toonbase.ToonBaseGlobal import *', globals(), self.ExecNamespace) def typeCallback(self, extraArgs): #if hasattr(base, "whiteList"): diff --git a/toontown/src/chat/TTChatInputWhiteList.py b/toontown/src/chat/TTChatInputWhiteList.py index 386c4dd7..40da82ac 100644 --- a/toontown/src/chat/TTChatInputWhiteList.py +++ b/toontown/src/chat/TTChatInputWhiteList.py @@ -225,7 +225,7 @@ def sendWhisperByFriend(self, avatarId, text): friend avatarId and then send it. """ online = 0 - if base.cr.doId2do.has_key(avatarId): + if avatarId in base.cr.doId2do: # The avatar is online, and in fact, nearby. online = 1 diff --git a/toontown/src/chat/TTSCWhiteListTerminal.py b/toontown/src/chat/TTSCWhiteListTerminal.py index 3b110aa6..465fffbb 100644 --- a/toontown/src/chat/TTSCWhiteListTerminal.py +++ b/toontown/src/chat/TTSCWhiteListTerminal.py @@ -23,7 +23,7 @@ def __init__(self, textId, parentMenu = None): self.textId = textId self.text = SpeedChatStaticText[self.textId] - print ("SpeedText %s %s" % (self.textId, self.text)) + print(("SpeedText %s %s" % (self.textId, self.text))) def handleSelect(self): SCTerminal.handleSelect(self) diff --git a/toontown/src/chat/TTWhiteList.py b/toontown/src/chat/TTWhiteList.py index 049b6b31..7d0931e4 100644 --- a/toontown/src/chat/TTWhiteList.py +++ b/toontown/src/chat/TTWhiteList.py @@ -21,7 +21,7 @@ def __init__(self): searchPath.appendDirectory(Filename.fromOsSpecific(os.path.expandvars('toontown/chat'))) found = vfs.resolveFilename(filename,searchPath) if not found: - print "Couldn't find whitelist data file!" + print("Couldn't find whitelist data file!") data = vfs.readFile(filename, 1) diff --git a/toontown/src/chat/ToonChatGarbler.py b/toontown/src/chat/ToonChatGarbler.py index 9791da6a..6dff2e50 100644 --- a/toontown/src/chat/ToonChatGarbler.py +++ b/toontown/src/chat/ToonChatGarbler.py @@ -35,7 +35,7 @@ def garble(self, toon, message): animalType = toon.getStyle().getType() - if (ToonChatGarbler.animalSounds.has_key(animalType)): + if (animalType in ToonChatGarbler.animalSounds): wordlist = ToonChatGarbler.animalSounds[animalType] else: wordlist = ToonChatGarbler.animalSounds["default"] @@ -61,7 +61,7 @@ def garbleSingle(self, toon, message): animalType = toon.getStyle().getType() - if (ToonChatGarbler.animalSounds.has_key(animalType)): + if (animalType in ToonChatGarbler.animalSounds): wordlist = ToonChatGarbler.animalSounds[animalType] else: wordlist = ToonChatGarbler.animalSounds["default"] diff --git a/toontown/src/chat/ToontownChatManager.py b/toontown/src/chat/ToontownChatManager.py index 2f47264e..94baa9e0 100644 --- a/toontown/src/chat/ToontownChatManager.py +++ b/toontown/src/chat/ToontownChatManager.py @@ -12,9 +12,9 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from otp.chat import ChatManager -from TTChatInputSpeedChat import TTChatInputSpeedChat -from TTChatInputNormal import TTChatInputNormal -from TTChatInputWhiteList import TTChatInputWhiteList +from .TTChatInputSpeedChat import TTChatInputSpeedChat +from .TTChatInputNormal import TTChatInputNormal +from .TTChatInputWhiteList import TTChatInputWhiteList #from toontown.launcher import QuickLauncher # hack class to simulate radio buttons (prevent radio button from clearing @@ -941,7 +941,7 @@ def __normalButtonPressed(self): else: self.fsm.request("normalChat") else: - print ("ChatManager: productName: %s not recognized" % (base.cr.productName)) + print(("ChatManager: productName: %s not recognized" % (base.cr.productName))) def __scButtonPressed(self): assert self.debugFunction() diff --git a/toontown/src/classicchars/CCharPaths.py b/toontown/src/classicchars/CCharPaths.py index 145a67fc..ab61dd40 100644 --- a/toontown/src/classicchars/CCharPaths.py +++ b/toontown/src/classicchars/CCharPaths.py @@ -1,4 +1,4 @@ -from pandac.PandaModules import Point3 +from pandac.PandaModules import Point3 from pandac.PandaModules import Vec3 import copy from toontown.toonbase import TTLocalizer @@ -52,14 +52,14 @@ ('a','e',1,[]), ('b','e',1,[]), ('e','f',1,[Point3(-76.87, -7.85, -1.85), - Point3(-80.57, -4.0, -1.85), + Point3(-80.57, -4.0, -1.85), ]), ('f','g',1,[Point3(-106.62, 28.65, -1.5),]), ('g','h',1,[Point3(-128.38, 60.27, 0.5),]), #('g','h',1,[Point3(-134.96, 60.34, 0.5),]), - ('h','f',1,[]), + ('h','f',1,[]), ('h','i',1,[Point3(-137.13, -42.79, 0.5),]), - ('i','f',1,[]), + ('i','f',1,[]), ) __minniePaths = { @@ -166,7 +166,7 @@ ('h','j',1,[]), ('s','b',1,[]), ('t','u',1,[]), # curb down - ('x','y',1,[]), # curb up + ('x','y',1,[]), # curb up ) __goofyPaths = { @@ -248,37 +248,37 @@ # ... # ) # ) - 'a' : (Point3(-9.0,-19.517,-0.323), # near store rear entrance + 'a' : (Point3(-9.0,-19.517,-0.323), # near store rear entrance ('b','k') ), 'b' : (Point3(-30.047,-1.578,-0.373), # by giant wrenches ('a','c') ), - 'c' : (Point3(-10.367,49.042,-0.373), # in front of TTC entrance + 'c' : (Point3(-10.367,49.042,-0.373), # in front of TTC entrance ('b','d') ), - 'd' : (Point3(38.439,44.348,-0.373), # near car showoff platform + 'd' : (Point3(38.439,44.348,-0.373), # near car showoff platform ('c','e') ), - 'e' : (Point3(25.527,-2.395,-0.373), # near giant tires + 'e' : (Point3(25.527,-2.395,-0.373), # near giant tires ('d','f') ), 'f' : (Point3(-4.043,-59.865,-0.003), # in tunnel to track area ('e','g') ), - 'g' : (Point3(0.390,-99.475,-0.009), # in front of leaderboard + 'g' : (Point3(0.390,-99.475,-0.009), # in front of leaderboard ('f','h') ), - 'h' : (Point3(21.147,-109.127,-0.013), # near city race track + 'h' : (Point3(21.147,-109.127,-0.013), # near city race track ('g','i') ), - 'i' : (Point3(5.981,-147.606,-0.013), # near stadium race track + 'i' : (Point3(5.981,-147.606,-0.013), # near stadium race track ('h','j') ), - 'j' : (Point3(-24.898,-120.618,-0.013), # near rural race track + 'j' : (Point3(-24.898,-120.618,-0.013), # near rural race track ('i','k') ), - 'k' : (Point3(-2.710,-90.315,-0.011), # near tunnel to kart shop + 'k' : (Point3(-2.710,-90.315,-0.011), # near tunnel to kart shop ('j','a') ), } @@ -306,10 +306,10 @@ ('a','h') ), 'c' : (Point3(68.417,-91.929,0.025), # by trolley - ('m','g') + ('d','g') ), 'd' : (Point3(68.745,91.227,0.025), # across bed from trolley - ('k','i') + ('c','i') ), 'e' : (Point3(4.047,94.260,0.025), # front of cog hq. entrance ('i','j') @@ -329,24 +329,12 @@ 'j' : (Point3(-48.960,88.565,0.025), # near cog hq. entrance ('e','f') ), - 'k' : (Point3(75.118, 52.840, -16.620), # north of party gate - ('d','l') - ), - 'l' : (Point3(44.677, 27.091, -15.385 ), # west of party gate - ('k','m') - ), - 'm' : (Point3(77.009, -16.022, -14.975 ), # south of party gate - ('l','c') - ), } __donaldWaypoints = ( # from, to, waypoints - ('d','k',1,[]), - ('k','l',1,[]), - ('l','m',1,[]), - ('m', 'c', 1, []), - ('b','a',1,[Point3(-55.883,-89.0,0.025),]), + ('d','c',1,[]), + ('b','a',1,[Point3(-55.883,-89.0,0.025),]), ) __plutoPaths = { @@ -389,10 +377,10 @@ ('e','a',1,[Point3(-77.2,28.5,6.2), Point3(-76.4,12.0,3.0), Point3(-93.2,-21.2,3.0),]), - + ) - - + + __daisyPaths = { # for each node: # ( @@ -498,25 +486,25 @@ __chipWaypoints = ( ('a','b',1,[]), - ('a','k',1,[]), + ('a','k',1,[]), ('b','c',1,[]), ('b','j',1,[]), ('c','d',1,[]), ('d','e',1,[]), ('e','f',1,[]), - ('e','i',1,[]), + ('e','i',1,[]), ('f','g',1,[]), - ('f','j',1,[]), + ('f','j',1,[]), ('g','h',1,[]), ('g','j',1,[]), ('h','i',1,[]), - ('j','k',1,[]), + ('j','k',1,[]), ) # when Dale is going over a bridge, have him orbit closer DaleOrbitDistanceOverride = { ('b','c') : 2.5, - ('e','f') : 2.5, + ('e','f') : 2.5, } startNode = 'a' @@ -548,7 +536,7 @@ def getPaths(charName, location = 0): elif charName==TTLocalizer.Chip: return __chipPaths elif charName==TTLocalizer.Dale: - return __chipPaths + return __chipPaths elif charName==TTLocalizer.DonaldDock: return {'a':(Point3(0,0,0),'a')} else: @@ -572,16 +560,16 @@ def __getWaypointList(paths): elif paths==__chipPaths: return __chipWaypoints elif paths==__dalePaths: - return __chipWaypoints + return __chipWaypoints else: assert 0, "Unknown waypoint information" def getNodePos(node, paths): - assert paths.has_key(node) + assert node in paths return paths[node][0] def getAdjacentNodes(node, paths): - assert paths.has_key(node) + assert node in paths return paths[node][1] def getWayPoints(fromNode, toNode, paths, wpts = None): @@ -617,14 +605,14 @@ def getRaycastFlag(fromNode, toNode, paths): result = 1 break return result - + def getPointsFromTo(fromNode, toNode, paths): startPoint = Point3(getNodePos(fromNode,paths)) endPoint = Point3(getNodePos(toNode,paths)) return [startPoint] + getWayPoints(fromNode, toNode, paths) + [endPoint] def getWalkDuration(fromNode, toNode, velocity, paths): - + posPoints = getPointsFromTo(fromNode, toNode, paths) duration = 0 @@ -635,7 +623,7 @@ def getWalkDuration(fromNode, toNode, velocity, paths): # Calculate the amount of time it will take to walk distance = Vec3(endPoint - startPoint).length() duration += distance / velocity - + return duration @@ -650,7 +638,7 @@ def getWalkDistance(fromNode, toNode, velocity, paths): # Calculate the amount of time it will take to walk distance = Vec3(endPoint - startPoint).length() retval += distance - + return retval - + diff --git a/toontown/src/classicchars/CharStateDatas.py b/toontown/src/classicchars/CharStateDatas.py index 9ede4d07..9b61616c 100644 --- a/toontown/src/classicchars/CharStateDatas.py +++ b/toontown/src/classicchars/CharStateDatas.py @@ -9,7 +9,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.showbase.PythonUtil import * from direct.task import Task -import CCharPaths +from . import CCharPaths from toontown.toonbase import ToontownGlobals class CharNeutralState(StateData.StateData): diff --git a/toontown/src/classicchars/CharStateDatasAI.py b/toontown/src/classicchars/CharStateDatasAI.py index 7f12eacc..375b0bf9 100644 --- a/toontown/src/classicchars/CharStateDatasAI.py +++ b/toontown/src/classicchars/CharStateDatasAI.py @@ -10,8 +10,8 @@ from direct.task import Task from toontown.toonbase import ToontownGlobals -import CCharChatter -import CCharPaths +from . import CCharChatter +from . import CCharPaths class CharLonelyStateAI(StateData.StateData): """ diff --git a/toontown/src/classicchars/DistributedCCharBase.py b/toontown/src/classicchars/DistributedCCharBase.py index ba759bc6..d734d9b2 100644 --- a/toontown/src/classicchars/DistributedCCharBase.py +++ b/toontown/src/classicchars/DistributedCCharBase.py @@ -13,8 +13,8 @@ from toontown.toonbase import ToontownGlobals from toontown.toonbase.TTLocalizer import Donald, DonaldDock, WesternPluto, Pluto from toontown.effects import DustCloud -import CCharChatter -import CCharPaths +from . import CCharChatter +from . import CCharPaths import string import copy @@ -263,7 +263,7 @@ def makeTurnToHeadingTrack(self, heading): return turnTracks def setChat(self, category, msg, avId): - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: avatar = self.cr.doId2do[avId] chatter = CCharChatter.getChatter(self.getName(), self.getCCChatter()) if category >= len(chatter): diff --git a/toontown/src/classicchars/DistributedCCharBaseAI.py b/toontown/src/classicchars/DistributedCCharBaseAI.py index 0a546297..9dc99e2a 100644 --- a/toontown/src/classicchars/DistributedCCharBaseAI.py +++ b/toontown/src/classicchars/DistributedCCharBaseAI.py @@ -5,6 +5,7 @@ from otp.avatar import DistributedAvatarAI from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals +import functools class DistributedCCharBaseAI(DistributedAvatarAI.DistributedAvatarAI): """ @@ -123,7 +124,7 @@ def nAv_compare(a, b, nAvIDict = self.nearbyAvatarInfoDict): else: return 1 - self.nearbyAvatars.sort(nAv_compare) + self.nearbyAvatars.sort(key=functools.cmp_to_key(nAv_compare)) def getNearbyAvatars(self): return self.nearbyAvatars @@ -138,7 +139,7 @@ def __avatarSpoke(self, avId): //////////////////////////////////////////////////////////////////// """ now = globalClock.getRealTime() - if self.nearbyAvatarInfoDict.has_key(avId): + if avId in self.nearbyAvatarInfoDict: self.nearbyAvatarInfoDict[avId]['lastChatTime'] = now self.__interestingAvatarEventOccured() diff --git a/toontown/src/classicchars/DistributedChip.py b/toontown/src/classicchars/DistributedChip.py index 1ed77bfd..de902d64 100644 --- a/toontown/src/classicchars/DistributedChip.py +++ b/toontown/src/classicchars/DistributedChip.py @@ -1,11 +1,11 @@ """DistributedDaisy module: contains the DistributedDaisy class""" from direct.showbase.ShowBaseGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer diff --git a/toontown/src/classicchars/DistributedChipAI.py b/toontown/src/classicchars/DistributedChipAI.py index 99364dbd..2dbe8c6c 100644 --- a/toontown/src/classicchars/DistributedChipAI.py +++ b/toontown/src/classicchars/DistributedChipAI.py @@ -1,7 +1,7 @@ """DistributedDaisyAI module: contains the DistributedDaisyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedChipAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -90,7 +90,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if doneStatus['state'] == 'lonely' and \ doneStatus['status'] == 'done': self.fsm.request('Walk') diff --git a/toontown/src/classicchars/DistributedDaisy.py b/toontown/src/classicchars/DistributedDaisy.py index 02a893cd..24eab23f 100644 --- a/toontown/src/classicchars/DistributedDaisy.py +++ b/toontown/src/classicchars/DistributedDaisy.py @@ -1,11 +1,11 @@ """DistributedDaisy module: contains the DistributedDaisy class""" from direct.showbase.ShowBaseGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.hood import TTHood diff --git a/toontown/src/classicchars/DistributedDaisyAI.py b/toontown/src/classicchars/DistributedDaisyAI.py index 6c3433c0..20cc4a13 100644 --- a/toontown/src/classicchars/DistributedDaisyAI.py +++ b/toontown/src/classicchars/DistributedDaisyAI.py @@ -1,7 +1,7 @@ """DistributedDaisyAI module: contains the DistributedDaisyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedDaisyAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -96,7 +96,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedDale.py b/toontown/src/classicchars/DistributedDale.py index 6e501593..ecca86f0 100644 --- a/toontown/src/classicchars/DistributedDale.py +++ b/toontown/src/classicchars/DistributedDale.py @@ -1,11 +1,11 @@ """DistributedDaisy module: contains the DistributedDaisy class""" from direct.showbase.ShowBaseGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer diff --git a/toontown/src/classicchars/DistributedDaleAI.py b/toontown/src/classicchars/DistributedDaleAI.py index 0fc4da02..45ff161e 100644 --- a/toontown/src/classicchars/DistributedDaleAI.py +++ b/toontown/src/classicchars/DistributedDaleAI.py @@ -1,7 +1,7 @@ """DistributedDaisyAI module: contains the DistributedDaisyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedDaleAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -103,7 +103,7 @@ def __decideNextState(self, doneStatus): be transitioned into """ assert self.notify.debugStateCall(self) - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if doneStatus['state'] == 'lonely' and \ doneStatus['status'] == 'done': self.fsm.request('Walk') diff --git a/toontown/src/classicchars/DistributedDonald.py b/toontown/src/classicchars/DistributedDonald.py index effbb5ba..1a7cbd0c 100644 --- a/toontown/src/classicchars/DistributedDonald.py +++ b/toontown/src/classicchars/DistributedDonald.py @@ -2,12 +2,12 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import CharStateDatas -import CCharChatter +from . import CharStateDatas +from . import CCharChatter from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.hood import GSHood diff --git a/toontown/src/classicchars/DistributedDonaldAI.py b/toontown/src/classicchars/DistributedDonaldAI.py index 0851dfca..0bda0437 100644 --- a/toontown/src/classicchars/DistributedDonaldAI.py +++ b/toontown/src/classicchars/DistributedDonaldAI.py @@ -1,7 +1,7 @@ """DistributedDonaldAI module: contains the DistributedDonaldAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedDonaldAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -96,7 +96,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedDonaldDock.py b/toontown/src/classicchars/DistributedDonaldDock.py index 063a40c7..712b1f21 100644 --- a/toontown/src/classicchars/DistributedDonaldDock.py +++ b/toontown/src/classicchars/DistributedDonaldDock.py @@ -3,12 +3,12 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import ToontownGlobals -import CharStateDatas +from . import CharStateDatas from direct.fsm import StateData from direct.task import Task from toontown.toonbase import TTLocalizer diff --git a/toontown/src/classicchars/DistributedDonaldDockAI.py b/toontown/src/classicchars/DistributedDonaldDockAI.py index 33d3b2a2..3208f9a2 100644 --- a/toontown/src/classicchars/DistributedDonaldDockAI.py +++ b/toontown/src/classicchars/DistributedDonaldDockAI.py @@ -2,13 +2,13 @@ from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task import random -import CharStateDatasAI +from . import CharStateDatasAI from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -79,7 +79,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if doneStatus['state'] == 'lonely' and \ doneStatus['status'] == 'done': diff --git a/toontown/src/classicchars/DistributedGoofy.py b/toontown/src/classicchars/DistributedGoofy.py index 7dd48374..f68476d9 100644 --- a/toontown/src/classicchars/DistributedGoofy.py +++ b/toontown/src/classicchars/DistributedGoofy.py @@ -1,11 +1,11 @@ """DistributedGoofy module: contains the DistributedGoofy class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer diff --git a/toontown/src/classicchars/DistributedGoofyAI.py b/toontown/src/classicchars/DistributedGoofyAI.py index 0f4eec6d..375e4ecc 100644 --- a/toontown/src/classicchars/DistributedGoofyAI.py +++ b/toontown/src/classicchars/DistributedGoofyAI.py @@ -1,7 +1,7 @@ """DistributedGoofyAI module: contains the DistributedGoofyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedGoofyAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -87,7 +87,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if doneStatus['state'] == 'lonely' and \ doneStatus['status'] == 'done': self.fsm.request('Walk') diff --git a/toontown/src/classicchars/DistributedGoofySpeedway.py b/toontown/src/classicchars/DistributedGoofySpeedway.py index a045aae1..86f45598 100644 --- a/toontown/src/classicchars/DistributedGoofySpeedway.py +++ b/toontown/src/classicchars/DistributedGoofySpeedway.py @@ -1,11 +1,11 @@ """DistributedGoofy module: contains the DistributedGoofy class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.hood import DLHood diff --git a/toontown/src/classicchars/DistributedGoofySpeedwayAI.py b/toontown/src/classicchars/DistributedGoofySpeedwayAI.py index 0bec8e7a..a4cfc6a5 100644 --- a/toontown/src/classicchars/DistributedGoofySpeedwayAI.py +++ b/toontown/src/classicchars/DistributedGoofySpeedwayAI.py @@ -1,7 +1,7 @@ """DistributedGoofyAI module: contains the DistributedGoofyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedGoofySpeedwayAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -96,7 +96,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedMickey.py b/toontown/src/classicchars/DistributedMickey.py index dafdc6b1..1dd00c78 100644 --- a/toontown/src/classicchars/DistributedMickey.py +++ b/toontown/src/classicchars/DistributedMickey.py @@ -1,12 +1,12 @@ """DistributedMickey module: contains the DistributedMickey class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State #import MickeyChatter -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.hood import DGHood diff --git a/toontown/src/classicchars/DistributedMickeyAI.py b/toontown/src/classicchars/DistributedMickeyAI.py index 75190903..a0d2685a 100644 --- a/toontown/src/classicchars/DistributedMickeyAI.py +++ b/toontown/src/classicchars/DistributedMickeyAI.py @@ -1,14 +1,14 @@ """DistributedMickeyAI module: contains the DistributedMickeyAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task import random from toontown.toonbase import ToontownGlobals -import CharStateDatasAI +from . import CharStateDatasAI from toontown.toonbase import TTLocalizer class DistributedMickeyAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -99,7 +99,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedMinnie.py b/toontown/src/classicchars/DistributedMinnie.py index 1d081d06..dad3e1ec 100644 --- a/toontown/src/classicchars/DistributedMinnie.py +++ b/toontown/src/classicchars/DistributedMinnie.py @@ -1,11 +1,11 @@ """DistributedMinnie module: contains the DistributedMinnie class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.hood import BRHood diff --git a/toontown/src/classicchars/DistributedMinnieAI.py b/toontown/src/classicchars/DistributedMinnieAI.py index 28b4653d..71a7b4aa 100644 --- a/toontown/src/classicchars/DistributedMinnieAI.py +++ b/toontown/src/classicchars/DistributedMinnieAI.py @@ -1,7 +1,7 @@ """DistributedMinnieAI module: contains the DistributedMinnieAI class""" from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State @@ -9,7 +9,7 @@ import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import CharStateDatasAI +from . import CharStateDatasAI class DistributedMinnieAI(DistributedCCharBaseAI.DistributedCCharBaseAI): @@ -96,7 +96,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedPluto.py b/toontown/src/classicchars/DistributedPluto.py index 37ab9f1c..e531bf95 100644 --- a/toontown/src/classicchars/DistributedPluto.py +++ b/toontown/src/classicchars/DistributedPluto.py @@ -3,12 +3,12 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import ToontownGlobals -import CharStateDatas +from . import CharStateDatas from direct.fsm import StateData from direct.task import Task from toontown.toonbase import TTLocalizer diff --git a/toontown/src/classicchars/DistributedPlutoAI.py b/toontown/src/classicchars/DistributedPlutoAI.py index ef366b1c..a0718de2 100644 --- a/toontown/src/classicchars/DistributedPlutoAI.py +++ b/toontown/src/classicchars/DistributedPlutoAI.py @@ -2,13 +2,13 @@ from otp.ai.AIBaseGlobal import * -import DistributedCCharBaseAI +from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task import random -import CharStateDatasAI +from . import CharStateDatasAI from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -97,7 +97,7 @@ def __decideNextState(self, doneStatus): decides that it is finished and a new state should be transitioned into """ - assert(doneStatus.has_key('status')) + assert('status' in doneStatus) if(self.transitionToCostume == 1): curWalkNode = self.walk.getDestNode() diff --git a/toontown/src/classicchars/DistributedSuperGoofy.py b/toontown/src/classicchars/DistributedSuperGoofy.py index e50450c4..f3795450 100644 --- a/toontown/src/classicchars/DistributedSuperGoofy.py +++ b/toontown/src/classicchars/DistributedSuperGoofy.py @@ -1,15 +1,15 @@ """DistributedSuperGoofy module: contains the DistributedSuperGoofy class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.classicchars import DistributedGoofySpeedway -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import DistributedCCharBase +from . import DistributedCCharBase class DistributedSuperGoofy(DistributedGoofySpeedway.DistributedGoofySpeedway): """DistributedSuperGoofy class""" diff --git a/toontown/src/classicchars/DistributedSuperGoofyAI.py b/toontown/src/classicchars/DistributedSuperGoofyAI.py index d133354e..58587dd0 100644 --- a/toontown/src/classicchars/DistributedSuperGoofyAI.py +++ b/toontown/src/classicchars/DistributedSuperGoofyAI.py @@ -8,8 +8,8 @@ from direct.task import Task import random from toontown.toonbase import ToontownGlobals -import DistributedCCharBaseAI -import CharStateDatasAI +from . import DistributedCCharBaseAI +from . import CharStateDatasAI from toontown.toonbase import TTLocalizer class DistributedSuperGoofyAI(DistributedGoofySpeedwayAI.DistributedGoofySpeedwayAI): diff --git a/toontown/src/classicchars/DistributedVampireMickey.py b/toontown/src/classicchars/DistributedVampireMickey.py index 825e33a6..68e4b924 100644 --- a/toontown/src/classicchars/DistributedVampireMickey.py +++ b/toontown/src/classicchars/DistributedVampireMickey.py @@ -1,15 +1,15 @@ """DistributedVampireMickey module: contains the DistributedVampireMickey class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.classicchars import DistributedMickey -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import DistributedCCharBase +from . import DistributedCCharBase class DistributedVampireMickey(DistributedMickey.DistributedMickey): """DistributedVampireMickey class""" diff --git a/toontown/src/classicchars/DistributedVampireMickeyAI.py b/toontown/src/classicchars/DistributedVampireMickeyAI.py index 89588d8b..5dc89460 100644 --- a/toontown/src/classicchars/DistributedVampireMickeyAI.py +++ b/toontown/src/classicchars/DistributedVampireMickeyAI.py @@ -8,8 +8,8 @@ from direct.task import Task import random from toontown.toonbase import ToontownGlobals -import DistributedCCharBaseAI -import CharStateDatasAI +from . import DistributedCCharBaseAI +from . import CharStateDatasAI from toontown.toonbase import TTLocalizer class DistributedVampireMickeyAI(DistributedMickeyAI.DistributedMickeyAI): diff --git a/toontown/src/classicchars/DistributedWesternPluto.py b/toontown/src/classicchars/DistributedWesternPluto.py index 00f8df51..44536814 100644 --- a/toontown/src/classicchars/DistributedWesternPluto.py +++ b/toontown/src/classicchars/DistributedWesternPluto.py @@ -1,15 +1,15 @@ """DistributedWesternPluto module: contains the DistributedWesternPluto class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.classicchars import DistributedPluto -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import DistributedCCharBase +from . import DistributedCCharBase class DistributedWesternPluto(DistributedPluto.DistributedPluto): """DistributedPluto class""" diff --git a/toontown/src/classicchars/DistributedWesternPlutoAI.py b/toontown/src/classicchars/DistributedWesternPlutoAI.py index 7f2b995a..aa6b629c 100644 --- a/toontown/src/classicchars/DistributedWesternPlutoAI.py +++ b/toontown/src/classicchars/DistributedWesternPlutoAI.py @@ -8,8 +8,8 @@ from direct.task import Task import random from toontown.toonbase import ToontownGlobals -import DistributedCCharBaseAI -import CharStateDatasAI +from . import DistributedCCharBaseAI +from . import CharStateDatasAI from toontown.toonbase import TTLocalizer class DistributedWesternPlutoAI(DistributedPlutoAI.DistributedPlutoAI): diff --git a/toontown/src/classicchars/DistributedWitchMinnie.py b/toontown/src/classicchars/DistributedWitchMinnie.py index aa2be907..9ebb9d7b 100644 --- a/toontown/src/classicchars/DistributedWitchMinnie.py +++ b/toontown/src/classicchars/DistributedWitchMinnie.py @@ -1,15 +1,15 @@ """DistributedWitchMinnie module: contains the DistributedWitchMinnie class""" from pandac.PandaModules import * -import DistributedCCharBase +from . import DistributedCCharBase from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.classicchars import DistributedMinnie -import CharStateDatas +from . import CharStateDatas from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import DistributedCCharBase +from . import DistributedCCharBase class DistributedWitchMinnie(DistributedMinnie.DistributedMinnie): """DistributedWitchMinnie class""" diff --git a/toontown/src/classicchars/DistributedWitchMinnieAI.py b/toontown/src/classicchars/DistributedWitchMinnieAI.py index 4befe4ea..cab3252c 100644 --- a/toontown/src/classicchars/DistributedWitchMinnieAI.py +++ b/toontown/src/classicchars/DistributedWitchMinnieAI.py @@ -8,8 +8,8 @@ from direct.task import Task import random from toontown.toonbase import ToontownGlobals -import DistributedCCharBaseAI -import CharStateDatasAI +from . import DistributedCCharBaseAI +from . import CharStateDatasAI from toontown.toonbase import TTLocalizer class DistributedWitchMinnieAI(DistributedMinnieAI.DistributedMinnieAI): diff --git a/toontown/src/coderedemption/TTCodeDict.py b/toontown/src/coderedemption/TTCodeDict.py index d1e57936..cc8164bb 100644 --- a/toontown/src/coderedemption/TTCodeDict.py +++ b/toontown/src/coderedemption/TTCodeDict.py @@ -93,21 +93,21 @@ def _getPrimeModulus(cls, codeLength): # get the largest prime in this code value space to use as the code value modulus if codeLength in cls._PrimeModuli: return cls._PrimeModuli[codeLength] - print ('calculating prime modulus for code length %s...' % codeLength), + print(('calculating prime modulus for code length %s...' % codeLength), end=' ') i = cls.getNumValuesInCodeSpace(codeLength) while not cls._isPrime(i): i -= 1 if i < 0: raise 'could not find prime modulus for code length %s' % codeLength cls._PrimeModuli[codeLength] = i - print 'done.' + print('done.') return i @classmethod def _getPrime(cls, codeLength): if (codeLength in cls._Primes): return cls._Primes[codeLength] - print ('calculating prime multiplier for code length %s...' % codeLength), + print(('calculating prime multiplier for code length %s...' % codeLength), end=' ') numValues = cls.getNumValuesInCodeSpace(codeLength) if '_scatterPrime' not in cls.__dict__: # longer codes will require a larger (longer/more digits/more 7's!) prime here @@ -130,7 +130,7 @@ def _getPrime(cls, codeLength): raise 'could not find prime smaller than %s' % numValues cls._Primes[codeLength] = prime #print 'codeLength %s, prime=%s' % (codeLength, prime) - print 'done.' + print('done.') return prime @classmethod @@ -217,7 +217,7 @@ def _testCodeUniqueness(cls, codeLength=None, verbose=True): if not codeLength: codeLength = 4 while 1: - print 'testing code uniqueness for code length: %s' % codeLength + print('testing code uniqueness for code length: %s' % codeLength) codes = set() maxVal = cls._getPrimeModulus(codeLength) #print maxVal @@ -226,7 +226,7 @@ def _testCodeUniqueness(cls, codeLength=None, verbose=True): x = cls.getObfuscatedCodeValue(i, codeLength) code = cls.getCodeFromValue(x, codeLength) if verbose: - print '%s %s/%s -> %s' % (cls.getReadableCode(code), i, maxVal-1, x) + print('%s %s/%s -> %s' % (cls.getReadableCode(code), i, maxVal-1, x)) if code in codes: raise 'code %s already encountered!' % code codes.add(code) diff --git a/toontown/src/coderedemption/TTCodeRedemptionConsts.py b/toontown/src/coderedemption/TTCodeRedemptionConsts.py index 7bc12310..6e934f19 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionConsts.py +++ b/toontown/src/coderedemption/TTCodeRedemptionConsts.py @@ -1,8 +1,8 @@ +import enum + DefaultDbName = 'tt_code_redemption' -RedeemErrors = Enum( - 'Success, CodeDoesntExist, CodeIsExpired, CodeAlreadyRedeemed, AwardCouldntBeGiven, ' - 'TooManyAttempts, SystemUnavailable, ') +RedeemErrors = enum.IntEnum('RedeemErrors', ('Success', 'CodeDoesntExist', 'CodeIsExpired', 'CodeAlreadyRedeemed', 'AwardCouldntBeGiven', 'TooManyAttempts', 'SystemUnavailable')) # for ~code response RedeemErrorStrings = { diff --git a/toontown/src/coderedemption/TTCodeRedemptionDB.py b/toontown/src/coderedemption/TTCodeRedemptionDB.py index 468f60a4..a33c5f51 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionDB.py +++ b/toontown/src/coderedemption/TTCodeRedemptionDB.py @@ -5,7 +5,7 @@ import sys stdOut = sys.stdout sys.stdout = sys.stderr - print 'code redemption subprocess starting...' + print('code redemption subprocess starting...') import direct from pandac.PandaModules import * @@ -59,7 +59,7 @@ def _doExecute(self, cursorBase, *args, **kArgs): self.notify.debug('execute:\n%s' % u2ascii(args[0])) try: cursorBase.execute(self, *args, **kArgs) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if self._connection.getErrorCode(e) in TTDBCursorBase.ConnectionProblems: # force a reconnect TTCRDBConnection.db = None @@ -175,7 +175,7 @@ def enterConnecting(self): port=self._port, user=self._user, passwd=self._passwd) - except _mysql_exceptions.OperationalError,e: + except _mysql_exceptions.OperationalError as e: """ self.notify.warning("Failed to connect to MySQL at %s:%d. Retrying in %s seconds."%( self._host,self._port,self.RetryPeriod)) @@ -200,7 +200,7 @@ def _createTable(self, command): cursor = self.getCursor() try: cursor.execute(command) - except _mysql_exceptions.OperationalError, e: + except _mysql_exceptions.OperationalError as e: if self.getErrorCode(e) == MySQLErrors.TableAlreadyExists: # table already exists pass @@ -215,7 +215,7 @@ def enterInitializing(self): try: cursor.execute("CREATE DATABASE %s" % self._dbName) self.notify.info("database %s did not exist, created new one" % self._dbName) - except _mysql_exceptions.ProgrammingError, e: + except _mysql_exceptions.ProgrammingError as e: if self.getErrorCode(e) == MySQLErrors.DbAlreadyExists: # db already exists pass @@ -292,11 +292,11 @@ def enterLocking(self): if self.WantTableLocking: if len(self._tableLocks): cmd = 'LOCK TABLES ' - for table, lock in self._tableLocks.iteritems(): + for table, lock in self._tableLocks.items(): cmd += '%s %s, ' % (table, lock) cmd = cmd[:-2] + ';' self.getCursor().execute(cmd) - except TryAgainLater,e: + except TryAgainLater as e: self.notify.warning('failed to acquire table lock(s), retrying in %s seconds') % ( self.TableLockRetryPeriod, ) self.request(self.WaitForRetryLocking) @@ -363,8 +363,8 @@ def __init__(self, db): def getRandomSamples(self, callback, numSamples): samples = [] - for i in xrange(numSamples): - samples.append(int(random.random() * ((1L<<32)-1))) + for i in range(numSamples): + samples.append(int(random.random() * ((1<<32)-1))) callback(samples) @classmethod @@ -389,7 +389,7 @@ def _handleRedeemResult(self, result, awardMgrResult): def _getUnusedLotName(self): lotNames = self._db.getLotNames() while 1: - lotName = '%s%s' % (self.TestLotName, int(random.random() * ((1L<<32)-1))) + lotName = '%s%s' % (self.TestLotName, int(random.random() * ((1<<32)-1))) if lotName not in lotNames: break return lotName @@ -399,7 +399,7 @@ def _getUnusedManualCode(self): code = '' length = random.randrange(4, 16) manualCharIndex = random.randrange(length) - for i in xrange(length): + for i in range(length): if i == manualCharIndex: charSet = TTCodeDict.ManualOnlyCharacters else: @@ -413,8 +413,8 @@ def _getUnusedManualCode(self): return code def _getUnusedUtf8ManualCode(self): - chars = u'\u65e5\u672c\u8a9e' - code = unicode('', 'utf-8') + chars = '\u65e5\u672c\u8a9e' + code = str('', 'utf-8') while 1: code += random.choice(chars) if not self._db.codeExists(code): @@ -761,7 +761,7 @@ def run(self): break - except TryAgainLater, e: + except TryAgainLater as e: self.notify.warning('caught TryAgainLater exception during self-test, retrying') retryStartT = globalClock.getRealTime() while globalClock.getRealTime() < (retryStartT + retryDelay): @@ -869,7 +869,7 @@ def _doCleanup(self): if not self._initializedSV.get(): try: TTCodeRedemptionDBTester.cleanup(self) - except TryAgainLater, e: + except TryAgainLater as e: pass else: self._initializedSV.set(True) @@ -1064,7 +1064,7 @@ def createLot(self, randFunc, name, numCodes, rewardType, rewardItemId, expirati continue # r in [0,1) but truly random (non-repeatable) - r = randSamples.pop(0) / float(1L<<32) + r = randSamples.pop(0) / float(1<<32) assert 0. <= r < 1. # this produces the 1 in N chance of guessing a correct code # each code is given a chunk of code space, of size N, and the actual value of the @@ -1279,12 +1279,12 @@ def getCodesInLot(self, lotName, justCode=True, filter=None): if justCode: codes = [] for row in rows: - code = unicode(row['code'], 'utf-8') + code = str(row['code'], 'utf-8') codes.append(code) result = codes else: for row in rows: - row['code'] = unicode(row['code'], 'utf-8') + row['code'] = str(row['code'], 'utf-8') result = rows return result @@ -1302,7 +1302,7 @@ def commitOutstandingRedemptions(self): self.notify.info('committing cached manual code redemption counts to DB') conn = TTCRDBConnection(self) cursor = conn.getDictCursor() - for key in self._manualCode2outstandingRedemptions.iterkeys(): + for key in self._manualCode2outstandingRedemptions.keys(): code, lotName = key count = self._manualCode2outstandingRedemptions[key] self._updateRedemptionCount(cursor, code, True, None, lotName, count) @@ -1312,7 +1312,7 @@ def commitOutstandingRedemptions(self): def _updateRedemptionsTask(self, task): try: self.commitOutstandingRedemptions() - except TryAgainLater, e: + except TryAgainLater as e: pass return Task.again @@ -1348,7 +1348,7 @@ def getLotNameFromCode(self, code): # client hack prevention: # safe; code is between quotes and can only contain letters, numbers and dashes cursor.execute( - unicode(""" + str(""" SELECT code FROM code_set_%s WHERE code='%s'; """, 'utf-8') % (lotName, code) ) @@ -1396,7 +1396,7 @@ def getRewardFromCode(self, code): # client hack prevention: # safe; code is between quotes and can only contain letters, numbers and dashes cursor.execute( - unicode(""" + str(""" SELECT %s, %s FROM code_set_%s INNER JOIN lot WHERE lot.lot_id=code_set_%s.lot_id AND CODE='%s'; """, 'utf-8') % (self.RewardTypeFieldName, self.RewardItemIdFieldName, lotName, lotName, code) @@ -1432,7 +1432,7 @@ def getRedemptions(self, code): cursor = conn.getDictCursor() cursor.execute( - unicode(""" + str(""" SELECT redemptions FROM code_set_%s WHERE code='%s'; """, 'utf-8') % (lotName, code) ) @@ -1484,7 +1484,7 @@ def redeemCode(self, code, avId, rewarder, callback): # client hack prevention: # safe; code is between quotes and can only contain letters, numbers and dashes cursor.execute( - unicode(""" + str(""" SELECT redemptions FROM code_set_%s INNER JOIN lot WHERE code_set_%s.lot_id=lot.lot_id AND code='%s' AND ((expiration IS NULL) OR (CURDATE()<=expiration)); """, 'utf-8') % (lotName, lotName, code) @@ -1517,7 +1517,7 @@ def _updateRedemptionCount(self, cursor, code, manualCode, avId, lotName, count) # client hack prevention: # safe; code is between quotes and can only contain letters, numbers and dashes cursor.execute( - unicode(""" + str(""" UPDATE code_set_%s SET redemptions=redemptions+%s%s WHERE code='%s'; """, 'utf-8') % (lotName, count, choice(manualCode, '', ', av_id=%s' % avId), code) ) @@ -1586,7 +1586,7 @@ def lookupCodesRedeemedByAvId(self, avId): ) for row in rows: - code = unicode(row['code'], 'utf-8') + code = str(row['code'], 'utf-8') codes.append(code) conn.destroy() @@ -1666,7 +1666,7 @@ def getCodeDetails(self, code): if len(rows): conn.destroy() row = rows[0] - row['code'] = unicode(row['code'], 'utf-8') + row['code'] = str(row['code'], 'utf-8') return row self.notify.error('code \'%s\' not found' % u2ascii(code)) @@ -1677,7 +1677,7 @@ def _testSubProc(self): stdin=subprocess.PIPE, stdout=subprocess.PIPE) proc.stdin.write('test' + '\n') result = proc.stdout.readline() - print 'main process: %s' % repr(result) + print('main process: %s' % repr(result)) while result[-1] in ('\r', '\n'): result = result[:-1] if (result == 'testtest'): diff --git a/toontown/src/coderedemption/TTCodeRedemptionMgr.py b/toontown/src/coderedemption/TTCodeRedemptionMgr.py index 07366514..47790ea0 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionMgr.py +++ b/toontown/src/coderedemption/TTCodeRedemptionMgr.py @@ -28,7 +28,7 @@ def redeemCode(self, code, callback): # if result is non-zero, there was an error (see TTCodeRedemptionConsts.RedeemErrors) # if result is TTCodeRedemptionConsts.AwardCouldntBeGiven, awardMgrResult holds the error code # (see AwardManagerConsts.GiveAwardErrors) - context = self._contextGen.next() + context = next(self._contextGen) self._context2callback[context] = callback self.notify.debug('redeemCode(%s, %s)' % (context, code)) self.sendUpdate('redeemCode', [context, code]) diff --git a/toontown/src/coderedemption/TTCodeRedemptionMgrAI.py b/toontown/src/coderedemption/TTCodeRedemptionMgrAI.py index b27ff10b..901be833 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionMgrAI.py +++ b/toontown/src/coderedemption/TTCodeRedemptionMgrAI.py @@ -23,7 +23,7 @@ def __init__(self, air, codeRedemptionMgr): def addRedemption(self, avId, context, code): assert self.notify.debugCall() - serial = self._serialGen.next() + serial = next(self._serialGen) self._redemptions[serial] = ScratchPad(avId=avId, context=context, code=code, attemptNum=0) self._doRedemption(serial, True) diff --git a/toontown/src/coderedemption/TTCodeRedemptionMgrUD.py b/toontown/src/coderedemption/TTCodeRedemptionMgrUD.py index 72e835bb..251090c2 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionMgrUD.py +++ b/toontown/src/coderedemption/TTCodeRedemptionMgrUD.py @@ -16,7 +16,7 @@ from toontown.rpc.AwardManagerUD import AwardManagerUD from toontown.rpc import AwardManagerConsts from toontown.uberdog import PartiesUdConfig -from StringIO import StringIO +from io import StringIO import datetime import random import socket @@ -137,7 +137,7 @@ def __init__(self, air): self._createLotId2task = {} self._randSampleContext2callback = {} - self._randSampleContextGen = SerialMaskedGen((1L<<32)-1) + self._randSampleContextGen = SerialMaskedGen((1<<32)-1) self._spamDetector = TTCodeRedemptionSpamDetector.TTCodeRedemptionSpamDetector() self._wantSpamDetect = config.GetBool('want-code-redemption-spam-detect', 1) @@ -154,9 +154,9 @@ def __init__(self, air): if __dev__: def _sendTestRedemptions(self): - for avId in self._avId2table.iterkeys(): + for avId in self._avId2table.keys(): redemptions = self._avId2table[avId] - for i in xrange(len(redemptions)): + for i in range(len(redemptions)): redemption = redemptions[i] code, results = redemption self.redeemCodeAiToUd(0, 0, i, code, avId, self._resolveTestRedemption) @@ -164,9 +164,9 @@ def _sendTestRedemptions(self): def _sendDisabledTestRedemptions(self): saved = TTCodeRedemptionMgrUD.Disabled TTCodeRedemptionMgrUD.Disabled = True - for avId in self._disabledAvId2table.iterkeys(): + for avId in self._disabledAvId2table.keys(): redemptions = self._disabledAvId2table[avId] - for i in xrange(len(redemptions)): + for i in range(len(redemptions)): redemption = redemptions[i] code, results = redemption self.redeemCodeAiToUd(0, 0, i, code, avId, self._resolveDisabledTestRedemption) @@ -199,7 +199,7 @@ def announceGenerate(self): self._sendDisabledTestRedemptions() def delete(self): - for task in self._createLotId2task.values(): + for task in list(self._createLotId2task.values()): self.removeTask(task) self._createLotId2task = {} @@ -261,7 +261,7 @@ def _addExpirationControls(self, table, values, yearName, monthName, dayName): edDayInput = SE(edInputCell, 'select', name=dayName) thisYear = datetime.date.today().year - for i in xrange(thisYear, thisYear+100): + for i in range(thisYear, thisYear+100): option = SE(edYearInput, 'option', value=str(i)) option.text = str(i) if values.get('expYear') == str(i): @@ -272,7 +272,7 @@ def _addExpirationControls(self, table, values, yearName, monthName, dayName): option.text = '%02i: %s' % (i, name) if values.get('expMonth') == str(i): option.set('selected', 'selected') - for i in xrange(1, 31+1): + for i in range(1, 31+1): option = SE(edDayInput, 'option', value=str(i)) option.text = str(i) if values.get('expDay') == str(i): @@ -447,7 +447,7 @@ def _doCreateForm(self, parent, body, replyTo, values=None, errors=None): rtSelectName = 'rewardType' rtChoice = SE(rtChoiceCell, 'select', name=rtSelectName) - rewardTypes = awardChoices.keys() + rewardTypes = list(awardChoices.keys()) rewardTypes.sort() manualRewardTypes = [] for rewardType in rewardTypes: @@ -568,7 +568,7 @@ def _doCreateForm(self, parent, body, replyTo, values=None, errors=None): for rewardType in rewardTypes: setRewardItemsCode += 'if (typeValue == "%s") {' % rewardType id2item = awardChoices[rewardType] - itemIds = id2item.keys() + itemIds = list(id2item.keys()) itemIds.sort() for itemId in itemIds: value = str(itemId) @@ -603,7 +603,7 @@ def _doCreateForm(self, parent, body, replyTo, values=None, errors=None): rewardItemSelectIndex = 0 if 'rewardType' in values and 'rewardItemId' in values: id2item = awardChoices[int(values.rewardType)] - itemIds = id2item.keys() + itemIds = list(id2item.keys()) itemIds.sort() rewardItemSelectIndex = itemIds.index(int(values.rewardItemId)) initRewardItems = SE(parent, 'script', type='text/javascript') @@ -693,7 +693,7 @@ def _startCreateLotTask(self, replyTo, page, body, values, manualCode, numCodes, expirationDate=expDate) self._showCreateLotResults(replyTo, page, body, values) else: - createLotId = self._createLotSerialGen.next() + createLotId = next(self._createLotSerialGen) gen = self._db.createLot(self._requestRandomSamples, values.lotName, numCodes, values.rewardType, values.rewardItemId, expirationDate=expDate) @@ -724,7 +724,7 @@ def _showCreateLotResults(self, replyTo, page, body, values): def _requestRandomSamples(self, callback, numSamples): assert self.notify.debugCall() - context = self._randSampleContextGen.next() + context = next(self._randSampleContextGen) self._randSampleContext2callback[context] = callback self.air.dispatchUpdateToGlobalDoId( "NonRepeatableRandomSourceUD", "getRandomSamples", @@ -1371,8 +1371,8 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): else: values.add(manualCode = uhs(kw['manualCode'])) values.add(manualCode2 = uhs(kw['manualCode2'])) - values.manualCode = unicode(values.manualCode, 'utf-8') - values.manualCode2 = unicode(values.manualCode2, 'utf-8') + values.manualCode = str(values.manualCode, 'utf-8') + values.manualCode2 = str(values.manualCode2, 'utf-8') if values.hasExpiration == 'yes': values.add( expYear = uhs(kw['expYear']), @@ -1443,7 +1443,7 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): if values.hasExpiration == 'yes': try: expDate = datetime.date(int(values.expYear), int(values.expMonth), int(values.expDay)) - except ValueError, e: + except ValueError as e: errors.add('expiration', str(e).capitalize()) # disable this check until we have 'active' flag or activation date @@ -1540,7 +1540,7 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): values.add(avId = uhs(kw['avId'])) else: values.add(code = uhs(kw['code'])) - values.code = unicode(values.code, 'utf-8') + values.code = str(values.code, 'utf-8') errors = FormErrors() if avIdMode: @@ -1568,7 +1568,7 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): recaptchaChallenge = uhs(kw['recaptcha_challenge_field']), recaptchaResponse = uhs(kw['recaptcha_response_field']), ) - values.code = unicode(values.code, 'utf-8') + values.code = str(values.code, 'utf-8') errors = FormErrors() self._errorCheckCode(errors, values.code) @@ -1580,7 +1580,7 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): self._doRedeemForm(body, replyTo, values, errors) else: avId = int(values.avId) - context = self._redeemContextGen.next() + context = next(self._redeemContextGen) self._redeemContext2session[context] = ScratchPad( result = None, avId = avId, @@ -1604,7 +1604,7 @@ def handleHTTPcodeManagement(self, replyTo=None, **kw): if replyNow: self._reply(page, replyTo) - except TTCodeRedemptionDB.TryAgainLater, e: + except TTCodeRedemptionDB.TryAgainLater as e: self._warnTryAgainLater(e) body.clear() self._doSystemUnavailablePage(body) @@ -1634,8 +1634,8 @@ def redeemCodeAiToUd(self, serial, rmDoId, context, code, senderId, callback=Non else: while 1: try: - code = unicode(code, 'utf-8') - except UnicodeDecodeError, e: + code = str(code, 'utf-8') + except UnicodeDecodeError as e: # code is not utf-8-able self.air.writeServerEvent('suspicious', avId, 'non-utf-8 code redemption: %s' % repr(code)) result = TTCodeRedemptionConsts.RedeemErrors.CodeDoesntExist @@ -1670,7 +1670,7 @@ def redeemCodeAiToUd(self, serial, rmDoId, context, code, senderId, callback=Non self._db.redeemCode(code, avId, self, Functor( self._handleRedeemCodeAiToUdResult, callback, serial, rmDoId, context, avId, )) - except TTCodeRedemptionDB.TryAgainLater, e: + except TTCodeRedemptionDB.TryAgainLater as e: self._warnTryAgainLater(e) def _handleRedeemCodeAiToUdResult(self, callback, serial, rmDoId, context, avId, result, awardMgrResult): @@ -1692,7 +1692,7 @@ def redeemCode(self, code, avId, callback): def _giveReward(self, avId, rewardType, rewardItemId, callback): assert self.notify.debugCall() # callback takes result - context = self._rewardSerialNumGen.next() + context = next(self._rewardSerialNumGen) self._rewardContextTable[context] = callback self.air.dispatchUpdateToGlobalDoId( "AwardManagerUD", "giveAwardToToon", @@ -1704,7 +1704,7 @@ def giveAwardToToonResult(self, context, result): callback = self._rewardContextTable.pop(context) try: callback(result) - except TTCodeRedemptionDB.TryAgainLater, e: + except TTCodeRedemptionDB.TryAgainLater as e: self._warnTryAgainLater(e) def _warnTryAgainLater(self, exception): diff --git a/toontown/src/coderedemption/TTCodeRedemptionSpamDetector.py b/toontown/src/coderedemption/TTCodeRedemptionSpamDetector.py index bb1ad4db..84e0943f 100644 --- a/toontown/src/coderedemption/TTCodeRedemptionSpamDetector.py +++ b/toontown/src/coderedemption/TTCodeRedemptionSpamDetector.py @@ -39,7 +39,7 @@ def avIsBlocked(self, avId): def _cullTrackers(self, task=None): # remove records for avIds that have gone long enough without spamming - avIds = self._avId2tracker.keys() + avIds = list(self._avId2tracker.keys()) for avId in avIds: tracker = self._avId2tracker.get(avId) if tracker.isExpired(): @@ -123,8 +123,8 @@ def destroy(self): self._detector = None def _thresholdTest(self): - avId = self._idGen.next() - for i in xrange(Settings.DetectThreshold+1): + avId = next(self._idGen) + for i in range(Settings.DetectThreshold+1): self._detector.codeSubmitted(avId) if i < Settings.DetectThreshold: assert not self._detector.avIsBlocked(avId) @@ -133,8 +133,8 @@ def _thresholdTest(self): self.notify.info('threshold test passed.') def _timeoutTest(self): - avId = self._idGen.next() - for i in xrange(Settings.DetectThreshold+1): + avId = next(self._idGen) + for i in range(Settings.DetectThreshold+1): self._detector.codeSubmitted(avId) assert self._detector.avIsBlocked(avId) self._timeoutTestStartT = globalClock.getRealTime() @@ -153,7 +153,7 @@ def _timeoutEarlyTest(self, avId, task=None): def _timeoutLateTest(self, avId, task=None): assert not self._detector.avIsBlocked(avId) - for i in xrange(Settings.DetectThreshold+1): + for i in range(Settings.DetectThreshold+1): self._detector.codeSubmitted(avId) assert self._detector.avIsBlocked(avId) self._timeoutLateTestStartT = globalClock.getRealTime() diff --git a/toontown/src/cogdominium/CogdoCraneGameBase.py b/toontown/src/cogdominium/CogdoCraneGameBase.py index 58f46d1c..b561daaf 100644 --- a/toontown/src/cogdominium/CogdoCraneGameBase.py +++ b/toontown/src/cogdominium/CogdoCraneGameBase.py @@ -29,7 +29,7 @@ def getLevelSpec(self): def getEntityTypeReg(self): # return an EntityTypeRegistry with information about the # entity types that the crane game uses - import CogdoEntityTypes + from . import CogdoEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(CogdoEntityTypes) return typeReg diff --git a/toontown/src/cogdominium/DistCogdoCrane.py b/toontown/src/cogdominium/DistCogdoCrane.py index d3bf6e2e..b7b2c586 100644 --- a/toontown/src/cogdominium/DistCogdoCrane.py +++ b/toontown/src/cogdominium/DistCogdoCrane.py @@ -196,7 +196,7 @@ def announceGenerate(self): arm = self.craneGame.craneArm.copyTo(self.crane) - assert(not self.craneGame.cranes.has_key(self.index)) + assert(self.index not in self.craneGame.cranes) self.craneGame.cranes[self.index] = self def disable(self): diff --git a/toontown/src/cogdominium/DistCogdoCraneGameAI.py b/toontown/src/cogdominium/DistCogdoCraneGameAI.py index fc7dfe06..41ba4285 100644 --- a/toontown/src/cogdominium/DistCogdoCraneGameAI.py +++ b/toontown/src/cogdominium/DistCogdoCraneGameAI.py @@ -14,14 +14,14 @@ def __init__(self, air, interior): def enterLoaded(self): DistCogdoLevelGameAI.enterLoaded(self) # create the cranes - for i in xrange(self.MaxPlayers): + for i in range(self.MaxPlayers): crane = DistCogdoCraneAI(self.air, self, i) crane.generateWithRequired(self.zoneId) self._cranes[i] = crane def exitLoaded(self): # destroy the cranes - for i in xrange(self.MaxPlayers): + for i in range(self.MaxPlayers): if self._cranes[i]: self._cranes[i].requestDelete() self._cranes[i] = None @@ -31,7 +31,7 @@ def enterGame(self): DistCogdoLevelGameAI.enterGame(self) # put the players on the cranes - for i in xrange(self.getNumPlayers()): + for i in range(self.getNumPlayers()): self._cranes[i].request('Controlled', self.getToonIds()[i]) # start the game up. Or wait for a while, that's fun too diff --git a/toontown/src/cogdominium/DistCogdoFlyingGame.py b/toontown/src/cogdominium/DistCogdoFlyingGame.py index e8808110..f9f85c22 100644 --- a/toontown/src/cogdominium/DistCogdoFlyingGame.py +++ b/toontown/src/cogdominium/DistCogdoFlyingGame.py @@ -23,7 +23,8 @@ from toontown.minigame import ArrowKeys from toontown.toonbase import ToontownTimer -import CogdoFlyingGameGlobals +from . import CogdoFlyingGameGlobals +import importlib def loadMockup(fileName, dmodelsAlt="coffin"): try: @@ -48,7 +49,7 @@ def __init__(self, cr): self.game = CogdoFlyingGame(self) def codeReload(self): - reload(CogdoFlyingGameGlobals) + importlib.reload(CogdoFlyingGameGlobals) def load(self): DistributedMinigame.load(self) @@ -60,7 +61,7 @@ def unload(self): del self.game self.ignore("onCodeReload") - print "Unload Distributed Game" + print("Unload Distributed Game") DistributedMinigame.unload(self) @@ -778,7 +779,7 @@ def disable(self): self.arrowKeys.disable() def destroy(self): - print "Destroying CogdoFlyingInputManager" + print("Destroying CogdoFlyingInputManager") self.disable() self.arrowKeys.destroy() self.arrowKeys = None diff --git a/toontown/src/cogdominium/DistCogdoFlyingGameAI.py b/toontown/src/cogdominium/DistCogdoFlyingGameAI.py index 1dfb6e13..b84e720b 100644 --- a/toontown/src/cogdominium/DistCogdoFlyingGameAI.py +++ b/toontown/src/cogdominium/DistCogdoFlyingGameAI.py @@ -18,7 +18,7 @@ def __init__(self, air, id): self.DistCogdoFlyingGameAI_initialized = 1 DistributedMinigameAI.__init__(self, air, id) - print "FLYING COGDO GAME AI CREATED!" + print("FLYING COGDO GAME AI CREATED!") def areAllPlayersReady(self): ready = True diff --git a/toontown/src/cogdominium/DistCogdoGameAI.py b/toontown/src/cogdominium/DistCogdoGameAI.py index 40f2d444..fc8a06b3 100644 --- a/toontown/src/cogdominium/DistCogdoGameAI.py +++ b/toontown/src/cogdominium/DistCogdoGameAI.py @@ -114,7 +114,7 @@ def handleToonDisconnected(self, toonId): def handleToonWentSad(self, toonId): self.notify.debug('handleToonWentSad: %s' % toonId) - callbacks = self._sadToken2callback.values() + callbacks = list(self._sadToken2callback.values()) for callback in callbacks: callback(toonId) diff --git a/toontown/src/cogdominium/DistCogdoMazeGame.py b/toontown/src/cogdominium/DistCogdoMazeGame.py index 73507f83..0e5a303f 100644 --- a/toontown/src/cogdominium/DistCogdoMazeGame.py +++ b/toontown/src/cogdominium/DistCogdoMazeGame.py @@ -9,8 +9,8 @@ from toontown.minigame.DistributedMinigame import DistributedMinigame from toontown.minigame.MazeMapGui import MazeMapGui -import CogdoMazeGameGlobals -from CogdoMazeGameGlobals import CogdoMazeLockInfo +from . import CogdoMazeGameGlobals +from .CogdoMazeGameGlobals import CogdoMazeLockInfo class DistCogdoMazeGame(DistributedMinigame): """ @@ -178,7 +178,7 @@ def unload(self): self.door.destroy() del self.door - for key in self.keyIdToKey.values(): + for key in list(self.keyIdToKey.values()): key.destroy() del self.keyIdToKey @@ -554,7 +554,7 @@ def destroy(self): del self.openDoorModel del self.closedDoorModel - for lock in self.lockId2lock.values(): + for lock in list(self.lockId2lock.values()): lock.destroy() del self.lockId2lock @@ -587,13 +587,13 @@ def unlock(self, lockId): return False def getLocks(self): - return self.lockId2lock.values() + return list(self.lockId2lock.values()) def getLock(self, lockId): return self.lockId2lock.get(lockId) def isLocked(self): - return True in [lock.isLocked() for lock in self.lockId2lock.values()] + return True in [lock.isLocked() for lock in list(self.lockId2lock.values())] def playerEntersDoor(self, player): self.players.append(player) @@ -988,11 +988,11 @@ def __init__(self): self.currentMusic = None self.music = {} - for name, file in CogdoMazeGameGlobals.MusicFiles.items(): + for name, file in list(CogdoMazeGameGlobals.MusicFiles.items()): self.music[name] = base.loadMusic(file) self.sfx = {} - for name, file in CogdoMazeGameGlobals.SfxFiles.items(): + for name, file in list(CogdoMazeGameGlobals.SfxFiles.items()): self.sfx[name] = loader.loadSfx(file) self.accept(CogdoMazeAudioManager.PLAY_SFX_EVENT, self.playSfx) @@ -1006,7 +1006,7 @@ def stopMusic(self): self.currentMusic.stop() def playMusic(self, name): - assert name in self.music.keys() + assert name in list(self.music.keys()) if self.currentMusic is not None: self.stopMusic() @@ -1017,7 +1017,7 @@ def playMusic(self, name): self.currentMusic.play() def playSfx(self, name): - assert name in self.sfx.keys() + assert name in list(self.sfx.keys()) self.sfx[name].play() diff --git a/toontown/src/cogdominium/DistCogdoMazeGameAI.py b/toontown/src/cogdominium/DistCogdoMazeGameAI.py index 0fa2113f..399c109b 100644 --- a/toontown/src/cogdominium/DistCogdoMazeGameAI.py +++ b/toontown/src/cogdominium/DistCogdoMazeGameAI.py @@ -9,8 +9,8 @@ from toontown.minigame.DistributedMinigameAI import DistributedMinigameAI from toontown.minigame.DistributedMinigameAI import EXITED, EXPECTED, JOINED, READY -import CogdoMazeGameGlobals -from CogdoMazeGameGlobals import CogdoMazeLockInfo +from . import CogdoMazeGameGlobals +from .CogdoMazeGameGlobals import CogdoMazeLockInfo from direct.fsm.FSM import FSM class DistCogdoMazeGameAI(DistributedMinigameAI, FSM): @@ -93,7 +93,7 @@ def getLocks(self): toonIds = [] spawnPointsX = [] spawnPointsY = [] - for lock in self.locks.values(): + for lock in list(self.locks.values()): toonIds.append(lock.toonId) spawnPointsX.append(lock.tileX) spawnPointsY.append(lock.tileY) @@ -106,7 +106,7 @@ def setExpectedAvatars(self, avIds): self._initLocks() def areAllPlayersReady(self): - return False not in [(state == READY) for state in self.stateDict.values()] + return False not in [(state == READY) for state in list(self.stateDict.values())] def setGameStart(self, timestamp): DistributedMinigameAI.setGameStart(self, timestamp) @@ -126,7 +126,7 @@ def gameOver(self): DistributedMinigameAI.gameOver(self) def isDoorLocked(self): - return True in [lock.locked for lock in self.locks.values()] + return True in [lock.locked for lock in list(self.locks.values())] def areAllToonsInDoor(self): return len(self.avIdList) == len(self.toonsInDoor) diff --git a/toontown/src/cogdominium/DistributedCogdoInterior.py b/toontown/src/cogdominium/DistributedCogdoInterior.py index 6d8765fc..0ac3e5df 100644 --- a/toontown/src/cogdominium/DistributedCogdoInterior.py +++ b/toontown/src/cogdominium/DistributedCogdoInterior.py @@ -246,7 +246,7 @@ def __removeToon(self, toon, unexpected=0): def __finishInterval(self, name): """ Force the specified interval to jump to the end """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): interval = self.activeIntervals[name] if (interval.isPlaying()): assert(self.notify.debug('finishInterval(): %s' % \ @@ -254,7 +254,7 @@ def __finishInterval(self, name): interval.finish() def __cleanupIntervals(self): - for interval in self.activeIntervals.values(): + for interval in list(self.activeIntervals.values()): interval.finish() self.activeIntervals = {} @@ -298,7 +298,7 @@ def setToons(self, toonIds, hack): self.toons = [] for toonId in toonIds: if (toonId != 0): - if (self.cr.doId2do.has_key(toonId)): + if (toonId in self.cr.doId2do): toon = self.cr.doId2do[toonId] toon.stopSmooth() self.toons.append(toon) @@ -319,7 +319,7 @@ def setSuits(self, suitIds, reserveIds, values): self.suits = [] self.joiningReserves = [] for suitId in suitIds: - if (self.cr.doId2do.has_key(suitId)): + if (suitId in self.cr.doId2do): suit = self.cr.doId2do[suitId] self.suits.append(suit) # Set this on the client @@ -338,7 +338,7 @@ def setSuits(self, suitIds, reserveIds, values): assert(len(reserveIds) == len(values)) for index in range(len(reserveIds)): suitId = reserveIds[index] - if (self.cr.doId2do.has_key(suitId)): + if (suitId in self.cr.doId2do): suit = self.cr.doId2do[suitId] self.reserveSuits.append((suit, values[index])) else: diff --git a/toontown/src/cogdominium/DistributedCogdoInteriorAI.py b/toontown/src/cogdominium/DistributedCogdoInteriorAI.py index 33fdb097..acf2d67b 100644 --- a/toontown/src/cogdominium/DistributedCogdoInteriorAI.py +++ b/toontown/src/cogdominium/DistributedCogdoInteriorAI.py @@ -203,7 +203,7 @@ def _cleanupAfterLastToonWentSad(self, task): def __addToon(self, toonId): assert(self.notify.debug('addToon(%d)' % toonId)) - if (not self.air.doId2do.has_key(toonId)): + if (toonId not in self.air.doId2do): self.notify.warning('addToon() - no toon for doId: %d' % toonId) return @@ -213,7 +213,7 @@ def __addToon(self, toonId): self.accept(event, self.__handleUnexpectedExit, extraArgs=[toonId]) self.toons.append(toonId) - assert(not self.responses.has_key(toonId)) + assert(toonId not in self.responses) self.responses[toonId] = 0 def __removeToon(self, toonId): @@ -225,7 +225,7 @@ def __removeToon(self, toonId): if self.toonIds.count(toonId): self.toonIds[self.toonIds.index(toonId)] = None - if self.responses.has_key(toonId): + if toonId in self.responses: del self.responses[toonId] # Ignore future exit events for the toon @@ -242,7 +242,7 @@ def __resetResponses(self): def __allToonsResponded(self): for toon in self.toons: - assert(self.responses.has_key(toon)) + assert(toon in self.responses) if (self.responses[toon] == 0): return 0 self.ignoreResponses = 1 @@ -334,7 +334,7 @@ def setAvatarJoined(self): if avatar != None: self.savedByMap[avId] = (avatar.getName(), avatar.dna.asTuple()) - assert(self.responses.has_key(avId)) + assert(avId in self.responses) self.responses[avId] += 1 assert(self.notify.debug('toon: %d in suit interior' % avId)) if (self.__allToonsResponded()): @@ -360,7 +360,7 @@ def elevatorDone(self): assert(self.notify.debug('toons: %s toonIds: %s' % \ (self.toons, self.toonIds))) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 assert(self.notify.debug('toon: %d done with elevator' % toonId)) if (self.__allToonsResponded() and @@ -387,7 +387,7 @@ def reserveJoinDone(self): assert(self.notify.debug('toons: %s toonIds: %s' % \ (self.toons, self.toonIds))) return - assert(self.responses.has_key(toonId)) + assert(toonId in self.responses) self.responses[toonId] += 1 assert(self.notify.debug('toon: %d done with joining reserves' % \ toonId)) diff --git a/toontown/src/coghq/ActiveCell.py b/toontown/src/coghq/ActiveCell.py index 79ed2b23..b83d8d80 100644 --- a/toontown/src/coghq/ActiveCell.py +++ b/toontown/src/coghq/ActiveCell.py @@ -3,46 +3,42 @@ from direct.directnotify import DirectNotifyGlobal class ActiveCell(BasicEntities.DistributedNodePathEntity): - notify = DirectNotifyGlobal.directNotify.newCategory("ActiveCell") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('ActiveCell') def __init__(self, cr): - BasicEntities.DistributedNodePathEntity.__init__(self,cr) + BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.occupantId = -1 self.state = 0 - + def announceGenerate(self): BasicEntities.DistributedNodePathEntity.announceGenerate(self) self.loadModel() def loadModel(self): - # draw something so we know where the activeCell is - # do this only in debug mode if 0 and __debug__: grid = self.level.entities.get(self.gridId, None) if grid: - pos = grid.getPos() + Vec3(self.col * grid.cellSize, - self.row * grid.cellSize, - 0) - model = loader.loadModel("phase_5/models/modules/suit_walls.bam") + pos = grid.getPos() + Vec3(self.col * grid.cellSize, self.row * grid.cellSize, 0) + model = loader.loadModel('phase_5/models/modules/suit_walls.bam') model.setScale(grid.cellSize, 1, grid.cellSize) model.setP(-90) model.flattenMedium() - model.setZ(.05) - model.setColorScale(1,0,0,.5) + model.setZ(0.05) + model.setColorScale(1, 0, 0, 0.5) model.copyTo(self) - self.setPos(pos) return + return def setState(self, state, objId): - assert(self.notify.debug("entId(%d): setState(%d,%d)" % (self.entId, state, objId))) self.state = state self.occupantId = objId if __dev__: + def attribChanged(self, *args): - model = self.find("*") + model = self.find('*') if not model.isEmpty(): model.removeNode() - self.loadModel() - + self.loadModel() \ No newline at end of file diff --git a/toontown/src/coghq/BarrelBase.py b/toontown/src/coghq/BarrelBase.py index 9fbd13c9..feacc7b6 100644 --- a/toontown/src/coghq/BarrelBase.py +++ b/toontown/src/coghq/BarrelBase.py @@ -1,18 +1,15 @@ import random class BarrelBase: - # use this random generator whenever you calculate a random value for - # the barrel that must be independently the same on the client and AI. - # Use for one calculation and then discard. + __module__ = __name__ + def getRng(self): - return random.Random(self.entId * self.level.doId) + return random.Random(float(self.entId) * float(self.level.doId)) - # the member variables that start with _ are the randomly-chosen values def getRewardPerGrab(self): if not hasattr(self, '_reward'): if self.rewardPerGrabMax > self.rewardPerGrab: - self._reward = self.getRng().randrange(self.rewardPerGrab, - self.rewardPerGrabMax+1) + self._reward = self.getRng().randrange(self.rewardPerGrab, self.rewardPerGrabMax + 1) else: self._reward = self.rewardPerGrab return self._reward @@ -20,41 +17,43 @@ def getRewardPerGrab(self): def getGagLevel(self): if not hasattr(self, '_gagLevel'): if self.gagLevelMax > self.gagLevel: - self._gagLevel = self.getRng().randrange(self.gagLevel, - self.gagLevelMax+1) + self._gagLevel = self.getRng().randrange(self.gagLevel, self.gagLevelMax + 1) else: self._gagLevel = self.gagLevel return self._gagLevel - + def getGagTrack(self): if not hasattr(self, '_gagTrack'): if self.gagTrack == 'random': - # throw/squirt more likely - tracks = (0,1,2,3,4,4,5,5,6,) + tracks = (0, 1, 2, 3, 4, 4, 5, 5, 6) self._gagTrack = self.getRng().choice(tracks) else: self._gagTrack = self.gagTrack return self._gagTrack if __dev__: + def setRewardPerGrab(self, rewardPerGrab): if hasattr(self, '_reward'): del self._reward self.rewardPerGrab = rewardPerGrab + def setRewardPerGrabMax(self, rewardPerGrabMax): if hasattr(self, '_reward'): del self._reward self.rewardPerGrabMax = rewardPerGrabMax - + def setGagLevel(self, gagLevel): if hasattr(self, '_gagLevel'): del self._gagLevel self.gagLevel = gagLevel + def setGagLevelMax(self, gagLevelMax): if hasattr(self, '_gagLevel'): del self._gagLevel self.gagLevelMax = gagLevelMax + def setGagTrack(self, gagTrack): if hasattr(self, '_gagTrack'): del self._gagTrack - self.gagTrack = gagTrack + self.gagTrack = gagTrack \ No newline at end of file diff --git a/toontown/src/coghq/BattleBlocker.py b/toontown/src/coghq/BattleBlocker.py index c47b26b3..b593b21c 100644 --- a/toontown/src/coghq/BattleBlocker.py +++ b/toontown/src/coghq/BattleBlocker.py @@ -1,27 +1,20 @@ -"""BattleBlocker module: contains the BattleBlocker class""" - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from otp.level import BasicEntities from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal -""" BattleBlocker is a collision sphere that is associated with a battle cell. If -the collision sphere is entered, it sends a collision message to all suits also -associated with the battle cell. This will trigger a battle. Once all the suits in -the battle cell have been defeated, the BattleBlockers message will fall on deaf ears, -and the toon can pass through it without triggering a battle """ - -# TODO: allow other geometry than a collision sphere - class BattleBlocker(BasicEntities.DistributedNodePathEntity): - notify = DirectNotifyGlobal.directNotify.newCategory("BattleBlocker") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('BattleBlocker') + def __init__(self, cr): BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.suitIds = [] self.battleId = None - + return + def setActive(self, active): self.active = active @@ -44,32 +37,18 @@ def setBattle(self, battleId): self.battleId = battleId def setBattleFinished(self): - # this is only called if the Toons won the battle - assert(self.notify.debug("setBattleFinished, %s" % self.entId)) - # A message is already sent on the AI, so we probably - # don't need to send one on the client - #messenger.send("battleBlocker-"+str(self.entId)) - # no need to listen for collision events anymore - self.ignoreAll() - + return + def initCollisionGeom(self): - self.cSphere = CollisionSphere(0,0,0,self.radius) - self.cSphereNode = CollisionNode("battleBlocker-%s-%s" % - (self.level.getLevelId(), self.entId)) + self.cSphere = CollisionSphere(0, 0, 0, self.radius) + self.cSphereNode = CollisionNode('battleBlocker-%s-%s' % (self.level.getLevelId(), self.entId)) self.cSphereNode.addSolid(self.cSphere) self.cSphereNodePath = self.attachNewNode(self.cSphereNode) self.cSphereNode.setCollideMask(ToontownGlobals.WallBitmask) self.cSphere.setTangible(0) - - self.enterEvent = "enter" + self.cSphereNode.getName() + self.enterEvent = 'enter' + self.cSphereNode.getName() self.accept(self.enterEvent, self.__handleToonEnter) - """ rather than do this, just use ~cs - if __dev__: - from otp.otpbase import OTPGlobals - self.showCS(OTPGlobals.WallBitmask) - """ - def unloadCollisionGeom(self): if hasattr(self, 'cSphereNodePath'): self.ignore(self.enterEvent) @@ -79,52 +58,37 @@ def unloadCollisionGeom(self): del self.cSphereNodePath def __handleToonEnter(self, collEntry): - self.notify.debug ("__handleToonEnter, %s" % self.entId) - self.startBattle() - - - def startBattle(self): + self.notify.debug('__handleToonEnter, %s' % self.entId) if not self.active: return - - # don't listen for any more events from the blocker - # this Toon might not win the battle - #self.ignoreAll() - + self.ignoreAll() callback = None - # first check if there is a valid battle going on - if self.battleId != None and self.battleId in base.cr.doId2do: + if self.battleId != None: battle = base.cr.doId2do.get(self.battleId) if battle: - self.notify.debug("act like we collided with battle %d" % self.battleId) + self.notify.debug('act like we collided with battle %d' % self.battleId) callback = battle.handleBattleBlockerCollision elif len(self.suitIds) > 0: - # a battle has not been created yet, pick the first - # valid suit to start a battle with for suitId in self.suitIds: suit = base.cr.doId2do.get(suitId) if suit: - self.notify.debug("act like we collided with Suit %d ( in state %s )" % (suitId, suit.fsm.getCurrentState().getName())) + self.notify.debug('act like we collided with Suit %d ( in state %s )' % (suitId, suit.fsm.getCurrentState().getName())) callback = suit.handleBattleBlockerCollision break - - # the show to explain the local toon getting stopped by this collision sphere + self.showReaction(callback) - + return def showReaction(self, callback=None): if not base.localAvatar.wantBattles: return - track = Sequence() - # add some minimal show - #track = Sequence(Func(base.cr.playGame.place.setState,'WaitForBattle'), - # ActorInterval(base.localAvatar, animName = 'slip-backward')) if callback: track.append(Func(callback)) track.start() - + if __dev__: + def attribChanged(self, *args): self.unloadCollisionGeom() - self.initCollisionGeom() + self.initCollisionGeom() \ No newline at end of file diff --git a/toontown/src/coghq/BossbotCogHQLoader.py b/toontown/src/coghq/BossbotCogHQLoader.py index 701b3f0a..c5ec2afb 100644 --- a/toontown/src/coghq/BossbotCogHQLoader.py +++ b/toontown/src/coghq/BossbotCogHQLoader.py @@ -1,7 +1,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import StateData -import CogHQLoader +from . import CogHQLoader from toontown.toonbase import ToontownGlobals from direct.gui import DirectGui from toontown.toonbase import TTLocalizer diff --git a/toontown/src/coghq/BossbotCountryClubFairwayRoom_Battle00_Cogs.py b/toontown/src/coghq/BossbotCountryClubFairwayRoom_Battle00_Cogs.py index 7e0b4541..60eb1d83 100644 --- a/toontown/src/coghq/BossbotCountryClubFairwayRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubFairwayRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubKartRoom_Battle00_Cogs.py b/toontown/src/coghq/BossbotCountryClubKartRoom_Battle00_Cogs.py index ad6609bd..1ddece1b 100644 --- a/toontown/src/coghq/BossbotCountryClubKartRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubKartRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle00_Cogs.py b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle00_Cogs.py index a01fcbbf..429152ad 100644 --- a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle01_Cogs.py b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle01_Cogs.py index b192c300..d0dcb974 100644 --- a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle01_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle02_Cogs.py b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle02_Cogs.py index 1f698e69..0ce25a3b 100644 --- a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle02_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle02_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle03_Cogs.py b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle03_Cogs.py index d34559c6..977d8912 100644 --- a/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle03_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubMazeRoom_Battle03_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotCountryClubPresidentRoom_Battle00_Cogs.py b/toontown/src/coghq/BossbotCountryClubPresidentRoom_Battle00_Cogs.py index 7be1dc0e..95555b3d 100644 --- a/toontown/src/coghq/BossbotCountryClubPresidentRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/BossbotCountryClubPresidentRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/BossbotOfficeExterior.py b/toontown/src/coghq/BossbotOfficeExterior.py index 339953bb..ec1ffb5a 100644 --- a/toontown/src/coghq/BossbotOfficeExterior.py +++ b/toontown/src/coghq/BossbotOfficeExterior.py @@ -5,7 +5,7 @@ from toontown.toonbase import ToontownGlobals from toontown.building import Elevator from pandac.PandaModules import * -import FactoryExterior +from . import FactoryExterior class BossbotOfficeExterior(FactoryExterior.FactoryExterior): # create a notify category diff --git a/toontown/src/coghq/CashbotCogHQLoader.py b/toontown/src/coghq/CashbotCogHQLoader.py index f40756e2..929075c9 100644 --- a/toontown/src/coghq/CashbotCogHQLoader.py +++ b/toontown/src/coghq/CashbotCogHQLoader.py @@ -1,114 +1,81 @@ - from direct.directnotify import DirectNotifyGlobal from direct.fsm import StateData -import CogHQLoader, MintInterior +from . import CogHQLoader, MintInterior from toontown.toonbase import ToontownGlobals +from pandac.PandaModules import * from direct.gui import DirectGui from toontown.toonbase import TTLocalizer from toontown.toon import Toon from direct.fsm import State -import CashbotHQExterior -import CashbotHQBossBattle -from pandac.PandaModules import DecalEffect +from . import CashbotHQExterior, CashbotHQBossBattle +aspectSF = 0.7227 class CashbotCogHQLoader(CogHQLoader.CogHQLoader): - - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CashbotCogHQLoader") - #notify.setDebug(True) + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CashbotCogHQLoader') + notify.setDebug(True) def __init__(self, hood, parentFSMState, doneEvent): CogHQLoader.CogHQLoader.__init__(self, hood, parentFSMState, doneEvent) - - self.fsm.addState(State.State('mintInterior', - self.enterMintInterior, - self.exitMintInterior, - ['quietZone', - 'cogHQExterior', # Tunnel - ])) + self.fsm.addState(State.State('mintInterior', self.enterMintInterior, self.exitMintInterior, [ + 'quietZone', 'cogHQExterior'])) for stateName in ['start', 'cogHQExterior', 'quietZone']: state = self.fsm.getStateNamed(stateName) state.addTransition('mintInterior') - self.musicFile = "phase_9/audio/bgm/encntr_suit_HQ_nbrhood.mid" - - self.cogHQExteriorModelPath = "phase_10/models/cogHQ/CashBotShippingStation" - self.cogHQLobbyModelPath = "phase_10/models/cogHQ/VaultLobby" + self.musicFile = 'phase_9/audio/bgm/encntr_suit_HQ_nbrhood.mid' + self.cogHQExteriorModelPath = 'phase_10/models/cogHQ/CashBotShippingStation' + self.cogHQLobbyModelPath = 'phase_10/models/cogHQ/VaultLobby' self.geom = None + return def load(self, zoneId): CogHQLoader.CogHQLoader.load(self, zoneId) - # load anims Toon.loadCashbotHQAnims() def unloadPlaceGeom(self): - # Get rid of any old geom if self.geom: self.geom.removeNode() self.geom = None CogHQLoader.CogHQLoader.unloadPlaceGeom(self) + return def loadPlaceGeom(self, zoneId): - - self.notify.info("loadPlaceGeom: %s" % zoneId) - - # We shoud not look at the last 2 digits to match against these constants - zoneId = (zoneId - (zoneId %100)) - + self.notify.info('loadPlaceGeom: %s' % zoneId) + zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.CashbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) - - # Rename the link tunnels so they will hook up properly - ddLinkTunnel = self.geom.find("**/LinkTunnel1") - ddLinkTunnel.setName("linktunnel_dl_9252_DNARoot") - - # Put a handy sign on the link tunnel + ddLinkTunnel = self.geom.find('**/LinkTunnel1') + ddLinkTunnel.setName('linktunnel_dl_9252_DNARoot') locator = self.geom.find('**/sign_origin') backgroundGeom = self.geom.find('**/EntranceFrameFront') backgroundGeom.node().setEffect(DecalEffect.make()) - signText = DirectGui.OnscreenText( - text = TTLocalizer.DonaldsDreamland[-1], - font = ToontownGlobals.getSuitFont(), - scale = 3, - fg = (0.87, 0.87, 0.87, 1), - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = backgroundGeom) + signText = DirectGui.OnscreenText(text=TTLocalizer.DonaldsDreamland[(-1)], font=ToontownGlobals.getSuitFont(), scale=3, fg=(0.87, 0.87, 0.87, 1), parent=backgroundGeom) signText.setPosHpr(locator, 0, 0, 0, 0, 0, 0) signText.setDepthWrite(0) - elif zoneId == ToontownGlobals.CashbotLobby: self.geom = loader.loadModel(self.cogHQLobbyModelPath) - - # Note: the factory interior has a dynamically allocated zone but - # that is ok because we do not need to load any models - they all - # get loaded by the distributed object - else: - self.notify.warning("loadPlaceGeom: unclassified zone %s" % zoneId) - + self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId) - def unload(self): CogHQLoader.CogHQLoader.unload(self) - # unload anims Toon.unloadCashbotHQAnims() def enterMintInterior(self, requestStatus): self.placeClass = MintInterior.MintInterior - # MintInterior will grab this off of us self.mintId = requestStatus['mintId'] self.enterPlace(requestStatus) - # spawnTitleText is done by MintInterior once the mint shows up - + def exitMintInterior(self): self.exitPlace() self.placeClass = None del self.mintId + return def getExteriorPlaceClass(self): return CashbotHQExterior.CashbotHQExterior - + def getBossPlaceClass(self): - return CashbotHQBossBattle.CashbotHQBossBattle + return CashbotHQBossBattle.CashbotHQBossBattle \ No newline at end of file diff --git a/toontown/src/coghq/CashbotHQBossBattle.py b/toontown/src/coghq/CashbotHQBossBattle.py index fed21546..d0906cc9 100644 --- a/toontown/src/coghq/CashbotHQBossBattle.py +++ b/toontown/src/coghq/CashbotHQBossBattle.py @@ -5,14 +5,13 @@ from toontown.coghq import CogHQBossBattle class CashbotHQBossBattle(CogHQBossBattle.CogHQBossBattle): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CashbotHQBossBattle") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CashbotHQBossBattle') + def __init__(self, loader, parentFSM, doneEvent): CogHQBossBattle.CogHQBossBattle.__init__(self, loader, parentFSM, doneEvent) - # This is only used for magic words. - self.teleportInPosHpr = (88, -214, 0, 210, 0, 0) + self.teleportInPosHpr = ( + 88, -214, 0, 210, 0, 0) def load(self): CogHQBossBattle.CogHQBossBattle.load(self) @@ -21,17 +20,11 @@ def unload(self): CogHQBossBattle.CogHQBossBattle.unload(self) def enter(self, requestStatus): - CogHQBossBattle.CogHQBossBattle.enter(self, requestStatus, - DistributedCashbotBoss.OneBossCog) - # No need for a sky; this scene is entirely interior. + CogHQBossBattle.CogHQBossBattle.enter(self, requestStatus, DistributedCashbotBoss.OneBossCog) def exit(self): CogHQBossBattle.CogHQBossBattle.exit(self) - def exitCrane(self): CogHQBossBattle.CogHQBossBattle.exitCrane(self) - - # If we leave crane mode for any reason--for instance, we got - # zapped--then tell the crane to relinquish control. - messenger.send('exitCrane') + messenger.send('exitCrane') \ No newline at end of file diff --git a/toontown/src/coghq/CashbotHQExterior.py b/toontown/src/coghq/CashbotHQExterior.py index cb77c166..f33e44e5 100644 --- a/toontown/src/coghq/CashbotHQExterior.py +++ b/toontown/src/coghq/CashbotHQExterior.py @@ -1,116 +1,76 @@ from direct.directnotify import DirectNotifyGlobal from direct.interval.IntervalGlobal import * from direct.fsm import State -from pandac.PandaModules import * from toontown.building import Elevator from toontown.coghq import CogHQExterior from toontown.safezone import Train -#aka "The Train Station" - class CashbotHQExterior(CogHQExterior.CogHQExterior): - notify = DirectNotifyGlobal.directNotify.newCategory("CashbotHQExterior") - + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CashbotHQExterior') TrackZ = -67 - TrainTracks = [ { "start":Point3(-1000, -54.45, TrackZ), "end":Point3(2200, -54.45, TrackZ) }, - { "start":Point3(1800, -133.45, TrackZ), "end":Point3(-1200, -133.45, TrackZ) }, - { "start":Point3(-1000, -212.45, TrackZ), "end":Point3(2200, -212.45, TrackZ) }, - { "start":Point3(1800, -291.45, TrackZ), "end":Point3(-1200, -291.45, TrackZ) }, - ] + TrainTracks = [{'start': Point3(-1000, -54.45, TrackZ), 'end': Point3(2200, -54.45, TrackZ)}, {'start': Point3(1800, -133.45, TrackZ), 'end': Point3(-1200, -133.45, TrackZ)}, {'start': Point3(-1000, -212.45, TrackZ), 'end': Point3(2200, -212.45, TrackZ)}, {'start': Point3(1800, -291.45, TrackZ), 'end': Point3(-1200, -291.45, TrackZ)}] def __init__(self, loader, parentFSM, doneEvent): CogHQExterior.CogHQExterior.__init__(self, loader, parentFSM, doneEvent) - self.elevatorDoneEvent = "elevatorDone" + self.elevatorDoneEvent = 'elevatorDone' self.trains = None - - self.fsm.addState( State.State('elevator', - self.enterElevator, - self.exitElevator, - ['walk', 'stopped'])) + self.fsm.addState(State.State('elevator', self.enterElevator, self.exitElevator, [ + 'walk'])) state = self.fsm.getStateNamed('walk') state.addTransition('elevator') - # Adding transition from stopped to elevator because this is possible when you are in a boarding group. - state = self.fsm.getStateNamed('stopped') - state.addTransition('elevator') - # Adding transition from stickerBook to elevator because this is possible when you are in a boarding group. - state = self.fsm.getStateNamed('stickerBook') - state.addTransition('elevator') - # Adding transition from squished to elevator because this is possible when you are in a boarding group - # and get squished by a train. - state = self.fsm.getStateNamed('squished') - state.addTransition('elevator') + return def load(self): CogHQExterior.CogHQExterior.load(self) - if not self.trains: self.trains = [] for track in self.TrainTracks: train = Train.Train(track['start'], track['end'], self.TrainTracks.index(track), len(self.TrainTracks)) self.trains.append(train) - + def unload(self): CogHQExterior.CogHQExterior.unload(self) + for train in self.trains: + train.delete() - # Clear the references to the trains - for train in self.trains: train.delete() self.trains = None - + return + def enter(self, requestStatus): CogHQExterior.CogHQExterior.enter(self, requestStatus) + for train in self.trains: + train.show() - for train in self.trains: train.show() - def exit(self): CogHQExterior.CogHQExterior.exit(self) + for train in self.trains: + train.hide() - for train in self.trains: train.hide() - - # elevator state - # (For boarding a building elevator) - def enterElevator(self, distElevator, skipDFABoard = 0): - assert(self.notify.debug("enterElevator()")) - + def enterElevator(self, distElevator): self.accept(self.elevatorDoneEvent, self.handleElevatorDone) - self.elevator = Elevator.Elevator(self.fsm.getStateNamed("elevator"), - self.elevatorDoneEvent, - distElevator) - if skipDFABoard: - self.elevator.skipDFABoard = 1 + self.elevator = Elevator.Elevator(self.fsm.getStateNamed('elevator'), self.elevatorDoneEvent, distElevator) self.elevator.load() self.elevator.enter() def exitElevator(self): - assert(self.notify.debug("exitElevator()")) self.ignore(self.elevatorDoneEvent) self.elevator.unload() self.elevator.exit() del self.elevator def detectedElevatorCollision(self, distElevator): - assert(self.notify.debug("detectedElevatorCollision()")) - self.fsm.request("elevator", [distElevator]) + self.fsm.request('elevator', [distElevator]) def handleElevatorDone(self, doneStatus): - assert(self.notify.debug("handleElevatorDone()")) - self.notify.debug("handling elevator done event") + self.notify.debug('handling elevator done event') where = doneStatus['where'] - if (where == 'reject'): - # If there has been a reject the Elevator should show an - # elevatorNotifier message and put the toon in the stopped state. - # Don't request the walk state here. Let the the toon be stuck in the - # stopped state till the player removes that message from his screen. - # Removing the message will automatically put him in the walk state there. - # Put the player in the walk state only if there is no elevator message. - if hasattr(base.localAvatar, "elevatorNotifier") and base.localAvatar.elevatorNotifier.isNotifierOpen(): - pass - else: - self.fsm.request("walk") - elif (where == 'exit'): - self.fsm.request("walk") - elif (where == 'mintInterior'): + if where == 'reject': + self.fsm.request('walk') + elif where == 'exit': + self.fsm.request('walk') + elif where == 'mintInterior': self.doneStatus = doneStatus messenger.send(self.doneEvent) else: - self.notify.error("Unknown mode: " + where + - " in handleElevatorDone") + self.notify.error('Unknown mode: ' + where + ' in handleElevatorDone') \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintBoilerRoom_Action00.py b/toontown/src/coghq/CashbotMintBoilerRoom_Action00.py index 7e641ad6..36f7af33 100644 --- a/toontown/src/coghq/CashbotMintBoilerRoom_Action00.py +++ b/toontown/src/coghq/CashbotMintBoilerRoom_Action00.py @@ -1,771 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10055: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': '', - }, # end entity 10055 - # GAGBARREL - 10045: { - 'type': 'gagBarrel', - 'name': 'gag', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(1.36976861954,0.773027420044,0.0), - 'hpr': Vec3(51.1066703796,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10045 - 10047: { - 'type': 'gagBarrel', - 'name': 'gag', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.137291625142,2.83575630188,0.0), - 'hpr': Vec3(-210.47303772,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10047 - 10054: { - 'type': 'gagBarrel', - 'name': 'gag', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-2.34864091873,2.16795802116,0.0), - 'hpr': Vec3(-141.715744019,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10054 - # GEAR - 10020: { - 'type': 'gear', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.60000002384), - 'degreesPerSec': -5.0, - 'gearScale': 24.300000000000001, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0, - }, # end entity 10020 - # HEALBARREL - 10004: { - 'type': 'healBarrel', - 'name': 'heal', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,-0.748414576054,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 6, - 'rewardPerGrabMax': 8, - }, # end entity 10004 - 10005: { - 'type': 'healBarrel', - 'name': 'heal', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-2.20195555687,-0.384303599596,0.0), - 'hpr': Vec3(-64.4312591553,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 6, - 'rewardPerGrabMax': 8, - }, # end entity 10005 - 10037: { - 'type': 'healBarrel', - 'name': 'atTheEnd', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(64.282081604,42.8509597778,0.0), - 'hpr': Vec3(274.906707764,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10037 - # MINTSHELF - 10010: { - 'type': 'mintShelf', - 'name': 'shelf0', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12700, - }, # end entity 10010 - 10021: { - 'type': 'mintShelf', - 'name': 'copy of shelf0', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(-13.4654359818,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10021 - 10022: { - 'type': 'mintShelf', - 'name': 'copy of shelf0 (2)', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(-26.8826961517,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10022 - 10025: { - 'type': 'mintShelf', - 'name': 'shelf0', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10025 - 10026: { - 'type': 'mintShelf', - 'name': 'copy of shelf0', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(-13.4654359818,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10026 - 10027: { - 'type': 'mintShelf', - 'name': 'copy of shelf0 (2)', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(-26.8826961517,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10027 - # MODEL - 10000: { - 'type': 'model', - 'name': 'crate', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10000 - 10007: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(0.0,2.0,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10007 - 10008: { - 'type': 'model', - 'name': 'crate', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.0,-5.79679441452,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10008 - 10012: { - 'type': 'model', - 'name': 'copy of crate', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,-5.79679441452,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10012 - 10013: { - 'type': 'model', - 'name': 'copy of crate (2)', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10013 - 10014: { - 'type': 'model', - 'name': 'copy of crate (2)', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-5.65285158157,-11.6494598389,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10014 - 10015: { - 'type': 'model', - 'name': 'copy of crate (2)', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-5.80570077896,-5.79679441452,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10015 - 10016: { - 'type': 'model', - 'name': 'copy of crate (3)', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-3.93829965591,-17.6477527618,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10016 - 10018: { - 'type': 'model', - 'name': 'copy of upper', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(0.0,-3.83362102509,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10018 - 10019: { - 'type': 'model', - 'name': 'copy of upper (2)', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(0.0,-9.69304847717,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10019 - 10030: { - 'type': 'model', - 'name': 'lastCrateStack', - 'comment': '', - 'parentEntId': 10029, - 'pos': Point3(47.9848709106,27.71052742,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10030 - 10031: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10030, - 'pos': Point3(0.0,0.0,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10031 - 10033: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(-41.8699073792,-36.9582328796,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam', - }, # end entity 10033 - 10034: { - 'type': 'model', - 'name': 'crateStack', - 'comment': '', - 'parentEntId': 10029, - 'pos': Point3(47.9848709106,-3.09666919708,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10034 - 10035: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10034, - 'pos': Point3(0.0,0.0,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10035 - 10036: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,-41.4516029358,30.2685108185), - 'hpr': Vec3(180.0,0.0,180.0), - 'scale': Vec3(0.850346446037,0.850346446037,0.850346446037), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10036 - 10041: { - 'type': 'model', - 'name': 'crateStack', - 'comment': '', - 'parentEntId': 10040, - 'pos': Point3(36.5904769897,-31.6758518219,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10041 - 10042: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(0.0,0.0,5.5), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10042 - 10043: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(19.5017147064,84.0786056519,10.0058736801), - 'hpr': Vec3(171.253845215,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/boiler_B1.bam', - }, # end entity 10043 - 10048: { - 'type': 'model', - 'name': 'crate', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(0.0,0.0,8.25758934021), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.29999995232,1.29999995232,1.64999997616), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10048 - 10050: { - 'type': 'model', - 'name': 'support', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/gears_C2.bam', - }, # end entity 10050 - 10052: { - 'type': 'model', - 'name': 'crate', - 'comment': '', - 'parentEntId': 10051, - 'pos': Point3(0.0,0.0,8.25758934021), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.29999995232,1.29999995232,1.64999997616), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10052 - 10053: { - 'type': 'model', - 'name': 'support', - 'comment': '', - 'parentEntId': 10051, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/gears_C2.bam', - }, # end entity 10053 - 10056: { - 'type': 'model', - 'name': 'collision', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-0.62570387125,0.824797034264,0.0), - 'hpr': Vec3(318.366455078,0.0,0.0), - 'scale': Vec3(0.644617915154,0.639999985695,1.28725671768), - 'collisionsOnly': 1, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10056 - 10057: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(11.0614013672,11.0614013672,11.0614013672), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam', - }, # end entity 10057 - 10058: { - 'type': 'model', - 'name': 'shelf', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(62.9968643188,21.712474823,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/shelf_A1.bam', - }, # end entity 10058 - 10062: { - 'type': 'model', - 'name': 'copy of upper', - 'comment': '', - 'parentEntId': 10061, - 'pos': Point3(0.0,-3.83362102509,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10062 - 10063: { - 'type': 'model', - 'name': 'copy of upper (2)', - 'comment': '', - 'parentEntId': 10061, - 'pos': Point3(0.0,-9.69304847717,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10063 - 10064: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10061, - 'pos': Point3(0.0,2.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10064 - # NODEPATH - 10001: { - 'type': 'nodepath', - 'name': 'crates', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.29999995232,1.29999995232,1.64892423153), - }, # end entity 10001 - 10002: { - 'type': 'nodepath', - 'name': 'rewardBarrels', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-0.719733536243,56.9690589905,10.0021047592), - 'hpr': Vec3(61.6992454529,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10002 - 10003: { - 'type': 'nodepath', - 'name': 'upperWall', - 'comment': 'TODO: replace with lines of shelves', - 'parentEntId': 0, - 'pos': Point3(-20.3202514648,52.6549415588,9.9087305069), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.11429846287,1.11429846287,1.11429846287), - }, # end entity 10003 - 10009: { - 'type': 'nodepath', - 'name': 'toGear0', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(-26.5593318939,31.8559513092,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10009 - 10011: { - 'type': 'nodepath', - 'name': 'toGear1', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(-25.88397789,13.6748971939,0.0), - 'hpr': Vec3(41.6335411072,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10011 - 10023: { - 'type': 'nodepath', - 'name': 'leftWall', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10023 - 10024: { - 'type': 'nodepath', - 'name': 'rightWall', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-26.7111759186,6.85981559753,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10024 - 10028: { - 'type': 'nodepath', - 'name': 'lowerPuzzle', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0500000007451), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10028 - 10029: { - 'type': 'nodepath', - 'name': 'entranceWall', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10029 - 10032: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10032 - 10038: { - 'type': 'nodepath', - 'name': 'archStompers', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10038 - 10040: { - 'type': 'nodepath', - 'name': 'backWall', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10040 - 10044: { - 'type': 'nodepath', - 'name': 'gear', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(11.8500003815,-11.3800001144,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10044 - 10046: { - 'type': 'nodepath', - 'name': 'supportedCrateBackWall', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(34.904460907,-34.058883667,-1.51686680317), - 'hpr': Vec3(63.4349479675,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10046 - 10051: { - 'type': 'nodepath', - 'name': 'supportedCrateEntrance', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(48.5076904297,7.75915336609,0.35789707303), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10051 - 10059: { - 'type': 'nodepath', - 'name': 'largeStack', - 'comment': '', - 'parentEntId': 10029, - 'pos': Point3(47.9799995422,-16.9799995422,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10059 - 10061: { - 'type': 'nodepath', - 'name': 'lower', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10061 - # STOMPER - 10049: { - 'type': 'stomper', - 'name': 'second', - 'comment': '', - 'parentEntId': 10038, - 'pos': Point3(62.3684997559,-19.4456634521,18.1217155457), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(3.79999995232,4.30000019073,3.79999995232), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0, - 'phaseShift': 0.34000000000000002, - 'range': 7.0, - 'removeCamBarrierCollisions': 0, - 'removeHeadFloor': 1, - 'shaftScale': Point3(1.71000003815,2.78999996185,1.71000003815), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 1, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 10049 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10055: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10001, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': ''}, 10045: {'type': 'gagBarrel', 'name': 'gag', 'comment': '', 'parentEntId': 10002, 'pos': Point3(1.36976861954, 0.773027420044, 0.0), 'hpr': Vec3(51.1066703796, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10047: {'type': 'gagBarrel', 'name': 'gag', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.137291625142, 2.83575630188, 0.0), 'hpr': Vec3(-210.47303772, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10054: {'type': 'gagBarrel', 'name': 'gag', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-2.34864091873, 2.16795802116, 0.0), 'hpr': Vec3(-141.715744019, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10020: {'type': 'gear', 'name': 'upper', 'comment': '', 'parentEntId': 10044, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.60000002384), 'degreesPerSec': -5.0, 'gearScale': 24.3, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0}, 10004: {'type': 'healBarrel', 'name': 'heal', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, -0.748414576054, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 6, 'rewardPerGrabMax': 8}, 10005: {'type': 'healBarrel', 'name': 'heal', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-2.20195555687, -0.384303599596, 0.0), 'hpr': Vec3(-64.4312591553, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 6, 'rewardPerGrabMax': 8}, 10037: {'type': 'healBarrel', 'name': 'atTheEnd', 'comment': '', 'parentEntId': 10028, 'pos': Point3(64.282081604, 42.8509597778, 0.0), 'hpr': Vec3(274.906707764, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10010: {'type': 'mintShelf', 'name': 'shelf0', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12700}, 10021: {'type': 'mintShelf', 'name': 'copy of shelf0', 'comment': '', 'parentEntId': 10023, 'pos': Point3(-13.4654359818, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'mintId': 12500}, 10022: {'type': 'mintShelf', 'name': 'copy of shelf0 (2)', 'comment': '', 'parentEntId': 10023, 'pos': Point3(-26.8826961517, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10025: {'type': 'mintShelf', 'name': 'shelf0', 'comment': '', 'parentEntId': 10024, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10026: {'type': 'mintShelf', 'name': 'copy of shelf0', 'comment': '', 'parentEntId': 10024, 'pos': Point3(-13.4654359818, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10027: {'type': 'mintShelf', 'name': 'copy of shelf0 (2)', 'comment': '', 'parentEntId': 10024, 'pos': Point3(-26.8826961517, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10000: {'type': 'model', 'name': 'crate', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10007: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10059, 'pos': Point3(0.0, 2.0, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10008: {'type': 'model', 'name': 'crate', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.0, -5.79679441452, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10012: {'type': 'model', 'name': 'copy of crate', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, -5.79679441452, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10013: {'type': 'model', 'name': 'copy of crate (2)', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10014: {'type': 'model', 'name': 'copy of crate (2)', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-5.65285158157, -11.6494598389, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10015: {'type': 'model', 'name': 'copy of crate (2)', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-5.80570077896, -5.79679441452, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10016: {'type': 'model', 'name': 'copy of crate (3)', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-3.93829965591, -17.6477527618, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10018: {'type': 'model', 'name': 'copy of upper', 'comment': '', 'parentEntId': 10059, 'pos': Point3(0.0, -3.83362102509, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10019: {'type': 'model', 'name': 'copy of upper (2)', 'comment': '', 'parentEntId': 10059, 'pos': Point3(0.0, -9.69304847717, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10030: {'type': 'model', 'name': 'lastCrateStack', 'comment': '', 'parentEntId': 10029, 'pos': Point3(47.9848709106, 27.71052742, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10031: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10030, 'pos': Point3(0.0, 0.0, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10033: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10032, 'pos': Point3(-41.8699073792, -36.9582328796, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam'}, 10034: {'type': 'model', 'name': 'crateStack', 'comment': '', 'parentEntId': 10029, 'pos': Point3(47.9848709106, -3.09666919708, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10035: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10034, 'pos': Point3(0.0, 0.0, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10036: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, -41.4516029358, 30.2685108185), 'hpr': Vec3(180.0, 0.0, 180.0), 'scale': Vec3(0.850346446037, 0.850346446037, 0.850346446037), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10041: {'type': 'model', 'name': 'crateStack', 'comment': '', 'parentEntId': 10040, 'pos': Point3(36.5904769897, -31.6758518219, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10042: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10041, 'pos': Point3(0.0, 0.0, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10043: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10032, 'pos': Point3(19.5017147064, 84.0786056519, 10.0058736801), 'hpr': Vec3(171.253845215, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/boiler_B1.bam'}, 10048: {'type': 'model', 'name': 'crate', 'comment': '', 'parentEntId': 10046, 'pos': Point3(0.0, 0.0, 8.25758934021), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.29999995232, 1.29999995232, 1.64999997616), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10050: {'type': 'model', 'name': 'support', 'comment': '', 'parentEntId': 10046, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/gears_C2.bam'}, 10052: {'type': 'model', 'name': 'crate', 'comment': '', 'parentEntId': 10051, 'pos': Point3(0.0, 0.0, 8.25758934021), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.29999995232, 1.29999995232, 1.64999997616), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10053: {'type': 'model', 'name': 'support', 'comment': '', 'parentEntId': 10051, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/gears_C2.bam'}, 10056: {'type': 'model', 'name': 'collision', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-0.62570387125, 0.824797034264, 0.0), 'hpr': Vec3(318.366455078, 0.0, 0.0), 'scale': Vec3(0.644617915154, 0.639999985695, 1.28725671768), 'collisionsOnly': 1, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10057: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10044, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(11.0614013672, 11.0614013672, 11.0614013672), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam'}, 10058: {'type': 'model', 'name': 'shelf', 'comment': '', 'parentEntId': 10028, 'pos': Point3(62.9968643188, 21.712474823, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/shelf_A1.bam'}, 10062: {'type': 'model', 'name': 'copy of upper', 'comment': '', 'parentEntId': 10061, 'pos': Point3(0.0, -3.83362102509, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10063: {'type': 'model', 'name': 'copy of upper (2)', 'comment': '', 'parentEntId': 10061, 'pos': Point3(0.0, -9.69304847717, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10064: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10061, 'pos': Point3(0.0, 2.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10001: {'type': 'nodepath', 'name': 'crates', 'comment': '', 'parentEntId': 10028, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.29999995232, 1.29999995232, 1.64892423153)}, 10002: {'type': 'nodepath', 'name': 'rewardBarrels', 'comment': '', 'parentEntId': 0, 'pos': Point3(-0.719733536243, 56.9690589905, 10.0021047592), 'hpr': Vec3(61.6992454529, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'upperWall', 'comment': 'TODO: replace with lines of shelves', 'parentEntId': 0, 'pos': Point3(-20.3202514648, 52.6549415588, 9.9087305069), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.11429846287, 1.11429846287, 1.11429846287)}, 10009: {'type': 'nodepath', 'name': 'toGear0', 'comment': '', 'parentEntId': 10001, 'pos': Point3(-26.5593318939, 31.8559513092, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10011: {'type': 'nodepath', 'name': 'toGear1', 'comment': '', 'parentEntId': 10001, 'pos': Point3(-25.88397789, 13.6748971939, 0.0), 'hpr': Vec3(41.6335411072, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'leftWall', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10024: {'type': 'nodepath', 'name': 'rightWall', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-26.7111759186, 6.85981559753, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10028: {'type': 'nodepath', 'name': 'lowerPuzzle', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0500000007451), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10029: {'type': 'nodepath', 'name': 'entranceWall', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10032: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10038: {'type': 'nodepath', 'name': 'archStompers', 'comment': '', 'parentEntId': 10028, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10040: {'type': 'nodepath', 'name': 'backWall', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10044: {'type': 'nodepath', 'name': 'gear', 'comment': '', 'parentEntId': 10028, 'pos': Point3(11.8500003815, -11.3800001144, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10046: {'type': 'nodepath', 'name': 'supportedCrateBackWall', 'comment': '', 'parentEntId': 10028, 'pos': Point3(34.904460907, -34.058883667, -1.51686680317), 'hpr': Vec3(63.4349479675, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10051: {'type': 'nodepath', 'name': 'supportedCrateEntrance', 'comment': '', 'parentEntId': 10028, 'pos': Point3(48.5076904297, 7.75915336609, 0.35789707303), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10059: {'type': 'nodepath', 'name': 'largeStack', 'comment': '', 'parentEntId': 10029, 'pos': Point3(47.9799995422, -16.9799995422, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10061: {'type': 'nodepath', 'name': 'lower', 'comment': '', 'parentEntId': 10059, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10049: {'type': 'stomper', 'name': 'second', 'comment': '', 'parentEntId': 10038, 'pos': Point3(62.3684997559, -19.4456634521, 18.1217155457), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(3.79999995232, 4.30000019073, 3.79999995232), 'modelPath': 0, 'motion': 3, 'period': 3.0, 'phaseShift': 0.34, 'range': 7.0, 'removeCamBarrierCollisions': 0, 'removeHeadFloor': 1, 'shaftScale': Point3(1.71000003815, 2.78999996185, 1.71000003815), 'soundLen': 0, 'soundOn': 1, 'soundPath': 1, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintBoilerRoom_Battle00.py b/toontown/src/coghq/CashbotMintBoilerRoom_Battle00.py index 479e2a82..f3457949 100644 --- a/toontown/src/coghq/CashbotMintBoilerRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintBoilerRoom_Battle00.py @@ -1,571 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10001: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-1.02925205231,87.0907745361,11.8959827423), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10.0, - }, # end entity 10001 - 10006: { - 'type': 'battleBlocker', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-60.9065246582,-3.26905798912,0.117109239101), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 1, - 'radius': 15.0, - }, # end entity 10006 - 10047: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,0.20000000298,1.0), - 'cellId': 2, - 'radius': 20.0, - }, # end entity 10047 - # GAGBARREL - 10041: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(5.40611028671,0.0,0.0), - 'hpr': Vec3(199.440032959,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 4, - 'rewardPerGrabMax': 6, - }, # end entity 10041 - # HEALBARREL - 10034: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(163.300750732,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 7, - 'rewardPerGrabMax': 9, - }, # end entity 10034 - # MINTPRODUCTPALLET - 10015: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10015 - 10016: { - 'type': 'mintProductPallet', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,13.6865262985,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10016 - 10017: { - 'type': 'mintProductPallet', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,27.3799991608,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10017 - 10018: { - 'type': 'mintProductPallet', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,41.0699996948,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10018 - 10019: { - 'type': 'mintProductPallet', - 'name': 'copy of (4)', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,54.7599983215,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10019 - 10020: { - 'type': 'mintProductPallet', - 'name': 'copy of (5)', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,68.4499969482,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10020 - 10022: { - 'type': 'mintProductPallet', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(0.0,11.766998291,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10022 - 10025: { - 'type': 'mintProductPallet', - 'name': 'copy of (4)', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.0,54.7599983215,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10025 - 10026: { - 'type': 'mintProductPallet', - 'name': 'copy of (5)', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.0,68.4499969482,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10026 - 10036: { - 'type': 'mintProductPallet', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.0,13.6865262985,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10036 - 10037: { - 'type': 'mintProductPallet', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.0,27.3799991608,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10037 - 10038: { - 'type': 'mintProductPallet', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.0,41.0699996948,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10038 - 10043: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-36.662399292,-39.0314712524,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10043 - 10044: { - 'type': 'mintProductPallet', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(0.0,25.4739685059,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10044 - # MODEL - 10004: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(0.0,-1.09804749489,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.0,2.0,2.0), - 'collisionsOnly': 0, - 'flattenType': 'strong', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10004 - 10009: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(-3.9962117672,0.695078849792,0.0113303475082), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.20000004768,1.20000004768,1.20000004768), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10009 - 10010: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(48.0530014038,-0.531660735607,-0.327078670263), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10010 - 10012: { - 'type': 'model', - 'name': 'rightCrates', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(36.0373382568,71.3546981812,9.99835586548), - 'hpr': Vec3(315.0,0.0,0.0), - 'scale': Vec3(1.5,1.5,1.5), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10012 - 10024: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-3.7328555584,27.1218452454,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(2.0,2.0,2.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10024 - 10027: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-11.9349050522,38.9528312683,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(2.0,2.0,2.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10027 - 10029: { - 'type': 'model', - 'name': 'crate', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.0,0.863602340221,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.0,2.0,2.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10029 - 10030: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10030 - 10031: { - 'type': 'model', - 'name': 'copy of crate', - 'comment': '', - 'parentEntId': 10029, - 'pos': Point3(0.0,0.0,5.46999979019), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10031 - 10032: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,-5.92218112946,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10032 - 10039: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-9.23663234711,0.821143984795,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.5,1.5,1.5), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10039 - 10042: { - 'type': 'model', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(3.0,-11.8400001526,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10042 - 10048: { - 'type': 'model', - 'name': 'cratesAgainstWall', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-37.0983123779,70.2133865356,10.0), - 'hpr': Vec3(225.0,0.0,0.0), - 'scale': Vec3(1.5,1.5,1.5), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10048 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,66.1200027466,10.1833248138), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'battle', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10003: { - 'type': 'nodepath', - 'name': 'cogs2', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-53.9246749878,-22.7616195679,0.0), - 'hpr': Point3(45.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10003 - 10005: { - 'type': 'nodepath', - 'name': 'battle', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10005 - 10007: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10007 - 10008: { - 'type': 'nodepath', - 'name': 'topWall', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,48.0299987793,10.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10008 - 10011: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10011 - 10013: { - 'type': 'nodepath', - 'name': 'frontCogs', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(25.3957309723,-12.3005743027,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10013 - 10014: { - 'type': 'nodepath', - 'name': 'frontPalletWall', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(45.5494384766,38.2237281799,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10014 - 10021: { - 'type': 'nodepath', - 'name': 'middlePalletWallLeft', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(6.0,-37.9928665161,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10021 - 10023: { - 'type': 'nodepath', - 'name': 'crateIsland', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-23.1813278198,7.08758449554,0.00999999977648), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.0,2.0,2.0), - }, # end entity 10023 - 10028: { - 'type': 'nodepath', - 'name': 'rewardCulDeSac', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(-8.26172065735,38.377407074,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10028 - 10033: { - 'type': 'nodepath', - 'name': 'barrels', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-4.75077962875,34.1425209045,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10033 - 10035: { - 'type': 'nodepath', - 'name': 'backPalletWall', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-47.6501731873,40.006893158,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10035 - 10040: { - 'type': 'nodepath', - 'name': 'centerCogs', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-23.9375743866,28.353269577,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10040 - 10045: { - 'type': 'nodepath', - 'name': 'middlePalletWallRight', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(17.4200000763,-38.2999992371,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10045 - 10046: { - 'type': 'nodepath', - 'name': 'middlePalletWall', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10046 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-1.02925205231, 87.0907745361, 11.8959827423), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10.0}, 10006: {'type': 'battleBlocker', 'name': 'copy of ', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-60.9065246582, -3.26905798912, 0.117109239101), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 1, 'radius': 15.0}, 10047: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 10013, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 0.20000000298, 1.0), 'cellId': 2, 'radius': 20.0}, 10041: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10033, 'pos': Point3(5.40611028671, 0.0, 0.0), 'hpr': Vec3(199.440032959, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 4, 'rewardPerGrabMax': 6}, 10034: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10033, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(163.300750732, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 7, 'rewardPerGrabMax': 9}, 10015: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10016: {'type': 'mintProductPallet', 'name': 'copy of ', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 13.6865262985, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10017: {'type': 'mintProductPallet', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 27.3799991608, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10018: {'type': 'mintProductPallet', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 41.0699996948, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10019: {'type': 'mintProductPallet', 'name': 'copy of (4)', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 54.7599983215, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10020: {'type': 'mintProductPallet', 'name': 'copy of (5)', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 68.4499969482, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10022: {'type': 'mintProductPallet', 'name': 'copy of ', 'comment': '', 'parentEntId': 10021, 'pos': Point3(0.0, 11.766998291, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10025: {'type': 'mintProductPallet', 'name': 'copy of (4)', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.0, 54.7599983215, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10026: {'type': 'mintProductPallet', 'name': 'copy of (5)', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.0, 68.4499969482, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10036: {'type': 'mintProductPallet', 'name': 'copy of ', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.0, 13.6865262985, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10037: {'type': 'mintProductPallet', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.0, 27.3799991608, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10038: {'type': 'mintProductPallet', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.0, 41.0699996948, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10043: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-36.662399292, -39.0314712524, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10044: {'type': 'mintProductPallet', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10021, 'pos': Point3(0.0, 25.4739685059, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10004: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10021, 'pos': Point3(0.0, -1.09804749489, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.0, 2.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'strong', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10009: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(-3.9962117672, 0.695078849792, 0.0113303475082), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.20000004768, 1.20000004768, 1.20000004768), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10010: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(48.0530014038, -0.531660735607, -0.327078670263), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10012: {'type': 'model', 'name': 'rightCrates', 'comment': '', 'parentEntId': 10007, 'pos': Point3(36.0373382568, 71.3546981812, 9.99835586548), 'hpr': Vec3(315.0, 0.0, 0.0), 'scale': Vec3(1.5, 1.5, 1.5), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10024: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-3.7328555584, 27.1218452454, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 2.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10027: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-11.9349050522, 38.9528312683, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 2.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10029: {'type': 'model', 'name': 'crate', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.0, 0.863602340221, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.0, 2.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10030: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10031: {'type': 'model', 'name': 'copy of crate', 'comment': '', 'parentEntId': 10029, 'pos': Point3(0.0, 0.0, 5.46999979019), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10032: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, -5.92218112946, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10039: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-9.23663234711, 0.821143984795, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.5, 1.5, 1.5), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10042: {'type': 'model', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10023, 'pos': Point3(3.0, -11.8400001526, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10048: {'type': 'model', 'name': 'cratesAgainstWall', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-37.0983123779, 70.2133865356, 10.0), 'hpr': Vec3(225.0, 0.0, 0.0), 'scale': Vec3(1.5, 1.5, 1.5), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 66.1200027466, 10.1833248138), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10002: {'type': 'nodepath', 'name': 'battle', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': 1}, 10003: {'type': 'nodepath', 'name': 'cogs2', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-53.9246749878, -22.7616195679, 0.0), 'hpr': Point3(45.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10005: {'type': 'nodepath', 'name': 'battle', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10007: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10008: {'type': 'nodepath', 'name': 'topWall', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, 48.0299987793, 10.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10011: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10013: {'type': 'nodepath', 'name': 'frontCogs', 'comment': '', 'parentEntId': 10011, 'pos': Point3(25.3957309723, -12.3005743027, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10014: {'type': 'nodepath', 'name': 'frontPalletWall', 'comment': '', 'parentEntId': 10007, 'pos': Point3(45.5494384766, 38.2237281799, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10021: {'type': 'nodepath', 'name': 'middlePalletWallLeft', 'comment': '', 'parentEntId': 10046, 'pos': Point3(6.0, -37.9928665161, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'crateIsland', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-23.1813278198, 7.08758449554, 0.00999999977648), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.0, 2.0, 2.0)}, 10028: {'type': 'nodepath', 'name': 'rewardCulDeSac', 'comment': '', 'parentEntId': 10045, 'pos': Point3(-8.26172065735, 38.377407074, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10033: {'type': 'nodepath', 'name': 'barrels', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-4.75077962875, 34.1425209045, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10035: {'type': 'nodepath', 'name': 'backPalletWall', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-47.6501731873, 40.006893158, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10040: {'type': 'nodepath', 'name': 'centerCogs', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-23.9375743866, 28.353269577, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10045: {'type': 'nodepath', 'name': 'middlePalletWallRight', 'comment': '', 'parentEntId': 10046, 'pos': Point3(17.4200000763, -38.2999992371, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10046: {'type': 'nodepath', 'name': 'middlePalletWall', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintBoilerRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintBoilerRoom_Battle00_Cogs.py index 173e0f8b..ca2f9232 100644 --- a/toontown/src/coghq/CashbotMintBoilerRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintBoilerRoom_Battle00_Cogs.py @@ -1,201 +1,15 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 LowerCogParent = 10003 BattleParent = 10002 LowerBattleParent = 10005 FrontCogParent = 10013 CenterCogParent = 10040 - -# unique IDs for battle cells BattleCellId = 0 LowerBattleCellId = 1 FrontBattleCellId = 2 CenterBattleCellId = 3 - -BattleCells = { - BattleCellId : {'parentEntId' : BattleParent, - 'pos' : Point3(0,0,0), - }, - LowerBattleCellId : {'parentEntId' : LowerBattleParent, - 'pos' : Point3(0,0,0), - }, - FrontBattleCellId : {'parentEntId' : FrontCogParent, - 'pos' : Point3(0,0,0), - }, - CenterBattleCellId : {'parentEntId' : CenterCogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - - {'parentEntId' : LowerCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : LowerBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : LowerCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : LowerBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : LowerCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : LowerBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : LowerCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : LowerBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : CenterCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : CenterBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CenterCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : CenterBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CenterCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : CenterBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CenterCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : CenterBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': BattleParent, 'pos': Point3(0, 0, 0)}, LowerBattleCellId: {'parentEntId': LowerBattleParent, 'pos': Point3(0, 0, 0)}, FrontBattleCellId: {'parentEntId': FrontCogParent, 'pos': Point3(0, 0, 0)}, CenterBattleCellId: {'parentEntId': CenterCogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': LowerCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': LowerBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': LowerCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': LowerBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': LowerCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': LowerBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': LowerCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': LowerBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CenterCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': CenterBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CenterCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': CenterBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CenterCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': CenterBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CenterCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': CenterBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintBoilerRoom_Battle01.py b/toontown/src/coghq/CashbotMintBoilerRoom_Battle01.py index 4d7041f5..9b0d72d1 100644 --- a/toontown/src/coghq/CashbotMintBoilerRoom_Battle01.py +++ b/toontown/src/coghq/CashbotMintBoilerRoom_Battle01.py @@ -1,521 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # GAGBARREL - 10006: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(-23.8955783844,-29.8914642334,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 7, - }, # end entity 10006 - # HEALBARREL - 10007: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(-7.71000003815,6.03817367554,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 8, - }, # end entity 10007 - # LOCATOR - 10001: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/EXIT', - }, # end entity 10001 - # MINTPRODUCT - 10014: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10014 - 10015: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(9.73605537415,0.935430526733,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10015 - 10016: { - 'type': 'mintProduct', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(-11.0564117432,0.213024124503,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10016 - # MINTSHELF - 10028: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10028 - 10029: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10029 - 10030: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(-12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10030 - 10031: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10030, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10031 - 10033: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10033 - 10034: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10034 - 10035: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(24.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10035 - 10036: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10036 - 10037: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(-24.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10037 - 10038: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10037, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10038 - 10040: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10039, - 'pos': Point3(12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10040 - 10041: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10040, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10041 - 10044: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10039, - 'pos': Point3(-12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10044 - 10045: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10045 - 10046: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10039, - 'pos': Point3(-36.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10046 - 10047: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10047 - 10049: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10049 - 10050: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(24.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10050 - 10051: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(-24.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10051 - 10052: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10049, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10052 - 10053: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10050, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10053 - 10054: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10051, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10054 - 10056: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10055, - 'pos': Point3(12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10056 - 10057: { - 'type': 'mintShelf', - 'name': 'shelfPair', - 'comment': '', - 'parentEntId': 10055, - 'pos': Point3(-12.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10057 - 10058: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10056, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10058 - 10059: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10057, - 'pos': Point3(0.167918920517,6.80000019073,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10059 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10002 - 10011: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(34.3037414551,6.2506942749,0.0), - 'hpr': Vec3(306.869903564,0.0,0.0), - 'scale': Vec3(1.22879016399,1.22879016399,1.22879016399), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/boiler_A2.bam', - }, # end entity 10011 - 10012: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(-37.5963821411,0.68013381958,0.0), - 'hpr': Vec3(45.0,0.0,0.0), - 'scale': Vec3(0.761251866817,0.761251866817,0.761251866817), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam', - }, # end entity 10012 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,68.932258606,9.97146701813), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10004: { - 'type': 'nodepath', - 'name': 'lower', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - 10005: { - 'type': 'nodepath', - 'name': 'barrels', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10005 - 10008: { - 'type': 'nodepath', - 'name': 'upperLevel', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,65.4967575073,9.99451065063), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10008 - 10013: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,17.8199996948,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10013 - 10023: { - 'type': 'nodepath', - 'name': 'shelves', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,1.89410364628,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10023 - 10027: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,-32.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10027 - 10032: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,-14.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10032 - 10039: { - 'type': 'nodepath', - 'name': 'row3', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,4.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10039 - 10048: { - 'type': 'nodepath', - 'name': 'row4', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,22.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10048 - 10055: { - 'type': 'nodepath', - 'name': 'row5', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,40.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10055 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE08a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10006: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10005, 'pos': Point3(-23.8955783844, -29.8914642334, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 7}, 10007: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10005, 'pos': Point3(-7.71000003815, 6.03817367554, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 8}, 10001: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT'}, 10014: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10013, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10015: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10013, 'pos': Point3(9.73605537415, 0.935430526733, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10016: {'type': 'mintProduct', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10013, 'pos': Point3(-11.0564117432, 0.213024124503, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10028: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10027, 'pos': Point3(12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10029: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10028, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10030: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10027, 'pos': Point3(-12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10031: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10030, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10033: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10034: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10033, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10035: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10032, 'pos': Point3(24.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10036: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10037: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10032, 'pos': Point3(-24.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10038: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10037, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10040: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10039, 'pos': Point3(12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10041: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10040, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10044: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10039, 'pos': Point3(-12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10045: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10044, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10046: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10039, 'pos': Point3(-36.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10047: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10046, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10049: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10048, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10050: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10048, 'pos': Point3(24.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10051: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10048, 'pos': Point3(-24.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10052: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10049, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10053: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10050, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10054: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10051, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10056: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10055, 'pos': Point3(12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10057: {'type': 'mintShelf', 'name': 'shelfPair', 'comment': '', 'parentEntId': 10055, 'pos': Point3(-12.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10058: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10056, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10059: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10057, 'pos': Point3(0.167918920517, 6.80000019073, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10011: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(34.3037414551, 6.2506942749, 0.0), 'hpr': Vec3(306.869903564, 0.0, 0.0), 'scale': Vec3(1.22879016399, 1.22879016399, 1.22879016399), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/boiler_A2.bam'}, 10012: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(-37.5963821411, 0.68013381958, 0.0), 'hpr': Vec3(45.0, 0.0, 0.0), 'scale': Vec3(0.761251866817, 0.761251866817, 0.761251866817), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 68.932258606, 9.97146701813), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'lower', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10005: {'type': 'nodepath', 'name': 'barrels', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10008: {'type': 'nodepath', 'name': 'upperLevel', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 65.4967575073, 9.99451065063), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10013: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 17.8199996948, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'shelves', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 1.89410364628, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10027: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, -32.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10032: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, -14.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10039: {'type': 'nodepath', 'name': 'row3', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 4.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10048: {'type': 'nodepath', 'name': 'row4', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 22.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10055: {'type': 'nodepath', 'name': 'row5', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 40.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintBoilerRoom_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintBoilerRoom_Battle01_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintBoilerRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintBoilerRoom_Battle01_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintControlRoom_Battle00.py b/toontown/src/coghq/CashbotMintControlRoom_Battle00.py index 464babe2..ce9f31b9 100644 --- a/toontown/src/coghq/CashbotMintControlRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintControlRoom_Battle00.py @@ -1,188 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE31a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # MINTPRODUCT - 10013: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(0.0,16.5455417633,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10013 - 10014: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(9.33731842041,15.9028654099,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10014 - 10015: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(-9.30014419556,11.6405067444,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10015 - # MINTSHELF - 10003: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(19.5716362,16.3833560944,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10003 - 10004: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(19.5716362,2.93304467201,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10004 - 10005: { - 'type': 'mintShelf', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(19.5716362,-10.4780406952,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10005 - 10006: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-19.5699996948,16.3833560944,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10006 - 10007: { - 'type': 'mintShelf', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-19.5699996948,2.93304467201,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10007 - 10008: { - 'type': 'mintShelf', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-19.5699996948,-10.4780406952,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10008 - # MODEL - 10001: { - 'type': 'model', - 'name': 'vaultDoor', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,22.9976291656,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10001 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'shelves', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10011: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10011 - 10012: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10012 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE31a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10013: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10012, 'pos': Point3(0.0, 16.5455417633, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10014: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10012, 'pos': Point3(9.33731842041, 15.9028654099, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10015: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10012, 'pos': Point3(-9.30014419556, 11.6405067444, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10003: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(19.5716362, 16.3833560944, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10004: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10002, 'pos': Point3(19.5716362, 2.93304467201, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10005: {'type': 'mintShelf', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10002, 'pos': Point3(19.5716362, -10.4780406952, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10006: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-19.5699996948, 16.3833560944, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10007: {'type': 'mintShelf', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-19.5699996948, 2.93304467201, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10008: {'type': 'mintShelf', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-19.5699996948, -10.4780406952, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10001: {'type': 'model', 'name': 'vaultDoor', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 22.9976291656, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10002: {'type': 'nodepath', 'name': 'shelves', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10011: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10012: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintControlRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintControlRoom_Battle00_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintControlRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintControlRoom_Battle00_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintDuctRoom_Action00.py b/toontown/src/coghq/CashbotMintDuctRoom_Action00.py index 325a63b3..a6057f19 100644 --- a/toontown/src/coghq/CashbotMintDuctRoom_Action00.py +++ b/toontown/src/coghq/CashbotMintDuctRoom_Action00.py @@ -1,312 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # HEALBARREL - 10015: { - 'type': 'healBarrel', - 'name': 'heal', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(16.9929084778,7.15916633606,0.0), - 'hpr': Vec3(107.078933716,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 6, - 'rewardPerGrabMax': 0, - }, # end entity 10015 - # MINTSHELF - 10004: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(41.5774269104,-16.0394973755,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10004 - 10005: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(41.5774269104,15.5885248184,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10005 - # MODEL - 10009: { - 'type': 'model', - 'name': 'crateColl0', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-21.0479602814,-8.71147918701,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.6654573679,4.67459440231,4.99637460709), - 'collisionsOnly': 1, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10009 - 10013: { - 'type': 'model', - 'name': 'crate0', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-21.0,0.735621452332,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10013 - 10016: { - 'type': 'model', - 'name': 'copy of crate0', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-21.0,-8.74976444244,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10016 - 10017: { - 'type': 'model', - 'name': 'copy of crate0 (2)', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-21.0,-18.1307086945,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10017 - 10019: { - 'type': 'model', - 'name': 'copy of crate0', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(-21.0,-8.74976444244,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10019 - 10020: { - 'type': 'model', - 'name': 'crateColl0', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(-21.0479602814,-8.71147918701,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.69406318665,4.75488471985,5.08219003677), - 'collisionsOnly': 1, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10020 - 10021: { - 'type': 'model', - 'name': 'crate0', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(-21.0,0.735621452332,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10021 - 10022: { - 'type': 'model', - 'name': 'copy of crate0 (2)', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(-21.0,-18.1307086945,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.60000002384,1.60000002384,1.60000002384), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10022 - 10024: { - 'type': 'model', - 'name': 'hider', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(17.0452461243,-0.882949709892,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.54636645317,1.54636645317,1.54636645317), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10024 - # NODEPATH - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10010: { - 'type': 'nodepath', - 'name': 'crates0', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(1.2899544239,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10010 - 10018: { - 'type': 'nodepath', - 'name': 'crates1', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-13.2792396545,0.0,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10018 - 10023: { - 'type': 'nodepath', - 'name': 'heal', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10023 - # STOMPER - 10000: { - 'type': 'stomper', - 'name': 'stomper0', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-23.0840358734,13.8124275208,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(8.0,8.0,8.0), - 'crushCellId': None, - 'damage': 8, - 'headScale': Vec3(1.0,1.0,1.0), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0, - 'phaseShift': 0.0, - 'range': 1.6000000000000001, - 'shaftScale': Point3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 10000 - 10001: { - 'type': 'stomper', - 'name': 'stomper1', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-5.92516326904,-0.618411839008,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(8.0,8.0,8.0), - 'crushCellId': None, - 'damage': 8, - 'headScale': Vec3(1.0,1.0,1.0), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0, - 'phaseShift': 0.33000000000000002, - 'range': 1.6000000000000001, - 'shaftScale': Point3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 10001 - 10002: { - 'type': 'stomper', - 'name': 'stomper2', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(11.6394100189,-14.1471977234,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(8.0,8.0,8.0), - 'crushCellId': None, - 'damage': 8, - 'headScale': Vec3(1.0,1.0,1.0), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0, - 'phaseShift': 0.66000000000000003, - 'range': 1.6000000000000001, - 'shaftScale': Point3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 10002 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10015: {'type': 'healBarrel', 'name': 'heal', 'comment': '', 'parentEntId': 10023, 'pos': Point3(16.9929084778, 7.15916633606, 0.0), 'hpr': Vec3(107.078933716, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 6, 'rewardPerGrabMax': 0}, 10004: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(41.5774269104, -16.0394973755, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10005: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10003, 'pos': Point3(41.5774269104, 15.5885248184, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10009: {'type': 'model', 'name': 'crateColl0', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-21.0479602814, -8.71147918701, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.6654573679, 4.67459440231, 4.99637460709), 'collisionsOnly': 1, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10013: {'type': 'model', 'name': 'crate0', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-21.0, 0.735621452332, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10016: {'type': 'model', 'name': 'copy of crate0', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-21.0, -8.74976444244, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10017: {'type': 'model', 'name': 'copy of crate0 (2)', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-21.0, -18.1307086945, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10019: {'type': 'model', 'name': 'copy of crate0', 'comment': '', 'parentEntId': 10018, 'pos': Point3(-21.0, -8.74976444244, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10020: {'type': 'model', 'name': 'crateColl0', 'comment': '', 'parentEntId': 10018, 'pos': Point3(-21.0479602814, -8.71147918701, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.69406318665, 4.75488471985, 5.08219003677), 'collisionsOnly': 1, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10021: {'type': 'model', 'name': 'crate0', 'comment': '', 'parentEntId': 10018, 'pos': Point3(-21.0, 0.735621452332, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10022: {'type': 'model', 'name': 'copy of crate0 (2)', 'comment': '', 'parentEntId': 10018, 'pos': Point3(-21.0, -18.1307086945, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.60000002384, 1.60000002384, 1.60000002384), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10024: {'type': 'model', 'name': 'hider', 'comment': '', 'parentEntId': 10023, 'pos': Point3(17.0452461243, -0.882949709892, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.54636645317, 1.54636645317, 1.54636645317), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10010: {'type': 'nodepath', 'name': 'crates0', 'comment': '', 'parentEntId': 0, 'pos': Point3(1.2899544239, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10018: {'type': 'nodepath', 'name': 'crates1', 'comment': '', 'parentEntId': 0, 'pos': Point3(-13.2792396545, 0.0, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'heal', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10000: {'type': 'stomper', 'name': 'stomper0', 'comment': '', 'parentEntId': 0, 'pos': Point3(-23.0840358734, 13.8124275208, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(8.0, 8.0, 8.0), 'crushCellId': None, 'damage': 8, 'headScale': Vec3(1.0, 1.0, 1.0), 'modelPath': 0, 'motion': 3, 'period': 3.0, 'phaseShift': 0.0, 'range': 1.6, 'shaftScale': Point3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 10001: {'type': 'stomper', 'name': 'stomper1', 'comment': '', 'parentEntId': 0, 'pos': Point3(-5.92516326904, -0.618411839008, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(8.0, 8.0, 8.0), 'crushCellId': None, 'damage': 8, 'headScale': Vec3(1.0, 1.0, 1.0), 'modelPath': 0, 'motion': 3, 'period': 3.0, 'phaseShift': 0.33, 'range': 1.6, 'shaftScale': Point3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 10002: {'type': 'stomper', 'name': 'stomper2', 'comment': '', 'parentEntId': 0, 'pos': Point3(11.6394100189, -14.1471977234, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(8.0, 8.0, 8.0), 'crushCellId': None, 'damage': 8, 'headScale': Vec3(1.0, 1.0, 1.0), 'modelPath': 0, 'motion': 3, 'period': 3.0, 'phaseShift': 0.66, 'range': 1.6, 'shaftScale': Point3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintDuctRoom_Battle00.py b/toontown/src/coghq/CashbotMintDuctRoom_Battle00.py index 90a698d9..fb4a9e4e 100644 --- a/toontown/src/coghq/CashbotMintDuctRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintDuctRoom_Battle00.py @@ -1,182 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10001: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(44.257774353,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10.0, - }, # end entity 10001 - # MODEL - 10003: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(39.3964080811,22.2593421936,16.0659122467), - 'hpr': Vec3(270.0,0.0,90.0), - 'scale': Vec3(0.560864269733,0.560864269733,0.560864269733), - 'collisionsOnly': 0, - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10003 - 10005: { - 'type': 'model', - 'name': 'farLeft', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(41.8226966858,16.5434036255,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.28777551651,2.28777551651,2.28777551651), - 'collisionsOnly': 1, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10005 - 10006: { - 'type': 'model', - 'name': 'farRight', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(41.8226966858,-16.5400009155,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.28777551651,2.28777551651,2.28777551651), - 'collisionsOnly': 1, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10006 - 10007: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(39.3192749023,-22.8234348297,13.6092739105), - 'hpr': Vec3(270.0,0.0,270.0), - 'scale': Point3(0.560000002384,0.560864269733,0.560864269733), - 'collisionsOnly': 0, - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10007 - 10008: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-39.3800811768,-22.8855381012,16.0659122467), - 'hpr': Point3(90.0,0.0,90.0), - 'scale': Vec3(0.560864269733,0.560864269733,0.560864269733), - 'collisionsOnly': 0, - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10008 - 10009: { - 'type': 'model', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-39.3062858582,22.1807098389,13.6092739105), - 'hpr': Point3(90.0,0.0,270.0), - 'scale': Point3(0.560000002384,0.560864269733,0.560864269733), - 'collisionsOnly': 0, - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10009 - 10010: { - 'type': 'model', - 'name': 'nearLeft', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-41.8199996948,16.5434036255,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.28777551651,2.28777551651,2.28777551651), - 'collisionsOnly': 1, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10010 - 10011: { - 'type': 'model', - 'name': 'nearRight', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-41.8199996948,-16.5400009155,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.28777551651,2.28777551651,2.28777551651), - 'collisionsOnly': 1, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10011 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10004: { - 'type': 'nodepath', - 'name': 'collisions', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(44.257774353, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10.0}, 10003: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(39.3964080811, 22.2593421936, 16.0659122467), 'hpr': Vec3(270.0, 0.0, 90.0), 'scale': Vec3(0.560864269733, 0.560864269733, 0.560864269733), 'collisionsOnly': 0, 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10005: {'type': 'model', 'name': 'farLeft', 'comment': '', 'parentEntId': 10004, 'pos': Point3(41.8226966858, 16.5434036255, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.28777551651, 2.28777551651, 2.28777551651), 'collisionsOnly': 1, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10006: {'type': 'model', 'name': 'farRight', 'comment': '', 'parentEntId': 10004, 'pos': Point3(41.8226966858, -16.5400009155, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.28777551651, 2.28777551651, 2.28777551651), 'collisionsOnly': 1, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10007: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10002, 'pos': Point3(39.3192749023, -22.8234348297, 13.6092739105), 'hpr': Vec3(270.0, 0.0, 270.0), 'scale': Point3(0.560000002384, 0.560864269733, 0.560864269733), 'collisionsOnly': 0, 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10008: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-39.3800811768, -22.8855381012, 16.0659122467), 'hpr': Point3(90.0, 0.0, 90.0), 'scale': Vec3(0.560864269733, 0.560864269733, 0.560864269733), 'collisionsOnly': 0, 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10009: {'type': 'model', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-39.3062858582, 22.1807098389, 13.6092739105), 'hpr': Point3(90.0, 0.0, 270.0), 'scale': Point3(0.560000002384, 0.560864269733, 0.560864269733), 'collisionsOnly': 0, 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10010: {'type': 'model', 'name': 'nearLeft', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-41.8199996948, 16.5434036255, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.28777551651, 2.28777551651, 2.28777551651), 'collisionsOnly': 1, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10011: {'type': 'model', 'name': 'nearRight', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-41.8199996948, -16.5400009155, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.28777551651, 2.28777551651, 2.28777551651), 'collisionsOnly': 1, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10002: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'collisions', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintDuctRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintDuctRoom_Battle00_Cogs.py index d7a6975b..b610c458 100644 --- a/toontown/src/coghq/CashbotMintDuctRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintDuctRoom_Battle00_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintDuctRoom_Battle01.py b/toontown/src/coghq/CashbotMintDuctRoom_Battle01.py index 8412fc68..e226c37c 100644 --- a/toontown/src/coghq/CashbotMintDuctRoom_Battle01.py +++ b/toontown/src/coghq/CashbotMintDuctRoom_Battle01.py @@ -1,188 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # LOCATOR - 10001: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/EXIT', - }, # end entity 10001 - # MINTPRODUCT - 10009: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(37.843006134,8.74360656738,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10009 - 10010: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(36.8768577576,-10.2692861557,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10010 - 10011: { - 'type': 'mintProduct', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(26.2384986877,-16.2085189819,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10011 - 10012: { - 'type': 'mintProduct', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(38.4032859802,-3.16089892387,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10012 - # MODEL - 10002: { - 'type': 'model', - 'name': 'vaultDoor', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10002 - 10004: { - 'type': 'model', - 'name': 'backRight', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(42.1358146667,-20.2375278473,0.275439172983), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam', - }, # end entity 10004 - 10005: { - 'type': 'model', - 'name': 'backLeft', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(38.4724159241,18.6007175446,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.44939172268,1.44939172268,1.44939172268), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10005 - 10006: { - 'type': 'model', - 'name': 'frontRight', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-42.3298530579,-20.0590000153,0.0695294439793), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.40563333035,1.40563333035,1.40563333035), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam', - }, # end entity 10006 - 10007: { - 'type': 'model', - 'name': 'frontLeft', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-42.3731651306,18.05443573,0.0688875243068), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam', - }, # end entity 10007 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10008: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10008 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE15a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT'}, 10009: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(37.843006134, 8.74360656738, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'mintId': 12500}, 10010: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10008, 'pos': Point3(36.8768577576, -10.2692861557, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10011: {'type': 'mintProduct', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10008, 'pos': Point3(26.2384986877, -16.2085189819, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10012: {'type': 'mintProduct', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10008, 'pos': Point3(38.4032859802, -3.16089892387, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10002: {'type': 'model', 'name': 'vaultDoor', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10004: {'type': 'model', 'name': 'backRight', 'comment': '', 'parentEntId': 10003, 'pos': Point3(42.1358146667, -20.2375278473, 0.275439172983), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam'}, 10005: {'type': 'model', 'name': 'backLeft', 'comment': '', 'parentEntId': 10003, 'pos': Point3(38.4724159241, 18.6007175446, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.44939172268, 1.44939172268, 1.44939172268), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10006: {'type': 'model', 'name': 'frontRight', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-42.3298530579, -20.0590000153, 0.0695294439793), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.40563333035, 1.40563333035, 1.40563333035), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam'}, 10007: {'type': 'model', 'name': 'frontLeft', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-42.3731651306, 18.05443573, 0.0688875243068), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10008: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintDuctRoom_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintDuctRoom_Battle01_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintDuctRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintDuctRoom_Battle01_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintEntrance_Action00.py b/toontown/src/coghq/CashbotMintEntrance_Action00.py index 7996e85d..738747cf 100644 --- a/toontown/src/coghq/CashbotMintEntrance_Action00.py +++ b/toontown/src/coghq/CashbotMintEntrance_Action00.py @@ -1,135 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE03a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ENTRANCEPOINT - 10000: { - 'type': 'entrancePoint', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'entranceId': 0, - 'radius': 15, - 'theta': 20, - }, # end entity 10000 - # MINTPRODUCT - 10001: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-11.4890069962,20.1173057556,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10001 - 10003: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-20.4286708832,12.2706327438,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10003 - 10007: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-19.2144012451,20.1173057556,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12700, - }, # end entity 10007 - # MODEL - 10006: { - 'type': 'model', - 'name': 'crateStack', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(10.5386743546,18.1184597015,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam', - }, # end entity 10006 - 10008: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(13.8522205353,-20.3127307892,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10008 - # NODEPATH - 10002: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10004: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10004 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE03a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10000: {'type': 'entrancePoint', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'entranceId': 0, 'radius': 15, 'theta': 20}, 10001: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-11.4890069962, 20.1173057556, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10003: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-20.4286708832, 12.2706327438, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10007: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-19.2144012451, 20.1173057556, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12700}, 10006: {'type': 'model', 'name': 'crateStack', 'comment': '', 'parentEntId': 10002, 'pos': Point3(10.5386743546, 18.1184597015, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam'}, 10008: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(13.8522205353, -20.3127307892, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10002: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintGearRoom_Action00.py b/toontown/src/coghq/CashbotMintGearRoom_Action00.py index 9a676870..454cfd26 100644 --- a/toontown/src/coghq/CashbotMintGearRoom_Action00.py +++ b/toontown/src/coghq/CashbotMintGearRoom_Action00.py @@ -1,300 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10007: { - 'type': 'attribModifier', - 'name': 'goonStrength', - 'comment': '', - 'parentEntId': 0, - 'attribName': 'strength', - 'recursive': 1, - 'typeName': 'goon', - 'value': '10', - }, # end entity 10007 - # GOON - 10002: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4.0, - }, # end entity 10002 - 10004: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10004 - 10006: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10006 - 10009: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10009 - # HEALBARREL - 10011: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(2.15899157524,2.29615116119,5.45938539505), - 'hpr': Vec3(331.109100342,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 8, - 'rewardPerGrabMax': 0, - }, # end entity 10011 - # MODEL - 10012: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(20.9361133575,13.8672618866,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.920000016689,0.920000016689,0.920000016689), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10012 - 10013: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(57.0218696594,5.15023899078,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(0.660517215729,0.660517215729,0.660517215729), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10013 - 10015: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-25.9598789215,59.4411621094,9.73551368713), - 'hpr': Vec3(274.089996338,0.0,0.0), - 'scale': Vec3(1.53790044785,1.53790044785,1.53790044785), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10015 - 10016: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(33.3394889832,-18.3643035889,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(0.660000026226,0.660000026226,0.660000026226), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam', - }, # end entity 10016 - 10017: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(169.699996948,0.0,0.0), - 'scale': Vec3(0.902469694614,0.902469694614,0.902469694614), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D4.bam', - }, # end entity 10017 - 10020: { - 'type': 'model', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(-12.071434021,0.0,0.0), - 'hpr': Vec3(288.434936523,0.0,0.0), - 'scale': Vec3(0.902469694614,0.902469694614,0.902469694614), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D4.bam', - }, # end entity 10020 - 10022: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(-5.97179174423,-60.3133621216,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(0.869391143322,0.869391143322,0.869391143322), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10022 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10010: { - 'type': 'nodepath', - 'name': 'healPuzzle', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(43.1796302795,0.0,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10010 - 10018: { - 'type': 'nodepath', - 'name': 'rightVertPipes', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(-16.4536571503,-45.3981781006,-8.39999961853), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(0.649999976158,0.649999976158,1.55999994278), - }, # end entity 10018 - 10021: { - 'type': 'nodepath', - 'name': 'rightPipes', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10021 - # PATH - 10001: { - 'type': 'path', - 'name': 'nearPace', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-59.7391967773,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10001 - 10003: { - 'type': 'path', - 'name': 'bowtie', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-40.0336875916,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pathIndex': 2, - 'pathScale': 1.0, - }, # end entity 10003 - 10005: { - 'type': 'path', - 'name': 'bridgePace', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-8.80618190765,-1.5122487545,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10005 - 10008: { - 'type': 'path', - 'name': 'farPace', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(7.5265827179,7.56240034103,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10008 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10007: {'type': 'attribModifier', 'name': 'goonStrength', 'comment': '', 'parentEntId': 0, 'attribName': 'strength', 'recursive': 1, 'typeName': 'goon', 'value': '10'}, 10002: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4.0}, 10004: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10006: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10005, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10009: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10011: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10012, 'pos': Point3(2.15899157524, 2.29615116119, 5.45938539505), 'hpr': Vec3(331.109100342, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 8, 'rewardPerGrabMax': 0}, 10012: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10010, 'pos': Point3(20.9361133575, 13.8672618866, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.920000016689, 0.920000016689, 0.920000016689), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10013: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(57.0218696594, 5.15023899078, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(0.660517215729, 0.660517215729, 0.660517215729), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10015: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-25.9598789215, 59.4411621094, 9.73551368713), 'hpr': Vec3(274.089996338, 0.0, 0.0), 'scale': Vec3(1.53790044785, 1.53790044785, 1.53790044785), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10016: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(33.3394889832, -18.3643035889, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(0.660000026226, 0.660000026226, 0.660000026226), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam'}, 10017: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10018, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(169.699996948, 0.0, 0.0), 'scale': Vec3(0.902469694614, 0.902469694614, 0.902469694614), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D4.bam'}, 10020: {'type': 'model', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10018, 'pos': Point3(-12.071434021, 0.0, 0.0), 'hpr': Vec3(288.434936523, 0.0, 0.0), 'scale': Vec3(0.902469694614, 0.902469694614, 0.902469694614), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D4.bam'}, 10022: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10021, 'pos': Point3(-5.97179174423, -60.3133621216, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(0.869391143322, 0.869391143322, 0.869391143322), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10000: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10010: {'type': 'nodepath', 'name': 'healPuzzle', 'comment': '', 'parentEntId': 0, 'pos': Point3(43.1796302795, 0.0, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10018: {'type': 'nodepath', 'name': 'rightVertPipes', 'comment': '', 'parentEntId': 10021, 'pos': Point3(-16.4536571503, -45.3981781006, -8.39999961853), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(0.649999976158, 0.649999976158, 1.55999994278)}, 10021: {'type': 'nodepath', 'name': 'rightPipes', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10001: {'type': 'path', 'name': 'nearPace', 'comment': '', 'parentEntId': 0, 'pos': Point3(-59.7391967773, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pathIndex': 3, 'pathScale': 1.0}, 10003: {'type': 'path', 'name': 'bowtie', 'comment': '', 'parentEntId': 0, 'pos': Point3(-40.0336875916, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pathIndex': 2, 'pathScale': 1.0}, 10005: {'type': 'path', 'name': 'bridgePace', 'comment': '', 'parentEntId': 0, 'pos': Point3(-8.80618190765, -1.5122487545, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pathIndex': 3, 'pathScale': 1.0}, 10008: {'type': 'path', 'name': 'farPace', 'comment': '', 'parentEntId': 0, 'pos': Point3(7.5265827179, 7.56240034103, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pathIndex': 3, 'pathScale': 1.0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintGearRoom_Battle00.py b/toontown/src/coghq/CashbotMintGearRoom_Battle00.py index b7ad1a22..88eaee85 100644 --- a/toontown/src/coghq/CashbotMintGearRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintGearRoom_Battle00.py @@ -1,113 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10001: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-27.3600006104,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10.0, - }, # end entity 10001 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(57.0218696594,3.79224324226,0.0), - 'hpr': Vec3(111.037513733,0.0,0.0), - 'scale': Vec3(1.72596073151,1.72596073151,1.72596073151), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/boiler_B1.bam', - }, # end entity 10002 - 10004: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-7.67323350906,-61.4041023254,0.207314386964), - 'hpr': Vec3(169.695159912,0.0,0.0), - 'scale': Vec3(1.9143627882,1.9143627882,1.9143627882), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/boiler_A2.bam', - }, # end entity 10004 - 10005: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-25.9598789215,44.8260116577,9.73551368713), - 'hpr': Vec3(94.0856170654,0.0,0.0), - 'scale': Vec3(1.53790044785,1.53790044785,1.53790044785), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10005 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-52.7907714844,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(-27.3600006104, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10.0}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(57.0218696594, 3.79224324226, 0.0), 'hpr': Vec3(111.037513733, 0.0, 0.0), 'scale': Vec3(1.72596073151, 1.72596073151, 1.72596073151), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/boiler_B1.bam'}, 10004: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-7.67323350906, -61.4041023254, 0.207314386964), 'hpr': Vec3(169.695159912, 0.0, 0.0), 'scale': Vec3(1.9143627882, 1.9143627882, 1.9143627882), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/boiler_A2.bam'}, 10005: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-25.9598789215, 44.8260116577, 9.73551368713), 'hpr': Vec3(94.0856170654, 0.0, 0.0), 'scale': Vec3(1.53790044785, 1.53790044785, 1.53790044785), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(-52.7907714844, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintGearRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintGearRoom_Battle00_Cogs.py index 93ca2f31..3dca97b0 100644 --- a/toontown/src/coghq/CashbotMintGearRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintGearRoom_Battle00_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintGearRoom_Battle01.py b/toontown/src/coghq/CashbotMintGearRoom_Battle01.py index 4fe43bab..6bdff3be 100644 --- a/toontown/src/coghq/CashbotMintGearRoom_Battle01.py +++ b/toontown/src/coghq/CashbotMintGearRoom_Battle01.py @@ -1,256 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # GAGBARREL - 10015: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.35536468029,1.03268241882,0.0), - 'hpr': Point3(99.4599990845,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 10, - }, # end entity 10015 - # GEAR - 10007: { - 'type': 'gear', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(2.0,-65.0800018311,11.0900001526), - 'hpr': Vec3(0.0,90.0,0.0), - 'scale': Point3(10.0,10.0,10.0), - 'degreesPerSec': 10.0, - 'gearScale': 1, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0, - }, # end entity 10007 - 10008: { - 'type': 'gear', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-15.0,-65.0800018311,15.0), - 'hpr': Vec3(0.0,90.0,0.0), - 'scale': Point3(10.0,10.0,10.0), - 'degreesPerSec': -10.0, - 'gearScale': 1, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0.26000000000000001, - }, # end entity 10008 - # HEALBARREL - 10016: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(2.0886592865,-5.19625711441,0.0), - 'hpr': Vec3(80.5376815796,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 7, - 'rewardPerGrabMax': 10, - }, # end entity 10016 - # LOCATOR - 10001: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/EXIT', - }, # end entity 10001 - # MINTPRODUCT - 10012: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10012 - 10013: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(33.1602783203,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10013 - 10014: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,-26.4398918152,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10014 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10002 - 10004: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(28.4207668304,0.886719465256,0.0890568122268), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.42410159111,1.42410159111,1.42410159111), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam', - }, # end entity 10004 - 10005: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(1.02179563046,-5.71805810928,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(0.912700533867,0.912700533867,0.912700533867), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam', - }, # end entity 10005 - 10006: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(28.0896816254,6.65470600128,0.0692733898759), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10006 - 10010: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-30.3416347504,-52.2014503479,4.94085407257), - 'hpr': Vec3(180.0,270.0,270.0), - 'scale': Vec3(0.496759712696,0.496759712696,0.496759712696), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10010 - 10017: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-47.7702331543,-15.7725839615,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(0.75,0.75,0.75), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10017 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-16.2589473724,49.1446685791,10.2881116867), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10009: { - 'type': 'nodepath', - 'name': 'barrels', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(39.311466217,1.05693364143,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10009 - 10011: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-24.7985076904,59.8468132019,10.0710220337), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10011 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE07a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10015: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.35536468029, 1.03268241882, 0.0), 'hpr': Point3(99.4599990845, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 10}, 10007: {'type': 'gear', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(2.0, -65.0800018311, 11.0900001526), 'hpr': Vec3(0.0, 90.0, 0.0), 'scale': Point3(10.0, 10.0, 10.0), 'degreesPerSec': 10.0, 'gearScale': 1, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0}, 10008: {'type': 'gear', 'name': 'copy of ', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-15.0, -65.0800018311, 15.0), 'hpr': Vec3(0.0, 90.0, 0.0), 'scale': Point3(10.0, 10.0, 10.0), 'degreesPerSec': -10.0, 'gearScale': 1, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0.26}, 10016: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10009, 'pos': Point3(2.0886592865, -5.19625711441, 0.0), 'hpr': Vec3(80.5376815796, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 7, 'rewardPerGrabMax': 10}, 10001: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT'}, 10012: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10013: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10011, 'pos': Point3(33.1602783203, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10014: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, -26.4398918152, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10004: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(28.4207668304, 0.886719465256, 0.0890568122268), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.42410159111, 1.42410159111, 1.42410159111), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam'}, 10005: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10004, 'pos': Point3(1.02179563046, -5.71805810928, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(0.912700533867, 0.912700533867, 0.912700533867), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam'}, 10006: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(28.0896816254, 6.65470600128, 0.0692733898759), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10010: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-30.3416347504, -52.2014503479, 4.94085407257), 'hpr': Vec3(180.0, 270.0, 270.0), 'scale': Vec3(0.496759712696, 0.496759712696, 0.496759712696), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10017: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-47.7702331543, -15.7725839615, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(0.75, 0.75, 0.75), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(-16.2589473724, 49.1446685791, 10.2881116867), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10009: {'type': 'nodepath', 'name': 'barrels', 'comment': '', 'parentEntId': 0, 'pos': Point3(39.311466217, 1.05693364143, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10011: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-24.7985076904, 59.8468132019, 10.0710220337), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintGearRoom_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintGearRoom_Battle01_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintGearRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintGearRoom_Battle01_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action00.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action00.py index b45f852a..aff8cb14 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action00.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action00.py @@ -1,263 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10009: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': '', - }, # end entity 10009 - 10017: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'attribName': 'scale', - 'recursive': 1, - 'typeName': 'model', - 'value': 'Vec3(.955,1,1)', - }, # end entity 10017 - # CRATE - 10015: { - 'type': 'crate', - 'name': '', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0.0,0.0,0.0), - 'scale': 0.92000000000000004, - 'crushCellId': None, - 'gridId': 10014, - 'modelType': 1, - 'pushable': 1, - }, # end entity 10015 - # GRID - 10014: { - 'type': 'grid', - 'name': 'crateGrid', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-6.73230838776,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellSize': 3.0, - 'numCol': 4, - 'numRow': 2, - }, # end entity 10014 - # HEALBARREL - 10005: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(19.0611743927,-20.78266716,0.0), - 'hpr': Vec3(160.016891479,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 8, - 'rewardPerGrabMax': 0, - }, # end entity 10005 - # MODEL - 10001: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-7.89672088623,21.0129165649,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10001 - 10002: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-17.8739471436,16.2802295685,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10002 - 10006: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(20.9172992706,20.2094459534,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10006 - 10007: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-18.3651504517,-19.2698841095,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10007 - 10018: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10018 - 10019: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(-5.72357320786,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10019 - 10020: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(5.71999979019,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10020 - 10021: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(11.4399995804,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10021 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'cratePuzzle', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10008: { - 'type': 'nodepath', - 'name': 'wall', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(13.4399995804,6.57999992371,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.95812249184,1.5,1.79999995232), - }, # end entity 10008 - # STOMPER - 10016: { - 'type': 'stomper', - 'name': '', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(-4.04936361313,3.45528435707,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'crushCellId': None, - 'damage': 6, - 'headScale': Point3(4.0,3.0,4.0), - 'modelPath': 0, - 'motion': 3, - 'period': 5.0, - 'phaseShift': 0.0, - 'range': 15.0, - 'shaftScale': Point3(0.75,10.0,0.75), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 1, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 10016 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10009: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10008, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': ''}, 10017: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10008, 'attribName': 'scale', 'recursive': 1, 'typeName': 'model', 'value': 'Vec3(.955,1,1)'}, 10015: {'type': 'crate', 'name': '', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, 0.0, 0.0), 'scale': 0.92, 'crushCellId': None, 'gridId': 10014, 'modelType': 1, 'pushable': 1}, 10014: {'type': 'grid', 'name': 'crateGrid', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-6.73230838776, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellSize': 3.0, 'numCol': 4, 'numRow': 2}, 10005: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(19.0611743927, -20.78266716, 0.0), 'hpr': Vec3(160.016891479, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 8, 'rewardPerGrabMax': 0}, 10001: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-7.89672088623, 21.0129165649, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10002: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-17.8739471436, 16.2802295685, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10006: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(20.9172992706, 20.2094459534, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10007: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-18.3651504517, -19.2698841095, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10018: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10019: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10008, 'pos': Point3(-5.72357320786, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10020: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10008, 'pos': Point3(5.71999979019, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10021: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10008, 'pos': Point3(11.4399995804, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10000: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10003: {'type': 'nodepath', 'name': 'cratePuzzle', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10008: {'type': 'nodepath', 'name': 'wall', 'comment': '', 'parentEntId': 0, 'pos': Point3(13.4399995804, 6.57999992371, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.95812249184, 1.5, 1.79999995232)}, 10016: {'type': 'stomper', 'name': '', 'comment': '', 'parentEntId': 10014, 'pos': Point3(-4.04936361313, 3.45528435707, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'crushCellId': None, 'damage': 6, 'headScale': Point3(4.0, 3.0, 4.0), 'modelPath': 0, 'motion': 3, 'period': 5.0, 'phaseShift': 0.0, 'range': 15.0, 'shaftScale': Point3(0.75, 10.0, 0.75), 'soundLen': 0, 'soundOn': 1, 'soundPath': 1, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action01.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action01.py index b27f6ddd..4ae98d39 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action01.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Action01.py @@ -1,317 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10000: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': '', - }, # end entity 10000 - 10001: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'attribName': 'scale', - 'recursive': 1, - 'typeName': 'model', - 'value': 'Vec3(.955,1,1)', - }, # end entity 10001 - 10019: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10015, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': '', - }, # end entity 10019 - # GEAR - 10006: { - 'type': 'gear', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'degreesPerSec': -4.0, - 'gearScale': 14.193780914463838, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0, - }, # end entity 10006 - 10007: { - 'type': 'gear', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,4.28999996185), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'degreesPerSec': 4.0, - 'gearScale': 14.193780914463838, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0, - }, # end entity 10007 - 10009: { - 'type': 'gear', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,8.57999992371), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'degreesPerSec': -4.0, - 'gearScale': 14.193780914463838, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0.055, - }, # end entity 10009 - 10014: { - 'type': 'gear', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,12.8699998856), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'degreesPerSec': 4.0, - 'gearScale': 14.193780914463838, - 'modelType': 'mint', - 'orientation': 'horizontal', - 'phaseShift': 0.059999999999999998, - }, # end entity 10014 - # HEALBARREL - 10018: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10017, - 'pos': Point3(-2.03643107414,2.34967470169,5.46433734894), - 'hpr': Vec3(34.1522636414,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10018 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(6.5,6.5,6.5), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam', - }, # end entity 10002 - 10005: { - 'type': 'model', - 'name': 'doorwayCrate', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(27.0090961456,0.850000023842,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10005 - 10008: { - 'type': 'model', - 'name': 'shaft', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,7.25891637802), - 'hpr': Vec3(0.0,0.0,180.0), - 'scale': Vec3(5.35842609406,5.35842609406,5.35842609406), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/MintGearPost.bam', - }, # end entity 10008 - 10010: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10010 - 10011: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-5.72357320786,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10011 - 10012: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(5.71999979019,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10012 - 10013: { - 'type': 'model', - 'name': 'copy of middle', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(11.4399995804,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.954999983311,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10013 - 10015: { - 'type': 'model', - 'name': 'crateStack', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-18.0376968384,20.2023410797,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10015 - 10016: { - 'type': 'model', - 'name': 'upper', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(0.0,0.0,5.42841148376), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10016 - 10017: { - 'type': 'model', - 'name': 'copy of upper', - 'comment': '', - 'parentEntId': 10016, - 'pos': Point3(0.0,0.0,5.43412637711), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10017 - 10021: { - 'type': 'model', - 'name': 'crateStack', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(21.064825058,20.1899757385,9.87216758728), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10021 - # NODEPATH - 10003: { - 'type': 'nodepath', - 'name': 'gears', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-3.18650078773,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10003 - 10004: { - 'type': 'nodepath', - 'name': 'wall', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(19.5468139648,6.37875938416,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.95812249184,1.5,1.79999995232), - }, # end entity 10004 - 10020: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10020 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10000: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10004, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': ''}, 10001: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10004, 'attribName': 'scale', 'recursive': 1, 'typeName': 'model', 'value': 'Vec3(.955,1,1)'}, 10019: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10015, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': ''}, 10006: {'type': 'gear', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'degreesPerSec': -4.0, 'gearScale': 14.193780914463838, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0}, 10007: {'type': 'gear', 'name': 'copy of ', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 4.28999996185), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'degreesPerSec': 4.0, 'gearScale': 14.193780914463838, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0}, 10009: {'type': 'gear', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 8.57999992371), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'degreesPerSec': -4.0, 'gearScale': 14.193780914463838, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0.055}, 10014: {'type': 'gear', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 12.8699998856), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'degreesPerSec': 4.0, 'gearScale': 14.193780914463838, 'modelType': 'mint', 'orientation': 'horizontal', 'phaseShift': 0.06}, 10018: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10017, 'pos': Point3(-2.03643107414, 2.34967470169, 5.46433734894), 'hpr': Vec3(34.1522636414, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(6.5, 6.5, 6.5), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam'}, 10005: {'type': 'model', 'name': 'doorwayCrate', 'comment': '', 'parentEntId': 0, 'pos': Point3(27.0090961456, 0.850000023842, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10008: {'type': 'model', 'name': 'shaft', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 7.25891637802), 'hpr': Vec3(0.0, 0.0, 180.0), 'scale': Vec3(5.35842609406, 5.35842609406, 5.35842609406), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/MintGearPost.bam'}, 10010: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10011: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-5.72357320786, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10012: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10004, 'pos': Point3(5.71999979019, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10013: {'type': 'model', 'name': 'copy of middle', 'comment': '', 'parentEntId': 10004, 'pos': Point3(11.4399995804, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.954999983311, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10015: {'type': 'model', 'name': 'crateStack', 'comment': '', 'parentEntId': 0, 'pos': Point3(-18.0376968384, 20.2023410797, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10016: {'type': 'model', 'name': 'upper', 'comment': '', 'parentEntId': 10015, 'pos': Point3(0.0, 0.0, 5.42841148376), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10017: {'type': 'model', 'name': 'copy of upper', 'comment': '', 'parentEntId': 10016, 'pos': Point3(0.0, 0.0, 5.43412637711), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10021: {'type': 'model', 'name': 'crateStack', 'comment': '', 'parentEntId': 10020, 'pos': Point3(21.064825058, 20.1899757385, 9.87216758728), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10003: {'type': 'nodepath', 'name': 'gears', 'comment': '', 'parentEntId': 0, 'pos': Point3(-3.18650078773, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10004: {'type': 'nodepath', 'name': 'wall', 'comment': '', 'parentEntId': 0, 'pos': Point3(19.5468139648, 6.37875938416, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.95812249184, 1.5, 1.79999995232)}, 10020: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00.py index 873fb6e3..bf579e11 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00.py @@ -1,125 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10004: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(23.908908844,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10, - }, # end entity 10004 - # MODEL - 10002: { - 'type': 'model', - 'name': 'crates', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(17.3283443451,20.1608715057,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10002 - 10003: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(-14.04317379,20.9443073273,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10003 - 10006: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-3.16324114799,-0.608929097652,5.57751512527), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10006 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10001: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10001 - 10005: { - 'type': 'nodepath', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': 1, - }, # end entity 10005 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10004: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(23.908908844, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10}, 10002: {'type': 'model', 'name': 'crates', 'comment': '', 'parentEntId': 10001, 'pos': Point3(17.3283443451, 20.1608715057, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10003: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(-14.04317379, 20.9443073273, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10006: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-3.16324114799, -0.608929097652, 5.57751512527), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10001: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10005: {'type': 'nodepath', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00_Cogs.py index 8b16f521..30130116 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle00_Cogs.py @@ -1,62 +1,8 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 BattleParent = 10005 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : BattleParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintSkelecogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': BattleParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintSkelecogLevel, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01.py index f98825b7..9c358ac9 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01.py @@ -1,209 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # LOCATOR - 10004: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/EXIT1', - }, # end entity 10004 - # MINTPRODUCT - 10013: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(-3.94549632072,18.2319583893,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10013 - 10014: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(3.85402703285,18.2319583893,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10014 - 10015: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(-18.5567684174,14.1500225067,6.5729341507), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10015 - # MODEL - 10001: { - 'type': 'model', - 'name': 'vaultDoor', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10001 - 10003: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(13.2311220169,20.3564720154,0.305192321539), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.21849691868,1.21849691868,1.21849691868), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam', - }, # end entity 10003 - 10007: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-17.5481491089,20.8210849762,0.00756931304932), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.30483365059,1.30483365059,1.30483365059), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10007 - 10008: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-1.55398654938,-4.84950685501,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.913593888283,0.913593888283,0.913593888283), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10008 - 10009: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-19.0412902832,-18.4314842224,0.00867449026555), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam', - }, # end entity 10009 - 10010: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(18.6662273407,-13.083732605,0.00570194004104), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam', - }, # end entity 10010 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'crates', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10005: { - 'type': 'nodepath', - 'name': 'battle', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': 1, - }, # end entity 10005 - 10011: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': 1, - }, # end entity 10011 - 10012: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10012 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE18a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10004: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT1'}, 10013: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10012, 'pos': Point3(-3.94549632072, 18.2319583893, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10014: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10012, 'pos': Point3(3.85402703285, 18.2319583893, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10015: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10012, 'pos': Point3(-18.5567684174, 14.1500225067, 6.5729341507), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10001: {'type': 'model', 'name': 'vaultDoor', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10003: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(13.2311220169, 20.3564720154, 0.305192321539), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.21849691868, 1.21849691868, 1.21849691868), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam'}, 10007: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-17.5481491089, 20.8210849762, 0.00756931304932), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.30483365059, 1.30483365059, 1.30483365059), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10008: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-1.55398654938, -4.84950685501, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.913593888283, 0.913593888283, 0.913593888283), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10009: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-19.0412902832, -18.4314842224, 0.00867449026555), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam'}, 10010: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10002, 'pos': Point3(18.6662273407, -13.083732605, 0.00570194004104), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/CBMetalCrate.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10002: {'type': 'nodepath', 'name': 'crates', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10005: {'type': 'nodepath', 'name': 'battle', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': 1}, 10011: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': 1}, 10012: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01_Cogs.py index acb2a864..5d0ca5ab 100644 --- a/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintLavaRoomFoyer_Battle01_Cogs.py @@ -1,62 +1,8 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 BattleParent = 10005 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : BattleParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': BattleParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLavaRoom_Action00.py b/toontown/src/coghq/CashbotMintLavaRoom_Action00.py index 93d86538..5bc6880d 100644 --- a/toontown/src/coghq/CashbotMintLavaRoom_Action00.py +++ b/toontown/src/coghq/CashbotMintLavaRoom_Action00.py @@ -1,150 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE19a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10005: { - 'type': 'attribModifier', - 'name': 'sinkDuration', - 'comment': '', - 'parentEntId': 10002, - 'attribName': 'sinkDuration', - 'recursive': 1, - 'typeName': 'sinkingPlatform', - 'value': '2.0', - }, # end entity 10005 - 10006: { - 'type': 'attribModifier', - 'name': 'riseDuration', - 'comment': '', - 'parentEntId': 10002, - 'attribName': 'riseDuration', - 'recursive': 1, - 'typeName': 'sinkingPlatform', - 'value': '2.0', - }, # end entity 10006 - # HEALBARREL - 10004: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-52.5099983215,-3.81641983986,4.99661874771), - 'hpr': Vec3(100.165977478,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 8, - 'rewardPerGrabMax': 0, - }, # end entity 10004 - # MODEL - 10008: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-24.928899765,-4.86700963974,-1.70696532726), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A5.bam', - }, # end entity 10008 - # NODEPATH - 10002: { - 'type': 'nodepath', - 'name': 'sinkingPlatforms', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(2.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.864239275455,0.864239275455,0.864239275455), - }, # end entity 10002 - 10007: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10007 - # SINKINGPLATFORM - 10000: { - 'type': 'sinkingPlatform', - 'name': 'plat1', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pauseBeforeRise': 1, - 'riseDuration': 2.0, - 'sinkDuration': 2.0, - 'verticalRange': 3.0, - }, # end entity 10000 - 10001: { - 'type': 'sinkingPlatform', - 'name': 'plat0', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(20.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pauseBeforeRise': 1, - 'riseDuration': 2.0, - 'sinkDuration': 2.0, - 'verticalRange': 3.0, - }, # end entity 10001 - 10003: { - 'type': 'sinkingPlatform', - 'name': 'plat2', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-20.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'pauseBeforeRise': 1, - 'riseDuration': 2.0, - 'sinkDuration': 2.0, - 'verticalRange': 3.0, - }, # end entity 10003 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE19a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10005: {'type': 'attribModifier', 'name': 'sinkDuration', 'comment': '', 'parentEntId': 10002, 'attribName': 'sinkDuration', 'recursive': 1, 'typeName': 'sinkingPlatform', 'value': '2.0'}, 10006: {'type': 'attribModifier', 'name': 'riseDuration', 'comment': '', 'parentEntId': 10002, 'attribName': 'riseDuration', 'recursive': 1, 'typeName': 'sinkingPlatform', 'value': '2.0'}, 10004: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(-52.5099983215, -3.81641983986, 4.99661874771), 'hpr': Vec3(100.165977478, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 8, 'rewardPerGrabMax': 0}, 10008: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-24.928899765, -4.86700963974, -1.70696532726), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A5.bam'}, 10002: {'type': 'nodepath', 'name': 'sinkingPlatforms', 'comment': '', 'parentEntId': 0, 'pos': Point3(2.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.864239275455, 0.864239275455, 0.864239275455)}, 10007: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10000: {'type': 'sinkingPlatform', 'name': 'plat1', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pauseBeforeRise': 1, 'riseDuration': 2.0, 'sinkDuration': 2.0, 'verticalRange': 3.0}, 10001: {'type': 'sinkingPlatform', 'name': 'plat0', 'comment': '', 'parentEntId': 10002, 'pos': Point3(20.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pauseBeforeRise': 1, 'riseDuration': 2.0, 'sinkDuration': 2.0, 'verticalRange': 3.0}, 10003: {'type': 'sinkingPlatform', 'name': 'plat2', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-20.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pauseBeforeRise': 1, 'riseDuration': 2.0, 'sinkDuration': 2.0, 'verticalRange': 3.0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLobby_Action00.py b/toontown/src/coghq/CashbotMintLobby_Action00.py index b6b134b9..49976a3b 100644 --- a/toontown/src/coghq/CashbotMintLobby_Action00.py +++ b/toontown/src/coghq/CashbotMintLobby_Action00.py @@ -1,2176 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10005: { - 'type': 'attribModifier', - 'name': 'stomperPeriod', - 'comment': '', - 'parentEntId': 10046, - 'attribName': 'period', - 'recursive': 1, - 'typeName': 'stomper', - 'value': '2.2', - }, # end entity 10005 - 10015: { - 'type': 'attribModifier', - 'name': 'stomperShaftScale', - 'comment': '', - 'parentEntId': 10046, - 'attribName': 'shaftScale', - 'recursive': 1, - 'typeName': 'stomper', - 'value': 'Vec3(1,5,1)', - }, # end entity 10015 - 10067: { - 'type': 'attribModifier', - 'name': 'stomperDamage', - 'comment': '', - 'parentEntId': 10000, - 'attribName': 'damage', - 'recursive': 1, - 'typeName': 'stomper', - 'value': '8', - }, # end entity 10067 - 10130: { - 'type': 'attribModifier', - 'name': '', - 'comment': '', - 'parentEntId': 10153, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': "'phase_10/models/cogHQ/CBMetalCrate2.bam'", - }, # end entity 10130 - 10145: { - 'type': 'attribModifier', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10007, - 'attribName': 'modelPath', - 'recursive': 1, - 'typeName': 'model', - 'value': "'phase_10/models/cogHQ/CBMetalCrate2.bam'", - }, # end entity 10145 - 10173: { - 'type': 'attribModifier', - 'name': 'copy of stomperShaftScale', - 'comment': '', - 'parentEntId': 10154, - 'attribName': 'shaftScale', - 'recursive': 1, - 'typeName': 'stomper', - 'value': 'Vec3(1,5,1)', - }, # end entity 10173 - # GAGBARREL - 10169: { - 'type': 'gagBarrel', - 'name': 'gag', - 'comment': '', - 'parentEntId': 10170, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(1.0,0.0,0.0), - 'scale': 1, - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 6, - }, # end entity 10169 - 10171: { - 'type': 'gagBarrel', - 'name': 'gagLeft', - 'comment': '', - 'parentEntId': 10170, - 'pos': Point3(-3.0,0.0,0.0), - 'hpr': Vec3(-6.0,0.0,0.0), - 'scale': 1, - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 6, - }, # end entity 10171 - 10172: { - 'type': 'gagBarrel', - 'name': 'gagRight', - 'comment': '', - 'parentEntId': 10170, - 'pos': Point3(3.0,0.0,0.0), - 'hpr': Vec3(9.0,0.0,0.0), - 'scale': 1, - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 'random', - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 6, - }, # end entity 10172 - # HEALBARREL - 10177: { - 'type': 'healBarrel', - 'name': 'healLeft', - 'comment': '', - 'parentEntId': 10170, - 'pos': Point3(-1.05319225788,0.0,4.12134313583), - 'hpr': Vec3(20.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 6, - }, # end entity 10177 - 10178: { - 'type': 'healBarrel', - 'name': 'healRight', - 'comment': '', - 'parentEntId': 10170, - 'pos': Point3(2.16605138779,0.0,4.12134313583), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 6, - }, # end entity 10178 - 10181: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-2.92873573303,110.585220337,5.00378036499), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 10, - 'rewardPerGrabMax': 0, - }, # end entity 10181 - # MINTSHELF - 10023: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10017, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10023 - 10026: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10017, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10026 - 10060: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10060 - 10061: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10059, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10061 - 10064: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10065, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10064 - 10066: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10065, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10066 - 10068: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10062, - 'pos': Point3(18.0,-1.0,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Point3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10068 - 10069: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10062, - 'pos': Point3(-18.0,-1.0,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Point3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10069 - 10093: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10092, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10093 - 10094: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10092, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10094 - 10096: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10095, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10096 - 10097: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10095, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10097 - 10099: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10098, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10099 - 10100: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10098, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10100 - 10103: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10101, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10103 - 10159: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10157, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10159 - 10161: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10160, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10161 - 10162: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10160, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10162 - 10164: { - 'type': 'mintShelf', - 'name': 'left', - 'comment': '', - 'parentEntId': 10163, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10164 - 10165: { - 'type': 'mintShelf', - 'name': 'right', - 'comment': '', - 'parentEntId': 10163, - 'pos': Point3(11.0,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'mintId': 12500, - }, # end entity 10165 - # MODEL - 10001: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10001 - 10002: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10002 - 10003: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10003 - 10008: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10008 - 10009: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10009 - 10011: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10011 - 10012: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10012 - 10013: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10013 - 10014: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10014 - 10024: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10024 - 10025: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10025 - 10027: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10027 - 10028: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10028 - 10029: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10029 - 10030: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10030 - 10036: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10036 - 10037: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10037 - 10038: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10033, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10038 - 10039: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10034, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10039 - 10040: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10034, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10040 - 10041: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10034, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10041 - 10042: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10042 - 10043: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10043 - 10048: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10048 - 10049: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10049 - 10050: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10050 - 10051: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10051 - 10052: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10047, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10052 - 10053: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10047, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10053 - 10076: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10075, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10076 - 10077: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10075, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10077 - 10078: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10075, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10078 - 10079: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10047, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10079 - 10084: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10081, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10084 - 10085: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10081, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10085 - 10086: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10081, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10086 - 10087: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10082, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10087 - 10088: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10082, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10088 - 10089: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10082, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10089 - 10090: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10083, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10090 - 10091: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10083, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10091 - 10102: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10072, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10102 - 10108: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10105, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10108 - 10109: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10105, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10109 - 10110: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10072, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10110 - 10111: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10106, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10111 - 10112: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10106, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10112 - 10113: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10072, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10113 - 10114: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10107, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10114 - 10115: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10107, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10115 - 10116: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10107, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10116 - 10121: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10118, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10121 - 10122: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10118, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10122 - 10123: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10118, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10123 - 10124: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10119, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10124 - 10125: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10119, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10125 - 10126: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10119, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10126 - 10127: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10120, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10127 - 10128: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10120, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10128 - 10129: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10073, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10129 - 10131: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10073, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10131 - 10132: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10074, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10132 - 10133: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10074, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10133 - 10134: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10074, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10134 - 10139: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10136, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10139 - 10140: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10136, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10140 - 10141: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10136, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10141 - 10143: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10137, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10143 - 10146: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10137, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10146 - 10147: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10138, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10147 - 10148: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10138, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10148 - 10149: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10144, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10149 - 10150: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10144, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10150 - 10151: { - 'type': 'model', - 'name': 'right', - 'comment': '', - 'parentEntId': 10144, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10151 - 10152: { - 'type': 'model', - 'name': 'middle', - 'comment': '', - 'parentEntId': 10138, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10152 - 10158: { - 'type': 'model', - 'name': 'left', - 'comment': '', - 'parentEntId': 10157, - 'pos': Point3(-11.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.34000003338,1.34000003338,1.34000003338), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/shelf_A1.bam', - }, # end entity 10158 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'crateField', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,-51.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10000 - 10004: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - 10006: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10006 - 10007: { - 'type': 'nodepath', - 'name': 'crates', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,0.800000011921), - }, # end entity 10007 - 10010: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10018, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10010 - 10017: { - 'type': 'nodepath', - 'name': 'wall5', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,90.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10017 - 10018: { - 'type': 'nodepath', - 'name': 'crateSquare0', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10018 - 10019: { - 'type': 'nodepath', - 'name': 'crateSquare1', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10019 - 10020: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10020 - 10021: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10021 - 10022: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10022 - 10031: { - 'type': 'nodepath', - 'name': 'crateSquare3', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,54.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10031 - 10032: { - 'type': 'nodepath', - 'name': 'crateSquare2', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,36.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10032 - 10033: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10033 - 10034: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10034 - 10035: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10035 - 10044: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10044 - 10045: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10045 - 10046: { - 'type': 'nodepath', - 'name': 'stompers', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-1.0,0.0,4.40000009537), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10046 - 10047: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10047 - 10059: { - 'type': 'nodepath', - 'name': 'wall6', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,108.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10059 - 10062: { - 'type': 'nodepath', - 'name': 'wall7', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,124.5,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.39999997616,1.0), - }, # end entity 10062 - 10063: { - 'type': 'nodepath', - 'name': 'walls', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,-0.019999999553,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10063 - 10065: { - 'type': 'nodepath', - 'name': 'wall0', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10065 - 10070: { - 'type': 'nodepath', - 'name': 'leftBranch', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(-17.8978881836,72.0,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10070 - 10071: { - 'type': 'nodepath', - 'name': 'crateSquare0', - 'comment': 'Y=N*18', - 'parentEntId': 10153, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10071 - 10072: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10071, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10072 - 10073: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10071, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10073 - 10074: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10071, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10074 - 10075: { - 'type': 'nodepath', - 'name': 'frontCrateRow', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,-12.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.844285488129,1.0,1.0), - }, # end entity 10075 - 10080: { - 'type': 'nodepath', - 'name': 'crateSquare4', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,72.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10080 - 10081: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10080, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10081 - 10082: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10080, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10082 - 10083: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10080, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10083 - 10092: { - 'type': 'nodepath', - 'name': 'wall1', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10092 - 10095: { - 'type': 'nodepath', - 'name': 'wall2', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,36.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10095 - 10098: { - 'type': 'nodepath', - 'name': 'wall3', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,54.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10098 - 10101: { - 'type': 'nodepath', - 'name': 'wall4', - 'comment': '', - 'parentEntId': 10063, - 'pos': Point3(0.0,72.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10101 - 10104: { - 'type': 'nodepath', - 'name': 'crateSquare5', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,90.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10104 - 10105: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10104, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10105 - 10106: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10104, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10106 - 10107: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10104, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10107 - 10117: { - 'type': 'nodepath', - 'name': 'crateSquare6', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,108.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10117 - 10118: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10117, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10118 - 10119: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10117, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10119 - 10120: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10117, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10120 - 10135: { - 'type': 'nodepath', - 'name': 'crateSquare1', - 'comment': 'Y=N*18', - 'parentEntId': 10153, - 'pos': Point3(0.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10135 - 10136: { - 'type': 'nodepath', - 'name': 'row2', - 'comment': '', - 'parentEntId': 10135, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10136 - 10137: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10135, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10137 - 10138: { - 'type': 'nodepath', - 'name': 'row1', - 'comment': '', - 'parentEntId': 10135, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10138 - 10142: { - 'type': 'nodepath', - 'name': 'crateSquare7', - 'comment': 'Y=N*18', - 'parentEntId': 10007, - 'pos': Point3(0.0,126.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10142 - 10144: { - 'type': 'nodepath', - 'name': 'row0', - 'comment': '', - 'parentEntId': 10142, - 'pos': Point3(0.0,-6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10144 - 10153: { - 'type': 'nodepath', - 'name': 'crates', - 'comment': '', - 'parentEntId': 10070, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,0.800000011921), - }, # end entity 10153 - 10154: { - 'type': 'nodepath', - 'name': 'stompers', - 'comment': '', - 'parentEntId': 10070, - 'pos': Point3(-1.0,0.0,4.40000009537), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10154 - 10156: { - 'type': 'nodepath', - 'name': 'walls', - 'comment': '', - 'parentEntId': 10070, - 'pos': Point3(0.0,6.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10156 - 10157: { - 'type': 'nodepath', - 'name': 'wall0', - 'comment': '', - 'parentEntId': 10156, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10157 - 10160: { - 'type': 'nodepath', - 'name': 'wall1', - 'comment': '', - 'parentEntId': 10156, - 'pos': Point3(0.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10160 - 10163: { - 'type': 'nodepath', - 'name': 'wall2', - 'comment': '', - 'parentEntId': 10156, - 'pos': Point3(0.0,36.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10163 - 10168: { - 'type': 'nodepath', - 'name': 'safeArea', - 'comment': '', - 'parentEntId': 10070, - 'pos': Point3(0.0,40.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10168 - 10170: { - 'type': 'nodepath', - 'name': 'barrels', - 'comment': '', - 'parentEntId': 10168, - 'pos': Point3(0.0,9.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10170 - # STOMPER - 10016: { - 'type': 'stomper', - 'name': 'stomper6', - 'comment': 'Y=N*18', - 'parentEntId': 10046, - 'pos': Point3(1.0,108.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10016 - 10054: { - 'type': 'stomper', - 'name': 'stomper1', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(1.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10054 - 10055: { - 'type': 'stomper', - 'name': 'stomper0', - 'comment': 'Y=N*18', - 'parentEntId': 10046, - 'pos': Point3(1.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10055 - 10056: { - 'type': 'stomper', - 'name': 'stomper2', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(1.0,36.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10056 - 10057: { - 'type': 'stomper', - 'name': 'stomper3', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(1.0,54.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10057 - 10058: { - 'type': 'stomper', - 'name': 'stomper4', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(1.0,72.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10058 - 10155: { - 'type': 'stomper', - 'name': 'stomper5', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(1.0,90.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10155 - 10166: { - 'type': 'stomper', - 'name': 'stomper0', - 'comment': 'Y=N*18', - 'parentEntId': 10154, - 'pos': Point3(1.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10166 - 10167: { - 'type': 'stomper', - 'name': 'stomper1', - 'comment': 'Y=N*18', - 'parentEntId': 10154, - 'pos': Point3(1.0,18.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'animateShadow': 1, - 'crushCellId': None, - 'damage': 8, - 'headScale': Point3(9.0,9.0,9.0), - 'modelPath': 0, - 'motion': 2, - 'period': 2.2000000000000002, - 'phaseShift': 0.0, - 'range': 13.0, - 'removeCamBarrierCollisions': 1, - 'removeHeadFloor': 1, - 'shaftScale': Vec3(1.0,5.0,1.0), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10167 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10005: {'type': 'attribModifier', 'name': 'stomperPeriod', 'comment': '', 'parentEntId': 10046, 'attribName': 'period', 'recursive': 1, 'typeName': 'stomper', 'value': '2.2'}, 10015: {'type': 'attribModifier', 'name': 'stomperShaftScale', 'comment': '', 'parentEntId': 10046, 'attribName': 'shaftScale', 'recursive': 1, 'typeName': 'stomper', 'value': 'Vec3(1,5,1)'}, 10067: {'type': 'attribModifier', 'name': 'stomperDamage', 'comment': '', 'parentEntId': 10000, 'attribName': 'damage', 'recursive': 1, 'typeName': 'stomper', 'value': '8'}, 10130: {'type': 'attribModifier', 'name': '', 'comment': '', 'parentEntId': 10153, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': "'phase_10/models/cogHQ/CBMetalCrate2.bam'"}, 10145: {'type': 'attribModifier', 'name': 'copy of ', 'comment': '', 'parentEntId': 10007, 'attribName': 'modelPath', 'recursive': 1, 'typeName': 'model', 'value': "'phase_10/models/cogHQ/CBMetalCrate2.bam'"}, 10173: {'type': 'attribModifier', 'name': 'copy of stomperShaftScale', 'comment': '', 'parentEntId': 10154, 'attribName': 'shaftScale', 'recursive': 1, 'typeName': 'stomper', 'value': 'Vec3(1,5,1)'}, 10169: {'type': 'gagBarrel', 'name': 'gag', 'comment': '', 'parentEntId': 10170, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(1.0, 0.0, 0.0), 'scale': 1, 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 6}, 10171: {'type': 'gagBarrel', 'name': 'gagLeft', 'comment': '', 'parentEntId': 10170, 'pos': Point3(-3.0, 0.0, 0.0), 'hpr': Vec3(-6.0, 0.0, 0.0), 'scale': 1, 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 6}, 10172: {'type': 'gagBarrel', 'name': 'gagRight', 'comment': '', 'parentEntId': 10170, 'pos': Point3(3.0, 0.0, 0.0), 'hpr': Vec3(9.0, 0.0, 0.0), 'scale': 1, 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 'random', 'rewardPerGrab': 5, 'rewardPerGrabMax': 6}, 10177: {'type': 'healBarrel', 'name': 'healLeft', 'comment': '', 'parentEntId': 10170, 'pos': Point3(-1.05319225788, 0.0, 4.12134313583), 'hpr': Vec3(20.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 6}, 10178: {'type': 'healBarrel', 'name': 'healRight', 'comment': '', 'parentEntId': 10170, 'pos': Point3(2.16605138779, 0.0, 4.12134313583), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 6}, 10181: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(-2.92873573303, 110.585220337, 5.00378036499), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 10, 'rewardPerGrabMax': 0}, 10023: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10017, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10026: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10017, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10060: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10059, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10061: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10059, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10064: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10065, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10066: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10065, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10068: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10062, 'pos': Point3(18.0, -1.0, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Point3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10069: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10062, 'pos': Point3(-18.0, -1.0, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Point3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10093: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10092, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10094: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10092, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10096: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10095, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10097: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10095, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10099: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10098, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10100: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10098, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10103: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10101, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10159: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10157, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10161: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10160, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10162: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10160, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10164: {'type': 'mintShelf', 'name': 'left', 'comment': '', 'parentEntId': 10163, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10165: {'type': 'mintShelf', 'name': 'right', 'comment': '', 'parentEntId': 10163, 'pos': Point3(11.0, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'mintId': 12500}, 10001: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10002: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10004, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10003: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10008: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10006, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10009: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10006, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10011: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10010, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10012: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10010, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10013: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10014: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10022, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10024: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10020, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10025: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10020, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10027: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10021, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10028: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10021, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10029: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10022, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10030: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10022, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10036: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10033, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10037: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10033, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10038: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10033, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10039: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10034, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10040: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10034, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10041: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10034, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10042: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10035, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10043: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10035, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10048: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10044, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10049: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10044, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10050: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10051: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10045, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10052: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10047, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10053: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10047, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10076: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10075, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10077: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10075, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10078: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10075, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10079: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10047, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10084: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10081, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10085: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10081, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10086: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10081, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10087: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10082, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10088: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10082, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10089: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10082, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10090: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10083, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10091: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10083, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10102: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10072, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10108: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10105, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10109: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10105, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10110: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10072, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10111: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10106, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10112: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10106, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10113: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10072, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10114: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10107, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10115: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10107, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10116: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10107, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10121: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10118, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10122: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10118, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10123: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10118, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10124: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10119, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10125: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10119, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10126: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10119, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10127: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10120, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10128: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10120, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10129: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10073, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10131: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10073, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10132: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10074, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10133: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10074, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10134: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10074, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10139: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10136, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10140: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10136, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10141: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10136, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10143: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10137, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10146: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10137, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10147: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10138, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10148: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10138, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10149: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10144, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10150: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10144, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10151: {'type': 'model', 'name': 'right', 'comment': '', 'parentEntId': 10144, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10152: {'type': 'model', 'name': 'middle', 'comment': '', 'parentEntId': 10138, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10158: {'type': 'model', 'name': 'left', 'comment': '', 'parentEntId': 10157, 'pos': Point3(-11.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.34000003338, 1.34000003338, 1.34000003338), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/shelf_A1.bam'}, 10000: {'type': 'nodepath', 'name': 'crateField', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, -51.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10004: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10018, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10006: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10018, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10007: {'type': 'nodepath', 'name': 'crates', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 0.800000011921)}, 10010: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10018, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10017: {'type': 'nodepath', 'name': 'wall5', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 90.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10018: {'type': 'nodepath', 'name': 'crateSquare0', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10019: {'type': 'nodepath', 'name': 'crateSquare1', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10020: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10019, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10021: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10019, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10022: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10019, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10031: {'type': 'nodepath', 'name': 'crateSquare3', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 54.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10032: {'type': 'nodepath', 'name': 'crateSquare2', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 36.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10033: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10034: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10035: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10044: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10031, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10045: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10031, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10046: {'type': 'nodepath', 'name': 'stompers', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-1.0, 0.0, 4.40000009537), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10047: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10031, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10059: {'type': 'nodepath', 'name': 'wall6', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 108.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10062: {'type': 'nodepath', 'name': 'wall7', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 124.5, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.39999997616, 1.0)}, 10063: {'type': 'nodepath', 'name': 'walls', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, -0.019999999553, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10065: {'type': 'nodepath', 'name': 'wall0', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10070: {'type': 'nodepath', 'name': 'leftBranch', 'comment': '', 'parentEntId': 10000, 'pos': Point3(-17.8978881836, 72.0, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10071: {'type': 'nodepath', 'name': 'crateSquare0', 'comment': 'Y=N*18', 'parentEntId': 10153, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10072: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10071, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10073: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10071, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10074: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10071, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10075: {'type': 'nodepath', 'name': 'frontCrateRow', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, -12.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.844285488129, 1.0, 1.0)}, 10080: {'type': 'nodepath', 'name': 'crateSquare4', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 72.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10081: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10080, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10082: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10080, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10083: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10080, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10092: {'type': 'nodepath', 'name': 'wall1', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10095: {'type': 'nodepath', 'name': 'wall2', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 36.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10098: {'type': 'nodepath', 'name': 'wall3', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 54.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10101: {'type': 'nodepath', 'name': 'wall4', 'comment': '', 'parentEntId': 10063, 'pos': Point3(0.0, 72.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10104: {'type': 'nodepath', 'name': 'crateSquare5', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 90.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10105: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10104, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10106: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10104, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10107: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10104, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10117: {'type': 'nodepath', 'name': 'crateSquare6', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 108.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10118: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10117, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10119: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10117, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10120: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10117, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10135: {'type': 'nodepath', 'name': 'crateSquare1', 'comment': 'Y=N*18', 'parentEntId': 10153, 'pos': Point3(0.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10136: {'type': 'nodepath', 'name': 'row2', 'comment': '', 'parentEntId': 10135, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10137: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10135, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10138: {'type': 'nodepath', 'name': 'row1', 'comment': '', 'parentEntId': 10135, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10142: {'type': 'nodepath', 'name': 'crateSquare7', 'comment': 'Y=N*18', 'parentEntId': 10007, 'pos': Point3(0.0, 126.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10144: {'type': 'nodepath', 'name': 'row0', 'comment': '', 'parentEntId': 10142, 'pos': Point3(0.0, -6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10153: {'type': 'nodepath', 'name': 'crates', 'comment': '', 'parentEntId': 10070, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 0.800000011921)}, 10154: {'type': 'nodepath', 'name': 'stompers', 'comment': '', 'parentEntId': 10070, 'pos': Point3(-1.0, 0.0, 4.40000009537), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10156: {'type': 'nodepath', 'name': 'walls', 'comment': '', 'parentEntId': 10070, 'pos': Point3(0.0, 6.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10157: {'type': 'nodepath', 'name': 'wall0', 'comment': '', 'parentEntId': 10156, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10160: {'type': 'nodepath', 'name': 'wall1', 'comment': '', 'parentEntId': 10156, 'pos': Point3(0.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10163: {'type': 'nodepath', 'name': 'wall2', 'comment': '', 'parentEntId': 10156, 'pos': Point3(0.0, 36.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10168: {'type': 'nodepath', 'name': 'safeArea', 'comment': '', 'parentEntId': 10070, 'pos': Point3(0.0, 40.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10170: {'type': 'nodepath', 'name': 'barrels', 'comment': '', 'parentEntId': 10168, 'pos': Point3(0.0, 9.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10016: {'type': 'stomper', 'name': 'stomper6', 'comment': 'Y=N*18', 'parentEntId': 10046, 'pos': Point3(1.0, 108.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10054: {'type': 'stomper', 'name': 'stomper1', 'comment': '', 'parentEntId': 10046, 'pos': Point3(1.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10055: {'type': 'stomper', 'name': 'stomper0', 'comment': 'Y=N*18', 'parentEntId': 10046, 'pos': Point3(1.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10056: {'type': 'stomper', 'name': 'stomper2', 'comment': '', 'parentEntId': 10046, 'pos': Point3(1.0, 36.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10057: {'type': 'stomper', 'name': 'stomper3', 'comment': '', 'parentEntId': 10046, 'pos': Point3(1.0, 54.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10058: {'type': 'stomper', 'name': 'stomper4', 'comment': '', 'parentEntId': 10046, 'pos': Point3(1.0, 72.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10155: {'type': 'stomper', 'name': 'stomper5', 'comment': '', 'parentEntId': 10046, 'pos': Point3(1.0, 90.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10166: {'type': 'stomper', 'name': 'stomper0', 'comment': 'Y=N*18', 'parentEntId': 10154, 'pos': Point3(1.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10167: {'type': 'stomper', 'name': 'stomper1', 'comment': 'Y=N*18', 'parentEntId': 10154, 'pos': Point3(1.0, 18.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'animateShadow': 1, 'crushCellId': None, 'damage': 8, 'headScale': Point3(9.0, 9.0, 9.0), 'modelPath': 0, 'motion': 2, 'period': 2.2, 'phaseShift': 0.0, 'range': 13.0, 'removeCamBarrierCollisions': 1, 'removeHeadFloor': 1, 'shaftScale': Vec3(1.0, 5.0, 1.0), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLobby_Battle00.py b/toontown/src/coghq/CashbotMintLobby_Battle00.py index 0ddcce7c..b2ecfa65 100644 --- a/toontown/src/coghq/CashbotMintLobby_Battle00.py +++ b/toontown/src/coghq/CashbotMintLobby_Battle00.py @@ -1,554 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10001: { - 'type': 'battleBlocker', - 'name': 'exitBlocker', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,76.2264404297,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10.0, - }, # end entity 10001 - 10021: { - 'type': 'battleBlocker', - 'name': 'middleBlocker', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(9.79564476013,7.17855405807,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.61347305775,0.225867271423,1.99822974205), - 'cellId': 1, - 'radius': 10.0, - }, # end entity 10021 - 10061: { - 'type': 'battleBlocker', - 'name': 'frontBlocker', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-45.6075019836,-22.7538051605,0.0), - 'hpr': Vec3(45.0,0.0,0.0), - 'scale': Vec3(1.61347305775,0.225867271423,1.99822974205), - 'cellId': 2, - 'radius': 10.0, - }, # end entity 10061 - # MINTPRODUCTPALLET - 10025: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(0.0,7.96000003815,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10025 - 10031: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(-32.7900009155,-5.48999977112,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10031 - 10032: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-25.0,9.05000019073,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10032 - 10033: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(26.8400001526,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10033 - # MINTSHELF - 10003: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-60.8400001526,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10003 - 10004: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10004 - 10005: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-47.4124145508,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10005 - 10006: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10006 - 10007: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-33.9436340332,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10007 - 10008: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10008 - 10009: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-20.4898967743,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10009 - 10010: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10010 - 10011: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(60.7196426392,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10011 - 10012: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10012 - 10013: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(33.2060928345,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10013 - 10014: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10014 - 10015: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(19.7813663483,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10015 - 10016: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10016 - 10017: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(-7.05515527725,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10017 - 10018: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10017, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10018 - 10019: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(6.35370635986,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10019 - 10020: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10020 - 10042: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(-7.05515527725,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10042 - 10043: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(-60.8400001526,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10043 - 10044: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(6.35370635986,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10044 - 10045: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(-47.4124145508,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10045 - 10046: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(-33.9436340332,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10046 - 10047: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(-20.4898967743,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10047 - 10048: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(60.7196426392,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10048 - 10049: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(33.2060928345,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10049 - 10050: { - 'type': 'mintShelf', - 'name': 'bookshelf', - 'comment': '', - 'parentEntId': 10041, - 'pos': Point3(19.7813663483,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10050 - 10051: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10042, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10051 - 10052: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10043, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10052 - 10053: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10044, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10053 - 10054: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10054 - 10055: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10046, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10055 - 10056: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10047, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10056 - 10057: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10057 - 10058: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10049, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10058 - 10059: { - 'type': 'mintShelf', - 'name': 'copy of bookshelf', - 'comment': '', - 'parentEntId': 10050, - 'pos': Point3(0.180000007153,6.85808324814,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10059 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,58.7970542908,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'backWall', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,22.0885009766,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10002 - 10022: { - 'type': 'nodepath', - 'name': 'middleCogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,7.5760216713,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Point3(1.0,1.0,1.0), - }, # end entity 10022 - 10023: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10023 - 10024: { - 'type': 'nodepath', - 'name': 'frontMoney', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(22.4126205444,-39.3388214111,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10024 - 10028: { - 'type': 'nodepath', - 'name': 'backMoney', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,48.498249054,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10028 - 10041: { - 'type': 'nodepath', - 'name': 'backWall', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,-6.69597911835,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10041 - 10060: { - 'type': 'nodepath', - 'name': 'frontCogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-28.8658733368,-31.173248291,0.0), - 'hpr': Vec3(51.3401908875,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10060 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'battleBlocker', 'name': 'exitBlocker', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 76.2264404297, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10.0}, 10021: {'type': 'battleBlocker', 'name': 'middleBlocker', 'comment': '', 'parentEntId': 0, 'pos': Point3(9.79564476013, 7.17855405807, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.61347305775, 0.225867271423, 1.99822974205), 'cellId': 1, 'radius': 10.0}, 10061: {'type': 'battleBlocker', 'name': 'frontBlocker', 'comment': '', 'parentEntId': 0, 'pos': Point3(-45.6075019836, -22.7538051605, 0.0), 'hpr': Vec3(45.0, 0.0, 0.0), 'scale': Vec3(1.61347305775, 0.225867271423, 1.99822974205), 'cellId': 2, 'radius': 10.0}, 10025: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10024, 'pos': Point3(0.0, 7.96000003815, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10031: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10024, 'pos': Point3(-32.7900009155, -5.48999977112, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10032: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-25.0, 9.05000019073, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10033: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10028, 'pos': Point3(26.8400001526, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10003: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-60.8400001526, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10004: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10005: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-47.4124145508, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10006: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10005, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10007: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-33.9436340332, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10008: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10009: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-20.4898967743, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10010: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10011: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(60.7196426392, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10012: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10013: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(33.2060928345, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10014: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10013, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10015: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(19.7813663483, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10016: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10015, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10017: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(-7.05515527725, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10018: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10017, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10019: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10002, 'pos': Point3(6.35370635986, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10020: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10019, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10042: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(-7.05515527725, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10043: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(-60.8400001526, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10044: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(6.35370635986, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10045: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(-47.4124145508, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10046: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(-33.9436340332, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10047: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(-20.4898967743, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10048: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(60.7196426392, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10049: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(33.2060928345, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10050: {'type': 'mintShelf', 'name': 'bookshelf', 'comment': '', 'parentEntId': 10041, 'pos': Point3(19.7813663483, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10051: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10042, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10052: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10043, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10053: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10044, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10054: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10055: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10046, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10056: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10047, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10057: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10048, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10058: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10049, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10059: {'type': 'mintShelf', 'name': 'copy of bookshelf', 'comment': '', 'parentEntId': 10050, 'pos': Point3(0.180000007153, 6.85808324814, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 58.7970542908, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10002: {'type': 'nodepath', 'name': 'backWall', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 22.0885009766, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10022: {'type': 'nodepath', 'name': 'middleCogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 7.5760216713, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10024: {'type': 'nodepath', 'name': 'frontMoney', 'comment': '', 'parentEntId': 10023, 'pos': Point3(22.4126205444, -39.3388214111, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10028: {'type': 'nodepath', 'name': 'backMoney', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 48.498249054, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10041: {'type': 'nodepath', 'name': 'backWall', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, -6.69597911835, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10060: {'type': 'nodepath', 'name': 'frontCogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(-28.8658733368, -31.173248291, 0.0), 'hpr': Vec3(51.3401908875, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLobby_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintLobby_Battle00_Cogs.py index 9a200808..1c4eb54f 100644 --- a/toontown/src/coghq/CashbotMintLobby_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintLobby_Battle00_Cogs.py @@ -1,153 +1,11 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 MidCogParent = 10022 FrontCogParent = 10060 - -# unique IDs for battle cells BattleCellId = 0 MidBattleCellId = 1 FrontBattleCellId = 2 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - MidBattleCellId : {'parentEntId' : MidCogParent, - 'pos' : Point3(0,0,0), - }, - FrontBattleCellId : {'parentEntId' : FrontCogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : MidCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : MidBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : MidCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : MidBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : MidCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : MidBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : MidCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : MidBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}, MidBattleCellId: {'parentEntId': MidCogParent, 'pos': Point3(0, 0, 0)}, FrontBattleCellId: {'parentEntId': FrontCogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': MidCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': MidBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': MidCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': MidBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': MidCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': MidBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': MidCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': MidBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLobby_Battle01.py b/toontown/src/coghq/CashbotMintLobby_Battle01.py index 53bde254..9aa6f5d6 100644 --- a/toontown/src/coghq/CashbotMintLobby_Battle01.py +++ b/toontown/src/coghq/CashbotMintLobby_Battle01.py @@ -1,289 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # LOCATOR - 10001: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/DGG.EXIT', - }, # end entity 10001 - # MINTPRODUCT - 10014: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(-7.80045461655,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10014 - 10015: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(15.7111005783,-2.0225315094,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10015 - 10016: { - 'type': 'mintProduct', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(6.66144704819,-1.54405653477,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10016 - # MINTPRODUCTPALLET - 10017: { - 'type': 'mintProductPallet', - 'name': '', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(34.8923339844,32.3863983154,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10017 - 10021: { - 'type': 'mintProductPallet', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(-34.8899993896,32.3863983154,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10021 - 10022: { - 'type': 'mintProductPallet', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(34.8923339844,-23.3355064392,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10022 - 10023: { - 'type': 'mintProductPallet', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(-34.8899993896,-23.3355064392,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10023 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10002 - 10005: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(26.7393283844,70.7373962402,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10005 - 10006: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(63.8051605225,33.5718955994,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10006 - 10007: { - 'type': 'model', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(63.7982444763,-19.1328792572,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10007 - 10008: { - 'type': 'model', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(26.769536972,-56.2981185913,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10008 - 10009: { - 'type': 'model', - 'name': 'copy of (4)', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-26.0181350708,-56.2504425049,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10009 - 10010: { - 'type': 'model', - 'name': 'copy of (5)', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-63.1796150208,-19.1894207001,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10010 - 10011: { - 'type': 'model', - 'name': 'copy of (6)', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-63.194984436,33.6143226624,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10011 - 10012: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-26.161315918,70.7677078247,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam', - }, # end entity 10012 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10004: { - 'type': 'nodepath', - 'name': 'posts', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - 10013: { - 'type': 'nodepath', - 'name': 'productByVault', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(0.0,67.5628051758,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10013 - 10020: { - 'type': 'nodepath', - 'name': 'product', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10020 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE04a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT'}, 10014: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10013, 'pos': Point3(-7.80045461655, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10015: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10013, 'pos': Point3(15.7111005783, -2.0225315094, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10016: {'type': 'mintProduct', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10013, 'pos': Point3(6.66144704819, -1.54405653477, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10017: {'type': 'mintProductPallet', 'name': '', 'comment': '', 'parentEntId': 10020, 'pos': Point3(34.8923339844, 32.3863983154, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10021: {'type': 'mintProductPallet', 'name': 'copy of ', 'comment': '', 'parentEntId': 10020, 'pos': Point3(-34.8899993896, 32.3863983154, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10022: {'type': 'mintProductPallet', 'name': 'copy of ', 'comment': '', 'parentEntId': 10020, 'pos': Point3(34.8923339844, -23.3355064392, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10023: {'type': 'mintProductPallet', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10020, 'pos': Point3(-34.8899993896, -23.3355064392, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10005: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10004, 'pos': Point3(26.7393283844, 70.7373962402, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10006: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10004, 'pos': Point3(63.8051605225, 33.5718955994, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10007: {'type': 'model', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10004, 'pos': Point3(63.7982444763, -19.1328792572, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10008: {'type': 'model', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10004, 'pos': Point3(26.769536972, -56.2981185913, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10009: {'type': 'model', 'name': 'copy of (4)', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-26.0181350708, -56.2504425049, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10010: {'type': 'model', 'name': 'copy of (5)', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-63.1796150208, -19.1894207001, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10011: {'type': 'model', 'name': 'copy of (6)', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-63.194984436, 33.6143226624, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10012: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-26.161315918, 70.7677078247, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'posts', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10013: {'type': 'nodepath', 'name': 'productByVault', 'comment': '', 'parentEntId': 10020, 'pos': Point3(0.0, 67.5628051758, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10020: {'type': 'nodepath', 'name': 'product', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintLobby_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintLobby_Battle01_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintLobby_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintLobby_Battle01_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintOilRoom_Battle00.py b/toontown/src/coghq/CashbotMintOilRoom_Battle00.py index 07b463fa..31071543 100644 --- a/toontown/src/coghq/CashbotMintOilRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintOilRoom_Battle00.py @@ -1,68 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE22a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # MODEL - 10001: { - 'type': 'model', - 'name': 'vaultDoor', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(7.2503657341,-35.8064537048,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10001 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': 1, - }, # end entity 10000 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE22a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'model', 'name': 'vaultDoor', 'comment': '', 'parentEntId': 0, 'pos': Point3(7.2503657341, -35.8064537048, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintOilRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintOilRoom_Battle00_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintOilRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintOilRoom_Battle00_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00.py b/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00.py index 46d5c050..f8030378 100644 --- a/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00.py +++ b/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00.py @@ -1,233 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE11a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # MINTPRODUCT - 10024: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(-4.0706076622,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10024 - # MINTSHELF - 10003: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10003 - 10005: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10005 - 10007: { - 'type': 'mintShelf', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(13.4306573868,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10007 - 10009: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(-13.4300003052,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10009 - 10013: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(-13.4300003052,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10013 - 10014: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10014 - 10015: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10015 - 10016: { - 'type': 'mintShelf', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(13.4306573868,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12600, - }, # end entity 10016 - # MODEL - 10001: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,22.2368240356,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10001 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10002 - 10004: { - 'type': 'nodepath', - 'name': 'backWall', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,19.0782051086,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10004 - 10006: { - 'type': 'nodepath', - 'name': 'rightShelves', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(17.2106304169,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10006 - 10008: { - 'type': 'nodepath', - 'name': 'leftShelves', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-17.4771251678,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10008 - 10010: { - 'type': 'nodepath', - 'name': 'frontWall', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,-19.1254119873,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10010 - 10011: { - 'type': 'nodepath', - 'name': 'leftShelves', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(-17.4771251678,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10011 - 10012: { - 'type': 'nodepath', - 'name': 'rightShelves', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(17.2106304169,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10012 - 10023: { - 'type': 'nodepath', - 'name': 'byVaultDoor', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,16.0373382568,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10023 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE11a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10024: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10023, 'pos': Point3(-4.0706076622, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10003: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10005: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10006, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10007: {'type': 'mintShelf', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10006, 'pos': Point3(13.4306573868, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10009: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10008, 'pos': Point3(-13.4300003052, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10013: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10011, 'pos': Point3(-13.4300003052, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10014: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10015: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10012, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10016: {'type': 'mintShelf', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10012, 'pos': Point3(13.4306573868, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12600}, 10001: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 22.2368240356, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10002: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'backWall', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 19.0782051086, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10006: {'type': 'nodepath', 'name': 'rightShelves', 'comment': '', 'parentEntId': 10004, 'pos': Point3(17.2106304169, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10008: {'type': 'nodepath', 'name': 'leftShelves', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-17.4771251678, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10010: {'type': 'nodepath', 'name': 'frontWall', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, -19.1254119873, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10011: {'type': 'nodepath', 'name': 'leftShelves', 'comment': '', 'parentEntId': 10010, 'pos': Point3(-17.4771251678, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10012: {'type': 'nodepath', 'name': 'rightShelves', 'comment': '', 'parentEntId': 10010, 'pos': Point3(17.2106304169, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10023: {'type': 'nodepath', 'name': 'byVaultDoor', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 16.0373382568, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintPaintMixerReward_Battle00_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPaintMixer_Action00.py b/toontown/src/coghq/CashbotMintPaintMixer_Action00.py index 996c5ba1..ca16674b 100644 --- a/toontown/src/coghq/CashbotMintPaintMixer_Action00.py +++ b/toontown/src/coghq/CashbotMintPaintMixer_Action00.py @@ -1,133 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE10a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # HEALBARREL - 10009: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(63.9741363525,-10.9343223572,9.97696113586), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 8, - 'rewardPerGrabMax': 0, - }, # end entity 10009 - 10010: { - 'type': 'healBarrel', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.0,0.0,4.13999986649), - 'hpr': Vec3(349.358764648,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 8, - 'rewardPerGrabMax': 0, - }, # end entity 10010 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'mixers', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-19.2397289276,0.0,5.53999996185), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.758001744747,0.758001744747,0.758001744747), - }, # end entity 10000 - # PAINTMIXER - 10004: { - 'type': 'paintMixer', - 'name': 'mixer0', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,10.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'easeInOut', - 'offset': Point3(20.0,20.0,0.0), - 'period': 8.0, - 'phaseShift': 0.0, - 'shaftScale': 1, - 'waitPercent': 0.10000000000000001, - }, # end entity 10004 - 10005: { - 'type': 'paintMixer', - 'name': 'mixer1', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(29.0,10.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'easeInOut', - 'offset': Point3(0.0,-20.0,0.0), - 'period': 8.0, - 'phaseShift': 0.5, - 'shaftScale': 1, - 'waitPercent': 0.10000000000000001, - }, # end entity 10005 - 10006: { - 'type': 'paintMixer', - 'name': 'mixer2', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(58.0,-8.94072246552,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'easeInOut', - 'offset': Point3(-20.0,-20.0,0.0), - 'period': 8.0, - 'phaseShift': 0.5, - 'shaftScale': 1, - 'waitPercent': 0.10000000000000001, - }, # end entity 10006 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE10a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10009: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(63.9741363525, -10.9343223572, 9.97696113586), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 8, 'rewardPerGrabMax': 0}, 10010: {'type': 'healBarrel', 'name': 'copy of ', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.0, 0.0, 4.13999986649), 'hpr': Vec3(349.358764648, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 8, 'rewardPerGrabMax': 0}, 10000: {'type': 'nodepath', 'name': 'mixers', 'comment': '', 'parentEntId': 0, 'pos': Point3(-19.2397289276, 0.0, 5.53999996185), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.758001744747, 0.758001744747, 0.758001744747)}, 10004: {'type': 'paintMixer', 'name': 'mixer0', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 10.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'easeInOut', 'offset': Point3(20.0, 20.0, 0.0), 'period': 8.0, 'phaseShift': 0.0, 'shaftScale': 1, 'waitPercent': 0.1}, 10005: {'type': 'paintMixer', 'name': 'mixer1', 'comment': '', 'parentEntId': 10000, 'pos': Point3(29.0, 10.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'easeInOut', 'offset': Point3(0.0, -20.0, 0.0), 'period': 8.0, 'phaseShift': 0.5, 'shaftScale': 1, 'waitPercent': 0.1}, 10006: {'type': 'paintMixer', 'name': 'mixer2', 'comment': '', 'parentEntId': 10000, 'pos': Point3(58.0, -8.94072246552, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'easeInOut', 'offset': Point3(-20.0, -20.0, 0.0), 'period': 8.0, 'phaseShift': 0.5, 'shaftScale': 1, 'waitPercent': 0.1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPipeRoom_Action00.py b/toontown/src/coghq/CashbotMintPipeRoom_Action00.py index 26dcc99f..355b0750 100644 --- a/toontown/src/coghq/CashbotMintPipeRoom_Action00.py +++ b/toontown/src/coghq/CashbotMintPipeRoom_Action00.py @@ -1,726 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10025: { - 'type': 'attribModifier', - 'name': 'strength', - 'comment': '', - 'parentEntId': 10002, - 'attribName': 'strength', - 'recursive': 1, - 'typeName': 'goon', - 'value': '10', - }, # end entity 10025 - # GOON - 10001: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10001 - 10005: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10005 - 10006: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10006 - 10014: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10014 - 10016: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10016 - 10018: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10017, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10018 - 10021: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10020, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10021 - 10024: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 10, - 'velocity': 4, - }, # end entity 10024 - # HEALBARREL - 10035: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10037, - 'pos': Point3(-56.3795814514,0.0,0.0), - 'hpr': Vec3(106.821411133,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 7, - 'rewardPerGrabMax': 8, - }, # end entity 10035 - 10036: { - 'type': 'healBarrel', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10037, - 'pos': Point3(15.3852472305,21.0357513428,0.0), - 'hpr': Vec3(52.4314079285,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 7, - 'rewardPerGrabMax': 8, - }, # end entity 10036 - # MODEL - 10029: { - 'type': 'model', - 'name': 'rightPillar', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,-22.3441867828,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10029 - 10030: { - 'type': 'model', - 'name': 'leftPillar', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,21.9451503754,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10030 - 10033: { - 'type': 'model', - 'name': 'backPillar', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(41.4432792664,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10033 - 10034: { - 'type': 'model', - 'name': 'frontPillar', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(-41.0848464966,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10034 - 10039: { - 'type': 'model', - 'name': 'rightPillar', - 'comment': '', - 'parentEntId': 10038, - 'pos': Point3(0.0,-66.8615875244,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10039 - 10040: { - 'type': 'model', - 'name': 'leftPillar', - 'comment': '', - 'parentEntId': 10038, - 'pos': Point3(0.0,67.0966033936,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10040 - 10042: { - 'type': 'model', - 'name': 'frontRightPillar', - 'comment': '', - 'parentEntId': 10043, - 'pos': Point3(0.0,-22.5711078644,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10042 - 10044: { - 'type': 'model', - 'name': 'frontLeftPillar', - 'comment': '', - 'parentEntId': 10043, - 'pos': Point3(0.0,22.1686630249,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10044 - 10046: { - 'type': 'model', - 'name': 'frontRightPillar', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.0,-22.5711078644,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10046 - 10047: { - 'type': 'model', - 'name': 'frontLeftPillar', - 'comment': '', - 'parentEntId': 10045, - 'pos': Point3(0.0,22.1686630249,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10047 - 10049: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(0.949898421764,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.29060935974,1.29060935974,1.29060935974), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam', - }, # end entity 10049 - 10050: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(-13.1818971634,-7.17138242722,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10050 - 10051: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10048, - 'pos': Point3(0.968334257603,-13.3785037994,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10051 - 10053: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(0.606362164021,-12.1353359222,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam', - }, # end entity 10053 - 10054: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(7.85215950012,20.0426883698,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.16659212112,1.16659212112,1.16659212112), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10054 - 10055: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(13.5166940689,-0.819138884544,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.51914477348,1.51914477348,1.51914477348), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam', - }, # end entity 10055 - 10056: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(10.8745326996,4.61703014374,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam', - }, # end entity 10056 - 10057: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(31.8470001221,-14.5645837784,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.1728117466,1.1728117466,1.1728117466), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam', - }, # end entity 10057 - 10058: { - 'type': 'model', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10052, - 'pos': Point3(31.9369258881,14.3037395477,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(1.1728117466,1.1728117466,1.1728117466), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam', - }, # end entity 10058 - # NODEPATH - 10002: { - 'type': 'nodepath', - 'name': 'goons', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10002 - 10007: { - 'type': 'nodepath', - 'name': 'rightElbow', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(43.3083152771,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10007 - 10008: { - 'type': 'nodepath', - 'name': 'leftElbow', - 'comment': '', - 'parentEntId': 10026, - 'pos': Point3(-38.578956604,-2.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10008 - 10009: { - 'type': 'nodepath', - 'name': 'nearRight', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(25.6041526794,-41.3753585815,0.0), - 'hpr': Vec3(320.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10009 - 10010: { - 'type': 'nodepath', - 'name': 'nearLeft', - 'comment': '', - 'parentEntId': 10026, - 'pos': Point3(-25.6000003815,-41.3800010681,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10010 - 10011: { - 'type': 'nodepath', - 'name': 'farRight', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(25.6000003815,41.3800010681,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10011 - 10012: { - 'type': 'nodepath', - 'name': 'farLeft', - 'comment': '', - 'parentEntId': 10026, - 'pos': Point3(-25.6000003815,41.3800010681,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10012 - 10019: { - 'type': 'nodepath', - 'name': 'entrance', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,-82.5020980835,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10019 - 10022: { - 'type': 'nodepath', - 'name': 'exit', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,88.4478759766,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10022 - 10026: { - 'type': 'nodepath', - 'name': 'left', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10026 - 10027: { - 'type': 'nodepath', - 'name': 'right', - 'comment': '', - 'parentEntId': 10002, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10027 - 10028: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,-1.80477809906,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10028 - 10031: { - 'type': 'nodepath', - 'name': 'pillars', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10031 - 10032: { - 'type': 'nodepath', - 'name': 'centerPillars', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10032 - 10037: { - 'type': 'nodepath', - 'name': 'barrels', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(102.779998779,-1.24000000954,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10037 - 10038: { - 'type': 'nodepath', - 'name': 'outerPillars', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10038 - 10043: { - 'type': 'nodepath', - 'name': 'frontPillars', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(-89.9665527344,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10043 - 10045: { - 'type': 'nodepath', - 'name': 'backPillars', - 'comment': '', - 'parentEntId': 10031, - 'pos': Point3(89.9700012207,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10045 - 10048: { - 'type': 'nodepath', - 'name': 'frontProps', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-100.412567139,-10.8835134506,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.66847121716,1.66847121716,1.66847121716), - }, # end entity 10048 - 10052: { - 'type': 'nodepath', - 'name': 'backProps', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(100.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10052 - # PATH - 10000: { - 'type': 'path', - 'name': 'triangle', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 1, - 'pathScale': 1.5, - }, # end entity 10000 - 10003: { - 'type': 'path', - 'name': 'square', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 10003 - 10004: { - 'type': 'path', - 'name': 'bowtie', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 2, - 'pathScale': 1.0, - }, # end entity 10004 - 10013: { - 'type': 'path', - 'name': 'square', - 'comment': '', - 'parentEntId': 10010, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 10013 - 10015: { - 'type': 'path', - 'name': 'square', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 10015 - 10017: { - 'type': 'path', - 'name': 'square', - 'comment': '', - 'parentEntId': 10012, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 10017 - 10020: { - 'type': 'path', - 'name': 'pace', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10020 - 10023: { - 'type': 'path', - 'name': 'pace', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10023 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10025: {'type': 'attribModifier', 'name': 'strength', 'comment': '', 'parentEntId': 10002, 'attribName': 'strength', 'recursive': 1, 'typeName': 'goon', 'value': '10'}, 10001: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10005: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10006: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10014: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10013, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10016: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10015, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10018: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10017, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10021: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10020, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10024: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 10035: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 10037, 'pos': Point3(-56.3795814514, 0.0, 0.0), 'hpr': Vec3(106.821411133, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 7, 'rewardPerGrabMax': 8}, 10036: {'type': 'healBarrel', 'name': 'copy of ', 'comment': '', 'parentEntId': 10037, 'pos': Point3(15.3852472305, 21.0357513428, 0.0), 'hpr': Vec3(52.4314079285, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 7, 'rewardPerGrabMax': 8}, 10029: {'type': 'model', 'name': 'rightPillar', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, -22.3441867828, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10030: {'type': 'model', 'name': 'leftPillar', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, 21.9451503754, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10033: {'type': 'model', 'name': 'backPillar', 'comment': '', 'parentEntId': 10032, 'pos': Point3(41.4432792664, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10034: {'type': 'model', 'name': 'frontPillar', 'comment': '', 'parentEntId': 10032, 'pos': Point3(-41.0848464966, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10039: {'type': 'model', 'name': 'rightPillar', 'comment': '', 'parentEntId': 10038, 'pos': Point3(0.0, -66.8615875244, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10040: {'type': 'model', 'name': 'leftPillar', 'comment': '', 'parentEntId': 10038, 'pos': Point3(0.0, 67.0966033936, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10042: {'type': 'model', 'name': 'frontRightPillar', 'comment': '', 'parentEntId': 10043, 'pos': Point3(0.0, -22.5711078644, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10044: {'type': 'model', 'name': 'frontLeftPillar', 'comment': '', 'parentEntId': 10043, 'pos': Point3(0.0, 22.1686630249, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10046: {'type': 'model', 'name': 'frontRightPillar', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.0, -22.5711078644, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10047: {'type': 'model', 'name': 'frontLeftPillar', 'comment': '', 'parentEntId': 10045, 'pos': Point3(0.0, 22.1686630249, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10049: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10048, 'pos': Point3(0.949898421764, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.29060935974, 1.29060935974, 1.29060935974), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_F1.bam'}, 10050: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10048, 'pos': Point3(-13.1818971634, -7.17138242722, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10051: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10048, 'pos': Point3(0.968334257603, -13.3785037994, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10053: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10052, 'pos': Point3(0.606362164021, -12.1353359222, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_G1.bam'}, 10054: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10052, 'pos': Point3(7.85215950012, 20.0426883698, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.16659212112, 1.16659212112, 1.16659212112), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10055: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10052, 'pos': Point3(13.5166940689, -0.819138884544, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.51914477348, 1.51914477348, 1.51914477348), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_D.bam'}, 10056: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10052, 'pos': Point3(10.8745326996, 4.61703014374, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_C1.bam'}, 10057: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10052, 'pos': Point3(31.8470001221, -14.5645837784, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.1728117466, 1.1728117466, 1.1728117466), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam'}, 10058: {'type': 'model', 'name': 'copy of ', 'comment': '', 'parentEntId': 10052, 'pos': Point3(31.9369258881, 14.3037395477, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(1.1728117466, 1.1728117466, 1.1728117466), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_A.bam'}, 10002: {'type': 'nodepath', 'name': 'goons', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10007: {'type': 'nodepath', 'name': 'rightElbow', 'comment': '', 'parentEntId': 10027, 'pos': Point3(43.3083152771, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10008: {'type': 'nodepath', 'name': 'leftElbow', 'comment': '', 'parentEntId': 10026, 'pos': Point3(-38.578956604, -2.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10009: {'type': 'nodepath', 'name': 'nearRight', 'comment': '', 'parentEntId': 10027, 'pos': Point3(25.6041526794, -41.3753585815, 0.0), 'hpr': Vec3(320.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10010: {'type': 'nodepath', 'name': 'nearLeft', 'comment': '', 'parentEntId': 10026, 'pos': Point3(-25.6000003815, -41.3800010681, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10011: {'type': 'nodepath', 'name': 'farRight', 'comment': '', 'parentEntId': 10027, 'pos': Point3(25.6000003815, 41.3800010681, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10012: {'type': 'nodepath', 'name': 'farLeft', 'comment': '', 'parentEntId': 10026, 'pos': Point3(-25.6000003815, 41.3800010681, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10019: {'type': 'nodepath', 'name': 'entrance', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, -82.5020980835, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10022: {'type': 'nodepath', 'name': 'exit', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 88.4478759766, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10026: {'type': 'nodepath', 'name': 'left', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10027: {'type': 'nodepath', 'name': 'right', 'comment': '', 'parentEntId': 10002, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10028: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, -1.80477809906, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10031: {'type': 'nodepath', 'name': 'pillars', 'comment': '', 'parentEntId': 10028, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10032: {'type': 'nodepath', 'name': 'centerPillars', 'comment': '', 'parentEntId': 10031, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10037: {'type': 'nodepath', 'name': 'barrels', 'comment': '', 'parentEntId': 0, 'pos': Point3(102.779998779, -1.24000000954, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10038: {'type': 'nodepath', 'name': 'outerPillars', 'comment': '', 'parentEntId': 10031, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10043: {'type': 'nodepath', 'name': 'frontPillars', 'comment': '', 'parentEntId': 10031, 'pos': Point3(-89.9665527344, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10045: {'type': 'nodepath', 'name': 'backPillars', 'comment': '', 'parentEntId': 10031, 'pos': Point3(89.9700012207, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10048: {'type': 'nodepath', 'name': 'frontProps', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-100.412567139, -10.8835134506, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.66847121716, 1.66847121716, 1.66847121716)}, 10052: {'type': 'nodepath', 'name': 'backProps', 'comment': '', 'parentEntId': 10028, 'pos': Point3(100.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10000: {'type': 'path', 'name': 'triangle', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 1, 'pathScale': 1.5}, 10003: {'type': 'path', 'name': 'square', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 10004: {'type': 'path', 'name': 'bowtie', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 2, 'pathScale': 1.0}, 10013: {'type': 'path', 'name': 'square', 'comment': '', 'parentEntId': 10010, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 10015: {'type': 'path', 'name': 'square', 'comment': '', 'parentEntId': 10011, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 10017: {'type': 'path', 'name': 'square', 'comment': '', 'parentEntId': 10012, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 10020: {'type': 'path', 'name': 'pace', 'comment': '', 'parentEntId': 10019, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 3, 'pathScale': 1.0}, 10023: {'type': 'path', 'name': 'pace', 'comment': '', 'parentEntId': 10022, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 3, 'pathScale': 1.0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPipeRoom_Battle00.py b/toontown/src/coghq/CashbotMintPipeRoom_Battle00.py index 3157bc4d..30150056 100644 --- a/toontown/src/coghq/CashbotMintPipeRoom_Battle00.py +++ b/toontown/src/coghq/CashbotMintPipeRoom_Battle00.py @@ -1,163 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # BATTLEBLOCKER - 10001: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(135.90512085,-2.06722736359,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'cellId': 0, - 'radius': 10.0, - }, # end entity 10001 - 10003: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-86.7350921631,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(0.378204703331,2.94127488136,2.80858683586), - 'cellId': 1, - 'radius': 10, - }, # end entity 10003 - # MODEL - 10005: { - 'type': 'model', - 'name': 'farLeft', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(45.6502952576,31.8647651672,0.228899106383), - 'hpr': Vec3(333.434936523,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10005 - 10006: { - 'type': 'model', - 'name': 'farRight', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(50.0559577942,-32.7609710693,0.228899106383), - 'hpr': Vec3(206.565048218,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam', - }, # end entity 10006 - 10008: { - 'type': 'model', - 'name': 'nearLeft', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-47.9696311951,31.8647651672,0.228899106383), - 'hpr': Vec3(26.5650520325,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam', - }, # end entity 10008 - 10009: { - 'type': 'model', - 'name': 'nearRight', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-43.6387481689,-36.8883552551,0.228899106383), - 'hpr': Vec3(154.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam', - }, # end entity 10009 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(102.420700073,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10002: { - 'type': 'nodepath', - 'name': 'frontCogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-94.4453353882,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10002 - 10004: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - 10007: { - 'type': 'nodepath', - 'name': 'leftCogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,40.9584655762,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10007 - 10010: { - 'type': 'nodepath', - 'name': 'rightCogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,-40.9599990845,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10010 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(135.90512085, -2.06722736359, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 0, 'radius': 10.0}, 10003: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(-86.7350921631, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(0.378204703331, 2.94127488136, 2.80858683586), 'cellId': 1, 'radius': 10}, 10005: {'type': 'model', 'name': 'farLeft', 'comment': '', 'parentEntId': 10004, 'pos': Point3(45.6502952576, 31.8647651672, 0.228899106383), 'hpr': Vec3(333.434936523, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10006: {'type': 'model', 'name': 'farRight', 'comment': '', 'parentEntId': 10004, 'pos': Point3(50.0559577942, -32.7609710693, 0.228899106383), 'hpr': Vec3(206.565048218, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_C.bam'}, 10008: {'type': 'model', 'name': 'nearLeft', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-47.9696311951, 31.8647651672, 0.228899106383), 'hpr': Vec3(26.5650520325, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam'}, 10009: {'type': 'model', 'name': 'nearRight', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-43.6387481689, -36.8883552551, 0.228899106383), 'hpr': Vec3(154.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_D1.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(102.420700073, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10002: {'type': 'nodepath', 'name': 'frontCogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(-94.4453353882, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10004: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10007: {'type': 'nodepath', 'name': 'leftCogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 40.9584655762, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10010: {'type': 'nodepath', 'name': 'rightCogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, -40.9599990845, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPipeRoom_Battle00_Cogs.py b/toontown/src/coghq/CashbotMintPipeRoom_Battle00_Cogs.py index 4efd2366..f02f45f6 100644 --- a/toontown/src/coghq/CashbotMintPipeRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/CashbotMintPipeRoom_Battle00_Cogs.py @@ -1,199 +1,13 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 FrontCogParent = 10002 LeftCogParent = 10007 RightCogParent = 10010 - -# unique IDs for battle cells BattleCellId = 0 FrontBattleCellId = 1 LeftBattleCellId = 2 RightBattleCellId = 3 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - FrontBattleCellId : {'parentEntId' : FrontCogParent, - 'pos' : Point3(0,0,0), - }, - LeftBattleCellId : {'parentEntId' : LeftCogParent, - 'pos' : Point3(0,0,0), - }, - RightBattleCellId : {'parentEntId' : RightCogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : FrontCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : FrontBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : LeftCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : LeftBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : LeftCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : LeftBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : LeftCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : LeftBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : LeftCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : LeftBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - - {'parentEntId' : RightCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : RightBattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : RightCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : RightBattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : RightCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : RightBattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : RightCogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel, - 'battleCell' : RightBattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}, FrontBattleCellId: {'parentEntId': FrontCogParent, 'pos': Point3(0, 0, 0)}, LeftBattleCellId: {'parentEntId': LeftCogParent, 'pos': Point3(0, 0, 0)}, RightBattleCellId: {'parentEntId': RightCogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': FrontBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': FrontBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': FrontCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': FrontBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': LeftCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': LeftBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': LeftCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': LeftBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': LeftCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': LeftBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': LeftCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': LeftBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': RightCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': RightBattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': RightCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': RightBattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': RightCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': RightBattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': RightCogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel, 'battleCell': RightBattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPipeRoom_Battle01.py b/toontown/src/coghq/CashbotMintPipeRoom_Battle01.py index a54873d4..dc91a89b 100644 --- a/toontown/src/coghq/CashbotMintPipeRoom_Battle01.py +++ b/toontown/src/coghq/CashbotMintPipeRoom_Battle01.py @@ -1,468 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # LOCATOR - 10001: { - 'type': 'locator', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'searchPath': '**/EXIT', - }, # end entity 10001 - # MINTPRODUCT - 10020: { - 'type': 'mintProduct', - 'name': '', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10020 - 10021: { - 'type': 'mintProduct', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(13.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10021 - 10022: { - 'type': 'mintProduct', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(-6.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10022 - 10023: { - 'type': 'mintProduct', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10019, - 'pos': Point3(-13.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10023 - # MINTSHELF - 10025: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10025 - 10029: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(13.4300003052,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10029 - 10030: { - 'type': 'mintShelf', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10030 - 10031: { - 'type': 'mintShelf', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10028, - 'pos': Point3(-13.4300003052,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12600, - }, # end entity 10031 - 10033: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10033 - 10034: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10032, - 'pos': Point3(29.7916145325,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10034 - 10036: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'mintId': 12500, - }, # end entity 10036 - 10037: { - 'type': 'mintShelf', - 'name': '', - 'comment': '', - 'parentEntId': 10035, - 'pos': Point3(-37.7522773743,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10037 - # MODEL - 10002: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam', - }, # end entity 10002 - 10009: { - 'type': 'model', - 'name': 'backPillar', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(41.4432792664,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10009 - 10010: { - 'type': 'model', - 'name': 'frontPillar', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(-41.0848464966,0.0,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10010 - 10011: { - 'type': 'model', - 'name': 'rightPillar', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(0.0,-22.3441867828,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10011 - 10012: { - 'type': 'model', - 'name': 'leftPillar', - 'comment': '', - 'parentEntId': 10005, - 'pos': Point3(0.0,21.9451503754,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10012 - 10013: { - 'type': 'model', - 'name': 'frontRightPillar', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(0.0,-22.5711078644,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10013 - 10014: { - 'type': 'model', - 'name': 'frontLeftPillar', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(0.0,22.1686630249,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10014 - 10015: { - 'type': 'model', - 'name': 'frontRightPillar', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,-22.5711078644,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10015 - 10016: { - 'type': 'model', - 'name': 'frontLeftPillar', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.0,22.1686630249,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10016 - 10017: { - 'type': 'model', - 'name': 'leftPillar', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,67.0966033936,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10017 - 10018: { - 'type': 'model', - 'name': 'rightPillar', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0.0,-66.8615875244,0.0), - 'hpr': Point3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1', - }, # end entity 10018 - 10039: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10038, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam', - }, # end entity 10039 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(107.260322571,0.0,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10000 - 10003: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,-1.79999995232,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10003 - 10004: { - 'type': 'nodepath', - 'name': 'pillars', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10004 - 10005: { - 'type': 'nodepath', - 'name': 'centerPillars', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10005 - 10006: { - 'type': 'nodepath', - 'name': 'frontPillars', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(-89.9665527344,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10006 - 10007: { - 'type': 'nodepath', - 'name': 'backPillars', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(89.9700012207,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10007 - 10008: { - 'type': 'nodepath', - 'name': 'outerPillars', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10008 - 10019: { - 'type': 'nodepath', - 'name': 'byVaultDoor', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(127.898963928,0.0,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10019 - 10024: { - 'type': 'nodepath', - 'name': 'shelves', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10024 - 10026: { - 'type': 'nodepath', - 'name': 'nearVault', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(101.76008606,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10026 - 10027: { - 'type': 'nodepath', - 'name': 'left', - 'comment': '', - 'parentEntId': 10026, - 'pos': Point3(0.0,19.3625793457,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10027 - 10028: { - 'type': 'nodepath', - 'name': 'right', - 'comment': '', - 'parentEntId': 10026, - 'pos': Point3(0.0,-19.3600006104,0.0), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': 1, - }, # end entity 10028 - 10032: { - 'type': 'nodepath', - 'name': 'rightNear', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(-15.3249912262,-55.9873504639,0.0), - 'hpr': Vec3(152.447189331,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10032 - 10035: { - 'type': 'nodepath', - 'name': 'leftNear', - 'comment': '', - 'parentEntId': 10024, - 'pos': Point3(-17.6631221771,55.3191757202,0.0), - 'hpr': Vec3(26.3582077026,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10035 - 10038: { - 'type': 'nodepath', - 'name': 'nearEntrance', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(-107.089996338,-1.71000003815,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10038 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE13a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10001: {'type': 'locator', 'name': '', 'comment': '', 'parentEntId': 0, 'searchPath': '**/EXIT'}, 10020: {'type': 'mintProduct', 'name': '', 'comment': '', 'parentEntId': 10019, 'pos': Point3(6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10021: {'type': 'mintProduct', 'name': 'copy of ', 'comment': '', 'parentEntId': 10019, 'pos': Point3(13.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10022: {'type': 'mintProduct', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10019, 'pos': Point3(-6.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10023: {'type': 'mintProduct', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10019, 'pos': Point3(-13.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10025: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10027, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10029: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10027, 'pos': Point3(13.4300003052, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10030: {'type': 'mintShelf', 'name': 'copy of ', 'comment': '', 'parentEntId': 10028, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10031: {'type': 'mintShelf', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10028, 'pos': Point3(-13.4300003052, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12600}, 10033: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10032, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10034: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10032, 'pos': Point3(29.7916145325, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10036: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10035, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'mintId': 12500}, 10037: {'type': 'mintShelf', 'name': '', 'comment': '', 'parentEntId': 10035, 'pos': Point3(-37.7522773743, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10002: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/VaultDoorCover.bam'}, 10009: {'type': 'model', 'name': 'backPillar', 'comment': '', 'parentEntId': 10005, 'pos': Point3(41.4432792664, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10010: {'type': 'model', 'name': 'frontPillar', 'comment': '', 'parentEntId': 10005, 'pos': Point3(-41.0848464966, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10011: {'type': 'model', 'name': 'rightPillar', 'comment': '', 'parentEntId': 10005, 'pos': Point3(0.0, -22.3441867828, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10012: {'type': 'model', 'name': 'leftPillar', 'comment': '', 'parentEntId': 10005, 'pos': Point3(0.0, 21.9451503754, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10013: {'type': 'model', 'name': 'frontRightPillar', 'comment': '', 'parentEntId': 10006, 'pos': Point3(0.0, -22.5711078644, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10014: {'type': 'model', 'name': 'frontLeftPillar', 'comment': '', 'parentEntId': 10006, 'pos': Point3(0.0, 22.1686630249, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10015: {'type': 'model', 'name': 'frontRightPillar', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, -22.5711078644, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10016: {'type': 'model', 'name': 'frontLeftPillar', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, 22.1686630249, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10017: {'type': 'model', 'name': 'leftPillar', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 67.0966033936, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10018: {'type': 'model', 'name': 'rightPillar', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, -66.8615875244, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/pipes_A1'}, 10039: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10038, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cashbotHQ/crates_E.bam'}, 10000: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 0, 'pos': Point3(107.260322571, 0.0, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10003: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, -1.79999995232, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'pillars', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10005: {'type': 'nodepath', 'name': 'centerPillars', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10006: {'type': 'nodepath', 'name': 'frontPillars', 'comment': '', 'parentEntId': 10004, 'pos': Point3(-89.9665527344, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10007: {'type': 'nodepath', 'name': 'backPillars', 'comment': '', 'parentEntId': 10004, 'pos': Point3(89.9700012207, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10008: {'type': 'nodepath', 'name': 'outerPillars', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10019: {'type': 'nodepath', 'name': 'byVaultDoor', 'comment': '', 'parentEntId': 10003, 'pos': Point3(127.898963928, 0.0, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10024: {'type': 'nodepath', 'name': 'shelves', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10026: {'type': 'nodepath', 'name': 'nearVault', 'comment': '', 'parentEntId': 10024, 'pos': Point3(101.76008606, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10027: {'type': 'nodepath', 'name': 'left', 'comment': '', 'parentEntId': 10026, 'pos': Point3(0.0, 19.3625793457, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10028: {'type': 'nodepath', 'name': 'right', 'comment': '', 'parentEntId': 10026, 'pos': Point3(0.0, -19.3600006104, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1}, 10032: {'type': 'nodepath', 'name': 'rightNear', 'comment': '', 'parentEntId': 10024, 'pos': Point3(-15.3249912262, -55.9873504639, 0.0), 'hpr': Vec3(152.447189331, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10035: {'type': 'nodepath', 'name': 'leftNear', 'comment': '', 'parentEntId': 10024, 'pos': Point3(-17.6631221771, 55.3191757202, 0.0), 'hpr': Vec3(26.3582077026, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10038: {'type': 'nodepath', 'name': 'nearEntrance', 'comment': '', 'parentEntId': 10003, 'pos': Point3(-107.089996338, -1.71000003815, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintPipeRoom_Battle01_Cogs.py b/toontown/src/coghq/CashbotMintPipeRoom_Battle01_Cogs.py index da6f40d1..8b3393dc 100644 --- a/toontown/src/coghq/CashbotMintPipeRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/CashbotMintPipeRoom_Battle01_Cogs.py @@ -1,61 +1,7 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under CogParent = 10000 - -# unique IDs for battle cells BattleCellId = 0 - -BattleCells = { - BattleCellId : {'parentEntId' : CogParent, - 'pos' : Point3(0,0,0), - }, - } - -CogData = [ - {'parentEntId' : CogParent, - 'boss' : 1, - 'level' : ToontownGlobals.CashbotMintBossLevel, - 'battleCell' : BattleCellId, - 'pos' : Point3(-6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(-2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(2,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'parentEntId' : CogParent, - 'boss' : 0, - 'level' : ToontownGlobals.CashbotMintCogLevel+1, - 'battleCell' : BattleCellId, - 'pos' : Point3(6,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - ] +BattleCells = {BattleCellId: {'parentEntId': CogParent, 'pos': Point3(0, 0, 0)}} +CogData = [{'parentEntId': CogParent, 'boss': 1, 'level': ToontownGlobals.CashbotMintBossLevel, 'battleCell': BattleCellId, 'pos': Point3(-6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(-2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(2, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'parentEntId': CogParent, 'boss': 0, 'level': ToontownGlobals.CashbotMintCogLevel + 1, 'battleCell': BattleCellId, 'pos': Point3(6, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/CashbotMintStomperAlley_Action00.py b/toontown/src/coghq/CashbotMintStomperAlley_Action00.py index 35599bf9..051cc17f 100644 --- a/toontown/src/coghq/CashbotMintStomperAlley_Action00.py +++ b/toontown/src/coghq/CashbotMintStomperAlley_Action00.py @@ -1,483 +1,4 @@ from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500, - 'modelFilename': 'phase_10/models/cashbotHQ/ZONE17a', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - # ATTRIBMODIFIER - 10020: { - 'type': 'attribModifier', - 'name': 'range', - 'comment': '', - 'parentEntId': 10016, - 'attribName': 'range', - 'recursive': 1, - 'typeName': 'stomper', - 'value': '7.3', - }, # end entity 10020 - 10026: { - 'type': 'attribModifier', - 'name': 'period', - 'comment': '', - 'parentEntId': 10016, - 'attribName': 'period', - 'recursive': 1, - 'typeName': 'stomper', - 'value': '6', - }, # end entity 10026 - # CONVEYORBELT - 10011: { - 'type': 'conveyorBelt', - 'name': 'conveyorBelt', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(3.37029790878,24.4200267792,13.000869751), - 'hpr': Point3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'platformcollision', - 'length': 42.0, - 'speed': 2.0, - 'treadLength': 10.0, - 'treadModelPath': 'phase_9/models/cogHQ/platform1', - 'widthScale': 1.0, - }, # end entity 10011 - # GOON - 10014: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10013, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.2, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 8, - 'velocity': 4, - }, # end entity 10014 - 10025: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1.2, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 8, - 'velocity': 4, - }, # end entity 10025 - # HEALBARREL - 10002: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-1.80931818485,65.0541229248,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 10002 - # MINTSHELF - 10008: { - 'type': 'mintShelf', - 'name': 'frontShelf', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0.75479054451,-116.741004944,0.0), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10008 - 10009: { - 'type': 'mintShelf', - 'name': 'backShelf1', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(5.09813165665,63.6601753235,0.0), - 'hpr': Vec3(270.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10009 - 10010: { - 'type': 'mintShelf', - 'name': 'copy of backShelf1', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(-3.80197167397,81.7602081299,0.0), - 'hpr': Vec3(90.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'mintId': 12500, - }, # end entity 10010 - # MODEL - 10000: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,-9.59561252594,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10000 - 10003: { - 'type': 'model', - 'name': 'downLift', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(4.43959569931,36.9850654602,0.880278944969), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(0.550000011921,0.550000011921,0.550000011921), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam', - }, # end entity 10003 - 10004: { - 'type': 'model', - 'name': 'upLift', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-3.25595784187,-35.5523605347,0.880278944969), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(0.550000011921,0.550000011921,0.550000011921), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam', - }, # end entity 10004 - 10012: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 10001, - 'pos': Point3(0.0,10.1246709824,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam', - }, # end entity 10012 - 10023: { - 'type': 'model', - 'name': 'penaltyLift', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(-4.46345901489,-13.5,0.880278944969), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': Vec3(0.34999999404,0.34999999404,0.34999999404), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam', - }, # end entity 10023 - 10027: { - 'type': 'model', - 'name': 'shadow', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,-1.56577277184), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(3.5935189724,3.5935189724,3.5935189724), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam', - }, # end entity 10027 - 10028: { - 'type': 'model', - 'name': 'shadow', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,-1.56577277184), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(3.5935189724,3.5935189724,3.5935189724), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam', - }, # end entity 10028 - 10029: { - 'type': 'model', - 'name': 'copy of shadow', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,0.0,-2.47000002861), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(3.5935189724,3.5935189724,3.5935189724), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModel', - 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam', - }, # end entity 10029 - # NODEPATH - 10001: { - 'type': 'nodepath', - 'name': 'crates', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.660497009754,0.0,0.0133484890684), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(2.50575017929,2.50575017929,2.50575017929), - }, # end entity 10001 - 10007: { - 'type': 'nodepath', - 'name': 'props', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10007 - 10016: { - 'type': 'nodepath', - 'name': 'stompers', - 'comment': '', - 'parentEntId': 10011, - 'pos': Point3(5.0,10.4380426407,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - }, # end entity 10016 - 10021: { - 'type': 'nodepath', - 'name': 'goons', - 'comment': '', - 'parentEntId': 0, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Vec3(0.0,0.0,0.0), - 'scale': 1, - }, # end entity 10021 - # PAINTMIXER - 10005: { - 'type': 'paintMixer', - 'name': '', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0.0,0.0,3.56454277039), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'noBlend', - 'offset': Point3(0.0,0.0,20.0), - 'period': 10.0, - 'phaseShift': 0.0, - 'shaftScale': 2.5, - 'waitPercent': 0.40000000000000002, - }, # end entity 10005 - 10006: { - 'type': 'paintMixer', - 'name': '', - 'comment': '', - 'parentEntId': 10003, - 'pos': Point3(0.0,0.0,3.56454277039), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'noBlend', - 'offset': Point3(0.0,0.0,20.0), - 'period': 5.0, - 'phaseShift': 0.0, - 'shaftScale': 2.5, - 'waitPercent': 0.40000000000000002, - }, # end entity 10006 - 10024: { - 'type': 'paintMixer', - 'name': '', - 'comment': '', - 'parentEntId': 10023, - 'pos': Point3(0.0,0.0,3.56454277039), - 'hpr': Vec3(180.0,0.0,0.0), - 'scale': Vec3(1.0,1.0,1.0), - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Vec3(1.0,1.0,1.0), - 'motion': 'noBlend', - 'offset': Point3(0.0,0.0,33.0), - 'period': 10.0, - 'phaseShift': 0.5, - 'shaftScale': 4.0, - 'waitPercent': 0.40000000000000002, - }, # end entity 10024 - # PATH - 10013: { - 'type': 'path', - 'name': 'right', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(4.0,0.0,0.0), - 'hpr': Point3(90.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10013 - 10022: { - 'type': 'path', - 'name': 'left', - 'comment': '', - 'parentEntId': 10021, - 'pos': Point3(-4.0,2.0,0.0), - 'hpr': Point3(-90.0,0.0,0.0), - 'scale': 1, - 'pathIndex': 3, - 'pathScale': 1.0, - }, # end entity 10022 - # STOMPER - 10015: { - 'type': 'stomper', - 'name': '', - 'comment': '', - 'parentEntId': 10016, - 'pos': Point3(0.0,0.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(4.0,2.0,4.0), - 'modelPath': 0, - 'motion': 1, - 'period': 6, - 'phaseShift': 0.0, - 'range': 7.2999999999999998, - 'shaftScale': Point3(1.89999997616,7.5,1.89999997616), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'horizontal', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10015 - 10017: { - 'type': 'stomper', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 10016, - 'pos': Point3(0.0,8.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(4.0,2.0,4.0), - 'modelPath': 0, - 'motion': 1, - 'period': 6, - 'phaseShift': 0.75, - 'range': 7.2999999999999998, - 'shaftScale': Point3(1.89999997616,7.5,1.89999997616), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'horizontal', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10017 - 10018: { - 'type': 'stomper', - 'name': 'copy of (2)', - 'comment': '', - 'parentEntId': 10016, - 'pos': Point3(0.0,16.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(4.0,2.0,4.0), - 'modelPath': 0, - 'motion': 1, - 'period': 6, - 'phaseShift': 0.25, - 'range': 7.2999999999999998, - 'shaftScale': Point3(1.89999997616,7.5,1.89999997616), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'horizontal', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10018 - 10019: { - 'type': 'stomper', - 'name': 'copy of (3)', - 'comment': '', - 'parentEntId': 10016, - 'pos': Point3(0.0,24.0,0.0), - 'hpr': Point3(270.0,0.0,0.0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(4.0,2.0,4.0), - 'modelPath': 0, - 'motion': 1, - 'period': 6, - 'phaseShift': 0.5, - 'range': 7.2999999999999998, - 'shaftScale': Point3(1.89999997616,7.5,1.89999997616), - 'soundLen': 0, - 'soundOn': 0, - 'soundPath': 0, - 'style': 'horizontal', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 0, - 'zOffset': 0, - }, # end entity 10019 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500, 'modelFilename': 'phase_10/models/cashbotHQ/ZONE17a', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10020: {'type': 'attribModifier', 'name': 'range', 'comment': '', 'parentEntId': 10016, 'attribName': 'range', 'recursive': 1, 'typeName': 'stomper', 'value': '7.3'}, 10026: {'type': 'attribModifier', 'name': 'period', 'comment': '', 'parentEntId': 10016, 'attribName': 'period', 'recursive': 1, 'typeName': 'stomper', 'value': '6'}, 10011: {'type': 'conveyorBelt', 'name': 'conveyorBelt', 'comment': '', 'parentEntId': 0, 'pos': Point3(3.37029790878, 24.4200267792, 13.000869751), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'platformcollision', 'length': 42.0, 'speed': 2.0, 'treadLength': 10.0, 'treadModelPath': 'phase_9/models/cogHQ/platform1', 'widthScale': 1.0}, 10014: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10013, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.2, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 8, 'velocity': 4}, 10025: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.2, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 8, 'velocity': 4}, 10002: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 0, 'pos': Point3(-1.80931818485, 65.0541229248, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10008: {'type': 'mintShelf', 'name': 'frontShelf', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.75479054451, -116.741004944, 0.0), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10009: {'type': 'mintShelf', 'name': 'backShelf1', 'comment': '', 'parentEntId': 10007, 'pos': Point3(5.09813165665, 63.6601753235, 0.0), 'hpr': Vec3(270.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10010: {'type': 'mintShelf', 'name': 'copy of backShelf1', 'comment': '', 'parentEntId': 10007, 'pos': Point3(-3.80197167397, 81.7602081299, 0.0), 'hpr': Vec3(90.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'mintId': 12500}, 10000: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, -9.59561252594, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10003: {'type': 'model', 'name': 'downLift', 'comment': '', 'parentEntId': 0, 'pos': Point3(4.43959569931, 36.9850654602, 0.880278944969), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(0.550000011921, 0.550000011921, 0.550000011921), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam'}, 10004: {'type': 'model', 'name': 'upLift', 'comment': '', 'parentEntId': 0, 'pos': Point3(-3.25595784187, -35.5523605347, 0.880278944969), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(0.550000011921, 0.550000011921, 0.550000011921), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam'}, 10012: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 10001, 'pos': Point3(0.0, 10.1246709824, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_10/models/cogHQ/CBMetalCrate2.bam'}, 10023: {'type': 'model', 'name': 'penaltyLift', 'comment': '', 'parentEntId': 0, 'pos': Point3(-4.46345901489, -13.5, 0.880278944969), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': Vec3(0.34999999404, 0.34999999404, 0.34999999404), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/PaintMixer.bam'}, 10027: {'type': 'model', 'name': 'shadow', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, -1.56577277184), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.5935189724, 3.5935189724, 3.5935189724), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam'}, 10028: {'type': 'model', 'name': 'shadow', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, -1.56577277184), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.5935189724, 3.5935189724, 3.5935189724), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam'}, 10029: {'type': 'model', 'name': 'copy of shadow', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 0.0, -2.47000002861), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.5935189724, 3.5935189724, 3.5935189724), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModel', 'modelPath': 'phase_10/models/cogHQ/RoundShadow.bam'}, 10001: {'type': 'nodepath', 'name': 'crates', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.660497009754, 0.0, 0.0133484890684), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(2.50575017929, 2.50575017929, 2.50575017929)}, 10007: {'type': 'nodepath', 'name': 'props', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10016: {'type': 'nodepath', 'name': 'stompers', 'comment': '', 'parentEntId': 10011, 'pos': Point3(5.0, 10.4380426407, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0)}, 10021: {'type': 'nodepath', 'name': 'goons', 'comment': '', 'parentEntId': 0, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10005: {'type': 'paintMixer', 'name': '', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 3.56454277039), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'noBlend', 'offset': Point3(0.0, 0.0, 20.0), 'period': 10.0, 'phaseShift': 0.0, 'shaftScale': 2.5, 'waitPercent': 0.4}, 10006: {'type': 'paintMixer', 'name': '', 'comment': '', 'parentEntId': 10003, 'pos': Point3(0.0, 0.0, 3.56454277039), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'noBlend', 'offset': Point3(0.0, 0.0, 20.0), 'period': 5.0, 'phaseShift': 0.0, 'shaftScale': 2.5, 'waitPercent': 0.4}, 10024: {'type': 'paintMixer', 'name': '', 'comment': '', 'parentEntId': 10023, 'pos': Point3(0.0, 0.0, 3.56454277039), 'hpr': Vec3(180.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Vec3(1.0, 1.0, 1.0), 'motion': 'noBlend', 'offset': Point3(0.0, 0.0, 33.0), 'period': 10.0, 'phaseShift': 0.5, 'shaftScale': 4.0, 'waitPercent': 0.4}, 10013: {'type': 'path', 'name': 'right', 'comment': '', 'parentEntId': 10021, 'pos': Point3(4.0, 0.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 3, 'pathScale': 1.0}, 10022: {'type': 'path', 'name': 'left', 'comment': '', 'parentEntId': 10021, 'pos': Point3(-4.0, 2.0, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 3, 'pathScale': 1.0}, 10015: {'type': 'stomper', 'name': '', 'comment': '', 'parentEntId': 10016, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(4.0, 2.0, 4.0), 'modelPath': 0, 'motion': 1, 'period': 6, 'phaseShift': 0.0, 'range': 7.3, 'shaftScale': Point3(1.89999997616, 7.5, 1.89999997616), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'horizontal', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10017: {'type': 'stomper', 'name': 'copy of ', 'comment': '', 'parentEntId': 10016, 'pos': Point3(0.0, 8.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(4.0, 2.0, 4.0), 'modelPath': 0, 'motion': 1, 'period': 6, 'phaseShift': 0.75, 'range': 7.3, 'shaftScale': Point3(1.89999997616, 7.5, 1.89999997616), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'horizontal', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10018: {'type': 'stomper', 'name': 'copy of (2)', 'comment': '', 'parentEntId': 10016, 'pos': Point3(0.0, 16.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(4.0, 2.0, 4.0), 'modelPath': 0, 'motion': 1, 'period': 6, 'phaseShift': 0.25, 'range': 7.3, 'shaftScale': Point3(1.89999997616, 7.5, 1.89999997616), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'horizontal', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}, 10019: {'type': 'stomper', 'name': 'copy of (3)', 'comment': '', 'parentEntId': 10016, 'pos': Point3(0.0, 24.0, 0.0), 'hpr': Point3(270.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(4.0, 2.0, 4.0), 'modelPath': 0, 'motion': 1, 'period': 6, 'phaseShift': 0.5, 'range': 7.3, 'shaftScale': Point3(1.89999997616, 7.5, 1.89999997616), 'soundLen': 0, 'soundOn': 0, 'soundPath': 0, 'style': 'horizontal', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 0, 'zOffset': 0}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/CogDisguiseGlobals.py b/toontown/src/coghq/CogDisguiseGlobals.py index f6bf5546..ce3ad2a8 100644 --- a/toontown/src/coghq/CogDisguiseGlobals.py +++ b/toontown/src/coghq/CogDisguiseGlobals.py @@ -1,272 +1,120 @@ -""" - CogDisguiseGlobals module: - - Contains constants for the various classes for public consumption -""" - from toontown.suit import SuitDNA import types from toontown.toonbase import TTLocalizer - -# how many parts are required for the different depts -PartsPerSuit = ( 17, 14, 12, 10 ) - -# how many of the 17 total parts do we care about for the different depts +PartsPerSuit = ( + 17, 14, 12, 10) PartsPerSuitBitmasks = ( - 131071, # 111 111 11111 111 111 = 17 parts - 130175, # 111 111 10001 111 111 = 14 parts - 56447, # 011 011 10001 111 111 = 12 parts - 56411, # 011 011 10001 011 011 = 10 parts - ) - -# the complete set of bits that are used to represent suit parts -AllBits = 131071 # 111 111 11111 111 111 - -# minimum number of parts to lose if the bossbot zaps you + 131071, 130175, 56447, 56411) +AllBits = 131071 MinPartLoss = 2 - -# maximum number of parts to lose if the bossbot zaps you MaxPartLoss = 4 - -# how many merits needed for promotion per level per dept MeritsPerLevel = ( - # bossbots - (100, 130, 160, 190, 800), # f 1-5 - (160, 210, 260, 310, 1300), # p 2-6 - (260, 340, 420, 500, 2100), # ym 3-7 - (420, 550, 680, 810, 3400), # mm 4-8 - (680, 890, 1100, 1310, 5500), # ds 5-9 - (1100, 1440, 1780, 2120, 8900), # hh 6-10 - (1780, 2330, 2880, 3430, 14400), # cr 7-11 - (2880, 3770, 4660, 5500, 23300, # tbc 8-12 - # these are at irregular intervals to correspond with laff point bonuses - 2880, 23300, # tbc 13-14 - 2880, 3770, 4660, 5500, 23300, # tbc 15-19 - 2880, 3770, 4660, 5500, 6440, 7330, 8220, 9110, 10000, 23300, # tbc 20-29 - 2880, 3770, 4660, 5500, 6440, 7330, 8220, 9110, 10000, 23300, # tbc 30-39 - 2880, 3770, 4660, 5500, 6440, 7330, 8220, 9110, 10000, 23300, # tbc 40-49 - 0), # tbc - - # lawbots - (60, 80, 100, 120, 500), # bf 1-5 - (100, 130, 160, 190, 800), # b 2-6 - (160, 210, 260, 310, 1300), # dt 3-7 - (260, 340, 420, 500, 2100), # ac 4-8 - (420, 550, 680, 810, 3400), # bs 5-9 - (680, 890, 1100, 1310, 5500), # sd 6-10 - (1100, 1440, 1780, 2120, 8900), # le 7-11 - (1780, 2330, 2880, 3430, 14400, # bw 8-12 - # these are at irregular intervals to correspond with laff point bonuses - 1780, 14400, # bw 13-14 - 1780, 2330, 2880, 3430, 14400, # bw 15-19 - 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, # bw 20-29 - 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, # bw 30-39 - 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, # bw 40-49 - 0), # bw 50 - - # cashbots - (40, 50, 60, 70, 300), # sc 1-5 - (60, 80, 100, 120, 500), # pp 2-6 - (100, 130, 160, 190, 800), # tw 3-7 - (160, 210, 260, 310, 1300), # bc 4-8 - (260, 340, 420, 500, 2100), # nc 5-9 - (420, 550, 680, 810, 3400), # mb 6-10 - (680, 890, 1100, 1310, 5500), # ls 7-11 - (1100, 1440, 1780, 2120, 8900, # rb 8-12 - # these are at irregular intervals to correspond with laff point bonuses - 1100, 8900, # rb 13-14 - 1100, 1440, 1780, 2120, 8900, # rb 15-19 - 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, # rb 20-29 - 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, # rb 30-39 - 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, # rb 40-49 - 0), # rb 50 - - # sellbots - (20, 30, 40, 50, 200), # cc 1-5 - (40, 50, 60, 70, 300), # tm 2-6 - (60, 80, 100, 120, 500), # nd 3-7 - (100, 130, 160, 190, 800), # gh 4-8 - (160, 210, 260, 310, 1300), # ms 5-9 - (260, 340, 420, 500, 2100), # tf 6-10 - (420, 550, 680, 810, 3400), # m 7-11 - (680, 890, 1100, 1310, 5500, # mh 8-12 - 680, 5500, # mh 13-14 - 680, 890, 1100, 1310, 5500, # mh 15-19 - 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, # mh 20-29 - 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, # mh 30-39 - 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, # mh 40-49 - 0), # mh 50 - - ) - -# masks for pulling out the various parts from the cogParts bit string - -leftLegUpper = 1 # 0000 0000 0000 0000 0001 -leftLegLower = 2 # 0000 0000 0000 0000 0010 -leftLegFoot = 4 # 0000 0000 0000 0000 0100 -rightLegUpper = 8 # 0000 0000 0000 0000 1000 - -rightLegLower = 16 # 0000 0000 0000 0001 0000 -rightLegFoot = 32 # 0000 0000 0000 0010 0000 -torsoLeftShoulder = 64 # 0000 0000 0000 0100 0000 -torsoRightShoulder = 128 # 0000 0000 0000 1000 0000 - -torsoChest = 256 # 0000 0000 0001 0000 0000 -torsoHealthMeter = 512 # 0000 0000 0010 0000 0000 -torsoPelvis = 1024 # 0000 0000 0100 0000 0000 -leftArmUpper = 2048 # 0000 0000 1000 0000 0000 - -leftArmLower = 4096 # 0000 0001 0000 0000 0000 -leftArmHand = 8192 # 0000 0010 0000 0000 0000 -rightArmUpper = 16384 # 0000 0100 0000 0000 0000 -rightArmLower = 32768 # 0000 1000 0000 0000 0000 - -rightArmHand = 65536 # 0001 0000 0000 0000 0000 - -# for tracks that don't use all of the torso parts -# the torsoLeftShoulder bit is used to represent the entire upper torso + ( + 100, 130, 160, 190, 800), (160, 210, 260, 310, 1300), (260, 340, 420, 500, 2100), (420, 550, 680, 810, 3400), (680, 890, 1100, 1310, 5500), (1100, 1440, 1780, 2120, 8900), (1780, 2330, 2880, 3430, 14400), (2880, 3770, 4660, 5550, 23300, 2880, 23300, 2880, 3770, 4660, 5550, 23300, 2880, 3770, 4660, 5550, 6440, 7330, 8220, 9110, 10000, 23300, 2880, 3770, 4660, 5550, 6440, 7330, 8220, 9110, 10000, 23300, 2880, 3770, 4660, 5550, 6440, 7330, 8220, 9110, 10000, 23300, 0), (60, 80, 100, 120, 500), (100, 130, 160, 190, 800), (160, 210, 260, 310, 1300), (260, 340, 420, 500, 2100), (420, 550, 680, 810, 3400), (680, 890, 1100, 1310, 5500), (1100, 1440, 1780, 2120, 8900), (1780, 2330, 2880, 3430, 14400, 1780, 14400, 1780, 2330, 2880, 3430, 14400, 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, 1780, 2330, 2880, 3430, 3980, 4530, 5080, 5630, 6180, 14400, 0), (40, 50, 60, 70, 300), (60, 80, 100, 120, 500), (100, 130, 160, 190, 800), (160, 210, 260, 310, 1300), (260, 340, 420, 500, 2100), (420, 550, 680, 810, 3400), (680, 890, 1100, 1310, 5500), (1100, 1440, 1780, 2120, 8900, 1100, 8900, 1100, 1440, 1780, 2120, 8900, 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, 1100, 1440, 1780, 2120, 2460, 2800, 3140, 3480, 3820, 8900, 0), (20, 30, 40, 50, 200), (40, 50, 60, 70, 300), (60, 80, 100, 120, 500), (100, 130, 160, 190, 800), (160, 210, 260, 310, 1300), (260, 340, 420, 500, 2100), (420, 550, 680, 810, 3400), (680, 890, 1100, 1310, 5500, 680, 5550, 680, 890, 1100, 1310, 5500, 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, 680, 890, 1100, 1310, 1520, 1730, 1940, 2150, 2360, 5500, 0)) +leftLegUpper = 1 +leftLegLower = 2 +leftLegFoot = 4 +rightLegUpper = 8 +rightLegLower = 16 +rightLegFoot = 32 +torsoLeftShoulder = 64 +torsoRightShoulder = 128 +torsoChest = 256 +torsoHealthMeter = 512 +torsoPelvis = 1024 +leftArmUpper = 2048 +leftArmLower = 4096 +leftArmHand = 8192 +rightArmUpper = 16384 +rightArmLower = 32768 +rightArmHand = 65536 upperTorso = torsoLeftShoulder - leftLegIndex = 0 rightLegIndex = 1 torsoIndex = 2 leftArmIndex = 3 rightArmIndex = 4 - PartsQueryShifts = ( - leftLegUpper, - rightLegUpper, - torsoLeftShoulder, - leftArmUpper, - rightArmUpper, - ) - + leftLegUpper, rightLegUpper, torsoLeftShoulder, leftArmUpper, rightArmUpper) PartsQueryMasks = ( - leftLegFoot + leftLegLower + leftLegUpper, - rightLegFoot + rightLegLower + rightLegUpper, - torsoPelvis + torsoHealthMeter + torsoChest + torsoRightShoulder + torsoLeftShoulder, - leftArmHand + leftArmLower + leftArmUpper, - rightArmHand + rightArmLower + rightArmUpper - ) - + leftLegFoot + leftLegLower + leftLegUpper, rightLegFoot + rightLegLower + rightLegUpper, torsoPelvis + torsoHealthMeter + torsoChest + torsoRightShoulder + torsoLeftShoulder, leftArmHand + leftArmLower + leftArmUpper, rightArmHand + rightArmLower + rightArmUpper) PartNameStrings = TTLocalizer.CogPartNames SimplePartNameStrings = TTLocalizer.CogPartNamesSimple - -PartsQueryNames = ( - # bossbots - {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], - 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], - 64: PartNameStrings[6], 128: PartNameStrings[7], 256: PartNameStrings[8], - 512: PartNameStrings[9], 1024: PartNameStrings[10], - 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[13], - 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[16] - }, - # lawbots - {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], - 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], - 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], - 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], - 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[13], - 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[16] - }, - # cashbots - {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], - 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], - 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], - 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], - 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[12], - 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[15] - }, - # sellbots - {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[1], - 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[4], - 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], - 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], - 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[12], - 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[15] - }, - ) - -# utility functions +PartsQueryNames = ({1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], 64: PartNameStrings[6], 128: PartNameStrings[7], 256: PartNameStrings[8], 512: PartNameStrings[9], 1024: PartNameStrings[10], 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[13], 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[16]}, {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[13], 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[16]}, {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[2], 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[5], 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[12], 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[15]}, {1: PartNameStrings[0], 2: PartNameStrings[1], 4: PartNameStrings[1], 8: PartNameStrings[3], 16: PartNameStrings[4], 32: PartNameStrings[4], 64: SimplePartNameStrings[0], 128: SimplePartNameStrings[0], 256: SimplePartNameStrings[0], 512: SimplePartNameStrings[0], 1024: PartNameStrings[10], 2048: PartNameStrings[11], 4096: PartNameStrings[12], 8192: PartNameStrings[12], 16384: PartNameStrings[14], 32768: PartNameStrings[15], 65536: PartNameStrings[15]}) def getNextPart(parts, partIndex, dept): - """ - Returns a nextPart number and name given a partIndex (0=left leg, 1=right leg, 2=torso, 3=left arm, - 4=right arm) and a cog dept number. - """ dept = dept2deptIndex(dept) needMask = PartsPerSuitBitmasks[dept] & PartsQueryMasks[partIndex] haveMask = parts[dept] & PartsQueryMasks[partIndex] - - # turn the 0's in the needMask to 1's in the haveMask nextPart = ~needMask | haveMask - # turn the number to all 1's up to the first 0 - nextPart = nextPart ^ (nextPart + 1) - # return the number this position represents - nextPart = (nextPart + 1) >> 1 + nextPart = nextPart ^ nextPart + 1 + nextPart = nextPart + 1 >> 1 return nextPart + def getPartName(partArray): - # map this into the name array index = 0 for part in partArray: if part: return PartsQueryNames[index][part] index += 1 + def isSuitComplete(parts, dept): - """ - Returns 1 if the suit for given dept is complete, 0 otherwise. - """ dept = dept2deptIndex(dept) - # for each type of part (left arm, etc.) for p in range(len(PartsQueryMasks)): if getNextPart(parts, p, dept): return 0 + return 1 def getTotalMerits(toon, index): from toontown.battle import SuitBattleGlobals - cogIndex = toon.cogTypes[index] + (SuitDNA.suitsPerDept * index) + cogIndex = toon.cogTypes[index] + SuitDNA.suitsPerDept * index cogTypeStr = SuitDNA.suitHeadTypes[cogIndex] cogBaseLevel = SuitBattleGlobals.SuitAttributes[cogTypeStr]['level'] cogLevel = toon.cogLevels[index] - cogBaseLevel - # map the cog level to btwn 0 and max - cogLevel = max(min(cogLevel, len(MeritsPerLevel[cogIndex])-1), 0) return MeritsPerLevel[cogIndex][cogLevel] + def getTotalParts(bitString, shiftWidth=32): sum = 0 for shift in range(0, shiftWidth): - sum = sum + ((bitString >> shift) & 1) + sum = sum + (bitString >> shift & 1) + return sum + def asBitstring(number): array = [] shift = 0 if number == 0: - array.insert(0, "0") + array.insert(0, '0') while pow(2, shift) <= number: - if (number >> shift) & 1: - array.insert(0, "1") + if number >> shift & 1: + array.insert(0, '1') else: - array.insert(0, "0") + array.insert(0, '0') shift += 1 - str = "" + + str = '' for i in range(0, len(array)): str = str + array[i] + return str + def asNumber(bitstring): num = 0 for i in range(0, len(bitstring)): - if bitstring[i] == "1": - num += pow(2, (len(bitstring) - 1) - i) + if bitstring[i] == '1': + num += pow(2, len(bitstring) - 1 - i) + return num + def dept2deptIndex(dept): - if type(dept) == types.StringType: + if type(dept) == bytes: dept = SuitDNA.suitDepts.index(dept) - return dept - + return dept \ No newline at end of file diff --git a/toontown/src/coghq/CogHQBossBattle.py b/toontown/src/coghq/CogHQBossBattle.py index b1a213f4..d3628e50 100644 --- a/toontown/src/coghq/CogHQBossBattle.py +++ b/toontown/src/coghq/CogHQBossBattle.py @@ -1,9 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * - from direct.directnotify import DirectNotifyGlobal from toontown.hood import Place -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals @@ -12,321 +11,165 @@ import math class CogHQBossBattle(BattlePlace.BattlePlace): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CogHQBossBattle") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CogHQBossBattle') + def __init__(self, loader, parentFSM, doneEvent): - assert(self.notify.debug("__init__()")) BattlePlace.BattlePlace.__init__(self, loader, doneEvent) self.parentFSM = parentFSM - self.bossCog = None - - # This is only used for magic words. - self.teleportInPosHpr = (0, 0, 0, 0, 0, 0) - - self.fsm = ClassicFSM.ClassicFSM('CogHQBossBattle', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', 'tunnelIn', 'teleportIn', - 'movie']), - State.State('battle', - self.enterBattle, - self.exitBattle, - ['walk', 'died', 'movie']), - State.State('finalBattle', - self.enterFinalBattle, - self.exitFinalBattle, - ['walk', 'stickerBook', 'teleportOut', - 'died', - 'tunnelOut', 'DFA', 'battle', - 'movie', 'ouch', 'crane', - 'WaitForBattle', 'squished' - ]), - State.State('movie', - self.enterMovie, - self.exitMovie, - ['walk', 'battle', 'finalBattle', - 'died', 'teleportOut']), - State.State('ouch', - self.enterOuch, - self.exitOuch, - ['walk', 'battle', 'finalBattle', - 'died', 'crane']), - State.State('crane', - self.enterCrane, - self.exitCrane, - ['walk', 'battle', 'finalBattle', - 'died', 'ouch', 'squished']), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['stickerBook', 'teleportOut', - 'died', - 'tunnelOut', 'DFA', 'battle', - 'movie', 'ouch', 'crane', 'finalBattle', - 'WaitForBattle', - ]), - State.State('stickerBook', - self.enterStickerBook, - self.exitStickerBook, - ['walk', 'DFA', 'WaitForBattle', - 'movie', 'battle']), - State.State('WaitForBattle', - self.enterWaitForBattle, - self.exitWaitForBattle, - ['battle', 'walk', 'movie']), - # Download Force Acknowlege: - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject', 'teleportOut', 'tunnelOut']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk']), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', - ]), - State.State('teleportOut', - self.enterTeleportOut, - self.exitTeleportOut, - ['teleportIn', 'final', 'WaitForBattle']), - State.State('died', - self.enterDied, - self.exitDied, - ['final']), - State.State('tunnelIn', - self.enterTunnelIn, - self.exitTunnelIn, - ['walk']), - State.State('tunnelOut', - self.enterTunnelOut, - self.exitTunnelOut, - ['final']), - State.State('squished', - self.enterSquished, - self.exitSquished, - ['finalBattle', 'crane', 'died', 'teleportOut',]), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - - # Initial State - 'start', - # Final State - 'final', - ) + self.teleportInPosHpr = ( + 0, 0, 0, 0, 0, 0) + self.fsm = ClassicFSM.ClassicFSM('CogHQBossBattle', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'tunnelIn', 'teleportIn', 'movie']), + State.State('battle', self.enterBattle, self.exitBattle, [ + 'walk', 'died', 'movie']), + State.State('finalBattle', self.enterFinalBattle, self.exitFinalBattle, [ + 'walk', 'stickerBook', 'teleportOut', 'died', 'tunnelOut', 'DFA', 'battle', 'movie', 'ouch', 'crane', 'WaitForBattle']), + State.State('movie', self.enterMovie, self.exitMovie, [ + 'walk', 'battle', 'finalBattle', 'died', 'teleportOut']), + State.State('ouch', self.enterOuch, self.exitOuch, [ + 'walk', 'battle', 'finalBattle', 'died', 'crane']), + State.State('crane', self.enterCrane, self.exitCrane, [ + 'walk', 'battle', 'finalBattle', 'died', 'ouch']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'stickerBook', 'teleportOut', 'died', 'tunnelOut', 'DFA', 'battle', 'movie', 'ouch', 'crane', 'finalBattle', 'WaitForBattle']), + State.State('stickerBook', self.enterStickerBook, self.exitStickerBook, [ + 'walk', 'DFA', 'WaitForBattle', 'movie', 'battle']), + State.State('WaitForBattle', self.enterWaitForBattle, self.exitWaitForBattle, [ + 'battle', 'walk', 'movie']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject', 'teleportOut', 'tunnelOut']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walk']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk']), + State.State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, [ + 'teleportIn', 'final', 'WaitForBattle']), + State.State('died', self.enterDied, self.exitDied, [ + 'final']), + State.State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, [ + 'walk']), + State.State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, [ + 'final']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') + return def load(self): BattlePlace.BattlePlace.load(self) - - self.parentFSM.getStateNamed("cogHQBossBattle").addChild(self.fsm) + self.parentFSM.getStateNamed('cogHQBossBattle').addChild(self.fsm) self.townBattle = self.loader.townBattle for i in range(1, 3): Suit.loadSuits(i) def unload(self): BattlePlace.BattlePlace.unload(self) - - self.parentFSM.getStateNamed("cogHQBossBattle").removeChild(self.fsm) + self.parentFSM.getStateNamed('cogHQBossBattle').removeChild(self.fsm) del self.parentFSM del self.fsm self.ignoreAll() - for i in range(1, 3): Suit.unloadSuits(i) def getTaskZoneId(self): - # tell the task system that we're in a hood return base.cr.playGame.hood.id def enter(self, requestStatus, bossCog): - self.zoneId = requestStatus["zoneId"] - # This will call load() + self.zoneId = requestStatus['zoneId'] BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() - self.bossCog = bossCog if self.bossCog: self.bossCog.d_avatarEnter() - - # Don't play music here; the boss will play its own music - # according to the state. - - # Turn on the little red arrows. NametagGlobals.setMasterArrowsOn(1) - - # While we are here, we ignore invasion credit. base.localAvatar.inventory.setRespectInvasions(0) - - self.fsm.request(requestStatus["how"], [requestStatus]) + self.fsm.request(requestStatus['how'], [requestStatus]) def exit(self): - self.fsm.requestFinalState() - - # Respect invasions again. + self.fsm.requestFinalState() base.localAvatar.inventory.setRespectInvasions(1) - if self.bossCog: self.bossCog.d_avatarExit() - self.bossCog = None - BattlePlace.BattlePlace.exit(self) + return def enterBattle(self, event): - assert(self.notify.debug("enterBattle()")) - mult = 1 if self.bossCog: mult = ToontownBattleGlobals.getBossBattleCreditMultiplier(self.bossCog.battleNumber) - - assert(self.notify.debug("creditMultiplier = %s" % (mult))) - - self.townBattle.enter(event, self.fsm.getStateNamed("battle"), - bldg = 1, creditMultiplier = mult) - - # Make sure the toon's anim state gets reset + self.townBattle.enter(event, self.fsm.getStateNamed('battle'), bldg=1, creditMultiplier=mult) base.localAvatar.b_setAnimState('off', 1) base.localAvatar.setTeleportAvailable(0) - # Disable leave to pay / set parent password - base.localAvatar.cantLeaveGame = 1 - + def exitBattle(self): - assert(self.notify.debug("exitBattle()")) self.townBattle.exit() def enterFinalBattle(self): - assert(self.notify.debug("enterFinalBattle()")) - self.walkStateData.enter() self.walkStateData.fsm.request('walking') - base.localAvatar.setTeleportAvailable(0) base.localAvatar.setTeleportAllowed(0) - base.localAvatar.cantLeaveGame = 0 - - # Put away the book base.localAvatar.book.hideButton() self.ignore(ToontownGlobals.StickerBookHotkey) - self.ignore("enterStickerBook") + self.ignore('enterStickerBook') self.ignore(ToontownGlobals.OptionsPageHotkey) - + def exitFinalBattle(self): - assert(self.notify.debug("exitFinalBattle()")) self.walkStateData.exit() - base.localAvatar.setTeleportAllowed(1) - - def enterMovie(self, requestStatus = None): - assert(self.notify.debug("enterMovie()")) + def enterMovie(self, requestStatus=None): base.localAvatar.setTeleportAvailable(0) - + def exitMovie(self): - assert(self.notify.debug("exitMovie()")) + pass def enterOuch(self): - assert(self.notify.debug("enterOuch()")) base.localAvatar.setTeleportAvailable(0) base.localAvatar.laffMeter.start() - + def exitOuch(self): - assert(self.notify.debug("exitOuch()")) base.localAvatar.laffMeter.stop() def enterCrane(self): - assert(self.notify.debug("enterCrane()")) base.localAvatar.setTeleportAvailable(0) base.localAvatar.laffMeter.start() base.localAvatar.collisionsOn() - + def exitCrane(self): - assert(self.notify.debug("exitCrane()")) base.localAvatar.collisionsOff() base.localAvatar.laffMeter.stop() - - # walk state inherited from Place.py + def enterWalk(self, teleportIn=0): BattlePlace.BattlePlace.enterWalk(self, teleportIn) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - - # don't let them do a book teleport out - base.localAvatar.setTeleportAllowed(0) - # Put away the book - base.localAvatar.book.hideButton() - self.ignore(ToontownGlobals.StickerBookHotkey) - self.ignore("enterStickerBook") - self.ignore(ToontownGlobals.OptionsPageHotkey) - - def exitWalk(self): - """Make sure to enable teleport for the toon.""" - BattlePlace.BattlePlace.exitWalk(self) - base.localAvatar.setTeleportAllowed(1) - # sticker book state inherited from Place.py - def enterStickerBook(self, page = None): + def enterStickerBook(self, page=None): BattlePlace.BattlePlace.enterStickerBook(self, page) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # sit state inherited from Place.py def enterSit(self): BattlePlace.BattlePlace.enterSit(self) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) def enterTeleportIn(self, requestStatus): - assert(self.notify.debug("enterTeleportIn()")) - base.localAvatar.detachNode() base.localAvatar.setPosHpr(*self.teleportInPosHpr) - BattlePlace.BattlePlace.enterTeleportIn(self, requestStatus) def enterTeleportOut(self, requestStatus): - assert(self.notify.debug('enterTeleportOut()')) - BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, - self.__teleportOutDone) + BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, self.__teleportOutDone) def __teleportOutDone(self, requestStatus): - # Get out of here. - hoodId = requestStatus["hoodId"] + hoodId = requestStatus['hoodId'] if hoodId == ToontownGlobals.MyEstate: - # We are trying to go to an estate. This request might fail - # if we are going to a toon's estate that we are not friends with. - # So we don't want to tell the AI that we are leaving right away. - # We will rely on the Place.Place.goHome function to do that if - # the teleport to estate request is successful. self.getEstateZoneAndGoHome(requestStatus) else: self.doneStatus = requestStatus - messenger.send(self.doneEvent) - - def enterSquished(self): - assert(self.notify.debug("enterSquished()")) - # exitWalk hides the laffmeter, so start it here - base.localAvatar.laffMeter.start() - # Play the 'squish' animation - base.localAvatar.b_setAnimState('Flattened') - # Put toon back in walk state after a couple seconds - #taskMgr.doMethodLater(2.0, - # self.handleSquishDone, - # base.localAvatar.uniqueName("finishSquishTask")) - - def handleSquishDone(self, extraArgs=[]): - # put place back in walk state after squish is done - base.cr.playGame.getPlace().setState("walk") - - def exitSquished(self): - assert(self.notify.debug("exitSquished()")) - taskMgr.remove(base.localAvatar.uniqueName("finishSquishTask")) - base.localAvatar.laffMeter.stop() - + messenger.send(self.doneEvent) \ No newline at end of file diff --git a/toontown/src/coghq/CogHQExterior.py b/toontown/src/coghq/CogHQExterior.py index 5828a190..b8e4f788 100644 --- a/toontown/src/coghq/CogHQExterior.py +++ b/toontown/src/coghq/CogHQExterior.py @@ -1,153 +1,80 @@ - from direct.directnotify import DirectNotifyGlobal from toontown.battle import BattlePlace -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from toontown.toonbase import ToontownGlobals from pandac.PandaModules import * class CogHQExterior(BattlePlace.BattlePlace): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CogHQExterior") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CogHQExterior') + def __init__(self, loader, parentFSM, doneEvent): - assert(self.notify.debug("__init__()")) BattlePlace.BattlePlace.__init__(self, loader, doneEvent) self.parentFSM = parentFSM - - self.fsm = ClassicFSM.ClassicFSM('CogHQExterior', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', 'tunnelIn', 'teleportIn', 'doorIn', - ]), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['stickerBook', 'teleportOut', - 'tunnelOut', 'DFA', - 'doorOut', 'died', 'stopped', - 'WaitForBattle', 'battle', - 'squished', 'stopped', - ]), - State.State('stopped', - self.enterStopped, - self.exitStopped, - ['walk', 'teleportOut', 'stickerBook', - ]), - State.State('doorIn', - self.enterDoorIn, - self.exitDoorIn, - ['walk', 'stopped']), - State.State('doorOut', - self.enterDoorOut, - self.exitDoorOut, - ['walk', 'stopped']), - State.State('stickerBook', - self.enterStickerBook, - self.exitStickerBook, - ['walk', 'DFA', - 'WaitForBattle', 'battle', - 'tunnelOut', 'doorOut', - 'squished', 'died' - ]), - State.State('WaitForBattle', - self.enterWaitForBattle, - self.exitWaitForBattle, - ['battle', 'walk']), - State.State('battle', - self.enterBattle, - self.exitBattle, - ['walk', 'teleportOut', 'died']), - # Download Force Acknowlege: - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject', 'teleportOut', 'tunnelOut']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk']), - State.State('squished', - self.enterSquished, - self.exitSquished, - ['walk', 'died', 'teleportOut',]), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', 'WaitForBattle', 'battle', - ]), - State.State('teleportOut', - self.enterTeleportOut, - self.exitTeleportOut, - ['teleportIn', 'final', - 'WaitForBattle']), - State.State('died', - self.enterDied, - self.exitDied, - ['quietZone']), - State.State('tunnelIn', - self.enterTunnelIn, - self.exitTunnelIn, - ['walk', 'WaitForBattle', 'battle']), - State.State('tunnelOut', - self.enterTunnelOut, - self.exitTunnelOut, - ['final']), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - - # Initial State - 'start', - # Final State - 'final', - ) + self.fsm = ClassicFSM.ClassicFSM('CogHQExterior', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'tunnelIn', 'teleportIn', 'doorIn']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'stickerBook', 'teleportOut', 'tunnelOut', 'DFA', 'doorOut', 'died', 'WaitForBattle', 'battle', 'squished']), + State.State('doorIn', self.enterDoorIn, self.exitDoorIn, [ + 'walk']), + State.State('doorOut', self.enterDoorOut, self.exitDoorOut, [ + 'walk']), + State.State('stickerBook', self.enterStickerBook, self.exitStickerBook, [ + 'walk', 'DFA', 'WaitForBattle', 'battle', 'tunnelOut', 'doorOut', 'squished', 'died']), + State.State('WaitForBattle', self.enterWaitForBattle, self.exitWaitForBattle, [ + 'battle', 'walk']), + State.State('battle', self.enterBattle, self.exitBattle, [ + 'walk', 'teleportOut', 'died']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject', 'teleportOut', 'tunnelOut']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walk']), + State.State('squished', self.enterSquished, self.exitSquished, [ + 'walk', 'died', 'teleportOut']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk', 'WaitForBattle', 'battle']), + State.State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, [ + 'teleportIn', 'final', 'WaitForBattle']), + State.State('died', self.enterDied, self.exitDied, [ + 'quietZone']), + State.State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, [ + 'walk', 'WaitForBattle', 'battle']), + State.State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, [ + 'final']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') def load(self): - self.parentFSM.getStateNamed("cogHQExterior").addChild(self.fsm) + self.parentFSM.getStateNamed('cogHQExterior').addChild(self.fsm) BattlePlace.BattlePlace.load(self) def unload(self): - self.parentFSM.getStateNamed("cogHQExterior").removeChild(self.fsm) + self.parentFSM.getStateNamed('cogHQExterior').removeChild(self.fsm) del self.fsm - BattlePlace.BattlePlace.unload(self) + BattlePlace.BattlePlace.unload(self) def enter(self, requestStatus): - self.zoneId = requestStatus["zoneId"] - # This will call load() + self.zoneId = requestStatus['zoneId'] BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() - # Play music - base.playMusic(self.loader.music, looping = 1, volume = 0.8) - + base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) self.nodeList = [self.loader.geom] - - # Turn on the animated props once since there is only one zone - # for i in self.loader.nodeList: - # self.loader.enterAnimatedProps(i) - - self.accept("doorDoneEvent", self.handleDoorDoneEvent) - self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger) - - # Turn on the little red arrows. + self.accept('doorDoneEvent', self.handleDoorDoneEvent) + self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) NametagGlobals.setMasterArrowsOn(1) - - # Add hooks for the linktunnels self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList, self.zoneId) - how=requestStatus["how"] + how = requestStatus['how'] self.fsm.request(how, [requestStatus]) def exit(self): self.fsm.requestFinalState() - - # Stop music self.loader.music.stop() for node in self.tunnelOriginList: node.removeNode() + del self.tunnelOriginList if self.loader.geom: self.loader.geom.reparentTo(hidden) @@ -155,70 +82,47 @@ def exit(self): BattlePlace.BattlePlace.exit(self) def enterTunnelOut(self, requestStatus): - # Drop off the last two digits of the zoneId to make the - # tunnel name. - fromZoneId = self.zoneId - (self.zoneId % 100) - tunnelName = base.cr.hoodMgr.makeLinkTunnelName( - self.loader.hood.id, fromZoneId) - requestStatus["tunnelName"] = tunnelName - + fromZoneId = self.zoneId - self.zoneId % 100 + tunnelName = base.cr.hoodMgr.makeLinkTunnelName(self.loader.hood.id, fromZoneId) + requestStatus['tunnelName'] = tunnelName BattlePlace.BattlePlace.enterTunnelOut(self, requestStatus) def enterTeleportIn(self, requestStatus): - x,y,z,h,p,r = base.cr.hoodMgr.getPlaygroundCenterFromId(self.loader.hood.id) - base.localAvatar.setPosHpr(render, x,y,z,h,p,r) + (x, y, z, h, p, r) = base.cr.hoodMgr.getPlaygroundCenterFromId(self.loader.hood.id) + base.localAvatar.setPosHpr(render, x, y, z, h, p, r) BattlePlace.BattlePlace.enterTeleportIn(self, requestStatus) - def enterTeleportOut(self, requestStatus, callback=None): - assert(self.notify.debug("enterTeleportOut()")) - # If the request comes from a battle, let the battle handle - # the teleport animation sequence, otherwise use the distributed - # toon version - if (requestStatus.has_key('battle')): + def enterTeleportOut(self, requestStatus): + if 'battle' in requestStatus: self.__teleportOutDone(requestStatus) else: - BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, - self.__teleportOutDone) + BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, self.__teleportOutDone) def __teleportOutDone(self, requestStatus): - assert(self.notify.debug("__teleportOutDone()")) - - hoodId = requestStatus["hoodId"] - zoneId = requestStatus["zoneId"] - avId = requestStatus["avId"] - shardId = requestStatus["shardId"] - if ((hoodId == self.loader.hood.hoodId) and (zoneId == self.loader.hood.hoodId) and (shardId == None)): - # If you are teleporting to somebody in this exterior - # TODO: might need to set the new zone - self.fsm.request("teleportIn", [requestStatus]) - elif (hoodId == ToontownGlobals.MyEstate): + hoodId = requestStatus['hoodId'] + zoneId = requestStatus['zoneId'] + avId = requestStatus['avId'] + shardId = requestStatus['shardId'] + if hoodId == self.loader.hood.hoodId and zoneId == self.loader.hood.hoodId and shardId == None: + self.fsm.request('teleportIn', [requestStatus]) + elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: - # Different hood or zone, exit the safe zone self.doneStatus = requestStatus messenger.send(self.doneEvent) + return def exitTeleportOut(self): - assert(self.notify.debug("exitTeleportOut()")) BattlePlace.BattlePlace.exitTeleportOut(self) def enterSquished(self): - assert(CogHQExterior.notify.debug("enterSquished()")) - # exitWalk hides the laffmeter, so start it here base.localAvatar.laffMeter.start() - # Play the 'squish' animation base.localAvatar.b_setAnimState('Squish') - # Put toon back in walk state after a couple seconds - taskMgr.doMethodLater(2.0, - self.handleSquishDone, - base.localAvatar.uniqueName("finishSquishTask")) - + taskMgr.doMethodLater(2.0, self.handleSquishDone, base.localAvatar.uniqueName('finishSquishTask')) + def handleSquishDone(self, extraArgs=[]): - # put place back in walk state after squish is done - base.cr.playGame.getPlace().setState("walk") - + base.cr.playGame.getPlace().setState('walk') + def exitSquished(self): - assert(CogHQExterior.notify.debug("exitSquished()")) - taskMgr.remove(base.localAvatar.uniqueName("finishSquishTask")) - base.localAvatar.laffMeter.stop() - + taskMgr.remove(base.localAvatar.uniqueName('finishSquishTask')) + base.localAvatar.laffMeter.stop() \ No newline at end of file diff --git a/toontown/src/coghq/CogHQLoader.py b/toontown/src/coghq/CogHQLoader.py index 9649afd4..24034cc0 100644 --- a/toontown/src/coghq/CogHQLoader.py +++ b/toontown/src/coghq/CogHQLoader.py @@ -1,9 +1,8 @@ - from direct.directnotify import DirectNotifyGlobal from direct.fsm import StateData -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State -import CogHQLobby +from . import CogHQLobby from toontown.hood import QuietZoneState from toontown.hood import ZoneUtil from toontown.town import TownBattle @@ -11,81 +10,47 @@ from pandac.PandaModules import * class CogHQLoader(StateData.StateData): - - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CogHQLoader") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CogHQLoader') + notify.setDebug(True) def __init__(self, hood, parentFSMState, doneEvent): - assert(self.notify.debug("__init__(hood="+str(hood) - +", parentFSMState="+str(parentFSMState) - +", doneEvent="+str(doneEvent)+")")) StateData.StateData.__init__(self, doneEvent) self.hood = hood self.parentFSMState = parentFSMState - self.placeDoneEvent = "cogHQLoaderPlaceDone" + self.placeDoneEvent = 'cogHQLoaderPlaceDone' self.townBattleDoneEvent = 'town-battle-done' - self.fsm = ClassicFSM.ClassicFSM('CogHQLoader', - [State.State('start', - None, - None, - ['quietZone', - 'cogHQExterior', # Tunnel from toon hood - 'cogHQBossBattle', # magic word ~bossBattle - ]), - State.State('cogHQExterior', - self.enterCogHQExterior, - self.exitCogHQExterior, - ['quietZone', - 'cogHQLobby', # Door transition - ]), - State.State('cogHQLobby', - self.enterCogHQLobby, - self.exitCogHQLobby, - ['quietZone', - 'cogHQExterior', # Front door - 'cogHQBossBattle', # Elevator to top - ]), - State.State('cogHQBossBattle', - self.enterCogHQBossBattle, - self.exitCogHQBossBattle, - ['quietZone', - ]), - State.State('quietZone', - self.enterQuietZone, - self.exitQuietZone, - ['cogHQExterior', 'cogHQLobby', - 'cogHQBossBattle', ]), - State.State('final', - None, - None, - ['start'])], - # Initial State - 'start', - # Final State - 'final', - ) + self.fsm = ClassicFSM.ClassicFSM('CogHQLoader', [ + State.State('start', None, None, [ + 'quietZone', 'cogHQExterior', 'cogHQBossBattle']), + State.State('cogHQExterior', self.enterCogHQExterior, self.exitCogHQExterior, [ + 'quietZone', 'cogHQLobby']), + State.State('cogHQLobby', self.enterCogHQLobby, self.exitCogHQLobby, [ + 'quietZone', 'cogHQExterior', 'cogHQBossBattle']), + State.State('cogHQBossBattle', self.enterCogHQBossBattle, self.exitCogHQBossBattle, [ + 'quietZone']), + State.State('quietZone', self.enterQuietZone, self.exitQuietZone, [ + 'cogHQExterior', 'cogHQLobby', 'cogHQBossBattle']), + State.State('final', None, None, [ + 'start'])], 'start', 'final') + return def load(self, zoneId): - # Prepare the state machine self.parentFSMState.addChild(self.fsm) self.music = base.loadMusic(self.musicFile) self.battleMusic = base.loadMusic('phase_9/audio/bgm/encntr_suit_winning.mid') - # Load the battle UI: self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load() Suit.loadSuits(3) self.loadPlaceGeom(zoneId) def loadPlaceGeom(self, zoneId): - # Override return def unloadPlaceGeom(self): - # Override return def unload(self): - assert(self.notify.debug("unload()")) self.unloadPlaceGeom() self.parentFSMState.removeChild(self.fsm) del self.parentFSMState @@ -97,22 +62,20 @@ def unload(self): Suit.unloadSuits(3) Suit.unloadSkelDialog() del self.hood - # Get rid of any references to models or textures from this cogHQ ModelPool.garbageCollect() TexturePool.garbageCollect() def enter(self, requestStatus): self.fsm.enterInitialState() - self.fsm.request(requestStatus["where"], [requestStatus]) + self.fsm.request(requestStatus['where'], [requestStatus]) def exit(self): self.ignoreAll() def enterQuietZone(self, requestStatus): - self.quietZoneDoneEvent = "quietZoneDone" + self.quietZoneDoneEvent = 'quietZoneDone' self.acceptOnce(self.quietZoneDoneEvent, self.handleQuietZoneDone) - self.quietZoneStateData = QuietZoneState.QuietZoneState( - self.quietZoneDoneEvent) + self.quietZoneStateData = QuietZoneState.QuietZoneState(self.quietZoneDoneEvent) self.quietZoneStateData.load() self.quietZoneStateData.enter(requestStatus) @@ -121,12 +84,12 @@ def exitQuietZone(self): del self.quietZoneDoneEvent self.quietZoneStateData.exit() self.quietZoneStateData.unload() - self.quietZoneStateData=None + self.quietZoneStateData = None + return def handleQuietZoneDone(self): - # Change to the destination state: - status=self.quietZoneStateData.getRequestStatus() - self.fsm.request(status["where"], [status]) + status = base.cr.handlerArgs + self.fsm.request(status['where'], [status]) def enterPlace(self, requestStatus): self.acceptOnce(self.placeDoneEvent, self.placeDone) @@ -141,60 +104,56 @@ def exitPlace(self): self.place.unload() self.place = None base.cr.playGame.setPlace(self.place) + return def placeDone(self): - self.requestStatus=self.place.doneStatus - assert(self.notify.debug("placeDone() doneStatus="+str(self.requestStatus))) + self.requestStatus = self.place.doneStatus status = self.place.doneStatus - if ((status.get("shardId") == None) and self.isInThisHq(status)): - # CogHQs use the same loader for all places in the hood. - # Get rid of the old place geom + if status.get('shardId') == None and self.isInThisHq(status): self.unloadPlaceGeom() - # And load the new one zoneId = status['zoneId'] self.loadPlaceGeom(zoneId) - self.fsm.request("quietZone", [status]) + self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) + return def isInThisHq(self, status): - # return true if we're going to a zone in this HQ hood if ZoneUtil.isDynamicZone(status['zoneId']): return status['hoodId'] == self.hood.hoodId else: - return ZoneUtil.getHoodId(status["zoneId"]) == self.hood.hoodId + return ZoneUtil.getHoodId(status['zoneId']) == self.hood.hoodId def enterCogHQExterior(self, requestStatus): self.placeClass = self.getExteriorPlaceClass() self.enterPlace(requestStatus) self.hood.spawnTitleText(requestStatus['zoneId']) - + def exitCogHQExterior(self): - taskMgr.remove("titleText") + taskMgr.remove('titleText') self.hood.hideTitleText() self.exitPlace() self.placeClass = None - + return def enterCogHQLobby(self, requestStatus): self.placeClass = CogHQLobby.CogHQLobby self.enterPlace(requestStatus) self.hood.spawnTitleText(requestStatus['zoneId']) - + def exitCogHQLobby(self): - taskMgr.remove("titleText") + taskMgr.remove('titleText') self.hood.hideTitleText() self.exitPlace() self.placeClass = None + return - def enterCogHQBossBattle(self, requestStatus): self.placeClass = self.getBossPlaceClass() self.enterPlace(requestStatus) - + def exitCogHQBossBattle(self): self.exitPlace() self.placeClass = None - - + return \ No newline at end of file diff --git a/toontown/src/coghq/CogHQLobby.py b/toontown/src/coghq/CogHQLobby.py index 63ce1311..174ea421 100644 --- a/toontown/src/coghq/CogHQLobby.py +++ b/toontown/src/coghq/CogHQLobby.py @@ -1,6 +1,5 @@ - from direct.directnotify import DirectNotifyGlobal -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from toontown.hood import Place from toontown.building import Elevator @@ -8,160 +7,95 @@ from pandac.PandaModules import * class CogHQLobby(Place.Place): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("CogHQLobby") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CogHQLobby') + def __init__(self, hood, parentFSM, doneEvent): - assert(self.notify.debug("__init__()")) Place.Place.__init__(self, hood, doneEvent) self.parentFSM = parentFSM - self.elevatorDoneEvent = "elevatorDone" - self.fsm = ClassicFSM.ClassicFSM('CogHQLobby', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', 'tunnelIn', 'teleportIn', 'doorIn', - ]), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['elevator', 'DFA', 'doorOut', 'stopped', - ]), - State.State('stopped', - self.enterStopped, - self.exitStopped, - ['walk', 'teleportOut', 'elevator', - ]), - State.State('doorIn', - self.enterDoorIn, - self.exitDoorIn, - ['walk']), - State.State('doorOut', - self.enterDoorOut, - self.exitDoorOut, - ['walk']), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', - ]), - State.State('elevator', - self.enterElevator, - self.exitElevator, - ['walk', 'stopped']), - # Download Force Acknowledge - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk']), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - # Initial State - 'start', - # Final State - 'final', - ) + self.elevatorDoneEvent = 'elevatorDone' + self.fsm = ClassicFSM.ClassicFSM('CogHQLobby', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'tunnelIn', 'teleportIn', 'doorIn']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'elevator', 'DFA', 'doorOut']), + State.State('doorIn', self.enterDoorIn, self.exitDoorIn, [ + 'walk']), + State.State('doorOut', self.enterDoorOut, self.exitDoorOut, [ + 'walk']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk']), + State.State('elevator', self.enterElevator, self.exitElevator, [ + 'walk']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walk']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') def load(self): - self.parentFSM.getStateNamed("cogHQLobby").addChild(self.fsm) + self.parentFSM.getStateNamed('cogHQLobby').addChild(self.fsm) Place.Place.load(self) def unload(self): - self.parentFSM.getStateNamed("cogHQLobby").removeChild(self.fsm) + self.parentFSM.getStateNamed('cogHQLobby').removeChild(self.fsm) Place.Place.unload(self) - self.fsm = None def enter(self, requestStatus): - self.zoneId = requestStatus["zoneId"] - # This will call load() + self.zoneId = requestStatus['zoneId'] Place.Place.enter(self) self.fsm.enterInitialState() - # Play music - base.playMusic(self.loader.music, looping = 1, volume = 0.8) + base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) - self.accept("doorDoneEvent", self.handleDoorDoneEvent) - self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger) - # Turn on the little red arrows. + self.accept('doorDoneEvent', self.handleDoorDoneEvent) + self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) NametagGlobals.setMasterArrowsOn(1) - how=requestStatus["how"] + how = requestStatus['how'] self.fsm.request(how, [requestStatus]) def exit(self): - # Stop music - self.fsm.requestFinalState() + self.fsm.requestFinalState() self.ignoreAll() self.loader.music.stop() - # MPG - this was None when the boss elevator closed! - if (self.loader.geom != None): + if self.loader.geom != None: self.loader.geom.reparentTo(hidden) Place.Place.exit(self) + return - # walk state inherited from BattlePlace.py - # Override to disable teleport access def enterWalk(self, teleportIn=0): Place.Place.enterWalk(self, teleportIn) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # elevator state - # (For boarding a building elevator) - def enterElevator(self, distElevator, skipDFABoard = 0): - assert(self.notify.debug("enterElevator()")) - + def enterElevator(self, distElevator): self.accept(self.elevatorDoneEvent, self.handleElevatorDone) - self.elevator = Elevator.Elevator(self.fsm.getStateNamed("elevator"), - self.elevatorDoneEvent, - distElevator) - if skipDFABoard: - self.elevator.skipDFABoard = 1 - #We've placed a reference to the elevator on the DistributedElevator Itself - distElevator.elevatorFSM=self.elevator + self.elevator = Elevator.Elevator(self.fsm.getStateNamed('elevator'), self.elevatorDoneEvent, distElevator) self.elevator.load() self.elevator.enter() def exitElevator(self): - assert(self.notify.debug("exitElevator()")) self.ignore(self.elevatorDoneEvent) self.elevator.unload() self.elevator.exit() del self.elevator def detectedElevatorCollision(self, distElevator): - assert(self.notify.debug("detectedElevatorCollision()")) - self.fsm.request("elevator", [distElevator]) + self.fsm.request('elevator', [distElevator]) def handleElevatorDone(self, doneStatus): - assert(self.notify.debug("handleElevatorDone()")) - self.notify.debug("handling elevator done event") + self.notify.debug('handling elevator done event') where = doneStatus['where'] - if (where == 'reject'): - # If there has been a reject the Elevator should show an - # elevatorNotifier message and put the toon in the stopped state. - # Don't request the walk state here. Let the the toon be stuck in the - # stopped state till the player removes that message from his screen. - # Removing the message will automatically put him in the walk state there. - # Put the player in the walk state only if there is no elevator message. - if hasattr(base.localAvatar, "elevatorNotifier") and base.localAvatar.elevatorNotifier.isNotifierOpen(): - pass - else: - self.fsm.request("walk") - elif (where == 'exit'): - self.fsm.request("walk") - elif (where == 'cogHQBossBattle'): + if where == 'reject': + self.fsm.request('walk') + elif where == 'exit': + self.fsm.request('walk') + elif where == 'cogHQBossBattle': self.doneStatus = doneStatus messenger.send(self.doneEvent) else: - self.notify.error("Unknown mode: " + where + - " in handleElevatorDone") + self.notify.error('Unknown mode: ' + where + ' in handleElevatorDone') def enterTeleportIn(self, requestStatus): - base.localAvatar.setPosHpr(render, 0,0,0,0,0,0) - Place.Place.enterTeleportIn(self, requestStatus) - + base.localAvatar.setPosHpr(render, 0, 0, 0, 0, 0, 0) + Place.Place.enterTeleportIn(self, requestStatus) \ No newline at end of file diff --git a/toontown/src/coghq/CogSuitManagerAI.py b/toontown/src/coghq/CogSuitManagerAI.py index 49ed0036..fa4fcec7 100644 --- a/toontown/src/coghq/CogSuitManagerAI.py +++ b/toontown/src/coghq/CogSuitManagerAI.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal import random from toontown.suit import SuitDNA -import CogDisguiseGlobals +from . import CogDisguiseGlobals class CogSuitManagerAI: diff --git a/toontown/src/coghq/ConveyorBelt.py b/toontown/src/coghq/ConveyorBelt.py index 6951aed2..e9e3a206 100644 --- a/toontown/src/coghq/ConveyorBelt.py +++ b/toontown/src/coghq/ConveyorBelt.py @@ -1,39 +1,16 @@ -"""ConveyorBelt module: contains the ConveyorBelt class""" - from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import MovingPlatform +from . import MovingPlatform from otp.level import BasicEntities -# TODO: fix cracks between treads - class ConveyorBelt(BasicEntities.NodePathEntity): - """ - Conveyer belt is made up of a series of contiguous MovingPlatforms, - called 'treads'. Belt extends in +Y. You must provide a tread model - and the length of that tread model in Y. Model should have floor poly - that starts at Y=0 and extends to Y=treadLength. Model should match up - with itself; two tread models aligned in X and Z and separated by - treadLength in Y should fit together seamlessly. - - ConveyerBelt will calculate how many treads are needed to cover 'length' - feet of belt, and instantiate that many MovingPlatforms using the - provided tread model. Treads are then moved forward in +Y at 'speed'. - There is an extra tread created to sit behind Y=0; this extra tread - fills in the beginning of the belt as the last tread slides past the end. - Once the belt has moved treadLength feet, last tread is placed at the - beginning, and so on. - - To avoid popping localToon back to the beginning of the belt, last tread - explicitly dumps localToon just before popping back to the beginning. - """ + __module__ = __name__ UseClipPlanes = 1 def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) - self.initBelt() - + def destroy(self): self.destroyBelt() BasicEntities.NodePathEntity.destroy(self) @@ -42,24 +19,13 @@ def initBelt(self): treadModel = loader.loadModel(self.treadModelPath) treadModel.setSx(self.widthScale) treadModel.flattenLight() - - # add one to cover the full belt length, one to compensate for - # the tread's origin placement, then one more to cover a tread's - # length of movement - self.numTreads = int(self.length/self.treadLength) + 3 - + self.numTreads = int(self.length / self.treadLength) + 3 self.beltNode = self.attachNewNode('belt') - - # make copies of the tread model self.treads = [] - for i in xrange(self.numTreads): + for i in range(self.numTreads): mp = MovingPlatform.MovingPlatform() mp.parentingNode = render.attachNewNode('parentTarget') - mp.setupCopyModel('conv%s-%s' % (self.getParentToken(), i), - treadModel, self.floorName, - parentingNode=mp.parentingNode) - # we can't attach the parenting node until we've called - # setupCopyModel + mp.setupCopyModel('conv%s-%s' % (self.getParentToken(), i), treadModel, self.floorName, parentingNode=mp.parentingNode) mp.parentingNode.reparentTo(mp) mp.reparentTo(self.beltNode) self.treads.append(mp) @@ -72,73 +38,50 @@ def destroyBelt(self): tread.destroy() tread.parentingNode.removeNode() del tread.parentingNode + del self.treads self.beltNode.removeNode() - del self.beltNode - + def start(self): startTime = self.level.startTime treadsIval = Parallel(name='treads') treadPeriod = self.treadLength / abs(self.speed) - # the first tread should start fully behind the origin startY = -self.treadLength - for i in xrange(self.numTreads): - # one lerp will bring this tread to the end - # another will bring it from the beginning to its starting point + for i in range(self.numTreads): periodsToEnd = self.numTreads - i periodsFromStart = self.numTreads - periodsToEnd ival = Sequence() if periodsToEnd != 0: - ival.append(LerpPosInterval( - self.treads[i], duration=treadPeriod*periodsToEnd, - pos=Point3(0,startY+self.numTreads*self.treadLength,0), - startPos=Point3(0,startY+i*self.treadLength,0), - fluid = 1, - )) + ival.append(LerpPosInterval(self.treads[i], duration=treadPeriod * periodsToEnd, pos=Point3(0, startY + self.numTreads * self.treadLength, 0), startPos=Point3(0, startY + i * self.treadLength, 0), fluid=1)) + def dumpContents(tread=self.treads[i]): - # wrtReparent everything to render - # shouldn't have to do this, but it's better to - # be safe -- having a toon pop back to the start - # of the belt would look really bad. - # There should be ground covering up the start and - # end of the conveyor belt that picks up the toon. tread.releaseLocalToon() - ival.append(Sequence( - Func(dumpContents), - # now that we've dumped localToon, make SURE the tread - # goes away so he can't get back on - Func(self.treads[i].setPos, - Point3(0,startY+self.numTreads*self.treadLength,0)), - )) + + ival.append(Sequence(Func(dumpContents), Func(self.treads[i].setPos, Point3(0, startY + self.numTreads * self.treadLength, 0)))) if periodsFromStart != 0: - ival.append(LerpPosInterval( - self.treads[i], duration=treadPeriod*periodsFromStart, - pos=Point3(0,startY+i*self.treadLength,0), - startPos=Point3(0,startY,0), - fluid = 1, - )) + ival.append(LerpPosInterval(self.treads[i], duration=treadPeriod * periodsFromStart, pos=Point3(0, startY + i * self.treadLength, 0), startPos=Point3(0, startY, 0), fluid=1)) treadsIval.append(ival) - self.beltIval = Sequence(treadsIval, - name='ConveyorBelt-%s' % self.entId, - ) - playRate = 1. - startT = 0. + self.beltIval = Sequence(treadsIval, name='ConveyorBelt-%s' % self.entId) + playRate = 1.0 + startT = 0.0 endT = self.beltIval.getDuration() - if self.speed < 0.: - playRate = -1. + if self.speed < 0.0: + playRate = -1.0 temp = startT startT = endT endT = temp self.beltIval.loop(playRate=playRate) self.beltIval.setT(globalClock.getFrameTime() - startTime) - if ConveyorBelt.UseClipPlanes: - # add some clip planes to get rid of the tread parts that poke out - # of the start and end of the belt headClip = PlaneNode('headClip') tailClip = PlaneNode('tailClip') + cpa = ClipPlaneAttrib.make(ClipPlaneAttrib.OAdd, headClip, tailClip) + self.beltNode.node().setAttrib(cpa) + cpa = ClipPlaneAttrib.make(ClipPlaneAttrib.ORemove, headClip, tailClip) + for tread in self.treads: + tread.parentingNode.node().setAttrib(cpa) self.headClipPath = self.beltNode.attachNewNode(headClip) self.headClipPath.setP(-90) @@ -146,45 +89,21 @@ def dumpContents(tread=self.treads[i]): self.tailClipPath.setY(self.length) self.tailClipPath.setP(90) - self.beltNode.setClipPlane(self.headClipPath) - self.beltNode.setClipPlane(self.tailClipPath) - - # don't clip things that are parented to the treads - for tread in self.treads: - tread.parentingNode.setClipPlaneOff(self.headClipPath) - tread.parentingNode.setClipPlaneOff(self.tailClipPath) - def stop(self): if hasattr(self, 'beltIval'): self.beltIval.pause() del self.beltIval - if ConveyorBelt.UseClipPlanes: - # get rid of clip planes self.headClipPath.removeNode() del self.headClipPath self.tailClipPath.removeNode() del self.tailClipPath - self.clearClipPlane() - - for tread in self.treads: - tread.parentingNode.clearClipPlane() + cpaType = ClipPlaneAttrib.getClassType() + self.node().clearAttrib(cpaType) + base.localAvatar.node().clearAttrib(cpaType) if __dev__: + def attribChanged(self, attrib, value): self.destroyBelt() - self.initBelt() - -""" -import ConveyorBelt -from toontown.toonbase import ToontownGlobals -treadModel = loader.loadModel("phase_4/models/minigames/block") -treadModel.setSx(3.) -treadModel.setSz(.1) -cb = ConveyorBelt.ConveyorBelt(0, speed=ToontownGlobals.ToonForwardSpeed * .5, - length=80, treadModel=treadModel, treadLength=4) -cb.reparentTo(base.localAvatar) -cb.setPos(0,10,1) -cb.wrtReparentTo(render) -cb.start() -""" + self.initBelt() \ No newline at end of file diff --git a/toontown/src/coghq/CountryClubLayout.py b/toontown/src/coghq/CountryClubLayout.py index 3c1f437c..350c6ea0 100644 --- a/toontown/src/coghq/CountryClubLayout.py +++ b/toontown/src/coghq/CountryClubLayout.py @@ -7,21 +7,21 @@ def printAllBossbotInfo(): # print out roomId->room name - print 'roomId: roomName' - for roomId, roomName in CountryClubRoomSpecs.BossbotCountryClubRoomId2RoomName.items(): - print '%s: %s' % (roomId, roomName) + print('roomId: roomName') + for roomId, roomName in list(CountryClubRoomSpecs.BossbotCountryClubRoomId2RoomName.items()): + print('%s: %s' % (roomId, roomName)) # print out # of battles in each room - print '\nroomId: numBattles' - for roomId, numBattles in CountryClubRoomSpecs.roomId2numBattles.items(): - print '%s: %s' % (roomId, numBattles) + print('\nroomId: numBattles') + for roomId, numBattles in list(CountryClubRoomSpecs.roomId2numBattles.items()): + print('%s: %s' % (roomId, numBattles)) # print out all of the rooms in all countryClub floors - print '\ncountryClubId floor roomIds' + print('\ncountryClubId floor roomIds') printCountryClubRoomIds() # print out # of rooms in each countryClub floor - print '\ncountryClubId floor numRooms' + print('\ncountryClubId floor numRooms') printNumRooms() # print out # of non-skippable battles in each countryClub floor - print '\ncountryClubId floor numForcedBattles' + print('\ncountryClubId floor numForcedBattles') printNumBattles() # print out info on all countryClub levels for Bossbot @@ -31,23 +31,23 @@ def iterateBossbotCountryClubs(func): for countryClubId in [ToontownGlobals.BossbotCountryClubIntA, ToontownGlobals.BossbotCountryClubIntB, ToontownGlobals.BossbotCountryClubIntC,]: - for floorNum in xrange(ToontownGlobals.CountryClubNumFloors[countryClubId]): + for floorNum in range(ToontownGlobals.CountryClubNumFloors[countryClubId]): func(CountryClubLayout(countryClubId, floorNum)) def printCountryClubInfo(): - def func(ml): print ml + def func(ml): print(ml) iterateBossbotCountryClubs(func) def printCountryClubRoomIds(): - def func(ml): print ml.getCountryClubId(), ml.getFloorNum(), ml.getRoomIds() + def func(ml): print(ml.getCountryClubId(), ml.getFloorNum(), ml.getRoomIds()) iterateBossbotCountryClubs(func) def printCountryClubRoomNames(): - def func(ml): print ml.getCountryClubId(), ml.getFloorNum(), ml.getRoomNames() + def func(ml): print(ml.getCountryClubId(), ml.getFloorNum(), ml.getRoomNames()) iterateBossbotCountryClubs(func) def printNumRooms(): - def func(ml): print ml.getCountryClubId(), ml.getFloorNum(), ml.getNumRooms() + def func(ml): print(ml.getCountryClubId(), ml.getFloorNum(), ml.getNumRooms()) iterateBossbotCountryClubs(func) def printNumBattles(): - def func(ml): print ml.getCountryClubId(), ml.getFloorNum(), ml.getNumBattles() + def func(ml): print(ml.getCountryClubId(), ml.getFloorNum(), ml.getNumBattles()) iterateBossbotCountryClubs(func) @@ -174,7 +174,7 @@ def __init__(self, countryClubId, floorNum ,layoutIndex): # pick the hallways hallwayRng = self.getRng() connectorRoomNames = CountryClubRoomSpecs.BossbotCountryClubConnectorRooms - for i in xrange(self.numHallways): + for i in range(self.numHallways): self.hallways.append(hallwayRng.choice(connectorRoomNames)) def _genFloorLayout(self): @@ -206,7 +206,7 @@ def _genFloorLayout(self): # get list of all battle rooms allBattleRooms = [] - for num, roomIds in numBattles2middleRoomIds.items(): + for num, roomIds in list(numBattles2middleRoomIds.items()): if num > 0: allBattleRooms.extend(roomIds) @@ -228,7 +228,7 @@ def _genFloorLayout(self): if middleRoomsLeft > 0: # choose action rooms for the rest of the middle rooms actionRoomIds = numBattles2middleRoomIds[0] - for i in xrange(middleRoomsLeft): + for i in range(middleRoomsLeft): roomId = rng.choice(actionRoomIds) actionRoomIds.remove(roomId) middleRoomIds.append(roomId) @@ -240,7 +240,7 @@ def _genFloorLayout(self): #rng.shuffle(middleRoomIds) # temp only for debugging middleRoomIds.sort() - print('middleRoomIds=%s' % middleRoomIds) + print(('middleRoomIds=%s' % middleRoomIds)) roomIds.extend(middleRoomIds) # add the chosen final room roomIds.append(finalRoomId) diff --git a/toontown/src/coghq/CountryClubManagerAI.py b/toontown/src/coghq/CountryClubManagerAI.py index 4f7445b7..f833f724 100644 --- a/toontown/src/coghq/CountryClubManagerAI.py +++ b/toontown/src/coghq/CountryClubManagerAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedCountryClubAI +from . import DistributedCountryClubAI from toontown.toonbase import ToontownGlobals from toontown.coghq import CountryClubLayout from direct.showbase import DirectObject @@ -50,7 +50,7 @@ def createCountryClub(self, countryClubId, players): for avId in players: if bboard.has('countryClubRoom-%s' % avId): roomId = bboard.get('countryClubRoom-%s' % avId) - for i in xrange(numFloors): + for i in range(numFloors): layout = CountryClubLayout.CountryClubLayout(countryClubId, i) if roomId in layout.getRoomIds(): floor = i diff --git a/toontown/src/coghq/CountryClubRoomBase.py b/toontown/src/coghq/CountryClubRoomBase.py index fc481e48..8c58925d 100644 --- a/toontown/src/coghq/CountryClubRoomBase.py +++ b/toontown/src/coghq/CountryClubRoomBase.py @@ -25,7 +25,7 @@ def getCountryClubEntityTypeReg(self): # return an EntityTypeRegistry with information about the # entity types that countryClubys use # Use the same types as factories - import FactoryEntityTypes + from . import FactoryEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(FactoryEntityTypes) return typeReg diff --git a/toontown/src/coghq/CountryClubRoomSpecs.py b/toontown/src/coghq/CountryClubRoomSpecs.py index b23adbe7..0d65f0be 100644 --- a/toontown/src/coghq/CountryClubRoomSpecs.py +++ b/toontown/src/coghq/CountryClubRoomSpecs.py @@ -56,8 +56,8 @@ def getNumBattles(roomId): # dict of roomId to spec Python module CashbotMintSpecModules = {} -for roomName, roomId in BossbotCountryClubRoomName2RoomId.items(): - exec 'from toontown.coghq import %s' % roomName +for roomName, roomId in list(BossbotCountryClubRoomName2RoomId.items()): + exec('from toontown.coghq import %s' % roomName) CashbotMintSpecModules[roomId] = eval(roomName) ## until cogs are entities... @@ -72,7 +72,7 @@ def getNumBattles(roomId): } roomId2numBattles = {} -for roomName, roomId in BossbotCountryClubRoomName2RoomId.items(): +for roomName, roomId in list(BossbotCountryClubRoomName2RoomId.items()): if roomName not in CogSpecModules: roomId2numBattles[roomId] = 0 else: diff --git a/toontown/src/coghq/CrateGlobals.py b/toontown/src/coghq/CrateGlobals.py index 3bf482ac..8566f1e4 100644 --- a/toontown/src/coghq/CrateGlobals.py +++ b/toontown/src/coghq/CrateGlobals.py @@ -1,29 +1,11 @@ from pandac.PandaModules import * - -CRATE_CLEAR = 0 +CRATE_CLEAR = 0 CRATE_POWERUP = 1 -CRATE_PUSH = 2 - -CrateNormals = [Vec3(1,0,0), - Vec3(-1,0,0), - Vec3(0,1,0), - Vec3(0,-1,0)] -CrateHprs = [Vec3(90,0,0), - Vec3(270,0,0), - Vec3(180,0,0), - Vec3(0,0,0)] - +CRATE_PUSH = 2 +CrateNormals = [ + Vec3(1, 0, 0), Vec3(-1, 0, 0), Vec3(0, 1, 0), Vec3(0, -1, 0)] +CrateHprs = [ + Vec3(90, 0, 0), Vec3(270, 0, 0), Vec3(180, 0, 0), Vec3(0, 0, 0)] T_PUSH = 1.5 -T_PAUSE = .1 - -TorsoToOffset = {"ss" : .17, - "ms" : .18, - "ls" : .75, - "sd" : .17, - "md" : .18, - "ld" : .75, - "s" : .17, - "m" : .18, - "l" : .75, - } - +T_PAUSE = 0.1 +TorsoToOffset = {'ss': 0.17, 'ms': 0.18, 'ls': 0.75, 'sd': 0.17, 'md': 0.18, 'ld': 0.75, 's': 0.17, 'm': 0.18, 'l': 0.75} \ No newline at end of file diff --git a/toontown/src/coghq/CrusherCell.py b/toontown/src/coghq/CrusherCell.py index 37517414..40fe8da1 100644 --- a/toontown/src/coghq/CrusherCell.py +++ b/toontown/src/coghq/CrusherCell.py @@ -1,10 +1,9 @@ -import ActiveCell +from . import ActiveCell from direct.directnotify import DirectNotifyGlobal class CrusherCell(ActiveCell.ActiveCell): - notify = DirectNotifyGlobal.directNotify.newCategory("CrusherCell") - - def __init__(self, cr): - ActiveCell.ActiveCell.__init__(self,cr) + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('CrusherCell') - + def __init__(self, cr): + ActiveCell.ActiveCell.__init__(self, cr) \ No newline at end of file diff --git a/toontown/src/coghq/CrusherCellAI.py b/toontown/src/coghq/CrusherCellAI.py index 7394d383..4e766078 100644 --- a/toontown/src/coghq/CrusherCellAI.py +++ b/toontown/src/coghq/CrusherCellAI.py @@ -1,4 +1,4 @@ -import ActiveCellAI +from . import ActiveCellAI from direct.directnotify import DirectNotifyGlobal class CrusherCellAI(ActiveCellAI.ActiveCellAI): diff --git a/toontown/src/coghq/DinerStatusIndicator.py b/toontown/src/coghq/DinerStatusIndicator.py index 5e4b6322..528c6111 100644 --- a/toontown/src/coghq/DinerStatusIndicator.py +++ b/toontown/src/coghq/DinerStatusIndicator.py @@ -125,7 +125,7 @@ def createMeterInterval(self, icon, meter, time): flashDuration = 10 if time > flashDuration: flashingTrack.append(Wait(time-flashDuration)) - for i in xrange(10): + for i in range(10): flashingTrack.append(Parallel( LerpColorScaleInterval(icon, 0.5, VBase4(1, 0, 0, 1)), icon.scaleInterval(0.5, 1.25) diff --git a/toontown/src/coghq/DirectionalCell.py b/toontown/src/coghq/DirectionalCell.py index 24071d02..959611b1 100644 --- a/toontown/src/coghq/DirectionalCell.py +++ b/toontown/src/coghq/DirectionalCell.py @@ -1,10 +1,9 @@ -import ActiveCell +from . import ActiveCell from direct.directnotify import DirectNotifyGlobal class DirectionalCell(ActiveCell.ActiveCell): - notify = DirectNotifyGlobal.directNotify.newCategory("DirectionalCell") - - def __init__(self,cr): - ActiveCell.ActiveCell.__init__(self,cr) + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DirectionalCell') - + def __init__(self, cr): + ActiveCell.ActiveCell.__init__(self, cr) \ No newline at end of file diff --git a/toontown/src/coghq/DirectionalCellAI.py b/toontown/src/coghq/DirectionalCellAI.py index 18272c8c..f383d5b8 100644 --- a/toontown/src/coghq/DirectionalCellAI.py +++ b/toontown/src/coghq/DirectionalCellAI.py @@ -1,6 +1,6 @@ from direct.directnotify import DirectNotifyGlobal -import ActiveCellAI -import CrateGlobals +from . import ActiveCellAI +from . import CrateGlobals from direct.task import Task class DirectionalCellAI(ActiveCellAI.ActiveCellAI): diff --git a/toontown/src/coghq/DistributedBanquetTable.py b/toontown/src/coghq/DistributedBanquetTable.py index b42729df..b4f025e9 100644 --- a/toontown/src/coghq/DistributedBanquetTable.py +++ b/toontown/src/coghq/DistributedBanquetTable.py @@ -134,10 +134,10 @@ def delete(self): DistributedObject.DistributedObject.delete(self) self.boss = None self.ignoreAll() - for indicator in self.dinerStatusIndicators.values(): + for indicator in list(self.dinerStatusIndicators.values()): indicator.delete() self.dinerStatusIndicators = {} - for diner in self.diners.values(): + for diner in list(self.diners.values()): diner.delete() self.diners = {} self.powerBar.destroy() @@ -202,7 +202,7 @@ def setNumDiners(self, numDiners): def setDinerInfo(self, hungryDurations, eatingDurations, dinerLevels): """Handle the AI telling us how long each suit will be hungry or eating.""" self.dinerInfo = {} - for i in xrange(len(hungryDurations)): + for i in range(len(hungryDurations)): hungryDur = hungryDurations[i] eatingDur = eatingDurations[i] dinerLevel = dinerLevels[i] @@ -235,7 +235,7 @@ def loadAssets(self): def setupDiners(self): """Create the suits seated on the chairs.""" - for i in xrange(self.numDiners): + for i in range(self.numDiners): newDiner = self.createDiner(i) self.diners[i] = newDiner self.dinerStatus[i] = self.HUNGRY @@ -293,7 +293,7 @@ def createDiner(self,i): def setupChairCols(self): """Setup the chair collisions of all chairs.""" - for i in xrange(self.numDiners): + for i in range(self.numDiners): chairCol = self.tableGroup.find('**/collision_chair_%d' % (i +1)) colName = 'ChairCol-%d-%d' % (self.index,i) chairCol.setTag('chairIndex',str(i)) @@ -361,7 +361,7 @@ def removeFoodModel(self, chairIndex): """Remove the food in front of any diner.""" serviceLoc = self.serviceLocs.get(chairIndex) if serviceLoc: - for i in xrange(serviceLoc.getNumChildren()): + for i in range(serviceLoc.getNumChildren()): serviceLoc.getChild(0).removeNode() def changeDinerToEating(self, chairIndex): @@ -508,7 +508,7 @@ def changeDinerToHidden(self, chairIndex): def setAllDinersToSitNeutral(self): startFrame = 0 - for diner in self.diners.values(): + for diner in list(self.diners.values()): if not diner.isHidden(): diner.loop('sit', fromFrame = startFrame) startFrame += 1 @@ -517,20 +517,20 @@ def setAllDinersToSitNeutral(self): def cleanupIntervals(self): """Cleanup all intervals.""" - for interval in self.activeIntervals.values(): + for interval in list(self.activeIntervals.values()): interval.finish() self.activeIntervals = {} def clearInterval(self, name, finish=1): """ Clean up the specified Interval """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): ival = self.activeIntervals[name] if finish: ival.finish() else: ival.pause() - if self.activeIntervals.has_key(name): + if name in self.activeIntervals: del self.activeIntervals[name] else: self.notify.debug('interval: %s already cleared' % name) @@ -538,7 +538,7 @@ def clearInterval(self, name, finish=1): def finishInterval(self, name): """ Force the specified Interval to jump to the end """ - if (self.activeIntervals.has_key(name)): + if (name in self.activeIntervals): interval = self.activeIntervals[name] interval.finish() @@ -546,7 +546,7 @@ def finishInterval(self, name): def getNotDeadInfo(self): """Return a list of (
    %s
    SettingValue
    , , ) suits that are not dead.""" notDeadList = [] - for i in xrange(self.numDiners): + for i in range(self.numDiners): if self.dinerStatus[i] != self.DEAD: notDeadList.append( (self.index, i, 12)) return notDeadList @@ -563,7 +563,7 @@ def exitOn(self): def enterInactive(self): """Handle entering the inactive state.""" - for chairIndex in xrange(self.numDiners): + for chairIndex in range(self.numDiners): indicator = self.dinerStatusIndicators.get(chairIndex) if indicator: indicator.request('Inactive') @@ -624,16 +624,16 @@ def prepareForPhaseFour(self): """Set up geometry and collisions for phase four.""" if not self.preparedForPhaseFour: # hide the chairs and chair collisions - for i in xrange(8): + for i in range(8): chair = self.tableGroup.find('**/chair_%d' % (i +1)) if not chair.isEmpty(): chair.hide() colChairs = self.tableGroup.findAllMatches('**/ChairCol*') - for i in xrange(colChairs.getNumPaths()): + for i in range(colChairs.getNumPaths()): col = colChairs.getPath(i) col.stash() colChairs = self.tableGroup.findAllMatches('**/collision_chair*') - for i in xrange(colChairs.getNumPaths()): + for i in range(colChairs.getNumPaths()): col = colChairs.getPath(i) col.stash() # make colliding against the table do something @@ -1450,7 +1450,7 @@ def __endFireWater(self): def __updateWaterPower(self, task): """Change the value of the power meter.""" if not self.powerBar: - print "### no power bar!!!" + print("### no power bar!!!") return task.done newPower = self.__getWaterPower(globalClock.getFrameTime()) diff --git a/toontown/src/coghq/DistributedBanquetTableAI.py b/toontown/src/coghq/DistributedBanquetTableAI.py index bccd6cd1..ebe8127e 100644 --- a/toontown/src/coghq/DistributedBanquetTableAI.py +++ b/toontown/src/coghq/DistributedBanquetTableAI.py @@ -22,7 +22,7 @@ def __init__(self, air, boss, index, numDiners, dinerLevel): self.numChairs = 8 self.dinerStatus = {} # is the dinner dead, hungry, eating self.dinerInfo = {} # keep track how long they stay in hungry and eating states - for i in xrange(self.numDiners): + for i in range(self.numDiners): self.dinerStatus[i] = self.INACTIVE diffSettings = ToontownGlobals.BossbotBossDifficultySettings[self.boss.battleDifficulty] hungryDuration = diffSettings[4] @@ -74,7 +74,7 @@ def getDinerInfo(self): hungryDurations = [] eatingDurations = [] dinerLevels = [] - for i in xrange(self.numDiners): + for i in range(self.numDiners): hungryDurations.append(self.dinerInfo[i][0]) eatingDurations.append(self.dinerInfo[i][1]) dinerLevels.append(self.dinerInfo[i][2]) @@ -183,7 +183,7 @@ def goFlat(self): def getNotDeadInfo(self): """Return a list of (
    , , ) suits that are not dead.""" notDeadList = [] - for i in xrange(self.numDiners): + for i in range(self.numDiners): if self.dinerStatus[i] != self.DEAD: notDeadList.append( (self.index, i, self.dinerInfo[i][2])) return notDeadList @@ -244,7 +244,7 @@ def __getTableId(self, avId): ### FSM States ### def enterOn(self): - for i in xrange(self.numDiners): + for i in range(self.numDiners): self.b_setDinerStatus(i, self.HUNGRY) """Handle entering the on state.""" pass @@ -263,7 +263,7 @@ def exitOff(self): def enterInactive(self): """Handle going to the inactive state.""" - for task in self.transitionTasks.values(): + for task in list(self.transitionTasks.values()): self.removeTask(task) self.transitionTasks = {} diff --git a/toontown/src/coghq/DistributedBarrelBase.py b/toontown/src/coghq/DistributedBarrelBase.py index f4002666..09b9eaeb 100644 --- a/toontown/src/coghq/DistributedBarrelBase.py +++ b/toontown/src/coghq/DistributedBarrelBase.py @@ -1,159 +1,103 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * from toontown.coghq import BarrelBase - from otp.level import BasicEntities from direct.directnotify import DirectNotifyGlobal -class DistributedBarrelBase(BasicEntities.DistributedNodePathEntity, - BarrelBase.BarrelBase): - notify = DirectNotifyGlobal.directNotify.newCategory("DistributedBarrelBase") +class DistributedBarrelBase(BasicEntities.DistributedNodePathEntity, BarrelBase.BarrelBase): + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBarrelBase') def __init__(self, cr): self.rewardPerGrabMax = 0 BasicEntities.DistributedNodePathEntity.__init__(self, cr) - self.grabSoundPath = "phase_4/audio/sfx/SZ_DD_treasure.mp3" - self.rejectSoundPath = "phase_4/audio/sfx/ring_miss.mp3" + self.grabSoundPath = 'phase_4/audio/sfx/SZ_DD_treasure.mp3' + self.rejectSoundPath = 'phase_4/audio/sfx/ring_miss.mp3' self.animTrack = None self.shadow = 0 - self.barrelScale = .5 - self.sphereRadius = 3.2 + self.barrelScale = 0.5 + self.sphereRadius = 3.0 self.playSoundForRemoteToons = 1 self.gagNode = None self.gagModel = None self.barrel = None - + return + def disable(self): BasicEntities.DistributedNodePathEntity.disable(self) self.ignoreAll() if self.animTrack: self.animTrack.pause() self.animTrack = None - + return + def generate(self): - """generate(self) - This method is called when the DistributedEntity is reintroduced - to the world, either for the first time or from the cache. - """ - BasicEntities.DistributedNodePathEntity.generate(self) - + pass + def delete(self): BasicEntities.DistributedNodePathEntity.delete(self) - self.gagNode.removeNode() del self.gagNode - if self.barrel: self.barrel.removeNode() del self.barrel self.barrel = None + return def announceGenerate(self): BasicEntities.DistributedNodePathEntity.announceGenerate(self) - - # At this point DistributedEntity has filled out all its - # attributes. We can now load the model and apply the label - - # Load the model, (using loadModelOnce), and child it to the nodepath self.loadModel() - - # Make a sphere, name it uniqueName("treasureSphere"), and child it - # to the nodepath. self.collSphere = CollisionSphere(0, 0, 0, self.sphereRadius) - # Make the sphere intangible self.collSphere.setTangible(0) - self.collNode = CollisionNode(self.uniqueName("barrelSphere")) + self.collNode = CollisionNode(self.uniqueName('barrelSphere')) self.collNode.setIntoCollideMask(WallBitmask) self.collNode.addSolid(self.collSphere) self.collNodePath = self.barrel.attachNewNode(self.collNode) self.collNodePath.hide() self.applyLabel() - - # Add a hook looking for collisions with localToon, and call - # requestGrab. - self.accept(self.uniqueName('enterbarrelSphere'), - self.handleEnterSphere) - + self.accept(self.uniqueName('enterbarrelSphere'), self.handleEnterSphere) + def loadModel(self): - # Load the sound effect self.grabSound = base.loadSfx(self.grabSoundPath) self.rejectSound = base.loadSfx(self.rejectSoundPath) - - # load the barrel model - self.barrel = loader.loadModel("phase_4/models/cogHQ/gagTank") - + self.barrel = loader.loadModelCopy('phase_9/models/cogHQ/gagTank') self.barrel.setScale(self.barrelScale) self.barrel.reparentTo(self) - - # set up the node to which the label will be parented - # use dcs node once a locator is added - dcsNode = self.barrel.find("**/gagLabelDCS") - dcsNode.setColor(.15,.15,.1) - - self.gagNode = self.barrel.attachNewNode("gagNode") - self.gagNode.setPosHpr(0.0,-2.62,4.0,0,0,0) - # desaturate the label a bit - self.gagNode.setColorScale(.7,.7,.6,1) + dcsNode = self.barrel.find('**/gagLabelDCS') + dcsNode.setColor(0.15, 0.15, 0.1) + self.gagNode = self.barrel.attachNewNode('gagNode') + self.gagNode.setPosHpr(0.0, -2.62, 4.0, 0, 0, 0) + self.gagNode.setColorScale(0.7, 0.7, 0.6, 1) def handleEnterSphere(self, collEntry=None): localAvId = base.localAvatar.getDoId() self.d_requestGrab() def d_requestGrab(self): - self.sendUpdate("requestGrab", []) + self.sendUpdate('requestGrab', []) def setGrab(self, avId): - self.notify.debug("handleGrab %s" % avId) - # this function handles client-side 'grabbed' behavior - - # Save the avId for later, we may need it if there is an unexpected - # exit. + self.notify.debug('handleGrab %s' % avId) self.avId = avId - if avId == base.localAvatar.doId: - # First, do not try to grab this treasure anymore. self.ignore(self.uniqueName('entertreasureSphere')) - # dim the barrel since we've already acquired our prize - # and can't use it again - self.barrel.setColorScale(.5,.5,.5,1) - - # Play a sound effect, if appropriate - if self.playSoundForRemoteToons or \ - (self.avId == base.localAvatar.getDoId()): + self.barrel.setColorScale(0.5, 0.5, 0.5, 1) + if self.playSoundForRemoteToons or self.avId == base.localAvatar.getDoId(): base.playSfx(self.grabSound) - - # Create the flying treasure track if self.animTrack: self.animTrack.finish() self.animTrack = None - flytime = 1.0 - self.animTrack = Sequence( - LerpScaleInterval(self.barrel, - .2, - 1.1*self.barrelScale, - blendType = "easeInOut"), - LerpScaleInterval(self.barrel, - .2, - self.barrelScale, - blendType = "easeInOut"), - Func(self.resetBarrel), - name = self.uniqueName("animTrack")) - + self.animTrack = Sequence(LerpScaleInterval(self.barrel, 0.2, 1.1 * self.barrelScale, blendType='easeInOut'), LerpScaleInterval(self.barrel, 0.2, self.barrelScale, blendType='easeInOut'), Func(self.resetBarrel), name=self.uniqueName('animTrack')) self.animTrack.start() + return def setReject(self): - # don't do anything - self.notify.debug("I was rejected!!!!!") + self.notify.debug('I was rejected!!!!!') return def resetBarrel(self): - # reset the scale self.barrel.setScale(self.barrelScale) - - # listen to grab attempts again - self.accept(self.uniqueName('entertreasureSphere'), - self.handleEnterSphere) - + self.accept(self.uniqueName('entertreasureSphere'), self.handleEnterSphere) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedBattleFactory.py b/toontown/src/coghq/DistributedBattleFactory.py index 7ff296ae..ca3ee2fe 100644 --- a/toontown/src/coghq/DistributedBattleFactory.py +++ b/toontown/src/coghq/DistributedBattleFactory.py @@ -6,62 +6,45 @@ from toontown.toon import TTEmote from otp.avatar import Emote from toontown.battle import SuitBattleGlobals -import random +import whrandom from toontown.suit import SuitDNA from direct.fsm import State -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from toontown.toonbase import ToontownGlobals class DistributedBattleFactory(DistributedLevelBattle.DistributedLevelBattle): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBattleFactory') def __init__(self, cr): - """ - cr is a ClientRepository. - """ - DistributedLevelBattle.DistributedLevelBattle.__init__(self,cr) - - # Add a new reward state to the battle ClassicFSM - self.fsm.addState(State.State('FactoryReward', - self.enterFactoryReward, - self.exitFactoryReward, - ['Resume'])) + DistributedLevelBattle.DistributedLevelBattle.__init__(self, cr) + self.fsm.addState(State.State('FactoryReward', self.enterFactoryReward, self.exitFactoryReward, [ + 'Resume'])) offState = self.fsm.getStateNamed('Off') offState.addTransition('FactoryReward') playMovieState = self.fsm.getStateNamed('PlayMovie') playMovieState.addTransition('FactoryReward') - ##### FactoryReward state ##### - def enterFactoryReward(self, ts): self.notify.info('enterFactoryReward()') self.disableCollision() self.delayDeleteMembers() - if (self.hasLocalToon()): + if self.hasLocalToon(): NametagGlobals.setMasterArrowsOn(0) if self.bossBattle: messenger.send('localToonConfrontedForeman') - self.movie.playReward(ts, self.uniqueName('building-reward'), - self.__handleFactoryRewardDone) + self.movie.playReward(ts, self.uniqueName('building-reward'), self.__handleFactoryRewardDone) def __handleFactoryRewardDone(self): self.notify.info('Factory reward done') - if (self.hasLocalToon()): + if self.hasLocalToon(): self.d_rewardDone(base.localAvatar.doId) self.movie.resetReward() - - # Now request our local battle object enter the Resume state, - # which frees us from the battle. The distributed object may - # not enter the Resume state yet (it has to wait until all the - # toons involved have reported back up), but there's no reason - # we have to wait around for that. self.fsm.request('Resume') def exitFactoryReward(self): self.notify.info('exitFactoryReward()') - # In case we're observing and the server cuts us off - # this guarantees all final animations get started and things - # get cleaned up self.movie.resetReward(finish=1) - self._removeMembersKeep() + self.membersKeep = None NametagGlobals.setMasterArrowsOn(1) + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedBattleFactoryAI.py b/toontown/src/coghq/DistributedBattleFactoryAI.py index 657efb2b..b4f0b423 100644 --- a/toontown/src/coghq/DistributedBattleFactoryAI.py +++ b/toontown/src/coghq/DistributedBattleFactoryAI.py @@ -3,7 +3,7 @@ from direct.fsm import State from direct.fsm import ClassicFSM, State from toontown.battle.BattleBase import * -import CogDisguiseGlobals +from . import CogDisguiseGlobals from direct.showbase.PythonUtil import addListsByValue class DistributedBattleFactoryAI(DistributedLevelBattleAI.DistributedLevelBattleAI): diff --git a/toontown/src/coghq/DistributedBeanBarrel.py b/toontown/src/coghq/DistributedBeanBarrel.py index 5e9c645e..3dba15cc 100644 --- a/toontown/src/coghq/DistributedBeanBarrel.py +++ b/toontown/src/coghq/DistributedBeanBarrel.py @@ -1,12 +1,12 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * - from direct.directnotify import DirectNotifyGlobal -import DistributedBarrelBase +from . import DistributedBarrelBase class DistributedBeanBarrel(DistributedBarrelBase.DistributedBarrelBase): + __module__ = __name__ def __init__(self, cr): DistributedBarrelBase.DistributedBarrelBase.__init__(self, cr) @@ -21,15 +21,14 @@ def delete(self): self.gagModel.removeNode() del self.gagModel DistributedBarrelBase.DistributedBarrelBase.delete(self) - + def applyLabel(self): - purchaseModels = loader.loadModel("phase_4/models/gui/purchase_gui") - self.gagModel = purchaseModels.find("**/Jar") + purchaseModels = loader.loadModelCopy('phase_4/models/gui/purchase_gui') + self.gagModel = purchaseModels.find('**/Jar') self.gagModel.reparentTo(self.gagNode) self.gagModel.setScale(self.gagScale) - self.gagModel.setPos(0,-0.1,0) + self.gagModel.setPos(0, -0.1, 0) purchaseModels.removeNode() - + def setGrab(self, avId): - DistributedBarrelBase.DistributedBarrelBase.setGrab(self,avId) - + DistributedBarrelBase.DistributedBarrelBase.setGrab(self, avId) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedBeanBarrelAI.py b/toontown/src/coghq/DistributedBeanBarrelAI.py index 3a8deb53..d02cd813 100644 --- a/toontown/src/coghq/DistributedBeanBarrelAI.py +++ b/toontown/src/coghq/DistributedBeanBarrelAI.py @@ -1,4 +1,4 @@ -import DistributedBarrelBaseAI +from . import DistributedBarrelBaseAI from direct.directnotify import DirectNotifyGlobal from direct.task import Task diff --git a/toontown/src/coghq/DistributedButton.py b/toontown/src/coghq/DistributedButton.py index c34f983d..92b6bc73 100644 --- a/toontown/src/coghq/DistributedButton.py +++ b/toontown/src/coghq/DistributedButton.py @@ -1,304 +1,118 @@ -""" DistributedButton module: contains the DistributedCogHqButton - class, the client side representation of a DistributedCogHqButtonAI.""" - -from pandac.PandaModules import * from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - -import MovingPlatform +from . import MovingPlatform from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedSwitch +from . import DistributedSwitch +from direct.distributed import DelayDelete from toontown.toonbase import TTLocalizer class DistributedButton(DistributedSwitch.DistributedSwitch): - """ - DistributedButton class: The client side - representation of a Cog HQ button. - """ + __module__ = __name__ countdownSeconds = 3.0 def __init__(self, cr): - assert(self.debugPrint("DistributedButton()")) self.countdownTrack = None DistributedSwitch.DistributedSwitch.__init__(self, cr) + return def setSecondsOn(self, secondsOn): self.secondsOn = secondsOn def avatarExit(self, avatarId): - assert(self.debugPrint("DistributedButton.avatarExit(avatarId=%s)"%(avatarId,))) DistributedSwitch.DistributedSwitch.avatarExit(self, avatarId) - if (self.secondsOn != -1.0 - and self.secondsOn > 0.0 - and self.countdownSeconds > 0.0 - and self.countdownSeconds < self.secondsOn - and self.fsm.getCurrentState().getName() == 'playing'): + if self.secondsOn != -1.0 and self.secondsOn > 0.0 and self.countdownSeconds > 0.0 and self.countdownSeconds < self.secondsOn and self.fsm.getCurrentState().getName() == 'playing': track = self.switchCountdownTrack() if track is not None: track.start(0.0) - #assert self.countdownTrack == None self.countdownTrack = track - + return + def setupSwitch(self): - assert(self.debugPrint("setupSwitch()")) - model=loader.loadModel('phase_9/models/cogHQ/CogDoor_Button') - assert not model.isEmpty() + model = loader.loadModelCopy('phase_9/models/cogHQ/CogDoor_Button') if model: - buttonBase = model.find("**/buttonBase") - assert not buttonBase.isEmpty() - - change=render.attachNewNode("changePos") - #change.setPos(-17.5, 0.0, 0.0) - #change.setHpr(0.0, 0.0, 0.0) - #change.setScale(0.25, 0.25, 0.1) - #change.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) + buttonBase = model.find('**/buttonBase') + change = render.attachNewNode('changePos') buttonBase.reparentTo(change) - - rootNode=render.attachNewNode(self.getName()+"-buttonBase_root") - #rootNode.setPos(self.pos) - #rootNode.setHpr(self.hpr) - #rootNode.setScale(self.scale) - #rootNode.setColor(self.color) + rootNode = render.attachNewNode(self.getName() + '-buttonBase_root') change.reparentTo(rootNode) - - self.buttonFrameNode=rootNode + self.buttonFrameNode = rootNode self.buttonFrameNode.show() - - button = model.find("**/button") - assert not button.isEmpty() - - change=render.attachNewNode("change") - #change.setPos(0.0, 0.0, -0.4) - #change.setHpr(0.0, 0.0, 0.0) - #change.setScale(0.25, 0.25, 0.25) - #change.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) + button = model.find('**/button') + change = render.attachNewNode('change') button.reparentTo(change) - - rootNode=render.attachNewNode(self.getName()+"-button_root") - #rootNode.setPos(self.pos) - #rootNode.setHpr(self.hpr) - #rootNode.setScale(self.scale) + rootNode = render.attachNewNode(self.getName() + '-button_root') rootNode.setColor(self.color) change.reparentTo(rootNode) - - self.buttonNode=rootNode + self.buttonNode = rootNode self.buttonNode.show() - - #self.platform = MovingPlatform.MovingPlatform() - #self.platform.setupEntity(self.entId, self, self.getName()) - self.buttonFrameNode.reparentTo(self) self.buttonNode.reparentTo(self) - if 1: radius = 0.5 cSphere = CollisionSphere(0.0, 0.0, radius, radius) cSphere.setTangible(0) cSphereNode = CollisionNode(self.getName()) cSphereNode.addSolid(cSphere) - #cSphereNode.setFromCollideMask(BitMask32.allOff()) - #cSphereNode.setIntoCollideMask(ToontownGlobals.WallBitmask) cSphereNode.setCollideMask(ToontownGlobals.WallBitmask) self.cSphereNodePath = rootNode.attachNewNode(cSphereNode) - #self.cSphereNodePath.show() if 1: - collisionFloor = button.find("**/collision_floor") + collisionFloor = button.find('**/collision_floor') if collisionFloor.isEmpty(): - # Add Collision Flat: top = 0.475 size = 0.5 - floor = CollisionPolygon( - Point3(-size,-size,top), - Point3(size,-size,top), - Point3(size,size,top), - Point3(-size,size,top)) + floor = CollisionPolygon(Point3(-size, -size, top), Point3(size, -size, top), Point3(size, size, top), Point3(-size, size, top)) floor.setTangible(1) - floorNode = CollisionNode("collision_floor") + floorNode = CollisionNode('collision_floor') floorNode.addSolid(floor) collisionFloor = button.attachNewNode(floorNode) else: - change=collisionFloor.getParent().attachNewNode("changeFloor") - #change.setPos(-17.5, 0.0, 0.0) - #change.setHpr(0.0, 0.0, 0.0) + change = collisionFloor.getParent().attachNewNode('changeFloor') change.setScale(0.5, 0.5, 1.0) - #change.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) collisionFloor.reparentTo(change) collisionFloor.node().setFromCollideMask(BitMask32.allOff()) collisionFloor.node().setIntoCollideMask(ToontownGlobals.FloorBitmask) - - # Flatten for speed and to avoid scale changes when reparenting: - #self.platform.flattenMedium() - # this messes with this entity's position (sets it 0,0,0), - # which screws up entity parenting - #self.flattenMedium() self.buttonFrameNode.flattenMedium() self.buttonNode.flattenMedium() def delete(self): DistributedSwitch.DistributedSwitch.delete(self) - #self.platform.destroy() - #del self.platform - + def enterTrigger(self, args=None): - assert(self.debugPrint("enterTrigger(args="+str(args)+")")) DistributedSwitch.DistributedSwitch.enterTrigger(self, args) - + def exitTrigger(self, args=None): - assert(self.debugPrint("exitTrigger(args="+str(args)+")")) DistributedSwitch.DistributedSwitch.exitTrigger(self, args) - + def switchOnTrack(self): - """ - Animate the button turning on. - """ - assert self.debugPrint("switchOnTrack()") - onSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_switch_pressed.mp3") + onSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_switch_pressed.mp3') duration = 0.8 - halfDur = duration*0.5 - pos=Vec3(0.0, 0.0, -0.2) - color=Vec4(0.0, 1.0, 0.0, 1.0) - track=Sequence( - Func(self.setIsOn, 1), - Parallel( - SoundInterval( - onSfx, node=self.node, volume=0.9), - LerpPosInterval( - nodePath=self.buttonNode, - duration=duration, - pos=pos, - blendType="easeInOut"), - Sequence( - Wait(halfDur), - # override to counter effects of flattening - LerpColorInterval( - nodePath=self.buttonNode, - duration=halfDur, - color=color, - override=1, - blendType="easeOut")), - ) - ) + halfDur = duration * 0.5 + pos = Vec3(0.0, 0.0, -0.2) + color = Vec4(0.0, 1.0, 0.0, 1.0) + track = Sequence(Func(self.setIsOn, 1), Parallel(SoundInterval(onSfx, node=self.node, volume=0.9), LerpPosInterval(nodePath=self.buttonNode, duration=duration, pos=pos, blendType='easeInOut'), Sequence(Wait(halfDur), LerpColorInterval(nodePath=self.buttonNode, duration=halfDur, color=color, blendType='easeOut')))) return track - + def switchCountdownTrack(self): - """ - Animate the button turning off. - """ - assert self.debugPrint("switchCountdownTrack()") wait = self.secondsOn - self.countdownSeconds - countDownSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_switch_depressed.mp3") - track=Parallel( - SoundInterval(countDownSfx), - Sequence( # 3.0 seconds. - Wait(wait), - Wait(0.5), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=self.color, - override=1, - blendType="easeIn"), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=Vec4(0.0, 1.0, 0.0, 1.0), - override=1, - blendType="easeOut"), - Wait(0.5), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=self.color, - override=1, - blendType="easeIn"), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=Vec4(0.0, 1.0, 0.0, 1.0), - override=1, - blendType="easeOut"), - Wait(0.4), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=self.color, - override=1, - blendType="easeIn"), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=Vec4(0.0, 1.0, 0.0, 1.0), - override=1, - blendType="easeOut"), - Wait(0.3), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=self.color, - override=1, - blendType="easeIn"), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=Vec4(0.0, 1.0, 0.0, 1.0), - override=1, - blendType="easeOut"), - Wait(0.2), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - color=self.color, - override=1, - blendType="easeIn"), - LerpColorInterval( - nodePath=self.buttonNode, - duration=0.1, - override=1, - color=Vec4(0.0, 1.0, 0.0, 1.0), - blendType="easeOut"), - Wait(0.1), - ) - ) + countDownSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_switch_depressed.mp3') + track = Parallel(SoundInterval(countDownSfx), Sequence(Wait(wait), Wait(0.5), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=self.color, blendType='easeIn'), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=Vec4(0.0, 1.0, 0.0, 1.0), blendType='easeOut'), Wait(0.5), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=self.color, blendType='easeIn'), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=Vec4(0.0, 1.0, 0.0, 1.0), blendType='easeOut'), Wait(0.4), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=self.color, blendType='easeIn'), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=Vec4(0.0, 1.0, 0.0, 1.0), blendType='easeOut'), Wait(0.3), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=self.color, blendType='easeIn'), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=Vec4(0.0, 1.0, 0.0, 1.0), blendType='easeOut'), Wait(0.2), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=self.color, blendType='easeIn'), LerpColorInterval(nodePath=self.buttonNode, duration=0.1, color=Vec4(0.0, 1.0, 0.0, 1.0), blendType='easeOut'), Wait(0.1))) return track - + def switchOffTrack(self): - """ - Animate the button turning off. - """ - assert self.debugPrint("switchOffTrack()") - offSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_switch_popup.mp3") + offSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_switch_popup.mp3') duration = 1.0 - halfDur = duration*0.5 - pos=Vec3(0.0) - #pos.addZ(-0.33*self.scale.getZ()) - track=Sequence( - Parallel( - SoundInterval( - offSfx, node=self.node, volume=1.0), - LerpPosInterval( - nodePath=self.buttonNode, - #other=avatar, - duration=duration, - pos=pos, - blendType="easeInOut"), - Sequence( - Wait(halfDur), - LerpColorInterval( - nodePath=self.buttonNode, - duration=halfDur, - color=self.color, - override=1, - blendType="easeIn")), - ), - Func(self.setIsOn, 0), - ) + halfDur = duration * 0.5 + pos = Vec3(0.0) + track = Sequence(Parallel(SoundInterval(offSfx, node=self.node, volume=1.0), LerpPosInterval(nodePath=self.buttonNode, duration=duration, pos=pos, blendType='easeInOut'), Sequence(Wait(halfDur), LerpColorInterval(nodePath=self.buttonNode, duration=halfDur, color=self.color, blendType='easeIn'))), Func(self.setIsOn, 0)) return track - + def exitPlaying(self): if self.countdownTrack: self.countdownTrack.finish() self.countdownTrack = None DistributedSwitch.DistributedSwitch.exitPlaying(self) + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedButtonAI.py b/toontown/src/coghq/DistributedButtonAI.py index b274aa58..a7f5dd7c 100644 --- a/toontown/src/coghq/DistributedButtonAI.py +++ b/toontown/src/coghq/DistributedButtonAI.py @@ -2,8 +2,8 @@ from direct.directnotify import DirectNotifyGlobal from direct.task import Task -import DistributedSwitchBase -import DistributedSwitchAI +from . import DistributedSwitchBase +from . import DistributedSwitchAI class DistributedButtonAI(DistributedSwitchAI.DistributedSwitchAI): diff --git a/toontown/src/coghq/DistributedCashbotBossCrane.py b/toontown/src/coghq/DistributedCashbotBossCrane.py index 3c0a5bff..2fc57000 100644 --- a/toontown/src/coghq/DistributedCashbotBossCrane.py +++ b/toontown/src/coghq/DistributedCashbotBossCrane.py @@ -1,5 +1,5 @@ -from direct.gui.DirectGui import * from pandac.PandaModules import * +from direct.gui.DirectGui import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * from direct.fsm import FSM @@ -8,67 +8,38 @@ from direct.showbase import PythonUtil from direct.task import Task from toontown.toonbase import ToontownGlobals -from toontown.toonbase import TTLocalizer from otp.otpbase import OTPGlobals -import random class DistributedCashbotBossCrane(DistributedObject.DistributedObject, FSM.FSM): - """ This class represents a crane holding a magnet on a cable. - The DistributedCashbotBoss creates four of these for the CFO - battle scene. """ - + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCashbotBossCrane') - firstMagnetBit = 21 - craneMinY = 8 craneMaxY = 25 - armMinH = -45 armMaxH = 45 - - # How high to place the shadows. We can put these pretty high - # because we play that trick with the bins to make them render - # after other stuff. shadowOffset = 1 - - # The properties when the magnet is unencumbered. emptyFrictionCoef = 0.1 - emptySlideSpeed = 10 # feet per second - emptyRotateSpeed = 20 # degrees per second - - # These points will be useful for sticking the control stick into - # the toon's hands. + emptySlideSpeed = 10 + emptyRotateSpeed = 20 lookAtPoint = Point3(0.3, 0, 0.1) lookAtUp = Vec3(0, -1, 0) - neutralStickHinge = VBase3(0, 90, 0) def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) FSM.FSM.__init__(self, 'DistributedCashbotBossCrane') - self.boss = None self.index = None self.avId = 0 - self.cableLength = 20 self.numLinks = 3 self.initialArmPosition = (0, 20, 0) - self.slideSpeed = self.emptySlideSpeed self.rotateSpeed = self.emptyRotateSpeed - - # This number increments each time we change direction on the - # crane controls. It's used to update the animation - # appropriately. self.changeSeq = 0 self.lastChangeSeq = 0 - - # This is the sound effect currently looping for the crane - # controls. self.moveSound = None - self.links = [] self.activeLinks = [] self.collisions = NodePathCollection() @@ -86,75 +57,41 @@ def __init__(self, cr): self.topLink = self.crane.attachNewNode('topLink') self.topLink.setPos(0, 0, -1) self.shadow = None - - # These are goot to pre-compute for __rotateMagnet(). self.p0 = Point3(0, 0, 0) self.v1 = Vec3(1, 1, 1) - - # Smoothers. self.armSmoother = SmoothMover() - self.armSmoother.setSmoothMode(SmoothMover.SMOn) self.linkSmoothers = [] self.smoothStarted = 0 self.__broadcastPeriod = 0.2 - - # Since the cable might not calculate its bounding volume - # correctly, let's say that anything that passes the outer - # bounding volume passes everything. self.cable.node().setFinal(1) - self.crane.setPos(*self.initialArmPosition) self.heldObject = None - self.closeButton = None self.craneAdviceLabel = None self.magnetAdviceLabel = None - - self.atLimitSfx = base.loadSfx( - "phase_4/audio/sfx/MG_cannon_adjust.mp3") - - self.magnetOnSfx = base.loadSfx( - "phase_10/audio/sfx/CBHQ_CFO_magnet_on.mp3") - - # We prefer a wav file for this looping sound effect, since - # looping an mp3 always introduces some stutter. - self.magnetLoopSfx = base.loadSfx( - "phase_10/audio/sfx/CBHQ_CFO_magnet_loop.wav") - - # Make these overlap just a bit. - self.magnetSoundInterval = Parallel( - SoundInterval(self.magnetOnSfx), - Sequence(Wait(0.5), - Func(base.playSfx, self.magnetLoopSfx, looping=1))) - - self.craneMoveSfx = base.loadSfx( - "phase_9/audio/sfx/CHQ_FACT_elevator_up_down.mp3") - + self.atLimitSfx = base.loadSfx('phase_4/audio/sfx/MG_cannon_adjust.mp3') + self.magnetOnSfx = base.loadSfx('phase_10/audio/sfx/CBHQ_CFO_magnet_on.mp3') + self.magnetLoopSfx = base.loadSfx('phase_10/audio/sfx/CBHQ_CFO_magnet_loop.wav') + self.magnetSoundInterval = Parallel(SoundInterval(self.magnetOnSfx), Sequence(Wait(0.5), Func(base.playSfx, self.magnetLoopSfx, looping=1))) + self.craneMoveSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_elevator_up_down.mp3') self.fadeTrack = None + return def announceGenerate(self): DistributedObject.DistributedObject.announceGenerate(self) - self.name = 'crane-%s' % (self.doId) + self.name = 'crane-%s' % self.doId self.root.setName(self.name) - self.root.setPosHpr(*ToontownGlobals.CashbotBossCranePosHprs[self.index]) - self.rotateLinkName = self.uniqueName('rotateLink') self.snifferEvent = self.uniqueName('sniffer') self.triggerName = self.uniqueName('trigger') - self.triggerEvent = 'enter%s' % (self.triggerName) + self.triggerEvent = 'enter%s' % self.triggerName self.shadowName = self.uniqueName('shadow') self.flickerName = self.uniqueName('flicker') - self.smoothName = self.uniqueName('craneSmooth') self.posHprBroadcastName = self.uniqueName('craneBroadcast') - self.craneAdviceName = self.uniqueName('craneAdvice') self.magnetAdviceName = self.uniqueName('magnetAdvice') - - # Load up the control model and the stick. We have to do some - # reparenting so we can set things up to slide and scale - # pieces around to accomodate toons of various sizes. self.controlModel = self.boss.controls.copyTo(self.controls) self.cc = NodePath('cc') column = self.controlModel.find('**/column') @@ -168,10 +105,6 @@ def announceGenerate(self): self.bottom = self.controlModel.find('**/bottom') self.bottom.wrtReparentTo(self.cc) self.bottomPos = self.bottom.getPos() - - # Make a trigger sphere so we can detect when the local avatar - # runs up to the controls. We bury the sphere mostly under - # the floor to minimize accidental collisions. cs = CollisionSphere(0, -5, -2, 3) cs.setTangible(0) cn = CollisionNode(self.triggerName) @@ -179,33 +112,21 @@ def announceGenerate(self): cn.setIntoCollideMask(OTPGlobals.WallBitmask) self.trigger = self.root.attachNewNode(cn) self.trigger.stash() - - # Also, a solid tube to keep us from running through the - # control stick itself. This one scales with the control - # model. cs = CollisionTube(0, 2.7, 0, 0, 2.7, 3, 1.2) cn = CollisionNode('tube') cn.addSolid(cs) cn.setIntoCollideMask(OTPGlobals.WallBitmask) self.tube = self.controlModel.attachNewNode(cn) - - # And finally, a safe-proof bubble we put over the whole thing - # to keep safes from falling on us while we're on the controls - # (or from occupying the spot when the controls are vacant). cs = CollisionSphere(0, 0, 2, 3) cn = CollisionNode('safetyBubble') cn.addSolid(cs) - cn.setIntoCollideMask(ToontownGlobals.PieBitmask) + cn.setIntoCollideMask(OTPGlobals.PieBitmask) self.controls.attachNewNode(cn) - arm = self.boss.craneArm.copyTo(self.crane) - - assert(not self.boss.cranes.has_key(self.index)) self.boss.cranes[self.index] = self def disable(self): DistributedObject.DistributedObject.disable(self) - assert(self.boss.cranes.get(self.index) == self) del self.boss.cranes[self.index] self.cleanup() @@ -213,84 +134,32 @@ def cleanup(self): if self.state != 'Off': self.demand('Off') self.boss = None + return def accomodateToon(self, toon): - # This method has two effects: - - # (1) It computes and returns an interval to scale and slide - # the crane controls to suit the indicated toon. - - # (2) As a side effect, when it returns, the crane controls are - # *already* scaled and slid to accomodate the toon, and the toon - # has been positioned in place to operate the controls. - - # Thus, you can use it either by calling it and playing the - # interval that it returns to get a smooth lerp, or simply by - # calling it and ignoring the return value, to jump to - # position. - - - # We start by figuring out where we are going by setting the - # scale and position appropriately, and then we generate a - # lerp interval to take us there. origScale = self.controlModel.getSz() origCcPos = self.cc.getPos() origBottomPos = self.bottom.getPos() origStickHingeHpr = self.stickHinge.getHpr() - - # First, scale the thing overall to match the toon's scale, - # including cheesy effect scales. scale = toon.getGeomNode().getChild(0).getSz(render) self.controlModel.setScale(scale) - - # Then get the position of the toon's right hand when he's - # standing at the controls in a leverNeutral pose. self.cc.setPos(0, 0, 0) toon.setPosHpr(self.controls, 0, 0, 0, 0, 0, 0) toon.pose('leverNeutral', 0) toon.update() pos = toon.rightHand.getPos(self.cc) - - # Now set the control column to the right height and position - # to put the top of the stick approximately in his hand. self.cc.setPos(pos[0], pos[1], pos[2] - 1) - - # And put the bottom piece back on the floor, wherever that - # is from here. self.bottom.setZ(toon, 0.0) self.bottom.setPos(self.bottomPos[0], self.bottomPos[1], self.bottom.getZ()) - - # Also put the joystick in his hand. self.stickHinge.lookAt(toon.rightHand, self.lookAtPoint, self.lookAtUp) - - # Ok, now we can generate the lerp. lerpTime = 0.5 - return Parallel( - self.controlModel.scaleInterval(lerpTime, scale, origScale, blendType = 'easeInOut'), - self.cc.posInterval(lerpTime, self.cc.getPos(), origCcPos, blendType = 'easeInOut'), - self.bottom.posInterval(lerpTime, self.bottom.getPos(), origBottomPos, blendType = 'easeInOut'), - self.stickHinge.quatInterval(lerpTime, self.stickHinge.getHpr(), origStickHingeHpr, blendType = 'easeInOut'), - ) + return Parallel(self.controlModel.scaleInterval(lerpTime, scale, origScale, blendType='easeInOut'), self.cc.posInterval(lerpTime, self.cc.getPos(), origCcPos, blendType='easeInOut'), self.bottom.posInterval(lerpTime, self.bottom.getPos(), origBottomPos, blendType='easeInOut'), self.stickHinge.quatInterval(lerpTime, self.stickHinge.getHpr(), origStickHingeHpr, blendType='easeInOut')) def getRestoreScaleInterval(self): - # This undoes the effect of accomodateToon(), to restore the - # controls' scale to neutral position. Unlike - # accomodateToon(), it has no side effects; you must play (or - # immediately finish) the interval to restore the scale. - lerpTime = 1 - return Parallel( - self.controlModel.scaleInterval(lerpTime, 1, blendType = 'easeInOut'), - self.cc.posInterval(lerpTime, Point3(0, 0, 0), blendType = 'easeInOut'), - self.bottom.posInterval(lerpTime, self.bottomPos, blendType = 'easeInOut'), - self.stickHinge.quatInterval(lerpTime, self.neutralStickHinge, blendType = 'easeInOut'), - ) + return Parallel(self.controlModel.scaleInterval(lerpTime, 1, blendType='easeInOut'), self.cc.posInterval(lerpTime, Point3(0, 0, 0), blendType='easeInOut'), self.bottom.posInterval(lerpTime, self.bottomPos, blendType='easeInOut'), self.stickHinge.quatInterval(lerpTime, self.neutralStickHinge, blendType='easeInOut')) def makeToonGrabInterval(self, toon): - # Generates an interval showing the crane controls scaling to - # match the toon and the toon simultaneously reaching to grab - # the controls. Thenceforth, the toon will animate with the - # controls. origPos = toon.getPos() origHpr = toon.getHpr() a = self.accomodateToon(toon) @@ -298,34 +167,20 @@ def makeToonGrabInterval(self, toon): newHpr = toon.getHpr() origHpr.setX(PythonUtil.fitSrcAngle2Dest(origHpr[0], newHpr[0])) toon.setPosHpr(origPos, origHpr) - walkTime = 0.2 reach = ActorInterval(toon, 'leverReach') if reach.getDuration() < walkTime: - reach = Sequence(ActorInterval(toon, 'walk', loop = 1, - duration = walkTime - reach.getDuration()), - reach) - - i = Sequence( - Parallel(toon.posInterval(walkTime, newPos, origPos), - toon.hprInterval(walkTime, newHpr, origHpr), - reach), - Func(self.startWatchJoystick, toon)) + reach = Sequence(ActorInterval(toon, 'walk', loop=1, duration=walkTime - reach.getDuration()), reach) + i = Sequence(Parallel(toon.posInterval(walkTime, newPos, origPos), toon.hprInterval(walkTime, newHpr, origHpr), reach), Func(self.startWatchJoystick, toon)) i = Parallel(i, a) - return i def __toonPlayWithCallback(self, animName, numFrames): - # Plays the indicated animation on self.toon, and after the - # indicated time has elapsed calls __toonPlayCallback(). - - duration = numFrames / 24. + duration = numFrames / 24.0 self.toon.play(animName) - taskMgr.doMethodLater(duration, self.__toonPlayCallback, - self.uniqueName('toonPlay')) + taskMgr.doMethodLater(duration, self.__toonPlayCallback, self.uniqueName('toonPlay')) def __toonPlayCallback(self, task): - # The animation has finished playing; play the next one. if self.changeSeq == self.lastChangeSeq: self.__toonPlayWithCallback('leverNeutral', 40) else: @@ -336,53 +191,48 @@ def startWatchJoystick(self, toon): self.toon = toon taskMgr.add(self.__watchJoystick, self.uniqueName('watchJoystick')) self.__toonPlayWithCallback('leverNeutral', 40) - - self.accept(toon.uniqueName('disable'), - self.__handleUnexpectedExit, extraArgs = [toon.doId]) + self.accept(toon.uniqueName('disable'), self.__handleUnexpectedExit, extraArgs=[toon.doId]) def stopWatchJoystick(self): taskMgr.remove(self.uniqueName('toonPlay')) taskMgr.remove(self.uniqueName('watchJoystick')) - if self.toon: self.ignore(self.toon.uniqueName('disable')) self.toon = None - + return + def __watchJoystick(self, task): - # Ensure the toon is still standing at the controls. self.toon.setPosHpr(self.controls, 0, 0, 0, 0, 0, 0) self.toon.update() - self.stickHinge.lookAt(self.toon.rightHand, self.lookAtPoint, - self.lookAtUp) + self.stickHinge.lookAt(self.toon.rightHand, self.lookAtPoint, self.lookAtUp) return Task.cont def __handleUnexpectedExit(self, toonId): self.notify.warning('%s: unexpected exit for %s' % (self.doId, toonId)) if self.toon and self.toon.doId == toonId: self.stopWatchJoystick() - def __activatePhysics(self): if not self.physicsActivated: - for an, anp, cnp in self.activeLinks: + for (an, anp, cnp) in self.activeLinks: self.boss.physicsMgr.attachPhysicalNode(an) base.cTrav.addCollider(cnp, self.handler) + self.collisions.unstash() self.physicsActivated = 1 def __deactivatePhysics(self): if self.physicsActivated: - for an, anp, cnp in self.activeLinks: + for (an, anp, cnp) in self.activeLinks: self.boss.physicsMgr.removePhysicalNode(an) base.cTrav.removeCollider(cnp) + self.collisions.stash() self.physicsActivated = 0 def __straightenCable(self): - # Arbitrarily drops the cable right where it stands. for linkNum in range(self.numLinks): - an, anp, cnp = self.activeLinks[linkNum] - + (an, anp, cnp) = self.activeLinks[linkNum] an.getPhysicsObject().setVelocity(0, 0, 0) z = float(linkNum + 1) / float(self.numLinks) * self.cableLength anp.setPos(self.crane.getPos(self.cable)) @@ -396,42 +246,27 @@ def setCableLength(self, length): def setupCable(self): activated = self.physicsActivated self.clearCable() - self.handler = PhysicsCollisionHandler() self.handler.setStaticFrictionCoef(0.1) self.handler.setDynamicFrictionCoef(self.emptyFrictionCoef) - linkWidth = float(self.cableLength) / float(self.numLinks) self.shell = CollisionInvSphere(0, 0, 0, linkWidth + 1) - - # The list of links is built up to pass to the Rope class, to - # make a renderable spline for the cable. self.links = [] self.links.append((self.topLink, Point3(0, 0, 0))) - anchor = self.topLink for linkNum in range(self.numLinks): anchor = self.__makeLink(anchor, linkNum) - # Now that we've made a bunch of collisions, stash 'em all - # (we're initially deactivated). self.collisions.stash() - - # Make the magnet swing naturally on the end of the cable. - self.bottomLink = self.links[-1][0] - self.middleLink = self.links[-2][0] + self.bottomLink = self.links[(-1)][0] + self.middleLink = self.links[(-2)][0] self.magnet = self.bottomLink.attachNewNode('magnet') self.wiggleMagnet = self.magnet.attachNewNode('wiggleMagnet') taskMgr.add(self.__rotateMagnet, self.rotateLinkName) - magnetModel = self.boss.magnet.copyTo(self.wiggleMagnet) magnetModel.setHpr(90, 45, 90) - - # And a node to hold stuff. self.gripper = magnetModel.attachNewNode('gripper') self.gripper.setPos(0, 0, -4) - - # Not to mention a bubble to detect stuff to grab. cn = CollisionNode('sniffer') self.sniffer = magnetModel.attachNewNode(cn) self.sniffer.stash() @@ -443,17 +278,12 @@ def setupCable(self): self.snifferHandler = CollisionHandlerEvent() self.snifferHandler.addInPattern(self.snifferEvent) self.snifferHandler.addAgainPattern(self.snifferEvent) - rope = self.makeSpline() rope.reparentTo(self.cable) rope.setTexture(self.boss.cableTex) - - # Texture coordinates on the cable should be in the range - # (0.83, 0.01) - (0.98, 0.14). ts = TextureStage.getDefault() rope.setTexScale(ts, 0.15, 0.13) rope.setTexOffset(ts, 0.83, 0.01) - if activated: self.__activatePhysics() @@ -467,15 +297,12 @@ def clearCable(self): self.cable.getChildren().detach() self.topLink.getChildren().detach() self.gripper = None + return def makeSpline(self): - # Use the Rope class to draw a spline between the joints of - # the cable. - rope = Rope.Rope() rope.setup(min(len(self.links), 4), self.links) rope.curve.normalizeKnots() - rn = rope.ropeNode rn.setRenderMode(RopeNode.RMTube) rn.setNumSlices(3) @@ -483,45 +310,34 @@ def makeSpline(self): rn.setUvMode(RopeNode.UVParametric) rn.setUvDirection(1) rn.setThickness(0.5) - return rope def startShadow(self): - self.shadow = self.boss.geom.attachNewNode('%s-shadow' % (self.name)) + self.shadow = self.boss.geom.attachNewNode('%s-shadow' % self.name) self.shadow.setColor(1, 1, 1, 0.3) self.shadow.setDepthWrite(0) self.shadow.setTransparency(1) self.shadow.setBin('shadow', 0) - - # Hack to fix the bounding volume on the cable. If it got - # within the shadow node, render it. self.shadow.node().setFinal(1) - - self.magnetShadow = loader.loadModel("phase_3/models/props/drop_shadow") + self.magnetShadow = loader.loadModelCopy('phase_3/models/props/drop_shadow') self.magnetShadow.reparentTo(self.shadow) - - self.craneShadow = loader.loadModel("phase_3/models/props/square_drop_shadow") + self.craneShadow = loader.loadModelCopy('phase_3/models/props/square_drop_shadow') self.craneShadow.setScale(0.5, 4, 1) self.craneShadow.setPos(0, -12, 0) self.craneShadow.flattenLight() self.craneShadow.reparentTo(self.shadow) - taskMgr.add(self.__followShadow, self.shadowName) - rope = self.makeSpline() rope.reparentTo(self.shadow) rope.setColor(1, 1, 1, 0.2) - tex = self.craneShadow.findTexture('*') rope.setTexture(tex) - rn = rope.ropeNode rn.setRenderMode(RopeNode.RMTape) rn.setNumSubdiv(6) rn.setThickness(0.8) rn.setTubeUp(Vec3(0, 0, 1)) rn.setMatrix(Mat4.translateMat(0, 0, self.shadowOffset) * Mat4.scaleMat(1, 1, 0.01)) - def stopShadow(self): if self.shadow: @@ -529,115 +345,71 @@ def stopShadow(self): self.shadow = None self.magnetShadow = None self.craneShadow = None - taskMgr.remove(self.shadowName) + return def __followShadow(self, task): p = self.magnet.getPos(self.boss.geom) self.magnetShadow.setPos(p[0], p[1], self.shadowOffset) - self.craneShadow.setPosHpr(self.crane, 0, 0, 0, 0, 0, 0) self.craneShadow.setZ(self.shadowOffset) - return Task.cont def __makeLink(self, anchor, linkNum): - an = ActorNode('link%s' % (linkNum)) + an = ActorNode('link%s' % linkNum) anp = NodePath(an) - cn = CollisionNode('cn') sphere = CollisionSphere(0, 0, 0, 1) cn.addSolid(sphere) cnp = anp.attachNewNode(cn) - self.handler.addCollider(cnp, anp) - self.activeLinks.append((an, anp, cnp)) self.linkSmoothers.append(SmoothMover()) - anp.reparentTo(self.cable) z = float(linkNum + 1) / float(self.numLinks) * self.cableLength anp.setPos(self.crane.getPos()) anp.setZ(-z) - mask = BitMask32.bit(self.firstMagnetBit + linkNum) cn.setFromCollideMask(mask) cn.setIntoCollideMask(BitMask32(0)) - - shellNode = CollisionNode('shell%s' % (linkNum)) + shellNode = CollisionNode('shell%s' % linkNum) shellNode.addSolid(self.shell) shellNP = anchor.attachNewNode(shellNode) shellNode.setIntoCollideMask(mask) - self.collisions.addPath(shellNP) self.collisions.addPath(cnp) - self.links.append((anp, Point3(0, 0, 0))) - return anp def __rotateMagnet(self, task): - # Rotate the magnet to the penultimate link, so that the - # magnet seems to swing realistically (instead of always - # hanging straight down). - self.magnet.lookAt(self.middleLink, self.p0, self.v1) return Task.cont - def __enableControlInterface(self): - gui = loader.loadModel("phase_3.5/models/gui/avatar_panel_gui") - - self.closeButton = DirectButton( - image = (gui.find("**/CloseBtn_UP"), - gui.find("**/CloseBtn_DN"), - gui.find("**/CloseBtn_Rllvr"), - gui.find("**/CloseBtn_UP"), - ), - relief = None, - scale = 2, - text = TTLocalizer.CashbotCraneLeave, - text_scale = 0.04, - text_pos = (0, -0.07), - text_fg = VBase4(1, 1, 1, 1), - pos = (1.05, 0, -0.82), - command = self.__exitCrane, - ) - + gui = loader.loadModelOnce('phase_3.5/models/gui/avatar_panel_gui') + self.closeButton = DirectButton(image=(gui.find('**/CloseBtn_UP'), gui.find('**/CloseBtn_DN'), gui.find('**/CloseBtn_Rllvr'), gui.find('**/CloseBtn_UP')), relief=None, scale=2, text='Leave crane', text_scale=0.04, text_pos=(0, -0.07), text_fg=VBase4(1, 1, 1, 1), pos=(1.05, 0, -0.82), command=self.__exitCrane) self.accept('escape', self.__exitCrane) - self.accept('control', self.__controlPressed) self.accept('control-up', self.__controlReleased) self.accept('InputState-forward', self.__upArrow) self.accept('InputState-reverse', self.__downArrow) self.accept('InputState-turnLeft', self.__leftArrow) self.accept('InputState-turnRight', self.__rightArrow) - taskMgr.add(self.__watchControls, 'watchCraneControls') - - # In case they don't figure it out, hit them over the head - # with it after a few seconds. - taskMgr.doMethodLater(5, self.__displayCraneAdvice, - self.craneAdviceName) - taskMgr.doMethodLater(10, self.__displayMagnetAdvice, - self.magnetAdviceName) - - # Up in the sky, it's hard to read what people are saying. + taskMgr.doMethodLater(5, self.__displayCraneAdvice, self.craneAdviceName) + taskMgr.doMethodLater(10, self.__displayMagnetAdvice, self.magnetAdviceName) NametagGlobals.setOnscreenChatForced(1) - self.arrowVert = 0 self.arrowHorz = 0 + return def __disableControlInterface(self): self.__turnOffMagnet() - if self.closeButton: self.closeButton.destroy() self.closeButton = None - self.__cleanupCraneAdvice() self.__cleanupMagnetAdvice() - self.ignore('escape') self.ignore('control') self.ignore('control-up') @@ -645,46 +417,36 @@ def __disableControlInterface(self): self.ignore('InputState-reverse') self.ignore('InputState-turnLeft') self.ignore('InputState-turnRight') - self.arrowVert = 0 self.arrowHorz = 0 - NametagGlobals.setOnscreenChatForced(0) - taskMgr.remove('watchCraneControls') self.__setMoveSound(None) + return def __displayCraneAdvice(self, task): if self.craneAdviceLabel == None: - self.craneAdviceLabel = DirectLabel( - text = TTLocalizer.CashbotCraneAdvice, - text_fg = VBase4(1,1,1,1), - text_align = TextNode.ACenter, - relief = None, - pos = (0, 0, 0.69), - scale = 0.1) + self.craneAdviceLabel = DirectLabel(text='Use the arrow keys to move the overhead crane.', text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.69), scale=0.1) + return def __cleanupCraneAdvice(self): if self.craneAdviceLabel: self.craneAdviceLabel.destroy() self.craneAdviceLabel = None taskMgr.remove(self.craneAdviceName) + return def __displayMagnetAdvice(self, task): if self.magnetAdviceLabel == None: - self.magnetAdviceLabel = DirectLabel( - text = TTLocalizer.CashbotMagnetAdvice, - text_fg = VBase4(1,1,1,1), - text_align = TextNode.ACenter, - relief = None, - pos = (0, 0, 0.55), - scale = 0.1) + self.magnetAdviceLabel = DirectLabel(text='Hold down the control key to pick things up.', text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.55), scale=0.1) + return def __cleanupMagnetAdvice(self): if self.magnetAdviceLabel: self.magnetAdviceLabel.destroy() self.magnetAdviceLabel = None taskMgr.remove(self.magnetAdviceName) + return def __watchControls(self, task): if self.arrowHorz or self.arrowVert: @@ -692,26 +454,19 @@ def __watchControls(self, task): else: self.__setMoveSound(None) return Task.cont + return def __exitCrane(self): if self.closeButton: self.closeButton.destroy() - self.closeButton = DirectLabel( - relief = None, - text = TTLocalizer.CashbotCraneLeaving, - pos = (1.05, 0, -0.88), - text_pos = (0, 0), - text_scale = 0.06, - text_fg = VBase4(1, 1, 1, 1), - ) - + self.closeButton = DirectLabel(relief=None, text='Leaving crane', pos=(1.05, 0, -0.88), text_pos=(0, 0), text_scale=0.06, text_fg=VBase4(1, 1, 1, 1)) self.__cleanupCraneAdvice() self.__cleanupMagnetAdvice() - self.d_requestFree() + return def __incrementChangeSeq(self): - self.changeSeq = (self.changeSeq + 1) & 0xff + self.changeSeq = self.changeSeq + 1 & 255 def __controlPressed(self): self.__cleanupMagnetAdvice() @@ -764,51 +519,41 @@ def __leftArrow(self, pressed): self.arrowHorz = -1 elif self.arrowHorz < 0: self.arrowHorz = 0 - + def __moveCraneArcHinge(self, xd, yd): dt = globalClock.getDt() - h = self.arm.getH() - xd * self.rotateSpeed * dt limitH = max(min(h, self.armMaxH), self.armMinH) self.arm.setH(limitH) - y = self.crane.getY() + yd * self.slideSpeed * dt limitY = max(min(y, self.craneMaxY), self.craneMinY) - - atLimit = (limitH != h) or (limitY != y) - + atLimit = limitH != h or limitY != y if atLimit: - # Wiggle the crane up and down and left and right to show - # that it is struggling against its limits of motion. now = globalClock.getFrameTime() x = math.sin(now * 79) * 0.05 z = math.sin(now * 70) * 0.02 self.crane.setPos(x, limitY, z) self.__setMoveSound(self.atLimitSfx) - else: self.crane.setPos(0, limitY, 0) self.__setMoveSound(self.craneMoveSfx) def __setMoveSound(self, sfx): - # Starts looping the indicated sound effect, or stops it. if sfx != self.moveSound: if self.moveSound: self.moveSound.stop() self.moveSound = sfx if self.moveSound: - base.playSfx(self.moveSound, looping=1, volume = 0.5) + base.playSfx(self.moveSound, looping=1, volume=0.5) def __activateSniffer(self): - # Turns on the sniffer on the end of the magnet, looking for - # something to grab. if not self.snifferActivated: self.sniffer.unstash() base.cTrav.addCollider(self.sniffer, self.snifferHandler) self.accept(self.snifferEvent, self.__sniffedSomething) self.startFlicker() self.snifferActivated = 1 - + def __deactivateSniffer(self): if self.snifferActivated: base.cTrav.removeCollider(self.sniffer) @@ -818,13 +563,10 @@ def __deactivateSniffer(self): self.snifferActivated = 0 def startFlicker(self): - # Starts the lightning bolt effect flashing. - self.magnetSoundInterval.start() - self.lightning = [] for i in range(4): - t = (float(i) / 3.0 - 0.5) + t = float(i) / 3.0 - 0.5 l = self.boss.lightning.copyTo(self.gripper) l.setScale(random.choice([1, -1]), 1, 5) l.setZ(random.uniform(-5, -5.5)) @@ -843,16 +585,14 @@ def startFlicker(self): taskMgr.add(self.__flickerLightning, self.flickerName) def stopFlicker(self): - # Stops the lightning bolt effect flashing. This must pair - # with a previous call to startFlicker(). - self.magnetSoundInterval.finish() self.magnetLoopSfx.stop() - taskMgr.remove(self.flickerName) for l in self.lightning: l.detachNode() + self.lightning = None + return def __flickerLightning(self, task): for l in self.lightning: @@ -860,134 +600,64 @@ def __flickerLightning(self, task): l.hide() else: l.show() + return Task.cont def __sniffedSomething(self, entry): - # Something was sniffed as grabbable. np = entry.getIntoNodePath() - - if np.hasNetTag('object'): - doId = int(np.getNetTag('object')) - else: - self.notify.warning("%s missing 'object' tag" % np) - return - - self.notify.debug("__sniffedSomething %d" % doId) - + doId = int(np.getNetTag('object')) obj = base.cr.doId2do.get(doId) - if obj and obj.state != 'LocalDropped' and \ - (obj.state != 'Dropped' or obj.craneId != self.doId): + if obj and obj.state != 'LocalDropped': obj.d_requestGrab() obj.demand('LocalGrabbed', localAvatar.doId, self.doId) def grabObject(self, obj): - # This is only called by DistributedCashbotBossObject.enterGrabbed(). - assert(self.notify.debug('%s.grabObject(%s)' % (self.doId, obj.doId))) - assert(self.heldObject == None) - if self.state == 'Off': return - - # This condition is just for sake of the publish, in case we - # have gotten into some screwy state. In the dev environment, - # we should have verified this already with the above - # assertion. if self.heldObject != None: self.releaseObject() - self.__deactivateSniffer() - obj.wrtReparentTo(self.gripper) - if obj.lerpInterval: obj.lerpInterval.finish() - - obj.lerpInterval = Parallel( - obj.posInterval(ToontownGlobals.CashbotBossToMagnetTime, Point3(*obj.grabPos)), - obj.quatInterval(ToontownGlobals.CashbotBossToMagnetTime, VBase3(obj.getH(), 0, 0)), - obj.toMagnetSoundInterval) + obj.lerpInterval = Parallel(obj.posInterval(ToontownGlobals.CashbotBossToMagnetTime, Point3(*obj.grabPos)), obj.quatInterval(ToontownGlobals.CashbotBossToMagnetTime, VBase3(obj.getH(), 0, 0)), obj.toMagnetSoundInterval) obj.lerpInterval.start() - self.heldObject = obj self.handler.setDynamicFrictionCoef(obj.craneFrictionCoef) self.slideSpeed = obj.craneSlideSpeed self.rotateSpeed = obj.craneRotateSpeed - if self.avId == localAvatar.doId and not self.magnetOn: - # We got a late grab. Grab it, then immediately drop it. self.releaseObject() + return def dropObject(self, obj): - # This is only called by DistributedCashbotBossObject.exitGrabbed(). - assert(self.notify.debug('%s.dropObject(%s)' % (self.doId, obj.doId))) - assert(self.heldObject == obj) - assert(not self.snifferActivated) - if obj.lerpInterval: obj.lerpInterval.finish() - obj.wrtReparentTo(render) - - obj.lerpInterval = Parallel( - obj.quatInterval(ToontownGlobals.CashbotBossFromMagnetTime, VBase3(obj.getH(), 0, 0), blendType = 'easeOut'), - ) + obj.lerpInterval = Parallel(obj.quatInterval(ToontownGlobals.CashbotBossFromMagnetTime, VBase3(obj.getH(), 0, 0), blendType='easeOut')) obj.lerpInterval.start() - p1 = self.bottomLink.node().getPhysicsObject() v = render.getRelativeVector(self.bottomLink, p1.getVelocity()) obj.physicsObject.setVelocity(v * 1.5) - - # This condition is just for sake of the publish, in case we - # have gotten into some screwy state. In the dev environment, - # we should have verified this already with the above - # assertion. if self.heldObject == obj: self.heldObject = None self.handler.setDynamicFrictionCoef(self.emptyFrictionCoef) self.slideSpeed = self.emptySlideSpeed self.rotateSpeed = self.emptyRotateSpeed + return def releaseObject(self): - # Don't confuse this method with dropObject. That method - # implements the object's request to move out of the Grabbed - # state, and is called only by the object itself, while - # releaseObject() is called by the crane and asks the object - # to drop itself, so that the object will set its state - # appropriately. A side-effect of this call will be an - # eventual call to dropObject() by the newly-released object. - - assert(self.avId == localAvatar.doId) - if self.heldObject: obj = self.heldObject obj.d_requestDrop() - if obj.state == 'Grabbed': - # Go ahead and move the local object instance into the - # 'LocalDropped' state--presumably the AI will grant our - # request shortly anyway, and we can avoid a hitch by - # not waiting around for it. However, we can't do - # this if the object is just in 'LocalGrabbed' state, - # because we can't start broadcasting updates on the - # object's position until we *know* we're the object's - # owner. obj.demand('LocalDropped', localAvatar.doId, self.doId) def __hitTrigger(self, event): self.d_requestControl() - - - ##### Messages To/From The Server ##### - def setBossCogId(self, bossCogId): self.bossCogId = bossCogId - - # This would be risky if we had toons entering the zone during - # a battle--but since all the toons are always there from the - # beginning, we can be confident that the BossCog has already - # been generated by the time we receive the generate for its - # associated battles. self.boss = base.cr.doId2do[bossCogId] def setIndex(self, index): @@ -999,7 +669,7 @@ def setState(self, state, avId): elif state == 'F': self.demand('Free') else: - self.notify.error("Invalid state from AI: %s" % (state)) + self.notify.error('Invalid state from AI: %s' % state) def d_requestControl(self): self.sendUpdate('requestControl') @@ -1007,53 +677,32 @@ def d_requestControl(self): def d_requestFree(self): self.sendUpdate('requestFree') - ### Handle smoothing of distributed updates. This is similar to - ### code in DistributedSmoothNode, but streamlined for our - ### purposes. - def b_clearSmoothing(self): self.d_clearSmoothing() self.clearSmoothing() + def d_clearSmoothing(self): - self.sendUpdate("clearSmoothing", [0]) + self.sendUpdate('clearSmoothing', [0]) - def clearSmoothing(self, bogus = None): - # Call this to invalidate all the old position reports - # (e.g. just before popping to a new position). + def clearSmoothing(self, bogus=None): self.armSmoother.clearPositions(1) for smoother in self.linkSmoothers: smoother.clearPositions(1) def reloadPosition(self): - """reloadPosition(self) - - This function re-reads the position from the node itself and - clears any old position reports for the node. This should be - used whenever show code bangs on the node position and expects - it to stick. - - """ self.armSmoother.clearPositions(0) self.armSmoother.setPos(self.crane.getPos()) self.armSmoother.setHpr(self.arm.getHpr()) self.armSmoother.setPhonyTimestamp() - for linkNum in range(self.numLinks): smoother = self.linkSmoothers[linkNum] - an, anp, cnp = self.activeLinks[linkNum] - + (an, anp, cnp) = self.activeLinks[linkNum] smoother.clearPositions(0) smoother.setPos(anp.getPos()) smoother.setPhonyTimestamp() def doSmoothTask(self, task): - """ - This function updates the position of the node to its computed - smoothed position. This may be overridden by a derived class - to specialize the behavior. - """ self.armSmoother.computeAndApplySmoothPosHpr(self.crane, self.arm) - for linkNum in range(self.numLinks): smoother = self.linkSmoothers[linkNum] anp = self.activeLinks[linkNum][1] @@ -1062,12 +711,6 @@ def doSmoothTask(self, task): return Task.cont def startSmooth(self): - """ - This function starts the task that ensures the node is - positioned correctly every frame. However, while the task is - running, you won't be able to lerp the node or directly - position it. - """ if not self.smoothStarted: taskName = self.smoothName taskMgr.remove(taskName) @@ -1076,58 +719,36 @@ def startSmooth(self): self.smoothStarted = 1 def stopSmooth(self): - """ - This function stops the task spawned by startSmooth(), and - allows show code to move the node around directly. - """ if self.smoothStarted: taskName = self.smoothName taskMgr.remove(taskName) self.forceToTruePosition() self.smoothStarted = 0 - def forceToTruePosition(self): - """forceToTruePosition(self) - - This forces the node to reposition itself to its latest known - position. This may result in a pop as the node skips the last - of its lerp points. - - """ if self.armSmoother.getLatestPosition(): self.armSmoother.applySmoothPos(self.crane) self.armSmoother.applySmoothHpr(self.arm) self.armSmoother.clearPositions(1) - for linkNum in range(self.numLinks): smoother = self.linkSmoothers[linkNum] - an, anp, cnp = self.activeLinks[linkNum] - + (an, anp, cnp) = self.activeLinks[linkNum] if smoother.getLatestPosition(): smoother.applySmoothPos(anp) smoother.clearPositions(1) - def setCablePos(self, changeSeq, y, h, links, timestamp): self.changeSeq = changeSeq if self.smoothStarted: - if len(links) > self.numLinks: - self.notify.warning("Links passed in is greater than total number of links") - return - now = globalClock.getFrameTime() local = globalClockDelta.networkToLocalTime(timestamp, now) - self.armSmoother.setY(y) self.armSmoother.setH(h) self.armSmoother.setTimestamp(local) self.armSmoother.markPosition() - for linkNum in range(self.numLinks): smoother = self.linkSmoothers[linkNum] lp = links[linkNum] - smoother.setPos(*lp) smoother.setTimestamp(local) smoother.markPosition() @@ -1138,16 +759,13 @@ def setCablePos(self, changeSeq, y, h, links, timestamp): def d_sendCablePos(self): timestamp = globalClockDelta.getFrameNetworkTime() - links = [] for linkNum in range(self.numLinks): - an, anp, cnp = self.activeLinks[linkNum] - + (an, anp, cnp) = self.activeLinks[linkNum] p = anp.getPos() links.append((p[0], p[1], p[2])) - - self.sendUpdate('setCablePos', [ - self.changeSeq, self.crane.getY(), self.arm.getH(), links, timestamp]) + + self.sendUpdate('setCablePos', [self.changeSeq, self.crane.getY(), self.arm.getH(), links, timestamp]) def stopPosHprBroadcast(self): taskName = self.posHprBroadcastName @@ -1155,25 +773,17 @@ def stopPosHprBroadcast(self): def startPosHprBroadcast(self): taskName = self.posHprBroadcastName - - # Broadcast our initial position self.b_clearSmoothing() self.d_sendCablePos() - - # remove any old tasks taskMgr.remove(taskName) - taskMgr.doMethodLater(self.__broadcastPeriod, - self.__posHprBroadcast, taskName) + taskMgr.doMethodLater(self.__broadcastPeriod, self.__posHprBroadcast, taskName) def __posHprBroadcast(self, task): self.d_sendCablePos() taskName = self.posHprBroadcastName - taskMgr.doMethodLater(self.__broadcastPeriod, - self.__posHprBroadcast, taskName) + taskMgr.doMethodLater(self.__broadcastPeriod, self.__posHprBroadcast, taskName) return Task.done - ### FSM States ### - def enterOff(self): self.clearCable() self.root.detachNode() @@ -1188,118 +798,74 @@ def enterControlled(self, avId): toon = base.cr.doId2do.get(avId) if not toon: return - self.grabTrack = self.makeToonGrabInterval(toon) - if avId == localAvatar.doId: - # The local toon is beginning to control the crane. - self.boss.toCraneMode() - camera.reparentTo(self.hinge) camera.setPosHpr(0, -20, -5, 0, -20, 0) self.tube.stash() - localAvatar.setPosHpr(self.controls, 0, 0, 0, 0, 0, 0) localAvatar.sendCurrentPosition() - self.__activatePhysics() self.__enableControlInterface() self.startPosHprBroadcast() self.startShadow() - - # If we get a message from the Place that we exited Crane - # mode--for instance, because we got hit by flying - # gears--then ask the AI to yield us up. self.accept('exitCrane', self.__exitCrane) - else: self.startSmooth() toon.stopSmooth() - self.grabTrack = Sequence(self.grabTrack, - Func(toon.startSmooth)) - + self.grabTrack = Sequence(self.grabTrack, Func(toon.startSmooth)) self.grabTrack.start() def exitControlled(self): self.ignore('exitCrane') - self.grabTrack.finish() del self.grabTrack - if self.toon and not self.toon.isDisabled(): self.toon.loop('neutral') self.toon.startSmooth() self.stopWatchJoystick() - self.stopPosHprBroadcast() self.stopShadow() self.stopSmooth() - if self.avId == localAvatar.doId: - # The local toon is no longer in control of the crane. - self.__disableControlInterface() self.__deactivatePhysics() self.tube.unstash() - camera.reparentTo(base.localAvatar) camera.setPos(base.localAvatar.cameraPositions[0][0]) camera.setHpr(0, 0, 0) - - # This is a bit hacky. Go back to finalBattle mode, but - # only if we're still in crane mode. (We might have been - # zapped to 'ouch' mode by a hit.) if self.cr: place = self.cr.playGame.getPlace() if place and hasattr(place, 'fsm'): if place.fsm.getCurrentState().getName() == 'crane': place.setState('finalBattle') - self.boss.toFinalBattleMode() - self.__straightenCable() def enterFree(self): if self.fadeTrack: self.fadeTrack.finish() self.fadeTrack = None - - # Wait a few seconds before neutralizing the scale; maybe the - # same avatar wants to come right back (after his 5-second - # timeout). - self.restoreScaleTrack = Sequence(Wait(6), - self.getRestoreScaleInterval()) + self.restoreScaleTrack = Sequence(Wait(6), self.getRestoreScaleInterval()) self.restoreScaleTrack.start() - if self.avId == localAvatar.doId: - # Five second timeout on grabbing the same crane again. Go - # get a different crane! self.controlModel.setAlphaScale(0.3) self.controlModel.setTransparency(1) taskMgr.doMethodLater(5, self.__allowDetect, self.triggerName) - - self.fadeTrack = Sequence( - Func(self.controlModel.setTransparency, 1), - self.controlModel.colorScaleInterval(0.2, VBase4(1,1,1,0.3))) + self.fadeTrack = Sequence(Func(self.controlModel.setTransparency, 1), self.controlModel.colorScaleInterval(0.2, VBase4(1, 1, 1, 0.3))) self.fadeTrack.start() - else: - # Other players can grab this crane immediately. self.trigger.unstash() self.accept(self.triggerEvent, self.__hitTrigger) - self.avId = 0 + return def __allowDetect(self, task): if self.fadeTrack: self.fadeTrack.finish() - self.fadeTrack = Sequence( - self.controlModel.colorScaleInterval(0.2, VBase4(1,1,1,1)), - Func(self.controlModel.clearColorScale), - Func(self.controlModel.clearTransparency)) + self.fadeTrack = Sequence(self.controlModel.colorScaleInterval(0.2, VBase4(1, 1, 1, 1)), Func(self.controlModel.clearColorScale), Func(self.controlModel.clearTransparency)) self.fadeTrack.start() - self.trigger.unstash() self.accept(self.triggerEvent, self.__hitTrigger) @@ -1307,25 +873,18 @@ def exitFree(self): if self.fadeTrack: self.fadeTrack.finish() self.fadeTrack = None - - self.restoreScaleTrack.pause() # We just pause, to leave it where it is. + self.restoreScaleTrack.pause() del self.restoreScaleTrack - taskMgr.remove(self.triggerName) self.controlModel.clearColorScale() self.controlModel.clearTransparency() - self.trigger.stash() self.ignore(self.triggerEvent) + return def enterMovie(self): - # This is used to enable a movie mode (particularly for - # playing the cutscene showing the resistance toon using the - # crane). In this mode, lerps on the crane will apply physics - # to the cable in the expected way. - self.__activatePhysics() def exitMovie(self): self.__deactivatePhysics() - self.__straightenCable() + self.__straightenCable() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCashbotBossObject.py b/toontown/src/coghq/DistributedCashbotBossObject.py index 6e193ac8..fc642b2d 100644 --- a/toontown/src/coghq/DistributedCashbotBossObject.py +++ b/toontown/src/coghq/DistributedCashbotBossObject.py @@ -6,56 +6,32 @@ from otp.otpbase import OTPGlobals from direct.fsm import FSM from direct.task import Task - smileyDoId = 1 class DistributedCashbotBossObject(DistributedSmoothNode.DistributedSmoothNode, FSM.FSM): - - """ This is an object that can be picked up an dropped in the - final battle scene with the Cashbot CFO. In particular, it's a - safe or a goon. """ - + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCashbotBossObject') - - # This should be true for objects that will eventually transition - # from SlidingFloor to Free when they stop moving. wantsWatchDrift = 1 def __init__(self, cr): DistributedSmoothNode.DistributedSmoothNode.__init__(self, cr) FSM.FSM.__init__(self, 'DistributedCashbotBossObject') - self.boss = None self.avId = 0 self.craneId = 0 - self.cleanedUp = 0 - - # A CollisionNode to keep me out of walls and floors, and to - # keep others from bumping into me. We use PieBitmask instead - # of WallBitmask, to protect against objects (like goons) - # self-colliding. self.collisionNode = CollisionNode('object') - self.collisionNode.setIntoCollideMask(ToontownGlobals.PieBitmask | OTPGlobals.WallBitmask | ToontownGlobals.CashbotBossObjectBitmask | OTPGlobals.CameraBitmask) - self.collisionNode.setFromCollideMask(ToontownGlobals.PieBitmask | OTPGlobals.FloorBitmask) + self.collisionNode.setIntoCollideMask(OTPGlobals.PieBitmask | OTPGlobals.WallBitmask | ToontownGlobals.CashbotBossObjectBitmask | OTPGlobals.CameraBitmask) + self.collisionNode.setFromCollideMask(OTPGlobals.PieBitmask | OTPGlobals.FloorBitmask) self.collisionNodePath = NodePath(self.collisionNode) - self.physicsActivated = 0 - self.toMagnetSoundInterval = Sequence() self.hitFloorSoundInterval = Sequence() - - # A solid sound for when we get a good hit on the boss. self.hitBossSfx = loader.loadSfx('phase_5/audio/sfx/AA_drop_safe_miss.mp3') self.hitBossSoundInterval = SoundInterval(self.hitBossSfx) - - # A squishy sound for when we hit the boss, but not hard enough. self.touchedBossSfx = loader.loadSfx('phase_5/audio/sfx/AA_drop_sandbag.mp3') - self.touchedBossSoundInterval = SoundInterval( - self.touchedBossSfx, duration = 0.8) - - # Cranes will fill in this with the interval to lerp the - # object to the crane. + self.touchedBossSoundInterval = SoundInterval(self.touchedBossSfx, duration=0.8) self.lerpInterval = None + return def disable(self): self.cleanup() @@ -63,15 +39,8 @@ def disable(self): DistributedSmoothNode.DistributedSmoothNode.disable(self) def cleanup(self): - # is this being called twice? - if self.cleanedUp: - return - else: - self.cleanedUp = 1 - self.demand('Off') self.detachNode() - self.toMagnetSoundInterval.finish() self.hitFloorSoundInterval.finish() self.hitBossSoundInterval.finish() @@ -80,33 +49,23 @@ def cleanup(self): del self.hitFloorSoundInterval del self.hitBossSoundInterval del self.touchedBossSoundInterval - self.boss = None + return def setupPhysics(self, name): an = ActorNode('%s-%s' % (name, self.doId)) anp = NodePath(an) if not self.isEmpty(): self.reparentTo(anp) - - # It is important that there be no messenger hooks added on - # this object at the time we reassign the NodePath. - assert(not self.getAllAccepting()) NodePath.assign(self, anp) - self.physicsObject = an.getPhysicsObject() self.setTag('object', str(self.doId)) - self.collisionNodePath.reparentTo(self) self.handler = PhysicsCollisionHandler() self.handler.addCollider(self.collisionNodePath, self) - - # Set up a collision event so we know when the object hits the - # floor, or the boss's target. self.collideName = self.uniqueName('collide') self.handler.addInPattern(self.collideName + '-%in') self.handler.addAgainPattern(self.collideName + '-%in') - self.watchDriftName = self.uniqueName('watchDrift') def activatePhysics(self): @@ -154,84 +113,50 @@ def __hitGoon(self, entry): self.doHitGoon(goon) def doHitGoon(self, goon): - # Override in a derived class to do something if the object is - # dropped on a goon. pass def __hitBoss(self, entry): - if (self.state == 'Dropped' or self.state == 'LocalDropped') and \ - self.craneId != self.boss.doId: + if (self.state == 'Dropped' or self.state == 'LocalDropped') and self.craneId != self.boss.doId: vel = self.physicsObject.getVelocity() vel = self.crane.root.getRelativeVector(render, vel) vel.normalize() impact = vel[1] - if impact >= self.getMinImpact(): - print "hit! %s" % (impact) + print('hit! %s' % impact) self.hitBossSoundInterval.start() self.doHitBoss(impact) else: self.touchedBossSoundInterval.start() - print "--not hard enough: %s" % (impact) + print('--not hard enough: %s' % impact) def doHitBoss(self, impact): - # Derived classes can override this to do something specific - # when we successfully hit the boss. self.d_hitBoss(impact) - def __hitDropPlane(self, entry): - self.notify.info("%s fell out of the world." % (self.doId)) + self.notify.info('%s fell out of the world.' % self.doId) self.fellOut() def fellOut(self): - # Override in a derived class to do the right thing when the - # object falls out of the world. - raise StandardError, 'fellOut unimplented' + raise Exception('fellOut unimplented') def getMinImpact(self): - # This method returns the minimum impact, in feet per second, - # with which the object should hit the boss before we bother - # to tell the server. return 0 def __watchDrift(self, task): - # Checks the object for non-zero velocity. When the velocity - # reaches zero in the XY plane, we tell the AI we're done - # moving it around. - v = self.physicsObject.getVelocity() if abs(v[0]) < 0.0001 and abs(v[1]) < 0.0001: self.d_requestFree() - - # Go ahead and transition directly to the Free state, - # anticipating the AI. self.demand('Free') - return Task.cont def prepareGrab(self): - # Specialized classes will override this method to do - # something appropriate when the object is grabbed by a - # magnet. pass def prepareRelease(self): - # Specialized classes will override this method to undo the - # effects of prepareGrab(), above, and do something - # appropriate when the object is released from a magnet. pass - ##### Messages To/From The Server ##### - def setBossCogId(self, bossCogId): self.bossCogId = bossCogId - - # This would be risky if we had toons entering the zone during - # a battle--but since all the toons are always there from the - # beginning, we can be confident that the BossCog has already - # been generated by the time we receive the generate for its - # associated objects. self.boss = base.cr.doId2do[bossCogId] def setObjectState(self, state, avId, craneId): @@ -246,13 +171,12 @@ def setObjectState(self, state, avId, craneId): elif state == 'F': self.demand('Free') else: - self.notify.error("Invalid state from AI: %s" % (state)) + self.notify.error('Invalid state from AI: %s' % state) def d_requestGrab(self): self.sendUpdate('requestGrab') def rejectGrab(self): - # The server tells us we can't have it for whatever reason. if self.state == 'LocalGrabbed': self.demand('LocalDropped', self.avId, self.craneId) @@ -268,47 +192,26 @@ def d_requestFree(self): def d_hitBoss(self, impact): self.sendUpdate('hitBoss', [impact]) - - def defaultFilter(self, request, args): - # We overload the default filter function to disallow *any* - # state transitions after the object has been disabled or - # deleted, or before it has been fully generated. if self.boss == None: - raise FSM.RequestDenied, request - + raise FSM.RequestDenied(request) return FSM.FSM.defaultFilter(self, request, args) - - ### FSM States ### + return def enterOff(self): - # In state Off, the object is not parented to the scene graph. - # In all other states, it is. self.detachNode() - if self.lerpInterval: self.lerpInterval.finish() self.lerpInterval = None + return def exitOff(self): self.reparentTo(render) def enterLocalGrabbed(self, avId, craneId): - # This state is like Grabbed, except that it is only triggered - # locally. In this state, we have requested a grab, and we - # will act as if we have grabbed the object successfully, but - # we have not yet heard confirmation from the AI so we might - # later discover that we didn't grab it after all. - - # We're not allowed to drop the object directly from this - # state. - self.avId = avId self.craneId = craneId - self.crane = self.cr.doId2do.get(craneId) - assert(self.crane != None) - self.hideShadows() self.prepareGrab() self.crane.grabObject(self) @@ -321,31 +224,15 @@ def exitLocalGrabbed(self): self.showShadows() def enterGrabbed(self, avId, craneId): - # Grabbed by a crane, or by the boss for a helmet. craneId is - # the doId of the crane or the doId of the boss himself. - if self.oldState == 'LocalGrabbed': if craneId == self.craneId: - # This is just the confirmation from the AI that we - # did, in fact, grab this object with the expected - # crane; we don't need to do anything else in this - # state. return else: - # Whoops, we had previously grabbed it locally, but it - # turns out someone else grabbed it instead. self.crane.dropObject(self) self.prepareRelease() - self.avId = avId self.craneId = craneId - self.crane = self.cr.doId2do.get(craneId) - assert(self.crane != None) - - # The "crane" might actually be the boss cog himself! This - # happens when the boss takes a safe to wear as a helmet. - self.hideShadows() self.prepareGrab() self.crane.grabObject(self) @@ -357,27 +244,16 @@ def exitGrabbed(self): del self.crane def enterLocalDropped(self, avId, craneId): - # As in LocalGrabbed, above, this state is entered locally - # when we drop the safe, but we have not yet received - # acknowledgement from the AI that we've dropped it. - self.avId = avId self.craneId = craneId - self.crane = self.cr.doId2do.get(craneId) - assert(self.crane != None) - - assert(self.avId == base.localAvatar.doId) self.activatePhysics() self.startPosHprBroadcast() self.hideShadows() - - # Set slippery physics so it will slide off the boss. self.handler.setStaticFrictionCoef(0) self.handler.setDynamicFrictionCoef(0) def exitLocalDropped(self): - assert(self.avId == base.localAvatar.doId) if self.newState != 'SlidingFloor' and self.newState != 'Dropped': self.deactivatePhysics() self.stopPosHprBroadcast() @@ -385,21 +261,12 @@ def exitLocalDropped(self): self.showShadows() def enterDropped(self, avId, craneId): - # Dropped (or flung) from a player's crane, or from the boss's - # head. In this case, craneId is the crane we were dropped - # from (or the boss doId). - self.avId = avId self.craneId = craneId - self.crane = self.cr.doId2do.get(craneId) - assert(self.crane != None) - if self.avId == base.localAvatar.doId: self.activatePhysics() self.startPosHprBroadcast() - - # Set slippery physics so it will slide off the boss. self.handler.setStaticFrictionCoef(0) self.handler.setDynamicFrictionCoef(0) else: @@ -413,36 +280,25 @@ def exitDropped(self): self.stopPosHprBroadcast() else: self.stopSmooth() - del self.crane self.showShadows() def enterSlidingFloor(self, avId): - # The object is now sliding across the floor under local - # control. Crank up the friction so it will slow down more - # quickly. - self.avId = avId - if self.lerpInterval: self.lerpInterval.finish() self.lerpInterval = None - if self.avId == base.localAvatar.doId: self.activatePhysics() self.startPosHprBroadcast() - self.handler.setStaticFrictionCoef(0.9) self.handler.setDynamicFrictionCoef(0.5) - - # Start up a task to watch for it to actually stop drifting. - # When it does, we notify the AI. if self.wantsWatchDrift: taskMgr.add(self.__watchDrift, self.watchDriftName) else: self.startSmooth() - self.hitFloorSoundInterval.start() + return def exitSlidingFloor(self): if self.avId == base.localAvatar.doId: @@ -457,4 +313,4 @@ def enterFree(self): self.craneId = 0 def exitFree(self): - pass + pass \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCashbotBossSafe.py b/toontown/src/coghq/DistributedCashbotBossSafe.py index 4ae605c6..92c38b53 100644 --- a/toontown/src/coghq/DistributedCashbotBossSafe.py +++ b/toontown/src/coghq/DistributedCashbotBossSafe.py @@ -3,76 +3,46 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from otp.otpbase import OTPGlobals -import DistributedCashbotBossObject +from . import DistributedCashbotBossObject class DistributedCashbotBossSafe(DistributedCashbotBossObject.DistributedCashbotBossObject): - - """ This is a safe sitting around in the Cashbot CFO final battle - room. It's used as a prop for toons to pick up and throw at the - CFO's head. Also, the special safe with self.index == 0 - represents the safe that the CFO uses to put on his own head as a - safety helmet from time to time. """ - + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCashbotBossSafe') - - grabPos = (0, 0, -8.2) - - # What happens to the crane and its cable when this object is picked up? - craneFrictionCoef = 0.20 + grabPos = ( + 0, 0, -8.2) + craneFrictionCoef = 0.2 craneSlideSpeed = 11 craneRotateSpeed = 16 - - # A safe remains under physical control of whichever client - # last dropped it, even after it stops moving. This allows - # goons to push safes out of the way. wantsWatchDrift = 0 def __init__(self, cr): DistributedCashbotBossObject.DistributedCashbotBossObject.__init__(self, cr) NodePath.__init__(self, 'object') self.index = None - self.flyToMagnetSfx = loader.loadSfx('phase_5/audio/sfx/TL_rake_throw_only.mp3') self.hitMagnetSfx = loader.loadSfx('phase_5/audio/sfx/AA_drop_safe.mp3') - # We want these sfx's to overlap just a smidge for effect. - self.toMagnetSoundInterval = Parallel( - SoundInterval(self.flyToMagnetSfx, duration = ToontownGlobals.CashbotBossToMagnetTime, node = self), - Sequence(Wait(ToontownGlobals.CashbotBossToMagnetTime - 0.02), - SoundInterval(self.hitMagnetSfx, duration = 1.0, node = self))) + self.toMagnetSoundInterval = Parallel(SoundInterval(self.flyToMagnetSfx, duration=ToontownGlobals.CashbotBossToMagnetTime, node=self), Sequence(Wait(ToontownGlobals.CashbotBossToMagnetTime - 0.02), SoundInterval(self.hitMagnetSfx, duration=1.0, node=self))) self.hitFloorSfx = loader.loadSfx('phase_5/audio/sfx/AA_drop_bigweight_miss.mp3') - self.hitFloorSoundInterval = SoundInterval( - self.hitFloorSfx, node = self) + self.hitFloorSoundInterval = SoundInterval(self.hitFloorSfx, node=self) + return def announceGenerate(self): DistributedCashbotBossObject.DistributedCashbotBossObject.announceGenerate(self) - self.name = 'safe-%s' % (self.doId) + self.name = 'safe-%s' % self.doId self.setName(self.name) - self.boss.safe.copyTo(self) self.shadow = self.find('**/shadow') - self.collisionNode.setName('safe') cs = CollisionSphere(0, 0, 4, 4) self.collisionNode.addSolid(cs) - if self.index == 0: - # If this is safe 0, it's the safe that the CFO uses when - # he wants to put on his own helmet. This one can't be - # picked up by magnets, and it doesn't stick around for - # any length of time when it's knocked off his head--it - # just falls through the floor and resets. - - self.collisionNode.setIntoCollideMask(ToontownGlobals.PieBitmask | OTPGlobals.WallBitmask) - self.collisionNode.setFromCollideMask(ToontownGlobals.PieBitmask) - - assert(not self.boss.safes.has_key(self.index)) + self.collisionNode.setIntoCollideMask(OTPGlobals.PieBitmask | OTPGlobals.WallBitmask) + self.collisionNode.setFromCollideMask(OTPGlobals.PieBitmask) self.boss.safes[self.index] = self - self.setupPhysics('safe') self.resetToInitialPosition() def disable(self): - assert(self.boss.safes.get(self.index) == self) del self.boss.safes[self.index] DistributedCashbotBossObject.DistributedCashbotBossObject.disable(self) @@ -83,16 +53,12 @@ def showShadows(self): self.shadow.show() def getMinImpact(self): - # This method returns the minimum impact, in feet per second, - # with which the object should hit the boss before we bother - # to tell the server. if self.boss.heldObject: return ToontownGlobals.CashbotBossSafeKnockImpact else: return ToontownGlobals.CashbotBossSafeNewImpact def doHitGoon(self, goon): - # Dropping a safe on a goon always destroys the goon. goon.b_destroyGoon() def resetToInitialPosition(self): @@ -101,15 +67,9 @@ def resetToInitialPosition(self): self.physicsObject.setVelocity(0, 0, 0) def fellOut(self): - # The safe fell out of the world. Reset it back to its - # original position. - self.deactivatePhysics() self.d_requestInitial() - - ##### Messages To/From The Server ##### - def setIndex(self, index): self.index = index @@ -122,17 +82,12 @@ def setObjectState(self, state, avId, craneId): def d_requestInitial(self): self.sendUpdate('requestInitial') - ### FSM States ### - def enterInitial(self): self.resetToInitialPosition() self.showShadows() - if self.index == 0: - # The special "helmet-only" safe goes away completely when - # it's in Initial mode. self.stash() def exitInitial(self): if self.index == 0: - self.unstash() + self.unstash() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCashbotBossSafeAI.py b/toontown/src/coghq/DistributedCashbotBossSafeAI.py index 9d6970f5..b8ff4dc3 100644 --- a/toontown/src/coghq/DistributedCashbotBossSafeAI.py +++ b/toontown/src/coghq/DistributedCashbotBossSafeAI.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from toontown.toonbase import ToontownGlobals from otp.otpbase import OTPGlobals -import DistributedCashbotBossObjectAI +from . import DistributedCashbotBossObjectAI class DistributedCashbotBossSafeAI(DistributedCashbotBossObjectAI.DistributedCashbotBossObjectAI): diff --git a/toontown/src/coghq/DistributedCashbotBossTreasure.py b/toontown/src/coghq/DistributedCashbotBossTreasure.py index dab917b9..6e06eddf 100644 --- a/toontown/src/coghq/DistributedCashbotBossTreasure.py +++ b/toontown/src/coghq/DistributedCashbotBossTreasure.py @@ -1,27 +1,19 @@ from toontown.safezone import DistributedSZTreasure from toontown.toonbase import ToontownGlobals from direct.interval.IntervalGlobal import * -from pandac.PandaModules import Point3 - -Models = { - ToontownGlobals.ToontownCentral : "phase_4/models/props/icecream", - ToontownGlobals.DonaldsDock : "phase_6/models/props/starfish_treasure", - ToontownGlobals.TheBrrrgh : "phase_8/models/props/snowflake_treasure", - ToontownGlobals.MinniesMelodyland : "phase_6/models/props/music_treasure", - ToontownGlobals.DaisyGardens : "phase_8/models/props/flower_treasure", - ToontownGlobals.DonaldsDreamland : "phase_8/models/props/zzz_treasure", - } +Models = {ToontownGlobals.ToontownCentral: 'phase_4/models/props/icecream', ToontownGlobals.DonaldsDock: 'phase_6/models/props/starfish_treasure', ToontownGlobals.TheBrrrgh: 'phase_8/models/props/snowflake_treasure', ToontownGlobals.MinniesMelodyland: 'phase_6/models/props/music_treasure', ToontownGlobals.DaisyGardens: 'phase_8/models/props/flower_treasure', ToontownGlobals.DonaldsDreamland: 'phase_8/models/props/zzz_treasure'} class DistributedCashbotBossTreasure(DistributedSZTreasure.DistributedSZTreasure): + __module__ = __name__ + def __init__(self, cr): DistributedSZTreasure.DistributedSZTreasure.__init__(self, cr) - self.grabSoundPath = "phase_4/audio/sfx/SZ_DD_treasure.mp3" + self.grabSoundPath = 'phase_4/audio/sfx/SZ_DD_treasure.mp3' def setStyle(self, hoodId): newModel = Models[hoodId] if self.modelPath != newModel: if self.modelPath: - # If we already had some other model, load the new one. self.loadModel(newModel) self.modelPath = newModel @@ -29,33 +21,16 @@ def setGoonId(self, goonId): self.goonId = goonId def setFinalPosition(self, x, y, z): - # Create an interval to lerp the treasure to its target - # position. - if not self.nodePath: self.makeNodePath() - if self.treasureFlyTrack: self.treasureFlyTrack.finish() self.treasureFlyTrack = None - startPos = None goon = self.cr.doId2do[self.goonId] if goon: startPos = goon.getPos() - - # We lerp the treasure model up-and-down, while we - # simultaneously lerp the overall NodePath linearly, so the - # shadow remains on the ground. lerpTime = 1 - self.treasureFlyTrack = Sequence( - Func(self.collNodePath.stash), - Parallel(ProjectileInterval(self.treasure, - startPos = Point3(0, 0, 0), - endPos = Point3(0, 0, 0), - duration = lerpTime, - gravityMult = 2.0), - LerpPosInterval(self.nodePath, lerpTime, Point3(x, y, z), - startPos = startPos)), - Func(self.collNodePath.unstash)) + self.treasureFlyTrack = Sequence(Func(self.collNodePath.stash), Parallel(ProjectileInterval(self.treasure, startPos=Point3(0, 0, 0), endPos=Point3(0, 0, 0), duration=lerpTime, gravityMult=2.0), LerpPosInterval(self.nodePath, lerpTime, Point3(x, y, z), startPos=startPos)), Func(self.collNodePath.unstash)) self.treasureFlyTrack.start() + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCogHQDoor.py b/toontown/src/coghq/DistributedCogHQDoor.py index 832db0d3..0e0ce1ba 100644 --- a/toontown/src/coghq/DistributedCogHQDoor.py +++ b/toontown/src/coghq/DistributedCogHQDoor.py @@ -1,168 +1,67 @@ - from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from toontown.building import DistributedDoor from toontown.hood import ZoneUtil +from direct.distributed import DelayDelete from toontown.building import FADoorCodes from toontown.building import DoorTypes -from toontown.toonbase import TTLocalizer -from toontown.toontowngui import TeaserPanel class DistributedCogHQDoor(DistributedDoor.DistributedDoor): + __module__ = __name__ def __init__(self, cr): - """constructor for the DistributedDoor""" DistributedDoor.DistributedDoor.__init__(self, cr) - # We have our own sfx - self.openSfx = base.loadSfx("phase_9/audio/sfx/CHQ_door_open.mp3") - self.closeSfx = base.loadSfx("phase_9/audio/sfx/CHQ_door_close.mp3") + self.openSfx = base.loadSfx('phase_9/audio/sfx/CHQ_door_open.mp3') + self.closeSfx = base.loadSfx('phase_9/audio/sfx/CHQ_door_close.mp3') def wantsNametag(self): - """ return true if this door needs an arrow pointing to it. """ return 0 def getRequestStatus(self): - zoneId=self.otherZoneId - # We must set allowRedirect to 0 because we expect to meet - # our other door on the other side. - request={ - "loader": ZoneUtil.getBranchLoaderName(zoneId), - "where": ZoneUtil.getToonWhereName(zoneId), - "how": "doorIn", - "hoodId": ZoneUtil.getHoodId(zoneId), - "zoneId": zoneId, - "shardId": None, - "avId": -1, - "allowRedirect" : 0, - "doorDoId":self.otherDoId - } + zoneId = self.otherZoneId + request = {'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'doorIn', 'hoodId': ZoneUtil.getHoodId(zoneId), 'zoneId': zoneId, 'shardId': None, 'avId': -1, 'allowRedirect': 0, 'doorDoId': self.otherDoId} return request - - # HACK: the only reason we are overwriting this entire function is to - # change the timing on the closeSfx. Perhaps there is a more elegant - # way to handle this + return + def enterClosing(self, ts): - assert(self.debugPrint("enterClosing()")) - # Start animation: - # The right hole doorway: - doorFrameHoleRight=self.findDoorNode("doorFrameHoleRight") - if (doorFrameHoleRight.isEmpty()): - self.notify.warning("enterClosing(): did not find doorFrameHoleRight") + doorFrameHoleRight = self.findDoorNode('doorFrameHoleRight') + if doorFrameHoleRight.isEmpty(): + self.notify.warning('enterClosing(): did not find doorFrameHoleRight') return - - # Hmmm, you can try setting the door color to something else - # other than black. I tried white, but that doesn't look to - # good either. - #if ZoneUtil.isInterior(self.zoneId): - # doorFrameHoleRight.setColor(1., 1., 1., 1.) - - # Right door: - rightDoor=self.findDoorNode("rightDoor") - if (rightDoor.isEmpty()): - self.notify.warning("enterClosing(): did not find rightDoor") + rightDoor = self.findDoorNode('rightDoor') + if rightDoor.isEmpty(): + self.notify.warning('enterClosing(): did not find rightDoor') return - - # Close the door: - otherNP=self.getDoorNodePath() - trackName = "doorClose-%d" % (self.doId) + otherNP = self.getDoorNodePath() + trackName = 'doorClose-%d' % self.doId if self.rightSwing: h = 100 else: h = -100 - self.finishDoorTrack() - self.doorTrack=Parallel(Sequence(LerpHprInterval(nodePath=rightDoor, - duration=1.0, - hpr=VBase3(0, 0, 0), - startHpr=VBase3(h, 0, 0), - other=otherNP, - blendType="easeInOut"), - Func(doorFrameHoleRight.hide), - Func(self.hideIfHasFlat, rightDoor), - ), - Sequence(Wait(0.5), - SoundInterval(self.closeSfx, node=rightDoor), - ), - name = trackName) + self.finishDoorTrack() + self.doorTrack = Parallel(Sequence(LerpHprInterval(nodePath=rightDoor, duration=1.0, hpr=VBase3(0, 0, 0), startHpr=VBase3(h, 0, 0), other=otherNP, blendType='easeInOut'), Func(doorFrameHoleRight.hide), Func(self.hideIfHasFlat, rightDoor)), Sequence(Wait(0.5), SoundInterval(self.closeSfx, node=rightDoor)), name=trackName) self.doorTrack.start(ts) - if hasattr(self, "done"): + if hasattr(self, 'done'): request = self.getRequestStatus() - messenger.send("doorDoneEvent", [request]) - - # HACK: the only reason we are overwriting this entire function is to - # change the timing on the closeSfx. Perhaps there is a more elegant - # way to handle this + messenger.send('doorDoneEvent', [request]) + def exitDoorEnterClosing(self, ts): - assert(self.debugPrint("exitDoorEnterClosing()")) - # Start animation: - # The left hole doorway: - doorFrameHoleLeft=self.findDoorNode("doorFrameHoleLeft") - if (doorFrameHoleLeft.isEmpty()): - self.notify.warning("enterOpening(): did not find flatDoors") + doorFrameHoleLeft = self.findDoorNode('doorFrameHoleLeft') + if doorFrameHoleLeft.isEmpty(): + self.notify.warning('enterOpening(): did not find flatDoors') return - if ZoneUtil.isInterior(self.zoneId): - doorFrameHoleLeft.setColor(1., 1., 1., 1.) - # Left door: + doorFrameHoleLeft.setColor(1.0, 1.0, 1.0, 1.0) if self.leftSwing: h = -100 else: h = 100 - leftDoor=self.findDoorNode("leftDoor") - if (not leftDoor.isEmpty()): - # Close the door: - otherNP=self.getDoorNodePath() - trackName = "doorExitTrack-%d" % (self.doId) - self.doorExitTrack = Parallel(Sequence(LerpHprInterval(nodePath=leftDoor, - duration=1.0, - hpr=VBase3(0, 0, 0), - startHpr=VBase3(h, 0, 0), - other=otherNP, - blendType="easeInOut"), - Func(doorFrameHoleLeft.hide), - Func(self.hideIfHasFlat, leftDoor), - ), - Sequence(Wait(0.5), - SoundInterval(self.closeSfx, node=leftDoor), - ), - name = trackName) - self.doorExitTrack.start(ts) - #else: - # self.notify.error("enterOpening(): did not find leftDoor") - - - def setZoneIdAndBlock(self, zoneId, block): - assert(self.notify.debug("setZoneIdAndBlock(zoneId="+str(zoneId) - +", block="+str(block)+") for doId=" + str(self.doId))) - self.zoneId=zoneId - self.block=block - - # special checking for narrower bossbot cog hq doors - canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) - if canonicalZoneId in (ToontownGlobals.BossbotHQ, - ToontownGlobals.BossbotLobby): - self.doorX = 1.0 - - - def enterDoor(self): - assert(self.debugPrint("enterDoor()")) - if self.allowedToEnter(): - messenger.send("DistributedDoor_doorTrigger") - self.sendUpdate("requestEnter") # calls back with a avatarEnter. - else: - place = base.cr.playGame.getPlace() - if place: - place.fsm.request('stopped') - self.dialog = TeaserPanel.TeaserPanel(pageName='cogHQ', - doneFunc=self.handleOkTeaser) - - def doorTrigger(self, args=None): - # The local avatar cannot leave the zone if he is part of a boarding group. - if localAvatar.hasActiveBoardingGroup(): - rejectText = TTLocalizer.BoardingCannotLeaveZone - localAvatar.boardingParty.showMe(rejectText) - return - DistributedDoor.DistributedDoor.doorTrigger(self, args) \ No newline at end of file + leftDoor = self.findDoorNode('leftDoor') + if not leftDoor.isEmpty(): + otherNP = self.getDoorNodePath() + trackName = 'doorExitTrack-%d' % self.doId + self.doorExitTrack = Parallel(Sequence(LerpHprInterval(nodePath=leftDoor, duration=1.0, hpr=VBase3(0, 0, 0), startHpr=VBase3(h, 0, 0), other=otherNP, blendType='easeInOut'), Func(doorFrameHoleLeft.hide), Func(self.hideIfHasFlat, leftDoor)), Sequence(Wait(0.5), SoundInterval(self.closeSfx, node=leftDoor)), name=trackName) + self.doorExitTrack.start(ts) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCogHQDoorAI.py b/toontown/src/coghq/DistributedCogHQDoorAI.py index fdce20ed..129ce077 100644 --- a/toontown/src/coghq/DistributedCogHQDoorAI.py +++ b/toontown/src/coghq/DistributedCogHQDoorAI.py @@ -7,7 +7,7 @@ from toontown.building import DistributedDoorAI from direct.fsm import State from toontown.toonbase import ToontownGlobals -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.building import FADoorCodes from toontown.building import DoorTypes from toontown.toonbase import ToontownAccessAI @@ -58,10 +58,10 @@ def requestExit(self): avatarID = self.air.getAvatarIdFromSender() assert(self.notify.debug(" avatarID:%s" % (str(avatarID),))) - if self.avatarsWhoAreEntering.has_key(avatarID): + if avatarID in self.avatarsWhoAreEntering: del self.avatarsWhoAreEntering[avatarID] - if not self.avatarsWhoAreExiting.has_key(avatarID): + if avatarID not in self.avatarsWhoAreExiting: dept = ToontownGlobals.cogHQZoneId2deptIndex(self.destinationZone) self.avatarsWhoAreExiting[avatarID]=1 self.sendUpdate("avatarExit", [avatarID]) diff --git a/toontown/src/coghq/DistributedCogKart.py b/toontown/src/coghq/DistributedCogKart.py index 22052af2..d1d5199a 100644 --- a/toontown/src/coghq/DistributedCogKart.py +++ b/toontown/src/coghq/DistributedCogKart.py @@ -253,12 +253,12 @@ def fillSlot(self, index, avId, wantBoardingShow = 0): # be taken. pass - elif not self.cr.doId2do.has_key(avId): + elif avId not in self.cr.doId2do: # It's someone who hasn't been generated yet. func = PythonUtil.Functor( self.gotToon, index, avId) - assert not self.toonRequests.has_key(index) + assert index not in self.toonRequests self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects( [avId], allCallback = func) @@ -434,7 +434,7 @@ def emptySlot(self, index, avId, bailFlag, timestamp, timeSent=0): self.deferredSlots = newSlots else: - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: # See if we need to reset the clock # (countdown assumes we've created a clockNode already) if (bailFlag == 1 and hasattr(self, 'clockNode')): @@ -544,7 +544,7 @@ def rejectBoard(self, avId, reason = 0): # This should only be sent to us if our localToon requested # permission to board the elevator. # reason 0: unknown, 1: shuffle, 2: too low laff, 3: no seat, 4: need promotion - print("rejectBoard %s" % (reason)) + print(("rejectBoard %s" % (reason))) if hasattr(base.localAvatar, "elevatorNotifier"): if reason == ElevatorConstants.REJECT_SHUFFLE: base.localAvatar.elevatorNotifier.showMe(TTLocalizer.ElevatorHoppedOff) diff --git a/toontown/src/coghq/DistributedCountryClub.py b/toontown/src/coghq/DistributedCountryClub.py index 13865b56..fe500da2 100644 --- a/toontown/src/coghq/DistributedCountryClub.py +++ b/toontown/src/coghq/DistributedCountryClub.py @@ -293,7 +293,7 @@ def setBossConfronted(self, avId): def warpToRoom(self, roomId): # returns False if invalid roomId # find a room with the right id - for i in xrange(len(self.rooms)): + for i in range(len(self.rooms)): room = self.rooms[i] if room.roomId == roomId: break diff --git a/toontown/src/coghq/DistributedCountryClubAI.py b/toontown/src/coghq/DistributedCountryClubAI.py index 9c2773e0..889e5ae4 100644 --- a/toontown/src/coghq/DistributedCountryClubAI.py +++ b/toontown/src/coghq/DistributedCountryClubAI.py @@ -20,7 +20,7 @@ def __init__(self, air, countryClubId, zoneId, floorNum, avIds, layoutIndex, ba self.elevatorList = [] self.battleExpAggreg = battleExpAggreg self.layout = CountryClubLayout.CountryClubLayout(self.countryClubId, self.floorNum, self.layoutIndex) - for i in xrange(self.layout.getNumRooms()): + for i in range(self.layout.getNumRooms()): if i: self.blockedRooms.append(i) diff --git a/toontown/src/coghq/DistributedCountryClubBattleAI.py b/toontown/src/coghq/DistributedCountryClubBattleAI.py index 8013a1d0..59aeaa67 100644 --- a/toontown/src/coghq/DistributedCountryClubBattleAI.py +++ b/toontown/src/coghq/DistributedCountryClubBattleAI.py @@ -4,7 +4,7 @@ from direct.fsm import State from direct.fsm import ClassicFSM, State from toontown.battle.BattleBase import * -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.toonbase.ToontownBattleGlobals import getCountryClubCreditMultiplier from direct.showbase.PythonUtil import addListsByValue diff --git a/toontown/src/coghq/DistributedCountryClubRoom.py b/toontown/src/coghq/DistributedCountryClubRoom.py index 28a4ca60..267917d2 100644 --- a/toontown/src/coghq/DistributedCountryClubRoom.py +++ b/toontown/src/coghq/DistributedCountryClubRoom.py @@ -5,9 +5,9 @@ import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import CountryClubRoomBase, CountryClubRoom -import FactoryEntityCreator -import CountryClubRoomSpecs +from . import CountryClubRoomBase, CountryClubRoom +from . import FactoryEntityCreator +from . import CountryClubRoomSpecs from otp.level import LevelSpec, LevelConstants from toontown.toonbase import TTLocalizer if __dev__: @@ -194,8 +194,8 @@ def printPos(self=self): pos = base.localAvatar.getPos(thisZone) h = base.localAvatar.getH(thisZone) roomName = CountryClubRoomSpecs.BossbotCountryClubRoomId2RoomName[self.roomId] - print 'countryClub pos: %s, h: %s, room: %s' % ( - repr(pos), h, roomName) + print('countryClub pos: %s, h: %s, room: %s' % ( + repr(pos), h, roomName)) if self.countryClub is not None: floorNum = self.countryClub.floorNum else: diff --git a/toontown/src/coghq/DistributedCrate.py b/toontown/src/coghq/DistributedCrate.py index eeaaafb2..45cb4872 100644 --- a/toontown/src/coghq/DistributedCrate.py +++ b/toontown/src/coghq/DistributedCrate.py @@ -1,87 +1,66 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * -from CrateGlobals import * - +from .CrateGlobals import * from direct.showbase.PythonUtil import fitSrcAngle2Dest from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal -import MovingPlatform -from direct.task.Task import Task -import DistributedCrushableEntity +from . import MovingPlatform, DistributedCrushableEntity class DistributedCrate(DistributedCrushableEntity.DistributedCrushableEntity): - notify = DirectNotifyGlobal.directNotify.newCategory("DistributedCrate") - # keyboard controls - UP_KEY = "arrow_up" - DOWN_KEY = "arrow_down" - LEFT_KEY = "arrow_left" - RIGHT_KEY = "arrow_right" - + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCrate') + UP_KEY = 'arrow_up' + DOWN_KEY = 'arrow_down' + LEFT_KEY = 'arrow_left' + RIGHT_KEY = 'arrow_right' ModelPaths = ( - "phase_9/models/cogHQ/woodCrateB", - 'phase_10/models/cashbotHQ/CBWoodCrate', - ) + 'phase_9/models/cogHQ/woodCrateB', 'phase_10/models/cashbotHQ/CBWoodCrate') def __init__(self, cr): DistributedCrushableEntity.DistributedCrushableEntity.__init__(self, cr) - - # DistributedCrushableEntity inherits from NodePath, but doesn't call - # NodePath's constructor to avoid multiple calls to it that - # result from multiple inheritance along the Actor tree self.initNodePath() - self.modelType = 0 - #self.modelPath = "phase_9/models/cogHQ/woodCrateB" - #self.modelPath = "phase_9/models/cogHQ/metal_crateB" self.crate = None self.gridSize = 3.0 self.tContact = 0 - self.tStick = .01 + self.tStick = 0.01 self.moveTrack = None self.avMoveTrack = None - self.avPushTrack = None + self.avPushTrack = None self.crate = None self.crushTrack = None - - # state of the local toon self.isLocalToon = 0 self.stuckToCrate = 0 self.upPressed = 0 self.isPushing = 0 + self.creakSound = loader.loadSfx('phase_9/audio/sfx/CHQ_FACT_crate_effort.mp3') + self.pushSound = loader.loadSfx('phase_9/audio/sfx/CHQ_FACT_crate_sliding.mp3') + return - self.creakSound = loader.loadSfx("phase_9/audio/sfx/CHQ_FACT_crate_effort.mp3") - self.pushSound = loader.loadSfx("phase_9/audio/sfx/CHQ_FACT_crate_sliding.mp3") - def disable(self): self.ignoreAll() if self.moveTrack: self.moveTrack.pause() del self.moveTrack - if self.avMoveTrack: self.avMoveTrack.pause() del self.avMoveTrack - if self.avPushTrack: self.avPushTrack.pause() del self.avPushTrack - if self.crate: self.crate.destroy() del self.crate - if self.crushTrack: self.crushTrack.pause() del self.crushTrack - - taskMgr.remove(self.taskName("crushTask")) + taskMgr.remove(self.taskName('crushTask')) if self.pushable: self.__listenForCollisions(0) - self.ignore("arrow_up") - self.ignore("arrow_up-up") - + self.ignore('arrow_up') + self.ignore('arrow_up-up') DistributedCrushableEntity.DistributedCrushableEntity.disable(self) def delete(self): @@ -90,359 +69,234 @@ def delete(self): del self.pushSound def generateInit(self): - """generateInit(self) - This method is called when the DistributedEntity is first introduced - to the world... Not when it is pulled from the cache. - """ DistributedCrushableEntity.DistributedCrushableEntity.generateInit(self) - # Make a collision sphere - #self.collSphere = CollisionSphere(0, 0, 0, self.gridSize) - # Make the sphere intangible - #self.collSphere.setTangible(0) - #self.collNode = CollisionNode(self.uniqueName("crateSphere")) - #self.collNode.setIntoCollideMask(WallBitmask) - #self.collNode.addSolid(self.collSphere) - #self.collNodePath = self.crate.attachNewNode(self.collNode) - #self.collNodePath.hide() - def generate(self): - """generate(self) - This method is called when the DistributedEntity is reintroduced - to the world, either for the first time or from the cache. - """ DistributedCrushableEntity.DistributedCrushableEntity.generate(self) - # Add a hook looking for collisions with localToon, and call - # requestGrab. - #self.accept(self.uniqueName('entercrateSphere'), - # self.handleEnterSphere) - + def announceGenerate(self): - # This is called when the DistributedEntity has filled out all the required - # fields. self.notify.debug('announceGenerate') DistributedCrushableEntity.DistributedCrushableEntity.announceGenerate(self) - - # Load the model and child it to the nodepath self.loadModel() self.modCrateCollisions() - if self.pushable: self.__listenForCollisions(1) - self.accept("arrow_up", self.__upKeyPressed) + self.accept('arrow_up', self.__upKeyPressed) def modCrateCollisions(self): - # make it easier to jump on crates - # Uniquify the collision name - cNode = self.find("**/wall") - cNode.setName(self.uniqueName("crateCollision")) - cNode.setZ(-.80) - - # duplicate the floor and move it down to crate a - # catch effect for low-hopped toons - colNode = self.find("**/collision") - floor = colNode.find("**/MovingPlatform*") + cNode = self.find('**/wall') + cNode.setName(self.uniqueName('crateCollision')) + cNode.setZ(-0.8) + colNode = self.find('**/collision') + floor = colNode.find('**/MovingPlatform*') floor2 = floor.copyTo(colNode) - floor2.setZ(-.80) + floor2.setZ(-0.8) def __upKeyPressed(self): - self.ignore("arrow_up") - self.accept("arrow_up-up", self.__upKeyReleased) + self.ignore('arrow_up') + self.accept('arrow_up-up', self.__upKeyReleased) self.upPressed = 1 def __upKeyReleased(self): - self.ignore("arrow_up-up") - self.accept("arrow_up", self.__upKeyPressed) + self.ignore('arrow_up-up') + self.accept('arrow_up', self.__upKeyPressed) self.upPressed = 0 if self.stuckToCrate: self.__resetStick() - + def loadModel(self): - # Load the sound effect - crateModel = loader.loadModel( - DistributedCrate.ModelPaths[self.modelType]) + crateModel = loader.loadModelCopy(DistributedCrate.ModelPaths[self.modelType]) self.crate = MovingPlatform.MovingPlatform() self.crate.setupCopyModel(self.getParentToken(), crateModel, 'floor') - - # take the scale off of the nodepath and put it on the model self.setScale(1.0) self.crate.setScale(self.scale) self.crate.reparentTo(self) - - # Flatten out any scale on the crate so the moving platform doesn't get cranky self.crate.flattenLight() - def setScale(self, scale): if self.crate: self.crate.setScale(scale) - + def __listenForCollisions(self, on): if on: - self.accept(self.uniqueName("entercrateCollision"), - self.handleCollision) + self.accept(self.uniqueName('entercrateCollision'), self.handleCollision) else: - self.ignore(self.uniqueName("entercrateCollision")) - + self.ignore(self.uniqueName('entercrateCollision')) + def setPosition(self, x, y, z): - self.setPos(x,y,z) - + self.setPos(x, y, z) + def handleCollision(self, collEntry=None): if not self.upPressed: return - # The local toon is colliding with the box. If he is facing the - # box, start a timer and after some time start moving the box in - # the direction the toon is facing crateNormal = Vec3(collEntry.getSurfaceNormal(self)) - relativeVec = base.localAvatar.getRelativeVector(self, - crateNormal) + relativeVec = base.localAvatar.getRelativeVector(self, crateNormal) relativeVec.normalize() - worldVec = render.getRelativeVector(self, - crateNormal) + worldVec = render.getRelativeVector(self, crateNormal) worldVec.normalize() offsetVec = Vec3(base.localAvatar.getPos(render) - self.getPos(render)) offsetVec.normalize() - offsetDot = (offsetVec[0] * worldVec[0]) + (offsetVec[1] * worldVec[1]) - self.notify.debug("offsetDot = %s, world = %s, rel = %s" % (offsetDot, worldVec, offsetVec)) - # if the avatar's direction is +- 30 degrees from the normal - # consider him pushing the crate - if relativeVec.getY() < -0.7 and offsetDot > .9 and offsetVec.getZ() < .05: + offsetDot = offsetVec[0] * worldVec[0] + offsetVec[1] * worldVec[1] + self.notify.debug('offsetDot = %s, world = %s, rel = %s' % (offsetDot, worldVec, offsetVec)) + if relativeVec.getY() < -0.7 and offsetDot > 0.9 and offsetVec.getZ() < 0.05: self.getCrateSide(crateNormal) - # start a task to make the toon "stick" to the crate - # until he accumulates enough force to push it. self.tContact = globalClock.getFrameTime() self.__listenForCollisions(0) - # before starting the stick task, listen for a - # keyup event on the up arrow. this means the user - # is no longer intersted in pushing this crate self.__listenForCancelEvents(1) self.__startStickTask(crateNormal, base.localAvatar.getPos(render)) def setReject(self): - # AI tells localToon that sent requestPush that it isn't possible to - # move the crate in this direction. - self.notify.debug("setReject") + self.notify.debug('setReject') self.sentRequest = 0 - - # Maybe emit a sound here from the toon - # that indicates that it can't be pushed - #base.localAvatar.playDialogueForString("!") - - # Unstick the toon if self.stuckToCrate: self.__resetStick() - + def __startStickTask(self, crateNormal, toonPos): self.__killStickTask() - - # start the stick task self.stuckToCrate = 1 - sTask = Task(self.__stickTask) + sTask = Task.Task(self.__stickTask) sTask.crateNormal = crateNormal sTask.toonPos = toonPos - taskMgr.add(sTask, - self.taskName("stickTask")) + taskMgr.add(sTask, self.taskName('stickTask')) def __killStickTask(self): - taskMgr.remove(self.taskName("stickTask")) - + taskMgr.remove(self.taskName('stickTask')) + def __stickTask(self, task): tElapsed = globalClock.getFrameTime() - self.tContact if tElapsed > self.tStick: - # The toon is definitely trying to push this block. - # Tell the AI. lToon = base.localAvatar self.isLocalToon = 1 - - # Set toons pos/hpr relative to crate crateNormal = task.crateNormal crateWidth = 2.75 * self.scale offset = crateWidth + 1.5 + TorsoToOffset[lToon.style.torso] newPos = crateNormal * offset - if self.avPushTrack: self.avPushTrack.pause() place = base.cr.playGame.getPlace() newHpr = CrateHprs[self.crateSide] - - # figure out what heading the toon should start from, to avoid - # spinning h = lToon.getH(self) h = fitSrcAngle2Dest(h, newHpr[0]) - startHpr = Vec3(h,0,0) - - # put toon perpendicular to crate - self.avPushTrack = Sequence( - LerpPosHprInterval(lToon, .25, - newPos, newHpr, startHpr=startHpr, - other = self, - blendType = 'easeInOut'), - Func(place.fsm.request, 'push'), - Func(self.__sendPushRequest, task.crateNormal), - SoundInterval(self.creakSound, node=self)) - + startHpr = Vec3(h, 0, 0) + self.avPushTrack = Sequence(LerpPosHprInterval(lToon, 0.25, newPos, newHpr, startHpr=startHpr, other=self, blendType='easeInOut'), Func(place.fsm.request, 'push'), Func(self.__sendPushRequest, task.crateNormal), SoundInterval(self.creakSound, node=self)) self.avPushTrack.start() return Task.done else: - # zero out the tangential velocity so the toon - # doesn't slide off the crate pos = task.toonPos base.localAvatar.setPos(task.toonPos) return Task.cont def getCrateSide(self, crateNormal): for i in range(len(CrateNormals)): - # allow for some numerical error dotP = CrateNormals[i].dot(crateNormal) - if dotP > .9: + if dotP > 0.9: self.crateSide = i - + def __sendPushRequest(self, crateNormal): - self.notify.debug("__sendPushRequest") + self.notify.debug('__sendPushRequest') if self.crateSide != None: self.sentRequest = 1 - self.sendUpdate("requestPush", [self.crateSide]) + self.sendUpdate('requestPush', [self.crateSide]) else: self.notify.debug("didn't send request") + return def __listenForCancelEvents(self, on): - self.notify.debug("%s, __listenForCancelEvents(%s)" % (self.doId, on)) + self.notify.debug('%s, __listenForCancelEvents(%s)' % (self.doId, on)) if on: - self.accept("arrow_down", self.__resetStick) - self.accept("arrow_left", self.__resetStick) - self.accept("arrow_right", self.__resetStick) + self.accept('arrow_down', self.__resetStick) + self.accept('arrow_left', self.__resetStick) + self.accept('arrow_right', self.__resetStick) else: - self.ignore("arrow_down") - self.ignore("arrow_left") - self.ignore("arrow_right") + self.ignore('arrow_down') + self.ignore('arrow_left') + self.ignore('arrow_right') - def setMoveTo(self,avId,x0,y0,z0,x1,y1,z1): - self.notify.debug("setMoveTo") - self.__moveCrateTo(Vec3(x0,y0,z0),Vec3(x1,y1,z1)) - isLocal = (base.localAvatar.doId == avId) - if (isLocal and self.stuckToCrate) or not isLocal: - self.__moveAvTo(avId,Vec3(x0,y0,z0),Vec3(x1,y1,z1)) + def setMoveTo(self, avId, x0, y0, z0, x1, y1, z1): + self.notify.debug('setMoveTo') + self.__moveCrateTo(Vec3(x0, y0, z0), Vec3(x1, y1, z1)) + isLocal = base.localAvatar.doId == avId + if isLocal and self.stuckToCrate or not isLocal: + self.__moveAvTo(avId, Vec3(x0, y0, z0), Vec3(x1, y1, z1)) def __moveCrateTo(self, startPos, endPos): if self.moveTrack: self.moveTrack.finish() self.moveTrack = None - - self.moveTrack = Parallel(Sequence(LerpPosInterval(self, - T_PUSH, - endPos, - startPos=startPos, - fluid = 1)), - SoundInterval(self.creakSound, node=self), - SoundInterval(self.pushSound, node=self, duration=T_PUSH, volume = .2), - ) + self.moveTrack = Parallel(Sequence(LerpPosInterval(self, T_PUSH, endPos, startPos=startPos, fluid=1)), SoundInterval(self.creakSound, node=self), SoundInterval(self.pushSound, node=self, duration=T_PUSH, volume=0.2)) self.moveTrack.start() + return def __moveAvTo(self, avId, startPos, endPos): if self.avMoveTrack: self.avMoveTrack.finish() self.avMoveTrack = None - av = base.cr.doId2do.get(avId) if av: - # move the avatar in the same direction as the crate. To - # make this look smoother for the localToon, we'll use the current - # pos of our toon as the startPos, instead of using calculated - # oldToonPos avMoveTrack = Sequence() moveDir = endPos - startPos - crateNormal = startPos - endPos crateNormal.normalize() crateWidth = 2.75 * self.scale offset = crateWidth + 1.5 + TorsoToOffset[av.style.torso] toonOffset = crateNormal * offset - - # continually lerp the toon to the same position relative to - # the crate; don't want to deal with problems associated with - # parenting the Toon to things that might be scaled etc. etc. - avMoveTrack.append(Sequence(LerpPosInterval(av, - T_PUSH, - toonOffset, - startPos=toonOffset, - other=self,), - ) - ) + avMoveTrack.append(Sequence(LerpPosInterval(av, T_PUSH, toonOffset, startPos=toonOffset, other=self))) self.avMoveTrack = avMoveTrack self.avMoveTrack.start() + return def __resetStick(self): - self.notify.debug("__resetStick") - # reset crate properties + self.notify.debug('__resetStick') self.__killStickTask() self.__listenForCancelEvents(0) self.__listenForCollisions(1) - self.sendUpdate("setDone") - - # stop push and avMoveTrack and let moveTrack finish on it's own + self.sendUpdate('setDone') if self.avPushTrack: self.avPushTrack.pause() del self.avPushTrack self.avPushTrack = None - if self.avMoveTrack: self.avMoveTrack.pause() del self.avMoveTrack self.avMoveTrack = None - base.cr.playGame.getPlace().fsm.request('walk') self.crateSide = None self.crateNormal = None self.isLocalToon = 0 self.stuckToCrate = 0 - + return + def playCrushMovie(self, crusherId, axis): - self.notify.debug("playCrushMovie") - taskMgr.remove(self.taskName("crushTask")) - taskMgr.add(self.crushTask, - self.taskName("crushTask"), - extraArgs = (crusherId, axis), - priority = 25) - + self.notify.debug('playCrushMovie') + taskMgr.remove(self.taskName('crushTask')) + taskMgr.add(self.crushTask, self.taskName('crushTask'), extraArgs=(crusherId, axis), priority=25) + def crushTask(self, crusherId, axis): crusher = self.level.entities.get(crusherId, None) if crusher: crusherHeight = crusher.model.getPos(self)[2] - #crusherHeight = -crusher.model.getPos(crusher)[1] maxHeight = self.pos[2] + self.scale minHeight = crusher.getPos(self)[2] - minScale = minHeight/maxHeight - assert(minHeight < maxHeight) - self.notify.debug("cHeight= %s" % crusherHeight) + minScale = minHeight / maxHeight + self.notify.debug('cHeight= %s' % crusherHeight) if crusherHeight < maxHeight and crusherHeight >= minHeight: if crusherHeight == minHeight: - # once this gets small enough, end the task self.setScale(Vec3(1.2, 1.2, minScale)) - taskMgr.doMethodLater(2, self.setScale, "resetScale", extraArgs = (1,)) + taskMgr.doMethodLater(2, self.setScale, 'resetScale', extraArgs=(1,)) return Task.done else: k = crusherHeight / maxHeight - sx = min(1/k,.2) - self.setScale(Vec3(1+sx, 1+sx, k)) + sx = min(1 / k, 0.2) + self.setScale(Vec3(1 + sx, 1 + sx, k)) return Task.cont + return def originalTry(self, axis): - tSquash = .4 + tSquash = 0.4 if self.crushTrack: self.crushTrack.finish() del self.crushTrack self.crushTrack = None - - self.crushTrack = Sequence( - LerpScaleInterval(self, tSquash, VBase3(1.2,1.2,.25), blendType = 'easeInOut'), - LerpColorScaleInterval(self, 2.0, VBase4(1,1,1,0), blendType = 'easeInOut'), - Wait(2.0), - LerpScaleInterval(self, 0.1, VBase3(1,1,1), blendType = 'easeInOut'), - LerpColorScaleInterval(self, 0.1, VBase4(1,1,1,0), blendType = 'easeInOut'), - ) + self.crushTrack = Sequence(LerpScaleInterval(self, tSquash, VBase3(1.2, 1.2, 0.25), blendType='easeInOut'), LerpColorScaleInterval(self, 2.0, VBase4(1, 1, 1, 0), blendType='easeInOut'), Wait(2.0), LerpScaleInterval(self, 0.1, VBase3(1, 1, 1), blendType='easeInOut'), LerpColorScaleInterval(self, 0.1, VBase4(1, 1, 1, 0), blendType='easeInOut')) self.crushTrack.start() - #self.crushTrack = Sequence( - # LerpScaleInterval(self, tSquash, VBase3(2,2,.05), blendType = 'easeInOut'), - # LerpColorScaleInterval(self, 2.0, VBase4(1,1,1,0), blendType = 'easeInOut'), - # Func(self.hide)) - + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCrateAI.py b/toontown/src/coghq/DistributedCrateAI.py index a9716194..150610ba 100644 --- a/toontown/src/coghq/DistributedCrateAI.py +++ b/toontown/src/coghq/DistributedCrateAI.py @@ -1,8 +1,8 @@ -from CrateGlobals import * +from .CrateGlobals import * from direct.directnotify import DirectNotifyGlobal -import DistributedCrushableEntityAI +from . import DistributedCrushableEntityAI from direct.task import Task -import CrateGlobals +from . import CrateGlobals class DistributedCrateAI(DistributedCrushableEntityAI.DistributedCrushableEntityAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedCrateAI") diff --git a/toontown/src/coghq/DistributedCrushableEntity.py b/toontown/src/coghq/DistributedCrushableEntity.py index 423ab161..ce60de67 100644 --- a/toontown/src/coghq/DistributedCrushableEntity.py +++ b/toontown/src/coghq/DistributedCrushableEntity.py @@ -1,30 +1,24 @@ from otp.level import DistributedEntity from direct.directnotify import DirectNotifyGlobal -from pandac.PandaModules import NodePath +from pandac import NodePath from otp.level import BasicEntities -class DistributedCrushableEntity(DistributedEntity.DistributedEntity, - NodePath, BasicEntities.NodePathAttribs): - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedCrushableEntity') +class DistributedCrushableEntity(DistributedEntity.DistributedEntity, NodePath.NodePath, BasicEntities.NodePathAttribs): + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCrushableEntity') def __init__(self, cr): DistributedEntity.DistributedEntity.__init__(self, cr) node = hidden.attachNewNode('DistributedNodePathEntity') - # don't call NodePath constructor here so we don't have - # collisions with Actor's nodepath inheritance def initNodePath(self): - # call this in the __init__ of any derived class that - # doesn't already derive from NodePath node = hidden.attachNewNode('DistributedNodePathEntity') - NodePath.__init__(self, node) - + NodePath.NodePath.__init__(self, node) + def announceGenerate(self): DistributedEntity.DistributedEntity.announceGenerate(self) BasicEntities.NodePathAttribs.initNodePathAttribs(self) - # inheritors should make sure to reparent geom to something under render - + def disable(self): self.reparentTo(hidden) BasicEntities.NodePathAttribs.destroy(self) @@ -35,19 +29,10 @@ def delete(self): DistributedEntity.DistributedEntity.delete(self) def setPosition(self, x, y, z): - self.setPos(x,y,z) + self.setPos(x, y, z) def setCrushed(self, crusherId, axis): - assert(self.notify.debug("setCrushed, axis = %s" % axis)) - # we have been crushed along the given axis, play - # crush movie self.playCrushMovie(crusherId, axis) def playCrushMovie(self, crusherId, axis): - # Derived classes should do something pretty here, - # such as scaling the object along the axis, or playing - # a crush animation - return - - - + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedCrusherEntity.py b/toontown/src/coghq/DistributedCrusherEntity.py index 7cfda9ed..464370cd 100644 --- a/toontown/src/coghq/DistributedCrusherEntity.py +++ b/toontown/src/coghq/DistributedCrusherEntity.py @@ -2,13 +2,12 @@ from direct.directnotify import DirectNotifyGlobal class DistributedCrusherEntity(BasicEntities.DistributedNodePathEntity): - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedCrusherEntity') + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCrusherEntity') def __init__(self, cr): BasicEntities.DistributedNodePathEntity.__init__(self, cr) def announceGenerate(self): BasicEntities.DistributedNodePathEntity.announceGenerate(self) - self.crushMsg = self.getUniqueName('crushMsg') - + self.crushMsg = self.getUniqueName('crushMsg') \ No newline at end of file diff --git a/toontown/src/coghq/DistributedDoorEntity.py b/toontown/src/coghq/DistributedDoorEntity.py index 7fb3aa41..5fbf334b 100644 --- a/toontown/src/coghq/DistributedDoorEntity.py +++ b/toontown/src/coghq/DistributedDoorEntity.py @@ -1,148 +1,64 @@ -""" -DistributedEntityDoor module: contains the DistributedCogHqDoor -class, the client side representation of a DistributedCogHqDoorAI. -""" - -from pandac.PandaModules import * from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal -import DistributedDoorEntityBase +from . import DistributedDoorEntityBase from direct.fsm import FourState from direct.fsm import ClassicFSM from otp.level import DistributedEntity +from direct.distributed import DelayDelete from toontown.toonbase import TTLocalizer from otp.level import BasicEntities from direct.fsm import State from otp.level import VisibilityBlocker - - class DistributedDoorEntityLock(DistributedDoorEntityBase.LockBase, FourState.FourState): - """ - The Lock is not distributed itself, instead it relies on the door - to get messages and state changes to and from the server. - - This was a nested class in DistributedDoorEntity, but the class - reloader that I'm using doesn't work with nested classes. Until - that gets changed I've moved this here. - - See Also: class DistributedDoorEntity - """ + __module__ = __name__ slideLeft = Vec3(-7.5, 0.0, 0.0) slideRight = Vec3(7.5, 0.0, 0.0) - - def __init__(self, door, lockIndex, lockedNodePath, leftNodePath, rightNodePath, stateIndex): - assert door is not None - assert 0 <= lockIndex <= 3 - assert not lockedNodePath.isEmpty() - assert not leftNodePath.isEmpty() - assert not rightNodePath.isEmpty() - assert 0 <= stateIndex <= 4 - - self.door = door # used in debugPrint. - self.lockIndex = lockIndex # used in debugPrint. + def __init__(self, door, lockIndex, lockedNodePath, leftNodePath, rightNodePath, stateIndex): + self.door = door + self.lockIndex = lockIndex self.lockedNodePath = lockedNodePath self.leftNodePath = leftNodePath self.rightNodePath = rightNodePath self.initialStateIndex = stateIndex - - assert(self.debugPrint( - "Lock(door=%s, lockIndex=%s, lockedNodePath=%s, leftNodePath=%s, rightNodePath=%s, stateIndex=%s)"% - (door, lockIndex, lockedNodePath, leftNodePath, rightNodePath, stateIndex))) FourState.FourState.__init__(self, self.stateNames, self.stateDurations) def delete(self): self.takedown() del self.door - #FourState.FourState.delete(self) - #DistributedDoorEntityBase.LockBase.delete(self) - + def setup(self): - assert(self.debugPrint("setup()")) self.setLockState(self.initialStateIndex) del self.initialStateIndex - + def takedown(self): - assert(self.debugPrint("takedown()")) if self.track is not None: self.track.pause() self.track = None - for i in self.states.keys(): - del self.states[i] - self.states = [] - self.fsm = None + return def setLockState(self, stateIndex): - assert(self.debugPrint("setLockState(stateIndex=%s)"%(stateIndex,))) - assert 0 <= stateIndex <= 4 - #self.stateTime = globalClockDelta.localElapsedTime(timeStamp) if self.stateIndex != stateIndex: state = self.states.get(stateIndex) if state is not None: self.fsm.request(state) - #messenger.send(self.getName(), [self.isUnlocked()]) - else: - assert(self.debugPrint("setLockState() ...State Not Found!")) - #else: - # assert(self.debugPrint("setLockState() ...already in that state.")) + return def isUnlocked(self): - assert(self.debugPrint("isUnlocked() returning %s"%(self.isOn(),))) return self.isOn() def enterState1(self): - """ - Animate the lock locking. - """ - assert self.debugPrint("lockingTrack()") FourState.FourState.enterState1(self) - beat=self.duration*0.05 - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_arms_retracting.mp3") - self.setTrack( - Sequence( - Wait(beat*2.0), - Parallel( - SoundInterval( - slideSfx, node=self.door.node, volume=0.8), - Sequence( - ShowInterval(self.leftNodePath), - ShowInterval(self.rightNodePath), - Parallel( - LerpPosInterval( - nodePath=self.leftNodePath, - other=self.lockedNodePath, - duration=beat*16.0, - pos=Vec3(0.0), - blendType="easeIn"), - LerpPosInterval( - nodePath=self.rightNodePath, - other=self.lockedNodePath, - duration=beat*16.0, - pos=Vec3(0.0), - blendType="easeIn"), - ), - HideInterval(self.leftNodePath), - HideInterval(self.rightNodePath), - ShowInterval(self.lockedNodePath), - ), - ), - # fyi: Wait(beat*2), - ) - ) + beat = self.duration * 0.05 + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_arms_retracting.mp3') + self.setTrack(Sequence(Wait(beat * 2.0), Parallel(SoundInterval(slideSfx, node=self.door.node, volume=0.8), Sequence(ShowInterval(self.leftNodePath), ShowInterval(self.rightNodePath), Parallel(LerpPosInterval(nodePath=self.leftNodePath, other=self.lockedNodePath, duration=beat * 16.0, pos=Vec3(0.0), blendType='easeIn'), LerpPosInterval(nodePath=self.rightNodePath, other=self.lockedNodePath, duration=beat * 16.0, pos=Vec3(0.0), blendType='easeIn')), HideInterval(self.leftNodePath), HideInterval(self.rightNodePath), ShowInterval(self.lockedNodePath))))) def enterState2(self): - """ - The duration is ignored (it is there to match the interface of - the other track states). - - Setup the animation in the locked position. - """ - assert self.debugPrint("locked()") FourState.FourState.enterState2(self) self.setTrack(None) self.leftNodePath.setPos(self.lockedNodePath, Vec3(0.0)) @@ -150,58 +66,16 @@ def enterState2(self): self.leftNodePath.hide() self.rightNodePath.hide() self.lockedNodePath.show() + return def enterState3(self): - """ - Animate the lock unlocking. - """ - assert self.debugPrint("unlockingTrack()") FourState.FourState.enterState3(self) - unlockSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_unlock.mp3") - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_arms_retracting.mp3") - beat=self.duration*0.05 - self.setTrack( - Sequence( - Wait(beat*2), - Parallel( - SoundInterval( - unlockSfx, node=self.door.node, volume=0.8), - SoundInterval( - slideSfx, node=self.door.node, volume=0.8), - Sequence( - HideInterval(self.lockedNodePath), - ShowInterval(self.leftNodePath), - ShowInterval(self.rightNodePath), - Parallel( - LerpPosInterval( - nodePath=self.leftNodePath, - other=self.lockedNodePath, - duration=beat*16, - pos=self.slideLeft, - blendType="easeOut"), - LerpPosInterval( - nodePath=self.rightNodePath, - other=self.lockedNodePath, - duration=beat*16, - pos=self.slideRight, - blendType="easeOut"), - ), - HideInterval(self.leftNodePath), - HideInterval(self.rightNodePath), - ), - ), - # fyi: Wait(beat*2), - ) - ) + unlockSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_unlock.mp3') + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_arms_retracting.mp3') + beat = self.duration * 0.05 + self.setTrack(Sequence(Wait(beat * 2), Parallel(SoundInterval(unlockSfx, node=self.door.node, volume=0.8), SoundInterval(slideSfx, node=self.door.node, volume=0.8), Sequence(HideInterval(self.lockedNodePath), ShowInterval(self.leftNodePath), ShowInterval(self.rightNodePath), Parallel(LerpPosInterval(nodePath=self.leftNodePath, other=self.lockedNodePath, duration=beat * 16, pos=self.slideLeft, blendType='easeOut'), LerpPosInterval(nodePath=self.rightNodePath, other=self.lockedNodePath, duration=beat * 16, pos=self.slideRight, blendType='easeOut')), HideInterval(self.leftNodePath), HideInterval(self.rightNodePath))))) def enterState4(self): - """ - The duration is ignored (it is there to match the interface of - the other track states). - - Setup the animation in the unlocked position. - """ - assert self.debugPrint("unlocked()") FourState.FourState.enterState4(self) self.setTrack(None) self.leftNodePath.setPos(self.lockedNodePath, self.slideLeft) @@ -209,38 +83,13 @@ def enterState4(self): self.leftNodePath.hide() self.rightNodePath.hide() self.lockedNodePath.hide() + return + - if __debug__: - def debugPrint(self, message): - """for debugging""" - return self.door.notify.debug( - "%s (%s) %s"%(self.door.__dict__.get('entId', '?'), - self.lockIndex, - message)) - - - -class DistributedDoorEntity( - DistributedDoorEntityBase.DistributedDoorEntityBase, - DistributedEntity.DistributedEntity, - BasicEntities.NodePathAttribsProxy, - FourState.FourState, - VisibilityBlocker.VisibilityBlocker): - """ - DistributedDoorEntity class: The client side - representation of a Cog HQ door. - - See Also: "FactoryEntityTypes.py", class DistributedDoorEntityLock - """ - if __debug__: - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedDoorEntity') +class DistributedDoorEntity(DistributedDoorEntityBase.DistributedDoorEntityBase, DistributedEntity.DistributedEntity, BasicEntities.NodePathAttribsProxy, FourState.FourState, VisibilityBlocker.VisibilityBlocker): + __module__ = __name__ def __init__(self, cr): - """ - constructor for the DistributedDoorEntity - """ - assert(self.debugPrint("DistributedDoorEntity()")) self.innerDoorsTrack = None self.isVisReady = 0 self.isOuterDoorOpen = 0 @@ -248,50 +97,39 @@ def __init__(self, cr): FourState.FourState.__init__(self, self.stateNames, self.stateDurations) VisibilityBlocker.VisibilityBlocker.__init__(self) self.locks = [] - # self.generate will be called automatically. + return def generate(self): - """ - This method is called when the DistributedDoorEntity is reintroduced - to the world, either for the first time or from the cache. - """ - assert(self.debugPrint("generate()")) DistributedEntity.DistributedEntity.generate(self) - + def announceGenerate(self): - assert(self.debugPrint("announceGenerate()")) self.doorNode = hidden.attachNewNode('door-%s' % self.entId) DistributedEntity.DistributedEntity.announceGenerate(self) BasicEntities.NodePathAttribsProxy.initNodePathAttribs(self) self.setup() - + def disable(self): - assert(self.debugPrint("disable()")) self.takedown() self.doorNode.removeNode() del self.doorNode DistributedEntity.DistributedEntity.disable(self) - #? BasicEntities.NodePathAttribsProxy.destroy(self) - # self.delete() will automatically be called. - + def delete(self): - assert(self.debugPrint("delete()")) DistributedEntity.DistributedEntity.delete(self) def setup(self): self.setupDoor() for i in self.locks: i.setup() - self.accept("exit%s"%(self.getName(),), self.exitTrigger) + + self.accept('exit%s' % (self.getName(),), self.exitTrigger) self.acceptAvatar() if __dev__: self.initWantDoors() - + def takedown(self): if __dev__: self.shutdownWantDoors() - #self.ignore("exit%s"%(self.getName(),)) - #self.ignore("enter%s"%(self.getName(),)) self.ignoreAll() if self.track is not None: self.track.finish() @@ -301,13 +139,10 @@ def takedown(self): self.innerDoorsTrack = None for i in self.locks: i.takedown() + self.locks = [] - self.fsm = None - for i in self.states.keys(): - del self.states[i] - self.states = [] - - # These stubbed out functions are not used on the client (AI Only): + return + setUnlock0Event = DistributedDoorEntityBase.stubFunction setUnlock1Event = DistributedDoorEntityBase.stubFunction setUnlock2Event = DistributedDoorEntityBase.stubFunction @@ -319,11 +154,10 @@ def takedown(self): setIsLock3Unlocked = DistributedDoorEntityBase.stubFunction setIsOpen = DistributedDoorEntityBase.stubFunction setSecondsOpen = DistributedDoorEntityBase.stubFunction - + def acceptAvatar(self): - self.accept("enter%s"%(self.getName(),), self.enterTrigger) - #self.acceptOnce("enter%s"%(self.getName(),), self.enterTrigger) - + self.accept('enter%s' % (self.getName(),), self.enterTrigger) + def rejectInteract(self): DistributedEntity.DistributedEntity.rejectInteract(self) self.acceptAvatar() @@ -331,258 +165,134 @@ def rejectInteract(self): def avatarExit(self, avatarId): DistributedEntity.DistributedEntity.avatarExit(self, avatarId) self.acceptAvatar() - + def enterTrigger(self, args=None): - assert(self.debugPrint("enterTrigger(args="+str(args)+")")) - messenger.send("DistributedInteractiveEntity_enterTrigger") - # This might be a good spot to add a door sound effect. - self.sendUpdate("requestOpen") - # the AI server will not reply directly. We may get a fsm opening - # state that could be a result of this call or something else. - + messenger.send('DistributedInteractiveEntity_enterTrigger') + self.sendUpdate('requestOpen') + def exitTrigger(self, args=None): - assert(self.debugPrint("exitTrigger(args="+str(args)+")")) - messenger.send("DistributedInteractiveEntity_exitTrigger") + messenger.send('DistributedInteractiveEntity_exitTrigger') def okToUnblockVis(self): - assert(self.debugPrint("okToUnblockVis()")) VisibilityBlocker.VisibilityBlocker.okToUnblockVis(self) self.isVisReady = 1 self.openInnerDoors() - + def changedOnState(self, isOn): - assert(self.debugPrint("changedOnState(isOn=%s)"%(isOn,))) - # The open state is the inverse of the FourState's On value. messenger.send(self.getOutputEventName(), [not isOn]) - + def setLocksState(self, stateBits): - """ - stateBits: - 15 through 12: lock 3 state - 11 through 8: lock 2 state - 7 through 4: lock 1 state - 3 through 0: lock 0 state - - Set the state for all four locks. - Required dc field. - """ - assert(self.debugPrint("setLocksState(stateBits=0x%x)"%(stateBits))) - lock0 = stateBits & 0x0000000f - lock1 = (stateBits & 0x000000f0) >> 4 - lock2 = (stateBits & 0x00000f00) >> 8 - #lock3 = (stateBits & 0x0000f000) >> 12 # fourth lock not yet used. + lock0 = stateBits & 15 + lock1 = (stateBits & 240) >> 4 + lock2 = (stateBits & 3840) >> 8 if self.isGenerated(): self.locks[0].setLockState(lock0) self.locks[1].setLockState(lock1) self.locks[2].setLockState(lock2) - #self.locks[3].setLockState(lock3) # fourth lock not yet used. - else: + else: self.initialLock0StateIndex = lock0 self.initialLock1StateIndex = lock1 self.initialLock2StateIndex = lock2 - #self.initialLock3StateIndex = lock3 # fourth lock not yet used. - + def setDoorState(self, stateIndex, timeStamp): - """ - Required dc field. - """ - assert(self.debugPrint("setDoorState(stateIndex=%s, timeStamp=%s)"%(stateIndex, timeStamp))) - assert 0 <= stateIndex <= 4 self.stateTime = globalClockDelta.localElapsedTime(timeStamp) if self.isGenerated(): if self.stateIndex != stateIndex: state = self.states.get(stateIndex) if state is not None: self.fsm.request(state) - else: - assert(self.debugPrint("setDoorState() ...invalid state (stateIndex=%s)"%(stateIndex,))) - #else: - # assert(self.debugPrint("setDoorState() ...already in that state.")) else: - self.initialState=stateIndex - self.initialStateTimestamp=timeStamp - + self.initialState = stateIndex + self.initialStateTimestamp = timeStamp + return + def getName(self): - return "switch-%s"%str(self.entId) + return 'switch-%s' % str(self.entId) def getNodePath(self): if hasattr(self, 'doorNode'): return self.doorNode return None - + return + def setupDoor(self): - assert(self.debugPrint("setupDoor()")) - model=loader.loadModel("phase_9/models/cogHQ/CogDoorHandShake") - assert not model.isEmpty() + model = loader.loadModelCopy('phase_9/models/cogHQ/CogDoorHandShake') if model: - doorway = model.find("**/Doorway1") - assert not doorway.isEmpty() - - rootNode=self.doorNode.attachNewNode(self.getName()+"-root") + doorway = model.find('**/Doorway1') + rootNode = self.doorNode.attachNewNode(self.getName() + '-root') rootNode.setPos(self.pos) rootNode.setHpr(self.hpr) rootNode.setScale(self.scale) rootNode.setColor(self.color) - - change=rootNode.attachNewNode("changePos") - #change.setPos(0.0, 0.0, 0.0) - #change.setHpr(0.0, 0.0, 0.0) - #change.setScale(0.5, 0.5, 0.5) - #change.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) + change = rootNode.attachNewNode('changePos') doorway.reparentTo(change) - - self.node=rootNode + self.node = rootNode self.node.show() - - self.locks.append(DistributedDoorEntityLock( - self, - 0, - doorway.find("**/Slide_One_Closed"), - doorway.find("**/Slide_One_Left_Open"), - doorway.find("**/Slide_One_Right_Open"), - self.initialLock0StateIndex)) - self.locks.append(DistributedDoorEntityLock( - self, - 1, - doorway.find("**/Slide_Two_Closed"), - doorway.find("**/Slide_Two_Left_Open"), - doorway.find("**/Slide_Two_Right_Open"), - self.initialLock1StateIndex)) - self.locks.append(DistributedDoorEntityLock( - self, - 2, - doorway.find("**/Slide_Three_Closed"), - doorway.find("**/Slide_Three_Left_Open"), - doorway.find("**/Slide_Three_Right_Open"), - self.initialLock2StateIndex)) + self.locks.append(DistributedDoorEntityLock(self, 0, doorway.find('**/Slide_One_Closed'), doorway.find('**/Slide_One_Left_Open'), doorway.find('**/Slide_One_Right_Open'), self.initialLock0StateIndex)) + self.locks.append(DistributedDoorEntityLock(self, 1, doorway.find('**/Slide_Two_Closed'), doorway.find('**/Slide_Two_Left_Open'), doorway.find('**/Slide_Two_Right_Open'), self.initialLock1StateIndex)) + self.locks.append(DistributedDoorEntityLock(self, 2, doorway.find('**/Slide_Three_Closed'), doorway.find('**/Slide_Three_Left_Open'), doorway.find('**/Slide_Three_Right_Open'), self.initialLock2StateIndex)) del self.initialLock0StateIndex del self.initialLock1StateIndex del self.initialLock2StateIndex - #del self.initialLock3StateIndex # fourth lock not yet used. - - # Top Door: - door = doorway.find("doortop") - if door.isEmpty(): #Hack#*# - print "doortop hack" - door = doorway.attachNewNode("doortop") - doorway.find("doortop1").reparentTo(door) - doorway.find("doortop2").reparentTo(door) - assert not door.isEmpty() - - rootNode=self.doorNode.attachNewNode(self.getName()+"-topDoor") + door = doorway.find('doortop') + if door.isEmpty(): + print('doortop hack') + door = doorway.attachNewNode('doortop') + doorway.find('doortop1').reparentTo(door) + doorway.find('doortop2').reparentTo(door) + rootNode = self.doorNode.attachNewNode(self.getName() + '-topDoor') rootNode.setPos(self.pos) rootNode.setHpr(self.hpr) rootNode.setScale(self.scale) rootNode.setColor(self.color) - - change=rootNode.attachNewNode("changePos") - #change.setPos(0.0, 0.0, 0.0) - #change.setHpr(0.0, 0.0, 0.0) - #change.setScale(1.0, 0.8, 1.0) - #change.setColor(Vec4(0.9, 0.9, 0.9, 1.0)) + change = rootNode.attachNewNode('changePos') door.reparentTo(change) - - self.doorTop=rootNode + self.doorTop = rootNode self.doorTop.show() - - # Left Door: - rootNode=self.doorTop.getParent().attachNewNode(self.getName()+"-leftDoor") - change=rootNode.attachNewNode("change") - door = doorway.find("**/doorLeft") - assert not door.isEmpty() + rootNode = self.doorTop.getParent().attachNewNode(self.getName() + '-leftDoor') + change = rootNode.attachNewNode('change') + door = doorway.find('**/doorLeft') door = door.reparentTo(change) - - self.doorLeft=rootNode + self.doorLeft = rootNode self.doorLeft.show() - - change.setPos(self.pos) - change.setHpr(self.hpr) - change.setScale(self.scale) - change.setColor(self.color) - - # Bottom Door: - door = doorway.find("doorbottom") - if door.isEmpty(): #Hack#*# - print "doorbottom hack" - door = doorway.attachNewNode("doorbottom") - doorway.find("doorbottom1").reparentTo(door) - doorway.find("doorbottom2").reparentTo(door) - assert not door.isEmpty() - - change=render.attachNewNode("changePos") - #change.setPos(0.0, 0.0, 0.0) - #change.setHpr(0.0, 0.0, 0.0) - #change.setScale(1.0, 0.8, 1.0) - #change.setColor(Vec4(0.9, 0.9, 0.9, 1.0)) - + door = doorway.find('doorbottom') + if door.isEmpty(): + print('doorbottom hack') + door = doorway.attachNewNode('doorbottom') + doorway.find('doorbottom1').reparentTo(door) + doorway.find('doorbottom2').reparentTo(door) + change = render.attachNewNode('changePos') door.reparentTo(change) - - rootNode=self.doorNode.attachNewNode(self.getName()+"-bottomDoor") + rootNode = self.doorNode.attachNewNode(self.getName() + '-bottomDoor') rootNode.setPos(self.pos) rootNode.setHpr(self.hpr) rootNode.setScale(self.scale) rootNode.setColor(self.color) - change.reparentTo(rootNode) - - self.doorBottom=rootNode + self.doorBottom = rootNode self.doorBottom.show() - - # Right Door: - rootNode=self.doorTop.getParent().attachNewNode(self.getName()+"-rightDoor") - change=rootNode.attachNewNode("change") - door = doorway.find("**/doorRight") - assert not door.isEmpty() + rootNode = self.doorTop.getParent().attachNewNode(self.getName() + '-rightDoor') + change = rootNode.attachNewNode('change') + door = doorway.find('**/doorRight') door = door.reparentTo(change) - - self.doorRight=rootNode + self.doorRight = rootNode self.doorRight.show() - - change.setPos(self.pos) - change.setHpr(self.hpr) - change.setScale(self.scale) - change.setColor(self.color) - if 1: - # Name Collisions: - collision = self.doorLeft.find("**/doorLeft_collision1") - assert not collision.isEmpty() + collision = self.doorLeft.find('**/doorLeft_collision1') collision.setName(self.getName()) - collision = self.doorLeft.find("**/doorLeft_collision2") - assert not collision.isEmpty() + collision = self.doorLeft.find('**/doorLeft_collision2') collision.setName(self.getName()) - collision = self.doorRight.find("**/doorRight_collision1") - assert not collision.isEmpty() + collision = self.doorRight.find('**/doorRight_collision1') collision.setName(self.getName()) - collision = self.doorRight.find("**/doorRight_collision2") - assert not collision.isEmpty() + collision = self.doorRight.find('**/doorRight_collision2') collision.setName(self.getName()) - # Name Inner Collisions: - collision = self.doorLeft.find("**/doorLeft_innerCollision") - assert not collision.isEmpty() + collision = self.doorLeft.find('**/doorLeft_innerCollision') collision.setName(self.getName()) self.leftInnerCollision = collision - collision = self.doorRight.find("**/doorRight_innerCollision") - assert not collision.isEmpty() + collision = self.doorRight.find('**/doorRight_innerCollision') collision.setName(self.getName()) self.rightInnerCollision = collision - elif 0: - # Add Collision Flat: - size = 15,.0 - cSphere = CollisionPolygon( - Point3(-7.5,-3,15.0), - Point3(7.5,-3,15.0), - Point3(7.5,-3,0), - Point3(-7.5,-3,0)) - cSphere.setTangible(0) - cSphereNode = CollisionNode(self.getName()) - cSphereNode.addSolid(cSphere) - cSphereNode.setFromCollideMask(BitMask32.allOff()) - cSphereNode.setIntoCollideMask(ToontownGlobals.WallBitmask) - self.cSphereNodePath = self.node.attachNewNode(cSphereNode) - self.cSphereNodePath.show() else: - # Add Collision Sphere: radius = 8.0 cSphere = CollisionSphere(0.0, 0.0, 0.0, radius) cSphere.setTangible(0) @@ -591,10 +301,7 @@ def setupDoor(self): cSphereNode.setFromCollideMask(BitMask32.allOff()) cSphereNode.setIntoCollideMask(ToontownGlobals.WallBitmask) self.cSphereNodePath = self.node.attachNewNode(cSphereNode) - #self.cSphereNodePath.show() - if 1: - # Flatten for speed and to avoid scale changes when reparenting: self.node.flattenMedium() self.doorTop.flattenMedium() self.doorBottom.flattenMedium() @@ -603,110 +310,35 @@ def setupDoor(self): self.setDoorState(self.initialState, self.initialStateTimestamp) del self.initialState del self.initialStateTimestamp - + def setInnerDoorsTrack(self, track): - assert(self.debugPrint("setTrack(track=%s)"%(track,))) if self.innerDoorsTrack is not None: self.innerDoorsTrack.pause() self.innerDoorsTrack = None if track is not None: - track.start(0.0) # The inner doors are local, so they start at 0.0. + track.start(0.0) self.innerDoorsTrack = track - + return + def openInnerDoors(self): - """ - Animate the door opening. - """ - print("openInnerDoors") - assert(self.debugPrint("openInnerDoors() self.isVisBlocker=%s, self.isVisReady=%s, self.isOuterDoorOpen=%s"%( - self.isVisBlocker, self.isVisReady, self.isOuterDoorOpen))) - if (not self.level.complexVis()) or (self.isOuterDoorOpen and (not self.isVisBlocker or self.isVisReady)): - print("openInnerDoors stage Two") - duration=self.duration - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3") - finalSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3") - # Each door is 7.5 high, we move them a bit more and then hide them: - moveDistance=8.0 - self.setInnerDoorsTrack( - Sequence( - Func(self.leftInnerCollision.unstash), - Func(self.rightInnerCollision.unstash), - Parallel( - SoundInterval( - slideSfx, node=self.node, duration=duration*.4, volume=0.8), - LerpPosInterval( - nodePath=self.doorLeft, - duration=duration*.4, - pos=Vec3(-moveDistance, 0.0, 0.0), - blendType="easeOut"), - LerpPosInterval( - nodePath=self.doorRight, - duration=duration*.4, - pos=Vec3(moveDistance, 0.0, 0.0), - blendType="easeOut"), - Sequence( - Wait(duration*.375), - SoundInterval( - finalSfx, node=self.node, duration=1.0, volume=0.8), - ), - ), - Func(self.doorLeft.stash), - Func(self.doorRight.stash), - # fyi: Wait(duration*.6), - ) - ) - else: - pass - #import pdb; pdb.set_trace() - + if self.isOuterDoorOpen and (not self.isVisBlocker or self.isVisReady): + duration = self.duration + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3') + finalSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3') + moveDistance = 8.0 + self.setInnerDoorsTrack(Sequence(Func(self.leftInnerCollision.unstash), Func(self.rightInnerCollision.unstash), Parallel(SoundInterval(slideSfx, node=self.node, duration=duration * 0.4, volume=0.8), LerpPosInterval(nodePath=self.doorLeft, duration=duration * 0.4, pos=Vec3(-moveDistance, 0.0, 0.0), blendType='easeOut'), LerpPosInterval(nodePath=self.doorRight, duration=duration * 0.4, pos=Vec3(moveDistance, 0.0, 0.0), blendType='easeOut'), Sequence(Wait(duration * 0.375), SoundInterval(finalSfx, node=self.node, duration=1.0, volume=0.8))), Func(self.doorLeft.stash), Func(self.doorRight.stash))) + def closeInnerDoors(self): - """ - Animate the door opening. - """ - assert(self.debugPrint("closeInnerDoors()")) - duration=self.duration - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3") - finalSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3") - # Each door is 7.5 high, we move them a bit more and then hide them: - moveDistance=8.0 - self.setInnerDoorsTrack( - Sequence( - Func(self.doorLeft.unstash), - Func(self.doorRight.unstash), - Parallel( - SoundInterval( - slideSfx, node=self.node, duration=duration*.4, volume=0.8), - LerpPosInterval( - nodePath=self.doorLeft, - duration=duration*.4, - pos=Vec3(0.0), - blendType="easeIn"), - LerpPosInterval( - nodePath=self.doorRight, - duration=duration*.4, - pos=Vec3(0.0), - blendType="easeIn"), - Sequence( - Wait(duration*.375), - SoundInterval( - finalSfx, node=self.node, duration=1.0, volume=0.8), - ), - ), - Func(self.leftInnerCollision.stash), - Func(self.rightInnerCollision.stash), - # fyi: Wait(duration*.6), - ) - ) - + duration = self.duration + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3') + finalSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3') + moveDistance = 8.0 + self.setInnerDoorsTrack(Sequence(Func(self.doorLeft.unstash), Func(self.doorRight.unstash), Parallel(SoundInterval(slideSfx, node=self.node, duration=duration * 0.4, volume=0.8), LerpPosInterval(nodePath=self.doorLeft, duration=duration * 0.4, pos=Vec3(0.0), blendType='easeIn'), LerpPosInterval(nodePath=self.doorRight, duration=duration * 0.4, pos=Vec3(0.0), blendType='easeIn'), Sequence(Wait(duration * 0.375), SoundInterval(finalSfx, node=self.node, duration=1.0, volume=0.8))), Func(self.leftInnerCollision.stash), Func(self.rightInnerCollision.stash))) + def setisOuterDoorOpen(self, isOpen): self.isOuterDoorOpen = isOpen - + def enterState1(self): - print("doors enter state 1") - """ - Animate the outer door opening. - """ - assert(self.debugPrint("openingTrack()")) FourState.FourState.enterState1(self) self.isOuterDoorOpen = 0 if self.isVisBlocker: @@ -714,116 +346,41 @@ def enterState1(self): self.requestUnblockVis() else: self.okToUnblockVis() - duration=self.duration - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3") - finalSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3") - # Each door is 7.5 high, we move them a bit more and then hide them: - moveDistance=8.0 - self.setTrack( - Sequence( - Wait(duration*.1), - Parallel( - SoundInterval( - slideSfx, node=self.node, duration=duration*.4, volume=0.8), - LerpPosInterval( - nodePath=self.doorTop, - duration=duration*.4, - pos=Vec3(0.0, 0.0, moveDistance), - blendType="easeOut"), - LerpPosInterval( - nodePath=self.doorBottom, - duration=duration*.4, - pos=Vec3(0.0, 0.0, -moveDistance), - blendType="easeOut"), - Sequence( - Wait(duration*.375), - SoundInterval( - finalSfx, node=self.node, duration=1.0, volume=0.8), - ), - ), - Func(self.doorTop.stash), - Func(self.doorBottom.stash), - Func(self.setisOuterDoorOpen, 1), - Func(self.openInnerDoors), - # fyi: Wait(duration*.5), - ) - ) - + duration = self.duration + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3') + finalSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3') + moveDistance = 8.0 + self.setTrack(Sequence(Wait(duration * 0.1), Parallel(SoundInterval(slideSfx, node=self.node, duration=duration * 0.4, volume=0.8), LerpPosInterval(nodePath=self.doorTop, duration=duration * 0.4, pos=Vec3(0.0, 0.0, moveDistance), blendType='easeOut'), LerpPosInterval(nodePath=self.doorBottom, duration=duration * 0.4, pos=Vec3(0.0, 0.0, -moveDistance), blendType='easeOut'), Sequence(Wait(duration * 0.375), SoundInterval(finalSfx, node=self.node, duration=1.0, volume=0.8))), Func(self.doorTop.stash), Func(self.doorBottom.stash), Func(self.setisOuterDoorOpen, 1), Func(self.openInnerDoors))) + def enterState2(self): - """ - Setup the animation in the open position. - """ - assert(self.debugPrint("openTrack()")) FourState.FourState.enterState2(self) self.isOuterDoorOpen = 1 self.setTrack(None) - moveDistance=7.5 - self.doorTop.setPos(Vec3(0.0, 0.0, moveDistance)), - self.doorBottom.setPos(Vec3(0.0, 0.0, -moveDistance)), + moveDistance = 7.5 + (self.doorTop.setPos(Vec3(0.0, 0.0, moveDistance)),) + (self.doorBottom.setPos(Vec3(0.0, 0.0, -moveDistance)),) self.doorTop.stash() self.doorBottom.stash() - if not self.isVisBlocker or not self.isWaitingForUnblockVis(): - assert(self.debugPrint("openTrack() ...forcing inner doors open.")) self.setInnerDoorsTrack(None) self.doorLeft.setPos(Vec3(-moveDistance, 0.0, 0.0)) self.doorRight.setPos(Vec3(moveDistance, 0.0, 0.0)) self.doorLeft.stash() self.doorRight.stash() - # else: let the pending unblock handle the doors. - + return + def exitState2(self): - assert(self.debugPrint("exitOpenTrack()")) FourState.FourState.exitState2(self) self.cancelUnblockVis() - + def enterState3(self): - """ - Animate the door closing. - """ - assert(self.debugPrint("closingTrack()")) FourState.FourState.enterState3(self) - duration=self.duration - slideSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3") - finalSfx = base.loadSfx("phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3") - self.setTrack( - Sequence( - Wait(duration*.1), - Func(self.closeInnerDoors), - Wait(duration*.4), - Func(self.doorTop.unstash), - Func(self.doorBottom.unstash), - Parallel( - SoundInterval( - slideSfx, node=self.node, duration=duration*.4, volume=0.8), - LerpPosInterval( - nodePath=self.doorTop, - #other=self, - duration=duration*.4, - pos=Vec3(0.0), - blendType="easeIn"), - LerpPosInterval( - nodePath=self.doorBottom, - #other=self, - duration=duration*.4, - pos=Vec3(0.0), - blendType="easeIn"), - Sequence( - Wait(duration*.375), - SoundInterval( - finalSfx, node=self.node, duration=duration*.4, volume=0.8), - ), - ), - Func(self.setisOuterDoorOpen, 0), - # fyi: Wait(duration*.1), # remaining time - ) - ) - + duration = self.duration + slideSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_sliding.mp3') + finalSfx = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_door_open_final.mp3') + self.setTrack(Sequence(Wait(duration * 0.1), Func(self.closeInnerDoors), Wait(duration * 0.4), Func(self.doorTop.unstash), Func(self.doorBottom.unstash), Parallel(SoundInterval(slideSfx, node=self.node, duration=duration * 0.4, volume=0.8), LerpPosInterval(nodePath=self.doorTop, duration=duration * 0.4, pos=Vec3(0.0), blendType='easeIn'), LerpPosInterval(nodePath=self.doorBottom, duration=duration * 0.4, pos=Vec3(0.0), blendType='easeIn'), Sequence(Wait(duration * 0.375), SoundInterval(finalSfx, node=self.node, duration=duration * 0.4, volume=0.8))), Func(self.setisOuterDoorOpen, 0))) + def enterState4(self): - """ - Setup the animation in the closed position. - """ - assert(self.debugPrint("closedTrack()")) FourState.FourState.enterState4(self) self.setisOuterDoorOpen(0) self.isVisReady = 0 @@ -832,7 +389,6 @@ def enterState4(self): self.doorBottom.unstash() self.doorTop.setPos(Vec3(0.0)) self.doorBottom.setPos(Vec3(0.0)) - self.setInnerDoorsTrack(None) self.leftInnerCollision.stash() self.rightInnerCollision.stash() @@ -840,14 +396,10 @@ def enterState4(self): self.doorRight.unstash() self.doorLeft.setPos(Vec3(0.0)) self.doorRight.setPos(Vec3(0.0)) - - if __debug__: - def debugPrint(self, message): - """for debugging""" - return self.notify.debug( - str(self.__dict__.get('entId', '?'))+' '+message) + return if __dev__: + def initWantDoors(self): self.accept('wantDoorsChanged', self.onWantDoorsChanged) self.onWantDoorsChanged() @@ -863,4 +415,4 @@ def onWantDoorsChanged(self): def attribChanged(self, attrib, value): self.takedown() - self.setup() + self.setup() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedDoorEntityAI.py b/toontown/src/coghq/DistributedDoorEntityAI.py index df505649..730af74e 100644 --- a/toontown/src/coghq/DistributedDoorEntityAI.py +++ b/toontown/src/coghq/DistributedDoorEntityAI.py @@ -4,7 +4,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.showbase import DirectObject -import DistributedDoorEntityBase +from . import DistributedDoorEntityBase from direct.distributed import DistributedObjectAI from otp.level import DistributedEntityAI from direct.fsm import FourStateAI diff --git a/toontown/src/coghq/DistributedDoorEntityBase.py b/toontown/src/coghq/DistributedDoorEntityBase.py index 6eaa7d7c..c20c4c1a 100644 --- a/toontown/src/coghq/DistributedDoorEntityBase.py +++ b/toontown/src/coghq/DistributedDoorEntityBase.py @@ -1,23 +1,16 @@ - def stubFunction(*args): - """ - This function is a stub out function for callbacks. - It intenionally ignores all of its parameters and - does nothing. - """ pass class LockBase: - stateNames = ['off', 'locking', 'locked', 'unlocking', 'unlocked'] - stateDurations = [ None, 3.5, None, 4.0, None] - # off off off off on - # locked locked locked locked unlocked + __module__ = __name__ + stateNames = ['off', 'locking', 'locked', 'unlocking', 'unlocked'] + stateDurations = [None, 3.5, None, 4.0, None] + class DistributedDoorEntityBase: - stateNames = ['off', 'opening', 'open', 'closing', 'closed'] - stateDurations = [ None, 5.0, 1.0, 6.0, None] - # off off off off on - # open open open open closed + __module__ = __name__ + stateNames = ['off', 'opening', 'open', 'closing', 'closed'] + stateDurations = [None, 5.0, 1.0, 6.0, None] \ No newline at end of file diff --git a/toontown/src/coghq/DistributedElevatorMarker.py b/toontown/src/coghq/DistributedElevatorMarker.py index da10c201..92cdd1e1 100644 --- a/toontown/src/coghq/DistributedElevatorMarker.py +++ b/toontown/src/coghq/DistributedElevatorMarker.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp import math diff --git a/toontown/src/coghq/DistributedFactory.py b/toontown/src/coghq/DistributedFactory.py index d5e45d91..250062e3 100644 --- a/toontown/src/coghq/DistributedFactory.py +++ b/toontown/src/coghq/DistributedFactory.py @@ -1,13 +1,11 @@ -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from toontown.toonbase.ToontownGlobals import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import FactoryBase -import FactoryEntityCreator -import FactorySpecs +from . import FactoryBase, FactoryEntityCreator, FactorySpecs from otp.level import LevelSpec from otp.level import LevelConstants from toontown.toonbase import TTLocalizer @@ -15,197 +13,132 @@ if __dev__: from otp.level import EditorGlobals -class DistributedFactory(DistributedLevel.DistributedLevel, - FactoryBase.FactoryBase): +class DistributedFactory(DistributedLevel.DistributedLevel, FactoryBase.FactoryBase): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFactory') def __init__(self, cr): DistributedLevel.DistributedLevel.__init__(self, cr) FactoryBase.FactoryBase.__init__(self) - self.suitIds = [] self.suits = [] self.reserveSuits = [] self.joiningReserves = [] self.suitsInitialized = 0 self.goonClipPlanes = {} - + def createEntityCreator(self): return FactoryEntityCreator.FactoryEntityCreator(level=self) def generate(self): self.notify.debug('generate') DistributedLevel.DistributedLevel.generate(self) - - # add special camera views self.factoryViews = FactoryCameraViews.FactoryCameraViews(self) - - # add factory menu to SpeedChat base.localAvatar.chatMgr.chatInputSpeedChat.addFactoryMenu() - - if __debug__: - # add a handle for debugging - base.factory = self if __dev__: bboard.post(EditorGlobals.EditTargetPostName, self) - self.accept('SOSPanelEnter', self.handleSOSPanel) def delete(self): DistributedLevel.DistributedLevel.delete(self) - # remove factory menu from SpeedChat base.localAvatar.chatMgr.chatInputSpeedChat.removeFactoryMenu() - # remove special camera views self.factoryViews.delete() del self.factoryViews self.ignore('SOSPanelEnter') - if __debug__: - del base.factory if __dev__: bboard.removeIfEqual(EditorGlobals.EditTargetPostName, self) - - # required fields + def setFactoryId(self, id): FactoryBase.FactoryBase.setFactoryId(self, id) def setForemanConfronted(self, avId): - assert avId in self.avIdList if avId == base.localAvatar.doId: return av = base.cr.identifyFriend(avId) if av is None: return - base.localAvatar.setSystemMessage( - avId, TTLocalizer.ForemanConfrontedMsg % av.getName()) + base.localAvatar.setSystemMessage(avId, TTLocalizer.ForemanConfrontedMsg % av.getName()) + return def setDefeated(self): self.notify.info('setDefeated') - # foreman has been defeated messenger.send('FactoryWinEvent') def levelAnnounceGenerate(self): self.notify.debug('levelAnnounceGenerate') DistributedLevel.DistributedLevel.levelAnnounceGenerate(self) - - # create our spec - # NOTE: in dev, the AI will probably send us another spec to use specModule = FactorySpecs.getFactorySpecModule(self.factoryId) factorySpec = LevelSpec.LevelSpec(specModule) if __dev__: - # give the spec a factory EntityTypeRegistry. - typeReg = self.getEntityTypeReg() + typeReg = self.getFactoryEntityTypeReg() factorySpec.setEntityTypeReg(typeReg) - DistributedLevel.DistributedLevel.initializeLevel(self, factorySpec) - # if the AI is sending us a spec, we won't have it yet and the - # level isn't really initialized yet. So we can't assume that we - # can start doing stuff here. Much of what used to be here - # has been moved to FactoryLevelMgr, where it really belongs, but... - # this could be cleaner. - def privGotSpec(self, levelSpec): - # OK, we've got the spec that we're going to use, either the one - # we provided or the one from the AI. When we call down, the level - # is going to be initialized, and all the local entities will be - # created. if __dev__: - # First, give the spec a factory EntityTypeRegistry if it doesn't - # have one. if not levelSpec.hasEntityTypeReg(): - typeReg = self.getEntityTypeReg() + typeReg = self.getFactoryEntityTypeReg() levelSpec.setEntityTypeReg(typeReg) - - # get this event name before we init the factory firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent() - # wait until the first viz setZone completes before announcing - # that we're ready to go + def handleFirstSetZoneDone(): - # NOW we're ready. + print('handleFirstSetZoneDone') base.factoryReady = 1 messenger.send('FactoryReady') - self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone) - # I think this is a reasonable number to use for the model count + self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone) modelCount = len(levelSpec.getAllEntIds()) - loader.beginBulkLoad( - "factory", - (TTLocalizer.HeadingToFactoryTitle % - TTLocalizer.FactoryNames[self.factoryId]), - modelCount, 1, TTLocalizer.TIP_COGHQ) - # let 'er rip. + loader.beginBulkLoad('factory', TTLocalizer.HeadingToFactoryTitle % TTLocalizer.FactoryNames[self.factoryId], modelCount, 1, TTLocalizer.TIP_COGHQ) DistributedLevel.DistributedLevel.privGotSpec(self, levelSpec) - loader.endBulkLoad("factory") + loader.endBulkLoad('factory') def printPos(self=self): - # print position of localToon relative to the zone that he's in pos = base.localAvatar.getPos(self.getZoneNode(self.lastToonZone)) h = base.localAvatar.getH(self.getZoneNode(self.lastToonZone)) - print 'factory pos: %s, h: %s, zone %s' % ( - repr(pos), h, self.lastToonZone) - posStr = "X: %.3f" % pos[0] + "\nY: %.3f" % pos[1] + \ - "\nZ: %.3f" % pos[2] + "\nH: %.3f" % h + \ - "\nZone: %s" % str(self.lastToonZone) - base.localAvatar.setChatAbsolute(posStr,CFThought|CFTimeout) - self.accept('f2',printPos) + print('factory pos: %s, h: %s, zone %s' % (repr(pos), h, self.lastToonZone)) + posStr = 'X: %.3f' % pos[0] + '\nY: %.3f' % pos[1] + '\nZ: %.3f' % pos[2] + '\nH: %.3f' % h + '\nZone: %s' % str(self.lastToonZone) + base.localAvatar.setChat(posStr, CFThought) + self.accept('f2', printPos) base.localAvatar.setCameraCollisionsCanMove(1) - - # our place will gen this event BEFORE we leave the factory. - # We need to let the AI know that we've left; if everyone leaves, - # the AI will destroy the factory. self.acceptOnce('leavingFactory', self.announceLeaving) def handleSOSPanel(self, panel): - # make a list of toons that are still in the factory avIds = [] for avId in self.avIdList: - # if a toon dropped and came back into the game, they won't - # be in the factory, so they won't be in the doId2do. if base.cr.doId2do.get(avId): avIds.append(avId) + panel.setFactoryToonIdList(avIds) def disable(self): self.notify.debug('disable') - base.localAvatar.setCameraCollisionsCanMove(0) - if hasattr(self, 'suits'): del self.suits - - if (hasattr(self, 'relatedObjectMgrRequest') - and self.relatedObjectMgrRequest): + if hasattr(self, 'relatedObjectMgrRequest') and self.relatedObjectMgrRequest: self.cr.relatedObjectMgr.abortRequest(self.relatedObjectMgrRequest) del self.relatedObjectMgrRequest - DistributedLevel.DistributedLevel.disable(self) def setSuits(self, suitIds, reserveSuitIds): - assert(self.notify.debug("setSuits suits: %s, reserves: %s" % (suitIds, reserveSuitIds))) oldSuitIds = list(self.suitIds) self.suitIds = suitIds self.reserveSuitIds = reserveSuitIds - - # which cogs are coming out of reserve? newSuitIds = [] for suitId in self.suitIds: if suitId not in oldSuitIds: newSuitIds.append(suitId) + if len(newSuitIds): + def bringOutOfReserve(suits): - assert(self.notify.debug('bringOutOfReserve suits=%s' % suits)) for suit in suits: - if suit: - suit.comeOutOfReserve() - assert not hasattr(self, 'relatedObjectMgrRequest') - assert(self.notify.debug('requesting Objects %s' % newSuitIds)) - self.relatedObjectMgrRequest = self.cr.relatedObjectMgr.requestObjects( - newSuitIds, bringOutOfReserve) + suit.comeOutOfReserve() + + self.relatedObjectMgrRequest = self.cr.relatedObjectMgr.requestObjects(newSuitIds, bringOutOfReserve) def reservesJoining(self): - assert(self.notify.debug("reservesJoining")) - # play track reserves joining battle pass def getCogSpec(self, cogId): @@ -231,6 +164,6 @@ def getTaskZoneId(self): def getBossTaunt(self): return TTLocalizer.FactoryBossTaunt + def getBossBattleTaunt(self): - return TTLocalizer.FactoryBossBattleTaunt - + return TTLocalizer.FactoryBossBattleTaunt \ No newline at end of file diff --git a/toontown/src/coghq/DistributedFactoryAI.py b/toontown/src/coghq/DistributedFactoryAI.py index 1c9a97e6..f49e1f33 100644 --- a/toontown/src/coghq/DistributedFactoryAI.py +++ b/toontown/src/coghq/DistributedFactoryAI.py @@ -1,13 +1,13 @@ from otp.level import DistributedLevelAI from direct.directnotify import DirectNotifyGlobal -import cPickle -import LevelSuitPlannerAI -import FactoryBase +import pickle +from . import LevelSuitPlannerAI +from . import FactoryBase from direct.task import Task -import FactoryEntityCreatorAI -import FactorySpecs +from . import FactoryEntityCreatorAI +from . import FactorySpecs from otp.level import LevelSpec -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.suit import DistributedFactorySuitAI from toontown.toonbase import ToontownGlobals, ToontownBattleGlobals from toontown.coghq import DistributedBattleFactoryAI diff --git a/toontown/src/coghq/DistributedFactoryElevatorExt.py b/toontown/src/coghq/DistributedFactoryElevatorExt.py index 6f0dbb9a..1e08eb1c 100644 --- a/toontown/src/coghq/DistributedFactoryElevatorExt.py +++ b/toontown/src/coghq/DistributedFactoryElevatorExt.py @@ -12,6 +12,7 @@ from toontown.toonbase import TTLocalizer class DistributedFactoryElevatorExt(DistributedElevatorExt.DistributedElevatorExt): + __module__ = __name__ def __init__(self, cr): DistributedElevatorExt.DistributedElevatorExt.__init__(self, cr) @@ -26,42 +27,30 @@ def delete(self): def setEntranceId(self, entranceId): self.entranceId = entranceId - - # These hard coded poshprs should be replaced with nodes in the model if self.entranceId == 0: - # Front of the factory (south entrance) - self.elevatorModel.setPosHpr(62.74, -85.31, 0.00, 2.00, 0.00, 0.00) + self.elevatorModel.setPosHpr(62.74, -85.31, 0.0, 2.0, 0.0, 0.0) elif self.entranceId == 1: - # Side of the factory (west entrance) - self.elevatorModel.setPosHpr(-162.25, 26.43, 0.00, 269.00, 0.00, 0.00) + self.elevatorModel.setPosHpr(-162.25, 26.43, 0.0, 269.0, 0.0, 0.0) else: - self.notify.error("Invalid entranceId: %s" % entranceId) + self.notify.error('Invalid entranceId: %s' % entranceId) def setupElevator(self): - """setupElevator(self) - Called when the building doId is set at construction time, - this method sets up the elevator for business. - """ - # TODO: place this on a node indexed by the entraceId - self.elevatorModel = loader.loadModel("phase_4/models/modules/elevator") + self.elevatorModel = loader.loadModelCopy('phase_5/models/modules/elevator') self.elevatorModel.reparentTo(render) self.elevatorModel.setScale(1.05) - self.leftDoor = self.elevatorModel.find("**/left-door") - self.rightDoor = self.elevatorModel.find("**/right-door") - # No lights on this elevator - self.elevatorModel.find("**/light_panel").removeNode() - self.elevatorModel.find("**/light_panel_frame").removeNode() + self.leftDoor = self.elevatorModel.find('**/left-door') + self.rightDoor = self.elevatorModel.find('**/right-door') + self.elevatorModel.find('**/light_panel').removeNode() + self.elevatorModel.find('**/light_panel_frame').removeNode() DistributedElevator.DistributedElevator.setupElevator(self) def getElevatorModel(self): return self.elevatorModel def setBldgDoId(self, bldgDoId): - # The doId is junk, there is no building object for the factory - # exterior elevators. Do the appropriate things that - # DistributedElevator.gotBldg does. self.bldg = None self.setupElevator() + return def getZoneId(self): return 0 @@ -70,39 +59,7 @@ def __doorsClosed(self, zoneId): return def setFactoryInteriorZone(self, zoneId): - if (self.localToonOnBoard): + if self.localToonOnBoard: hoodId = self.cr.playGame.hood.hoodId - doneStatus = { - 'loader' : "cogHQLoader", - 'where' : 'factoryInterior', - 'how' : "teleportIn", - 'zoneId' : zoneId, - 'hoodId' : hoodId, - } - self.cr.playGame.getPlace().elevator.signalDone(doneStatus) - - def setFactoryInteriorZoneForce(self, zoneId): - place = self.cr.playGame.getPlace() - if place: - place.fsm.request("elevator", [self, 1]) - hoodId = self.cr.playGame.hood.hoodId - doneStatus = { - 'loader' : "cogHQLoader", - 'where' : 'factoryInterior', - 'how' : "teleportIn", - 'zoneId' : zoneId, - 'hoodId' : hoodId, - } - if hasattr(place, 'elevator') and place.elevator: - place.elevator.signalDone(doneStatus) - else: - self.notify.warning("setMintInteriorZoneForce: Couldn't find playGame.getPlace().elevator, zoneId: %s" %zoneId) - else: - self.notify.warning("setFactoryInteriorZoneForce: Couldn't find playGame.getPlace(), zoneId: %s" %zoneId) - - def getDestName(self): - if self.entranceId == 0: - return TTLocalizer.ElevatorSellBotFactory0 - elif self.entranceId == 1: - return TTLocalizer.ElevatorSellBotFactory1 - + doneStatus = {'loader': 'cogHQLoader', 'where': 'factoryInterior', 'how': 'teleportIn', 'zoneId': zoneId, 'hoodId': hoodId} + self.cr.playGame.getPlace().elevator.signalDone(doneStatus) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedFoodBelt.py b/toontown/src/coghq/DistributedFoodBelt.py index 95b18567..0cc7e5b3 100644 --- a/toontown/src/coghq/DistributedFoodBelt.py +++ b/toontown/src/coghq/DistributedFoodBelt.py @@ -97,14 +97,14 @@ def setState(self, state): def enterOn(self): """Handle entering the on state.""" self.beltSoundInterval.loop() - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): self.doMethodLater(self.foodWaitTimes[i], self.startFoodMoving, 'start-%d-%d' % (self.index, i), extraArgs = [i]) def exitOn(self): """Handle exiting the on state.""" self.beltSoundInterval.finish() - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): taskName = 'start-%d-%d' % (self.index, i) self.removeTask(taskName) pass @@ -113,7 +113,7 @@ def enterToonup(self): """Handle entering the toonup state.""" self.beltSound.setPlayRate(self.ToonupBeltSpeed / self.BeltSpeed) self.beltSoundInterval.loop() - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): self.removeFood(i) self.beltActor.setPlayRate(self.ToonupBeltActorPlayRate, 'idle') self.doMethodLater(self.toonupWaitTimes[i], self.startToonupMoving, @@ -122,7 +122,7 @@ def enterToonup(self): def exitToonup(self): """Handle exiting the toonup state.""" self.beltSoundInterval.finish() - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): taskName = 'startToonup-%d-%d' % (self.index, i) self.removeTask(taskName) pass @@ -133,7 +133,7 @@ def enterInactive(self): ival.finish() for ival in self.toonupIvals: ival.finish() - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): self.removeFood(i) self.removeToonup(i) if self.beltActor: @@ -217,10 +217,10 @@ def loadAssets(self): def cleanup(self): - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): taskName = 'start-%d-%d' % (self.index, i) self.removeTask(taskName) - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): taskName = 'startToonup-%d-%d' % (self.index, i) self.removeTask(taskName) for ival in self.foodIvals: @@ -239,7 +239,7 @@ def setupFoodNodes(self): """Create the node paths the food will be parented to.""" assert self.notify.debugStateCall(self) # we may later just load this from the belt model - for i in xrange(self.NumFoodNodes): + for i in range(self.NumFoodNodes): # we want index 0 to be the first one out newPosIndex = self.NumFoodNodes -1 - i yPos = -(self.beltLength / 2.0) + (newPosIndex *self.distBetweenFoodNodes) @@ -257,7 +257,7 @@ def setupFoodNodes(self): def setupFoodIvals(self): """Create all the food intervals for the belt.""" assert self.notify.debugStateCall(self) - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): foodIval = self.createOneFoodIval(self.foodNodes[i]) self.foodIvals.append(foodIval) @@ -346,7 +346,7 @@ def touchedFood(self, colEntry): def setupToonupIvals(self): """Create all the toonup intervals for the belt.""" assert self.notify.debugStateCall(self) - for i in xrange(len(self.foodNodes)): + for i in range(len(self.foodNodes)): toonupIval = self.createOneToonupIval(self.foodNodes[i]) self.toonupIvals.append(toonupIval) diff --git a/toontown/src/coghq/DistributedGagBarrel.py b/toontown/src/coghq/DistributedGagBarrel.py index 435445ff..316211c4 100644 --- a/toontown/src/coghq/DistributedGagBarrel.py +++ b/toontown/src/coghq/DistributedGagBarrel.py @@ -1,12 +1,12 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * - from direct.directnotify import DirectNotifyGlobal -import DistributedBarrelBase +from . import DistributedBarrelBase class DistributedGagBarrel(DistributedBarrelBase.DistributedBarrelBase): + __module__ = __name__ def __init__(self, cr): self.gagLevelMax = 0 @@ -22,40 +22,39 @@ def delete(self): self.gagModel.removeNode() del self.gagModel DistributedBarrelBase.DistributedBarrelBase.delete(self) - + def applyLabel(self): - invModel = loader.loadModel("phase_3.5/models/gui/inventory_icons") + invModel = loader.loadModelCopy('phase_3.5/models/gui/inventory_icons') self.invModels = [] from toontown.toonbase import ToontownBattleGlobals for gagTrack in range(len(ToontownBattleGlobals.AvPropsNew)): itemList = [] for item in range(len(ToontownBattleGlobals.AvPropsNew[gagTrack])): - itemList.append(invModel.find("**/" + ToontownBattleGlobals.AvPropsNew[gagTrack][item])) + itemList.append(invModel.find('**/' + ToontownBattleGlobals.AvPropsNew[gagTrack][item])) + self.invModels.append(itemList) + invModel.removeNode() gagTrack = self.getGagTrack() gagLevel = self.getGagLevel() - self.notify.debug("gagTrack = %s, gagLevel = %s" % (gagTrack, gagLevel)) + self.notify.debug('gagTrack = %s, gagLevel = %s' % (gagTrack, gagLevel)) self.gagModel = self.invModels[gagTrack][gagLevel] self.gagModel.reparentTo(self.gagNode) self.gagModel.setScale(self.gagScale) - self.gagModel.setPos(0,-0.1,0) - + self.gagModel.setPos(0, -0.1, 0) del invModel def setNumGags(self, num): self.numGags = num - # if the barrel is empty, dim the gag model if self.gagModel: if self.numGags == 0: - self.gagModel.setColorScale(.5,.5,.5,1) + self.gagModel.setColorScale(0.5, 0.5, 0.5, 1) else: self.gagModel.clearColorScale() def setGrab(self, avId): - DistributedBarrelBase.DistributedBarrelBase.setGrab(self,avId) - + DistributedBarrelBase.DistributedBarrelBase.setGrab(self, avId) + def resetBarrel(self): DistributedBarrelBase.DistributedBarrelBase.resetBarrel(self) - # reset the scale - self.gagModel.setScale(self.gagScale) + self.gagModel.setScale(self.gagScale) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedGagBarrelAI.py b/toontown/src/coghq/DistributedGagBarrelAI.py index 9ae64b9f..87f4f1ab 100644 --- a/toontown/src/coghq/DistributedGagBarrelAI.py +++ b/toontown/src/coghq/DistributedGagBarrelAI.py @@ -1,5 +1,5 @@ from toontown.toonbase.ToontownBattleGlobals import * -import DistributedBarrelBaseAI +from . import DistributedBarrelBaseAI from direct.directnotify import DirectNotifyGlobal from direct.task import Task diff --git a/toontown/src/coghq/DistributedGolfGreenGame.py b/toontown/src/coghq/DistributedGolfGreenGame.py index d020ef05..6a7b7c90 100644 --- a/toontown/src/coghq/DistributedGolfGreenGame.py +++ b/toontown/src/coghq/DistributedGolfGreenGame.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp import math @@ -22,11 +22,11 @@ from direct.gui.DirectGui import * import random from direct.showbase import RandomNumGen -import GameSprite3D +from . import GameSprite3D from math import pi import math import random -import cPickle +import pickle from toontown.distributed import DelayDelete from toontown.toon import ToonHeadFrame from toontown.battle import BattleParticles @@ -327,7 +327,7 @@ def printGrid(self): printout += ("%s " % (columnIndex)) else: printout += ("%s " % (columnIndex)) - print printout + print(printout) for rowIndex in range(self.gridDimZ-1, -1, -1): if rowIndex < 10: printout = ("row %s " % (rowIndex)) @@ -341,15 +341,15 @@ def printGrid(self): printout += ("%s " % (hasSprite)) else: printout += ("%s " % (hasSprite)) - print printout + print(printout) count = 0 for sprite in self.sprites: - print ("count %s X %s Z %s Color %s" % (count, sprite.gridPosX, sprite.gridPosZ, sprite.colorType)) + print(("count %s X %s Z %s Color %s" % (count, sprite.gridPosX, sprite.gridPosZ, sprite.colorType))) count += 1 def pickLevelPattern(self): - self.boardIndex = random.choice(range(0, len(self.boardData))) + self.boardIndex = random.choice(list(range(0, len(self.boardData)))) self.board = self.boardData[self.boardIndex] self.attackPattern = self.attackPatterns[self.boardIndex] self.attackCounter = 0 @@ -618,7 +618,7 @@ def addToonHeadPanel(self, toon): self.arrangeToonHeadPanels() def removeToonHeadPanel(self, avId): - if self.toonPanels.has_key(avId): + if avId in self.toonPanels: self.toonPanels[avId].destroy() del self.toonPanels[avId] self.arrangeToonHeadPanels() @@ -1348,7 +1348,7 @@ def addSprite(self, image, size = 3.0, posX = 0, posZ = 0, found = 0, color = No #nodeObj.setTransparency(TransparencyAttrib.MAlpha) if color == None: - colorChoice = random.choice(range(0, 3)) + colorChoice = random.choice(list(range(0, 3))) else: colorChoice = color newSprite = GameSprite3D.GameSprite(spriteBase, size, colorChoice, found, facing) @@ -1455,7 +1455,7 @@ def __run(self, cont = 1): if self.attackCounter > (len(self.attackPattern) -1): self.attackCounter = 0 #color = self.attackPattern[self.attackCounter] - print("Pattern %s Place %s Type %s" % (self.attackPattern, self.attackCounter, self.attackPattern[self.attackCounter])) + print(("Pattern %s Place %s Type %s" % (self.attackPattern, self.attackCounter, self.attackPattern[self.attackCounter]))) if self.standbySprite.holdType != None: color = self.standbySprite.holdType sprite = self.addControlSprite(self.newBallX, (self.newBallZ + (self.spriteNotchPos * self.cellSizeZ)), color) @@ -1786,8 +1786,8 @@ def acceptJoin(self, time, timeStamp,avIds): if (index > 3): #LEAVE THIS AS A PRINT #WE ARE ABOUT TO CRASH - print("ERROR! green game has had more than 4 players, we are about to crash\n %s" % (self.everJoinedToons)) - print("Joining Toon is %s index is %s" % (avId, index)) + print(("ERROR! green game has had more than 4 players, we are about to crash\n %s" % (self.everJoinedToons))) + print(("Joining Toon is %s index is %s" % (avId, index))) toon = base.cr.doId2do.get(avId) selfPos = self.getPos(render) offset = self.toonPoints[index] @@ -1886,7 +1886,7 @@ def scoreData(self, total = 2, closed = 1, scoreList = "hello world"): for entryIndex in range(len(scoreList)): entry = scoreList[entryIndex] - if self.toonPanels.has_key(entry[0]): + if entry[0] in self.toonPanels: panel = self.toonPanels[entry[0]] panel.extraData["text"] = (TTLocalizer.GolfGreenGamePlayerScore % (entry[1])) @@ -1947,7 +1947,7 @@ def clearToonTracks(self): keyList.append(key) for key in keyList: - if self.__toonTracks.has_key(key): + if key in self.__toonTracks: self.clearToonTrack(key) diff --git a/toontown/src/coghq/DistributedGolfGreenGameAI.py b/toontown/src/coghq/DistributedGolfGreenGameAI.py index b0da87ed..987468dc 100644 --- a/toontown/src/coghq/DistributedGolfGreenGameAI.py +++ b/toontown/src/coghq/DistributedGolfGreenGameAI.py @@ -8,7 +8,7 @@ from toontown.coghq import BattleBlockerAI from direct.distributed.ClockDelta import * from toontown.toonbase import ToontownBattleGlobals -from GolfGreenGameGlobals import * +from .GolfGreenGameGlobals import * import random import time @@ -74,7 +74,7 @@ def announceGenerate(self): numToons = len(self.level.presentAvIds) numBoards = self.puzzleBase + (numToons * self.puzzlePerPlayer) - boardSelect = range(0, len(gameBoards)) + boardSelect = list(range(0, len(gameBoards))) didGetLast = 1 @@ -106,9 +106,9 @@ def processPreData(self): for ball in attackString: color = self.translateData.get(ball) if (color) or (color == 0): - place = random.choice(range(0,len(attackPattern) + 1)) + place = random.choice(list(range(0,len(attackPattern) + 1))) attackPattern.insert(place, color) - place = random.choice(range(0,len(attackPattern) + 1)) + place = random.choice(list(range(0,len(attackPattern) + 1))) attackPattern.insert(place, color) self.attackPatterns.append(attackPattern) @@ -121,7 +121,7 @@ def startTimer(self): #import pdb; pdb.set_trace() def __printTime(self, task): - print ("Time Left %s" % (self.getTimeLeft())) + print(("Time Left %s" % (self.getTimeLeft()))) taskMgr.doMethodLater(1.0, self.__printTime, self.taskName("GolfGreenGameTimeout Print")) return task.done @@ -159,7 +159,7 @@ def choosePattern(self): if (boardToAssign == None) or (len(self.boardList[boardIndex][0]) < len(self.boardList[boardToAssign][0])): boardToAssign = boardIndex elif (len(self.boardList[boardIndex][0]) == len(self.boardList[boardToAssign][0])): - choice = random.choice(range(2)) + choice = random.choice(list(range(2))) if choice: boardToAssign = boardIndex diff --git a/toontown/src/coghq/DistributedGolfSpot.py b/toontown/src/coghq/DistributedGolfSpot.py index 6ca3cf82..8961625d 100644 --- a/toontown/src/coghq/DistributedGolfSpot.py +++ b/toontown/src/coghq/DistributedGolfSpot.py @@ -160,7 +160,7 @@ def cleanup(self): if self.releaseTrack: self.releaseTrack.finish() self.releaseTrack = None - flyTracks = self.flyBallTracks.values() + flyTracks = list(self.flyBallTracks.values()) for track in flyTracks: track.finish() @@ -731,7 +731,7 @@ def __endFireBall(self): def __updateBallPower(self, task): """Change the value of the power meter.""" if not self.powerBar: - print "### no power bar!!!" + print("### no power bar!!!") return task.done newPower = self.__getBallPower(globalClock.getFrameTime()) @@ -1079,24 +1079,24 @@ def getFlyBallBubble(self): def __flyBallHit(self, entry): """Handle the flying golf ball hitting something in the world.""" #import pdb; pdb.set_trace() - print entry + print(entry) pass def flyBallFinishedFlying(self, sequence): """Handle the flyball sequence finishing.""" - if self.flyBallTracks.has_key(sequence): + if sequence in self.flyBallTracks: del self.flyBallTracks[sequence] def __finishFlyBallTrack(self, sequence): """Force the flyball sequence to finish prematurely.""" - if self.flyBallTracks.has_key(sequence): + if sequence in self.flyBallTracks: flyBallTrack = self.flyBallTracks[sequence] del self.flyBallTracks[sequence] flyBallTrack.finish() def flyBallFinishedSplatting(self, sequence): """Handle the flyball splatt finishing.""" - if self.splatTracks.has_key(sequence): + if sequence in self.splatTracks: del self.splatTracks[sequence] def __flyBallHit(self, entry): @@ -1111,7 +1111,7 @@ def __flyBallHit(self, entry): sequence = int(entry.getFromNodePath().getNetTag('pieSequence')) self.__finishFlyBallTrack(sequence) - if self.splatTracks.has_key(sequence): + if sequence in self.splatTracks: splatTrack = self.splatTracks[sequence] del self.splatTracks[sequence] splatTrack.finish() @@ -1134,7 +1134,7 @@ def __flyBallHit(self, entry): splat = Sequence(splat, Func(self.flyBallFinishedSplatting, sequence)) - assert not self.splatTracks.has_key(sequence) + assert sequence not in self.splatTracks self.splatTracks[sequence] = splat splat.start() diff --git a/toontown/src/coghq/DistributedGrid.py b/toontown/src/coghq/DistributedGrid.py index 70ce88ab..a6553ff5 100644 --- a/toontown/src/coghq/DistributedGrid.py +++ b/toontown/src/coghq/DistributedGrid.py @@ -1,19 +1,20 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * -from CrateGlobals import * - +from .CrateGlobals import * from otp.level import BasicEntities from direct.directnotify import DirectNotifyGlobal class DistributedGrid(BasicEntities.DistributedNodePathEntity): - notify = DirectNotifyGlobal.directNotify.newCategory("DistributedGrid") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedGrid') def __init__(self, cr): BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.model = None - + return + def generateInit(self): self.notify.debug('generateInit') BasicEntities.DistributedNodePathEntity.generateInit(self) @@ -25,29 +26,23 @@ def generate(self): def announceGenerate(self): self.notify.debug('announceGenerate') BasicEntities.DistributedNodePathEntity.announceGenerate(self) - # at this point all the nodepath attributes have been initialized - # we can load the model now. self.loadModel() def disable(self): self.notify.debug('disable') BasicEntities.DistributedNodePathEntity.disable(self) self.unloadModel() - # stop things self.ignoreAll() def delete(self): BasicEntities.DistributedNodePathEntity.delete(self) - - def loadModel(self): - self.notify.debug("loadModel") + def loadModel(self): + self.notify.debug('loadModel') texSize = 6.0 - scale = self.cellSize/texSize - self.model = loader.loadModel("phase_9/models/cogHQ/FloorWear.bam") + scale = self.cellSize / texSize + self.model = loader.loadModelCopy('phase_9/models/cogHQ/FloorWear.bam') self.model.reparentTo(self) - - # figure out which way the grain should run long = self.numCol short = self.numRow h = 0 @@ -55,16 +50,16 @@ def loadModel(self): long = self.numRow short = self.numCol h = 90 - self.model.setScale(scale*long, scale*short, 1) - self.model.setHpr(h,180,0) - self.model.setPos(self.cellSize*self.numCol/2.0, self.cellSize*self.numRow/2.0, .025) - self.model.setColor(0.588, 0.588, 0.459, 0.400) + self.model.setScale(scale * int, scale * short, 1) + self.model.setHpr(h, 180, 0) + self.model.setPos(self.cellSize * self.numCol / 2.0, self.cellSize * self.numRow / 2.0, 0.025) + self.model.setColor(0.588, 0.588, 0.459, 0.4) def unloadModel(self): if self.model: self.model.removeNode() del self.model - + def setNumRow(self, rows): self.numRow = rows self.unloadModel() @@ -73,6 +68,4 @@ def setNumRow(self, rows): def setNumCol(self, cols): self.numCol = cols self.unloadModel() - self.loadModel() - - + self.loadModel() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedGridAI.py b/toontown/src/coghq/DistributedGridAI.py index b33a8d7c..6e854bde 100644 --- a/toontown/src/coghq/DistributedGridAI.py +++ b/toontown/src/coghq/DistributedGridAI.py @@ -9,7 +9,7 @@ SDN: All objects currently take up a 2x2 area of the grid. This is because the grid was originally designed with crates in mind. this should be changed. """ -from CrateGlobals import * +from .CrateGlobals import * from otp.level import DistributedEntityAI from direct.directnotify import DirectNotifyGlobal @@ -296,8 +296,8 @@ def printGrid(self): str += '[.]' else: str += ' . ' - print str + (" : %d" % i) - print "" + print(str + (" : %d" % i)) + print("") diff --git a/toontown/src/coghq/DistributedHealBarrel.py b/toontown/src/coghq/DistributedHealBarrel.py index bda84827..ae0b8507 100644 --- a/toontown/src/coghq/DistributedHealBarrel.py +++ b/toontown/src/coghq/DistributedHealBarrel.py @@ -1,17 +1,17 @@ - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * +from direct.showbase.PandaObject import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * - from direct.directnotify import DirectNotifyGlobal -import DistributedBarrelBase +from . import DistributedBarrelBase class DistributedHealBarrel(DistributedBarrelBase.DistributedBarrelBase): + __module__ = __name__ def __init__(self, cr): DistributedBarrelBase.DistributedBarrelBase.__init__(self, cr) self.numGags = 0 - self.gagScale = .6 + self.gagScale = 0.6 def disable(self): DistributedBarrelBase.DistributedBarrelBase.disable(self) @@ -21,14 +21,13 @@ def delete(self): self.gagModel.removeNode() del self.gagModel DistributedBarrelBase.DistributedBarrelBase.delete(self) - + def applyLabel(self): - self.gagModel = loader.loadModel("phase_4/models/props/icecream") + self.gagModel = loader.loadModelCopy('phase_4/models/props/icecream') self.gagModel.reparentTo(self.gagNode) - self.gagModel.find("**/p1_2").clearBillboard() + self.gagModel.find('**/p1_2').clearBillboard() self.gagModel.setScale(self.gagScale) - self.gagModel.setPos(0,-0.1,-.1-self.gagScale) - + self.gagModel.setPos(0, -0.1, -0.1 - self.gagScale) + def setGrab(self, avId): - DistributedBarrelBase.DistributedBarrelBase.setGrab(self,avId) - + DistributedBarrelBase.DistributedBarrelBase.setGrab(self, avId) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedHealBarrelAI.py b/toontown/src/coghq/DistributedHealBarrelAI.py index f6af782c..a7443d62 100644 --- a/toontown/src/coghq/DistributedHealBarrelAI.py +++ b/toontown/src/coghq/DistributedHealBarrelAI.py @@ -1,4 +1,4 @@ -import DistributedBarrelBaseAI +from . import DistributedBarrelBaseAI from direct.directnotify import DirectNotifyGlobal from direct.task import Task diff --git a/toontown/src/coghq/DistributedInGameEditor.py b/toontown/src/coghq/DistributedInGameEditor.py index 224a4b71..0d426967 100644 --- a/toontown/src/coghq/DistributedInGameEditor.py +++ b/toontown/src/coghq/DistributedInGameEditor.py @@ -8,8 +8,8 @@ from otp.level import Entity from otp.level import EditMgr # this is required in order to eval the incoming spec repr string -from SpecImports import * -from InGameEditorElements import * +from .SpecImports import * +from .InGameEditorElements import * #import FactoryEntityCreator from toontown.cogdominium import CogdoEntityCreator import string @@ -22,9 +22,9 @@ def __init__(self): def attribChanged(self, attrib, value): """this is called when one of our attributes changes""" Entity.Entity.attribChanged(self, attrib, value) - print 'attribChange: %s %s, %s = %s' % ( + print('attribChange: %s %s, %s = %s' % ( self.level.getEntityType(self.entId), self.entId, - attrib, repr(value)) + attrib, repr(value))) # editor InGameEditorElement methods def getTypeName(self): @@ -150,7 +150,7 @@ def __init__(self, editor): EntCreatorClass.__init__(self, editor) # it's a little dirty to be reaching down directly into # EntityCreatorBase like this. But I'm over it. - entTypes = self.entType2Ctor.keys() + entTypes = list(self.entType2Ctor.keys()) for type in entTypes: self.entType2Ctor[type] = InGameEditorEntity # we need a real editMgr @@ -298,7 +298,7 @@ def gotCurrentSpec(self, curSpec): self.selectedEntity = None base.startTk() - import InGameEditor + from . import InGameEditor doneEvent = self.uniqueName('editorDone') saveAsEvent = self.uniqueName('saveSpec') requestSaveEvent = self.uniqueName('requestSpecSave') @@ -461,7 +461,7 @@ def insertEntityIntoTree(self, entId): def buildEntityTree(self): # clear out all heirarchy self.setChildren([]) - entIds = self.entities.keys() + entIds = list(self.entities.keys()) entIds.sort() for entId in entIds: ent = self.getEntity(entId) @@ -692,7 +692,7 @@ def setEntityCreatorUsername(self, entId, editUsername): requested.""" Level.Level.setEntityCreatorUsername(self, entId, editUsername) if editUsername == self.getEditUsername(): - print 'entity %s about to be created; we requested it' % entId + print('entity %s about to be created; we requested it' % entId) callback = self.entCreateHandlerQ[0] del self.entCreateHandlerQ[:1] callback(entId) @@ -748,7 +748,7 @@ def doRemoveEntity(self, entId): oldAttribs = [] spec = self.levelSpec.getEntitySpecCopy(entId) del spec['type'] - for attrib, value in spec.items(): + for attrib, value in list(spec.items()): oldAttribs.append((attrib, value)) def setNewEntityId(entId, self=self, removeAction=removeAction, oldAttribs=oldAttribs): @@ -757,7 +757,7 @@ def setNewEntityId(entId, self=self, removeAction=removeAction, removeAction[2]['entId'] = entId # now that we have the new entId, set all of the old entity's # attribs on the new entity - for attrib, value in spec.items(): + for attrib, value in list(spec.items()): self.privSendAttribEdit(entId, attrib, value) # TODO: update map of old entIds -> new entIds? # during string of redos/undos, if entities are being @@ -807,7 +807,7 @@ def makeCopyOfEntName(self, name): if oldName[i] != ' ': hasSuffix = False else: - print 'numString: %s' % numString + print('numString: %s' % numString) copyNum = int(numString)+1 if hasSuffix: newName = oldName[:i] + suffix % copyNum @@ -844,7 +844,7 @@ def duplicateSelectedEntity(self): # remove any constant attribs typeDesc = self.entTypeReg.getTypeDesc(copyAttribs['type']) attribDescs = typeDesc.getAttribDescDict() - for attribName, attribDesc in attribDescs.items(): + for attribName, attribDesc in list(attribDescs.items()): if attribDesc.getDatatype() == 'const': del copyAttribs[attribName] def setNewEntityId(entId, self=self, removeAction=removeAction, @@ -854,7 +854,7 @@ def setNewEntityId(entId, self=self, removeAction=removeAction, removeAction[2]['entId'] = entId # set attribs - for attribName, value in copyAttribs.items(): + for attribName, value in list(copyAttribs.items()): self.privSendAttribEdit(entId, attribName, value) # TODO: update map of old entIds -> new entIds? # during string of redos/undos, if entities are being @@ -877,14 +877,14 @@ def setEntCreateHandler(self=self, handler=setNewEntityId): def specPrePickle(self, spec): # prepares a spec for pickling # WARNING: modifies 'spec' - for attribName, value in spec.items(): + for attribName, value in list(spec.items()): spec[attribName] = repr(value) return spec def specPostUnpickle(self, spec): # fixes up a spec after being unpickled # WARNING: modifies 'spec' - for attribName, value in spec.items(): + for attribName, value in list(spec.items()): spec[attribName] = eval(value) return spec @@ -897,8 +897,8 @@ def handleImportEntities(self): 'error') return # for now, only import a single entity - import tkFileDialog - filename = tkFileDialog.askopenfilename( + import tkinter.filedialog + filename = tkinter.filedialog.askopenfilename( parent=self.editor.parent, defaultextension='.egroup', filetypes=[('Entity Group', '.egroup'), @@ -912,7 +912,7 @@ def handleImportEntities(self): f = open(filename, 'r') eTree = pickle.load(f) eGroup = pickle.load(f) - for entId, spec in eGroup.items(): + for entId, spec in list(eGroup.items()): eGroup[entId] = self.specPostUnpickle(spec) except: self.editor.showWarning( @@ -923,14 +923,14 @@ def handleImportEntities(self): oldEntId2new = {} def addEntities(treeEntry, parentEntId, eGroup=eGroup): # recursively adds the entities described by the entId tree - for entId, children in treeEntry.items(): + for entId, children in list(treeEntry.items()): spec = eGroup[entId] entType = spec['type'] del spec['type'] del spec['parentEntId'] # remove all other 'const' attributes typeDesc = self.entTypeReg.getTypeDesc(entType) - for attribName, attribDesc in typeDesc.getAttribDescDict().items(): + for attribName, attribDesc in list(typeDesc.getAttribDescDict().items()): if attribDesc.getDatatype() == 'const': if attribName in spec: del spec[attribName] @@ -963,8 +963,8 @@ def handleExportEntity(self): 'Please select a valid entity first.', 'error') return - import tkFileDialog - filename = tkFileDialog.asksaveasfilename( + import tkinter.filedialog + filename = tkinter.filedialog.asksaveasfilename( parent=self.editor.parent, defaultextension='.egroup', filetypes=[('Entity Group', '.egroup'), @@ -978,7 +978,7 @@ def handleExportEntity(self): eTree = {selectedEntId:{}} eGroup = {} eGroup[selectedEntId] = self.levelSpec.getEntitySpecCopy(selectedEntId) - for entId, spec in eGroup.items(): + for entId, spec in list(eGroup.items()): eGroup[entId] = self.specPrePickle(spec) try: import pickle @@ -999,8 +999,8 @@ def handleExportEntityTree(self): 'Please select a valid entity first.', 'error') return - import tkFileDialog - filename = tkFileDialog.asksaveasfilename( + import tkinter.filedialog + filename = tkinter.filedialog.asksaveasfilename( parent=self.editor.parent, defaultextension='.egroup', filetypes=[('Entity Group', '.egroup'), @@ -1022,7 +1022,7 @@ def addEntity(entId, treeEntry): for child in entity.getChildren(): addEntity(child.entId, treeEntry[entId]) addEntity(selectedEntId, eTree) - for entId, spec in eGroup.items(): + for entId, spec in list(eGroup.items()): eGroup[entId] = self.specPrePickle(spec) try: import pickle @@ -1066,7 +1066,7 @@ def requestSpecSave(self): def setAttribChange(self, entId, attrib, valueStr, username): """AI has informed us of an accepted value change""" if username == self.editUsername: - print 'we got our own edit back!' + print('we got our own edit back!') value = eval(valueStr) self.levelSpec.setAttribChange(entId, attrib, value, username) diff --git a/toontown/src/coghq/DistributedInGameEditorAI.py b/toontown/src/coghq/DistributedInGameEditorAI.py index 191764cc..24563142 100644 --- a/toontown/src/coghq/DistributedInGameEditorAI.py +++ b/toontown/src/coghq/DistributedInGameEditorAI.py @@ -1,7 +1,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObjectAI from direct.directutil import DistributedLargeBlobSenderAI -from SpecImports import * +from .SpecImports import * class DistributedInGameEditorAI(DistributedObjectAI.DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory( @@ -48,7 +48,7 @@ def getLevelDoId(self): return self.levelDoId def requestCurrentLevelSpec(self): - print "requestCurrentLevelSpec" + print("requestCurrentLevelSpec") # send an up-to-date copy of the level spec to this client #senderId = self.air.getAvatarIdFromSender() spec = self.level.levelSpec diff --git a/toontown/src/coghq/DistributedLaserField.py b/toontown/src/coghq/DistributedLaserField.py index cd351d2e..f911c105 100644 --- a/toontown/src/coghq/DistributedLaserField.py +++ b/toontown/src/coghq/DistributedLaserField.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp import math diff --git a/toontown/src/coghq/DistributedLaserFieldAI.py b/toontown/src/coghq/DistributedLaserFieldAI.py index ba382ec4..13d47a53 100644 --- a/toontown/src/coghq/DistributedLaserFieldAI.py +++ b/toontown/src/coghq/DistributedLaserFieldAI.py @@ -239,7 +239,7 @@ def showSuits(self): def addSuit(self, suit): - print("Adding Suit %s" % (suit.doId)) + print(("Adding Suit %s" % (suit.doId))) #import pdb; pdb.set_trace() BattleBlockerAI.BattleBlockerAI.addSuit(self, suit) diff --git a/toontown/src/coghq/DistributedLawOffice.py b/toontown/src/coghq/DistributedLawOffice.py index 8bb57e70..320a1c20 100644 --- a/toontown/src/coghq/DistributedLawOffice.py +++ b/toontown/src/coghq/DistributedLawOffice.py @@ -5,9 +5,9 @@ import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import LawOfficeBase -import FactoryEntityCreator -import FactorySpecs +from . import LawOfficeBase +from . import FactoryEntityCreator +from . import FactorySpecs from otp.level import LevelSpec from otp.level import LevelConstants from toontown.toonbase import TTLocalizer diff --git a/toontown/src/coghq/DistributedLawOfficeAI.py b/toontown/src/coghq/DistributedLawOfficeAI.py index 624ae2ce..65b15460 100644 --- a/toontown/src/coghq/DistributedLawOfficeAI.py +++ b/toontown/src/coghq/DistributedLawOfficeAI.py @@ -1,13 +1,13 @@ from otp.level import DistributedLevelAI from direct.directnotify import DirectNotifyGlobal -import cPickle -import LevelSuitPlannerAI -import LawOfficeBase +import pickle +from . import LevelSuitPlannerAI +from . import LawOfficeBase from direct.task import Task -import FactoryEntityCreatorAI -import FactorySpecs +from . import FactoryEntityCreatorAI +from . import FactorySpecs from otp.level import LevelSpec -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.suit import DistributedFactorySuitAI from toontown.toonbase import ToontownGlobals, ToontownBattleGlobals from toontown.coghq import DistributedBattleFactoryAI @@ -160,7 +160,7 @@ def startNextFloor(self): #print self.layout.floorIds if self.avIds: - print self.avIds + print(self.avIds) self.currentFloor +=1 specModule = self.layout.getFloorSpec(self.currentFloor) diff --git a/toontown/src/coghq/DistributedLawOfficeElevatorIntAI.py b/toontown/src/coghq/DistributedLawOfficeElevatorIntAI.py index 43fcfc4b..683b9267 100644 --- a/toontown/src/coghq/DistributedLawOfficeElevatorIntAI.py +++ b/toontown/src/coghq/DistributedLawOfficeElevatorIntAI.py @@ -49,7 +49,7 @@ def elevatorClosed(self): pass for avId in self.avIds: if not avId in sittingAvIds: - print("THIS AV ID %s IS NOT ON BOARD" % (avId)) + print(("THIS AV ID %s IS NOT ON BOARD" % (avId))) self.bldg.startNextFloor() @@ -58,7 +58,7 @@ def elevatorClosed(self): self.fsm.request("closed") def enterClosed(self): - print("DistributedLawOfficeElevatorIntAI.elevatorClosed %s" % (self.doId)) + print(("DistributedLawOfficeElevatorIntAI.elevatorClosed %s" % (self.doId))) #import pdb; pdb.set_trace() DistributedElevatorFloorAI.DistributedElevatorFloorAI.enterClosed(self) # Switch back into opening mode since we allow other Toons onboard diff --git a/toontown/src/coghq/DistributedLawOfficeFloor.py b/toontown/src/coghq/DistributedLawOfficeFloor.py index 4d3094d2..1dd7a5cd 100644 --- a/toontown/src/coghq/DistributedLawOfficeFloor.py +++ b/toontown/src/coghq/DistributedLawOfficeFloor.py @@ -5,9 +5,9 @@ import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import LawOfficeBase -import FactoryEntityCreator -import FactorySpecs +from . import LawOfficeBase +from . import FactoryEntityCreator +from . import FactorySpecs from otp.level import LevelSpec from otp.level import LevelConstants from toontown.toonbase import TTLocalizer @@ -162,8 +162,8 @@ def printPos(self=self): # print position of localToon relative to the zone that he's in pos = base.localAvatar.getPos(self.getZoneNode(self.lastToonZone)) h = base.localAvatar.getH(self.getZoneNode(self.lastToonZone)) - print 'factory pos: %s, h: %s, zone %s' % ( - repr(pos), h, self.lastToonZone) + print('factory pos: %s, h: %s, zone %s' % ( + repr(pos), h, self.lastToonZone)) posStr = "X: %.3f" % pos[0] + "\nY: %.3f" % pos[1] + \ "\nZ: %.3f" % pos[2] + "\nH: %.3f" % h + \ "\nZone: %s" % str(self.lastToonZone) diff --git a/toontown/src/coghq/DistributedLawOfficeFloorAI.py b/toontown/src/coghq/DistributedLawOfficeFloorAI.py index a50c193a..dd78c8b1 100644 --- a/toontown/src/coghq/DistributedLawOfficeFloorAI.py +++ b/toontown/src/coghq/DistributedLawOfficeFloorAI.py @@ -1,13 +1,13 @@ from otp.level import DistributedLevelAI from direct.directnotify import DirectNotifyGlobal -import cPickle -import LevelSuitPlannerAI -import LawOfficeBase +import pickle +from . import LevelSuitPlannerAI +from . import LawOfficeBase from direct.task import Task -import FactoryEntityCreatorAI -import FactorySpecs +from . import FactoryEntityCreatorAI +from . import FactorySpecs from otp.level import LevelSpec -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.suit import DistributedFactorySuitAI from toontown.toonbase import ToontownGlobals, ToontownBattleGlobals from toontown.coghq import DistributedBattleFactoryAI diff --git a/toontown/src/coghq/DistributedLawbotBossGavel.py b/toontown/src/coghq/DistributedLawbotBossGavel.py index 72fb45df..3268c67e 100644 --- a/toontown/src/coghq/DistributedLawbotBossGavel.py +++ b/toontown/src/coghq/DistributedLawbotBossGavel.py @@ -65,7 +65,7 @@ def announceGenerate(self): - assert(not self.boss.gavels.has_key(self.index)) + assert(self.index not in self.boss.gavels) self.boss.gavels[self.index] = self def delete(self): diff --git a/toontown/src/coghq/DistributedLawbotCannon.py b/toontown/src/coghq/DistributedLawbotCannon.py index ae2eb5fe..c6765e39 100644 --- a/toontown/src/coghq/DistributedLawbotCannon.py +++ b/toontown/src/coghq/DistributedLawbotCannon.py @@ -126,7 +126,7 @@ def delete(self): def announceGenerate(self): DistributedObject.DistributedObject.announceGenerate(self) - assert(not self.boss.cannons.has_key(self.index)) + assert(self.index not in self.boss.cannons) self.boss.cannons[self.index] = self @@ -357,7 +357,7 @@ def setMovie(self, mode, avId, extraInfo): - if (self.cr.doId2do.has_key(self.avId)): + if (self.avId in self.cr.doId2do): # If the toon exists, look it up self.av = self.cr.doId2do[self.avId] self.acceptOnce(self.av.uniqueName('disable'), @@ -1060,7 +1060,7 @@ def __fireCannonTask(self, task): flightResults = self.__calcFlightResults(avId, launchTime) # pull all the results into the local namespace for key in flightResults: - exec "%s = flightResults['%s']" % (key, key) + exec("%s = flightResults['%s']" % (key, key)) self.notify.debug("start position: " + str(startPos)) self.notify.debug("start velocity: " + str(startVel)) diff --git a/toontown/src/coghq/DistributedLawbotChair.py b/toontown/src/coghq/DistributedLawbotChair.py index b9769907..d291d52c 100644 --- a/toontown/src/coghq/DistributedLawbotChair.py +++ b/toontown/src/coghq/DistributedLawbotChair.py @@ -99,7 +99,7 @@ def announceGenerate(self): self.nodePath.wrtReparentTo(chairParent) - assert(not self.boss.chairs.has_key(self.index)) + assert(self.index not in self.boss.chairs) self.boss.chairs[self.index] = self diff --git a/toontown/src/coghq/DistributedLevelBattle.py b/toontown/src/coghq/DistributedLevelBattle.py index be56e92e..1b29fbc2 100644 --- a/toontown/src/coghq/DistributedLevelBattle.py +++ b/toontown/src/coghq/DistributedLevelBattle.py @@ -6,23 +6,21 @@ from toontown.toon import TTEmote from otp.avatar import Emote from toontown.battle import SuitBattleGlobals -import random +import whrandom from toontown.suit import SuitDNA from direct.fsm import State from direct.fsm import ClassicFSM from toontown.toonbase import ToontownGlobals class DistributedLevelBattle(DistributedBattle.DistributedBattle): - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedLevelBattle') + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLevelBattle') def __init__(self, cr): - """ - cr is a ClientRepository. - """ - DistributedBattle.DistributedBattle.__init__(self,cr) + DistributedBattle.DistributedBattle.__init__(self, cr) self.levelRequest = None self.levelBattle = 1 + return def setLevelDoId(self, levelDoId): self.levelDoId = levelDoId @@ -30,195 +28,135 @@ def setLevelDoId(self, levelDoId): def setBattleCellId(self, battleCellId): self.battleCellId = battleCellId - # This method is only called when the level is generated; it - # is one of the required fields. It immediately follows - # setLevelDoId in the toon.dc file, so we should have - # already gotten the levelDoId specified. - - # Hopefully, the actual level object already exists, so we - # can set up our position and orientation immediately. It is - # important that we set up the battle position before we get - # the call to setMembers, which will be coming momentarily. - def doPlacement(levelList, self=self): self.levelRequest = None self.level = levelList[0] spec = self.level.getBattleCellSpec(self.battleCellId) self.level.requestReparent(self, spec['parentEntId']) self.setPos(spec['pos']) - print "spec = %s" % (spec) - print "h = %s" % (spec.get('h')) - # Battles really want to be parented to render. + print('spec = %s' % spec) + print('h = %s' % spec.get('h')) self.wrtReparentTo(render) + return level = base.cr.doId2do.get(self.levelDoId) if level is None: - self.notify.warning('level %s not in doId2do yet, battle %s will be mispositioned.' % - self.levelDoId, self.doId) - self.levelRequest = self.cr.relatedObjectMgr.requestObjects( - [self.levelDoId], doPlacement) - + self.notify.warning('level %s not in doId2do yet, battle %s will be mispositioned.' % self.levelDoId, self.doId) + self.levelRequest = self.cr.relatedObjectMgr.requestObjects([self.levelDoId], doPlacement) else: - # We already have the level, great. doPlacement([level]) - + return def setPosition(self, *args): - # The level battle doesn't try to position itself according - # to the AI's instructions; it has already positioned itself - # from the level spec, above. pass def setInitialSuitPos(self, x, y, z): - """ setInitialSuitPos(x, y, z) - """ self.initialSuitPos = Point3(x, y, z) - # The level battle doesn't try to rotate itself according to - # the initial suit pos; it has already rotated itself from the - # level spec, above. - def disable(self): - # make sure we unlock the visibility if self.hasLocalToon(): self.unlockLevelViz() if self.levelRequest is not None: self.cr.relatedObjectMgr.abortRequest(self.levelRequest) self.levelRequest = None DistributedBattle.DistributedBattle.disable(self) + return def delete(self): self.ignoreAll() DistributedBattle.DistributedBattle.delete(self) def handleBattleBlockerCollision(self): - # send an event so it looks like we bumped into the battle - # collision sphere messenger.send(self.getCollisionName(), [None]) + return def lockLevelViz(self): level = base.cr.doId2do.get(self.levelDoId) if level: level.lockVisibility(zoneId=self.zoneId) else: - self.notify.warning("lockLevelViz: couldn't find level %s" % - self.levelDoId) + self.notify.warning("lockLevelViz: couldn't find level %s" % self.levelDoId) def unlockLevelViz(self): level = base.cr.doId2do.get(self.levelDoId) if level: level.unlockVisibility() else: - self.notify.warning("unlockLevelViz: couldn't find level %s" % - self.levelDoId) + self.notify.warning("unlockLevelViz: couldn't find level %s" % self.levelDoId) def onWaitingForJoin(self): - # localToon just collided with the battle and has requested - # to join. lock down the visibility self.lockLevelViz() - ##### FaceOff state ##### - def __faceOff(self, ts, name, callback): - if (len(self.suits) == 0): - self.notify.warning('__faceOff(): no suits.') - return - if (len(self.toons) == 0): - self.notify.warning('__faceOff(): no toons.') - return - toon = self.toons[0] point = self.toonPoints[0][0] toonPos = point[0] toonHpr = VBase3(point[1], 0.0, 0.0) - p = toon.getPos(self) toon.setPos(self, p[0], p[1], 0.0) toon.setShadowHeight(0) - - if (len(self.suits) == 1): - # TODO: it looks like we only have the suit that we bumped - # into at this point; he may or may not be the boss. - # Need to add other suits before battle generate on AI + if len(self.suits) == 1: leaderIndex = 0 else: - if (self.bossBattle == 1): + if self.bossBattle == 1: for suit in self.suits: if suit.boss: leaderIndex = self.suits.index(suit) break - else: - # otherwise __genSuitInfos ensures nothing, so pick the suit with the highest type to be the leader - maxTypeNum = -1 - for suit in self.suits: - suitTypeNum = SuitDNA.getSuitType(suit.dna.name) - if (maxTypeNum < suitTypeNum): - maxTypeNum = suitTypeNum - leaderIndex = self.suits.index(suit) + + maxTypeNum = -1 + for suit in self.suits: + suitTypeNum = SuitDNA.getSuitType(suit.dna.name) + if maxTypeNum < suitTypeNum: + maxTypeNum = suitTypeNum + leaderIndex = self.suits.index(suit) delay = FACEOFF_TAUNT_T suitTrack = Parallel() suitLeader = None - for suit in self.suits: suit.setState('Battle') suitIsLeader = 0 oneSuitTrack = Sequence() - # Suits stop what they're doing and look at the toons oneSuitTrack.append(Func(suit.loop, 'neutral')) oneSuitTrack.append(Func(suit.headsUp, toonPos)) - - # Only the suit leader taunts the toons - if (self.suits.index(suit) == leaderIndex): + if self.suits.index(suit) == leaderIndex: suitLeader = suit suitIsLeader = 1 - - # TODO: have an inside of building taunt here - if (self.bossBattle == 1) and self.levelDoId in base.cr.doId2do: + if self.bossBattle == 1 and self.levelDoId in base.cr.doId2do: level = base.cr.doId2do[self.levelDoId] if suit.boss: taunt = level.getBossTaunt() else: taunt = level.getBossBattleTaunt() else: - taunt = SuitBattleGlobals.getFaceoffTaunt( - suit.getStyleName(), suit.doId) - - oneSuitTrack.append(Func(suit.setChatAbsolute, - taunt, CFSpeech | CFTimeout)) - - # Move all suits into position after taunt delay - destPos, destHpr = self.getActorPosHpr(suit, self.suits) + taunt = SuitBattleGlobals.getFaceoffTaunt(suit.getStyleName(), suit.doId) + oneSuitTrack.append(Func(suit.setChatAbsolute, taunt, CFSpeech | CFTimeout)) + (destPos, destHpr) = self.getActorPosHpr(suit, self.suits) oneSuitTrack.append(Wait(delay)) - if (suitIsLeader == 1): + if suitIsLeader == 1: oneSuitTrack.append(Func(suit.clearChat)) oneSuitTrack.append(self.createAdjustInterval(suit, destPos, destHpr)) suitTrack.append(oneSuitTrack) suitHeight = suitLeader.getHeight() suitOffsetPnt = Point3(0, 0, suitHeight) - - # Do the toons faceoff toonTrack = Parallel() for toon in self.toons: oneToonTrack = Sequence() - destPos, destHpr = self.getActorPosHpr(toon, self.toons) + (destPos, destHpr) = self.getActorPosHpr(toon, self.toons) oneToonTrack.append(Wait(delay)) - oneToonTrack.append(self.createAdjustInterval( - toon, destPos, destHpr, toon=1, run=1)) + oneToonTrack.append(self.createAdjustInterval(toon, destPos, destHpr, toon=1, run=1)) toonTrack.append(oneToonTrack) - if (self.hasLocalToon()): - # empirical hack to pick a mid-height view, left in to sortof match the old view - MidTauntCamHeight = suitHeight*0.66 - MidTauntCamHeightLim = suitHeight-1.8 - if(MidTauntCamHeight < MidTauntCamHeightLim): - MidTauntCamHeight = MidTauntCamHeightLim + if self.hasLocalToon(): + MidTauntCamHeight = suitHeight * 0.66 + MidTauntCamHeightLim = suitHeight - 1.8 + if MidTauntCamHeight < MidTauntCamHeightLim: + MidTauntCamHeight = MidTauntCamHeightLim TauntCamY = 18 TauntCamX = 0 - TauntCamHeight = random.choice((MidTauntCamHeight,1,11)) - - # Put the camera somewhere + TauntCamHeight = whrandom.choice((MidTauntCamHeight, 1, 11)) camTrack = Sequence() camTrack.append(Func(camera.reparentTo, suitLeader)) camTrack.append(Func(base.camLens.setFov, self.camFOFov)) @@ -229,53 +167,44 @@ def __faceOff(self, ts, name, callback): camTrack.append(Func(camera.wrtReparentTo, self)) camTrack.append(Func(camera.setPos, self.camFOPos)) camTrack.append(Func(camera.lookAt, suit)) - mtrack = Parallel(suitTrack, toonTrack) - - if (self.hasLocalToon()): - # No arrows - they just get in the way + if self.hasLocalToon(): NametagGlobals.setMasterArrowsOn(0) mtrack = Parallel(mtrack, camTrack) - done = Func(callback) - track = Sequence(mtrack, done, name = name) + track = Sequence(mtrack, done, name=name) track.start(ts) - self.storeInterval(track, name) + self.activeIntervals[name] = track + return def enterFaceOff(self, ts): - assert(self.notify.debug('enterFaceOff()')) - if (len(self.toons) > 0 and - base.localAvatar == self.toons[0]): - Emote.globalEmote.disableAll(self.toons[0], "dbattlebldg, enterFaceOff") + if len(self.toons) > 0 and base.localAvatar == self.toons[0]: + Emote.globalEmote.disableAll(self.toons[0], 'dbattlebldg, enterFaceOff') self.delayDeleteMembers() self.__faceOff(ts, self.faceOffName, self.__handleFaceOffDone) def __handleFaceOffDone(self): self.notify.debug('FaceOff done') - # Only the toon that initiated the battle needs to reply self.d_faceOffDone(base.localAvatar.doId) def exitFaceOff(self): self.notify.debug('exitFaceOff()') - if (len(self.toons) > 0 and base.localAvatar == self.toons[0]): - Emote.globalEmote.releaseAll(self.toons[0], "dbattlebldg exitFaceOff") + if len(self.toons) > 0 and base.localAvatar == self.toons[0]: + Emote.globalEmote.releaseAll(self.toons[0], 'dbattlebldg exitFaceOff') self.clearInterval(self.faceOffName) - self._removeMembersKeep() - - ##### Reward state ##### + self.membersKeep = None + return def __playReward(self, ts, callback): toonTracks = Parallel() for toon in self.toons: - toonTracks.append(Sequence(Func(toon.loop, 'victory'), - Wait(FLOOR_REWARD_TIMEOUT), - Func(toon.loop, 'neutral'))) + toonTracks.append(Sequence(Func(toon.loop, 'victory'), Wait(FLOOR_REWARD_TIMEOUT), Func(toon.loop, 'neutral'))) + name = self.uniqueName('floorReward') - track = Sequence(toonTracks, - Func(callback), name=name) + track = Sequence(toonTracks, Func(callback), name=name) camera.setPos(0, 0, 1) camera.setHpr(180, 10, 0) - self.storeInterval(track, name) + self.activeIntervals[name] = track track.start(ts) def enterReward(self, ts): @@ -289,9 +218,10 @@ def __handleFloorRewardDone(self): def exitReward(self): self.notify.info('exitReward()') - # In case the server finished first self.clearInterval(self.uniqueName('floorReward')) - self._removeMembersKeep() + self.membersKeep = None NametagGlobals.setMasterArrowsOn(1) for toon in self.toons: toon.startSmooth() + + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedLevelBattleAI.py b/toontown/src/coghq/DistributedLevelBattleAI.py index bff8b59a..f7383367 100644 --- a/toontown/src/coghq/DistributedLevelBattleAI.py +++ b/toontown/src/coghq/DistributedLevelBattleAI.py @@ -4,7 +4,7 @@ from direct.fsm import State from direct.fsm import ClassicFSM from toontown.battle.BattleBase import * -import CogDisguiseGlobals +from . import CogDisguiseGlobals from direct.showbase.PythonUtil import addListsByValue class DistributedLevelBattleAI(DistributedBattleAI.DistributedBattleAI): diff --git a/toontown/src/coghq/DistributedLift.py b/toontown/src/coghq/DistributedLift.py index c08dfbbb..383176d5 100644 --- a/toontown/src/coghq/DistributedLift.py +++ b/toontown/src/coghq/DistributedLift.py @@ -1,14 +1,14 @@ -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from otp.level import BasicEntities from direct.directnotify import DirectNotifyGlobal -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State -import LiftConstants -import MovingPlatform +from . import LiftConstants, MovingPlatform class DistributedLift(BasicEntities.DistributedNodePathEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLift') def __init__(self, cr): @@ -17,43 +17,23 @@ def __init__(self, cr): def generateInit(self): self.notify.debug('generateInit') BasicEntities.DistributedNodePathEntity.generateInit(self) - # load stuff - self.moveSnd = base.loadSfx('phase_9/audio/sfx/CHQ_FACT_elevator_up_down.mp3') - - self.fsm = ClassicFSM.ClassicFSM('DistributedLift', - [ - State.State('off', - self.enterOff, - self.exitOff, - ['moving']), - State.State('moving', - self.enterMoving, - self.exitMoving, - ['waiting']), - State.State('waiting', - self.enterWaiting, - self.exitWaiting, - ['moving']), - ], - # Initial State - 'off', - # Final State - 'off', - ) + self.fsm = ClassicFSM.ClassicFSM('DistributedLift', [ + State.State('off', self.enterOff, self.exitOff, [ + 'moving']), + State.State('moving', self.enterMoving, self.exitMoving, [ + 'waiting']), + State.State('waiting', self.enterWaiting, self.exitWaiting, [ + 'moving'])], 'off', 'off') self.fsm.enterInitialState() def generate(self): self.notify.debug('generate') BasicEntities.DistributedNodePathEntity.generate(self) - # nodepath that will be lerped, regardless of whether or not - # model loaded correctly self.platform = self.attachNewNode('platParent') def setStateTransition(self, toState, fromState, arrivalTimestamp): self.notify.debug('setStateTransition: %s->%s' % (fromState, toState)) - # the lift should reach state 'toState' precisely - # at time 'arrivalTimestamp' if not self.isGenerated(): self.initialState = toState self.initialFromState = fromState @@ -64,28 +44,21 @@ def setStateTransition(self, toState, fromState, arrivalTimestamp): def announceGenerate(self): self.notify.debug('announceGenerate') BasicEntities.DistributedNodePathEntity.announceGenerate(self) - self.initPlatform() - - # fire it up self.state = None - self.fsm.request('moving', [self.initialState, - self.initialFromState, - self.initialStateTimestamp]) + self.fsm.request('moving', [self.initialState, self.initialFromState, self.initialStateTimestamp]) del self.initialState del self.initialStateTimestamp + return def disable(self): self.notify.debug('disable') - # stop things self.ignoreAll() self.fsm.requestFinalState() - BasicEntities.DistributedNodePathEntity.disable(self) def delete(self): self.notify.debug('delete') - # unload things del self.moveSnd del self.fsm self.destroyPlatform() @@ -94,23 +67,16 @@ def delete(self): BasicEntities.DistributedNodePathEntity.delete(self) def initPlatform(self): - model = loader.loadModel(self.modelPath) + model = loader.loadModelCopy(self.modelPath) if model is None: return model.setScale(self.modelScale) - - # create our moving platform if self.floorName is None: return self.platformModel = MovingPlatform.MovingPlatform() - self.platformModel.setupCopyModel( - self.getParentToken(), model, self.floorName) - - # listen for the platform's enter and exit event + self.platformModel.setupCopyModel(self.getParentToken(), model, self.floorName) self.accept(self.platformModel.getEnterEvent(), self.localToonEntered) self.accept(self.platformModel.getExitEvent(), self.localToonLeft) - - # get handles on the start and end guard collision polys self.startGuard = None self.endGuard = None zoneNp = self.getZoneNode() @@ -118,56 +84,32 @@ def initPlatform(self): self.startGuard = zoneNp.find('**/%s' % self.startGuardName) if len(self.endGuardName): self.endGuard = zoneNp.find('**/%s' % self.endGuardName) - - # get handles on the start and end boarding collision planes - # (actually, they're the planes we need to stash so that toons - # can get off the lift) - side2srch = { - 'front': '**/wall_front', - 'back': '**/wall_back', - 'left': '**/wall_left', - 'right': '**/wall_right', - } - if 0: - # Hack to stop getting out of lift: - floor = self.platformModel.model.find("**/MovingPlatform-*") - assert not floor.isEmpty() - safetyNet = floor.copyTo(floor.getParent()) - safetyNet.setName("safetyNet") - safetyNet.setZ(-0.1) - safetyNet.setScale(2.0) - safetyNet.setCollideMask(ToontownGlobals.safetyNetBitmask) - safetyNet.flattenLight() - safetyNet.show() #*# - - # Hack for falling off of the lift: - for side in side2srch.values(): + side2srch = {'front': '**/wall_front', 'back': '**/wall_back', 'left': '**/wall_left', 'right': '**/wall_right'} + for side in list(side2srch.values()): np = self.platformModel.find(side) if not np.isEmpty(): np.setScale(1.0, 1.0, 2.0) np.setZ(-10) np.flattenLight() - + self.startBoardColl = NodePathCollection() self.endBoardColl = NodePathCollection() for side in self.startBoardSides: np = self.platformModel.find(side2srch[side]) if np.isEmpty(): - DistributedLift.warning( - "couldn't find %s board collision" % side) + DistributedLift.warning("couldn't find %s board collision" % side) else: self.startBoardColl.addPath(np) + for side in self.endBoardSides: np = self.platformModel.find(side2srch[side]) if np.isEmpty(): - DistributedLift.warning( - "couldn't find %s board collision" % side) + DistributedLift.warning("couldn't find %s board collision" % side) else: self.endBoardColl.addPath(np) - # now that we've found the guards, we can reparent the platform - # otherwise our finds would venture into the platform model self.platformModel.reparentTo(self.platform) + return def destroyPlatform(self): if hasattr(self, 'platformModel'): @@ -183,6 +125,7 @@ def destroyPlatform(self): del self.endGuard del self.startBoardColl del self.endBoardColl + return def localToonEntered(self): self.sendUpdate('setAvatarEnter') @@ -190,9 +133,9 @@ def localToonEntered(self): def localToonLeft(self): self.sendUpdate('setAvatarLeave') - # ClassicFSM state enter/exit funcs def enterOff(self): self.notify.debug('enterOff') + def exitOff(self): pass @@ -203,15 +146,12 @@ def getPosition(self, state): return self.endPos def getGuard(self, state): - """returns guard that should be disabled when lift is in 'state'""" if state is LiftConstants.Down: return self.startGuard else: return self.endGuard def getBoardColl(self, state): - """returns collision geom that should be disabled when lift is in - 'state'""" if state is LiftConstants.Down: return self.startBoardColl else: @@ -221,19 +161,10 @@ def enterMoving(self, toState, fromState, arrivalTimestamp): self.notify.debug('enterMoving, %s->%s' % (fromState, toState)) if self.state == toState: self.notify.warning('already in state %s' % toState) - - # TODO: optimization: - # if timestamp < now: - # just set lift to target state - # else: - # create and play interval - startPos = self.getPosition(fromState) endPos = self.getPosition(toState) - startGuard = self.getGuard(fromState) endGuard = self.getGuard(toState) - startBoardColl = self.getBoardColl(fromState) endBoardColl = self.getBoardColl(toState) @@ -241,52 +172,40 @@ def startMoving(self=self, guard=startGuard, boardColl=startBoardColl): if guard is not None and not guard.isEmpty(): guard.unstash() boardColl.unstash() - # start the lift sound looping, so that the attenuation recalcs - # every time it loops self.soundIval = SoundInterval(self.moveSnd, node=self.platform) self.soundIval.loop() + return - def doneMoving(self=self, guard=endGuard, boardColl=endBoardColl, - newState=toState): + def doneMoving(self=self, guard=endGuard, boardColl=endBoardColl, newState=toState): self.state = newState - if hasattr(self, 'soundIval'): - self.soundIval.pause() - del self.soundIval + self.soundIval.pause() + del self.soundIval if guard is not None and not guard.isEmpty(): guard.stash() boardColl.stash() self.fsm.request('waiting') + return - self.moveIval = Sequence( - Func(startMoving), - LerpPosInterval(self.platform, self.duration, - endPos, startPos = startPos, - blendType='easeInOut', - name='lift-%s-move' % self.entId, - fluid = 1), - Func(doneMoving), - ) - # move should finish at 'arrivalTimestamp' - ivalStartT = ( - globalClockDelta.networkToLocalTime(arrivalTimestamp, bits=32) - - self.moveIval.getDuration()) + self.moveIval = Sequence(Func(startMoving), LerpPosInterval(self.platform, self.duration, endPos, startPos=startPos, blendType='easeInOut', name='lift-%s-move' % self.entId, fluid=1), Func(doneMoving)) + ivalStartT = globalClockDelta.networkToLocalTime(arrivalTimestamp, bits=32) - self.moveIval.getDuration() self.moveIval.start(globalClock.getFrameTime() - ivalStartT) - + def exitMoving(self): if hasattr(self, 'soundIval'): self.soundIval.pause() del self.soundIval - # 'finish'ing here causes ClassicFSM problems self.moveIval.pause() del self.moveIval def enterWaiting(self): self.notify.debug('enterWaiting') + def exitWaiting(self): pass if __dev__: + def attribChanged(self, *args): BasicEntities.DistributedNodePathEntity.attribChanged(self, *args) self.destroyPlatform() - self.initPlatform() + self.initPlatform() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedLiftAI.py b/toontown/src/coghq/DistributedLiftAI.py index 885df940..045bab21 100644 --- a/toontown/src/coghq/DistributedLiftAI.py +++ b/toontown/src/coghq/DistributedLiftAI.py @@ -4,7 +4,7 @@ from direct.task import Task from direct.fsm import ClassicFSM, State from direct.fsm import State -import LiftConstants +from . import LiftConstants class DistributedLiftAI(DistributedEntityAI.DistributedEntityAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLiftAI') diff --git a/toontown/src/coghq/DistributedMaze.py b/toontown/src/coghq/DistributedMaze.py index 5adb34fc..ca5adc25 100644 --- a/toontown/src/coghq/DistributedMaze.py +++ b/toontown/src/coghq/DistributedMaze.py @@ -5,7 +5,7 @@ import random from direct.directnotify import DirectNotifyGlobal from direct.distributed.ClockDelta import globalClockDelta -import DistributedBarrelBase +from . import DistributedBarrelBase from otp.level.BasicEntities import DistributedNodePathEntity from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -79,7 +79,7 @@ def gotRoom(self, rooms): rotations = [0,0,90,90,180,180,270,270] self.getRng().shuffle(rotations) self.numSections = 0 - for i in xrange(0,4): + for i in range(0,4): maze = room.getGeom().find('**/Maze_Inside_%d' % i) if not maze.isEmpty(): self.numSections += 1 diff --git a/toontown/src/coghq/DistributedMazeAI.py b/toontown/src/coghq/DistributedMazeAI.py index 6b8407af..29fd883b 100644 --- a/toontown/src/coghq/DistributedMazeAI.py +++ b/toontown/src/coghq/DistributedMazeAI.py @@ -1,5 +1,5 @@ from otp.level import DistributedEntityAI -import DistributedBarrelBaseAI +from . import DistributedBarrelBaseAI from direct.directnotify import DirectNotifyGlobal from direct.distributed.ClockDelta import globalClockDelta from direct.task import Task diff --git a/toontown/src/coghq/DistributedMint.py b/toontown/src/coghq/DistributedMint.py index a4dbb568..91d4b6f1 100644 --- a/toontown/src/coghq/DistributedMint.py +++ b/toontown/src/coghq/DistributedMint.py @@ -1,4 +1,4 @@ -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.distributed.ClockDelta import * from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal @@ -9,8 +9,8 @@ from toontown.coghq import DistributedMintRoom, MintLayout, MintRoom class DistributedMint(DistributedObject.DistributedObject): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMint') - ReadyPost = 'MintReady' WinEvent = 'MintWinEvent' @@ -20,29 +20,22 @@ def __init__(self, cr): def generate(self): self.notify.debug('generate: %s' % self.doId) DistributedObject.DistributedObject.generate(self) - bboard.post('mint', self) - self.roomWatcher = None self.geom = None self.rooms = [] self.hallways = [] self.allRooms = [] self.curToonRoomNum = None - base.localAvatar.setCameraCollisionsCanMove(1) - - # place local toon here just in case we don't have an entrancePoint - # entity set up base.localAvatar.reparentTo(render) - base.localAvatar.setPosHpr(0,0,0,0,0,0) - + base.localAvatar.setPosHpr(0, 0, 0, 0, 0, 0) self.accept('SOSPanelEnter', self.handleSOSPanel) + return - # required fields def setZoneId(self, zoneId): self.zoneId = zoneId - + def setMintId(self, id): DistributedMint.notify.debug('setMintId: %s' % id) self.mintId = id @@ -54,215 +47,176 @@ def setFloorNum(self, num): def setRoomDoIds(self, roomDoIds): self.roomDoIds = roomDoIds - self.roomWatcher = BulletinBoardWatcher.BulletinBoardWatcher( - 'roomWatcher-%s' % self.doId, - [DistributedMintRoom.getMintRoomReadyPostName(doId) - for doId in self.roomDoIds], self.gotAllRooms) + self.roomWatcher = BulletinBoardWatcher.BulletinBoardWatcher('roomWatcher-%s' % self.doId, [ DistributedMintRoom.getMintRoomReadyPostName(doId) for doId in self.roomDoIds ], self.gotAllRooms) def gotAllRooms(self): self.notify.debug('mint %s: got all rooms' % self.doId) self.roomWatcher.destroy() self.roomWatcher = None - self.geom = render.attachNewNode('mint%s' % self.doId) - - # fill out our table of rooms for doId in self.roomDoIds: self.rooms.append(base.cr.doId2do[doId]) - self.rooms[-1].setMint(self) - - self.notify.info('mintId %s, floor %s, %s' % ( - self.mintId, self.floorNum, self.rooms[0].avIdList)) + self.rooms[(-1)].setMint(self) + self.notify.info('mintId %s, floor %s, %s' % (self.mintId, self.floorNum, self.rooms[0].avIdList)) rng = self.layout.getRng() numRooms = self.layout.getNumRooms() - - for i, room in enumerate(self.rooms): - # there's a hallway between each pair of rooms + for (i, room) in enumerate(self.rooms): if i == 0: room.getGeom().reparentTo(self.geom) else: - # attach the room to the preceding hallway - room.attachTo(self.hallways[i-1], rng) + room.attachTo(self.hallways[(i - 1)], rng) self.allRooms.append(room) self.listenForFloorEvents(room) - - if i < (numRooms-1): - # add a hallway leading out of the room + if i < numRooms - 1: hallway = MintRoom.MintRoom(self.layout.getHallwayModel(i)) hallway.attachTo(room, rng) - hallway.setRoomNum((i*2)+1) + hallway.setRoomNum(i * 2 + 1) hallway.initFloorCollisions() hallway.enter() self.hallways.append(hallway) self.allRooms.append(hallway) self.listenForFloorEvents(hallway) - # listen for camera-ray/floor collision events def handleCameraRayFloorCollision(collEntry, self=self): name = collEntry.getIntoNode().getName() self.notify.debug('camera floor ray collided with: %s' % name) prefix = MintRoom.MintRoom.FloorCollPrefix prefixLen = len(prefix) - if (name[:prefixLen] == prefix): + if name[:prefixLen] == prefix: try: roomNum = int(name[prefixLen:]) except: - DistributedLevel.notify.warning( - 'Invalid zone floor collision node: %s' - % name) + DistributedLevel.notify.warning('Invalid zone floor collision node: %s' % name) else: self.camEnterRoom(roomNum) - self.accept('on-floor', handleCameraRayFloorCollision) + self.accept('on-floor', handleCameraRayFloorCollision) if bboard.has('mintRoom'): self.warpToRoom(bboard.get('mintRoom')) - - # get this event name before we send out our first setZone firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent() - # wait until the first viz setZone completes before announcing - # that we're ready to go + def handleFirstSetZoneDone(): self.notify.debug('mintHandleFirstSetZoneDone') - # NOW we're ready. bboard.post(DistributedMint.ReadyPost, self) - self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone) - # listen to all of the network zones; no network visibility for now - zoneList = [OTPGlobals.UberZone, self.zoneId] + self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone) + zoneList = [ + OTPGlobals.UberZone, self.zoneId] for room in self.rooms: zoneList.extend(room.zoneIds) - base.cr.sendSetZoneMsg(self.zoneId, zoneList) + base.cr.sendSetZoneMsg(self.zoneId, zoneList) self.accept('takingScreenshot', self.handleScreenshot) + return def listenForFloorEvents(self, room): roomNum = room.getRoomNum() floorCollName = room.getFloorCollName() - # listen for zone enter events from floor collisions - def handleZoneEnter(collisionEntry, - self=self, roomNum=roomNum): + def handleZoneEnter(collisionEntry, self=self, roomNum=roomNum): self.toonEnterRoom(roomNum) floorNode = collisionEntry.getIntoNode() if floorNode.hasTag('ouch'): room = self.allRooms[roomNum] ouchLevel = room.getFloorOuchLevel() room.startOuch(ouchLevel) + self.accept('enter%s' % floorCollName, handleZoneEnter) - # also listen for zone exit events for the sake of the - # ouch system - def handleZoneExit(collisionEntry, - self=self, roomNum=roomNum): + def handleZoneExit(collisionEntry, self=self, roomNum=roomNum): floorNode = collisionEntry.getIntoNode() if floorNode.hasTag('ouch'): self.allRooms[roomNum].stopOuch() + self.accept('exit%s' % floorCollName, handleZoneExit) def getAllRoomsTimeout(self): - self.notify.warning('mint %s: timed out waiting for room objs' % - self.doId) - # TODO: abandon going to the mint, go back + self.notify.warning('mint %s: timed out waiting for room objs' % self.doId) def toonEnterRoom(self, roomNum): self.notify.debug('toonEnterRoom: %s' % roomNum) if roomNum != self.curToonRoomNum: if self.curToonRoomNum is not None: - self.allRooms[self.curToonRoomNum].localToonFSM.request( - 'notPresent') + self.allRooms[self.curToonRoomNum].localToonFSM.request('notPresent') self.allRooms[roomNum].localToonFSM.request('present') self.curToonRoomNum = roomNum + return def camEnterRoom(self, roomNum): self.notify.debug('camEnterRoom: %s' % roomNum) - if (roomNum % 2) == 1: - # this is a hallway; we should see the rooms on either side - # and the hallways leading out of them - minVis = roomNum-2 - maxVis = roomNum+2 + if roomNum % 2 == 1: + minVis = roomNum - 2 + maxVis = roomNum + 2 else: - # we're in a room, we only need to see the adjacent hallways - minVis = roomNum-1 - maxVis = roomNum+1 - for i, room in enumerate(self.allRooms): + minVis = roomNum - 1 + maxVis = roomNum + 1 + for (i, room) in enumerate(self.allRooms): if i < minVis or i > maxVis: room.getGeom().stash() else: room.getGeom().unstash() def setBossConfronted(self, avId): - # the avId has already been vetted by the room that received the msg if avId == base.localAvatar.doId: return av = base.cr.identifyFriend(avId) if av is None: return - base.localAvatar.setSystemMessage( - avId, TTLocalizer.MintBossConfrontedMsg % av.getName()) + base.localAvatar.setSystemMessage(avId, TTLocalizer.MintBossConfrontedMsg % av.getName()) + return def warpToRoom(self, roomId): - # returns False if invalid roomId - # find a room with the right id - for i in xrange(len(self.rooms)): + for i in range(len(self.rooms)): room = self.rooms[i] if room.roomId == roomId: break else: return False - base.localAvatar.setPosHpr(room.getGeom(), 0,0,0, 0,0,0) - # account for the hallways - self.camEnterRoom(i*2) + + base.localAvatar.setPosHpr(room.getGeom(), 0, 0, 0, 0, 0, 0) + self.camEnterRoom(i * 2) return True def disable(self): self.notify.debug('disable') - self.ignoreAll() - for hallway in self.hallways: hallway.exit() self.rooms = [] for hallway in self.hallways: hallway.delete() + self.hallways = [] self.allRooms = [] - if self.roomWatcher: self.roomWatcher.destroy() self.roomWatcher = None - if self.geom is not None: self.geom.removeNode() self.geom = None - base.localAvatar.setCameraCollisionsCanMove(0) - - if (hasattr(self, 'relatedObjectMgrRequest') - and self.relatedObjectMgrRequest): + if hasattr(self, 'relatedObjectMgrRequest') and self.relatedObjectMgrRequest: self.cr.relatedObjectMgr.abortRequest(self.relatedObjectMgrRequest) del self.relatedObjectMgrRequest - DistributedObject.DistributedObject.disable(self) + return def delete(self): DistributedObject.DistributedObject.delete(self) self.ignore('SOSPanelEnter') bboard.remove('mint') - + def handleSOSPanel(self, panel): - # make a list of toons that are still in the mint avIds = [] for avId in self.rooms[0].avIdList: - # if a toon dropped and came back into the game, they won't - # be in the factory, so they won't be in the doId2do. if base.cr.doId2do.get(avId): avIds.append(avId) + panel.setFactoryToonIdList(avIds) def handleScreenshot(self): - base.addScreenshotString('mintId: %s, floor (from 1): %s' % ( - self.mintId, self.floorNum+1)) + base.addScreenshotString('mintId: %s, floor (from 1): %s' % (self.mintId, self.floorNum + 1)) if hasattr(self, 'currentRoomName'): - base.addScreenshotString('%s' % self.currentRoomName) + base.addScreenshotString('%s' % self.currentRoomName) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedMintBattle.py b/toontown/src/coghq/DistributedMintBattle.py index 01664f0a..08aeac8b 100644 --- a/toontown/src/coghq/DistributedMintBattle.py +++ b/toontown/src/coghq/DistributedMintBattle.py @@ -6,62 +6,45 @@ from toontown.toon import TTEmote from otp.avatar import Emote from toontown.battle import SuitBattleGlobals -import random +import whrandom from toontown.suit import SuitDNA from direct.fsm import State -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from toontown.toonbase import ToontownGlobals class DistributedMintBattle(DistributedLevelBattle.DistributedLevelBattle): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMintBattle') def __init__(self, cr): - """ - cr is a ClientRepository. - """ - DistributedLevelBattle.DistributedLevelBattle.__init__(self,cr) - - # Add a new reward state to the battle ClassicFSM - self.fsm.addState(State.State('MintReward', - self.enterMintReward, - self.exitMintReward, - ['Resume'])) + DistributedLevelBattle.DistributedLevelBattle.__init__(self, cr) + self.fsm.addState(State.State('MintReward', self.enterMintReward, self.exitMintReward, [ + 'Resume'])) offState = self.fsm.getStateNamed('Off') offState.addTransition('MintReward') playMovieState = self.fsm.getStateNamed('PlayMovie') playMovieState.addTransition('MintReward') - ##### MintReward state ##### - def enterMintReward(self, ts): - self.notify.debug('enterMintReward()') + self.notify.info('enterMintReward()') self.disableCollision() self.delayDeleteMembers() - if (self.hasLocalToon()): + if self.hasLocalToon(): NametagGlobals.setMasterArrowsOn(0) if self.bossBattle: messenger.send('localToonConfrontedMintBoss') - self.movie.playReward(ts, self.uniqueName('building-reward'), - self.__handleMintRewardDone) + self.movie.playReward(ts, self.uniqueName('building-reward'), self.__handleMintRewardDone) def __handleMintRewardDone(self): - self.notify.debug('mint reward done') - if (self.hasLocalToon()): + self.notify.info('mint reward done') + if self.hasLocalToon(): self.d_rewardDone(base.localAvatar.doId) self.movie.resetReward() - - # Now request our local battle object enter the Resume state, - # which frees us from the battle. The distributed object may - # not enter the Resume state yet (it has to wait until all the - # toons involved have reported back up), but there's no reason - # we have to wait around for that. self.fsm.request('Resume') def exitMintReward(self): - self.notify.debug('exitMintReward()') - # In case we're observing and the server cuts us off - # this guarantees all final animations get started and things - # get cleaned up + self.notify.info('exitMintReward()') self.movie.resetReward(finish=1) - self._removeMembersKeep() + self.membersKeep = None NametagGlobals.setMasterArrowsOn(1) + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedMintBattleAI.py b/toontown/src/coghq/DistributedMintBattleAI.py index 266a022c..1f438499 100644 --- a/toontown/src/coghq/DistributedMintBattleAI.py +++ b/toontown/src/coghq/DistributedMintBattleAI.py @@ -4,7 +4,7 @@ from direct.fsm import State from direct.fsm import ClassicFSM, State from toontown.battle.BattleBase import * -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.toonbase.ToontownBattleGlobals import getMintCreditMultiplier from direct.showbase.PythonUtil import addListsByValue diff --git a/toontown/src/coghq/DistributedMintElevatorExt.py b/toontown/src/coghq/DistributedMintElevatorExt.py index 45095ed1..7fb79c84 100644 --- a/toontown/src/coghq/DistributedMintElevatorExt.py +++ b/toontown/src/coghq/DistributedMintElevatorExt.py @@ -1,3 +1,4 @@ +from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from toontown.building.ElevatorConstants import * @@ -11,9 +12,11 @@ from toontown.hood import ZoneUtil from toontown.toonbase import TTLocalizer from toontown.toontowngui import TTDialog -import CogDisguiseGlobals +from direct.distributed import DelayDelete +from . import CogDisguiseGlobals class DistributedMintElevatorExt(DistributedElevatorExt.DistributedElevatorExt): + __module__ = __name__ def __init__(self, cr): DistributedElevatorExt.DistributedElevatorExt.__init__(self, cr) @@ -26,66 +29,40 @@ def generate(self): def delete(self): self.elevatorModel.removeNode() del self.elevatorModel - DistributedElevatorExt.DistributedElevatorExt.delete(self) def setMintId(self, mintId): self.mintId = mintId - - mintId2originId = { - ToontownGlobals.CashbotMintIntA : 1, - ToontownGlobals.CashbotMintIntB : 2, - ToontownGlobals.CashbotMintIntC : 0, - } + mintId2originId = {ToontownGlobals.CashbotMintIntA: 1, ToontownGlobals.CashbotMintIntB: 2, ToontownGlobals.CashbotMintIntC: 0} originId = mintId2originId[self.mintId] - geom = self.cr.playGame.hood.loader.geom locator = geom.find('**/elevator_origin_%s' % originId) if locator: - self.elevatorModel.setPosHpr(locator,0,0,0,0,0,0) + self.elevatorModel.setPosHpr(locator, 0, 0, 0, 0, 0, 0) else: - self.notify.error("No origin found for originId: %s" % originId) - - # Create a sign for this elevator + self.notify.error('No origin found for originId: %s' % originId) locator = geom.find('**/elevator_signorigin_%s' % originId) backgroundGeom = geom.find('**/ElevatorFrameFront_%d' % originId) backgroundGeom.node().setEffect(DecalEffect.make()) - signText = DirectGui.OnscreenText( - text = TextEncoder.upper(TTLocalizer.GlobalStreetNames[mintId][-1]), - font = ToontownGlobals.getSuitFont(), - scale = TTLocalizer.DMEEsignText, - fg = (0.87, 0.87, 0.87, 1), - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = backgroundGeom) + signText = DirectGui.OnscreenText(text=TextEncoder.upper(TTLocalizer.GlobalStreetNames[mintId][(-1)]), font=ToontownGlobals.getSuitFont(), scale=2, fg=(0.87, 0.87, 0.87, 1), parent=backgroundGeom) signText.setPosHpr(locator, 0, 0, 0, 0, 0, 0) signText.setDepthWrite(0) def setupElevator(self): - """setupElevator(self) - Called when the building doId is set at construction time, - this method sets up the elevator for business. - """ - # TODO: place this on a node indexed by the entraceId - self.elevatorModel = loader.loadModel("phase_10/models/cogHQ/mintElevator") + self.elevatorModel = loader.loadModelCopy('phase_10/models/cogHQ/mintElevator') self.elevatorModel.reparentTo(render) - self.leftDoor = self.elevatorModel.find("**/left_door") - self.rightDoor = self.elevatorModel.find("**/right_door") - # No lights on this elevator + self.leftDoor = self.elevatorModel.find('**/left_door') + self.rightDoor = self.elevatorModel.find('**/right_door') DistributedElevator.DistributedElevator.setupElevator(self) - - # pull the collision sphere out a bit self.elevatorSphereNodePath.setY(-1.42) - + def getElevatorModel(self): return self.elevatorModel def setBldgDoId(self, bldgDoId): - # The doId is junk, there is no building object for the mint - # exterior elevators. Do the appropriate things that - # DistributedElevator.gotBldg does. self.bldg = None self.setupElevator() + return def getZoneId(self): return 0 @@ -94,77 +71,23 @@ def __doorsClosed(self, zoneId): return def setMintInteriorZone(self, zoneId): - if (self.localToonOnBoard): + if self.localToonOnBoard: hoodId = self.cr.playGame.hood.hoodId mintId = self.mintId if bboard.has('mintIdOverride'): mintId = bboard.get('mintIdOverride') - doneStatus = { - 'loader' : "cogHQLoader", - 'where' : "mintInterior", - 'how' : "teleportIn", - 'zoneId' : zoneId, - 'mintId' : self.mintId, - 'hoodId' : hoodId, - } + doneStatus = {'loader': 'cogHQLoader', 'where': 'mintInterior', 'how': 'teleportIn', 'zoneId': zoneId, 'mintId': self.mintId, 'hoodId': hoodId} self.cr.playGame.getPlace().elevator.signalDone(doneStatus) - - def setMintInteriorZoneForce(self, zoneId): - place = self.cr.playGame.getPlace() - if place: - place.fsm.request("elevator", [self, 1]) - hoodId = self.cr.playGame.hood.hoodId - mintId = self.mintId - if bboard.has('mintIdOverride'): - mintId = bboard.get('mintIdOverride') - doneStatus = { - 'loader' : "cogHQLoader", - 'where' : "mintInterior", - 'how' : "teleportIn", - 'zoneId' : zoneId, - 'mintId' : self.mintId, - 'hoodId' : hoodId, - } - if hasattr(place, 'elevator') and place.elevator: - place.elevator.signalDone(doneStatus) - else: - self.notify.warning("setMintInteriorZoneForce: Couldn't find playGame.getPlace().elevator, zoneId: %s" %zoneId) - else: - self.notify.warning("setMintInteriorZoneForce: Couldn't find playGame.getPlace(), zoneId: %s" %zoneId) - def rejectBoard(self, avId, reason = 0): - # This should only be sent to us if our localToon requested - # permission to board the elevator. - assert(base.localAvatar.getDoId() == avId) - - # At the moment, the design is that a mint elevator should be - # open to all who want to board. It was proposed at one point - # that the mint elevator should be restricted only to those - # who have a full cog suit, but we have decided not to do - # that; if we change our minds and decide to lock out the - # un-"suit"-able after all, move the comment marks below. - # see also: DistributedMintElevatorExtAI.avIsOKToBoard - - DistributedElevatorExt.DistributedElevatorExt.rejectBoard(self, - avId, reason) + def rejectBoard(self, avId): + DistributedElevatorExt.DistributedElevatorExt.rejectBoard(self, avId) return def __handleRejectAck(self): doneStatus = self.rejectDialog.doneStatus - if doneStatus != "ok": - self.notify.error("Unrecognized doneStatus: " + - str(doneStatus)) - doneStatus = { - 'where' : 'reject', - } + if doneStatus != 'ok': + self.notify.error('Unrecognized doneStatus: ' + str(doneStatus)) + doneStatus = {'where': 'reject'} self.cr.playGame.getPlace().elevator.signalDone(doneStatus) self.rejectDialog.cleanup() - del self.rejectDialog - - def getDestName(self): - if self.mintId == ToontownGlobals.CashbotMintIntA: - return TTLocalizer.ElevatorCashBotMint0 - elif self.mintId == ToontownGlobals.CashbotMintIntB: - return TTLocalizer.ElevatorCashBotMint1 - elif self.mintId == ToontownGlobals.CashbotMintIntC: - return TTLocalizer.ElevatorCashBotMint2 + del self.rejectDialog \ No newline at end of file diff --git a/toontown/src/coghq/DistributedMintElevatorExtAI.py b/toontown/src/coghq/DistributedMintElevatorExtAI.py index 535d96b2..b077a793 100644 --- a/toontown/src/coghq/DistributedMintElevatorExtAI.py +++ b/toontown/src/coghq/DistributedMintElevatorExtAI.py @@ -6,7 +6,7 @@ from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task -import CogDisguiseGlobals +from . import CogDisguiseGlobals class DistributedMintElevatorExtAI(DistributedElevatorExtAI.DistributedElevatorExtAI): def __init__(self, air, bldg, mintId, antiShuffle = 0, minLaff = 0): @@ -34,7 +34,7 @@ def avIsOKToBoard(self, av): return True #parts = av.getCogParts() #return CogDisguiseGlobals.isSuitComplete(parts, self.cogDept) - + def elevatorClosed(self): numPlayers = self.countFullSeats() @@ -48,7 +48,7 @@ def elevatorClosed(self): if i not in [None, 0]: players.append(i) mintZone = self.bldg.createMint(self.mintId, players) - + for seatIndex in range(len(self.seats)): avId = self.seats[seatIndex] if avId: @@ -66,16 +66,16 @@ def enterClosed(self): DistributedElevatorExtAI.DistributedElevatorExtAI.enterClosed(self) # Switch back into opening mode since we allow other Toons onboard self.fsm.request('opening') - + def sendAvatarsToDestination(self, avIdList): if (len(avIdList) > 0): mintZone = self.bldg.createMint(self.mintId, avIdList) for avId in avIdList: if avId: - # Tell each player on the elevator that they should enter + # Tell each player on the elevator that they should enter # the factory # And which zone it is in - self.sendUpdateToAvatarId(avId, 'setMintInteriorZoneForce', + self.sendUpdateToAvatarId(avId, 'setMintInteriorZoneForce', [mintZone]) diff --git a/toontown/src/coghq/DistributedMintRoom.py b/toontown/src/coghq/DistributedMintRoom.py index 7a5e4f8a..8af8ea63 100644 --- a/toontown/src/coghq/DistributedMintRoom.py +++ b/toontown/src/coghq/DistributedMintRoom.py @@ -1,35 +1,29 @@ -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from toontown.toonbase.ToontownGlobals import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import MintRoomBase, MintRoom -import FactoryEntityCreator -import MintRoomSpecs +from . import MintRoomBase, MintRoom, FactoryEntityCreator, MintRoomSpecs from otp.level import LevelSpec, LevelConstants from toontown.toonbase import TTLocalizer if __dev__: from otp.level import EditorGlobals -# gives you the name of the bboard posting that will be made when a room is -# ready for business def getMintRoomReadyPostName(doId): return 'mintRoomReady-%s' % doId -class DistributedMintRoom(DistributedLevel.DistributedLevel, - MintRoomBase.MintRoomBase, MintRoom.MintRoom): - notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMintRoom') - # Any non-entrance mint room will not have an entrancePoint entity. +class DistributedMintRoom(DistributedLevel.DistributedLevel, MintRoomBase.MintRoomBase, MintRoom.MintRoom): + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMintRoom') EmulateEntrancePoint = False - + def __init__(self, cr): DistributedLevel.DistributedLevel.__init__(self, cr) MintRoomBase.MintRoomBase.__init__(self) MintRoom.MintRoom.__init__(self) - self.suitIds = [] self.suits = [] self.reserveSuits = [] @@ -37,6 +31,7 @@ def __init__(self, cr): self.suitsInitialized = 0 self.goonClipPlanes = {} self.mint = None + return def createEntityCreator(self): return FactoryEntityCreator.FactoryEntityCreator(level=self) @@ -50,8 +45,7 @@ def delete(self): DistributedLevel.DistributedLevel.delete(self) MintRoom.MintRoom.delete(self) self.ignoreAll() - - # required fields + def setMintId(self, mintId): self.notify.debug('mintId: %s' % mintId) MintRoomBase.MintRoomBase.setMintId(self, mintId) @@ -67,201 +61,143 @@ def setRoomNum(self, num): def levelAnnounceGenerate(self): self.notify.debug('levelAnnounceGenerate') DistributedLevel.DistributedLevel.levelAnnounceGenerate(self) - - # create our spec - # NOTE: in dev, the AI will probably send us another spec to use specModule = MintRoomSpecs.getMintRoomSpecModule(self.roomId) roomSpec = LevelSpec.LevelSpec(specModule) if __dev__: - # give the spec a factory EntityTypeRegistry. typeReg = self.getMintEntityTypeReg() roomSpec.setEntityTypeReg(typeReg) - DistributedLevel.DistributedLevel.initializeLevel(self, roomSpec) - # if the AI is sending us a spec, we won't have it yet and the - # level isn't really initialized yet. So we can't assume that we - # can start doing stuff here. Much of what used to be here - # has been moved to FactoryLevelMgr, where it really belongs, but... - # this could be cleaner. - def getReadyPostName(self): return getMintRoomReadyPostName(self.doId) def privGotSpec(self, levelSpec): - # OK, we've got the spec that we're going to use, either the one - # we provided or the one from the AI. When we call down, the level - # is going to be initialized, and all the local entities will be - # created. if __dev__: - # First, give the spec a factory EntityTypeRegistry if it doesn't - # have one. if not levelSpec.hasEntityTypeReg(): typeReg = self.getMintEntityTypeReg() levelSpec.setEntityTypeReg(typeReg) - - # let 'er rip. DistributedLevel.DistributedLevel.privGotSpec(self, levelSpec) - MintRoom.MintRoom.enter(self) - - # our place will gen this event BEFORE we leave the mint. - # We need to let the AI know that we've left; if everyone leaves, - # the AI will destroy the mint. self.acceptOnce('leavingMint', self.announceLeaving) - - # announce that we're ready bboard.post(self.getReadyPostName()) def fixupLevelModel(self): - # the level is giving us a chance to modify the room geom before - # entities get placed. Set up the floor collisions now. MintRoom.MintRoom.setGeom(self, self.geom) MintRoom.MintRoom.initFloorCollisions(self) def setMint(self, mint): - # the mint gives us a ref to it after we're all set up self.mint = mint def setBossConfronted(self, avId): - assert avId in self.avIdList self.mint.setBossConfronted(avId) def setDefeated(self): self.notify.info('setDefeated') - # boss has been defeated from toontown.coghq import DistributedMint messenger.send(DistributedMint.DistributedMint.WinEvent) - # for now, let's ignore visibility, since we may not even need it def initVisibility(self, *args, **kw): pass + def shutdownVisibility(self, *args, **kw): pass + def lockVisibility(self, *args, **kw): pass + def unlockVisibility(self, *args, **kw): pass + def enterZone(self, *args, **kw): pass + def updateVisibility(self, *args, **kw): pass + def setVisibility(self, *args, **kw): pass + def resetVisibility(self, *args, **kw): pass + def handleVisChange(self, *args, **kw): pass + def forceSetZoneThisFrame(self, *args, **kw): pass def getParentTokenForEntity(self, entId): - # we override this in order to differentiate the parenting tokens for - # mint-room entities, since multiple mint rooms will be present on - # the client simultaneously, and we don't want them clashing. - - # this leaves room for 100 editor users, and about 40 rooms. if __dev__: - assert len(EditorGlobals.username2entIdBase) < 100 - assert self.roomNum < 40 - return (1000000 * self.roomNum) + entId + pass + return 1000000 * self.roomNum + entId - # states for 'localToon present' FSM def enterLtNotPresent(self): MintRoom.MintRoom.enterLtNotPresent(self) - # called when localToon is no longer in this room if __dev__: - # announce that we're no longer available for editing bboard.removeIfEqual(EditorGlobals.EditTargetPostName, self) self.ignore('f2') def enterLtPresent(self): MintRoom.MintRoom.enterLtPresent(self) - # called when localToon is in this room if __dev__: - # announce that we're available for editing bboard.post(EditorGlobals.EditTargetPostName, self) - if self.mint is not None: - self.mint.currentRoomName = ( - MintRoomSpecs.CashbotMintRoomId2RoomName[self.roomId]) + self.mint.currentRoomName = MintRoomSpecs.CashbotMintRoomId2RoomName[self.roomId] def printPos(self=self): - # print position of localToon relative to this zone thisZone = self.getZoneNode(LevelConstants.UberZoneEntId) pos = base.localAvatar.getPos(thisZone) h = base.localAvatar.getH(thisZone) roomName = MintRoomSpecs.CashbotMintRoomId2RoomName[self.roomId] - print 'mint pos: %s, h: %s, room: %s' % ( - repr(pos), h, roomName) + print('mint pos: %s, h: %s, room: %s' % (repr(pos), h, roomName)) if self.mint is not None: floorNum = self.mint.floorNum else: floorNum = '???' - posStr = "X: %.3f" % pos[0] + "\nY: %.3f" % pos[1] + \ - "\nZ: %.3f" % pos[2] + "\nH: %.3f" % h + \ - "\nmintId: %s" % self.mintId + \ - "\nfloor: %s" % floorNum + \ - "\nroomId: %s" % self.roomId + \ - "\nroomName: %s" % roomName - base.localAvatar.setChatAbsolute(posStr,CFThought | CFTimeout) - self.accept('f2',printPos) + posStr = 'X: %.3f' % pos[0] + '\nY: %.3f' % pos[1] + '\nZ: %.3f' % pos[2] + '\nH: %.3f' % h + '\nmintId: %s' % self.mintId + '\nfloor: %s' % floorNum + '\nroomId: %s' % self.roomId + '\nroomName: %s' % roomName + base.localAvatar.setChat(posStr, CFThought) + return + + self.accept('f2', printPos) + return def handleSOSPanel(self, panel): - # make a list of toons that are still in the factory avIds = [] for avId in self.avIdList: - # if a toon dropped and came back into the game, they won't - # be in the factory, so they won't be in the doId2do. if base.cr.doId2do.get(avId): avIds.append(avId) + panel.setFactoryToonIdList(avIds) def disable(self): self.notify.debug('disable') - MintRoom.MintRoom.exit(self) - if hasattr(self, 'suits'): del self.suits - - if (hasattr(self, 'relatedObjectMgrRequest') - and self.relatedObjectMgrRequest): + if hasattr(self, 'relatedObjectMgrRequest') and self.relatedObjectMgrRequest: self.cr.relatedObjectMgr.abortRequest(self.relatedObjectMgrRequest) del self.relatedObjectMgrRequest - bboard.remove(self.getReadyPostName()) - DistributedLevel.DistributedLevel.disable(self) def setSuits(self, suitIds, reserveSuitIds): - assert(self.notify.debug( - "setSuits suits: %s, reserves: %s" % (suitIds, reserveSuitIds))) oldSuitIds = list(self.suitIds) self.suitIds = suitIds self.reserveSuitIds = reserveSuitIds - - # this code was never used and was crashing when we fixed - # DistributedFactorySuit.announceGenerate to call down to - # its base class - """ - # which cogs are coming out of reserve? newSuitIds = [] for suitId in self.suitIds: if suitId not in oldSuitIds: newSuitIds.append(suitId) + if len(newSuitIds): + def bringOutOfReserve(suits): for suit in suits: suit.comeOutOfReserve() - assert not hasattr(self, 'relatedObjectMgrRequest') - self.relatedObjectMgrRequest = self.cr.relatedObjectMgr.requestObjects( - newSuitIds, bringOutOfReserve) - """ + + self.relatedObjectMgrRequest = self.cr.relatedObjectMgr.requestObjects(newSuitIds, bringOutOfReserve) def reservesJoining(self): - assert(self.notify.debug("reservesJoining")) - # play track reserves joining battle pass def getCogSpec(self, cogId): @@ -284,16 +220,12 @@ def getTaskZoneId(self): def getBossTaunt(self): return TTLocalizer.MintBossTaunt + def getBossBattleTaunt(self): return TTLocalizer.MintBossBattleTaunt def __str__(self): - if hasattr(self, 'roomId'): - return '%s %s: %s' % ( - self.__class__.__name__, - self.roomId, - MintRoomSpecs.CashbotMintRoomId2RoomName[self.roomId],) - else: - return 'DistributedMintRoom' + return '%s %s: %s' % (self.__class__.__name__, self.roomId, MintRoomSpecs.CashbotMintRoomId2RoomName[self.roomId]) + def __repr__(self): - return str(self) + return str(self) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedMoleField.py b/toontown/src/coghq/DistributedMoleField.py index c33158ef..554b5c7f 100644 --- a/toontown/src/coghq/DistributedMoleField.py +++ b/toontown/src/coghq/DistributedMoleField.py @@ -47,7 +47,7 @@ def __init__(self, cr): def disable(self): """Disable the mole field.""" self.cleanupTimer() - for ival in self.toonHitTracks.values(): + for ival in list(self.toonHitTracks.values()): ival.finish() self.toonHitTracks = {} DistributedNodePathEntity.disable(self) @@ -104,8 +104,8 @@ def loadModel(self): """Create the field and load the assets.""" moleIndex = 0 self.moleHills = [] - for indexY in xrange(self.numSquaresY): - for indexX in xrange(self.numSquaresX): + for indexY in range(self.numSquaresY): + for indexX in range(self.numSquaresX): xPos = indexX * self.spacingX yPos = indexY * self.spacingY newMoleHill = MoleHill.MoleHill(xPos, yPos, 0, self, moleIndex) @@ -422,7 +422,7 @@ def __showToonHitByBomb(self, avId, moleIndex, timestamp = 0): # put the toon under a new node assert (toon.getParent() == render) - parentNode = render.attachNewNode('mazeFlyToonParent-'+`avId`) + parentNode = render.attachNewNode('mazeFlyToonParent-'+repr(avId)) parentNode.setPos(toon.getPos(render)) toon.reparentTo(parentNode) toon.setPos(0,0,0) @@ -507,7 +507,7 @@ def camTask(task, zenith=zenith, camera.lookAt(toon) return Task.cont - camTaskName = "mazeToonFlyCam-"+`avId` + camTaskName = "mazeToonFlyCam-"+repr(avId) taskMgr.add(camTask, camTaskName, priority=20) def cleanupCamTask(self=self, toon=toon, diff --git a/toontown/src/coghq/DistributedMoleFieldAI.py b/toontown/src/coghq/DistributedMoleFieldAI.py index 9f641e68..c24dc041 100644 --- a/toontown/src/coghq/DistributedMoleFieldAI.py +++ b/toontown/src/coghq/DistributedMoleFieldAI.py @@ -80,7 +80,7 @@ def whackedMole(self, moleIndex, popupNum): """Handle the client whacking a mole.""" # TODO check with self.schedule if it really is a valid mole whack validMoleWhack = False - if self.whackedMoles.has_key(moleIndex): + if moleIndex in self.whackedMoles: if self.whackedMoles[moleIndex] < popupNum: validMoleWhack = True else: diff --git a/toontown/src/coghq/DistributedMover.py b/toontown/src/coghq/DistributedMover.py index 12ea7495..14acd23b 100644 --- a/toontown/src/coghq/DistributedMover.py +++ b/toontown/src/coghq/DistributedMover.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp import math diff --git a/toontown/src/coghq/DistributedSecurityCamera.py b/toontown/src/coghq/DistributedSecurityCamera.py index d480d6ad..f1bff8b9 100644 --- a/toontown/src/coghq/DistributedSecurityCamera.py +++ b/toontown/src/coghq/DistributedSecurityCamera.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp import math diff --git a/toontown/src/coghq/DistributedSinkingPlatform.py b/toontown/src/coghq/DistributedSinkingPlatform.py index b4294d60..6925c791 100644 --- a/toontown/src/coghq/DistributedSinkingPlatform.py +++ b/toontown/src/coghq/DistributedSinkingPlatform.py @@ -1,55 +1,35 @@ from pandac.PandaModules import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from otp.level import BasicEntities -import MovingPlatform +from . import MovingPlatform from direct.distributed import DistributedObject -import SinkingPlatformGlobals +from . import SinkingPlatformGlobals from direct.directnotify import DirectNotifyGlobal -# DistributedSinkingPlatform -# This entity is much like a regular PlatformEntity, except it sinks -# when stood on, and raises up to it's starting level when exited. -# It reacts to a toons enter/exit events on the floor collision polygon. -# Since it may not be the local toon that is making the platform sink, -# this must be a distributed class so the AI can tell all the clients -# when the platform has been entered or exited. - class DistributedSinkingPlatform(BasicEntities.DistributedNodePathEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedSinkingPlatform') def __init__(self, cr): - BasicEntities.DistributedNodePathEntity.__init__(self,cr) + BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.moveIval = None - + return + def generateInit(self): self.notify.debug('generateInit') BasicEntities.DistributedNodePathEntity.generateInit(self) - - self.fsm = ClassicFSM.ClassicFSM('DistributedSinkingPlatform', - [ - State.State('off', - self.enterOff, - self.exitOff, - ['sinking']), - State.State('sinking', - self.enterSinking, - self.exitSinking, - ['rising']), - State.State('rising', - self.enterRising, - self.exitRising, - ['sinking', 'off']), - ], - # Initial State - 'off', - # Final State - 'off', - ) + self.fsm = ClassicFSM.ClassicFSM('DistributedSinkingPlatform', [ + State.State('off', self.enterOff, self.exitOff, [ + 'sinking']), + State.State('sinking', self.enterSinking, self.exitSinking, [ + 'rising']), + State.State('rising', self.enterRising, self.exitRising, [ + 'sinking', 'off'])], 'off', 'off') self.fsm.enterInitialState() - + def generate(self): self.notify.debug('generate') BasicEntities.DistributedNodePathEntity.generate(self) @@ -57,20 +37,12 @@ def generate(self): def announceGenerate(self): self.notify.debug('announceGenerate') BasicEntities.DistributedNodePathEntity.announceGenerate(self) - - # at this point all the entity attributes have been initialized - # we can load the model now. self.loadModel() - - # listen to enter/exit events of the MovingPlatform, so we - # can send messages to the AI about the state of the platform self.accept(self.platform.getEnterEvent(), self.localToonEntered) self.accept(self.platform.getExitEvent(), self.localToonLeft) - def disable(self): self.notify.debug('disable') - # stop things self.ignoreAll() self.fsm.requestFinalState() BasicEntities.DistributedNodePathEntity.disable(self) @@ -81,42 +53,32 @@ def delete(self): if self.moveIval: self.moveIval.pause() del self.moveIval - self.platform.destroy() del self.platform - BasicEntities.DistributedNodePathEntity.delete(self) def loadModel(self): - self.notify.debug("loadModel") - model = loader.loadModel('phase_9/models/cogHQ/platform1') + self.notify.debug('loadModel') + model = loader.loadModelCopy('phase_9/models/cogHQ/platform1') self.platform = MovingPlatform.MovingPlatform() - self.platform.setupCopyModel(self.getParentToken(), model, - 'platformcollision') + self.platform.setupCopyModel(self.getParentToken(), model, 'platformcollision') self.platform.reparentTo(self) - self.platform.setPos(0,0,0) - + self.platform.setPos(0, 0, 0) + def localToonEntered(self): ts = globalClockDelta.localToNetworkTime(globalClock.getFrameTime(), bits=32) self.sendUpdate('setOnOff', [1, ts]) - # TODO: make this smoother for the local toon - # Since we are the local toon, this should happen immediately, so - # we don't see any jumps as a result of the server roundtrip - #self.fsm.request('sinking', [ts]) - + def localToonLeft(self): ts = globalClockDelta.localToNetworkTime(globalClock.getFrameTime(), bits=32) self.sendUpdate('setOnOff', [0, ts]) - # TODO: make this smoother for the local toon - #self.fsm.request('rising', [ts]) - - # ClassicFSM state enter/exit funcs + def enterOff(self): self.notify.debug('enterOff') + def exitOff(self): self.notify.debug('exitOff') - def enterSinking(self, ts=0): self.notify.debug('enterSinking') self.startMoving(SinkingPlatformGlobals.SINKING, ts) @@ -127,54 +89,38 @@ def exitSinking(self): self.moveIval.pause() del self.moveIval self.moveIval = None - + return + def enterRising(self, ts=0): self.notify.debug('enterRising') self.startMoving(SinkingPlatformGlobals.RISING, ts) - + def exitRising(self): self.notify.debug('exitRising') if self.moveIval: self.moveIval.pause() del self.moveIval self.moveIval = None + return - def setSinkMode(self, avId, mode, ts): - # AI tells us if the platform is sinking, rising, or off - # and at what time it started moving - self.notify.debug("setSinkMode %s" % mode) + self.notify.debug('setSinkMode %s' % mode) if mode == SinkingPlatformGlobals.OFF: - # this is a clear message sitting on wire self.fsm.requestInitialState() - # if it is the localToon that caused this sink/rise message - # to be passed to the AI, don't do anything (since - # the localToon reacts to the exit event without the server - # round trip) elif mode == SinkingPlatformGlobals.RISING: - #if avId != base.localAvatar.doId: self.fsm.request('rising', [ts]) - #else: - # print "ignoring server rise message" elif mode == SinkingPlatformGlobals.SINKING: - #if avId != base.localAvatar.doId: self.fsm.request('sinking', [ts]) - #else: - # print "ignoring server sink message" - + def startMoving(self, direction, ts): if direction == SinkingPlatformGlobals.RISING: - endPos = Vec3(0,0,0) + endPos = Vec3(0, 0, 0) pause = self.pauseBeforeRise duration = self.riseDuration else: - endPos = Vec3(0,0,-self.verticalRange) + endPos = Vec3(0, 0, -self.verticalRange) pause = None duration = self.sinkDuration - - # For non-local toons, we will have less time than "duration" to - # actually complete the interval, because of the server roundtrip. - # Calculate the actual time (ivalTime) we have to complete the interval. startT = globalClockDelta.networkToLocalTime(ts, bits=32) curT = globalClock.getFrameTime() ivalTime = curT - startT @@ -182,27 +128,13 @@ def startMoving(self, direction, ts): ivalTime = 0 elif ivalTime > duration: ivalTime = duration - duration = duration - ivalTime - duration = max(0., duration) - - #print "ivalTime = %s" % ivalTime - + duration = max(0.0, duration) + print('ivalTime = %s' % ivalTime) moveNode = self.platform self.moveIval = Sequence() if pause is not None: self.moveIval.append(WaitInterval(pause)) - self.moveIval.append( - LerpPosInterval(moveNode, duration, - endPos, startPos = moveNode.getPos(), - blendType='easeInOut', - name='%s-move' % self.platform.name, - fluid = 1), - ) - - #print "timeStamp = %s, ivalStartT = %s, startTime = %s, curT = %s, duration= %s" % ( - # timestamp, ivalStartT, startT, curT, duration) + self.moveIval.append(LerpPosInterval(moveNode, duration, endPos, startPos=moveNode.getPos(), blendType='easeInOut', name='%s-move' % self.platform.name, fluid=1)) self.moveIval.start() - - - + return \ No newline at end of file diff --git a/toontown/src/coghq/DistributedSinkingPlatformAI.py b/toontown/src/coghq/DistributedSinkingPlatformAI.py index 39af1acd..e122064b 100644 --- a/toontown/src/coghq/DistributedSinkingPlatformAI.py +++ b/toontown/src/coghq/DistributedSinkingPlatformAI.py @@ -2,7 +2,7 @@ from otp.ai.AIBase import * from direct.directnotify import DirectNotifyGlobal from otp.level import DistributedEntityAI -import SinkingPlatformGlobals +from . import SinkingPlatformGlobals class DistributedSinkingPlatformAI(DistributedEntityAI.DistributedEntityAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedSinkingPlatformAI") diff --git a/toontown/src/coghq/DistributedStage.py b/toontown/src/coghq/DistributedStage.py index 73d6ca92..96d414c6 100644 --- a/toontown/src/coghq/DistributedStage.py +++ b/toontown/src/coghq/DistributedStage.py @@ -157,8 +157,8 @@ def handleCameraRayFloorCollision(collEntry, self=self): % name) else: self.camEnterRoom(roomNum) - print collEntry - print + print(collEntry) + print() self.accept('on-floor', handleCameraRayFloorCollision) if bboard.has('stageRoom'): @@ -272,7 +272,7 @@ def setBossConfronted(self, avId): def warpToRoom(self, roomId): # returns False if invalid roomId # find a room with the right id - for i in xrange(len(self.rooms)): + for i in range(len(self.rooms)): room = self.rooms[i] if room.roomId == roomId: break diff --git a/toontown/src/coghq/DistributedStageBattleAI.py b/toontown/src/coghq/DistributedStageBattleAI.py index 544389e6..67da6901 100644 --- a/toontown/src/coghq/DistributedStageBattleAI.py +++ b/toontown/src/coghq/DistributedStageBattleAI.py @@ -4,7 +4,7 @@ from direct.fsm import State from direct.fsm import ClassicFSM, State from toontown.battle.BattleBase import * -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.toonbase.ToontownBattleGlobals import getStageCreditMultiplier from direct.showbase.PythonUtil import addListsByValue, enumerate diff --git a/toontown/src/coghq/DistributedStageRoom.py b/toontown/src/coghq/DistributedStageRoom.py index c9d3fc18..33f26c30 100644 --- a/toontown/src/coghq/DistributedStageRoom.py +++ b/toontown/src/coghq/DistributedStageRoom.py @@ -5,9 +5,9 @@ import random from otp.level import DistributedLevel from direct.directnotify import DirectNotifyGlobal -import StageRoomBase, StageRoom -import FactoryEntityCreator -import StageRoomSpecs +from . import StageRoomBase, StageRoom +from . import FactoryEntityCreator +from . import StageRoomSpecs from otp.level import LevelSpec, LevelConstants from toontown.toonbase import TTLocalizer if __dev__: @@ -192,8 +192,8 @@ def printPos(self=self): pos = base.localAvatar.getPos(thisZone) h = base.localAvatar.getH(thisZone) roomName = StageRoomSpecs.CashbotStageRoomId2RoomName[self.roomId] - print 'stage pos: %s, h: %s, room: %s' % ( - repr(pos), h, roomName) + print('stage pos: %s, h: %s, room: %s' % ( + repr(pos), h, roomName)) if self.stage is not None: floorNum = self.stage.floorNum else: diff --git a/toontown/src/coghq/DistributedStomper.py b/toontown/src/coghq/DistributedStomper.py index 0abbc439..f0043614 100644 --- a/toontown/src/coghq/DistributedStomper.py +++ b/toontown/src/coghq/DistributedStomper.py @@ -1,30 +1,22 @@ -"""Stomper module: contains the Stomper class""" - from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from StomperGlobals import * +from .StomperGlobals import * from direct.distributed import ClockDelta from direct.showbase.PythonUtil import lerp -import math -import DistributedCrusherEntity -import MovingPlatform +import math, DistributedCrusherEntity, MovingPlatform from direct.directnotify import DirectNotifyGlobal from direct.task import Task -from toontown.toonbase import ToontownGlobals class DistributedStomper(DistributedCrusherEntity.DistributedCrusherEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedStomper') + stomperSounds = [ + 'phase_9/audio/sfx/CHQ_FACT_stomper_small.mp3', 'phase_9/audio/sfx/CHQ_FACT_stomper_med.mp3', 'phase_9/audio/sfx/CHQ_FACT_stomper_large.mp3'] + stomperModels = [ + 'phase_9/models/cogHQ/square_stomper'] - stomperSounds = ['phase_4/audio/sfx/CHQ_FACT_stomper_small.mp3', - 'phase_9/audio/sfx/CHQ_FACT_stomper_med.mp3', - 'phase_9/audio/sfx/CHQ_FACT_stomper_large.mp3'] - - stomperModels = ['phase_9/models/cogHQ/square_stomper',] - - def __init__(self, cr): - self.stomperModels = ['phase_9/models/cogHQ/square_stomper',] - self.lastPos = Point3(0,0,0) + self.lastPos = Point3(0, 0, 0) self.model = None self.smokeTrack = None self.ival = None @@ -32,22 +24,17 @@ def __init__(self, cr): self.shadow = None self.sound = None self.crushSurface = None - self.cogStyle = 0 - self.loaded = 0 self.crushedList = [] self.sounds = [] self.wantSmoke = 1 self.wantShadow = 1 self.animateShadow = 1 - # if true, and we're pointing downward, we get rid of the floor - # collisions on the top of the stomper head so that it doesn't trap - # the camera above it. - self.removeHeadFloor = 0 - self.removeCamBarrierCollisions = 0 for s in self.stomperSounds: self.sounds.append(loader.loadSfx(s)) + DistributedCrusherEntity.DistributedCrusherEntity.__init__(self, cr) - + return + def generateInit(self): self.notify.debug('generateInit') DistributedCrusherEntity.DistributedCrusherEntity.generateInit(self) @@ -55,207 +42,126 @@ def generateInit(self): def generate(self): self.notify.debug('generate') DistributedCrusherEntity.DistributedCrusherEntity.generate(self) - + def announceGenerate(self): self.notify.debug('announceGenerate') DistributedCrusherEntity.DistributedCrusherEntity.announceGenerate(self) - # at this point all the entity attributes have been initialized - # we can load the model now. - self.loadModel() - # listen for stunned toons so we can disable the stomper collision surface - #self.accept("toonStunned-" + str(base.localAvatar.doId), self.stashCrushSurface) - def disable(self): self.notify.debug('disable') - # stop things self.ignoreAll() - if self.ival: self.ival.pause() del self.ival self.ival = None - if self.smokeTrack: self.smokeTrack.pause() del self.smokeTrack self.smokeTrack = None - DistributedCrusherEntity.DistributedCrusherEntity.disable(self) + return def delete(self): self.notify.debug('delete') - # unload things self.unloadModel() - taskMgr.remove(self.taskName("smokeTask")) + taskMgr.remove(self.taskName('smokeTask')) DistributedCrusherEntity.DistributedCrusherEntity.delete(self) def loadModel(self): - self.loaded = 1 - self.stomperModels = ['phase_9/models/cogHQ/square_stomper',] - if self.cogStyle == 1: - self.stomperModels = ['phase_11/models/lawbotHQ/LB_square_stomper',] - self.notify.debug("loadModel") + self.notify.debug('loadModel') shadow = None self.sound = self.sounds[self.soundPath] - # rotate the model to make it vertical or horizontal, and preserve - # the 'forward' direction of the model as +Y regardless of orientation self.rotateNode = self.attachNewNode('rotate') - stomperModel = loader.loadModel(self.stomperModels[self.modelPath]) - + stomperModel = loader.loadModelCopy(self.stomperModels[self.modelPath]) if self.style == 'vertical': - #self.setHpr(self.hpr[0],-90,self.hpr[2]) - # don't make a moving platform out of the vertical stomper, it seems - # to work fine as a regular model model = stomperModel - self.rotateNode.setP(-90) - - # stash the up/side collisions - sideList = model.findAllMatches("**/collSide") + sideList = model.findAllMatches('**/collSide').asList() for side in sideList: side.stash() - upList = model.findAllMatches("**/collUp") + + upList = model.findAllMatches('**/collUp').asList() for up in upList: up.stash() - # store the crushSurface so we can stash it when the toon is stunned - head = model.find("**/head") - shaft = model.find("**/shaft") - self.crushSurface = head.find("**/collDownWalls") - - # stash the crush surface on vertical stompers so the stomper collision - # surface doesn't push the toon sideways before he is squished. We should - # probably only do this right before the toon is crushed, since now we have - # a problem of the toon jumping through the bottom of the stomper - #self.stashCrushSurface(1) - - # add shadow + head = model.find('**/head') + shaft = model.find('**/shaft') + self.crushSurface = head.find('**/collDownWalls') self.shadow = None if self.wantShadow: - shadow = loader.loadModel("phase_3/models/props/square_drop_shadow").getChild(0) + shadow = loader.loadModelCopy('phase_3/models/props/square_drop_shadow').getChild(0) shadow.setScale(0.3 * self.headScale[0], 0.3 * self.headScale[2], 1) - shadow.setAlphaScale(.8) + shadow.setAlphaScale(0.8) shadow.flattenMedium() shadow.reparentTo(self) - shadow.setPos(0,0,.025) - #shadow.setP(90) + shadow.setPos(0, 0, 0.025) shadow.setTransparency(1) self.shadow = shadow + floorHead = model.find('**/head_collisions/**/collDownFloor').node() + for i in range(floorHead.getNumSolids()): + floorHead.getSolid(i).setEffectiveNormal(Vec3(0.0, -1.0, 0.0)) - # we have to explicitly set the normals of the floor polys now - # since we rotated the thing and the definition of "up" has changed - floorHeadNp = model.find("**/head_collisions/**/collDownFloor") - floorHead = floorHeadNp.node() - if self.removeHeadFloor: - floorHeadNp.stash() - else: - for i in range(floorHead.getNumSolids()): - floorHead.modifySolid(i).setEffectiveNormal(Vec3(0.0,-1.0,0.0)) - - floorShaft = model.find("**/shaft_collisions/**/collDownFloor").node() + floorShaft = model.find('**/shaft_collisions/**/collDownFloor').node() for i in range(floorShaft.getNumSolids()): - floorShaft.modifySolid(i).setEffectiveNormal(Vec3(0.0,-1.0,0.0)) - - # listen for our own stomperClosed event. we only need to - # do this for vertical stompers, since the floor is the other - # "stomping" surface. horizontal stompers actually need a stomperPair - # object to listen for this event. - self.accept(self.crushMsg, self.checkSquashedToon) + floorShaft.getSolid(i).setEffectiveNormal(Vec3(0.0, -1.0, 0.0)) + self.accept(self.crushMsg, self.checkSquashedToon) elif self.style == 'horizontal': - #self.setHpr(self.hpr[0],0,self.hpr[2]) - # create a moving platform out of the floor surfaces model = MovingPlatform.MovingPlatform() - model.setupCopyModel(self.getParentToken(), stomperModel, - 'collSideFloor') - - #model.setR(90) - # move the model up and make the new origin be at the bottom of - # the stomper head + model.setupCopyModel(self.getParentToken(), stomperModel, 'collSideFloor') head = model.find('**/head') head.node().setPreserveTransform(0) - head.setZ(1.) - # allow flatten to modify the transforms of our child ModelNodes - # to compensate for flattening their parents' transforms - for child in head.findAllMatches('+ModelNode'): + head.setZ(1.0) + for child in head.findAllMatches('+ModelNode').asList(): child.node().setPreserveTransform(ModelNode.PTNet) + model.flattenLight() - - # stash the up/down collisions - upList = model.findAllMatches("**/collUp") + upList = model.findAllMatches('**/collUp').asList() for up in upList: up.stash() - downList = model.findAllMatches("**/collDown") + + downList = model.findAllMatches('**/collDown').asList() for down in downList: down.stash() - - # store the crushSurface so we can stash it when the toon is stunned - # SDN: maybe we don't want to do this for horizontal stompers - self.crushSurface = model.find("**/head_collisions/**/collSideWalls") - - # should we get rid of the camera bit on the barrier collisions? - if self.removeCamBarrierCollisions: - walls = model.findAllMatches("**/collDownWalls") - for wall in walls: - node = wall.node() - bitmask = node.getIntoCollideMask() - invBitmask = BitMask32(ToontownGlobals.CameraBitmask) - invBitmask.invertInPlace() - bitmask &= invBitmask - node.setIntoCollideMask(bitmask) - - # scale the shaft and head - shaft = model.find("**/shaft") + + self.crushSurface = model.find('**/head_collisions/**/collSideWalls') + shaft = model.find('**/shaft') shaft.setScale(self.shaftScale) head.setScale(self.headScale) - - # now that the dimensions are set, we need to get rid of the - # DCS flag on the shaft so we can flatten the model - model.find("**/shaft").node().setPreserveTransform(0) + model.find('**/shaft').node().setPreserveTransform(0) model.flattenLight() self.model = model - - # If the stomper is a switch controlled stomper, put it in it's - # up state by default if self.motion == MotionSwitched: - self.model.setPos(0,-self.range, 0) - + self.model.setPos(0, -self.range, 0) self.model.reparentTo(self.rotateNode) - if self.wantSmoke: - self.smoke = loader.loadModel( - "phase_4/models/props/test_clouds") - self.smoke.setColor(.8,.7,.5,1) + self.smoke = loader.loadModelCopy('phase_8/models/props/test_clouds') + self.smoke.setColor(0.8, 0.7, 0.5, 1) self.smoke.setBillboardPointEye() + return def stashCrushSurface(self, isStunned): - self.notify.debug("stashCrushSurface(%s)" % isStunned) - # stash the crush surface when the toon is stunned, so he - # doesn't get pushed around by the stomper + self.notify.debug('stashCrushSurface(%s)' % isStunned) if self.crushSurface and not self.crushSurface.isEmpty(): if isStunned: self.crushSurface.stash() else: self.crushSurface.unstash() - + def unloadModel(self): if self.ival: self.ival.pause() del self.ival self.ival = None - if self.smoke: self.smoke.removeNode() del self.smoke self.smoke = None - if self.shadow: self.shadow.removeNode() del self.shadow self.shadow = None - if self.model: if isinstance(self.model, MovingPlatform.MovingPlatform): self.model.destroy() @@ -263,15 +169,13 @@ def unloadModel(self): self.model.removeNode() del self.model self.model = None + return def sendStompToon(self): messenger.send(self.crushMsg) def doCrush(self): - # This function should be called when the stomper is registerd as a crusher - # with a crushCell. - self.notify.debug("doCrush, crushedList = %s" % self.crushedList) - # check crushCell's contents + self.notify.debug('doCrush, crushedList = %s' % self.crushedList) for crushableId in self.crushedList: crushable = self.level.entities.get(crushableId) if crushable: @@ -279,194 +183,106 @@ def doCrush(self): axis = 2 else: axis = 0 - # crush the occupant of the crusherCell - # along the given axis crushable.playCrushMovie(self.entId, axis) + self.crushedList = [] - - def getMotionIval(self, mode = STOMPER_START): - if self.range == 0.: - return (None, 0) - # we have to return wantSound, because of the one case - # of a switched stomper, where the motion ival might be a rising motion + + def getMotionIval(self, mode=STOMPER_START): + if self.range == 0.0: + return ( + None, 0) wantSound = self.soundOn - - # stomper should hit at t=0 if self.motion is MotionLinear: - motionIval = Sequence( - LerpPosInterval(self.model, self.period/2., - Point3(0,-self.range,0), - startPos=Point3(0,0,0), - fluid = 1), - WaitInterval(self.period/4.), - LerpPosInterval(self.model, self.period/4., - Point3(0,0,0), - startPos=Point3(0,-self.range,0), - fluid = 1), - ) + motionIval = Sequence(LerpPosInterval(self.model, self.period / 2.0, Point3(0, -self.range, 0), startPos=Point3(0, 0, 0), fluid=1), WaitInterval(self.period / 4.0), LerpPosInterval(self.model, self.period / 4.0, Point3(0, 0, 0), startPos=Point3(0, -self.range, 0), fluid=1)) elif self.motion is MotionSinus: + def sinusFunc(t, self=self): - # t: 0..1 - # cos(pi) == -1 (hit/down) - # theta: pi..3*pi - theta = math.pi + (t * 2.*math.pi) - # c: -1..1 + theta = math.pi + t * 2.0 * math.pi c = math.cos(theta) - # y: 0..-self.range - self.model.setFluidY((.5 + (c*.5)) * -self.range) - motionIval = Sequence( - LerpFunctionInterval(sinusFunc, duration=self.period), - ) + self.model.setFluidY((0.5 + c * 0.5) * -self.range) + + motionIval = Sequence(LerpFunctionInterval(sinusFunc, duration=self.period)) elif self.motion is MotionSlowFast: + def motionFunc(t, self=self): - # t: 0..1 - stickTime = .2 - turnaround = .95 + stickTime = 0.2 + turnaround = 0.95 t = t % 1 if t < stickTime: self.model.setFluidY(0) elif t < turnaround: - # t: 0..turnaround - self.model.setFluidY((t-stickTime) * -self.range/(turnaround-stickTime)) + self.model.setFluidY((t - stickTime) * -self.range / (turnaround - stickTime)) elif t > turnaround: - # t: turnaround..1 - self.model.setFluidY(-self.range + (t-turnaround) * self.range/(1-turnaround)) - motionIval = Sequence( - LerpFunctionInterval(motionFunc, duration=self.period), - ) + self.model.setFluidY(-self.range + (t - turnaround) * self.range / (1 - turnaround)) + + motionIval = Sequence(LerpFunctionInterval(motionFunc, duration=self.period)) elif self.motion is MotionCrush: + def motionFunc(t, self=self): - # t: 0..1 - stickTime = .2 - pauseAtTopTime = .5 - turnaround = .85 + stickTime = 0.2 + pauseAtTopTime = 0.5 + turnaround = 0.85 t = t % 1 if t < stickTime: self.model.setFluidY(0) elif t <= turnaround - pauseAtTopTime: - # t: 0 ..(turnaround-pauseAtTop) - self.model.setFluidY((t-stickTime) * -self.range/(turnaround- pauseAtTopTime - stickTime)) - elif t > (turnaround - pauseAtTopTime) and t <= turnaround: - # t: (turnaround-pauseAtTop).. turnaround + self.model.setFluidY((t - stickTime) * -self.range / (turnaround - pauseAtTopTime - stickTime)) + elif t > turnaround - pauseAtTopTime and t <= turnaround: self.model.setFluidY(-self.range) elif t > turnaround: - # t: turnaround..1 - self.model.setFluidY(-self.range + (t-turnaround) * self.range/(1-turnaround)) - - tStick = .2 * self.period - tUp = .45 * self.period - tPause = .2 * self.period - tDown = .15 * self.period - motionIval = Sequence( - Wait(tStick), - LerpPosInterval(self.model, tUp, - Vec3(0, -self.range, 0), - blendType = 'easeInOut', - fluid=1), - Wait(tPause), - Func(self.doCrush), - LerpPosInterval(self.model, tDown, - Vec3(0, 0, 0), - blendType = 'easeInOut', - fluid=1), - ) + self.model.setFluidY(-self.range + (t - turnaround) * self.range / (1 - turnaround)) + + tStick = 0.2 * self.period + tUp = 0.45 * self.period + tPause = 0.2 * self.period + tDown = 0.15 * self.period + motionIval = Sequence(Wait(tStick), LerpPosInterval(self.model, tUp, Vec3(0, -self.range, 0), blendType='easeInOut', fluid=1), Wait(tPause), Func(self.doCrush), LerpPosInterval(self.model, tDown, Vec3(0, 0, 0), blendType='easeInOut', fluid=1)) elif self.motion is MotionSwitched: if mode == STOMPER_STOMP: - # create a track that forces the stomper to stomp - # from the current position - motionIval = Sequence( - Func(self.doCrush), - LerpPosInterval(self.model, .35, - Vec3(0, 0, 0), - blendType = 'easeInOut', - fluid=1), - ) + motionIval = Sequence(Func(self.doCrush), LerpPosInterval(self.model, 0.35, Vec3(0, 0, 0), blendType='easeInOut', fluid=1)) elif mode == STOMPER_RISE: - # create a track that forces the stomper to rise - # from the current position - motionIval = Sequence( - LerpPosInterval(self.model, .5, - Vec3(0, -self.range, 0), - blendType = 'easeInOut', - fluid=1), - ) + motionIval = Sequence(LerpPosInterval(self.model, 0.5, Vec3(0, -self.range, 0), blendType='easeInOut', fluid=1)) wantSound = 0 else: - # This should only happen when we are editing the stomper - # in the factory editor. Otherwise there should not be a - # time when self.motion == MotionSwitched and mode != (STOMPER_RISE|STOMP) motionIval = None else: + def halfSinusFunc(t, self=self): - # t: 0..1 self.model.setFluidY(math.sin(t * math.pi) * -self.range) - motionIval = Sequence( - LerpFunctionInterval(halfSinusFunc, duration=self.period), - ) - return (motionIval,wantSound) - - def startStomper(self, startTime, mode = STOMPER_START): + + motionIval = Sequence(LerpFunctionInterval(halfSinusFunc, duration=self.period)) + return ( + motionIval, wantSound) + return + + def startStomper(self, startTime, mode=STOMPER_START): if self.ival: self.ival.pause() del self.ival self.ival = None - - # Get the motion track for this stomper - motionIval,wantSound = self.getMotionIval(mode) - + (motionIval, wantSound) = self.getMotionIval(mode) if motionIval == None: - # this should only happen in editor mode or if range is zero return - - # put the motion interval into a Parallel so that we can easily add - # concurrent ivals on (like sound, etc) - self.ival = Parallel( - Sequence(motionIval, - Func(self.__startSmokeTask), - Func(self.sendStompToon)), - name=self.uniqueName('Stomper'), - ) - - # 'stomp' sound + self.ival = Parallel(Sequence(motionIval, Func(self.__startSmokeTask), Func(self.sendStompToon)), name=self.uniqueName('Stomper')) if wantSound: - # make sure we don't play a sound that's too long; cap the - # sound length to the motion period - #if self.soundLen == 0.: - # sndDur = motionIval.getDuration() - #else: - # sndDur = min(self.soundLen, motionIval.getDuration()) - #self.ival.append( - # SoundInterval(self.sound, duration=sndDur, node=self.model)) sndDur = motionIval.getDuration() - self.ival.append( - Sequence(Wait(sndDur), - Func(base.playSfx, self.sound, node=self.model, volume=.45))) - - # shadow + self.ival.append(Sequence(Wait(sndDur), Func(base.playSfx, self.sound, node=self.model, volume=0.45))) if self.shadow is not None and self.animateShadow: + def adjustShadowScale(t, self=self): - # scale the shadow according to the position of the - # stomper modelY = self.model.getY() - # a=0..1, 0=down, 1=up - # cap the height, so the shadow disappears for all stompers - # at the same height maxHeight = 10 - a = min(-modelY/maxHeight,1.0) - self.shadow.setScale(lerp(1, .2, a)) - self.shadow.setAlphaScale(lerp(1,.2, a)) - self.ival.append( - LerpFunctionInterval(adjustShadowScale, duration=self.period)) + a = min(-modelY / maxHeight, 1.0) + self.shadow.setScale(lerp(1, 0.2, a)) + self.shadow.setAlphaScale(lerp(1, 0.2, a)) + self.ival.append(LerpFunctionInterval(adjustShadowScale, duration=self.period)) if mode == STOMPER_START: self.ival.loop() - self.ival.setT((globalClock.getFrameTime() - self.level.startTime) + - (self.period * self.phaseShift)) + self.ival.setT(globalClock.getFrameTime() - self.level.startTime + self.period * self.phaseShift) else: - # we got this message from the AI, so the startTime is - # the elapsed time since the AI generated the stomp message self.ival.start(startTime) - + return def stopStomper(self): if self.ival: @@ -475,70 +291,45 @@ def stopStomper(self): self.smokeTrack.finish() del self.smokeTrack self.smokeTrack = None - + return + def setMovie(self, mode, timestamp, crushedList): - self.notify.debug("setMovie %d" % mode) + self.notify.debug('setMovie %d' % mode) timestamp = ClockDelta.globalClockDelta.networkToLocalTime(timestamp) now = globalClock.getFrameTime() - - if (mode == STOMPER_START or - mode == STOMPER_RISE or - mode == STOMPER_STOMP): - # the AI is telling the stomper how to move. - # STOMPER_START will start a repeating motion - # STOMPER_RISE/STOMP will force the stomper to rise/stomp - # from it's current position + if mode == STOMPER_START or mode == STOMPER_RISE or mode == STOMPER_STOMP: self.crushedList = crushedList self.startStomper(timestamp, mode) def __startSmokeTask(self): - taskMgr.remove(self.taskName("smokeTask")) + taskMgr.remove(self.taskName('smokeTask')) if self.wantSmoke: - taskMgr.add(self.__smokeTask, self.taskName("smokeTask")) - + taskMgr.add(self.__smokeTask, self.taskName('smokeTask')) + def __smokeTask(self, task): - # smoke cloud after the cannon fires self.smoke.reparentTo(self) self.smoke.setScale(1) - # reparent to render, so the smoke doesn't get darker in the nighttime - #self.smoke.wrtReparentTo(render) if self.smokeTrack: self.smokeTrack.finish() del self.smokeTrack - - self.smokeTrack = Sequence(Parallel(LerpScaleInterval(self.smoke, .2, Point3(4,1,4)), - LerpColorScaleInterval(self.smoke, 1, Vec4(1,1,1,0))), - Func(self.smoke.reparentTo, hidden), - Func(self.smoke.clearColorScale), - ) + self.smokeTrack = Sequence(Parallel(LerpScaleInterval(self.smoke, 0.2, Point3(4, 1, 4)), LerpColorScaleInterval(self.smoke, 1, Vec4(1, 1, 1, 0))), Func(self.smoke.reparentTo, hidden), Func(self.smoke.clearColorScale)) self.smokeTrack.start() return Task.done def checkSquashedToon(self): if self.style == 'vertical': - # if toon is within a head size of the center of this thing, - # he is squashed tPos = base.localAvatar.getPos(self.rotateNode) - # Note: the current model has a head that is 2x2 by default. zRange = self.headScale[2] xRange = self.headScale[0] yRange = 5 - if (tPos[2] < zRange and tPos[2] > -zRange and - tPos[0] < xRange and tPos[0] > -xRange and - tPos[1] < yRange/10. and tPos[1] > -yRange): - #print "(%s) Squashed!! %s" % (self.entId, tPos) + if tPos[2] < zRange and tPos[2] > -zRange and tPos[0] < xRange and tPos[0] > -xRange and tPos[1] < yRange / 10.0 and tPos[1] > -yRange: self.level.b_setOuch(self.damage, 'Squish') - base.localAvatar.setZ(self.getZ(render)+.025) - else: - #print "(%s) toon is far enough away: %s" % (self.entId, tPos) - pass + base.localAvatar.setZ(self.getZ(render) + 0.025) - ## Setters - ## This could be optimized so the whole model doesn't unload and reload - ## for every changed attribute if __dev__: + def attribChanged(self, *args): self.stopStomper() self.unloadModel() self.loadModel() - self.startStomper(0) + self.startStomper(0) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedStomperAI.py b/toontown/src/coghq/DistributedStomperAI.py index 52061bca..775fa231 100644 --- a/toontown/src/coghq/DistributedStomperAI.py +++ b/toontown/src/coghq/DistributedStomperAI.py @@ -1,8 +1,8 @@ from otp.ai.AIBase import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal -import DistributedCrusherEntityAI -import StomperGlobals +from . import DistributedCrusherEntityAI +from . import StomperGlobals from direct.distributed import ClockDelta class DistributedStomperAI(DistributedCrusherEntityAI.DistributedCrusherEntityAI): diff --git a/toontown/src/coghq/DistributedStomperPair.py b/toontown/src/coghq/DistributedStomperPair.py index 1d64acf1..10c5e288 100644 --- a/toontown/src/coghq/DistributedStomperPair.py +++ b/toontown/src/coghq/DistributedStomperPair.py @@ -1,21 +1,22 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import math -import StomperGlobals +import math, StomperGlobals from direct.directnotify import DirectNotifyGlobal from otp.level import BasicEntities class DistributedStomperPair(BasicEntities.DistributedNodePathEntity): + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('DistributedStomperPair') def __init__(self, cr): BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.children = None + return def delete(self): BasicEntities.DistributedNodePathEntity.delete(self) self.ignoreAll() - + def generateInit(self): self.notify.debug('generateInit') BasicEntities.DistributedNodePathEntity.generateInit(self) @@ -28,25 +29,16 @@ def announceGenerate(self): self.notify.debug('announceGenerate') BasicEntities.DistributedNodePathEntity.announceGenerate(self) self.listenForChildren() - + def listenForChildren(self): if self.stomperIds: for entId in self.stomperIds: - self.accept(self.getUniqueName('crushMsg', entId), - self.checkSquashedToon) + self.accept(self.getUniqueName('crushMsg', entId), self.checkSquashedToon) def checkSquashedToon(self): - # if toon is within a half foot of the center of this thing, - # he is squashed tPos = base.localAvatar.getPos(self) - print ("tpos = %s" % tPos) - + print('tpos = %s' % tPos) yRange = 3.0 xRange = 3.0 - if (tPos[1] < yRange and tPos[1] > -yRange and - tPos[0] < xRange and tPos[0] > -xRange): - #print "Squashed!!" - self.level.b_setOuch(3) - else: - #print "toon is far enough away: %s" % tPos - pass + if tPos[1] < yRange and tPos[1] > -yRange and tPos[0] < xRange and tPos[0] > -xRange: + self.level.b_setOuch(3) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedStomperPairAI.py b/toontown/src/coghq/DistributedStomperPairAI.py index 26764199..360576cf 100644 --- a/toontown/src/coghq/DistributedStomperPairAI.py +++ b/toontown/src/coghq/DistributedStomperPairAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * from direct.directnotify import DirectNotifyGlobal from otp.level import DistributedEntityAI -import StomperGlobals +from . import StomperGlobals from direct.distributed import ClockDelta class DistributedStomperPairAI(DistributedEntityAI.DistributedEntityAI): diff --git a/toontown/src/coghq/DistributedSwitch.py b/toontown/src/coghq/DistributedSwitch.py index d5138367..9c7b54ed 100644 --- a/toontown/src/coghq/DistributedSwitch.py +++ b/toontown/src/coghq/DistributedSwitch.py @@ -1,227 +1,136 @@ -""" DistributedSwitch module: contains the DistributedSwitch - class, the client side representation of a DistributedSwitchAI.""" - -from pandac.PandaModules import * from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - from otp.level import BasicEntities -import DistributedSwitchBase -import MovingPlatform +from . import DistributedSwitchBase, MovingPlatform from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from otp.level import DistributedEntity -#import TTLocalizer - -class DistributedSwitch( - DistributedSwitchBase.DistributedSwitchBase, - BasicEntities.DistributedNodePathEntity): - """ - DistributedSwitch class: The client side - representation of a Cog HQ switch. - - See Also: DistributedSwitchAI - """ - if __debug__: - notify = DirectNotifyGlobal.directNotify.newCategory( - 'DistributedSwitch') + +class DistributedSwitch(DistributedSwitchBase.DistributedSwitchBase, BasicEntities.DistributedNodePathEntity): + __module__ = __name__ def __init__(self, cr): - """ - constructor for the DistributedSwitch - """ - assert(self.debugPrint("DistributedSwitch()")) BasicEntities.DistributedNodePathEntity.__init__(self, cr) - #assert self.this - - self.fsm = ClassicFSM.ClassicFSM('DistributedSwitch', - [State.State('off', - self.enterOff, - self.exitOff, - ['playing', - 'attract']), - State.State('attract', - self.enterAttract, - self.exitAttract, - ['playing']), - State.State('playing', - self.enterPlaying, - self.exitPlaying, - ['attract'])], - # Initial State - 'off', - # Final State - 'off', - ) + self.fsm = ClassicFSM.ClassicFSM('DistributedSwitch', [ + State.State('off', self.enterOff, self.exitOff, [ + 'playing', 'attract']), + State.State('attract', self.enterAttract, self.exitAttract, [ + 'playing']), + State.State('playing', self.enterPlaying, self.exitPlaying, [ + 'attract'])], 'off', 'off') self.fsm.enterInitialState() - self.node = None self.triggerName = '' - # self.generate will be called automatically. + return def setup(self): self.setupSwitch() self.setState(self.initialState, self.initialStateTimestamp) del self.initialState del self.initialStateTimestamp - self.accept("exit%s"%(self.getName(),), self.exitTrigger) + self.accept('exit%s' % (self.getName(),), self.exitTrigger) self.acceptAvatar() - + def takedown(self): pass - # These stubbed out functions are not used on the client (AI Only): setIsOnEvent = DistributedSwitchBase.stubFunction setIsOn = DistributedSwitchBase.stubFunction setSecondsOn = DistributedSwitchBase.stubFunction def generate(self): - """ - This method is called when the DistributedSwitch is reintroduced - to the world, either for the first time or from the cache. - """ - assert(self.debugPrint("generate()")) BasicEntities.DistributedNodePathEntity.generate(self) self.track = None - + return + def announceGenerate(self): - assert(self.debugPrint("announceGenerate()")) BasicEntities.DistributedNodePathEntity.announceGenerate(self) - assert self.this self.setup() - + def disable(self): - assert(self.debugPrint("disable()")) - #self.ignore("exit%s"%(self.getName(),)) - #self.ignore("enter%s"%(self.getName(),)) self.ignoreAll() - # Go to the off state when the object is put in the cache - self.fsm.request("off") + self.fsm.request('off') BasicEntities.DistributedNodePathEntity.disable(self) - assert(self.track is None) self.takedown() - #? BasicEntities.DistributedNodePathEntity.destroy(self) - # self.delete() will automatically be called. def delete(self): - assert(self.debugPrint("delete()")) del self.fsm BasicEntities.DistributedNodePathEntity.delete(self) - + def acceptAvatar(self): - self.acceptOnce("enter%s"%(self.getName(),), self.enterTrigger) - + self.acceptOnce('enter%s' % (self.getName(),), self.enterTrigger) + def rejectInteract(self): self.acceptAvatar() def avatarExit(self, avatarId): self.acceptAvatar() - - #def setIsOn(self, isOn): - # assert(self.debugPrint("setIsOn(isOn=%s)"%(isOn,))) - # self.isOn=isOn - # messenger.send(self.getName(), [isOn]) - # - #def getIsOn(self): - # assert(self.debugPrint("setIsOn() returning %s"%(self.isOn,))) - # return self.isOn - + def getName(self): - return "switch-%s"%(self.entId,) - + return 'switch-%s' % (self.entId,) + def setupSwitch(self): - """ - Load and position the model. - """ pass - + def switchOnTrack(self): - """ - Animate the switch turning on. - returns a Sequence or None. - """ pass - + def switchOffTrack(self): - """ - Animate the switch turning off. - returns a Sequence or None. - """ pass def setAvatarInteract(self, avatarId): - """ - required dc field. - """ - assert(self.debugPrint("setAvatarInteract(%s)"%(avatarId,))) - assert(not self.__dict__.has_key(avatarId)) - self.avatarId=avatarId + self.avatarId = avatarId def setState(self, state, timestamp): - """ - required dc field. - """ - assert(self.debugPrint("setState(%s, %d)" % (state, timestamp))) if self.isGenerated(): self.fsm.request(state, [globalClockDelta.localElapsedTime(timestamp)]) else: self.initialState = state self.initialStateTimestamp = timestamp - + def enterTrigger(self, args=None): - assert(self.debugPrint("enterTrigger(args="+str(args)+")")) - self.sendUpdate("requestInteract") - # the AI server will reply with avatarInteract or rejectInteract. - + self.sendUpdate('requestInteract') + def exitTrigger(self, args=None): - assert(self.debugPrint("exitTrigger(args="+str(args)+")")) - self.sendUpdate("requestExit") - # the AI server will reply with avatarExit. + self.sendUpdate('requestExit') - ##### off state ##### - def enterOff(self): - #assert(self.debugPrint("enterOff()")) pass - + def exitOff(self): - #assert(self.debugPrint("exitOff()")) pass - ##### attract state ##### - def enterAttract(self, ts): - assert(self.debugPrint("enterAttract()")) - track=self.switchOffTrack() + track = self.switchOffTrack() if track is not None: track.start(ts) self.track = track - + return + def exitAttract(self): - assert(self.debugPrint("exitAttract()")) if self.track: self.track.finish() self.track = None - - ##### playing state ##### - + return + def enterPlaying(self, ts): - assert(self.debugPrint("enterPlaying()")) - # Start animation at time stamp: - track=self.switchOnTrack() + track = self.switchOnTrack() if track is not None: track.start(ts) self.track = track - + return + def exitPlaying(self): - assert(self.debugPrint("exitPlaying()")) if self.track: self.track.finish() self.track = None + return if __dev__: + def attribChanged(self, attrib, value): self.takedown() - self.setup() + self.setup() \ No newline at end of file diff --git a/toontown/src/coghq/DistributedSwitchAI.py b/toontown/src/coghq/DistributedSwitchAI.py index 2b45987e..f0f74f3e 100644 --- a/toontown/src/coghq/DistributedSwitchAI.py +++ b/toontown/src/coghq/DistributedSwitchAI.py @@ -2,7 +2,7 @@ from direct.distributed.ClockDelta import * from direct.directnotify import DirectNotifyGlobal -import DistributedSwitchBase +from . import DistributedSwitchBase from direct.task import Task from direct.fsm import ClassicFSM, State from direct.fsm import State diff --git a/toontown/src/coghq/DistributedSwitchBase.py b/toontown/src/coghq/DistributedSwitchBase.py index 2492b52d..14a00d05 100644 --- a/toontown/src/coghq/DistributedSwitchBase.py +++ b/toontown/src/coghq/DistributedSwitchBase.py @@ -1,16 +1,8 @@ - def stubFunction(*args): - """ - This function is a stub out function for callbacks. - It intenionally ignores all of its parameters and - does nothing. - """ pass class DistributedSwitchBase: - #stateNames = ['off', 'switchingOff', 'off', 'switchingOn', 'on'] - #stateDurations = [ None, 4.0, None, 4.0, None] - pass + __module__ = __name__ \ No newline at end of file diff --git a/toontown/src/coghq/DistributedTrigger.py b/toontown/src/coghq/DistributedTrigger.py index 452c8433..6207e61c 100644 --- a/toontown/src/coghq/DistributedTrigger.py +++ b/toontown/src/coghq/DistributedTrigger.py @@ -1,27 +1,19 @@ -""" DistributedCogHqTrigger module: contains the DistributedCogHqTrigger - class, the client side representation of a DistributedCogHqTriggerAI.""" - -from pandac.PandaModules import * from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * - -import MovingPlatform +from . import MovingPlatform from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM -import DistributedSwitch +from . import DistributedSwitch +from direct.distributed import DelayDelete from toontown.toonbase import TTLocalizer class DistributedTrigger(DistributedSwitch.DistributedSwitch): - """ - DistributedTrigger class: The client side - representation of a Cog HQ trigger. - """ - + __module__ = __name__ + def setupSwitch(self): - assert(self.debugPrint("setupSwitch()")) - #DistributedSwitch.DistributedSwitch.setupSwitch(self) radius = 1.0 cSphere = CollisionSphere(0.0, 0.0, 0.0, radius) cSphere.setTangible(0) @@ -29,29 +21,23 @@ def setupSwitch(self): cSphereNode.addSolid(cSphere) self.cSphereNodePath = self.attachNewNode(cSphereNode) cSphereNode.setCollideMask(ToontownGlobals.WallBitmask) - #self.cSphereNodePath.show() - self.flattenMedium() def delete(self): - assert(self.debugPrint("delete()")) self.cSphereNodePath.removeNode() del self.cSphereNodePath DistributedSwitch.DistributedSwitch.delete(self) - + def enterTrigger(self, args=None): - assert(self.debugPrint("enterTrigger(args="+str(args)+")")) DistributedSwitch.DistributedSwitch.enterTrigger(self, args) self.setIsOn(1) - + def exitTrigger(self, args=None): - assert(self.debugPrint("exitTrigger(args="+str(args)+")")) DistributedSwitch.DistributedSwitch.exitTrigger(self, args) self.setIsOn(0) def getName(self): - # send a specially named event, instead of default if self.triggerName != '': return self.triggerName else: - return DistributedSwitch.DistributedSwitch.getName(self) + return DistributedSwitch.DistributedSwitch.getName(self) \ No newline at end of file diff --git a/toontown/src/coghq/DistributedTriggerAI.py b/toontown/src/coghq/DistributedTriggerAI.py index 374f8cd5..c3135b42 100644 --- a/toontown/src/coghq/DistributedTriggerAI.py +++ b/toontown/src/coghq/DistributedTriggerAI.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.task import Task -import DistributedSwitchAI +from . import DistributedSwitchAI class DistributedTriggerAI(DistributedSwitchAI.DistributedSwitchAI): diff --git a/toontown/src/coghq/FactoryBase.py b/toontown/src/coghq/FactoryBase.py index 92e0b82e..faf0df47 100644 --- a/toontown/src/coghq/FactoryBase.py +++ b/toontown/src/coghq/FactoryBase.py @@ -1,16 +1,14 @@ -"""FactoryBase module: contains the FactoryBase class""" - -import FactorySpecs +from . import FactorySpecs from otp.level import LevelSpec from toontown.toonbase import ToontownGlobals class FactoryBase: - """ common functionality shared by DistributedFactory/AI """ + __module__ = __name__ + def __init__(self): pass def setFactoryId(self, factoryId): - """call this w/ factoryId as soon as you have it""" self.factoryId = factoryId self.factoryType = ToontownGlobals.factoryId2factoryType[factoryId] self.cogTrack = ToontownGlobals.cogHQZoneId2dept(factoryId) @@ -22,10 +20,9 @@ def getFactoryType(self): return self.factoryType if __dev__: - def getEntityTypeReg(self): - # return an EntityTypeRegistry with information about the - # entity types that factories use - import FactoryEntityTypes + + def getFactoryEntityTypeReg(self): + from . import FactoryEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(FactoryEntityTypes) - return typeReg + return typeReg \ No newline at end of file diff --git a/toontown/src/coghq/FactoryCameraViews.py b/toontown/src/coghq/FactoryCameraViews.py index ef761930..28f5e628 100644 --- a/toontown/src/coghq/FactoryCameraViews.py +++ b/toontown/src/coghq/FactoryCameraViews.py @@ -4,95 +4,56 @@ from direct.directnotify import DirectNotifyGlobal class FactoryCameraViews: + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('FactoryCameraViews') def __init__(self, factory): self.factory = factory - # add a few useful views for the factory av = base.localAvatar - self.currentCamPos = None - - self.views = [["signatureRoomView", - # Look down at the signature room from the button balcony - (Point3(0.,-14.8419799805,13.212685585), # pos - Point3(0.,-13.9563484192,12.749215126), # fwd - Point3(0.0,1.5,15.75), # up - Point3(0.0,1.5,-3.9375), # down - 1), - ["localToonLeftBattle"], # regenerate view on battle done - ], - ["lookoutTrigger", - # Look at the whole signature room from the lookout balcony - (Point3(0,-17.7,28.8), # pos - Point3(0,10,0), # fwd - Point3(0.0,1.5,15.75), # up - Point3(0.0,1.5,-3.9375), # down - 1), - [], - ], - ["moleFieldView", - # Look at a bigger portion of mole field - (Point3(0,-17.7,28.8), # pos - Point3(0,10,0), # fwd - Point3(0.0,1.5,15.75), # up - Point3(0.0,1.5,-3.9375), # down - 1), - [], - ], - ] - + self.views = [ + [ + 'signatureRoomView', (Point3(0.0, -14.8419799805, 13.212685585), Point3(0.0, -13.9563484192, 12.749215126), Point3(0.0, 1.5, 15.75), Point3(0.0, 1.5, -3.9375), 1), ['localToonLeftBattle']], ['lookoutTrigger', (Point3(0, -17.7, 28.8), Point3(0, 10, 0), Point3(0.0, 1.5, 15.75), Point3(0.0, 1.5, -3.9375), 1), []]] camHeight = av.getClampedAvatarHeight() - for i in range(len(self.views)): camPos = self.views[i][1] av.auxCameraPositions.append(camPos) - factory.accept("enter" + self.views[i][0], - Functor(self.switchCamPos, i)) - # camera can also switch specified events + factory.accept('enter' + self.views[i][0], Functor(self.switchCamPos, i)) for msg in self.views[i][2]: factory.accept(msg, self.checkCamPos) - - + + return + def delete(self): - # stop listening for enter/exit events for i in range(len(self.views)): base.localAvatar.auxCameraPositions.remove(self.views[i][1]) - self.factory.ignore("enter" + self.views[i][0]) - self.factory.ignore("exit" + self.views[i][0]) + self.factory.ignore('enter' + self.views[i][0]) + self.factory.ignore('exit' + self.views[i][0]) for msg in self.views[i][2]: self.factory.ignore(msg) - # reset the camera position - base.localAvatar.resetCameraPosition() + base.localAvatar.resetCameraPosition() del self.views def switchCamPos(self, viewIndex, colEntry=None): - # switch to old view when done av = base.localAvatar prevView = av.cameraIndex - self.currentCamPos = viewIndex - - # listen for exit event - av.accept("exit" + self.views[viewIndex][0], - Functor(self.prevCamPos, prevView)) - + av.accept('exit' + self.views[viewIndex][0], Functor(self.prevCamPos, prevView)) self.notify.info('auto-switching to camera position %s' % viewIndex) av.setCameraSettings(self.views[viewIndex][1]) - + def prevCamPos(self, index, colEntry=None): av = base.localAvatar if len(av.cameraPositions) > index: av.setCameraPositionByIndex(index) - self.currentCamPos = None + return def checkCamPos(self): - # Sets the camera position if it should be set. if self.currentCamPos != None: av = base.localAvatar viewIndex = self.currentCamPos self.notify.info('returning to camera position %s' % viewIndex) av.setCameraSettings(self.views[viewIndex][1]) - + return \ No newline at end of file diff --git a/toontown/src/coghq/FactoryEntityCreator.py b/toontown/src/coghq/FactoryEntityCreator.py index 35e7f017..0ae9e7bc 100644 --- a/toontown/src/coghq/FactoryEntityCreator.py +++ b/toontown/src/coghq/FactoryEntityCreator.py @@ -1,61 +1,11 @@ -"""FactoryEntityCreator module: contains the FactoryEntityCreator class""" - from otp.level import EntityCreator -import FactoryLevelMgr -import PlatformEntity -import ConveyorBelt -import GearEntity -import PaintMixer -import GoonClipPlane -import MintProduct -import MintProductPallet -import MintShelf -import PathMasterEntity -import RenderingEntity +import FactoryLevelMgr, PlatformEntity, ConveyorBelt, GearEntity, PaintMixer, GoonClipPlane, MintProduct, MintProductPallet, MintShelf class FactoryEntityCreator(EntityCreator.EntityCreator): + __module__ = __name__ + def __init__(self, level): EntityCreator.EntityCreator.__init__(self, level) - - # create short aliases for EntityCreator create funcs nothing = EntityCreator.nothing nonlocal = EntityCreator.nonlocal - - self.privRegisterTypes({ - 'activeCell': nonlocal, - 'crusherCell': nonlocal, - 'battleBlocker': nonlocal, - 'beanBarrel': nonlocal, - 'button': nonlocal, - 'conveyorBelt' : ConveyorBelt.ConveyorBelt, - 'crate': nonlocal, - 'door': nonlocal, - 'directionalCell': nonlocal, - 'gagBarrel': nonlocal, - 'gear': GearEntity.GearEntity, - 'goon': nonlocal, - 'gridGoon': nonlocal, - 'golfGreenGame' : nonlocal, - 'goonClipPlane' : GoonClipPlane.GoonClipPlane, - 'grid': nonlocal, - 'healBarrel': nonlocal, - 'levelMgr': FactoryLevelMgr.FactoryLevelMgr, - 'lift': nonlocal, - 'mintProduct': MintProduct.MintProduct, - 'mintProductPallet': MintProductPallet.MintProductPallet, - 'mintShelf': MintShelf.MintShelf, - 'mover': nonlocal, - 'paintMixer': PaintMixer.PaintMixer, - 'pathMaster': PathMasterEntity.PathMasterEntity, - 'rendering': RenderingEntity.RenderingEntity, - 'platform': PlatformEntity.PlatformEntity, - 'sinkingPlatform': nonlocal, - 'stomper': nonlocal, - 'stomperPair': nonlocal, - 'laserField': nonlocal, - 'securityCamera': nonlocal, - 'elevatorMarker': nonlocal, - 'trigger': nonlocal, - 'moleField': nonlocal, - 'maze': nonlocal, - }) + self.privRegisterTypes({'activeCell': nonlocal, 'crusherCell': nonlocal, 'battleBlocker': nonlocal, 'beanBarrel': nonlocal, 'button': nonlocal, 'conveyorBelt': ConveyorBelt.ConveyorBelt, 'crate': nonlocal, 'door': nonlocal, 'directionalCell': nonlocal, 'gagBarrel': nonlocal, 'gear': GearEntity.GearEntity, 'goon': nonlocal, 'gridGoon': nonlocal, 'goonClipPlane': GoonClipPlane.GoonClipPlane, 'grid': nonlocal, 'healBarrel': nonlocal, 'levelMgr': FactoryLevelMgr.FactoryLevelMgr, 'lift': nonlocal, 'mintProduct': MintProduct.MintProduct, 'mintProductPallet': MintProductPallet.MintProductPallet, 'mintShelf': MintShelf.MintShelf, 'paintMixer': PaintMixer.PaintMixer, 'platform': PlatformEntity.PlatformEntity, 'sinkingPlatform': nonlocal, 'stomper': nonlocal, 'stomperPair': nonlocal, 'trigger': nonlocal}) \ No newline at end of file diff --git a/toontown/src/coghq/FactoryEntityCreatorAI.py b/toontown/src/coghq/FactoryEntityCreatorAI.py index 8355e8e0..f46ac38d 100644 --- a/toontown/src/coghq/FactoryEntityCreatorAI.py +++ b/toontown/src/coghq/FactoryEntityCreatorAI.py @@ -2,30 +2,30 @@ from otp.level import EntityCreatorAI from direct.showbase.PythonUtil import Functor -import DistributedBeanBarrelAI -import DistributedButtonAI -import DistributedCrateAI -import DistributedLiftAI -import DistributedDoorEntityAI -import DistributedGagBarrelAI -import DistributedGridAI +from . import DistributedBeanBarrelAI +from . import DistributedButtonAI +from . import DistributedCrateAI +from . import DistributedLiftAI +from . import DistributedDoorEntityAI +from . import DistributedGagBarrelAI +from . import DistributedGridAI from toontown.suit import DistributedGridGoonAI from toontown.suit import DistributedGoonAI -import DistributedHealBarrelAI -import DistributedStomperPairAI -import DistributedTriggerAI -import DistributedStomperAI -import DistributedLaserFieldAI -import DistributedSecurityCameraAI -import DistributedMoverAI -import DistributedElevatorMarkerAI -import DistributedSinkingPlatformAI -import ActiveCellAI -import CrusherCellAI -import DirectionalCellAI -import FactoryLevelMgrAI -import BattleBlockerAI -import DistributedGolfGreenGameAI +from . import DistributedHealBarrelAI +from . import DistributedStomperPairAI +from . import DistributedTriggerAI +from . import DistributedStomperAI +from . import DistributedLaserFieldAI +from . import DistributedSecurityCameraAI +from . import DistributedMoverAI +from . import DistributedElevatorMarkerAI +from . import DistributedSinkingPlatformAI +from . import ActiveCellAI +from . import CrusherCellAI +from . import DirectionalCellAI +from . import FactoryLevelMgrAI +from . import BattleBlockerAI +from . import DistributedGolfGreenGameAI from toontown.coghq import DistributedMoleFieldAI from toontown.coghq import DistributedMazeAI diff --git a/toontown/src/coghq/FactoryExterior.py b/toontown/src/coghq/FactoryExterior.py index 6d6a34fe..d85bab0d 100644 --- a/toontown/src/coghq/FactoryExterior.py +++ b/toontown/src/coghq/FactoryExterior.py @@ -1,249 +1,136 @@ - from direct.directnotify import DirectNotifyGlobal from toontown.battle import BattlePlace -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from toontown.toonbase import ToontownGlobals from toontown.building import Elevator from pandac.PandaModules import * class FactoryExterior(BattlePlace.BattlePlace): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("FactoryExterior") - #notify.setDebug(True) - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('FactoryExterior') + def __init__(self, loader, parentFSM, doneEvent): - assert(self.notify.debug("__init__()")) BattlePlace.BattlePlace.__init__(self, loader, doneEvent) self.parentFSM = parentFSM - self.elevatorDoneEvent = "elevatorDone" + self.elevatorDoneEvent = 'elevatorDone' + self.fsm = ClassicFSM.ClassicFSM('FactoryExterior', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'tunnelIn', 'teleportIn']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'stickerBook', 'teleportOut', 'tunnelOut', 'DFA', 'elevator', 'WaitForBattle', 'battle']), + State.State('stickerBook', self.enterStickerBook, self.exitStickerBook, [ + 'walk', 'DFA', 'WaitForBattle', 'battle']), + State.State('WaitForBattle', self.enterWaitForBattle, self.exitWaitForBattle, [ + 'battle', 'walk']), + State.State('battle', self.enterBattle, self.exitBattle, [ + 'walk', 'teleportOut', 'died']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject', 'teleportOut', 'tunnelOut']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walk']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk']), + State.State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, [ + 'teleportIn', 'final', 'WaitForBattle']), + State.State('died', self.enterDied, self.exitDied, [ + 'quietZone']), + State.State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, [ + 'walk']), + State.State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, [ + 'final']), + State.State('elevator', self.enterElevator, self.exitElevator, [ + 'walk']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') def load(self): - self.fsm = ClassicFSM.ClassicFSM('FactoryExterior', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', 'tunnelIn', 'teleportIn', - 'doorIn', - ]), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['stickerBook', 'teleportOut', - 'tunnelOut', 'DFA', 'doorOut', - 'elevator', 'stopped', - 'WaitForBattle', 'battle', - ]), - State.State('stopped', - self.enterStopped, - self.exitStopped, - ['walk', 'teleportOut', 'elevator' - ]), - State.State('stickerBook', - self.enterStickerBook, - self.exitStickerBook, - ['walk', 'DFA', - 'WaitForBattle', 'battle', 'elevator', - ]), - State.State('WaitForBattle', - self.enterWaitForBattle, - self.exitWaitForBattle, - ['battle', 'walk']), - State.State('battle', - self.enterBattle, - self.exitBattle, - ['walk', 'teleportOut', 'died']), - # Download Force Acknowlege: - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject', 'teleportOut', 'tunnelOut']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk']), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', - ]), - State.State('teleportOut', - self.enterTeleportOut, - self.exitTeleportOut, - ['teleportIn', 'final', - 'WaitForBattle']), - State.State('doorIn', - self.enterDoorIn, - self.exitDoorIn, - ['walk']), - State.State('doorOut', - self.enterDoorOut, - self.exitDoorOut, - ['walk']), - State.State('died', - self.enterDied, - self.exitDied, - ['quietZone']), - State.State('tunnelIn', - self.enterTunnelIn, - self.exitTunnelIn, - ['walk']), - State.State('tunnelOut', - self.enterTunnelOut, - self.exitTunnelOut, - ['final']), - State.State('elevator', - self.enterElevator, - self.exitElevator, - ['walk', 'stopped']), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - # Initial State - 'start', - # Final State - 'final', - ) - self.parentFSM.getStateNamed("factoryExterior").addChild(self.fsm) + self.parentFSM.getStateNamed('factoryExterior').addChild(self.fsm) BattlePlace.BattlePlace.load(self) def unload(self): - self.parentFSM.getStateNamed("factoryExterior").removeChild(self.fsm) - del self.fsm - BattlePlace.BattlePlace.unload(self) + self.parentFSM.getStateNamed('factoryExterior').removeChild(self.fsm) + BattlePlace.BattlePlace.unload(self) def enter(self, requestStatus): - self.zoneId = requestStatus["zoneId"] - # This will call load() + self.zoneId = requestStatus['zoneId'] BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() - # Play music - base.playMusic(self.loader.music, looping = 1, volume = 0.8) + base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) self.nodeList = [self.loader.geom] - # Turn the sky on self.loader.hood.startSky() - - self.accept("doorDoneEvent", self.handleDoorDoneEvent) - self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger) - # Turn on the little red arrows. NametagGlobals.setMasterArrowsOn(1) - # Add hooks for the linktunnels self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList, self.zoneId) - how=requestStatus["how"] + how = requestStatus['how'] self.fsm.request(how, [requestStatus]) def exit(self): - # Turn the sky off self.loader.hood.stopSky() self.fsm.requestFinalState() - # Stop music self.loader.music.stop() for node in self.tunnelOriginList: node.removeNode() + del self.tunnelOriginList del self.nodeList - # self.loader.geom.reparentTo(hidden) self.ignoreAll() BattlePlace.BattlePlace.exit(self) def enterTunnelOut(self, requestStatus): - # Drop off the last two digits of the zoneId to make the - # tunnel name. - fromZoneId = self.zoneId - (self.zoneId % 100) - tunnelName = base.cr.hoodMgr.makeLinkTunnelName( - self.loader.hood.id, fromZoneId) - requestStatus["tunnelName"] = tunnelName - + fromZoneId = self.zoneId - self.zoneId % 100 + tunnelName = base.cr.hoodMgr.makeLinkTunnelName(self.loader.hood.id, fromZoneId) + requestStatus['tunnelName'] = tunnelName BattlePlace.BattlePlace.enterTunnelOut(self, requestStatus) def enterTeleportIn(self, requestStatus): - assert(self.notify.debug("enterTeleportIn()")) - - # In the FactoryExterior, we drop everyone to the same - # location. This is only a fallback in case the toon we - # are teleporting to has moved. base.localAvatar.setPosHpr(-34, -350, 0, -28, 0, 0) - BattlePlace.BattlePlace.enterTeleportIn(self, requestStatus) - + def enterTeleportOut(self, requestStatus): - assert(self.notify.debug("enterTeleportOut()")) BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, self.__teleportOutDone) def __teleportOutDone(self, requestStatus): - assert(self.notify.debug("__teleportOutDone()")) - hoodId = requestStatus["hoodId"] - zoneId = requestStatus["zoneId"] - avId = requestStatus["avId"] - shardId = requestStatus["shardId"] - if ((hoodId == self.loader.hood.hoodId) and (zoneId == self.zoneId) and (shardId == None)): - # If you are teleporting to somebody in this exterior - # TODO: might need to set the new zone - self.fsm.request("teleportIn", [requestStatus]) - elif (hoodId == ToontownGlobals.MyEstate): + hoodId = requestStatus['hoodId'] + zoneId = requestStatus['zoneId'] + avId = requestStatus['avId'] + shardId = requestStatus['shardId'] + if hoodId == self.loader.hood.hoodId and zoneId == self.zoneId and shardId == None: + self.fsm.request('teleportIn', [requestStatus]) + elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: - # Different hood or zone, exit the safe zone self.doneStatus = requestStatus messenger.send(self.doneEvent) + return def exitTeleportOut(self): - assert(self.notify.debug("exitTeleportOut()")) BattlePlace.BattlePlace.exitTeleportOut(self) - # elevator state - # (For boarding a building elevator) - def enterElevator(self, distElevator, skipDFABoard = 0): - assert(self.notify.debug("enterElevator()")) - + def enterElevator(self, distElevator): self.accept(self.elevatorDoneEvent, self.handleElevatorDone) - self.elevator = Elevator.Elevator(self.fsm.getStateNamed("elevator"), - self.elevatorDoneEvent, - distElevator) - if skipDFABoard: - self.elevator.skipDFABoard = 1 - #elevatorFSM is now on the DO - distElevator.elevatorFSM=self.elevator + self.elevator = Elevator.Elevator(self.fsm.getStateNamed('elevator'), self.elevatorDoneEvent, distElevator) self.elevator.load() self.elevator.enter() def exitElevator(self): - assert(self.notify.debug("exitElevator()")) self.ignore(self.elevatorDoneEvent) self.elevator.unload() self.elevator.exit() del self.elevator def detectedElevatorCollision(self, distElevator): - assert(self.notify.debug("detectedElevatorCollision()")) - self.fsm.request("elevator", [distElevator]) + self.fsm.request('elevator', [distElevator]) def handleElevatorDone(self, doneStatus): - assert(self.notify.debug("handleElevatorDone()")) - self.notify.debug("handling elevator done event") + self.notify.debug('handling elevator done event') where = doneStatus['where'] - if (where == 'reject'): - # If there has been a reject the Elevator should show an - # elevatorNotifier message and put the toon in the stopped state. - # Don't request the walk state here. Let the the toon be stuck in the - # stopped state till the player removes that message from his screen. - # Removing the message will automatically put him in the walk state there. - # Put the player in the walk state only if there is no elevator message. - if hasattr(base.localAvatar, "elevatorNotifier") and base.localAvatar.elevatorNotifier.isNotifierOpen(): - pass - else: - self.fsm.request("walk") - elif (where == 'exit'): - self.fsm.request("walk") - elif (where == 'factoryInterior'): - self.doneStatus = doneStatus - messenger.send(self.doneEvent) - elif (where == 'stageInterior'): + if where == 'reject': + self.fsm.request('walk') + elif where == 'exit': + self.fsm.request('walk') + elif where == 'factoryInterior': self.doneStatus = doneStatus messenger.send(self.doneEvent) else: - self.notify.error("Unknown mode: " + where + - " in handleElevatorDone") + self.notify.error('Unknown mode: ' + where + ' in handleElevatorDone') \ No newline at end of file diff --git a/toontown/src/coghq/FactoryInterior.py b/toontown/src/coghq/FactoryInterior.py index 810c8ffa..06961be1 100644 --- a/toontown/src/coghq/FactoryInterior.py +++ b/toontown/src/coghq/FactoryInterior.py @@ -1,7 +1,6 @@ - from direct.directnotify import DirectNotifyGlobal from toontown.battle import BattlePlace -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from pandac.PandaModules import * from toontown.toon import Toon @@ -10,204 +9,110 @@ from toontown.toonbase import TTLocalizer from toontown.toontowngui import TTDialog from toontown.toonbase import ToontownBattleGlobals -from toontown.building import Elevator class FactoryInterior(BattlePlace.BattlePlace): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("FactoryInterior") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('FactoryInterior') + def __init__(self, loader, parentFSM, doneEvent): - assert(FactoryInterior.notify.debug("FactoryInterior()")) BattlePlace.BattlePlace.__init__(self, loader, doneEvent) self.parentFSM = parentFSM self.zoneId = ToontownGlobals.SellbotFactoryInt - # any state that we might be in when someone beats the factory - # needs to have a transition to teleportout - self.elevatorDoneEvent = "elevatorDone" - + self.fsm = ClassicFSM.ClassicFSM('FactoryInterior', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'teleportIn', 'fallDown']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'push', 'sit', 'stickerBook', 'WaitForBattle', 'battle', 'died', 'teleportOut', 'squished', 'DFA', 'fallDown']), + State.State('sit', self.enterSit, self.exitSit, [ + 'walk', 'died', 'teleportOut']), + State.State('push', self.enterPush, self.exitPush, [ + 'walk', 'died', 'teleportOut']), + State.State('stickerBook', self.enterStickerBook, self.exitStickerBook, [ + 'walk', 'battle', 'DFA', 'WaitForBattle', 'died', 'teleportOut']), + State.State('WaitForBattle', self.enterWaitForBattle, self.exitWaitForBattle, [ + 'battle', 'walk', 'died', 'teleportOut']), + State.State('battle', self.enterBattle, self.exitBattle, [ + 'walk', 'teleportOut', 'died']), + State.State('fallDown', self.enterFallDown, self.exitFallDown, [ + 'walk', 'died', 'teleportOut']), + State.State('squished', self.enterSquished, self.exitSquished, [ + 'walk', 'died', 'teleportOut']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk', 'teleportOut', 'quietZone', 'died']), + State.State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, [ + 'teleportIn', 'FLA', 'quietZone', 'WaitForBattle']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject', 'teleportOut']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walkteleportOut']), + State.State('died', self.enterDied, self.exitDied, [ + 'teleportOut']), + State.State('FLA', self.enterFLA, self.exitFLA, [ + 'quietZone']), + State.State('quietZone', self.enterQuietZone, self.exitQuietZone, [ + 'teleportIn']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') def load(self): - self.fsm = ClassicFSM.ClassicFSM('FactoryInterior', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', - 'teleportIn', - 'fallDown', - ]), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['push', 'sit', 'stickerBook', - 'WaitForBattle', 'battle', - 'died', 'teleportOut', 'squished', - 'DFA', 'fallDown', 'elevator' - ]), - State.State('stopped', - self.enterStopped, - self.exitStopped, - ['walk', 'teleportOut', - ]), - State.State('sit', - self.enterSit, - self.exitSit, - ['walk', 'died', 'teleportOut',]), - State.State('push', - self.enterPush, - self.exitPush, - ['walk', 'died', 'teleportOut',]), - State.State('stickerBook', - self.enterStickerBook, - self.exitStickerBook, - ['walk', 'battle', 'DFA', - 'WaitForBattle', 'died', 'teleportOut', - ]), - # This needs a transition to teleportOut to allow - # the toon to leave after beating the factory. - # When localToon leaves the battle, battle gets - # a setMembers with no localToon, enables its - # collision sphere, collides with localToon, puts - # localToon in WaitForBattle. - State.State('WaitForBattle', - self.enterWaitForBattle, - self.exitWaitForBattle, - ['battle', 'walk', 'died', - 'teleportOut',]), - State.State('battle', - self.enterBattle, - self.exitBattle, - ['walk', 'teleportOut', 'died',]), - State.State('fallDown', - self.enterFallDown, - self.exitFallDown, - ['walk', 'died', 'teleportOut',]), - State.State('squished', - self.enterSquished, - self.exitSquished, - ['walk', 'died', 'teleportOut',]), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', 'teleportOut', 'quietZone', 'died',]), - State.State('teleportOut', - self.enterTeleportOut, - self.exitTeleportOut, - ['teleportIn', 'FLA', 'quietZone', - 'WaitForBattle']), - # Download Force Acknowledge - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject', 'teleportOut']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk' 'teleportOut',]), - State.State('died', - self.enterDied, - self.exitDied, - ['teleportOut']), - # Forced Leave Acknowledge - State.State('FLA', - self.enterFLA, - self.exitFLA, - ['quietZone']), - State.State('quietZone', - self.enterQuietZone, - self.exitQuietZone, - ['teleportIn']), - State.State('elevator', - self.enterElevator, - self.exitElevator, - ['walk']), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - - # Initial State - 'start', - # Final State - 'final', - ) - self.parentFSM.getStateNamed("factoryInterior").addChild(self.fsm) + self.parentFSM.getStateNamed('factoryInterior').addChild(self.fsm) BattlePlace.BattlePlace.load(self) self.music = base.loadMusic('phase_9/audio/bgm/CHQ_FACT_bg.mid') def unload(self): - self.parentFSM.getStateNamed("factoryInterior").removeChild(self.fsm) - del self.fsm + self.parentFSM.getStateNamed('factoryInterior').removeChild(self.fsm) del self.music BattlePlace.BattlePlace.unload(self) def enter(self, requestStatus): self.fsm.enterInitialState() base.transitions.fadeOut(t=0) - - # While we are here, we ignore invasion credit. base.localAvatar.inventory.setRespectInvasions(0) - # wait until the factory and any distributed entities have been - # created before moving on def commence(self=self): - # Turn on the little red arrows. NametagGlobals.setMasterArrowsOn(1) - self.fsm.request(requestStatus["how"], [requestStatus]) - base.playMusic(self.music, looping = 1, volume = 0.8) + self.fsm.request(requestStatus['how'], [requestStatus]) + base.playMusic(self.music, looping=1, volume=0.8) base.transitions.irisIn() - # did the factory beat us here? + if hasattr(base, 'factoryReady'): commence() else: - # wait for the factory to tell us it's ready for prime time. self.acceptOnce('FactoryReady', commence) - self.factoryDefeated = 0 self.acceptOnce('FactoryWinEvent', self.handleFactoryWinEvent) if __debug__ and 0: - # make F10 simulate someone else winning the factory - self.accept('f10', lambda: messenger.send('FactoryWinEvent')) - + self.accept('f10', lambda : messenger.send('FactoryWinEvent')) self.confrontedForeman = 0 + def handleConfrontedForeman(self=self): self.confrontedForeman = 1 + self.acceptOnce('localToonConfrontedForeman', handleConfrontedForeman) def exit(self): - # Turn off the little red arrows. NametagGlobals.setMasterArrowsOn(0) - if hasattr(base, 'factoryReady'): del base.factoryReady - - # Respect invasions again. base.localAvatar.inventory.setRespectInvasions(1) - self.fsm.requestFinalState() self.loader.music.stop() self.music.stop() self.ignoreAll() - # walk state inherited from BattlePlace.py - # Override to turn off teleport def enterWalk(self, teleportIn=0): BattlePlace.BattlePlace.enterWalk(self, teleportIn) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # push state inherited from Place.py - # Override to turn off teleport def enterPush(self): BattlePlace.BattlePlace.enterPush(self) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # waitForBattle state inherited from BattlePlace.py def enterWaitForBattle(self): FactoryInterior.notify.info('enterWaitForBattle') BattlePlace.BattlePlace.enterWaitForBattle(self) - # make sure we're under render, and make sure everyone else knows it if base.localAvatar.getParent() != render: base.localAvatar.wrtReparentTo(render) base.localAvatar.b_setParent(ToontownGlobals.SPRender) @@ -216,8 +121,6 @@ def exitWaitForBattle(self): FactoryInterior.notify.info('exitWaitForBattle') BattlePlace.BattlePlace.exitWaitForBattle(self) - # battle state inherited from BattlePlace.py - # Override to turn off teleport and control music def enterBattle(self, event): FactoryInterior.notify.info('enterBattle') self.music.stop() @@ -225,32 +128,22 @@ def enterBattle(self, event): self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # Override to set bldg flag and creditMultiplier def enterTownBattle(self, event): - # this assumes that our 'zoneId' is going to be set to the appropriate - # faux-zone, and that we continue to use the faux-zone as the factory - # ID mult = ToontownBattleGlobals.getFactoryCreditMultiplier(self.zoneId) base.localAvatar.inventory.setBattleCreditMultiplier(mult) - self.loader.townBattle.enter(event, self.fsm.getStateNamed("battle"), - bldg=1, creditMultiplier=mult) + self.loader.townBattle.enter(event, self.fsm.getStateNamed('battle'), bldg=1, creditMultiplier=mult) - # Override to control our own music def exitBattle(self): FactoryInterior.notify.info('exitBattle') BattlePlace.BattlePlace.exitBattle(self) self.loader.music.stop() - base.playMusic(self.music, looping = 1, volume = 0.8) + base.playMusic(self.music, looping=1, volume=0.8) - # sticker book state inherited from BattlePlace.py - # Override to turn off teleport - def enterStickerBook(self, page = None): + def enterStickerBook(self, page=None): BattlePlace.BattlePlace.enterStickerBook(self, page) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # sit state inherited from BattlePlace.py - # Override to turn off teleport def enterSit(self): BattlePlace.BattlePlace.enterSit(self) self.ignore('teleportQuery') @@ -261,135 +154,61 @@ def enterZone(self, zoneId): def enterTeleportOut(self, requestStatus): FactoryInterior.notify.info('enterTeleportOut()') - BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, - self.__teleportOutDone) + BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, self.__teleportOutDone) def __processLeaveRequest(self, requestStatus): - hoodId = requestStatus["hoodId"] - if (hoodId == ToontownGlobals.MyEstate): + hoodId = requestStatus['hoodId'] + if hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: - # Different hood or zone, exit the safe zone self.doneStatus = requestStatus messenger.send(self.doneEvent) def __teleportOutDone(self, requestStatus): FactoryInterior.notify.info('__teleportOutDone()') messenger.send('leavingFactory') - messenger.send("localToonLeft") - - # we've played the teleport-out sequence; if we just got booted - # out of the factory because the foreman was defeated, and we - # were not in the battle, show a dialog to let the player know - # what happened - if self.factoryDefeated and (not self.confrontedForeman): - # Forced Leave Ack + messenger.send('localToonLeft') + if self.factoryDefeated and not self.confrontedForeman: self.fsm.request('FLA', [requestStatus]) else: self.__processLeaveRequest(requestStatus) - + def exitTeleportOut(self): FactoryInterior.notify.info('exitTeleportOut()') BattlePlace.BattlePlace.exitTeleportOut(self) - - def detectedElevatorCollision(self, distElevator): - assert(self.notify.debug("detectedElevatorCollision()")) - self.fsm.request("elevator", [distElevator]) - - def enterElevator(self, distElevator): - assert(self.notify.debug("enterElevator()")) - self.accept(self.elevatorDoneEvent, self.handleElevatorDone) - self.elevator = Elevator.Elevator(self.fsm.getStateNamed("elevator"), - self.elevatorDoneEvent, - distElevator) - #elevatorFSM is now on the DO - distElevator.elevatorFSM=self.elevator - self.elevator.load() - self.elevator.enter() - - def exitElevator(self): - assert(self.notify.debug("exitElevator()")) - self.ignore(self.elevatorDoneEvent) - self.elevator.unload() - self.elevator.exit() - #del self.elevator - - def handleElevatorDone(self, doneStatus): - assert(self.notify.debug("handleElevatorDone()")) - self.notify.debug("handling elevator done event") - where = doneStatus['where'] - if (where == 'reject'): - # If there has been a reject the Elevator should show an - # elevatorNotifier message and put the toon in the stopped state. - # Don't request the walk state here. Let the the toon be stuck in the - # stopped state till the player removes that message from his screen. - # Removing the message will automatically put him in the walk state there. - # Put the player in the walk state only if there is no elevator message. - if hasattr(base.localAvatar, "elevatorNotifier") and base.localAvatar.elevatorNotifier.isNotifierOpen(): - pass - else: - self.fsm.request("walk") - elif (where == 'exit'): - self.fsm.request("walk") - elif (where == 'factoryInterior' or where == 'suitInterior'): - self.doneStatus = doneStatus - self.doneEvent = "lawOfficeFloorDone" - messenger.send(self.doneEvent) - #messenger.send(self.doneEvent) - else: - self.notify.error("Unknown mode: " + where + - " in handleElevatorDone") - + def handleFactoryWinEvent(self): - """this handler is called when the factory foreman has been defeated""" FactoryInterior.notify.info('handleFactoryWinEvent') - - # if we're in the process of dying, ignore this - if (base.cr.playGame.getPlace().fsm.getCurrentState().getName() == - 'died'): + if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died': return - - # update our flag self.factoryDefeated = 1 - if 1: - # go back to HQ zoneId = ZoneUtil.getHoodId(self.zoneId) else: - # go back to the playground zoneId = ZoneUtil.getSafeZoneId(base.localAvatar.defaultZone) - self.fsm.request('teleportOut', [{ - "loader": ZoneUtil.getLoaderName(zoneId), - "where": ZoneUtil.getToonWhereName(zoneId), - "how": "teleportIn", - "hoodId": zoneId, - "zoneId": zoneId, - "shardId": None, - "avId": -1, - }]) - - # died state - def enterDied(self, requestStatus, callback = None): + self.fsm.request('teleportOut', [{'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}]) + return + + def enterDied(self, requestStatus, callback=None): FactoryInterior.notify.info('enterDied') + def diedDone(requestStatus, self=self, callback=callback): if callback is not None: callback() messenger.send('leavingFactory') self.doneStatus = requestStatus messenger.send(self.doneEvent) + return + BattlePlace.BattlePlace.enterDied(self, requestStatus, diedDone) - # Forced Leave Ack state def enterFLA(self, requestStatus): FactoryInterior.notify.info('enterFLA') - # inform the player about why they got booted from the factory - self.flaDialog = TTDialog.TTGlobalDialog( - message = TTLocalizer.ForcedLeaveFactoryAckMsg, - doneEvent = 'FLADone', style = TTDialog.Acknowledge, - fadeScreen = 1, - ) + self.flaDialog = TTDialog.TTGlobalDialog(message=TTLocalizer.ForcedLeaveFactoryAckMsg, doneEvent='FLADone', style=TTDialog.Acknowledge, fadeScreen=1) + def continueExit(self=self, requestStatus=requestStatus): self.__processLeaveRequest(requestStatus) + self.accept('FLADone', continueExit) self.flaDialog.show() @@ -397,4 +216,4 @@ def exitFLA(self): FactoryInterior.notify.info('exitFLA') if hasattr(self, 'flaDialog'): self.flaDialog.cleanup() - del self.flaDialog + del self.flaDialog \ No newline at end of file diff --git a/toontown/src/coghq/FactoryLevelMgr.py b/toontown/src/coghq/FactoryLevelMgr.py index 5d764ece..4d64cb7d 100644 --- a/toontown/src/coghq/FactoryLevelMgr.py +++ b/toontown/src/coghq/FactoryLevelMgr.py @@ -1,87 +1,34 @@ -"""FactoryLevelMgr module: contains the FactoryLevelMgr class""" - from otp.level import LevelMgr -import FactoryUtil +from . import FactoryUtil from direct.showbase.PythonUtil import Functor from toontown.toonbase import ToontownGlobals class FactoryLevelMgr(LevelMgr.LevelMgr): - """This class manages editable factory attributes""" + __module__ = __name__ InterestingLocations = [ - ( - # double staircase - ((-866, -272, -40), -101), - # stomper room - ((-662, -242, 7.5), 0), - # warehouse - ((-20, -180, 20), 0), - # left elevator - ((-249, 258, 111), 0), - # right elevator - ((318, 241, 115), -16), - # vista view of factory from left elevator - ((-251, 241, 109), -180), - # top of right silo - ((296, 292, 703), 56), - # platform jumping room - ((-740, 122, 28), 90), - # paint mixer room - ((210, -270, 38), -90), - ), - ( - ((20,21,0),0), - ((3,404,39),-16), - ((-496,358,5),0), - ), - ] + ( + ( + ( + -866, -272, -40), -101), ((-662, -242, 7.5), 0), ((-20, -180, 20), 0), ((-249, 258, 111), 0), ((318, 241, 115), -16), ((-251, 241, 109), -180), ((296, 292, 703), 56), ((-740, 122, 28), 90), ((210, -270, 38), -90)), (((20, 21, 0), 0), ((3, 404, 39), -16), ((-496, 358, 5), 0))] def __init__(self, level, entId): LevelMgr.LevelMgr.__init__(self, level, entId) - if base.config.GetBool('want-factory-lifter', 0): self.toonLifter = FactoryUtil.ToonLifter('f3') - - if __debug__: - """ - # interesting places - self.ipPlacer = FactoryUtil.CyclePlacer( - FactoryLevelMgr.InterestingLocations[self.level.factoryId], - 'f4-up') - """ - - # ouch button - self.ouchButton = FactoryUtil.Ouch('f6', - Functor(self.level.b_setOuch,3)) - self.callSetters('farPlaneDistance') self.geom.reparentTo(render) - # Render the semi-transparent oil room floor early, before various other game objects. - # Otherwise shadows and traps won't draw on this floor. - oilRoomOil = self.geom.find("**/oilroom/room/geometry_oilroom/*oil") - oilRoomFloor = self.geom.find("**/oilroom/room/geometry_oilroom/*platform") - if oilRoomOil and not oilRoomOil.isEmpty() and oilRoomFloor and not oilRoomFloor.isEmpty(): - oilRoomOil.setBin("background", 10) - oilRoomFloor.setBin("background", 11) - def destroy(self): - if __debug__: - #self.ipPlacer.destroy() - #del self.ipPlacer - self.ouchButton.destroy() - del self.ouchButton - if hasattr(self, 'toonLifter'): self.toonLifter.destroy() del self.toonLifter - LevelMgr.LevelMgr.destroy(self) def setFarPlaneDistance(self, farPlaneDistance): - base.camLens.setNearFar(ToontownGlobals.DefaultCameraNear, - farPlaneDistance) + base.camLens.setNearFar(ToontownGlobals.DefaultCameraNear, farPlaneDistance) if __dev__: + def setWantDoors(self, wantDoors): self.wantDoors = wantDoors - messenger.send('wantDoorsChanged') + messenger.send('wantDoorsChanged') \ No newline at end of file diff --git a/toontown/src/coghq/FactoryManagerAI.py b/toontown/src/coghq/FactoryManagerAI.py index d370e373..834d9070 100644 --- a/toontown/src/coghq/FactoryManagerAI.py +++ b/toontown/src/coghq/FactoryManagerAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedFactoryAI +from . import DistributedFactoryAI from toontown.toonbase import ToontownGlobals from direct.showbase import DirectObject diff --git a/toontown/src/coghq/FactoryMockupCogs.py b/toontown/src/coghq/FactoryMockupCogs.py index d4d90752..7dda43f2 100644 --- a/toontown/src/coghq/FactoryMockupCogs.py +++ b/toontown/src/coghq/FactoryMockupCogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * ### SEE SellbotLegFactoryCogs.py FOR EXAMPLES OF DATA FORMATS diff --git a/toontown/src/coghq/FactoryMockupSpec.py b/toontown/src/coghq/FactoryMockupSpec.py index bd46d34e..2c40ae54 100644 --- a/toontown/src/coghq/FactoryMockupSpec.py +++ b/toontown/src/coghq/FactoryMockupSpec.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * GlobalEntities = { # LEVELMGR diff --git a/toontown/src/coghq/FactorySpecs.py b/toontown/src/coghq/FactorySpecs.py index 2e98a9e6..fd3ac23b 100644 --- a/toontown/src/coghq/FactorySpecs.py +++ b/toontown/src/coghq/FactorySpecs.py @@ -1,32 +1,18 @@ -"""FactorySpecs.py: contains table of factory specs""" - from toontown.toonbase import ToontownGlobals -import SellbotLegFactorySpec -import SellbotLegFactoryCogs -import LawbotLegFactorySpec -import LawbotLegFactoryCogs +from . import SellbotLegFactorySpec, SellbotLegFactoryCogs def getFactorySpecModule(factoryId): return FactorySpecModules[factoryId] + def getCogSpecModule(factoryId): return CogSpecModules[factoryId] -# source data for factory specifications -FactorySpecModules = { - ToontownGlobals.SellbotFactoryInt: SellbotLegFactorySpec, - ToontownGlobals.LawbotOfficeInt: LawbotLegFactorySpec, #remove me JML - } - -## until cogs are entities... -CogSpecModules = { - ToontownGlobals.SellbotFactoryInt: SellbotLegFactoryCogs, - ToontownGlobals.LawbotOfficeInt: LawbotLegFactoryCogs, #remove me JML - } +FactorySpecModules = {ToontownGlobals.SellbotFactoryInt: SellbotLegFactorySpec} +CogSpecModules = {ToontownGlobals.SellbotFactoryInt: SellbotLegFactoryCogs} if __dev__: - import FactoryMockupSpec + from . import FactoryMockupSpec FactorySpecModules[ToontownGlobals.MockupFactoryId] = FactoryMockupSpec - - import FactoryMockupCogs - CogSpecModules[ToontownGlobals.MockupFactoryId] = FactoryMockupCogs + from . import FactoryMockupCogs + CogSpecModules[ToontownGlobals.MockupFactoryId] = FactoryMockupCogs \ No newline at end of file diff --git a/toontown/src/coghq/FactoryUtil.py b/toontown/src/coghq/FactoryUtil.py index 2bebd41f..33e32d0c 100644 --- a/toontown/src/coghq/FactoryUtil.py +++ b/toontown/src/coghq/FactoryUtil.py @@ -1,55 +1,52 @@ -"""FactoryUtil module: contains useful stuff for factory mockup""" - -from pandac.PandaModules import * -from direct.showbase import DirectObject +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from toontown.toonbase import ToontownGlobals -import MovingPlatform -from direct.task.Task import Task +from . import MovingPlatform from toontown.suit import Suit from toontown.suit import SuitDNA -class Ouch(DirectObject.DirectObject): +class Ouch(DirectObject): + __module__ = __name__ + def __init__(self, keyEvent, callback): - DirectObject.DirectObject.__init__(self) self.accept(keyEvent, callback) def destroy(self): self.ignoreAll() - -class CyclePlacer(DirectObject.DirectObject): + +class CyclePlacer(DirectObject): + __module__ = __name__ + def __init__(self, locations, keyEvent, startIndex=0): - """ - locations is list of ((x,y,z),h) pairs - keyEvent is something like 'f3-up' - """ - DirectObject.DirectObject.__init__(self) self.locations = locations self.index = startIndex self.accept(keyEvent, self.gotoNextLocation) + def destroy(self): self.locations = None self.ignoreAll() + return + def gotoNextLocation(self): self.index = (self.index + 1) % len(self.locations) self.gotoLocation() + def gotoLocation(self, index=None): if index is None: index = self.index - pos, h = self.locations[index] + (pos, h) = self.locations[index] base.localAvatar.reparentTo(render) base.localAvatar.setPos(*pos) base.localAvatar.setH(h) + return + -class ToonLifter(DirectObject.DirectObject): +class ToonLifter(DirectObject): + __module__ = __name__ SerialNum = 0 + def __init__(self, keyDownEvent, speed=2): - """ - keyDownEvent must have a corresponding '-up' event - e.g. for 'f3' there must be a 'f3-up' - """ - DirectObject.DirectObject.__init__(self) self.serialNum = ToonLifter.SerialNum ToonLifter.SerialNum += 1 self.taskName = 'ToonLifter%s' % self.serialNum @@ -57,93 +54,22 @@ def __init__(self, keyDownEvent, speed=2): self.keyUpEvent = self.keyDownEvent + '-up' self.speed = speed self.accept(self.keyDownEvent, self.startLifting) + def destroy(self): self.ignoreAll() taskMgr.remove(self.taskName) + def startLifting(self): + def liftTask(task, self=self): base.localAvatar.setZ(base.localAvatar.getZ() + self.speed) return Task.cont + def stopLifting(self=self): taskMgr.remove(self.taskName) self.ignore(self.keyUpEvent) self.accept(self.keyDownEvent, self.startLifting) + self.ignore(self.keyDownEvent) self.accept(self.keyUpEvent, stopLifting) - taskMgr.add(liftTask, self.taskName) - -""" -class FactoryPlatform(MovingPlatform.MovingPlatform): - def __init__(self, index, startPos, endPos, speed, waitDur, - model, floorNodeName=None): - MovingPlatform.MovingPlatform.__init__(self, index, - model, floorNodeName) - self.index = index - self.startPos = startPos - self.endPos = endPos - self.speed = speed - self.waitDur = waitDur - - def destroy(self): - MovingPlatform.MovingPlatform.destroy(self) - - def start(self, startTime): - distance = Vec3(self.startPos-self.endPos).length() - duration = distance/self.speed - self.moveIval = Sequence( - WaitInterval(self.waitDur), - LerpPosInterval(self, duration, - self.endPos, startPos=self.startPos, - name='siloPlatOut%s' % self.index), - WaitInterval(self.waitDur), - LerpPosInterval(self, duration, - self.startPos, startPos=self.endPos, - name='siloPlatBack%s' % self.index), - name='siloPlatIval%s' % self.index, - ) - self.moveIval.loop() - self.moveIval.setT(globalClock.getFrameTime() - startTime) - - def stop(self): - self.ignoreAll() - self.moveIval.pause() - del self.moveIval - -class WalkingSuit: - SerialNum = 0 - def __init__(self, wayPoints, dna=None): - self.serialNum = WalkingSuit.SerialNum - WalkingSuit.SerialNum += 1 - self.wayPoints = wayPoints - if dna is None: - dna = 'f' # flunky - self.suit = Suit.Suit() - d = SuitDNA.SuitDNA() - d.newSuit(dna) - self.suit.setDNA(d) - - def destroy(self): - self.suit.delete() - del self.suit - - def start(self, startTime): - self.walkIval = Sequence(name='factorySuitWalk%s' % self.serialNum) - for i in range(len(self.wayPoints)): - distance = Vec3(self.wayPoints[i-1][0] - - self.wayPoints[i][0]).length() - speed = ToontownGlobals.SuitWalkSpeed - duration = distance / speed - self.walkIval += [ - Func(self.suit.setH, self.wayPoints[i-1][1]), - LerpPosInterval(self.suit, duration, self.wayPoints[i][0], - startPos=self.wayPoints[i-1][0]), - ] - self.suit.reparentTo(render) - self.suit.loop('walk') - self.walkIval.loop() - self.walkIval.setT(globalClock.getFrameTime() - startTime) - - def stop(self): - self.walkIval.finish() - del self.walkIval -""" + taskMgr.add(liftTask, self.taskName) \ No newline at end of file diff --git a/toontown/src/coghq/GearEntity.py b/toontown/src/coghq/GearEntity.py index 3826f5d8..d4d97181 100644 --- a/toontown/src/coghq/GearEntity.py +++ b/toontown/src/coghq/GearEntity.py @@ -1,15 +1,11 @@ -"""GearEntity module: contains the GearEntity class""" - from direct.interval.IntervalGlobal import * from otp.level import BasicEntities -import MovingPlatform -from pandac.PandaModules import Vec3 +from . import MovingPlatform class GearEntity(BasicEntities.NodePathEntity): - ModelPaths = { - 'factory': 'phase_9/models/cogHQ/FactoryGearB', - 'mint': 'phase_10/models/cashbotHQ/MintGear', - } + __module__ = __name__ + ModelPaths = {'factory': 'phase_9/models/cogHQ/FactoryGearB', 'mint': 'phase_10/models/cashbotHQ/MintGear'} + def __init__(self, level, entId): self.modelType = 'factory' self.entInitialized = False @@ -22,69 +18,47 @@ def destroy(self): BasicEntities.NodePathEntity.destroy(self) def initGear(self): - # guard against re-entry; we call self.setScale in here, which in - # turn calls initGear if hasattr(self, 'in_initGear'): return - # set the sentry self.in_initGear = True - self.destroyGear() - model = loader.loadModel(GearEntity.ModelPaths[self.modelType]) + model = loader.loadModelCopy(GearEntity.ModelPaths[self.modelType]) self.gearParent = self.attachNewNode('gearParent-%s' % self.entId) - if self.orientation == 'horizontal': - # stash vertical collisions - vertNodes = model.findAllMatches( - '**/VerticalCollisions') + vertNodes = model.findAllMatches('**/VerticalCollisions').asList() for node in vertNodes: node.stash() + mPlat = MovingPlatform.MovingPlatform() - # this should be collHorizontalFloor... - mPlat.setupCopyModel(self.getParentToken(), model, - 'HorizontalFloor') + mPlat.setupCopyModel(self.getParentToken(), model, 'HorizontalFloor') model = mPlat else: - # stash horizontal collisions - horizNodes = model.findAllMatches( - '**/HorizontalCollisions') + horizNodes = model.findAllMatches('**/HorizontalCollisions').asList() for node in horizNodes: node.stash() - # put the model origin in the center (inside) of the gear - model.setZ(.15) - model.flattenLight() + model.setZ(0.15) + model.flattenLight() model.setScale(self.gearScale) - # get rid of any scales, so the toon doesn't freak out when - # parented to us model.flattenLight() - # incorporate the gear's overall scale model.setScale(self.getScale()) self.setScale(1) model.flattenLight() - if self.orientation == 'vertical': - # stand the gear up self.gearParent.setP(-90) self.model = model self.model.reparentTo(self.gearParent) - - # start the rotation ival self.startRotate() - - # get rid of the sentry del self.in_initGear def destroyGear(self): self.stopRotate() - if hasattr(self, 'model'): if isinstance(self.model, MovingPlatform.MovingPlatform): self.model.destroy() else: self.model.removeNode() del self.model - if hasattr(self, 'gearParent'): self.gearParent.removeNode() del self.gearParent @@ -92,22 +66,17 @@ def destroyGear(self): def startRotate(self): self.stopRotate() try: - ivalDur = 360./self.degreesPerSec + ivalDur = 360.0 / self.degreesPerSec except ZeroDivisionError: pass else: - hOffset = 360. - if ivalDur < 0.: + hOffset = 360.0 + if ivalDur < 0.0: ivalDur = -ivalDur hOffset = -hOffset - self.rotateIval = LerpHprInterval(self.model, ivalDur, - Vec3(hOffset,0,0), - startHpr=Vec3(0,0,0), - name='gearRot-%s' % self.entId) + self.rotateIval = LerpHprInterval(self.model, ivalDur, Vec3(hOffset, 0, 0), startHpr=Vec3(0, 0, 0), name='gearRot-%s' % self.entId) self.rotateIval.loop() - self.rotateIval.setT( - (globalClock.getFrameTime() - self.level.startTime) + - (ivalDur * self.phaseShift)) + self.rotateIval.setT(globalClock.getFrameTime() - self.level.startTime + ivalDur * self.phaseShift) def stopRotate(self): if hasattr(self, 'rotateIval'): @@ -115,6 +84,7 @@ def stopRotate(self): del self.rotateIval if __dev__: + def setDegreesPerSec(self, degreesPerSec): if self.entInitialized: self.degreesPerSec = degreesPerSec @@ -129,20 +99,22 @@ def attribChanged(self, attrib, value): self.destroyGear() self.initGear() - # make sure to intercept scale changes so we can flatten the scale def setScale(self, *args): BasicEntities.NodePathEntity.setScale(self, *args) if self.entInitialized: self.initGear() + def setSx(self, *args): BasicEntities.NodePathEntity.setSx(self, *args) if self.entInitialized: self.initGear() + def setSy(self, *args): BasicEntities.NodePathEntity.setSy(self, *args) if self.entInitialized: self.initGear() + def setSz(self, *args): BasicEntities.NodePathEntity.setSz(self, *args) if self.entInitialized: - self.initGear() + self.initGear() \ No newline at end of file diff --git a/toontown/src/coghq/GoonClipPlane.py b/toontown/src/coghq/GoonClipPlane.py index e4c04feb..35672325 100644 --- a/toontown/src/coghq/GoonClipPlane.py +++ b/toontown/src/coghq/GoonClipPlane.py @@ -3,6 +3,7 @@ from otp.level import BasicEntities class GoonClipPlane(BasicEntities.NodePathEntity): + __module__ = __name__ def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) @@ -16,38 +17,25 @@ def destroy(self): self.removeNode() def registerWithFactory(self): - # register this clip plane with the factory clipList = self.level.goonClipPlanes.get(self.zoneNum) if clipList: if not self.entId in clipList: clipList.append(self.entId) else: - self.level.goonClipPlanes[self.zoneNum]= [self.entId] - + self.level.goonClipPlanes[self.zoneNum] = [ + self.entId] + def unregisterWithFactory(self): - # unregister this clip plane with the factory clipList = self.level.goonClipPlanes.get(self.zoneNum) if clipList: if self.entId in clipList: clipList.remove(self.entId) - - def initPlane(self): - # Graphical debugging - if __debug__: - plane = loader.loadModel("phase_5/models/modules/suit_walls.bam") - plane.reparentTo(self) - plane.setH(90) - # Setup clip plane + def initPlane(self): self.coneClip = PlaneNode('coneClip') - self.coneClip.setPlane(Plane(Vec3(1,0,0), Point3(0,0,0))) + self.coneClip.setPlane(Plane(Vec3(1, 0, 0), Point3(0, 0, 0))) self.coneClipPath = self.attachNewNode(self.coneClip) + self.cpa = ClipPlaneAttrib.make(ClipPlaneAttrib.OAdd, self.coneClip) def getPlane(self): - return self.coneClipPath - - - - - - + return self.coneClip \ No newline at end of file diff --git a/toontown/src/coghq/InGameEditor.py b/toontown/src/coghq/InGameEditor.py index 42d41c33..f80a745f 100644 --- a/toontown/src/coghq/InGameEditor.py +++ b/toontown/src/coghq/InGameEditor.py @@ -4,12 +4,12 @@ from direct.showbase.TkGlobal import * from direct.tkwidgets.Tree import * from direct.tkwidgets import Slider, Floater -from tkSimpleDialog import askstring -from tkMessageBox import showwarning, askyesno -from Tkinter import * +from tkinter.simpledialog import askstring +from tkinter.messagebox import showwarning, askyesno +from tkinter import * from direct.showbase.PythonUtil import Functor, list2dict from direct.gui.DirectGui import DGG -import tkFileDialog +import tkinter.filedialog from direct.showbase import DirectObject import math import operator @@ -150,7 +150,7 @@ def createMenuBar(self): # a choice dialog with a list of entity types, or something permanentTypes = self.level.entTypeReg.getPermanentTypeNames() entTypes = list(self.level.entTypes) - map(entTypes.remove, permanentTypes) + list(map(entTypes.remove, permanentTypes)) entTypes.sort() numEntities = len(entTypes) cascadeMenu = '' @@ -404,7 +404,7 @@ def updateAttribEditPane(self, entId, levelSpec, entTypeReg): widgetSetter = None entSpec = levelSpec.getEntitySpec(entId) - assert entSpec.has_key('type') + assert 'type' in entSpec typeDesc = entTypeReg.getTypeDesc(entSpec['type']) attribNames = typeDesc.getAttribNames() attribDescs = typeDesc.getAttribDescDict() @@ -544,7 +544,7 @@ def addChoiceWidget(self, levelSpec, entSpec, entId, attribName, params): attribDesc = typeDesc.getAttribDescDict()[attribName] attributeValue = attribDesc.getDefaultValue() valueDict = params.get('valueDict', {}) - for key,value in valueDict.items(): + for key,value in list(valueDict.items()): if value == attributeValue: attributeValue = key break @@ -565,10 +565,10 @@ def radioCommand(radioVar = radioVar): label.pack(side = LEFT, expand = 0) # Add radio buttons for choice in params.get('choiceSet', []): - if type(choice) is types.StringType: + if type(choice) is bytes: choiceStr = choice else: - choiceStr = `choice` + choiceStr = repr(choice) # Store desired value by string repr (since that's what # we'll get back from the radio button command if choiceStr not in valueDict: @@ -585,7 +585,7 @@ def radioCommand(radioVar = radioVar): self.attribWidgets.append(frame) # Update Tkinter variable on edits and undo/redo def setRadioVar(attributeValue): - for key,value in valueDict.items(): + for key,value in list(valueDict.items()): if value == attributeValue: attributeValue = key break @@ -617,24 +617,24 @@ def addMultiChoiceWidget(self,levelSpec,entSpec,entId,attribName,params): # Command to update level based upon current radio button value def cbCommand(var, trueValue=trueValue): vd = self.cbDict[attribName] - print vd + print(vd) # Use value dict to translate current value # If entry not found, just use current value if var.get(): - print 'got it', trueValue, vd + print('got it', trueValue, vd) vd[trueValue] = 1 else: - print 'not it', trueValue, vd + print('not it', trueValue, vd) if trueValue in vd: del vd[trueValue] - value = vd.keys() - print 'SENDING', value + value = list(vd.keys()) + print('SENDING', value) self.level.setAttribEdit(entId, attribName, value) # Create check button - if type(choice) is types.StringType: + if type(choice) is bytes: labelStr = choice else: - labelStr = `choice` + labelStr = repr(choice) func = Functor(cbCommand, cbVar) choiceButton = Checkbutton( frame, @@ -647,8 +647,8 @@ def cbCommand(var, trueValue=trueValue): self.attribWidgets.append(frame) # Update Tkinter variable on edits and undo/redo def setCheckbuttonVar(attributeValueList): - print 'COMING BACK', attributeValueList - for attributeValue, cb in checkbuttonDict.items(): + print('COMING BACK', attributeValueList) + for attributeValue, cb in list(checkbuttonDict.items()): if attributeValue in attributeValueList: cb.set(1) else: @@ -759,7 +759,7 @@ def askFilename(callback = handleReturn): initialDir = Filename.expandFrom('$TTMODELS/built/').toOsSpecific() else: initialDir = Filename.expandFrom('$TTMODELS/built/%s' % text.get()[1:-1]).toOsSpecific() - print text, text.get()[1:-1], initialDir + print(text, text.get()[1:-1], initialDir) #import pdb;pdb.set_trace() rawFilename = askopenfilename( defaultextension = '*', @@ -771,7 +771,7 @@ def askFilename(callback = handleReturn): if rawFilename != '': filename = Filename.fromOsSpecific(rawFilename) filename.findOnSearchpath(getModelPath().getValue()) - text.set("'%s'" % `filename`) + text.set("'%s'" % repr(filename)) handleReturn(None) # Create widgets, label which does double duty as a button frame = Frame(self.pageOneFrame.interior()) @@ -884,10 +884,10 @@ def handleMenu(id): for eType in entTypeReg.getTypeNamesFromOutputType('bool'): idDict[eType] = self.level.entType2ids.get(eType, []) else: - for eType in self.level.entType2ids.keys(): + for eType in list(self.level.entType2ids.keys()): idDict[eType] = self.level.entType2ids.get(eType, []) # Now build popup menu - typeKeys = idDict.keys() + typeKeys = list(idDict.keys()) # Arrange according to entity type typeKeys.sort() def getChildEntIds(entity): @@ -1046,7 +1046,7 @@ def onDestroy(self, event): self.ignore('DIRECT_manipulateObjectCleanup') self.ignore('DIRECT_undo') self.ignore('DIRECT_redo') - print 'InGameEditor.onDestroy()' + print('InGameEditor.onDestroy()') if self.visZonesEditor: self.visZonesEditor.destroy() self.explorer._node.destroy() @@ -1058,7 +1058,7 @@ def handleRequestSave(self): def handleSaveAs(self): # error if we set parent=self - filename = tkFileDialog.asksaveasfilename( + filename = tkinter.filedialog.asksaveasfilename( parent=self.parent, defaultextension='.py', filetypes=[('Python Source Files', '.py'), diff --git a/toontown/src/coghq/InGameEditorDCImports.py b/toontown/src/coghq/InGameEditorDCImports.py index d747c8d7..250182ad 100644 --- a/toontown/src/coghq/InGameEditorDCImports.py +++ b/toontown/src/coghq/InGameEditorDCImports.py @@ -1,7 +1,3 @@ -"""This file exists so we can switchably include these files, which -are not imported or shipped in production code, but are handy in the -development environment. """ - if __dev__: from direct.directutil import DistributedLargeBlobSender - import DistributedInGameEditor + from . import DistributedInGameEditor \ No newline at end of file diff --git a/toontown/src/coghq/InGameEditorDCImportsAI.py b/toontown/src/coghq/InGameEditorDCImportsAI.py index 772be917..159cdf31 100644 --- a/toontown/src/coghq/InGameEditorDCImportsAI.py +++ b/toontown/src/coghq/InGameEditorDCImportsAI.py @@ -4,4 +4,4 @@ if __dev__: from direct.directutil import DistributedLargeBlobSenderAI - import DistributedInGameEditorAI + from . import DistributedInGameEditorAI diff --git a/toontown/src/coghq/LawOfficeBase.py b/toontown/src/coghq/LawOfficeBase.py index a3925cf9..bb10b958 100644 --- a/toontown/src/coghq/LawOfficeBase.py +++ b/toontown/src/coghq/LawOfficeBase.py @@ -1,6 +1,6 @@ """FactoryBase module: contains the FactoryBase class""" -import FactorySpecs +from . import FactorySpecs from otp.level import LevelSpec from toontown.toonbase import ToontownGlobals @@ -25,7 +25,7 @@ def getFactoryType(self): def getEntityTypeReg(self): # return an EntityTypeRegistry with information about the # entity types that factories use - import FactoryEntityTypes + from . import FactoryEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(FactoryEntityTypes) return typeReg diff --git a/toontown/src/coghq/LawOfficeFloorSpecs.py b/toontown/src/coghq/LawOfficeFloorSpecs.py index 59f3ea52..173262bb 100644 --- a/toontown/src/coghq/LawOfficeFloorSpecs.py +++ b/toontown/src/coghq/LawOfficeFloorSpecs.py @@ -34,8 +34,8 @@ def getNumBattles(floorId): # dict of roomId to spec Python module LawbotOfficeSpecModules = {} -for roomName, roomId in LawbotOfficeFloorName2FloorId.items(): - exec 'from toontown.coghq import %s' % roomName +for roomName, roomId in list(LawbotOfficeFloorName2FloorId.items()): + exec('from toontown.coghq import %s' % roomName) LawbotOfficeSpecModules[roomId] = eval(roomName) ## until cogs are entities... @@ -45,7 +45,7 @@ def getNumBattles(floorId): } floorId2numBattles = {} -for roomName, roomId in LawbotOfficeFloorName2FloorId.items(): +for roomName, roomId in list(LawbotOfficeFloorName2FloorId.items()): if roomName not in CogSpecModules: floorId2numBattles[roomId] = 0 else: diff --git a/toontown/src/coghq/LawOfficeLayout.py b/toontown/src/coghq/LawOfficeLayout.py index 5d729694..4c97af8e 100644 --- a/toontown/src/coghq/LawOfficeLayout.py +++ b/toontown/src/coghq/LawOfficeLayout.py @@ -20,8 +20,8 @@ LawbotFloorSpecs = {} -for floorIndex, floorSpec in Index2Spec.items(): - exec 'from toontown.coghq import %s' % floorSpec +for floorIndex, floorSpec in list(Index2Spec.items()): + exec('from toontown.coghq import %s' % floorSpec) #print("Importing LawOffice Spec %s" % (floorSpec)) LawbotFloorSpecs[floorIndex] = eval(floorSpec) diff --git a/toontown/src/coghq/LawOfficeManagerAI.py b/toontown/src/coghq/LawOfficeManagerAI.py index 4749329a..615de8c5 100644 --- a/toontown/src/coghq/LawOfficeManagerAI.py +++ b/toontown/src/coghq/LawOfficeManagerAI.py @@ -1,6 +1,6 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedLawOfficeAI -import DistributedStageAI +from . import DistributedLawOfficeAI +from . import DistributedStageAI from toontown.coghq import StageLayout from toontown.toonbase import ToontownGlobals from direct.showbase import DirectObject @@ -45,7 +45,7 @@ def createLawOffice(self, StageId, entranceId, players): if bboard.has('stageRoom-%s' % avId): roomId = bboard.get('stageRoom-%s' % avId) for lt in StageId2Layouts[StageId]: - for i in xrange(StageLayout.getNumFloors(lt)): + for i in range(StageLayout.getNumFloors(lt)): layout = StageLayout.StageLayout(StageId, i, stageLayout=lt) if roomId in layout.getRoomIds(): layoutIndex = lt diff --git a/toontown/src/coghq/LawbotCogHQLoader.py b/toontown/src/coghq/LawbotCogHQLoader.py index 5c8afc78..e75387fd 100644 --- a/toontown/src/coghq/LawbotCogHQLoader.py +++ b/toontown/src/coghq/LawbotCogHQLoader.py @@ -1,16 +1,16 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import StateData -import CogHQLoader +from . import CogHQLoader from toontown.toonbase import ToontownGlobals from direct.gui import DirectGui from toontown.toonbase import TTLocalizer from toontown.toon import Toon from direct.fsm import State -import StageInterior -import LawbotHQExterior -import LawbotHQBossBattle -import LawbotOfficeExterior +from . import StageInterior +from . import LawbotHQExterior +from . import LawbotHQBossBattle +from . import LawbotOfficeExterior # Used to compensate for scaling of Cog tunnel sign's # original aspect ratio of 1125x813 to a uniform ratio, diff --git a/toontown/src/coghq/LawbotLegFactoryCogs.py b/toontown/src/coghq/LawbotLegFactoryCogs.py index 8776e26e..80fd5a73 100644 --- a/toontown/src/coghq/LawbotLegFactoryCogs.py +++ b/toontown/src/coghq/LawbotLegFactoryCogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * ###### TO BE CONVERTED TO ENTITY SYSTEM ###### # entIds of entities that the cogs are put under diff --git a/toontown/src/coghq/LawbotOfficeBoilerRoom_Battle00_Cogs.py b/toontown/src/coghq/LawbotOfficeBoilerRoom_Battle00_Cogs.py index 173e0f8b..b2a7dd8f 100644 --- a/toontown/src/coghq/LawbotOfficeBoilerRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeBoilerRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeBoilerRoom_Trap00_Cogs.py b/toontown/src/coghq/LawbotOfficeBoilerRoom_Trap00_Cogs.py index 4e9cc02b..1e8c2fcb 100644 --- a/toontown/src/coghq/LawbotOfficeBoilerRoom_Trap00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeBoilerRoom_Trap00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeDiamondRoom_Battle00_Cogs.py b/toontown/src/coghq/LawbotOfficeDiamondRoom_Battle00_Cogs.py index f36345d0..30c4d492 100644 --- a/toontown/src/coghq/LawbotOfficeDiamondRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeDiamondRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeDiamondRoom_Trap00_Cogs.py b/toontown/src/coghq/LawbotOfficeDiamondRoom_Trap00_Cogs.py index a6aa86b3..91baf2fa 100644 --- a/toontown/src/coghq/LawbotOfficeDiamondRoom_Trap00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeDiamondRoom_Trap00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeExterior.py b/toontown/src/coghq/LawbotOfficeExterior.py index 3be55414..5808eedd 100644 --- a/toontown/src/coghq/LawbotOfficeExterior.py +++ b/toontown/src/coghq/LawbotOfficeExterior.py @@ -5,7 +5,7 @@ from toontown.toonbase import ToontownGlobals from toontown.building import Elevator from pandac.PandaModules import * -import FactoryExterior +from . import FactoryExterior class LawbotOfficeExterior(FactoryExterior.FactoryExterior): # create a notify category diff --git a/toontown/src/coghq/LawbotOfficeGearRoom_Battle00_Cogs.py b/toontown/src/coghq/LawbotOfficeGearRoom_Battle00_Cogs.py index f36345d0..30c4d492 100644 --- a/toontown/src/coghq/LawbotOfficeGearRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeGearRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeLobby_Trap00_Cogs.py b/toontown/src/coghq/LawbotOfficeLobby_Trap00_Cogs.py index e640c5c1..78cee3c1 100644 --- a/toontown/src/coghq/LawbotOfficeLobby_Trap00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeLobby_Trap00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeOilRoom_Battle00_Cogs.py b/toontown/src/coghq/LawbotOfficeOilRoom_Battle00_Cogs.py index a882c0ca..1488ddb8 100644 --- a/toontown/src/coghq/LawbotOfficeOilRoom_Battle00_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeOilRoom_Battle00_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LawbotOfficeOilRoom_Battle01_Cogs.py b/toontown/src/coghq/LawbotOfficeOilRoom_Battle01_Cogs.py index da6f40d1..d6449fbd 100644 --- a/toontown/src/coghq/LawbotOfficeOilRoom_Battle01_Cogs.py +++ b/toontown/src/coghq/LawbotOfficeOilRoom_Battle01_Cogs.py @@ -1,4 +1,4 @@ -from SpecImports import * +from .SpecImports import * from toontown.toonbase import ToontownGlobals ###### TO BE CONVERTED TO ENTITY SYSTEM ###### diff --git a/toontown/src/coghq/LevelBattleManagerAI.py b/toontown/src/coghq/LevelBattleManagerAI.py index 6084d2aa..bc48aafc 100644 --- a/toontown/src/coghq/LevelBattleManagerAI.py +++ b/toontown/src/coghq/LevelBattleManagerAI.py @@ -21,16 +21,16 @@ def __init__(self, air, level, battleCtor, battleExpAggreg=None): self.battleExpAggreg = battleExpAggreg def destroyBattleMgr(self): - battles = self.cellId2battle.values() + battles = list(self.cellId2battle.values()) for battle in battles: self.destroy(battle) - for cellId, battleBlocker in self.battleBlockers.items(): + for cellId, battleBlocker in list(self.battleBlockers.items()): if battleBlocker is not None: battleBlocker.deactivate() del self.battleBlockers del self.cellId2battle del self.battleExpAggreg - + def newBattle(self, cellId, zoneId, pos, suit, toonId, roundCallback=None, finishCallback=None, maxSuits=4): @@ -67,7 +67,7 @@ def newBattle(self, cellId, zoneId, pos, suit, toonId, battle.generateWithRequired(zoneId) self.cellId2battle[cellId] = battle - + return battle def addBattleBlocker(self, blocker, cellId): diff --git a/toontown/src/coghq/LevelSuitPlannerAI.py b/toontown/src/coghq/LevelSuitPlannerAI.py index 845adecb..d55f687a 100644 --- a/toontown/src/coghq/LevelSuitPlannerAI.py +++ b/toontown/src/coghq/LevelSuitPlannerAI.py @@ -3,9 +3,10 @@ from direct.showbase import DirectObject from toontown.suit import SuitDNA from direct.directnotify import DirectNotifyGlobal -import LevelBattleManagerAI +from . import LevelBattleManagerAI import types import random +import functools class LevelSuitPlannerAI(DirectObject.DirectObject): @@ -33,7 +34,7 @@ def __init__(self, air, level, cogCtor, battleCtor, cogSpecs, # create a dict that will keep track of what suits are attached # to what battle cell self.battleCellId2suits = {} - for id in self.battleCellSpecs.keys(): + for id in list(self.battleCellSpecs.keys()): self.battleCellId2suits[id] = [] def destroy(self): @@ -45,7 +46,7 @@ def destroy(self): del self.cogCtor del self.level del self.air - + def __genJoinChances( self, num ): """ //////////////////////////////////////////////////////////////////// @@ -57,12 +58,12 @@ def __genJoinChances( self, num ): joinChances = [] for currChance in range( num ): joinChances.append( random.randint( 1, 100 ) ) - joinChances.sort( cmp ) + joinChances.sort( key=functools.cmp_to_key(cmp) ) return joinChances def __genSuitInfos(self, level, track): if __dev__: - assert type(level) == types.IntType + assert type(level) == int def getSuitDict(spec, cogId, level=level, track=track): suitDict = {} @@ -76,7 +77,7 @@ def getSuitDict(spec, cogId, level=level, track=track): suitDict['level'] += level suitDict['cogId'] = cogId return suitDict - + # Build a dictionary with types, levels, and locations for suits self.suitInfos = {} self.suitInfos['activeSuits'] = [] @@ -85,7 +86,7 @@ def getSuitDict(spec, cogId, level=level, track=track): self.suitInfos['activeSuits'].append(getSuitDict(spec, i)) # reserveSuits - + numReserve = len(self.reserveCogSpecs) joinChances = self.__genJoinChances(numReserve) self.suitInfos['reserveSuits'] = [] @@ -179,7 +180,7 @@ def requestBattle(self, suit, toonId): battle.fsm.getCurrentState().getName(), toonId)) else: self.notify.warning('battle not joinable: no battle for cell %s, toonId=%s' % (cellIndex, toonId)) - + return 0 return 1 @@ -236,7 +237,7 @@ def __handleRoundFinished(self, cellId, toonIds, totalHp, deadSuits): # SDN: fsm-ify this? self.reservesJoining(battle) - + level.d_setSuits() return @@ -254,7 +255,7 @@ def __handleRoundFinished(self, cellId, toonIds, totalHp, deadSuits): def __handleBattleFinished(self, zoneId): pass - + def reservesJoining(self, battle): # note, once we put in the animation for suits joining battle # we should delay this code by the time it takes to play the animation @@ -262,7 +263,7 @@ def reservesJoining(self, battle): battle.suitRequestJoin(info[0]) battle.resume() self.joinedReserves = [] - + def getDoId(self): # This is a dummy function so we don't need to modify DistributedSuit return 0 @@ -278,7 +279,7 @@ def suitBattleCellChange(self, suit, oldCell, newCell): self.battleCellId2suits[oldCell].remove(suit) else: self.notify.warning('FIXME crash bandaid suitBattleCellChange suit.doId =%s, oldCell=%s not in battleCellId2Suits.keys %s' % - (suit.doId, oldCell, self.battleCellId2suits.keys())) + (suit.doId, oldCell, list(self.battleCellId2suits.keys()))) # remove suit from battle blocker blocker = self.battleMgr.battleBlockers.get(oldCell) if blocker: @@ -288,7 +289,7 @@ def suitBattleCellChange(self, suit, oldCell, newCell): # register suit with the blocker for this newCell def addSuitToBlocker(self=self): - blocker = self.battleMgr.battleBlockers.get(newCell) + blocker = self.battleMgr.battleBlockers.get(newCell) if blocker: blocker.addSuit(suit) return 1 @@ -297,6 +298,6 @@ def addSuitToBlocker(self=self): if not addSuitToBlocker(): # wait for the creation of this blocker, then add this suit self.accept(self.getBattleBlockerEvent(newCell), addSuitToBlocker) - + def getBattleBlockerEvent(self, cellId): return "battleBlockerAdded-"+str(self.level.doId)+"-"+str(cellId) diff --git a/toontown/src/coghq/LiftConstants.py b/toontown/src/coghq/LiftConstants.py index ed21fdda..d8a47f6e 100644 --- a/toontown/src/coghq/LiftConstants.py +++ b/toontown/src/coghq/LiftConstants.py @@ -5,4 +5,4 @@ def oppositeState(state): if state is Down: return Up else: - return Down + return Down \ No newline at end of file diff --git a/toontown/src/coghq/LobbyManager.py b/toontown/src/coghq/LobbyManager.py index a7cc7848..39ebd521 100644 --- a/toontown/src/coghq/LobbyManager.py +++ b/toontown/src/coghq/LobbyManager.py @@ -1,28 +1,27 @@ -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from toontown.toonbase import ToontownGlobals from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer class LobbyManager(DistributedObject.DistributedObject): - notify = DirectNotifyGlobal.directNotify.newCategory("LobbyManager") - - SetFactoryZoneMsg = "setFactoryZone" + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('LobbyManager') + SetFactoryZoneMsg = 'setFactoryZone' def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) def generate(self): - self.notify.debug("generate") + self.notify.debug('generate') DistributedObject.DistributedObject.generate(self) def disable(self): - self.notify.debug("disable") + self.notify.debug('disable') self.ignoreAll() - DistributedObject.DistributedObject.disable(self) def getSuitDoorOrigin(self): return 1 def getBossLevel(self): - return 0 + return 0 \ No newline at end of file diff --git a/toontown/src/coghq/MintInterior.py b/toontown/src/coghq/MintInterior.py index fa4a423d..01bc8097 100644 --- a/toontown/src/coghq/MintInterior.py +++ b/toontown/src/coghq/MintInterior.py @@ -1,7 +1,6 @@ - from direct.directnotify import DirectNotifyGlobal from toontown.battle import BattlePlace -from direct.fsm import ClassicFSM, State +from direct.fsm import ClassicFSM from direct.fsm import State from direct.showbase import BulletinBoardWatcher from pandac.PandaModules import * @@ -14,126 +13,56 @@ from toontown.coghq import DistributedMint class MintInterior(BattlePlace.BattlePlace): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("MintInterior") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('MintInterior') + def __init__(self, loader, parentFSM, doneEvent): - assert(MintInterior.notify.debug("MintInterior()")) BattlePlace.BattlePlace.__init__(self, loader, doneEvent) self.parentFSM = parentFSM - # this is put on the loader by CashbotCogHQLoader.enterMintInterior self.zoneId = loader.mintId - # any state that we might be in when someone beats the mint - # needs to have a transition to teleportout - self.fsm = ClassicFSM.ClassicFSM('MintInterior', - [State.State('start', - self.enterStart, - self.exitStart, - ['walk', - 'teleportIn', - 'fallDown', - ]), - State.State('walk', - self.enterWalk, - self.exitWalk, - ['push', 'sit', 'stickerBook', - 'WaitForBattle', 'battle', - 'died', 'teleportOut', 'squished', - 'DFA', 'fallDown', 'stopped' - ]), - State.State('stopped', - self.enterStopped, - self.exitStopped, - ['walk', 'teleportOut', 'stickerBook', - ]), - State.State('sit', - self.enterSit, - self.exitSit, - ['walk', 'died', 'teleportOut',]), - State.State('push', - self.enterPush, - self.exitPush, - ['walk', 'died', 'teleportOut',]), - State.State('stickerBook', - self.enterStickerBook, - self.exitStickerBook, - ['walk', 'battle', 'DFA', - 'WaitForBattle', 'died', 'teleportOut', - ]), - # This needs a transition to teleportOut to allow - # the toon to leave after beating the mint. - # When localToon leaves the battle, battle gets - # a setMembers with no localToon, enables its - # collision sphere, collides with localToon, puts - # localToon in WaitForBattle. - State.State('WaitForBattle', - self.enterWaitForBattle, - self.exitWaitForBattle, - ['battle', 'walk', 'died', - 'teleportOut',]), - State.State('battle', - self.enterBattle, - self.exitBattle, - ['walk', 'teleportOut', 'died',]), - State.State('fallDown', - self.enterFallDown, - self.exitFallDown, - ['walk', 'died', 'teleportOut',]), - State.State('squished', - self.enterSquished, - self.exitSquished, - ['walk', 'died', 'teleportOut',]), - State.State('teleportIn', - self.enterTeleportIn, - self.exitTeleportIn, - ['walk', 'teleportOut', 'quietZone', 'died',]), - State.State('teleportOut', - self.enterTeleportOut, - self.exitTeleportOut, - ['teleportIn', 'FLA', 'quietZone', - 'WaitForBattle']), - # Download Force Acknowledge - State.State('DFA', - self.enterDFA, - self.exitDFA, - ['DFAReject', 'teleportOut']), - State.State('DFAReject', - self.enterDFAReject, - self.exitDFAReject, - ['walk' 'teleportOut',]), - State.State('died', - self.enterDied, - self.exitDied, - ['teleportOut']), - # Forced Leave Acknowledge - State.State('FLA', - self.enterFLA, - self.exitFLA, - ['quietZone']), - State.State('quietZone', - self.enterQuietZone, - self.exitQuietZone, - ['teleportIn']), - State.State('final', - self.enterFinal, - self.exitFinal, - ['start'])], - - # Initial State - 'start', - # Final State - 'final', - ) - + self.fsm = ClassicFSM.ClassicFSM('MintInterior', [ + State.State('start', self.enterStart, self.exitStart, [ + 'walk', 'teleportIn', 'fallDown']), + State.State('walk', self.enterWalk, self.exitWalk, [ + 'push', 'sit', 'stickerBook', 'WaitForBattle', 'battle', 'died', 'teleportOut', 'squished', 'DFA', 'fallDown']), + State.State('sit', self.enterSit, self.exitSit, [ + 'walk', 'died', 'teleportOut']), + State.State('push', self.enterPush, self.exitPush, [ + 'walk', 'died', 'teleportOut']), + State.State('stickerBook', self.enterStickerBook, self.exitStickerBook, [ + 'walk', 'battle', 'DFA', 'WaitForBattle', 'died', 'teleportOut']), + State.State('WaitForBattle', self.enterWaitForBattle, self.exitWaitForBattle, [ + 'battle', 'walk', 'died', 'teleportOut']), + State.State('battle', self.enterBattle, self.exitBattle, [ + 'walk', 'teleportOut', 'died']), + State.State('fallDown', self.enterFallDown, self.exitFallDown, [ + 'walk', 'died', 'teleportOut']), + State.State('squished', self.enterSquished, self.exitSquished, [ + 'walk', 'died', 'teleportOut']), + State.State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, [ + 'walk', 'teleportOut', 'quietZone', 'died']), + State.State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, [ + 'teleportIn', 'FLA', 'quietZone', 'WaitForBattle']), + State.State('DFA', self.enterDFA, self.exitDFA, [ + 'DFAReject', 'teleportOut']), + State.State('DFAReject', self.enterDFAReject, self.exitDFAReject, [ + 'walkteleportOut']), + State.State('died', self.enterDied, self.exitDied, [ + 'teleportOut']), + State.State('FLA', self.enterFLA, self.exitFLA, [ + 'quietZone']), + State.State('quietZone', self.enterQuietZone, self.exitQuietZone, [ + 'teleportIn']), + State.State('final', self.enterFinal, self.exitFinal, [ + 'start'])], 'start', 'final') def load(self): - self.parentFSM.getStateNamed("mintInterior").addChild(self.fsm) + self.parentFSM.getStateNamed('mintInterior').addChild(self.fsm) BattlePlace.BattlePlace.load(self) self.music = base.loadMusic('phase_9/audio/bgm/CHQ_FACT_bg.mid') def unload(self): - self.parentFSM.getStateNamed("mintInterior").removeChild(self.fsm) + self.parentFSM.getStateNamed('mintInterior').removeChild(self.fsm) del self.music del self.fsm del self.parentFSM @@ -142,121 +71,84 @@ def unload(self): def enter(self, requestStatus): self.fsm.enterInitialState() base.transitions.fadeOut(t=0) - - # While we are here, we ignore invasion credit. base.localAvatar.inventory.setRespectInvasions(0) - - # Cheesy rendering effects are not allowed in mints. base.cr.forbidCheesyEffects(1) - # wait until the mint and any distributed entities have been - # created before moving on def commence(self=self): - # Turn on the little red arrows. NametagGlobals.setMasterArrowsOn(1) - self.fsm.request(requestStatus["how"], [requestStatus]) - base.playMusic(self.music, looping = 1, volume = 0.8) + self.fsm.request(requestStatus['how'], [requestStatus]) + base.playMusic(self.music, looping=1, volume=0.8) base.transitions.irisIn() mint = bboard.get(DistributedMint.DistributedMint.ReadyPost) self.loader.hood.spawnTitleText(mint.mintId, mint.floorNum) - # as soon as the mint is ready, proceed - self.mintReadyWatcher = BulletinBoardWatcher.BulletinBoardWatcher( - 'MintReady', DistributedMint.DistributedMint.ReadyPost, commence) + self.mintReadyWatcher = BulletinBoardWatcher.BulletinBoardWatcher('MintReady', DistributedMint.DistributedMint.ReadyPost, commence) self.mintDefeated = 0 - self.acceptOnce(DistributedMint.DistributedMint.WinEvent, - self.handleMintWinEvent) + self.acceptOnce(DistributedMint.DistributedMint.WinEvent, self.handleMintWinEvent) if __debug__ and 0: - # make F10 simulate someone else winning the mint - self.accept('f10', - lambda: messenger.send( - DistributedMint.DistributedMint.WinEvent)) - + self.accept('f10', lambda : messenger.send(DistributedMint.DistributedMint.WinEvent)) self.confrontedBoss = 0 + def handleConfrontedBoss(self=self): self.confrontedBoss = 1 + self.acceptOnce('localToonConfrontedMintBoss', handleConfrontedBoss) def exit(self): - # Turn off the little red arrows. NametagGlobals.setMasterArrowsOn(0) - bboard.remove(DistributedMint.DistributedMint.ReadyPost) - - # Restore cheesy rendering effects. base.cr.forbidCheesyEffects(0) - - # Respect invasions again. base.localAvatar.inventory.setRespectInvasions(1) - self.fsm.requestFinalState() self.loader.music.stop() self.music.stop() self.ignoreAll() del self.mintReadyWatcher - # walk state inherited from BattlePlace.py - # Override to turn off teleport def enterWalk(self, teleportIn=0): BattlePlace.BattlePlace.enterWalk(self, teleportIn) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # push state inherited from Place.py - # Override to turn off teleport def enterPush(self): BattlePlace.BattlePlace.enterPush(self) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # waitForBattle state inherited from BattlePlace.py def enterWaitForBattle(self): - MintInterior.notify.debug('enterWaitForBattle') + MintInterior.notify.info('enterWaitForBattle') BattlePlace.BattlePlace.enterWaitForBattle(self) - # make sure we're under render, and make sure everyone else knows it if base.localAvatar.getParent() != render: base.localAvatar.wrtReparentTo(render) base.localAvatar.b_setParent(ToontownGlobals.SPRender) def exitWaitForBattle(self): - MintInterior.notify.debug('exitWaitForBattle') + MintInterior.notify.info('exitWaitForBattle') BattlePlace.BattlePlace.exitWaitForBattle(self) - # battle state inherited from BattlePlace.py - # Override to turn off teleport and control music def enterBattle(self, event): - MintInterior.notify.debug('enterBattle') + MintInterior.notify.info('enterBattle') self.music.stop() BattlePlace.BattlePlace.enterBattle(self, event) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # Override to set bldg flag and creditMultiplier def enterTownBattle(self, event): - # this assumes that our 'zoneId' is going to be set to the appropriate - # faux-zone, and that we continue to use the faux-zone as the mint - # ID mult = ToontownBattleGlobals.getMintCreditMultiplier(self.zoneId) base.localAvatar.inventory.setBattleCreditMultiplier(mult) - self.loader.townBattle.enter(event, self.fsm.getStateNamed("battle"), - bldg=1, creditMultiplier=mult) + self.loader.townBattle.enter(event, self.fsm.getStateNamed('battle'), bldg=1, creditMultiplier=mult) - # Override to control our own music def exitBattle(self): - MintInterior.notify.debug('exitBattle') + MintInterior.notify.info('exitBattle') BattlePlace.BattlePlace.exitBattle(self) self.loader.music.stop() - base.playMusic(self.music, looping = 1, volume = 0.8) + base.playMusic(self.music, looping=1, volume=0.8) - # sticker book state inherited from BattlePlace.py - # Override to turn off teleport - def enterStickerBook(self, page = None): + def enterStickerBook(self, page=None): BattlePlace.BattlePlace.enterStickerBook(self, page) self.ignore('teleportQuery') base.localAvatar.setTeleportAvailable(0) - # sit state inherited from BattlePlace.py - # Override to turn off teleport def enterSit(self): BattlePlace.BattlePlace.enterSit(self) self.ignore('teleportQuery') @@ -266,93 +158,67 @@ def enterZone(self, zoneId): pass def enterTeleportOut(self, requestStatus): - MintInterior.notify.debug('enterTeleportOut()') - BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, - self.__teleportOutDone) + MintInterior.notify.info('enterTeleportOut()') + BattlePlace.BattlePlace.enterTeleportOut(self, requestStatus, self.__teleportOutDone) def __processLeaveRequest(self, requestStatus): - hoodId = requestStatus["hoodId"] - if (hoodId == ToontownGlobals.MyEstate): + hoodId = requestStatus['hoodId'] + if hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: - # Different hood or zone, exit the safe zone self.doneStatus = requestStatus messenger.send(self.doneEvent) def __teleportOutDone(self, requestStatus): - MintInterior.notify.debug('__teleportOutDone()') + MintInterior.notify.info('__teleportOutDone()') messenger.send('leavingMint') - messenger.send("localToonLeft") - - # we've played the teleport-out sequence; if we just got booted - # out of the mint because the foreman was defeated, and we - # were not in the battle, show a dialog to let the player know - # what happened - if self.mintDefeated and (not self.confrontedBoss): - # Forced Leave Ack + messenger.send('localToonLeft') + if self.mintDefeated and not self.confrontedBoss: self.fsm.request('FLA', [requestStatus]) else: self.__processLeaveRequest(requestStatus) - + def exitTeleportOut(self): - MintInterior.notify.debug('exitTeleportOut()') + MintInterior.notify.info('exitTeleportOut()') BattlePlace.BattlePlace.exitTeleportOut(self) - - def handleMintWinEvent(self): - """this handler is called when the mint has been defeated""" - MintInterior.notify.debug('handleMintWinEvent') - # if we're in the process of dying, ignore this - if (base.cr.playGame.getPlace().fsm.getCurrentState().getName() == - 'died'): + def handleMintWinEvent(self): + MintInterior.notify.info('handleMintWinEvent') + if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died': return - - # update our flag self.mintDefeated = 1 - if 1: - # go back to HQ zoneId = ZoneUtil.getHoodId(self.zoneId) else: - # go back to the playground zoneId = ZoneUtil.getSafeZoneId(base.localAvatar.defaultZone) - self.fsm.request('teleportOut', [{ - "loader": ZoneUtil.getLoaderName(zoneId), - "where": ZoneUtil.getToonWhereName(zoneId), - "how": "teleportIn", - "hoodId": zoneId, - "zoneId": zoneId, - "shardId": None, - "avId": -1, - }]) - - # died state - def enterDied(self, requestStatus, callback = None): - MintInterior.notify.debug('enterDied') + self.fsm.request('teleportOut', [{'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}]) + return + + def enterDied(self, requestStatus, callback=None): + MintInterior.notify.info('enterDied') + def diedDone(requestStatus, self=self, callback=callback): if callback is not None: callback() messenger.send('leavingMint') self.doneStatus = requestStatus messenger.send(self.doneEvent) + return + BattlePlace.BattlePlace.enterDied(self, requestStatus, diedDone) - # Forced Leave Ack state def enterFLA(self, requestStatus): - MintInterior.notify.debug('enterFLA') - # inform the player about why they got booted from the mint - self.flaDialog = TTDialog.TTGlobalDialog( - message = TTLocalizer.ForcedLeaveMintAckMsg, - doneEvent = 'FLADone', style = TTDialog.Acknowledge, - fadeScreen = 1, - ) + MintInterior.notify.info('enterFLA') + self.flaDialog = TTDialog.TTGlobalDialog(message=TTLocalizer.ForcedLeaveMintAckMsg, doneEvent='FLADone', style=TTDialog.Acknowledge, fadeScreen=1) + def continueExit(self=self, requestStatus=requestStatus): self.__processLeaveRequest(requestStatus) + self.accept('FLADone', continueExit) self.flaDialog.show() def exitFLA(self): - MintInterior.notify.debug('exitFLA') + MintInterior.notify.info('exitFLA') if hasattr(self, 'flaDialog'): self.flaDialog.cleanup() - del self.flaDialog + del self.flaDialog \ No newline at end of file diff --git a/toontown/src/coghq/MintLayout.py b/toontown/src/coghq/MintLayout.py index cd184c64..75e76f81 100644 --- a/toontown/src/coghq/MintLayout.py +++ b/toontown/src/coghq/MintLayout.py @@ -6,298 +6,169 @@ import random def printAllCashbotInfo(): - # print out roomId->room name - print 'roomId: roomName' - for roomId, roomName in MintRoomSpecs.CashbotMintRoomId2RoomName.items(): - print '%s: %s' % (roomId, roomName) - # print out # of battles in each room - print '\nroomId: numBattles' - for roomId, numBattles in MintRoomSpecs.roomId2numBattles.items(): - print '%s: %s' % (roomId, numBattles) - # print out all of the rooms in all mint floors - print '\nmintId floor roomIds' + print('roomId: roomName') + for (roomId, roomName) in list(MintRoomSpecs.CashbotMintRoomId2RoomName.items()): + print('%s: %s' % (roomId, roomName)) + + print('\nroomId: numBattles') + for (roomId, numBattles) in list(MintRoomSpecs.roomId2numBattles.items()): + print('%s: %s' % (roomId, numBattles)) + + print('\nmintId floor roomIds') printMintRoomIds() - # print out # of rooms in each mint floor - print '\nmintId floor numRooms' + print('\nmintId floor numRooms') printNumRooms() - # print out # of non-skippable battles in each mint floor - print '\nmintId floor numForcedBattles' + print('\nmintId floor numBattles') printNumBattles() - -# print out info on all mint levels for Cashbot + + def iterateCashbotMints(func): - # func takes MintLayout from toontown.toonbase import ToontownGlobals - for mintId in [ToontownGlobals.CashbotMintIntA, - ToontownGlobals.CashbotMintIntB, - ToontownGlobals.CashbotMintIntC,]: - for floorNum in xrange(ToontownGlobals.MintNumFloors[mintId]): + for mintId in [ToontownGlobals.CashbotMintIntA, ToontownGlobals.CashbotMintIntB, ToontownGlobals.CashbotMintIntC]: + for floorNum in range(ToontownGlobals.MintNumFloors[mintId]): func(MintLayout(mintId, floorNum)) + def printMintInfo(): - def func(ml): print ml + + def func(ml): + print(ml) + iterateCashbotMints(func) + + def printMintRoomIds(): - def func(ml): print ml.getMintId(), ml.getFloorNum(), ml.getRoomIds() + + def func(ml): + print(ml.getMintId(), ml.getFloorNum(), ml.getRoomIds()) + iterateCashbotMints(func) + + def printMintRoomNames(): - def func(ml): print ml.getMintId(), ml.getFloorNum(), ml.getRoomNames() + + def func(ml): + print(ml.getMintId(), ml.getFloorNum(), ml.getRoomNames()) + iterateCashbotMints(func) + + def printNumRooms(): - def func(ml): print ml.getMintId(), ml.getFloorNum(), ml.getNumRooms() + + def func(ml): + print(ml.getMintId(), ml.getFloorNum(), ml.getNumRooms()) + iterateCashbotMints(func) + + def printNumBattles(): - def func(ml): print ml.getMintId(), ml.getFloorNum(), ml.getNumBattles() + + def func(ml): + print(ml.getMintId(), ml.getFloorNum(), ml.getNumBattles()) + iterateCashbotMints(func) -BakedFloorLayouts = { - 12500: {0: (0, 4, 9, 6, 5, 8, 17,), - 1: (0, 15, 13, 16, 7, 6, 22,), - 2: (0, 4, 11, 3, 9, 6, 14, 19,), - 3: (0, 1, 3, 4, 16, 14, 15, 24,), - 4: (0, 15, 5, 8, 9, 11, 10, 21,), - 5: (0, 13, 12, 8, 7, 16, 10, 18,), - 6: (0, 16, 13, 5, 12, 7, 1, 23,), - 7: (0, 10, 12, 7, 3, 13, 16, 8, 20,), - 8: (0, 3, 5, 7, 6, 1, 4, 9, 25,), - 9: (0, 6, 9, 10, 13, 16, 8, 4, 22,), - 10: (0, 13, 1, 7, 2, 16, 11, 3, 19,), - 11: (0, 3, 1, 6, 4, 14, 8, 9, 24,), - 12: (0, 7, 14, 2, 1, 8, 5, 10, 11, 21,), - 13: (0, 13, 6, 4, 11, 3, 9, 10, 8, 17,), - 14: (0, 15, 5, 1, 14, 10, 4, 7, 16, 23,), - 15: (0, 16, 10, 11, 2, 1, 3, 14, 5, 20,), - 16: (0, 5, 8, 10, 6, 3, 15, 14, 7, 25,), - 17: (0, 12, 13, 5, 8, 14, 11, 7, 16, 10, 22,), - 18: (0, 11, 3, 15, 7, 16, 14, 6, 1, 5, 18,), - 19: (0, 10, 16, 11, 3, 5, 12, 13, 7, 14, 24,), - }, - 12600: {0: (0, 8, 1, 6, 14, 2, 5, 9, 17,), - 1: (0, 4, 14, 7, 2, 13, 8, 9, 18,), - 2: (0, 7, 9, 6, 5, 14, 12, 3, 20,), - 3: (0, 6, 2, 13, 16, 7, 5, 3, 9, 22,), - 4: (0, 15, 4, 9, 8, 6, 13, 5, 11, 23,), - 5: (0, 13, 7, 14, 15, 11, 3, 2, 8, 25,), - 6: (0, 5, 14, 2, 11, 7, 16, 10, 15, 18,), - 7: (0, 10, 9, 5, 4, 2, 7, 13, 11, 19,), - 8: (0, 11, 4, 12, 6, 1, 13, 7, 3, 21,), - 9: (0, 15, 16, 5, 13, 9, 14, 4, 6, 3, 23,), - 10: (0, 16, 15, 7, 6, 8, 3, 4, 9, 10, 24,), - 11: (0, 5, 8, 4, 12, 13, 9, 11, 16, 3, 17,), - 12: (0, 13, 16, 7, 4, 12, 3, 6, 5, 1, 19,), - 13: (0, 14, 6, 12, 13, 7, 10, 3, 16, 9, 20,), - 14: (0, 9, 15, 13, 5, 6, 3, 14, 11, 4, 22,), - 15: (0, 13, 14, 3, 12, 16, 11, 9, 4, 5, 7, 24,), - 16: (0, 3, 6, 1, 7, 5, 10, 9, 4, 13, 15, 25,), - 17: (0, 3, 6, 14, 4, 13, 16, 12, 8, 5, 7, 18,), - 18: (0, 11, 13, 4, 1, 15, 6, 3, 8, 9, 16, 20,), - 19: (0, 11, 5, 8, 7, 2, 6, 13, 3, 14, 9, 21,), - }, - 12700: {0: (0, 16, 14, 6, 1, 5, 9, 2, 15, 8, 17,), - 1: (0, 3, 2, 12, 14, 8, 13, 6, 10, 7, 23,), - 2: (0, 15, 9, 5, 12, 7, 4, 11, 14, 16, 21,), - 3: (0, 2, 13, 7, 6, 8, 15, 4, 1, 11, 19,), - 4: (0, 12, 7, 4, 6, 10, 14, 13, 16, 15, 11, 17,), - 5: (0, 10, 2, 9, 13, 4, 8, 1, 15, 14, 11, 23,), - 6: (0, 2, 14, 4, 10, 16, 15, 1, 3, 8, 6, 21,), - 7: (0, 14, 11, 1, 7, 9, 10, 12, 8, 5, 2, 19,), - 8: (0, 9, 11, 8, 5, 1, 4, 3, 7, 15, 2, 17,), - 9: (0, 2, 9, 7, 11, 16, 10, 15, 3, 8, 6, 23,), - 10: (0, 4, 10, 6, 8, 7, 15, 2, 1, 3, 13, 21,), - 11: (0, 10, 14, 8, 6, 9, 15, 5, 1, 2, 13, 19,), - 12: (0, 16, 5, 12, 10, 6, 9, 11, 3, 15, 13, 17,), - 13: (0, 1, 3, 6, 14, 4, 10, 12, 15, 13, 16, 24,), - 14: (0, 8, 7, 14, 9, 1, 2, 6, 16, 10, 15, 13, 21,), - 15: (0, 4, 1, 8, 11, 12, 3, 10, 16, 13, 6, 15, 19,), - 16: (0, 6, 3, 10, 4, 1, 2, 13, 11, 5, 15, 16, 17,), - 17: (0, 6, 16, 5, 12, 11, 1, 8, 14, 15, 9, 10, 24,), - 18: (0, 15, 8, 12, 10, 1, 7, 11, 9, 16, 4, 5, 21,), - 19: (0, 10, 2, 16, 5, 6, 11, 13, 7, 12, 1, 3, 19,), - }, - } - -""" -http://www.chem.qmul.ac.uk/software/download/qmc/ch5.pdf - -Selections - -We are often concerned with considering selections of objects, rather than -all the objects. In this instance it is important to distinguish between -two different possible situations; one in which the order of the objects is -important and one in which the order is not. - -Example - -It is possible to select two letters from the letters ABC in 3 ways: AB, -AC, BC. Each selection is called a combination. - -However, - -If the order of the selection matters then there are 6 ways: AB, BA, AC, -CA, BC, CB. Each arrangement is called a permutation. - -In this case, therefore there are 3 combinations and 6 permutations of the -selected two letters. - -In general, _provided_ that all the objects are different (dissimilar), then - -- the number of combinations of r objects from n objects is: - -nCr = n! / [(n-r)! r!] - -- the number of permutations of r objects from n objects is: - -nPr = n! / (n-r)! - -The difference between the two formulae is a factor of r! - this is the -number of ways of arranging r dissimilar objects. For two different -letters, r = 2 and r! = 2 , i.e. for a pair of letters, then each letter -may come first or last, giving rise to two permutations for each -combination. -""" - -""" -For the cashbot mint, we have 3 mints with 20 floors each, for a total of -60 floors. On average, we want each floor to have 5 rooms. Each floor is -created by stringing together a sequence of rooms from a central pool of -rooms. The question is: how many unique rooms do we need in order to create -60 unique floors by stringing those rooms together? - -We definitely want combinations of rooms, not permutations. First, an -implementation of n-Choose-r: - -def factorial(n): - if n == 1: - return 1 - else: - return n * factorial(n-1) - -def nCr(n,r): - return factorial(n)/(factorial(n-r)*factorial(r)) - -n is the unknown; r is 5. We want nCr(n,5) >= 60. - ->>> nCr(8,5) -56 ->>> nCr(9,5) -126 - -We need at least 9 rooms to create 60 unique 5-room combinations. - -**This isn't totally correct; we've got three types of rooms: entrances, middle rooms, and final rooms. -""" class MintLayout: - """Given a mintId and a floor number, generates a series of rooms and - connecting hallways. This is used by the AI and the client, so the data - it stores is symbolic (it doesn't load any models, it builds tables of - IDs etc.)""" - notify = DirectNotifyGlobal.directNotify.newCategory("MintLayout") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('MintLayout') def __init__(self, mintId, floorNum): self.mintId = mintId self.floorNum = floorNum self.roomIds = [] self.hallways = [] - # add one room to account for the entrance room - self.numRooms = 1 + ( - ToontownGlobals.MintNumRooms[self.mintId][self.floorNum]) + self.numRooms = 1 + ToontownGlobals.MintNumRooms[self.mintId][self.floorNum] self.numHallways = self.numRooms - 1 - - # if we have a baked floor layout, use it; otherwise generate a random - # layout - if ((self.mintId in BakedFloorLayouts) and - (self.floorNum in BakedFloorLayouts[self.mintId])): - self.roomIds = list(BakedFloorLayouts[self.mintId][self.floorNum]) - else: - self.roomIds = self._genFloorLayout() - - # pick the hallways - hallwayRng = self.getRng() - connectorRoomNames = MintRoomSpecs.CashbotMintConnectorRooms - for i in xrange(self.numHallways): - self.hallways.append(hallwayRng.choice(connectorRoomNames)) - - def _genFloorLayout(self): rng = self.getRng() + startingRoomNames = MintRoomSpecs.CashbotMintEntrances + middleRoomNames = MintRoomSpecs.CashbotMintMiddleRooms + finalRoomNames = MintRoomSpecs.CashbotMintFinalRooms + numBattlesLeft = ToontownGlobals.MintNumBattles[mintId] - # pick the rooms. Make sure we don't get any repeats. - startingRoomIDs = MintRoomSpecs.CashbotMintEntranceIDs - middleRoomIDs = MintRoomSpecs.CashbotMintMiddleRoomIDs - finalRoomIDs = MintRoomSpecs.CashbotMintFinalRoomIDs + def getRoomId(roomName): + return MintRoomSpecs.CashbotMintRoomName2RoomId[roomName] - # how many battles do we want? - numBattlesLeft = ToontownGlobals.MintNumBattles[self.mintId] + def getRoomName(roomId): + return MintRoomSpecs.CashbotMintRoomId2RoomName[roomId] - # pick the final room first, so we know how many battles we can - # have in the middle rooms - finalRoomId = rng.choice(finalRoomIDs) + finalRoomId = getRoomId(rng.choice(finalRoomNames)) numBattlesLeft -= MintRoomSpecs.getNumBattles(finalRoomId) - middleRoomIds = [] - middleRoomsLeft = self.numRooms-2 - - # we want to hit our target number of battles exactly. - # pick the battle rooms we will use first, then fill in pure-action - # rooms - - # get dict of numBattles->list of rooms - numBattles2middleRoomIds = invertDictLossless( - MintRoomSpecs.middleRoomId2numBattles) - - # get list of all battle rooms + middleRoomsLeft = self.numRooms - 2 + numBattles2middleRoomIds = invertDictLossless(MintRoomSpecs.middleRoomId2numBattles) allBattleRooms = [] - for num, roomIds in numBattles2middleRoomIds.items(): + for (num, roomIds) in list(numBattles2middleRoomIds.items()): if num > 0: allBattleRooms.extend(roomIds) - # Pick out a list of battle rooms that meets our quota exactly. + def chooseBattleRooms(numBattlesLeft, allBattleRoomIds, baseIndex=0, chosenBattleRooms=[]): + while baseIndex < len(allBattleRoomIds): + nextRoomId = allBattleRoomIds[baseIndex] + baseIndex += 1 + newNumBattlesLeft = numBattlesLeft - MintRoomSpecs.middleRoomId2numBattles[nextRoomId] + if newNumBattlesLeft < 0: + continue + elif newNumBattlesLeft == 0: + chosenBattleRooms.append(nextRoomId) + return chosenBattleRooms + chosenBattleRooms.append(nextRoomId) + result = chooseBattleRooms(newNumBattlesLeft, allBattleRoomIds, baseIndex, chosenBattleRooms) + if result is not None: + return result + else: + del chosenBattleRooms[-1:] + else: + return None + + return + while 1: - # make a copy of the list of battle rooms, and shuffle it allBattleRoomIds = list(allBattleRooms) rng.shuffle(allBattleRoomIds) - battleRoomIds = self._chooseBattleRooms(numBattlesLeft, - allBattleRoomIds) + battleRoomIds = chooseBattleRooms(numBattlesLeft, allBattleRoomIds) if battleRoomIds is not None: break - MintLayout.notify.info( - 'could not find a valid set of battle rooms, trying again') + MintLayout.notify.info('could not find a valid set of battle rooms, trying again') middleRoomIds.extend(battleRoomIds) middleRoomsLeft -= len(battleRoomIds) - if middleRoomsLeft > 0: - # choose action rooms for the rest of the middle rooms actionRoomIds = numBattles2middleRoomIds[0] - for i in xrange(middleRoomsLeft): + for i in range(middleRoomsLeft): roomId = rng.choice(actionRoomIds) actionRoomIds.remove(roomId) middleRoomIds.append(roomId) - roomIds = [] - # pick a starting room - roomIds.append(rng.choice(startingRoomIDs)) - # add the chosen middle room IDs in random order + self.roomIds.append(getRoomId(rng.choice(startingRoomNames))) rng.shuffle(middleRoomIds) - roomIds.extend(middleRoomIds) - # add the chosen final room - roomIds.append(finalRoomId) - return roomIds + self.roomIds.extend(middleRoomIds) + self.roomIds.append(finalRoomId) + connectorRoomNames = MintRoomSpecs.CashbotMintConnectorRooms + for i in range(self.numHallways): + self.hallways.append(rng.choice(connectorRoomNames)) + + return def getNumRooms(self): return len(self.roomIds) + def getRoomId(self, n): return self.roomIds[n] + def getRoomIds(self): return self.roomIds[:] + def getRoomNames(self): names = [] for roomId in self.roomIds: names.append(MintRoomSpecs.CashbotMintRoomId2RoomName[roomId]) + return names def getNumHallways(self): return len(self.hallways) + def getHallwayModel(self, n): return self.hallways[n] @@ -305,70 +176,20 @@ def getNumBattles(self): numBattles = 0 for roomId in self.getRoomIds(): numBattles += MintRoomSpecs.roomId2numBattles[roomId] + return numBattles def getMintId(self): return self.mintId + def getFloorNum(self): return self.floorNum - + def getRng(self): - # returns seeded rng corresponding to this mint floor return random.Random(self.mintId * self.floorNum) - - def _chooseBattleRooms(self, - numBattlesLeft, - allBattleRoomIds, - baseIndex=0, - chosenBattleRooms=None, - ): - # returns list of battle room ids that exactly meet numBattlesLeft. - # returns None if unable to exactly meet numBattlesLeft. - # allBattleRoomIds is list of all roomIds to run through in order. - - if chosenBattleRooms is None: - chosenBattleRooms = [] - - # run through all the remaining available rooms, trying each one - # in sequence as the 'next' room - while baseIndex < len(allBattleRoomIds): - # grab the next roomId off the full list - nextRoomId = allBattleRoomIds[baseIndex] - baseIndex += 1 - # using this room, how many battles do we still need to fulfill? - newNumBattlesLeft = ( - numBattlesLeft - - MintRoomSpecs.middleRoomId2numBattles[nextRoomId]) - if newNumBattlesLeft < 0: - # nope, this room puts us over the limit. Try the next one. - continue - elif newNumBattlesLeft == 0: - # woohoo! we've hit the limit exactly. - chosenBattleRooms.append(nextRoomId) - return chosenBattleRooms - # let's see if we can hit the target using this room. - # put the roomId on the 'chosen' list. - chosenBattleRooms.append(nextRoomId) - result = self._chooseBattleRooms(newNumBattlesLeft, - allBattleRoomIds, - baseIndex, - chosenBattleRooms) - if result is not None: - # we hit the target. pass the result on down. - return result - else: - # this room didn't work out. Pop it off the 'chosen' list - # and try the next room. - del chosenBattleRooms[-1:] - else: - # we've run out of rooms to try at this level of recursion. - # return failure. - return None def __str__(self): - return ('MintLayout: id=%s, floor=%s, numRooms=%s, numBattles=%s' % ( - self.mintId, self.floorNum, self.getNumRooms(), - self.getNumBattles())) + return 'MintLayout: id=%s, floor=%s, numRooms=%s, numBattles=%s' % (self.mintId, self.floorNum, self.getNumRooms(), self.getNumBattles()) + def __repr__(self): - return str(self) - + return str(self) \ No newline at end of file diff --git a/toontown/src/coghq/MintManagerAI.py b/toontown/src/coghq/MintManagerAI.py index fe52c3f7..e555d576 100644 --- a/toontown/src/coghq/MintManagerAI.py +++ b/toontown/src/coghq/MintManagerAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedMintAI +from . import DistributedMintAI from toontown.toonbase import ToontownGlobals from toontown.coghq import MintLayout from direct.showbase import DirectObject @@ -43,7 +43,7 @@ def createMint(self, mintId, players): for avId in players: if bboard.has('mintRoom-%s' % avId): roomId = bboard.get('mintRoom-%s' % avId) - for i in xrange(numFloors): + for i in range(numFloors): layout = MintLayout.MintLayout(mintId, i) if roomId in layout.getRoomIds(): floor = i diff --git a/toontown/src/coghq/MintMockup.py b/toontown/src/coghq/MintMockup.py index 17d7a1d6..2acf3c60 100644 --- a/toontown/src/coghq/MintMockup.py +++ b/toontown/src/coghq/MintMockup.py @@ -29,7 +29,7 @@ def __init__(self, name=None, num=None, dbg=0): if dbg: self.showAxes() self.ls() - print self.getPos(render) + print(self.getPos(render)) def __del__(self): self.unload() diff --git a/toontown/src/coghq/MintProduct.py b/toontown/src/coghq/MintProduct.py index 939c3335..9632ea93 100644 --- a/toontown/src/coghq/MintProduct.py +++ b/toontown/src/coghq/MintProduct.py @@ -2,22 +2,17 @@ from otp.level import BasicEntities class MintProduct(BasicEntities.NodePathEntity): - Models = { - CashbotMintIntA : 'phase_10/models/cashbotHQ/MoneyBag', - CashbotMintIntB : 'phase_10/models/cashbotHQ/MoneyStackPallet', - CashbotMintIntC : 'phase_10/models/cashbotHQ/GoldBarStack', - } - Scales = { - CashbotMintIntA : .98, - CashbotMintIntB : .38, - CashbotMintIntC : .6, - } + __module__ = __name__ + Models = {CashbotMintIntA: 'phase_10/models/cashbotHQ/MoneyBag', CashbotMintIntB: 'phase_10/models/cashbotHQ/MoneyStackPallet', CashbotMintIntC: 'phase_10/models/cashbotHQ/GoldBarStack'} + Scales = {CashbotMintIntA: 0.98, CashbotMintIntB: 0.38, CashbotMintIntC: 0.6} + def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) self.model = None self.mintId = self.level.mintId self.loadModel() - + return + def destroy(self): if self.model: self.model.removeNode() @@ -28,14 +23,15 @@ def loadModel(self): if self.model: self.model.removeNode() self.model = None - - self.model = loader.loadModel(self.Models[self.mintId]) + self.model = loader.loadModelCopy(self.Models[self.mintId]) self.model.setScale(self.Scales[self.mintId]) self.model.flattenStrong() if self.model: self.model.reparentTo(self) + return if __dev__: + def setMintId(self, mintId): self.mintId = mintId - self.loadModel() + self.loadModel() \ No newline at end of file diff --git a/toontown/src/coghq/MintProductPallet.py b/toontown/src/coghq/MintProductPallet.py index 9fec5803..16b3d983 100644 --- a/toontown/src/coghq/MintProductPallet.py +++ b/toontown/src/coghq/MintProductPallet.py @@ -1,16 +1,7 @@ from toontown.toonbase.ToontownGlobals import * from toontown.coghq import MintProduct -# MintProductPallet is very close to MintProduct, but is *not* a 'MintProduct'; -# I'm deriving anyway class MintProductPallet(MintProduct.MintProduct): - Models = { - CashbotMintIntA : 'phase_10/models/cashbotHQ/DoubleCoinStack.bam', - CashbotMintIntB : 'phase_10/models/cogHQ/DoubleMoneyStack.bam', - CashbotMintIntC : 'phase_10/models/cashbotHQ/DoubleGoldStack.bam', - } - Scales = { - CashbotMintIntA : 1., - CashbotMintIntB : 1., - CashbotMintIntC : 1., - } + __module__ = __name__ + Models = {CashbotMintIntA: 'phase_10/models/cashbotHQ/DoubleCoinStack.bam', CashbotMintIntB: 'phase_10/models/cogHQ/DoubleMoneyStack.bam', CashbotMintIntC: 'phase_10/models/cashbotHQ/DoubleGoldStack.bam'} + Scales = {CashbotMintIntA: 1.0, CashbotMintIntB: 1.0, CashbotMintIntC: 1.0} \ No newline at end of file diff --git a/toontown/src/coghq/MintRoom.py b/toontown/src/coghq/MintRoom.py index 1ccc5196..cf320ca5 100644 --- a/toontown/src/coghq/MintRoom.py +++ b/toontown/src/coghq/MintRoom.py @@ -6,12 +6,10 @@ import random class MintRoom(DirectObject.DirectObject): - """Represents the geometry of a single room of a mint. This includes - hallways. Handles logic for matching up doorways to doorways of - adjacent rooms.""" + __module__ = __name__ FloorCollPrefix = 'mintFloorColl' CashbotMintDoorFrame = 'phase_10/models/cashbotHQ/DoorFrame' - + def __init__(self, path=None): if path is not None: if path in MintRoomSpecs.CashbotMintConnectorRooms: @@ -19,143 +17,94 @@ def __init__(self, path=None): else: loadFunc = loader.loadModel self.setGeom(loadFunc(path)) - - self.localToonFSM = ClassicFSM.ClassicFSM('MintRoomLocalToonPresent', - [State.State('off', - self.enterLtOff, - self.exitLtOff, - ['notPresent']), - State.State('notPresent', - self.enterLtNotPresent, - self.exitLtNotPresent, - ['present']), - State.State('present', - self.enterLtPresent, - self.exitLtPresent, - ['notPresent']), - ], - # Initial State - 'notPresent', - # Final State - 'notPresent', - ) + self.localToonFSM = ClassicFSM.ClassicFSM('MintRoomLocalToonPresent', [ + State.State('off', self.enterLtOff, self.exitLtOff, [ + 'notPresent']), + State.State('notPresent', self.enterLtNotPresent, self.exitLtNotPresent, [ + 'present']), + State.State('present', self.enterLtPresent, self.exitLtPresent, [ + 'notPresent'])], 'notPresent', 'notPresent') self.localToonFSM.enterInitialState() + return def delete(self): del self.localToonFSM def enter(self): self.localToonFSM.request('notPresent') + def exit(self): self.localToonFSM.requestFinalState() - + def setRoomNum(self, num): - # First room in the mint is room zero, first hallway is one, second - # room is two, etc. self.roomNum = num + def getRoomNum(self): return self.roomNum def setGeom(self, geom): self.__geom = geom + def getGeom(self): return self.__geom def _getEntrances(self): - return self.__geom.findAllMatches('**/ENTRANCE*') + return self.__geom.findAllMatches('**/ENTRANCE*').asList() + def _getExits(self): - return self.__geom.findAllMatches('**/EXIT*') + return self.__geom.findAllMatches('**/EXIT*').asList() def attachTo(self, other, rng): - # attach an entrance doorway of this room to another room's exit doorway otherExits = other._getExits() entrances = self._getEntrances() - - otherDoor = otherExits[0] #rng.choice(otherExits) + otherDoor = otherExits[0] thisDoor = rng.choice(entrances) geom = self.getGeom() otherGeom = other.getGeom() - tempNode = otherDoor.attachNewNode('tempRotNode') geom.reparentTo(tempNode) geom.clearMat() - # position our door at our origin so that it's on top of the other door - geom.setPos(Vec3(0)-thisDoor.getPos(geom)) - # rotate so that our door is facing the right way + geom.setPos(Vec3(0) - thisDoor.getPos(geom)) tempNode.setH(-thisDoor.getH(otherDoor)) geom.wrtReparentTo(otherGeom.getParent()) tempNode.removeNode() - - doorFrame = loader.loadModel(MintRoom.CashbotMintDoorFrame) + doorFrame = loader.loadModelCopy(MintRoom.CashbotMintDoorFrame) doorFrame.reparentTo(thisDoor) def getFloorCollName(self): return '%s%s' % (MintRoom.FloorCollPrefix, self.roomNum) def initFloorCollisions(self): - # call this after calling setGeom and before adding anything under - # the room geometry - - # we handle floor collisions differently from a standard level. Our - # entire level is going to be treated as one 'zone' (this level - # represents one room of the mint) - allColls = self.getGeom().findAllMatches('**/+CollisionNode') - # which of them, if any, are floors? + allColls = self.getGeom().findAllMatches('**/+CollisionNode').asList() floorColls = [] for coll in allColls: bitmask = coll.node().getIntoCollideMask() if not (bitmask & ToontownGlobals.FloorBitmask).isZero(): floorColls.append(coll) + if len(floorColls) > 0: - # rename the floor collision nodes, and make sure no other - # nodes have that name floorCollName = self.getFloorCollName() - others = self.getGeom().findAllMatches( - '**/%s' % floorCollName) + others = self.getGeom().findAllMatches('**/%s' % floorCollName).asList() for other in others: other.setName('%s_renamed' % floorCollName) + for floorColl in floorColls: floorColl.setName(floorCollName) - # states for 'localToon present' FSM def enterLtOff(self): pass + def exitLtOff(self): pass def enterLtNotPresent(self): - # called when localToon is no longer in this room pass + def exitLtNotPresent(self): pass def enterLtPresent(self): - # called when localToon is in this room - pass - def exitLtPresent(self): pass - if __debug__: - def _showAxes(self): - self.axes = [] - axis = loader.loadModel("models/misc/xyzAxis.bam") - axis.setColorOff() - # last 1 overrides default colorScale - axis.setColorScale(1,1,1,1,1) - for doorway in self._getEntrances() + self._getExits(): - self.axes.append(axis.copyTo(doorway)) - self.axes.append(axis.copyTo(self.model)) - self.axes[-1].setScale(.6) - - def _isolateAxis(self, index): - for i in range(len(self.axes)): - if i == index: - self.axes[i].show() - else: - self.axes[i].hide() - - def _hideAxes(self): - for axis in self.axes: - axis.removeNode() - del self.axes - + def exitLtPresent(self): + pass \ No newline at end of file diff --git a/toontown/src/coghq/MintRoomBase.py b/toontown/src/coghq/MintRoomBase.py index d99f6a44..524f2b2d 100644 --- a/toontown/src/coghq/MintRoomBase.py +++ b/toontown/src/coghq/MintRoomBase.py @@ -1,17 +1,13 @@ -"""MintRoomBase module: contains the MintRoomBase class""" - from toontown.toonbase import ToontownGlobals class MintRoomBase: - """ common functionality shared by DistributedMintRoom/AI """ + __module__ = __name__ + def __init__(self): pass def setMintId(self, mintId): - """call this w/ mintId as soon as you have it""" self.mintId = mintId - # mintIds are 'logical' zoneIds (we don't actually go to the mintId - # zone) self.cogTrack = ToontownGlobals.cogHQZoneId2dept(mintId) def setRoomId(self, roomId): @@ -21,11 +17,9 @@ def getCogTrack(self): return self.cogTrack if __dev__: + def getMintEntityTypeReg(self): - # return an EntityTypeRegistry with information about the - # entity types that mints use - # Use the same types as factories - import FactoryEntityTypes + from . import FactoryEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(FactoryEntityTypes) - return typeReg + return typeReg \ No newline at end of file diff --git a/toontown/src/coghq/MintRoomSpecs.py b/toontown/src/coghq/MintRoomSpecs.py index 33798e64..ff89ea8b 100644 --- a/toontown/src/coghq/MintRoomSpecs.py +++ b/toontown/src/coghq/MintRoomSpecs.py @@ -1,5 +1,3 @@ -"""MintRoomSpecs.py: contains table of mint room specs""" - from direct.showbase.PythonUtil import invertDict from toontown.toonbase import ToontownGlobals from toontown.coghq import NullCogs @@ -22,97 +20,51 @@ def getMintRoomSpecModule(roomId): return CashbotMintSpecModules[roomId] + def getCogSpecModule(roomId): roomName = CashbotMintRoomId2RoomName[roomId] return CogSpecModules.get(roomName, NullCogs) + def getNumBattles(roomId): return roomId2numBattles[roomId] -# things that rooms need: -# r: reward (barrels, etc.) -# s: safe(s) -# x: adjust prop positions - -CashbotMintRoomId2RoomName = { - 0: 'CashbotMintEntrance_Action00', - 1: 'CashbotMintBoilerRoom_Action00', - 2: 'CashbotMintBoilerRoom_Battle00', - 3: 'CashbotMintDuctRoom_Action00', - 4: 'CashbotMintDuctRoom_Battle00', - 5: 'CashbotMintGearRoom_Action00', - 6: 'CashbotMintGearRoom_Battle00', - 7: 'CashbotMintLavaRoomFoyer_Action00', - 8: 'CashbotMintLavaRoomFoyer_Action01', - 9: 'CashbotMintLavaRoomFoyer_Battle00', - 10: 'CashbotMintLavaRoom_Action00', - 11: 'CashbotMintLobby_Action00', - 12: 'CashbotMintLobby_Battle00', - 13: 'CashbotMintPaintMixer_Action00', - 14: 'CashbotMintPipeRoom_Action00', - 15: 'CashbotMintPipeRoom_Battle00', - 16: 'CashbotMintStomperAlley_Action00', - 17: 'CashbotMintBoilerRoom_Battle01', - 18: 'CashbotMintControlRoom_Battle00', - 19: 'CashbotMintDuctRoom_Battle01', - 20: 'CashbotMintGearRoom_Battle01', - 21: 'CashbotMintLavaRoomFoyer_Battle01', - 22: 'CashbotMintOilRoom_Battle00', - 23: 'CashbotMintLobby_Battle01', - 24: 'CashbotMintPaintMixerReward_Battle00', - 25: 'CashbotMintPipeRoom_Battle01', - } -CashbotMintRoomName2RoomId = invertDict(CashbotMintRoomId2RoomName) -CashbotMintEntranceIDs = (0,) -CashbotMintMiddleRoomIDs = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,) -CashbotMintFinalRoomIDs = (17,18,19,20,21,22,23,24,25) +CashbotMintEntrances = ( + 'CashbotMintEntrance_Action00',) +CashbotMintMiddleRooms = ( + 'CashbotMintBoilerRoom_Action00', 'CashbotMintBoilerRoom_Battle00', 'CashbotMintDuctRoom_Action00', 'CashbotMintDuctRoom_Battle00', 'CashbotMintGearRoom_Action00', 'CashbotMintGearRoom_Battle00', 'CashbotMintLavaRoomFoyer_Action00', 'CashbotMintLavaRoomFoyer_Action01', 'CashbotMintLavaRoomFoyer_Battle00', 'CashbotMintLavaRoom_Action00', 'CashbotMintLobby_Action00', 'CashbotMintLobby_Battle00', 'CashbotMintPaintMixer_Action00', 'CashbotMintPipeRoom_Action00', 'CashbotMintPipeRoom_Battle00', 'CashbotMintStomperAlley_Action00') +CashbotMintFinalRooms = ( + 'CashbotMintBoilerRoom_Battle01', 'CashbotMintControlRoom_Battle00', 'CashbotMintDuctRoom_Battle01', 'CashbotMintGearRoom_Battle01', 'CashbotMintLavaRoomFoyer_Battle01', 'CashbotMintOilRoom_Battle00', 'CashbotMintLobby_Battle01', 'CashbotMintPaintMixerReward_Battle00', 'CashbotMintPipeRoom_Battle01') +CashbotMintConnectorRooms = ( + 'phase_10/models/cashbotHQ/connector_7cubeL2', 'phase_10/models/cashbotHQ/connector_7cubeR2') +CashbotMintRoomName2RoomId = {} +i = 0 +for roomName in CashbotMintEntrances + CashbotMintMiddleRooms + CashbotMintFinalRooms: + CashbotMintRoomName2RoomId[roomName] = i + i += 1 -CashbotMintConnectorRooms = ('phase_10/models/cashbotHQ/connector_7cubeL2', - 'phase_10/models/cashbotHQ/connector_7cubeR2') - -# dict of roomId to spec Python module +del i +CashbotMintRoomId2RoomName = invertDict(CashbotMintRoomName2RoomId) CashbotMintSpecModules = {} -for roomName, roomId in CashbotMintRoomName2RoomId.items(): - exec 'from toontown.coghq import %s' % roomName +for (roomName, roomId) in list(CashbotMintRoomName2RoomId.items()): + exec('from toontown.coghq import %s' % roomName) CashbotMintSpecModules[roomId] = eval(roomName) -## until cogs are entities... -CogSpecModules = { - 'CashbotMintBoilerRoom_Battle00' : CashbotMintBoilerRoom_Battle00_Cogs, - 'CashbotMintBoilerRoom_Battle01' : CashbotMintBoilerRoom_Battle01_Cogs, - 'CashbotMintControlRoom_Battle00' : CashbotMintControlRoom_Battle00_Cogs, - 'CashbotMintDuctRoom_Battle00' : CashbotMintDuctRoom_Battle00_Cogs, - 'CashbotMintDuctRoom_Battle01' : CashbotMintDuctRoom_Battle01_Cogs, - 'CashbotMintGearRoom_Battle00' : CashbotMintGearRoom_Battle00_Cogs, - 'CashbotMintGearRoom_Battle01' : CashbotMintGearRoom_Battle01_Cogs, - 'CashbotMintLavaRoomFoyer_Battle00' : CashbotMintLavaRoomFoyer_Battle00_Cogs, - 'CashbotMintLavaRoomFoyer_Battle01' : CashbotMintLavaRoomFoyer_Battle01_Cogs, - 'CashbotMintLobby_Battle00' : CashbotMintLobby_Battle00_Cogs, - 'CashbotMintLobby_Battle01' : CashbotMintLobby_Battle01_Cogs, - 'CashbotMintOilRoom_Battle00' : CashbotMintOilRoom_Battle00_Cogs, - 'CashbotMintPaintMixerReward_Battle00' : CashbotMintPaintMixerReward_Battle00_Cogs, - 'CashbotMintPipeRoom_Battle00' : CashbotMintPipeRoom_Battle00_Cogs, - 'CashbotMintPipeRoom_Battle01' : CashbotMintPipeRoom_Battle01_Cogs, - } - +CogSpecModules = {'CashbotMintBoilerRoom_Battle00': CashbotMintBoilerRoom_Battle00_Cogs, 'CashbotMintBoilerRoom_Battle01': CashbotMintBoilerRoom_Battle01_Cogs, 'CashbotMintControlRoom_Battle00': CashbotMintControlRoom_Battle00_Cogs, 'CashbotMintDuctRoom_Battle00': CashbotMintDuctRoom_Battle00_Cogs, 'CashbotMintDuctRoom_Battle01': CashbotMintDuctRoom_Battle01_Cogs, 'CashbotMintGearRoom_Battle00': CashbotMintGearRoom_Battle00_Cogs, 'CashbotMintGearRoom_Battle01': CashbotMintGearRoom_Battle01_Cogs, 'CashbotMintLavaRoomFoyer_Battle00': CashbotMintLavaRoomFoyer_Battle00_Cogs, 'CashbotMintLavaRoomFoyer_Battle01': CashbotMintLavaRoomFoyer_Battle01_Cogs, 'CashbotMintLobby_Battle00': CashbotMintLobby_Battle00_Cogs, 'CashbotMintLobby_Battle01': CashbotMintLobby_Battle01_Cogs, 'CashbotMintOilRoom_Battle00': CashbotMintOilRoom_Battle00_Cogs, 'CashbotMintPaintMixerReward_Battle00': CashbotMintPaintMixerReward_Battle00_Cogs, 'CashbotMintPipeRoom_Battle00': CashbotMintPipeRoom_Battle00_Cogs, 'CashbotMintPipeRoom_Battle01': CashbotMintPipeRoom_Battle01_Cogs} roomId2numBattles = {} -for roomName, roomId in CashbotMintRoomName2RoomId.items(): +for (roomName, roomId) in list(CashbotMintRoomName2RoomId.items()): if roomName not in CogSpecModules: roomId2numBattles[roomId] = 0 else: cogSpecModule = CogSpecModules[roomName] roomId2numBattles[roomId] = len(cogSpecModule.BattleCells) -# override # of battles for some rooms that don't have battle blockers for -# some battles name2id = CashbotMintRoomName2RoomId roomId2numBattles[name2id['CashbotMintBoilerRoom_Battle00']] = 3 roomId2numBattles[name2id['CashbotMintPipeRoom_Battle00']] = 2 del name2id - -# make a table of middle rooms specifically, so MintLayout can easily pick -# and choose battle rooms to meet its battle quota middleRoomId2numBattles = {} -for roomId in CashbotMintMiddleRoomIDs: - middleRoomId2numBattles[roomId] = roomId2numBattles[roomId] +for roomName in CashbotMintMiddleRooms: + roomId = CashbotMintRoomName2RoomId[roomName] + middleRoomId2numBattles[roomId] = roomId2numBattles[roomId] \ No newline at end of file diff --git a/toontown/src/coghq/MintShelf.py b/toontown/src/coghq/MintShelf.py index 920278b5..2daf5b0c 100644 --- a/toontown/src/coghq/MintShelf.py +++ b/toontown/src/coghq/MintShelf.py @@ -1,16 +1,7 @@ from toontown.toonbase.ToontownGlobals import * from toontown.coghq import MintProduct -# MintShelf is very close to MintProduct, but is *not* a 'MintProduct'; -# I'm deriving anyway class MintShelf(MintProduct.MintProduct): - Models = { - CashbotMintIntA : 'phase_10/models/cashbotHQ/shelf_A1MoneyBags', - CashbotMintIntB : 'phase_10/models/cashbotHQ/shelf_A1Money', - CashbotMintIntC : 'phase_10/models/cashbotHQ/shelf_A1Gold', - } - Scales = { - CashbotMintIntA : 1., - CashbotMintIntB : 1., - CashbotMintIntC : 1., - } + __module__ = __name__ + Models = {CashbotMintIntA: 'phase_10/models/cashbotHQ/shelf_A1MoneyBags', CashbotMintIntB: 'phase_10/models/cashbotHQ/shelf_A1Money', CashbotMintIntC: 'phase_10/models/cashbotHQ/shelf_A1Gold'} + Scales = {CashbotMintIntA: 1.0, CashbotMintIntB: 1.0, CashbotMintIntC: 1.0} \ No newline at end of file diff --git a/toontown/src/coghq/MoleFieldBase.py b/toontown/src/coghq/MoleFieldBase.py index 4c69cc52..963c4009 100644 --- a/toontown/src/coghq/MoleFieldBase.py +++ b/toontown/src/coghq/MoleFieldBase.py @@ -49,7 +49,7 @@ def scheduleMoles(self): curTimeBetweenPopup = self.TimeBetweenPopupMax # how long before another mole pops up curStayUpTime = self.StayUpTimeMax # how long does the mole stay up curTime = 3 - eligibleMoles = range(self.numMoles) + eligibleMoles = list(range(self.numMoles)) self.getRng().shuffle(eligibleMoles) usedMoles = [] self.notify.debug('eligibleMoles=%s' % eligibleMoles) diff --git a/toontown/src/coghq/MovingPlatform.py b/toontown/src/coghq/MovingPlatform.py index eaca2246..b03068ce 100644 --- a/toontown/src/coghq/MovingPlatform.py +++ b/toontown/src/coghq/MovingPlatform.py @@ -1,74 +1,43 @@ -"""MovingPlatform module: contains the MovingPlatform class""" - -from pandac.PandaModules import * +from direct.showbase.ShowBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.showbase import DirectObject from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal import types -# TODO: every MovingPlatform listens to every on-floor/off-floor event and -# compares the floor's name to its name. It would be more efficient to have -# a global MovingPlatformMgr that MovingPlatforms would register with. The -# mgr would listen for on-floor and off-floor events, match the floor node -# up with one of the registered platforms, and pass the event on to that -# one platform. - -# TODO: it should be possible to become unparented from the platform without -# walking off of it, i.e. when jumping. If the jump code generates an -# 'off-floor' event upon jumping and an 'on-floor' event upon landing, that -# should take care of it. - class MovingPlatform(DirectObject.DirectObject, NodePath): - + __module__ = __name__ notify = DirectNotifyGlobal.directNotify.newCategory('MovingPlatform') - + def __init__(self): self.hasLt = 0 DirectObject.DirectObject.__init__(self) NodePath.__init__(self) - - def setupCopyModel(self, parentToken, model, floorNodeName=None, - parentingNode=None): - """parentingNode is the node that avatars will be parented to when - they are on this MovingPlatform; defaults to self""" - assert(self.debugPrint("setupCopyModel(token=%s, model=%s, floorNodeName=%s)"%( - parentToken, model, floorNodeName))) + + def setupCopyModel(self, parentToken, model, floorNodeName=None, parentingNode=None): if floorNodeName is None: floorNodeName = 'floor' - if type(parentToken) == types.IntType: + if type(parentToken) == int: parentToken = ToontownGlobals.SPDynamic + parentToken self.parentToken = parentToken - self.name = "MovingPlatform-%s" % (parentToken) + self.name = 'MovingPlatform-%s' % parentToken self.assign(hidden.attachNewNode(self.name)) self.model = model.copyTo(self) self.ownsModel = 1 - floorList = self.model.findAllMatches("**/%s" % floorNodeName) + floorList = self.model.findAllMatches('**/%s' % floorNodeName).asList() if len(floorList) == 0: MovingPlatform.notify.warning('no floors in model') return for floor in floorList: floor.setName(self.name) + if parentingNode == None: parentingNode = self base.cr.parentMgr.registerParent(self.parentToken, parentingNode) self.parentingNode = parentingNode self.accept('enter%s' % self.name, self.__handleEnter) self.accept('exit%s' % self.name, self.__handleExit) - - """ this doesn't appear to be used - def setupEntity(self, entityId, parent, floorNodeName=None): - assert(self.debugPrint("setupEntity(entityId=%s, parent=%s, floorNodeName=%s)"%( - entityId, parent, floorNodeName))) - self.parentToken = ToontownGlobals.SPDynamic + entityId - self.assign(parent) - self.ownsModel = 0 - self.name = floorNodeName - base.cr.parentMgr.registerParent(self.parentToken, parent) - self.parentingNode = parent - self.accept('enter%s' % self.name, self.__handleEnter) - self.accept('exit%s' % self.name, self.__handleExit) - """ + return def destroy(self): base.cr.parentMgr.unregisterParent(self.parentToken) @@ -78,79 +47,43 @@ def destroy(self): if self.ownsModel: self.model.removeNode() del self.model - # Only cleanup the parentingNode if it is set to yourself - # If some external party set it up, they are responsible for - # cleaning up the parentingNode. (for instance ConveyorBelt) - if (hasattr(self, "parentingNode") and - (self.parentingNode is self)): + if hasattr(self, 'parentingNode') and self.parentingNode is self: del self.parentingNode - + def getEnterEvent(self): return '%s-enter' % self.name + def getExitEvent(self): return '%s-exit' % self.name def releaseLocalToon(self): - """ if localToon is parented to us, parents localToon to render """ if self.hasLt: self.__releaseLt() def __handleEnter(self, collEntry): - self.notify.debug('on movingPlatform %s' % (self.name)) + self.notify.debug('on movingPlatform %s' % self.name) self.__grabLt() messenger.send(self.getEnterEvent()) + def __handleExit(self, collEntry): - self.notify.debug('off movingPlatform %s' % (self.name)) + self.notify.debug('off movingPlatform %s' % self.name) self.__releaseLt() messenger.send(self.getExitEvent()) def __handleOnFloor(self, collEntry): - if (collEntry.getIntoNode().getName() == self.name): + if collEntry.getIntoNode().getName() == self.name: self.__handleEnter(collEntry) + def __handleOffFloor(self, collEntry): - if (collEntry.getIntoNode().getName() == self.name): + if collEntry.getIntoNode().getName() == self.name: self.__handleExit(collEntry) - + def __grabLt(self): base.localAvatar.b_setParent(self.parentToken) self.hasLt = 1 + def __releaseLt(self): if base.localAvatar.getParent().compareTo(self.parentingNode) == 0: base.localAvatar.b_setParent(ToontownGlobals.SPRender) base.localAvatar.controlManager.currentControls.doDeltaPos() - self.hasLt = 0 - - if __debug__: - def debugPrint(self, message): - """for debugging""" - return self.notify.debug( - str(self.__dict__.get('name', '?'))+' '+message) - -""" -platformModel = loader.loadModel("phase_4/models/minigames/block") - -# x,y,z,time (position is relative to localToon, +Y is forward, +X is left) -platformPaths = [ - [0, (0,10,1,2), (0,20,6,2), (10,20,6,2), (10,10,6,2), (10,10,1,2)], -] - -for platformPath in platformPaths: - token = platformPath[0] - coords = platformPath[1:] - platform = MovingPlatform.MovingPlatform(token, platformModel) - platform.reparentTo(base.localAvatar) - platform.setPos(coords[0][0],coords[0][1],coords[0][2]) - platform.wrtReparentTo(render) - iList = [] - node = base.localAvatar.attachNewNode('platformPlacer') - # we're already at first pos, start with 2nd and end with first - for coord in coords[1:]+[coords[0]]: - node.setPos(coord[0], coord[1], coord[2]) - iList.append(LerpPosInterval(platform, coord[3], bakeInStart=0, - pos=node.getPos(render))) - node.removeNode() - del node - track = Track(iList) - track.loop() - -""" + self.hasLt = 0 \ No newline at end of file diff --git a/toontown/src/coghq/NullCogs.py b/toontown/src/coghq/NullCogs.py index 7bfb36f0..19611645 100644 --- a/toontown/src/coghq/NullCogs.py +++ b/toontown/src/coghq/NullCogs.py @@ -1,15 +1,4 @@ -from SpecImports import * - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under - -# unique IDs for battle cells - -BattleCells = { - } - -CogData = [ - ] - -ReserveCogData = [ - ] +from .SpecImports import * +BattleCells = {} +CogData = [] +ReserveCogData = [] \ No newline at end of file diff --git a/toontown/src/coghq/PaintMixer.py b/toontown/src/coghq/PaintMixer.py index e74f1c65..1b987b92 100644 --- a/toontown/src/coghq/PaintMixer.py +++ b/toontown/src/coghq/PaintMixer.py @@ -1,23 +1,14 @@ -"""PaintMixer module: contains the PaintMixer class""" - -import PlatformEntity +from . import PlatformEntity class PaintMixer(PlatformEntity.PlatformEntity): + __module__ = __name__ + def start(self): PlatformEntity.PlatformEntity.start(self) model = self.platform.model shaft = model.find('**/PaintMixerBase1') shaft.setSz(self.shaftScale) - # we can't flatten out the scale unless we remove the DCS shaft.node().setPreserveTransform(0) - # there's another node with DCS/preserve transform underneath shaftChild = shaft.find('**/PaintMixerBase') shaftChild.node().setPreserveTransform(0) - model.flattenMedium() - """ this doesn't seem to do anything. - # incorporate the mixer's overall scale, and flatten all scales - model.setScale(self.getScale()) - self.setScale(1) - model.flattenMedium() - """ - + model.flattenMedium() \ No newline at end of file diff --git a/toontown/src/coghq/PlatformEntity.py b/toontown/src/coghq/PlatformEntity.py index 9c044068..ecd95887 100644 --- a/toontown/src/coghq/PlatformEntity.py +++ b/toontown/src/coghq/PlatformEntity.py @@ -1,11 +1,11 @@ -"""PlatformEntity module: contains the PlatformEntity class""" - from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from otp.level import BasicEntities -import MovingPlatform +from . import MovingPlatform class PlatformEntity(BasicEntities.NodePathEntity): + __module__ = __name__ + def __init__(self, level, entId): BasicEntities.NodePathEntity.__init__(self, level, entId) self.start() @@ -15,7 +15,7 @@ def destroy(self): BasicEntities.NodePathEntity.destroy(self) def start(self): - model = loader.loadModel(self.modelPath) + model = loader.loadModelCopy(self.modelPath) if model is None: return if len(self.floorName) == 0: @@ -23,33 +23,17 @@ def start(self): model.setScale(self.modelScale) model.flattenMedium() self.platform = MovingPlatform.MovingPlatform() - self.platform.setupCopyModel(self.getParentToken(), model, - self.floorName) + self.platform.setupCopyModel(self.getParentToken(), model, self.floorName) self.platform.reparentTo(self) - - startPos = Point3(0,0,0) + startPos = Point3(0, 0, 0) endPos = self.offset distance = Vec3(self.offset).length() waitDur = self.period * self.waitPercent moveDur = self.period - waitDur - self.moveIval = Sequence( - WaitInterval(waitDur*.5), - LerpPosInterval(self.platform, moveDur*.5, - endPos, startPos=startPos, - name='platformOut%s' % self.entId, - blendType = self.motion, - fluid = 1), - WaitInterval(waitDur*.5), - LerpPosInterval(self.platform, moveDur*.5, - startPos, startPos=endPos, - name='platformBack%s' % self.entId, - blendType = self.motion, - fluid = 1), - name=self.getUniqueName('platformIval'), - ) + self.moveIval = Sequence(WaitInterval(waitDur * 0.5), LerpPosInterval(self.platform, moveDur * 0.5, endPos, startPos=startPos, name='platformOut%s' % self.entId, blendType=self.motion, fluid=1), WaitInterval(waitDur * 0.5), LerpPosInterval(self.platform, moveDur * 0.5, startPos, startPos=endPos, name='platformBack%s' % self.entId, blendType=self.motion, fluid=1), name=self.getUniqueName('platformIval')) self.moveIval.loop() - self.moveIval.setT((globalClock.getFrameTime() - self.level.startTime) - + (self.period * self.phaseShift)) + self.moveIval.setT(globalClock.getFrameTime() - self.level.startTime + self.period * self.phaseShift) + return def stop(self): if hasattr(self, 'moveIval'): @@ -60,6 +44,7 @@ def stop(self): del self.platform if __dev__: + def attribChanged(self, *args): self.stop() - self.start() + self.start() \ No newline at end of file diff --git a/toontown/src/coghq/PromotionManagerAI.py b/toontown/src/coghq/PromotionManagerAI.py index 35a27690..b7eee276 100644 --- a/toontown/src/coghq/PromotionManagerAI.py +++ b/toontown/src/coghq/PromotionManagerAI.py @@ -2,8 +2,9 @@ from direct.directnotify import DirectNotifyGlobal import random from toontown.suit import SuitDNA -import CogDisguiseGlobals +from . import CogDisguiseGlobals from toontown.toonbase.ToontownBattleGlobals import getInvasionMultiplier +from functools import reduce MeritMultiplier = 0.5 diff --git a/toontown/src/coghq/SellbotCogHQLoader.py b/toontown/src/coghq/SellbotCogHQLoader.py index f1e5cb7c..1de56093 100644 --- a/toontown/src/coghq/SellbotCogHQLoader.py +++ b/toontown/src/coghq/SellbotCogHQLoader.py @@ -1,283 +1,165 @@ - from direct.directnotify import DirectNotifyGlobal from direct.fsm import StateData -import CogHQLoader +from . import CogHQLoader from toontown.toonbase import ToontownGlobals +from pandac.PandaModules import * from direct.gui import DirectGui from toontown.toonbase import TTLocalizer from toontown.toon import Toon from direct.fsm import State -import FactoryExterior -import FactoryInterior -import SellbotHQExterior -import SellbotHQBossBattle -from pandac.PandaModules import DecalEffect - -# Used to compensate for scaling of Cog tunnel sign's -# original aspect ratio of 1125x813 to a uniform ratio, -# scale z by factor of 0.7227 +from . import FactoryExterior, FactoryInterior, SellbotHQExterior, SellbotHQBossBattle aspectSF = 0.7227 class SellbotCogHQLoader(CogHQLoader.CogHQLoader): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("SellbotCogHQLoader") - #notify.setDebug(True) + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('SellbotCogHQLoader') + notify.setDebug(True) def __init__(self, hood, parentFSMState, doneEvent): CogHQLoader.CogHQLoader.__init__(self, hood, parentFSMState, doneEvent) - self.fsm.addState(State.State('factoryExterior', - self.enterFactoryExterior, - self.exitFactoryExterior, - ['quietZone', - 'factoryInterior', # Elevator - 'cogHQExterior', # Tunnel - ])) + self.fsm.addState(State.State('factoryExterior', self.enterFactoryExterior, self.exitFactoryExterior, [ + 'quietZone', 'factoryInterior', 'cogHQExterior'])) for stateName in ['start', 'cogHQExterior', 'quietZone']: state = self.fsm.getStateNamed(stateName) state.addTransition('factoryExterior') - self.fsm.addState(State.State('factoryInterior', - self.enterFactoryInterior, - self.exitFactoryInterior, - ['quietZone', - 'factoryExterior', # Win bldg - ])) + + self.fsm.addState(State.State('factoryInterior', self.enterFactoryInterior, self.exitFactoryInterior, [ + 'quietZone', 'factoryExterior'])) for stateName in ['quietZone']: state = self.fsm.getStateNamed(stateName) state.addTransition('factoryInterior') - - self.musicFile = "phase_9/audio/bgm/encntr_suit_HQ_nbrhood.mid" - self.cogHQExteriorModelPath = "phase_9/models/cogHQ/SellbotHQExterior" - self.cogHQLobbyModelPath = "phase_9/models/cogHQ/SellbotHQLobby" - self.factoryExteriorModelPath = "phase_9/models/cogHQ/SellbotFactoryExterior" + self.musicFile = 'phase_9/audio/bgm/encntr_suit_HQ_nbrhood.mid' + self.cogHQExteriorModelPath = 'phase_9/models/cogHQ/SellbotHQExterior' + self.cogHQLobbyModelPath = 'phase_9/models/cogHQ/SellbotHQLobby' + self.factoryExteriorModelPath = 'phase_9/models/cogHQ/SellbotFactoryExterior' self.geom = None + return def load(self, zoneId): CogHQLoader.CogHQLoader.load(self, zoneId) - # Load anims Toon.loadSellbotHQAnims() def unloadPlaceGeom(self): - # Get rid of any old geom if self.geom: self.geom.removeNode() self.geom = None CogHQLoader.CogHQLoader.unloadPlaceGeom(self) + return def loadPlaceGeom(self, zoneId): - self.notify.info("loadPlaceGeom: %s" % zoneId) - - # We shoud not look at the last 2 digits to match against these constants - zoneId = (zoneId - (zoneId %100)) - + self.notify.info('loadPlaceGeom: %s' % zoneId) + zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.SellbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) - - # Rename the link tunnels so they will hook up properly - dgLinkTunnel = self.geom.find("**/Tunnel1") - dgLinkTunnel.setName("linktunnel_dg_5316_DNARoot") - factoryLinkTunnel = self.geom.find("**/Tunnel2") - factoryLinkTunnel.setName("linktunnel_sellhq_11200_DNARoot") - - # Put handy signs on the link tunnels - cogSignModel = loader.loadModel( - 'phase_4/models/props/sign_sellBotHeadHQ') + dgLinkTunnel = self.geom.find('**/Tunnel1') + dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot') + factoryLinkTunnel = self.geom.find('**/Tunnel2') + factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot') + cogSignModel = loader.loadModel('phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 - - # To Daisys Garden dgSign = cogSign.copyTo(dgLinkTunnel) - dgSign.setPosHprScale( - 0.00, -291.5, 29, - 180.00, 0.00, 0.00, - cogSignSF, cogSignSF, cogSignSF * aspectSF) + dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) dgSign.node().setEffect(DecalEffect.make()) - dgText = DirectGui.OnscreenText( - text = TTLocalizer.DaisyGardens[-1], - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.3), scale = TTLocalizer.SCLdgSign, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = dgSign) + dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[(-1)], font=ToontownGlobals.getSuitFont(), pos=(0, -0.3), scale=0.1, parent=dgSign) dgText.setDepthWrite(0) - - # To Factory factorySign = cogSign.copyTo(factoryLinkTunnel) - factorySign.setPosHprScale( - 148.625, -155, 27, - -90.00, 0.00, 0.00, - cogSignSF, cogSignSF, cogSignSF * aspectSF) - # Make text a decal + factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) factorySign.node().setEffect(DecalEffect.make()) - factoryTypeText = DirectGui.OnscreenText( - text = TTLocalizer.Sellbot, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.25), scale = .075, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = factorySign) + factoryTypeText = DirectGui.OnscreenText(text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, parent=factorySign) factoryTypeText.setDepthWrite(0) - factoryText = DirectGui.OnscreenText( - text = TTLocalizer.Factory, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.34), scale = .12, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = factorySign) + factoryText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.12, parent=factorySign) factoryText.setDepthWrite(0) - - doors = self.geom.find("**/doors") - door0 = doors.find("**/door_0") - door1 = doors.find("**/door_1") - door2 = doors.find("**/door_2") - door3 = doors.find("**/door_3") - + doors = self.geom.find('**/doors') + door0 = doors.find('**/door_0') + door1 = doors.find('**/door_1') + door2 = doors.find('**/door_2') + door3 = doors.find('**/door_3') index = 0 for door in [door0, door1, door2, door3]: - doorFrame = door.find("**/doorDoubleFlat/+GeomNode") - door.find("**/doorFrameHoleLeft").wrtReparentTo(doorFrame) - door.find("**/doorFrameHoleRight").wrtReparentTo(doorFrame) + doorFrame = door.find('**/doorDoubleFlat/+GeomNode') + door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) + door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) index += 1 + elif zoneId == ToontownGlobals.SellbotFactoryExt: self.geom = loader.loadModel(self.factoryExteriorModelPath) - factoryLinkTunnel = self.geom.find("**/tunnel_group2") - factoryLinkTunnel.setName("linktunnel_sellhq_11000_DNARoot") - factoryLinkTunnel.find("**/tunnel_sphere").setName("tunnel_trigger") - - # Put handy signs on the link tunnels - cogSignModel = loader.loadModel( - 'phase_4/models/props/sign_sellBotHeadHQ') + factoryLinkTunnel = self.geom.find('**/tunnel_group2') + factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot') + factoryLinkTunnel.find('**/tunnel_sphere').setName('tunnel_trigger') + cogSignModel = loader.loadModel('phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 elevatorSignSF = 15 - - # To Daisys Garden hqSign = cogSign.copyTo(factoryLinkTunnel) - hqSign.setPosHprScale( - 0.0, -353, 27.5, - -180.00, 0.00, 0.00, - cogSignSF, cogSignSF, cogSignSF * aspectSF) + hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) hqSign.node().setEffect(DecalEffect.make()) - hqTypeText = DirectGui.OnscreenText( - text = TTLocalizer.Sellbot, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.25), scale = .075, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = hqSign) + hqTypeText = DirectGui.OnscreenText(text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, parent=hqSign) hqTypeText.setDepthWrite(0) - hqText = DirectGui.OnscreenText( - text = TTLocalizer.Headquarters, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.34), scale = 0.1, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = hqSign) + hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, parent=hqSign) hqText.setDepthWrite(0) - - # Factory Front Entrance - frontDoor = self.geom.find("**/doorway1") + frontDoor = self.geom.find('**/doorway1') fdSign = cogSign.copyTo(frontDoor) - fdSign.setPosHprScale( - 62.74, -87.99, 17.26, - 2.72, 0.00, 0.00, - elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) + fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) fdSign.node().setEffect(DecalEffect.make()) - fdTypeText = DirectGui.OnscreenText( - text = TTLocalizer.Factory, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.25), scale = TTLocalizer.SCLfdSign, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = fdSign) + fdTypeText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, parent=fdSign) fdTypeText.setDepthWrite(0) - fdText = DirectGui.OnscreenText( - text = TTLocalizer.SellbotFrontEntrance, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.34), scale = TTLocalizer.SCLdgSign, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = fdSign) + fdText = DirectGui.OnscreenText(text=TTLocalizer.SellbotFrontEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, parent=fdSign) fdText.setDepthWrite(0) - - # Factory Side Entrance - sideDoor = self.geom.find("**/doorway2") + sideDoor = self.geom.find('**/doorway2') sdSign = cogSign.copyTo(sideDoor) - sdSign.setPosHprScale( - -164.78, 26.28, 17.25, - -89.89, 0.00, 0.00, - elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) + sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) sdSign.node().setEffect(DecalEffect.make()) - sdTypeText = DirectGui.OnscreenText( - text = TTLocalizer.Factory, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.25), scale = .075, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = sdSign) + sdTypeText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, parent=sdSign) sdTypeText.setDepthWrite(0) - sdText = DirectGui.OnscreenText( - text = TTLocalizer.SellbotSideEntrance, - font = ToontownGlobals.getSuitFont(), - pos = (0,-0.34), scale = 0.1, - # required for DecalEffect (must be a GeomNode, not a TextNode) - mayChange=False, - parent = sdSign) + sdText = DirectGui.OnscreenText(text=TTLocalizer.SellbotSideEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, parent=sdSign) sdText.setDepthWrite(0) elif zoneId == ToontownGlobals.SellbotLobby: self.geom = loader.loadModel(self.cogHQLobbyModelPath) - - front = self.geom.find("**/frontWall") + front = self.geom.find('**/frontWall') front.node().setEffect(DecalEffect.make()) - - door = self.geom.find("**/door_0") + door = self.geom.find('**/door_0') parent = door.getParent() door.wrtReparentTo(front) - doorFrame = door.find("**/doorDoubleFlat/+GeomNode") - door.find("**/doorFrameHoleLeft").wrtReparentTo(doorFrame) - door.find("**/doorFrameHoleRight").wrtReparentTo(doorFrame) + doorFrame = door.find('**/doorDoubleFlat/+GeomNode') + door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) + door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) - - door.find("**/leftDoor").wrtReparentTo(parent) - door.find("**/rightDoor").wrtReparentTo(parent) + door.find('**/leftDoor').wrtReparentTo(parent) + door.find('**/rightDoor').wrtReparentTo(parent) else: - # Note: the factory interior has a dynamically allocated zone but - # that is ok because we do not need to load any models - they all - # get loaded by the distributed object - self.notify.warning("loadPlaceGeom: unclassified zone %s" % zoneId) - + self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId) - def unload(self): CogHQLoader.CogHQLoader.unload(self) - # unload anims Toon.unloadSellbotHQAnims() - def enterFactoryExterior(self, requestStatus): self.placeClass = FactoryExterior.FactoryExterior self.enterPlace(requestStatus) self.hood.spawnTitleText(requestStatus['zoneId']) - + def exitFactoryExterior(self): - taskMgr.remove("titleText") + taskMgr.remove('titleText') self.hood.hideTitleText() self.exitPlace() self.placeClass = None + return def enterFactoryInterior(self, requestStatus): self.placeClass = FactoryInterior.FactoryInterior self.enterPlace(requestStatus) - + def exitFactoryInterior(self): self.exitPlace() self.placeClass = None + return def getExteriorPlaceClass(self): return SellbotHQExterior.SellbotHQExterior def getBossPlaceClass(self): - return SellbotHQBossBattle.SellbotHQBossBattle - + return SellbotHQBossBattle.SellbotHQBossBattle \ No newline at end of file diff --git a/toontown/src/coghq/SellbotHQBossBattle.py b/toontown/src/coghq/SellbotHQBossBattle.py index 30740c89..02efbbe5 100644 --- a/toontown/src/coghq/SellbotHQBossBattle.py +++ b/toontown/src/coghq/SellbotHQBossBattle.py @@ -5,14 +5,13 @@ from toontown.coghq import CogHQBossBattle class SellbotHQBossBattle(CogHQBossBattle.CogHQBossBattle): - # create a notify category - notify = DirectNotifyGlobal.directNotify.newCategory("SellbotHQBossBattle") - - # special methods + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('SellbotHQBossBattle') + def __init__(self, loader, parentFSM, doneEvent): CogHQBossBattle.CogHQBossBattle.__init__(self, loader, parentFSM, doneEvent) - # This is only used for magic words. - self.teleportInPosHpr = (0, 95, 18, 180, 0, 0) + self.teleportInPosHpr = ( + 0, 95, 18, 180, 0, 0) def load(self): CogHQBossBattle.CogHQBossBattle.load(self) @@ -21,54 +20,21 @@ def unload(self): CogHQBossBattle.CogHQBossBattle.unload(self) def enter(self, requestStatus): - CogHQBossBattle.CogHQBossBattle.enter(self, requestStatus, - DistributedSellbotBoss.OneBossCog) + CogHQBossBattle.CogHQBossBattle.enter(self, requestStatus, DistributedSellbotBoss.OneBossCog) self.__setupHighSky() def exit(self): CogHQBossBattle.CogHQBossBattle.exit(self) - self.__cleanupHighSky() - + def __setupHighSky(self): self.loader.hood.startSky() sky = self.loader.hood.sky - - # Rotate the sky around so the more interesting part is - # visible. sky.setH(150) sky.setZ(-100) - """ - # Put some dirty-looking clouds around. - self.cloudRing = sky.attachNewNode('cloudRing') - self.cloudRing.setDepthWrite(0) - self.cloudRing.setBin('background', 50) - - cloud = loader.loadModel('phase_4/models/props/test_clouds') - cloud.find('**/p1').clearBillboard() - cloud.setColor(1, 0.8, 0.6, 1) - cloud.setScale(20, 10, 10) - cloud.setHpr(180, 0, 0) - cloud.flattenLight() - - radius = 200 - for angle, z in [(30, -40), (60, -60), (80, -50), (110, -40), - (140, -70), (180, -50), (210, -40)]: - radians = angle / 180.0 * math.pi - x = radius * math.cos(radians) - y = radius * math.sin(radians) - c1 = cloud.copyTo(self.cloudRing) - c1.setPos(x, y, z) - c1.headsUp(0, 0, 0) - """ - def __cleanupHighSky(self): - # Turn the sky off self.loader.hood.stopSky() - # self.cloudRing.removeNode() sky = self.loader.hood.sky sky.setH(0) - sky.setZ(0) - - + sky.setZ(0) \ No newline at end of file diff --git a/toontown/src/coghq/SellbotHQExterior.py b/toontown/src/coghq/SellbotHQExterior.py index 594ed6d2..fa1536d1 100644 --- a/toontown/src/coghq/SellbotHQExterior.py +++ b/toontown/src/coghq/SellbotHQExterior.py @@ -1,20 +1,14 @@ from direct.directnotify import DirectNotifyGlobal from toontown.coghq import CogHQExterior -# aka "The Pit" - class SellbotHQExterior(CogHQExterior.CogHQExterior): - notify = DirectNotifyGlobal.directNotify.newCategory("SellbotHQExterior") + __module__ = __name__ + notify = DirectNotifyGlobal.directNotify.newCategory('SellbotHQExterior') def enter(self, requestStatus): CogHQExterior.CogHQExterior.enter(self, requestStatus) - - # Turn the sky on self.loader.hood.startSky() def exit(self): - # Turn the sky off self.loader.hood.stopSky() - - CogHQExterior.CogHQExterior.exit(self) - + CogHQExterior.CogHQExterior.exit(self) \ No newline at end of file diff --git a/toontown/src/coghq/SellbotLegFactoryCogs.py b/toontown/src/coghq/SellbotLegFactoryCogs.py index ffaf29df..56e338ff 100644 --- a/toontown/src/coghq/SellbotLegFactoryCogs.py +++ b/toontown/src/coghq/SellbotLegFactoryCogs.py @@ -1,7 +1,4 @@ -from SpecImports import * - -###### TO BE CONVERTED TO ENTITY SYSTEM ###### -# entIds of entities that the cogs are put under +from .SpecImports import * LobbyParent = 10014 BoilerParent = 10030 PipeLeftParent = 10023 @@ -9,18 +6,13 @@ OilParent = 10034 ControlParent = 10037 DuctParent = 10036 -# added this to avoid messing up paths in Center Silo Control Room CenterSiloBattleCellParent = 10064 CenterSiloParent = 20095 SigRoomParent = 20058 WestSiloParent = 20094 -# added this to avoid messing up paths under WestSiloParent WestSiloBattleCellParent = 10047 EastSiloParent = 20096 -# added this to avoid messing up paths under EastSiloParent EastSiloBattleCellParent = 10068 - -# unique IDs for battle cells LobbyCell = 0 BoilerCell = 1 PipeLeftCell = 2 @@ -32,684 +24,6 @@ SigRoomCell = 8 WestSiloCell = 9 EastSiloCell = 10 - -BattleCells = { - # lobby - LobbyCell : {'parentEntId' : LobbyParent, - 'pos' : Point3(0,0,0), - }, - # boiler room - BoilerCell : {'parentEntId' : BoilerParent, - 'pos' : Point3(0,0,0), - }, - # oil room - OilCell : {'parentEntId' : OilParent, - 'pos' : Point3(0,0,0), - }, - # control center - ControlCell : {'parentEntId' : ControlParent, - 'pos' : Point3(0,0,0), - }, - # center silo control room - CenterSiloCell : {'parentEntId' : CenterSiloBattleCellParent, - 'pos' : Point3(0,0,0), - }, - # pipe room left - PipeLeftCell : {'parentEntId' : PipeLeftParent, - 'pos' : Point3(0,0,0), - }, - # pipe room right - PipeRightCell : {'parentEntId' : PipeRightParent, - 'pos' : Point3(0,0,0), - }, - # duct room - DuctCell : {'parentEntId' : DuctParent, - 'pos' : Point3(0,0,0), - }, - # signature room balcony - SigRoomCell : {'parentEntId' : SigRoomParent, - 'pos' : Point3(0,0,0), - }, - # west silo top - WestSiloCell : {'parentEntId' : WestSiloBattleCellParent, - 'pos' : Point3(0,0,0), - }, - # east silo top - EastSiloCell : {'parentEntId' : EastSiloBattleCellParent, - 'pos' : Point3(-20,-10,0), - }, - } - -CogData = [ - # lobby - {'type' : 'cc', - 'parentEntId' : LobbyParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : LobbyCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20078, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : LobbyParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : LobbyCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20009, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : LobbyParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : LobbyCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20079, - 'skeleton' : 0, - }, - # boiler room - {'type' : 'cc', - 'parentEntId' : BoilerParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : BoilerCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'walk', - 'path' : 20076, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : BoilerParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : BoilerCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'walk', - 'path' : 20077, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : BoilerParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : BoilerCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 0, - }, - # oil room - {'type' : 'tm', - 'parentEntId' : OilParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : OilCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 60133, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : OilParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : OilCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 60134, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : OilParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : OilCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 60135, - 'skeleton' : 0, - }, - # control center - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : ControlCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20039, - 'skeleton' : 1, - }, - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : ControlCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20049, - 'skeleton' : 1, - }, - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : ControlCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20075, - 'skeleton' : 1, - }, - # factory boss - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20103, - 'skeleton' : 0, - }, - {'type' : 'gh', - 'parentEntId' : CenterSiloParent, - 'boss' : 1, - 'level' : 9, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(0,0,0), - 'h' : 180, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20104, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20105, - 'skeleton' : 0, - }, - # west silo - {'type' : 'tm', - 'parentEntId' : WestSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : WestSiloCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20097, - 'skeleton' : 0, - }, - {'type' : 'gh', - 'parentEntId' : WestSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : WestSiloCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20098, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : WestSiloParent, - 'boss' : 0, - 'level' : 7, - 'battleCell' : WestSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20099, - 'skeleton' : 0, - }, - # east silo - {'type' : 'tm', - 'parentEntId' : EastSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : EastSiloCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20100, - 'skeleton' : 0, - }, - {'type' : 'gh', - 'parentEntId' : EastSiloParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : EastSiloCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20101, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : EastSiloParent, - 'boss' : 0, - 'level' : 7, - 'battleCell' : EastSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20102, - 'skeleton' : 0, - }, - # pipe room left - {'type' : 'tm', - 'parentEntId' : PipeLeftParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : PipeLeftCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20109, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : PipeLeftParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeLeftCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20110, - 'skeleton' :1, - }, - {'type' : 'tm', - 'parentEntId' : PipeLeftParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeLeftCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20111, - 'skeleton' : 1, - }, - # pipe room right - {'type' : 'tm', - 'parentEntId' : PipeRightParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeRightCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20106, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : PipeRightParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : PipeRightCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20107, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : PipeRightParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeRightCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20108, - 'skeleton' : 1, - }, - # duct room - {'type' : 'cc', - 'parentEntId' : DuctParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : DuctCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20038, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : DuctParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : DuctCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20067, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : DuctParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : DuctCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20068, - 'skeleton' : 0, - }, - # signature room balcony - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,-10.75,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,-3.25,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,3.25,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 6, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,10.75,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] - -ReserveCogData = [ - # lobby - {'type' : 'cc', - 'parentEntId' : LobbyParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : LobbyCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20009, - 'skeleton' : 0, - 'joinParent' : 20018, - }, - # boiler room - {'type' : 'cc', - 'parentEntId' : BoilerParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : BoilerCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'walk', - 'path' : 20076, - 'skeleton' : 0, - 'joinParent' : 20019, - }, - {'type' : 'tm', - 'parentEntId' : BoilerParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : BoilerCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'walk', - 'path' : 20077, - 'skeleton' : 0, - 'joinParent' : 20019, - }, - # oil room - {'type' : 'tm', - 'parentEntId' : OilParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : OilCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 60133, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : OilParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : OilCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 60135, - 'skeleton' : 0, - }, - # control center - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : ControlCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20039, - 'skeleton' : 1, - }, - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : ControlCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20049, - 'skeleton' : 1, - }, - {'type' : 'cc', - 'parentEntId' : ControlParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : ControlCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'walk', - 'path' : 20075, - 'skeleton' : 1, - }, - # factory boss - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20103, - 'skeleton' : 0, - }, - {'type' : 'gh', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 5, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20104, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : CenterSiloParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : CenterSiloCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20105, - 'skeleton' : 0, - }, - # pipe room left - {'type' : 'tm', - 'parentEntId' : PipeLeftParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : PipeLeftCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : PipeLeftParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeLeftCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 1, - }, - # pipe room right - {'type' : 'tm', - 'parentEntId' : PipeRightParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : PipeRightCell, - 'pos' : Point3(-10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 1, - }, - {'type' : 'tm', - 'parentEntId' : PipeRightParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : PipeRightCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : None, - 'skeleton' : 1, - }, - # duct room - {'type' : 'cc', - 'parentEntId' : DuctParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : DuctCell, - 'pos' : Point3(0,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20038, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : DuctParent, - 'boss' : 0, - 'level' : 2, - 'battleCell' : DuctCell, - 'pos' : Point3(10,0,0), - 'h' : 0, - 'behavior' : 'chase', - 'path' : 20067, - 'skeleton' : 0, - }, - # signature room balcony - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 3, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,-10.75,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - {'type' : 'tm', - 'parentEntId' : SigRoomParent, - 'boss' : 0, - 'level' : 4, - 'battleCell' : SigRoomCell, - 'pos' : Point3(5,-3.25,0), - 'h' : -90, - 'behavior' : 'stand', - 'path' : None, - 'skeleton' : 0, - }, - ] +BattleCells = {LobbyCell: {'parentEntId': LobbyParent, 'pos': Point3(0, 0, 0)}, BoilerCell: {'parentEntId': BoilerParent, 'pos': Point3(0, 0, 0)}, OilCell: {'parentEntId': OilParent, 'pos': Point3(0, 0, 0)}, ControlCell: {'parentEntId': ControlParent, 'pos': Point3(0, 0, 0)}, CenterSiloCell: {'parentEntId': CenterSiloBattleCellParent, 'pos': Point3(0, 0, 0)}, PipeLeftCell: {'parentEntId': PipeLeftParent, 'pos': Point3(0, 0, 0)}, PipeRightCell: {'parentEntId': PipeRightParent, 'pos': Point3(0, 0, 0)}, DuctCell: {'parentEntId': DuctParent, 'pos': Point3(0, 0, 0)}, SigRoomCell: {'parentEntId': SigRoomParent, 'pos': Point3(0, 0, 0)}, WestSiloCell: {'parentEntId': WestSiloBattleCellParent, 'pos': Point3(0, 0, 0)}, EastSiloCell: {'parentEntId': EastSiloBattleCellParent, 'pos': Point3(-20, -10, 0)}} +CogData = [{'type': 'cc', 'parentEntId': LobbyParent, 'boss': 0, 'level': 3, 'battleCell': LobbyCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20078, 'skeleton': 0}, {'type': 'tm', 'parentEntId': LobbyParent, 'boss': 0, 'level': 5, 'battleCell': LobbyCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20009, 'skeleton': 0}, {'type': 'tm', 'parentEntId': LobbyParent, 'boss': 0, 'level': 3, 'battleCell': LobbyCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20079, 'skeleton': 0}, {'type': 'cc', 'parentEntId': BoilerParent, 'boss': 0, 'level': 3, 'battleCell': BoilerCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'walk', 'path': 20076, 'skeleton': 0}, {'type': 'tm', 'parentEntId': BoilerParent, 'boss': 0, 'level': 5, 'battleCell': BoilerCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'walk', 'path': 20077, 'skeleton': 0}, {'type': 'tm', 'parentEntId': BoilerParent, 'boss': 0, 'level': 6, 'battleCell': BoilerCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': OilParent, 'boss': 0, 'level': 4, 'battleCell': OilCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 60133, 'skeleton': 0}, {'type': 'tm', 'parentEntId': OilParent, 'boss': 0, 'level': 5, 'battleCell': OilCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 60134, 'skeleton': 0}, {'type': 'tm', 'parentEntId': OilParent, 'boss': 0, 'level': 5, 'battleCell': OilCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 60135, 'skeleton': 0}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 5, 'battleCell': ControlCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20039, 'skeleton': 1}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 6, 'battleCell': ControlCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20049, 'skeleton': 1}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 5, 'battleCell': ControlCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20075, 'skeleton': 1}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 6, 'battleCell': CenterSiloCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20103, 'skeleton': 0}, {'type': 'gh', 'parentEntId': CenterSiloParent, 'boss': 1, 'level': 9, 'battleCell': CenterSiloCell, 'pos': Point3(0, 0, 0), 'h': 180, 'behavior': 'stand', 'path': None, 'skeleton': 1}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 6, 'battleCell': CenterSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20104, 'skeleton': 0}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 6, 'battleCell': CenterSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20105, 'skeleton': 0}, {'type': 'tm', 'parentEntId': WestSiloParent, 'boss': 0, 'level': 6, 'battleCell': WestSiloCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20097, 'skeleton': 0}, {'type': 'gh', 'parentEntId': WestSiloParent, 'boss': 0, 'level': 6, 'battleCell': WestSiloCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20098, 'skeleton': 0}, {'type': 'tm', 'parentEntId': WestSiloParent, 'boss': 0, 'level': 7, 'battleCell': WestSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20099, 'skeleton': 0}, {'type': 'tm', 'parentEntId': EastSiloParent, 'boss': 0, 'level': 6, 'battleCell': EastSiloCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20100, 'skeleton': 0}, {'type': 'gh', 'parentEntId': EastSiloParent, 'boss': 0, 'level': 6, 'battleCell': EastSiloCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20101, 'skeleton': 0}, {'type': 'tm', 'parentEntId': EastSiloParent, 'boss': 0, 'level': 7, 'battleCell': EastSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20102, 'skeleton': 0}, {'type': 'tm', 'parentEntId': PipeLeftParent, 'boss': 0, 'level': 5, 'battleCell': PipeLeftCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20109, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeLeftParent, 'boss': 0, 'level': 4, 'battleCell': PipeLeftCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20110, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeLeftParent, 'boss': 0, 'level': 4, 'battleCell': PipeLeftCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20111, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeRightParent, 'boss': 0, 'level': 4, 'battleCell': PipeRightCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20106, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeRightParent, 'boss': 0, 'level': 5, 'battleCell': PipeRightCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20107, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeRightParent, 'boss': 0, 'level': 4, 'battleCell': PipeRightCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20108, 'skeleton': 1}, {'type': 'cc', 'parentEntId': DuctParent, 'boss': 0, 'level': 3, 'battleCell': DuctCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20038, 'skeleton': 0}, {'type': 'tm', 'parentEntId': DuctParent, 'boss': 0, 'level': 5, 'battleCell': DuctCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20067, 'skeleton': 0}, {'type': 'tm', 'parentEntId': DuctParent, 'boss': 0, 'level': 4, 'battleCell': DuctCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20068, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 4, 'battleCell': SigRoomCell, 'pos': Point3(5, -10.75, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 5, 'battleCell': SigRoomCell, 'pos': Point3(5, -3.25, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 4, 'battleCell': SigRoomCell, 'pos': Point3(5, 3.25, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 6, 'battleCell': SigRoomCell, 'pos': Point3(5, 10.75, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}] +ReserveCogData = [{'type': 'cc', 'parentEntId': LobbyParent, 'boss': 0, 'level': 2, 'battleCell': LobbyCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20009, 'skeleton': 0, 'joinParent': 20018}, {'type': 'cc', 'parentEntId': BoilerParent, 'boss': 0, 'level': 2, 'battleCell': BoilerCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'walk', 'path': 20076, 'skeleton': 0, 'joinParent': 20019}, {'type': 'tm', 'parentEntId': BoilerParent, 'boss': 0, 'level': 2, 'battleCell': BoilerCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'walk', 'path': 20077, 'skeleton': 0, 'joinParent': 20019}, {'type': 'tm', 'parentEntId': OilParent, 'boss': 0, 'level': 3, 'battleCell': OilCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 60133, 'skeleton': 0}, {'type': 'tm', 'parentEntId': OilParent, 'boss': 0, 'level': 4, 'battleCell': OilCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 60135, 'skeleton': 0}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 2, 'battleCell': ControlCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20039, 'skeleton': 1}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 2, 'battleCell': ControlCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20049, 'skeleton': 1}, {'type': 'cc', 'parentEntId': ControlParent, 'boss': 0, 'level': 2, 'battleCell': ControlCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'walk', 'path': 20075, 'skeleton': 1}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 3, 'battleCell': CenterSiloCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20103, 'skeleton': 0}, {'type': 'gh', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 5, 'battleCell': CenterSiloCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 3, 'battleCell': CenterSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20104, 'skeleton': 0}, {'type': 'tm', 'parentEntId': CenterSiloParent, 'boss': 0, 'level': 3, 'battleCell': CenterSiloCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20105, 'skeleton': 0}, {'type': 'tm', 'parentEntId': PipeLeftParent, 'boss': 0, 'level': 3, 'battleCell': PipeLeftCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeLeftParent, 'boss': 0, 'level': 4, 'battleCell': PipeLeftCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeRightParent, 'boss': 0, 'level': 3, 'battleCell': PipeRightCell, 'pos': Point3(-10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 1}, {'type': 'tm', 'parentEntId': PipeRightParent, 'boss': 0, 'level': 4, 'battleCell': PipeRightCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': None, 'skeleton': 1}, {'type': 'cc', 'parentEntId': DuctParent, 'boss': 0, 'level': 2, 'battleCell': DuctCell, 'pos': Point3(0, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20038, 'skeleton': 0}, {'type': 'tm', 'parentEntId': DuctParent, 'boss': 0, 'level': 2, 'battleCell': DuctCell, 'pos': Point3(10, 0, 0), 'h': 0, 'behavior': 'chase', 'path': 20067, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 3, 'battleCell': SigRoomCell, 'pos': Point3(5, -10.75, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}, {'type': 'tm', 'parentEntId': SigRoomParent, 'boss': 0, 'level': 4, 'battleCell': SigRoomCell, 'pos': Point3(5, -3.25, 0), 'h': -90, 'behavior': 'stand', 'path': None, 'skeleton': 0}] \ No newline at end of file diff --git a/toontown/src/coghq/SellbotLegFactorySpec.py b/toontown/src/coghq/SellbotLegFactorySpec.py index 400aa2b3..72c93a16 100644 --- a/toontown/src/coghq/SellbotLegFactorySpec.py +++ b/toontown/src/coghq/SellbotLegFactorySpec.py @@ -1,5461 +1,4 @@ -from toontown.toonbase import TTLocalizer from toontown.coghq.SpecImports import * - -GlobalEntities = { - # LEVELMGR - 1000: { - 'type': 'levelMgr', - 'name': 'LevelMgr', - 'comment': '', - 'parentEntId': 0, - 'cogLevel': 0, - 'farPlaneDistance': 1500.0, - 'modelFilename': 'phase_9/models/cogHQ/SelbotLegFactory', - 'wantDoors': 1, - }, # end entity 1000 - # EDITMGR - 1001: { - 'type': 'editMgr', - 'name': 'EditMgr', - 'parentEntId': 0, - 'insertEntity': None, - 'removeEntity': None, - 'requestNewEntity': None, - 'requestSave': None, - }, # end entity 1001 - # ZONE - 0: { - 'type': 'zone', - 'name': 'UberZone', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 0 - 3: { - 'type': 'zone', - 'name': 'Main Entrance', - 'comment': '', - 'parentEntId': 0, - 'scale': Vec3(1, 1, 1), - 'description': TTLocalizer.SellbotLegFactorySpecMainEntrance, - 'visibility': [114], - }, # end entity 3 - 4: { - 'type': 'zone', - 'name': 'Lobby', - 'comment': '', - 'parentEntId': 0, - 'scale': Vec3(1, 1, 1), - 'description': TTLocalizer.SellbotLegFactorySpecLobby, - 'visibility': [113, 114], - }, # end entity 4 - 5: { - 'type': 'zone', - 'name': 'hallwayFromLobby', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [113, 116], - }, # end entity 5 - 6: { - 'type': 'zone', - 'name': 'hallwayToBoiler/Control/Lookout', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecLobbyHallway, - 'visibility': [109, 116, 117, 118], - }, # end entity 6 - 7: { - 'type': 'zone', - 'name': 'GearRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecGearRoom, - 'visibility': [109, 110], - }, # end entity 7 - 8: { - 'type': 'zone', - 'name': 'BoilerRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecBoilerRoom, - 'visibility': [108, 117], - }, # end entity 8 - 9: { - 'type': 'zone', - 'name': 'EastCatwalk', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecEastCatwalk, - 'visibility': [23, 25, 26, 33, 34, 35, 38, 41, 53, 110, 112, 115, 124, 200, 222], - }, # end entity 9 - 10: { - 'type': 'zone', - 'name': 'PaintMixer', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecPaintMixer, - 'visibility': [11, 111, 112], - }, # end entity 10 - 11: { - 'type': 'zone', - 'name': 'PaintMixerRewardRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecPaintMixerStorageRoom, - 'visibility': [10, 111, 112], - }, # end entity 11 - 12: { - 'type': 'zone', - 'name': 'WestSiloCatwalk', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWestSiloCatwalk, - 'visibility': [21, 26, 33, 34, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 119, 120, 125, 127, 128, 129, 130, 200], - }, # end entity 12 - 13: { - 'type': 'zone', - 'name': 'PipeRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecPipeRoom, - 'visibility': [119, 121], - }, # end entity 13 - 14: { - 'type': 'zone', - 'name': 'StairsToPipeRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [17, 18, 121, 126, 131], - }, # end entity 14 - 15: { - 'type': 'zone', - 'name': 'DuctRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecDuctRoom, - 'visibility': [106, 126], - }, # end entity 15 - 16: { - 'type': 'zone', - 'name': 'Side Entrance', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecSideEntrance, - 'visibility': [106], - }, # end entity 16 - 17: { - 'type': 'zone', - 'name': 'StomperAlley', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecStomperAlley, - 'visibility': [14, 121, 126, 131], - }, # end entity 17 - 18: { - 'type': 'zone', - 'name': 'LavaRoomFoyer', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecLavaRoomFoyer, - 'visibility': [19, 20, 102, 103, 105, 131], - }, # end entity 18 - 19: { - 'type': 'zone', - 'name': 'LavaRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecLavaRoom, - 'visibility': [17, 18, 20, 105, 131], - }, # end entity 19 - 20: { - 'type': 'zone', - 'name': 'LavaRewardRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecLavaStorageRoom, - 'visibility': [18, 19, 105], - }, # end entity 20 - 21: { - 'type': 'zone', - 'name': 'WestCatwalk', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWestCatwalk, - 'visibility': [12, 23, 26, 33, 34, 35, 40, 41, 53, 60, 108, 119, 120, 125, 127, 200], - }, # end entity 21 - 22: { - 'type': 'zone', - 'name': 'OilRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecOilRoom, - 'visibility': [107], - }, # end entity 22 - 23: { - 'type': 'zone', - 'name': 'Lookout', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecLookout, - 'visibility': [24, 39, 115, 118, 120, 123, 124, 125], - }, # end entity 23 - 24: { - 'type': 'zone', - 'name': 'Warehouse', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWarehouse, - 'visibility': [23, 39, 115, 120, 123, 124, 125], - }, # end entity 24 - 25: { - 'type': 'zone', - 'name': 'PaintMixerExterior', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 25 - 26: { - 'type': 'zone', - 'name': 'WarehouseExterior', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 26 - 27: { - 'type': 'zone', - 'name': 'OilRoomHallway', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecOilRoomHallway, - 'visibility': [105, 107, 127], - }, # end entity 27 - 30: { - 'type': 'zone', - 'name': 'EastSiloControlRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecEastSiloControlRoom, - 'visibility': [130], - }, # end entity 30 - 31: { - 'type': 'zone', - 'name': 'WestSiloControlRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWestSiloControlRoom, - 'visibility': [128], - }, # end entity 31 - 32: { - 'type': 'zone', - 'name': 'CenterSiloControlRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecCenterSiloControlRoom, - 'visibility': [129], - }, # end entity 32 - 33: { - 'type': 'zone', - 'name': 'EastSilo', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecEastSilo, - 'visibility': [9, 12, 21, 25, 26, 34, 35, 36, 37, 38, 40, 41, 53, 60, 61, 108, 110, 112, 119, 124, 128, 129, 130, 200, 222], - }, # end entity 33 - 34: { - 'type': 'zone', - 'name': 'WestSilo', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWestSilo, - 'visibility': [9, 12, 21, 25, 26, 33, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 120, 125, 127, 128, 129, 130, 200], - }, # end entity 34 - 35: { - 'type': 'zone', - 'name': 'CenterSilo', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecCenterSilo, - 'visibility': [9, 21, 25, 26, 33, 34, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 128, 129, 130, 200], - }, # end entity 35 - 36: { - 'type': 'zone', - 'name': 'WestSiloBridge', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [9, 12, 21, 25, 26, 33, 34, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 127, 128, 129, 130, 200], - }, # end entity 36 - 37: { - 'type': 'zone', - 'name': 'EastSiloBridge', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [9, 12, 21, 25, 26, 33, 34, 35, 36, 37, 38, 40, 41, 53, 60, 61, 108, 110, 112, 119, 128, 129, 130, 200, 222], - }, # end entity 37 - 38: { - 'type': 'zone', - 'name': 'EastSiloCatwalk', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecEastSiloCatwalk, - 'visibility': [9, 25, 26, 33, 34, 35, 36, 37, 41, 53, 60, 110, 112, 115, 124, 200, 222], - }, # end entity 38 - 39: { - 'type': 'zone', - 'name': 'WarehouseCeiling', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 39 - 40: { - 'type': 'zone', - 'name': 'WestExterior', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 40 - 41: { - 'type': 'zone', - 'name': 'EastExterior', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 41 - 53: { - 'type': 'zone', - 'name': 'ExteriorFloor', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 53 - 60: { - 'type': 'zone', - 'name': 'WestElevatorShaft', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecWestElevatorShaft, - 'visibility': [12,34], - }, # end entity 60 - 61: { - 'type': 'zone', - 'name': 'EastElevatorShaft', - 'comment': 'no geom or DCS', - 'parentEntId': 0, - 'scale': 1, - 'description': TTLocalizer.SellbotLegFactorySpecEastElevatorShaft, - 'visibility': [33,38], - }, # end entity 61 - 101: { - 'type': 'zone', - 'name': 'dwToLavaRewardRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 101 - 102: { - 'type': 'zone', - 'name': 'dwToLavaRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 102 - 103: { - 'type': 'zone', - 'name': 'dwToLavaRoomHallway', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 103 - 105: { - 'type': 'zone', - 'name': 'dwToOilRoomCatwalks', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 105 - 106: { - 'type': 'zone', - 'name': 'dwToDuctRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 106 - 107: { - 'type': 'zone', - 'name': 'dwToOilRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 107 - 108: { - 'type': 'zone', - 'name': 'dwFromBoilerRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 108 - 109: { - 'type': 'zone', - 'name': 'dwToGearRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 109 - 110: { - 'type': 'zone', - 'name': 'dwFromGearRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 110 - 111: { - 'type': 'zone', - 'name': 'dwToPaintMixerRewardRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 111 - 112: { - 'type': 'zone', - 'name': 'dwToPaintMixer', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 112 - 113: { - 'type': 'zone', - 'name': 'dwFromLobby', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 113 - 114: { - 'type': 'zone', - 'name': 'dwToLobby', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 114 - 115: { - 'type': 'zone', - 'name': 'dwToWarehouseFromRight', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 115 - 116: { - 'type': 'zone', - 'name': 'dwFromLobbyFar', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 116 - 117: { - 'type': 'zone', - 'name': 'dwToBoilerRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 117 - 118: { - 'type': 'zone', - 'name': 'dwToLookout', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 118 - 119: { - 'type': 'zone', - 'name': 'dwFromPipeRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 119 - 120: { - 'type': 'zone', - 'name': 'dwToWarehouseFromLeft', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 120 - 121: { - 'type': 'zone', - 'name': 'dwToPipeRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 121 - 122: { - 'type': 'zone', - 'name': 'dwToWarehouseControlRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 122 - 123: { - 'type': 'zone', - 'name': 'dwFromWarehouseFloor', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 123 - 124: { - 'type': 'zone', - 'name': 'dwFromWarehouseRight', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 124 - 125: { - 'type': 'zone', - 'name': 'dwFromWarehouseLeft', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 125 - 126: { - 'type': 'zone', - 'name': 'dwFromDuctRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 126 - 127: { - 'type': 'zone', - 'name': 'dwFromOilRoomHallway', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 127 - 128: { - 'type': 'zone', - 'name': 'dwToWestSiloRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 128 - 129: { - 'type': 'zone', - 'name': 'dwToCenterSiloRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 129 - 130: { - 'type': 'zone', - 'name': 'dwToEastSiloRoom', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 130 - 131: { - 'type': 'zone', - 'name': 'dwFromStomperAlley', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 131 - 200: { - 'type': 'zone', - 'name': 'sky', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 200 - 201: { - 'type': 'zone', - 'name': 'extraZone201', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 201 - 202: { - 'type': 'zone', - 'name': 'extraZone202', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 202 - 203: { - 'type': 'zone', - 'name': 'extraZone203', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 203 - 204: { - 'type': 'zone', - 'name': 'extraZone204', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 204 - 205: { - 'type': 'zone', - 'name': 'extraZone205', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 205 - 206: { - 'type': 'zone', - 'name': 'extraZone206', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 206 - 207: { - 'type': 'zone', - 'name': 'extraZone207', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 207 - 208: { - 'type': 'zone', - 'name': 'extraZone208', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 208 - 209: { - 'type': 'zone', - 'name': 'extraZone209', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 209 - 210: { - 'type': 'zone', - 'name': 'extraZone210', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 210 - 211: { - 'type': 'zone', - 'name': 'extraZone211', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 211 - 212: { - 'type': 'zone', - 'name': 'extraZone212', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 212 - 213: { - 'type': 'zone', - 'name': 'extraZone213', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 213 - 214: { - 'type': 'zone', - 'name': 'extraZone214', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 214 - 215: { - 'type': 'zone', - 'name': 'extraZone215', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 215 - 216: { - 'type': 'zone', - 'name': 'extraZone216', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 216 - 217: { - 'type': 'zone', - 'name': 'extraZone217', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 217 - 218: { - 'type': 'zone', - 'name': 'extraZone218', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 218 - 219: { - 'type': 'zone', - 'name': 'extraZone219', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 219 - 220: { - 'type': 'zone', - 'name': 'extraZone220', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 220 - 221: { - 'type': 'zone', - 'name': 'extraZone221', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 221 - 222: { - 'type': 'zone', - 'name': 'dwToEastSiloInterior', - 'comment': '', - 'parentEntId': 0, - 'scale': 1, - 'description': '', - 'visibility': [], - }, # end entity 222 - # AMBIENTSOUND - 10010: { - 'type': 'ambientSound', - 'name': 'westWind', - 'comment': '', - 'parentEntId': 35, - 'pos': Point3(-52.7549, -38.8374, 53.3758), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'enabled': 1, - 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_whistling_wind.mp3', - 'volume': 1, - }, # end entity 10010 - 10016: { - 'type': 'ambientSound', - 'name': 'sndConveyorBelt', - 'comment': '', - 'parentEntId': 10056, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'enabled': 1, - 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_conveyor_belt.mp3', - 'volume': 0.5, - }, # end entity 10016 - 10053: { - 'type': 'ambientSound', - 'name': 'eastWind', - 'comment': '', - 'parentEntId': 35, - 'pos': Point3(52.75, -38.84, 53.38), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'enabled': 1, - 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_whistling_wind.mp3', - 'volume': 1, - }, # end entity 10053 - 10055: { - 'type': 'ambientSound', - 'name': 'sndGears', - 'comment': '', - 'parentEntId': 10056, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'enabled': 1, - 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_gears_turning.mp3', - 'volume': 1, - }, # end entity 10055 - # BATTLEBLOCKER - 10031: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 8, - 'pos': Point3(-1, 79, 10), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1.75, 1, 1), - 'cellId': 1, - 'radius': 10.0, - }, # end entity 10031 - 10035: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 10039, - 'pos': Point3(0, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 4, - 'radius': 10.0, - }, # end entity 10035 - 10038: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 7, - 'pos': Point3(0, -28.04, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 5, - 'radius': 10.0, - }, # end entity 10038 - 20048: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0.973602, 71.7, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 0.2, 1), - 'cellId': 0, - 'radius': 15.0, - }, # end entity 20048 - 20063: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 20033, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 8, - 'radius': 1, - }, # end entity 20063 - 20064: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 20034, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 8, - 'radius': 1, - }, # end entity 20064 - 20065: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 20035, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 8, - 'radius': 1, - }, # end entity 20065 - 20066: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 20036, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'cellId': 8, - 'radius': 1, - }, # end entity 20066 - 20086: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(0, 33, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(2, 1, 1), - 'cellId': 6, - 'radius': 12.0, - }, # end entity 20086 - 20112: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(-10.0936, -9.55975, 4), - 'hpr': Point3(45, 0, 0), - 'scale': Point3(10, 1, 5), - 'cellId': 10, - 'radius': 5.0, - }, # end entity 20112 - 20113: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(9.08399, 4.42157, 0), - 'hpr': Point3(-50, 0, 0), - 'scale': Point3(10, 2, 6), - 'cellId': 9, - 'radius': 5.0, - }, # end entity 20113 - 20114: { - 'type': 'battleBlocker', - 'name': '', - 'comment': '', - 'parentEntId': 60103, - 'pos': Point3(0, 0, 1), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 0.5), - 'cellId': 8, - 'radius': 3.0, - }, # end entity 20114 - # BEANBARREL - 10003: { - 'type': 'beanBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20, - 'pos': Point3(1.25458, 19.2471, 0.0249529), - 'hpr': Vec3(-8.28434, 0, 0), - 'scale': 1, - 'rewardPerGrab': 25, - 'rewardPerGrabMax': 0, - }, # end entity 10003 - 10011: { - 'type': 'beanBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20, - 'pos': Point3(16.344, -9.73, 0.025), - 'hpr': Vec3(-79.8888, 0, 0), - 'scale': 1, - 'rewardPerGrab': 25, - 'rewardPerGrabMax': 0, - }, # end entity 10011 - 20017: { - 'type': 'beanBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(20.0035, 2.94232, 0), - 'hpr': Vec3(-31.6033, 0, 0), - 'scale': 1, - 'rewardPerGrab': 35, - 'rewardPerGrabMax': 0, - }, # end entity 20017 - # BUTTON - 10039: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 22, - 'pos': Point3(-7, 29, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(4, 4, 4), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 10039 - 20033: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(3, 3, 3), - 'color': Vec4(0.862745, 0.517647, 0.0941177, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - }, # end entity 20033 - 20034: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(7.5, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(3, 3, 3), - 'color': Vec4(0.862745, 0.517647, 0.0941177, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - }, # end entity 20034 - 20035: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(15, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(3, 3, 3), - 'color': Vec4(0.862745, 0.517647, 0.0941177, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - }, # end entity 20035 - 20036: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(22.5, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(3, 3, 3), - 'color': Vec4(0.862745, 0.517647, 0.0941177, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - }, # end entity 20036 - 30040: { - 'type': 'button', - 'name': 'door button', - 'comment': 'Entrance door unlock', - 'parentEntId': 3, - 'pos': Point3(0, 6.75, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(3, 3, 3), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 30040 - 30076: { - 'type': 'button', - 'name': 'open door 113', - 'comment': 'Lobby door unlock', - 'parentEntId': 4, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(3, 3, 3), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1, - }, # end entity 30076 - 60102: { - 'type': 'button', - 'name': 'door button', - 'comment': 'Entrance Door Unlock', - 'parentEntId': 16, - 'pos': Point3(4, 8, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(3, 3, 3), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 60102 - 60103: { - 'type': 'button', - 'name': 'door button', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(25, -7, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(4, 4, 4), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 60103 - 60104: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 31, - 'pos': Point3(0, 10, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(5, 5, 4), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 60104 - 60105: { - 'type': 'button', - 'name': 'door button', - 'comment': '', - 'parentEntId': 30, - 'pos': Point3(-4, 7, 0), - 'hpr': Point3(0, 0, 0), - 'scale': Point3(5, 5, 4), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 60105 - 60118: { - 'type': 'button', - 'name': '', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(0, 20, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(3, 3, 3), - 'color': Vec4(1, 0, 0, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': -1.0, - }, # end entity 60118 - # CONVEYORBELT - 10005: { - 'type': 'conveyorBelt', - 'name': 'belt', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0, 45.2024, 7.24937), - 'hpr': Point3(180, 0, 0), - 'scale': 1, - 'floorName': 'platformcollision', - 'length': 78.818813527042181, - 'speed': 2.0, - 'treadLength': 10.0, - 'treadModelPath': 'phase_9/models/cogHQ/platform1', - 'widthScale': 0.84999999999999998, - }, # end entity 10005 - # CRATE - 20081: { - 'type': 'crate', - 'name': '', - 'comment': '', - 'parentEntId': 20080, - 'pos': Point3(0, 0, 0), - 'scale': 0.920000016689, - 'crushCellId': None, - 'gridId': 20080, - 'modelType': 0, - 'pushable': 1, - }, # end entity 20081 - 20091: { - 'type': 'crate', - 'name': '', - 'comment': '', - 'parentEntId': 20090, - 'pos': Point3(0, 23, 0), - 'scale': 0.920000016689, - 'crushCellId': None, - 'gridId': 20090, - 'modelType': 0, - 'pushable': 1, - }, # end entity 20091 - # CRUSHERCELL - 20024: { - 'type': 'crusherCell', - 'name': '', - 'comment': '', - 'parentEntId': 20023, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'col': 1, - 'gridId': 20025, - 'row': 14, - }, # end entity 20024 - 20026: { - 'type': 'crusherCell', - 'name': '', - 'comment': '', - 'parentEntId': 20023, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'col': 10, - 'gridId': 20025, - 'row': 14, - }, # end entity 20026 - 20027: { - 'type': 'crusherCell', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 20023, - 'pos': Point3(1, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'col': 21, - 'gridId': 20025, - 'row': 14, - }, # end entity 20027 - 20028: { - 'type': 'crusherCell', - 'name': 'copy of copy of ', - 'comment': '', - 'parentEntId': 20023, - 'pos': Point3(2, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'col': 28, - 'gridId': 20025, - 'row': 14, - }, # end entity 20028 - # CUTSCENE - 30078: { - 'type': 'cutScene', - 'name': 'button door', - 'comment': '', - 'parentEntId': 114, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'duration': 4.0, - 'effect': 'irisInOut', - 'motion': 'doorUnlock', - 'startStopEvent': 30077, - }, # end entity 30078 - # DOOR - 10002: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 128, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 10002 - 10052: { - 'type': 'door', - 'name': 'door 127', - 'comment': '', - 'parentEntId': 127, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 10039, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 10052 - 30000: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 114, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 60132, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30000 - 30001: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 105, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1.0, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30001 - 30002: { - 'type': 'door', - 'name': 'door 106', - 'comment': '', - 'parentEntId': 106, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 60132, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30002 - 30003: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 107, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30003 - 30004: { - 'type': 'door', - 'name': 'doorFromBoilerRoom', - 'comment': '', - 'parentEntId': 108, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30004 - 30005: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 109, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30005 - 30006: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 110, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30006 - 30008: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 112, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30008 - 30009: { - 'type': 'door', - 'name': 'door 113', - 'comment': '', - 'parentEntId': 113, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 60119, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30009 - 30010: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 115, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30010 - 30011: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 116, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30011 - 30012: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 117, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30012 - 30013: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 118, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30013 - 30014: { - 'type': 'door', - 'name': 'doorFromPipeRoom 119', - 'comment': '', - 'parentEntId': 119, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30014 - 30015: { - 'type': 'door', - 'name': 'door 120', - 'comment': '', - 'parentEntId': 120, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30015 - 30016: { - 'type': 'door', - 'name': 'door 121', - 'comment': '', - 'parentEntId': 121, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30016 - 30017: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 122, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30017 - 30018: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 123, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 0, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 60103, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30018 - 30019: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 124, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30019 - 30020: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 125, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30020 - 30021: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 126, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 60119, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 30021 - 60088: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 131, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1.0, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 60088 - 60094: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 129, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 0, - 'isLock2Unlocked': 0, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1.0, - 'unlock0Event': 0, - 'unlock1Event': 60104, - 'unlock2Event': 60105, - 'unlock3Event': 0, - }, # end entity 60094 - 60095: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 130, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 60095 - 60101: { - 'type': 'door', - 'name': '', - 'comment': '', - 'parentEntId': 222, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'color': Vec4(1, 1, 1, 1), - 'isLock0Unlocked': 1, - 'isLock1Unlocked': 1, - 'isLock2Unlocked': 1, - 'isLock3Unlocked': 1, - 'isOpen': 0, - 'isOpenEvent': 0, - 'isVisBlocker': 1, - 'secondsOpen': 1, - 'unlock0Event': 0, - 'unlock1Event': 0, - 'unlock2Event': 0, - 'unlock3Event': 0, - }, # end entity 60101 - # ENTITYGROUP - 10049: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 3, - }, # end entity 10049 - 10051: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 4, - }, # end entity 10051 - 60000: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 5, - }, # end entity 60000 - 60001: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 6, - }, # end entity 60001 - 60002: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 7, - }, # end entity 60002 - 60003: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 9, - }, # end entity 60003 - 60004: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 10, - }, # end entity 60004 - 60005: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 8, - }, # end entity 60005 - 60006: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 21, - }, # end entity 60006 - 60007: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 24, - }, # end entity 60007 - 60009: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 38, - }, # end entity 60009 - 60011: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 12, - }, # end entity 60011 - 60013: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 13, - }, # end entity 60013 - 60014: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 14, - }, # end entity 60014 - 60015: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 17, - }, # end entity 60015 - 60016: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 15, - }, # end entity 60016 - 60017: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 16, - }, # end entity 60017 - 60018: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 19, - }, # end entity 60018 - 60019: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 18, - }, # end entity 60019 - 60024: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 22, - }, # end entity 60024 - 60031: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 23, - }, # end entity 60031 - 60044: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 33, - }, # end entity 60044 - 60066: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 11, - }, # end entity 60066 - 60067: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 27, - }, # end entity 60067 - 60096: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 30, - }, # end entity 60096 - 60108: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 34, - }, # end entity 60108 - 60111: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 36, - }, # end entity 60111 - 60114: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 37, - }, # end entity 60114 - 60121: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 31, - }, # end entity 60121 - 60126: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 35, - }, # end entity 60126 - 60130: { - 'type': 'entityGroup', - 'name': 'viz', - 'comment': '', - 'parentEntId': 32, - }, # end entity 60130 - # ENTRANCEPOINT - 10028: { - 'type': 'entrancePoint', - 'name': 'entrance1', - 'comment': '', - 'parentEntId': 3, - 'pos': Point3(0, 10, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'entranceId': 0, - 'radius': 15, - 'theta': 20, - }, # end entity 10028 - 10029: { - 'type': 'entrancePoint', - 'name': 'entrance2', - 'comment': '', - 'parentEntId': 16, - 'pos': Point3(0, 10, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'entranceId': 1, - 'radius': 15, - 'theta': 20, - }, # end entity 10029 - # GAGBARREL - 10021: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(-2.02081, 0, 0), - 'hpr': Vec3(337.477, 0, 0), - 'scale': 1, - 'gagLevel': 2, - 'gagLevelMax': 0, - 'gagTrack': 0, - 'rewardPerGrab': 3, - 'rewardPerGrabMax': 0, - }, # end entity 10021 - 10024: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(20.3012, -26.3219, 0), - 'hpr': Vec3(233.187, 0, 0), - 'scale': 1, - 'gagLevel': 4, - 'gagLevelMax': 0, - 'gagTrack': 4, - 'rewardPerGrab': 4, - 'rewardPerGrabMax': 0, - }, # end entity 10024 - 10025: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(-47.312, 7.22571, 0), - 'hpr': Vec3(19.1524, 0, 0), - 'scale': 1, - 'gagLevel': 0, - 'gagLevelMax': 0, - 'gagTrack': 0, - 'rewardPerGrab': 3, - 'rewardPerGrabMax': 0, - }, # end entity 10025 - 10026: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 10022, - 'pos': Point3(-11.2037, 5.43514, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'gagLevel': 4, - 'gagLevelMax': 0, - 'gagTrack': 5, - 'rewardPerGrab': 4, - 'rewardPerGrabMax': 0, - }, # end entity 10026 - 20020: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20, - 'pos': Point3(-23.0209, 0, 0), - 'hpr': Vec3(126.676, 0, 0), - 'scale': 1, - 'gagLevel': 4, - 'gagLevelMax': 0, - 'gagTrack': 3, - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 20020 - 20021: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20, - 'pos': Point3(-31.3225, 14.1021, 0), - 'hpr': Vec3(-136.57, 0, 0), - 'scale': 1, - 'gagLevel': 4, - 'gagLevelMax': 0, - 'gagTrack': 5, - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 20021 - 20085: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 5, - 'pos': Point3(3.14, 12.6703, 10.12), - 'hpr': Vec3(-24.8105, 0, 0), - 'scale': 1, - 'gagLevel': 5, - 'gagLevelMax': 0, - 'gagTrack': 4, - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 20085 - 20093: { - 'type': 'gagBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20087, - 'pos': Point3(2.4, -1, 7), - 'hpr': Vec3(-151.532, 0, 0), - 'scale': 1, - 'gagLevel': 0, - 'gagLevelMax': 0, - 'gagTrack': 0, - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 20093 - # GEAR - 10006: { - 'type': 'gear', - 'name': 'first', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0, 0, 26.0634), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'degreesPerSec': 20.0, - 'gearScale': 25.0, - 'modelType': 'factory', - 'orientation': 'vertical', - 'phaseShift': 0, - }, # end entity 10006 - 10007: { - 'type': 'gear', - 'name': 'second', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0, 15, 26.06), - 'hpr': Point3(180, 0, 0), - 'scale': 1, - 'degreesPerSec': 30.0, - 'gearScale': 25.0, - 'modelType': 'factory', - 'orientation': 'vertical', - 'phaseShift': 0, - }, # end entity 10007 - 10008: { - 'type': 'gear', - 'name': 'third', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0, 30, 26.06), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'degreesPerSec': 40.0, - 'gearScale': 25.0, - 'modelType': 'factory', - 'orientation': 'vertical', - 'phaseShift': 0, - }, # end entity 10008 - 10009: { - 'type': 'gear', - 'name': 'fourth', - 'comment': '', - 'parentEntId': 10004, - 'pos': Point3(0, 45, 26.06), - 'hpr': Point3(180, 0, 0), - 'scale': 1, - 'degreesPerSec': 47.0, - 'gearScale': 25.0, - 'modelType': 'factory', - 'orientation': 'vertical', - 'phaseShift': 0, - }, # end entity 10009 - # GOON - 20013: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20012, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.25, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 4, - }, # end entity 20013 - 20014: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20010, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.25, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 4, - }, # end entity 20014 - 20016: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20015, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.25, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 4, - }, # end entity 20016 - 20041: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20040, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20026, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 80.0, - 'strength': 10, - 'velocity': 6.0, - }, # end entity 20041 - 20043: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20042, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20024, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 80.0, - 'strength': 10, - 'velocity': 5.0, - }, # end entity 20043 - 20046: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20044, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20024, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 70, - 'strength': 10, - 'velocity': 6.0, - }, # end entity 20046 - 20047: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20045, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20026, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 80.0, - 'strength': 10, - 'velocity': 6.0, - }, # end entity 20047 - 20052: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20051, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 12.0, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 3, - 'velocity': 4.0, - }, # end entity 20052 - 20054: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20053, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20027, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 80.0, - 'strength': 10, - 'velocity': 5.5, - }, # end entity 20054 - 20056: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20055, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20028, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 70, - 'strength': 10, - 'velocity': 6.0, - }, # end entity 20056 - 20060: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20059, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20028, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 90.0, - 'strength': 10, - 'velocity': 6.5, - }, # end entity 20060 - 20062: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20061, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': 20027, - 'goonType': 'pg', - 'gridId': 20025, - 'hFov': 70, - 'strength': 10, - 'velocity': 7.5, - }, # end entity 20062 - 20071: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20070, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 6.0, - }, # end entity 20071 - 20072: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20069, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 80.0, - 'strength': 7, - 'velocity': 6.0, - }, # end entity 20072 - 20074: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20073, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.25, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 4, - }, # end entity 20074 - 20089: { - 'type': 'goon', - 'name': '', - 'comment': '', - 'parentEntId': 20084, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1.5, - 'attackRadius': 15, - 'crushCellId': None, - 'goonType': 'pg', - 'gridId': None, - 'hFov': 70, - 'strength': 7, - 'velocity': 4, - }, # end entity 20089 - # GOONCLIPPLANE - 20115: { - 'type': 'goonClipPlane', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, -7.4, 0), - 'hpr': Point3(-90, 0, 0), - 'scale': Point3(5, 5, 5), - 'goonId': 20052, - }, # end entity 20115 - 20116: { - 'type': 'goonClipPlane', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, -58, 0), - 'hpr': Point3(90, 0, 0), - 'scale': 1, - 'goonId': None, - }, # end entity 20116 - 20117: { - 'type': 'goonClipPlane', - 'name': '', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(0, -29, 0), - 'hpr': Point3(90, 0, 0), - 'scale': 1, - 'goonId': None, - }, # end entity 20117 - 20118: { - 'type': 'goonClipPlane', - 'name': '', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(-52, 0, 5), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'goonId': None, - }, # end entity 20118 - # GRID - 20025: { - 'type': 'grid', - 'name': '', - 'comment': '', - 'parentEntId': 20023, - 'pos': Point3(-48.4442, -24.9385, 0), - 'scale': 1, - 'cellSize': 3, - 'numCol': 30, - 'numRow': 16, - }, # end entity 20025 - 20080: { - 'type': 'grid', - 'name': '', - 'comment': '', - 'parentEntId': 5, - 'pos': Point3(1.5, -10.7, 0), - 'scale': 1, - 'cellSize': 3, - 'numCol': 2, - 'numRow': 5, - }, # end entity 20080 - 20090: { - 'type': 'grid', - 'name': '', - 'comment': '', - 'parentEntId': 17, - 'pos': Point3(-6.5, -111, 0), - 'scale': 1, - 'cellSize': 3, - 'numCol': 2, - 'numRow': 9, - }, # end entity 20090 - # HEALBARREL - 20011: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20, - 'pos': Point3(-2.06235, 20.2198, 0.025), - 'hpr': Vec3(-19.2153, 0, 0), - 'scale': 1, - 'rewardPerGrab': 10, - 'rewardPerGrabMax': 0, - }, # end entity 20011 - 20092: { - 'type': 'healBarrel', - 'name': '', - 'comment': '', - 'parentEntId': 20087, - 'pos': Point3(-1, -1.5, 7), - 'hpr': Vec3(-191.79, 0, 0), - 'scale': 1, - 'rewardPerGrab': 5, - 'rewardPerGrabMax': 0, - }, # end entity 20092 - # LIFT - 10041: { - 'type': 'lift', - 'name': 'westLift', - 'comment': '', - 'parentEntId': 60, - 'pos': Point3(0, 0, 0.0641994), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'autoMoveDelay': 5, - 'duration': 7.0, - 'endBoardSides': ['back'], - 'endGuardName': 'topGuard', - 'endPos': Point3(0, 0, 165), - 'floorName': 'elevator_floor', - 'modelPath': 'phase_9/models/cogHQ/Elevator.bam', - 'modelScale': Vec3(1, 1, 1), - 'moveDelay': 1, - 'startBoardSides': ['front'], - 'startGuardName': 'bottomGuard', - 'startPos': Point3(0, 0, 0), - }, # end entity 10041 - 10048: { - 'type': 'lift', - 'name': 'eastLift', - 'comment': '', - 'parentEntId': 61, - 'pos': Point3(0, -0.684064, 0.589322), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'autoMoveDelay': 5.0, - 'duration': 7.0, - 'endBoardSides': ['front', 'back', 'left', 'right'], - 'endGuardName': 'topGuard', - 'endPos': Point3(0, 0, 165), - 'floorName': 'elevator_floor', - 'modelPath': 'phase_9/models/cogHQ/Elevator.bam', - 'modelScale': Vec3(1, 1, 1), - 'moveDelay': 1, - 'startBoardSides': ['front'], - 'startGuardName': 'bottomGuard', - 'startPos': Point3(0, 0, 0), - }, # end entity 10048 - # LOGICGATE - 10057: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 10043, - 'input1Event': 30009, - 'input2Event': 30000, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 10057 - 10059: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 10058, - 'input1Event': 10057, - 'input2Event': 30011, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 10059 - 10061: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 10060, - 'input1Event': 10059, - 'input2Event': 30013, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 10061 - 10063: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 10062, - 'input1Event': 60033, - 'input2Event': 30009, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 10063 - 30068: { - 'type': 'logicGate', - 'name': 'door 116 and door 118', - 'comment': '', - 'parentEntId': 30069, - 'input1Event': 30013, - 'input2Event': 30011, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 30068 - 60023: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60021, - 'input1Event': 30011, - 'input2Event': 30009, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60023 - 60025: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60022, - 'input1Event': 60023, - 'input2Event': 30013, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60025 - 60028: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60026, - 'input1Event': 30011, - 'input2Event': 30005, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60028 - 60029: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60027, - 'input1Event': 30011, - 'input2Event': 30012, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60029 - 60030: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 30071, - 'input1Event': 30011, - 'input2Event': 30009, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60030 - 60033: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 30073, - 'input1Event': 30013, - 'input2Event': 30011, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60033 - 60034: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 30075, - 'input1Event': 30013, - 'input2Event': 30005, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60034 - 60035: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60032, - 'input1Event': 30013, - 'input2Event': 30012, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60035 - 60037: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60036, - 'input1Event': 30005, - 'input2Event': 30012, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60037 - 60039: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60038, - 'input1Event': 30012, - 'input2Event': 30005, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60039 - 60041: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60040, - 'input1Event': 30020, - 'input2Event': 30019, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60041 - 60043: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60042, - 'input1Event': 30019, - 'input2Event': 30020, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60043 - 60047: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60045, - 'input1Event': 10002, - 'input2Event': 30019, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60047 - 60049: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60048, - 'input1Event': 30003, - 'input2Event': 10052, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60049 - 60051: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60050, - 'input1Event': 30001, - 'input2Event': 10052, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60051 - 60053: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60052, - 'input1Event': 30021, - 'input2Event': 30016, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60053 - 60055: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60054, - 'input1Event': 30002, - 'input2Event': 30021, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60055 - 60057: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60056, - 'input1Event': 30016, - 'input2Event': 30021, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60057 - 60059: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60058, - 'input1Event': 30012, - 'input2Event': 30011, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60059 - 60061: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60060, - 'input1Event': 30012, - 'input2Event': 30013, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60061 - 60064: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60062, - 'input1Event': 30005, - 'input2Event': 30011, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60064 - 60065: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60063, - 'input1Event': 30005, - 'input2Event': 30013, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60065 - 60074: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60072, - 'input1Event': 10052, - 'input2Event': 30003, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60074 - 60075: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60073, - 'input1Event': 10052, - 'input2Event': 30001, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60075 - 60076: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60020, - 'input1Event': 30021, - 'input2Event': 30002, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60076 - 60078: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60077, - 'input1Event': 30021, - 'input2Event': 30002, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60078 - 60080: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60079, - 'input1Event': 60057, - 'input2Event': 30002, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60080 - 60082: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60081, - 'input1Event': 60055, - 'input2Event': 30016, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60082 - 60084: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60083, - 'input1Event': 30004, - 'input2Event': 30014, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60084 - 60086: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60085, - 'input1Event': 30006, - 'input2Event': 30008, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60086 - 60091: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60087, - 'input1Event': 60088, - 'input2Event': 30001, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60091 - 60093: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60092, - 'input1Event': 30001, - 'input2Event': 60088, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60093 - 60100: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60099, - 'input1Event': 60095, - 'input2Event': 10002, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60100 - 60119: { - 'type': 'logicGate', - 'name': 'open sesame Duct & Lobby', - 'comment': 'links together the Duct Room and Lobby buttons', - 'parentEntId': 0, - 'input1Event': 30076, - 'input2Event': 60118, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'or', - }, # end entity 60119 - 60132: { - 'type': 'logicGate', - 'name': 'open sesame Entrances', - 'comment': 'links together the buttons in the two entrances', - 'parentEntId': 0, - 'input1Event': 30040, - 'input2Event': 60102, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'or', - }, # end entity 60132 - 60138: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60137, - 'input1Event': 60095, - 'input2Event': 60094, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60138 - 60141: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60139, - 'input1Event': 10002, - 'input2Event': 60094, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60141 - 60142: { - 'type': 'logicGate', - 'name': '', - 'comment': '', - 'parentEntId': 60140, - 'input1Event': 10002, - 'input2Event': 60095, - 'isInput1': 0, - 'isInput2': 0, - 'logicType': 'and', - }, # end entity 60142 - # MODEL - 10001: { - 'type': 'model', - 'name': 'dropshadow', - 'comment': '', - 'parentEntId': 10006, - 'pos': Point3(0, 0, -25), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(2, 1.5, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_3/models/props/drop_shadow.bam', - }, # end entity 10001 - 10012: { - 'type': 'model', - 'name': 'backCrate', - 'comment': '', - 'parentEntId': 10067, - 'pos': Point3(0, -5.81496, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 2), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 10012 - 10033: { - 'type': 'model', - 'name': 'dropshadow', - 'comment': '', - 'parentEntId': 10007, - 'pos': Point3(0, 0, -25), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(2, 1.5, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_3/models/props/drop_shadow.bam', - }, # end entity 10033 - 10045: { - 'type': 'model', - 'name': 'dropshadow', - 'comment': '', - 'parentEntId': 10008, - 'pos': Point3(0, 0, -25), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(2, 1.5, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_3/models/props/drop_shadow.bam', - }, # end entity 10045 - 10046: { - 'type': 'model', - 'name': 'dropshadow', - 'comment': '', - 'parentEntId': 10009, - 'pos': Point3(0, 0, -25), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(2, 1.5, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_3/models/props/drop_shadow.bam', - }, # end entity 10046 - 10050: { - 'type': 'model', - 'name': 'sky', - 'comment': '', - 'parentEntId': 200, - 'pos': Point3(-142.02, 437.227, 0.922491), - 'hpr': Point3(0, 0, 0), - 'scale': Point3(2.5, 2.5, 2), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/cog_sky.bam', - }, # end entity 10050 - 10066: { - 'type': 'model', - 'name': 'frontCrate', - 'comment': '', - 'parentEntId': 10067, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 10066 - 10069: { - 'type': 'model', - 'name': 'backCrate', - 'comment': '', - 'parentEntId': 10065, - 'pos': Point3(0, -5.81496, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 2), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 10069 - 10070: { - 'type': 'model', - 'name': 'frontCrate', - 'comment': '', - 'parentEntId': 10065, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 10070 - 20082: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 5, - 'pos': Point3(4.50815, 11.6508, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(0.92, 0.92, 0.92), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 20082 - 20083: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 20082, - 'pos': Point3(0, 0, 5.5), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 1), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 20083 - 20088: { - 'type': 'model', - 'name': '', - 'comment': '', - 'parentEntId': 20087, - 'pos': Point3(1, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1.3, 1, 1.3), - 'collisionsOnly': 0, - 'flattenType': 'light', - 'loadType': 'loadModelCopy', - 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam', - }, # end entity 20088 - # NODEPATH - 10000: { - 'type': 'nodepath', - 'name': 'gearGauntletObstacle', - 'comment': '', - 'parentEntId': 10027, - 'pos': Point3(0, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10000 - 10004: { - 'type': 'nodepath', - 'name': 'gearGauntlet', - 'comment': 'gears are staggered 15 ft in Y', - 'parentEntId': 10000, - 'pos': Point3(0, -23.25, 6.85), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10004 - 10014: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, 34.07, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10014 - 10015: { - 'type': 'nodepath', - 'name': 'paint mixer platforms', - 'comment': '', - 'parentEntId': 10, - 'pos': Point3(0, 5.15136, -2), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10015 - 10022: { - 'type': 'nodepath', - 'name': 'gagBarrels', - 'comment': '', - 'parentEntId': 11, - 'pos': Point3(11.2328, 14.7959, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10022 - 10023: { - 'type': 'nodepath', - 'name': 'leftCogs', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(-42.0363, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10023 - 10027: { - 'type': 'nodepath', - 'name': 'zoneNodeCompensate', - 'comment': 'I think the ZoneNode was moved.', - 'parentEntId': 19, - 'pos': Point3(-0.426482, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 10027 - 10030: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 8, - 'pos': Point3(2.5, 62.5, 10), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10030 - 10032: { - 'type': 'nodepath', - 'name': 'rightCogs', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(46.88, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10032 - 10034: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 22, - 'pos': Point3(0, 0, 0), - 'hpr': Point3(180, 0, 0), - 'scale': 1, - }, # end entity 10034 - 10036: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(5.5, 0, 0), - 'hpr': Point3(161, 0, 0), - 'scale': 1, - }, # end entity 10036 - 10037: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 7, - 'pos': Point3(3.1, -48.27, 0.05), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 10037 - 10040: { - 'type': 'nodepath', - 'name': 'FactoryBoss', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(0, 68.4457, 9.5669), - 'hpr': Point3(180, 0, 0), - 'scale': 1, - }, # end entity 10040 - 10047: { - 'type': 'nodepath', - 'name': 'battleCell', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 10047 - 10056: { - 'type': 'nodepath', - 'name': 'sounds', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0, 0, 15), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 10056 - 10064: { - 'type': 'nodepath', - 'name': 'battleCell', - 'comment': '', - 'parentEntId': 32, - 'pos': Point3(0, -5.20447, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 10064 - 10065: { - 'type': 'nodepath', - 'name': 'backSteps', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0, 56.2652, 0), - 'hpr': Point3(0, 0, 0), - 'scale': Point3(1.5, 1.3, 0.73), - }, # end entity 10065 - 10067: { - 'type': 'nodepath', - 'name': 'frontSteps', - 'comment': '', - 'parentEntId': 10000, - 'pos': Point3(0, -44.7196, 0), - 'hpr': Point3(180, 0, 0), - 'scale': Point3(1.5, 1.3, 0.729057), - }, # end entity 10067 - 10068: { - 'type': 'nodepath', - 'name': 'battleCell', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 10068 - 20000: { - 'type': 'nodepath', - 'name': 'stompers', - 'comment': '', - 'parentEntId': 17, - 'pos': Point3(0.75, 0, 0.5), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20000 - 20018: { - 'type': 'nodepath', - 'name': '', - 'comment': '', - 'parentEntId': 10014, - 'pos': Point3(0, -24, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20018 - 20019: { - 'type': 'nodepath', - 'name': 'cogsJoin', - 'comment': '', - 'parentEntId': 10030, - 'pos': Point3(16, 2, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20019 - 20022: { - 'type': 'nodepath', - 'name': 'StomperButtonsNodepath', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(-11.75, -35.8, 14.9), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20022 - 20023: { - 'type': 'nodepath', - 'name': '', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20023 - 20037: { - 'type': 'nodepath', - 'name': 'SignatureGoonNP', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(-48.4442, -24.9385, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20037 - 20058: { - 'type': 'nodepath', - 'name': 'SigRoomCogs', - 'comment': '', - 'parentEntId': 24, - 'pos': Point3(-1.0928, -45, 14.99), - 'hpr': Point3(90, 0, 0), - 'scale': 1, - }, # end entity 20058 - 20087: { - 'type': 'nodepath', - 'name': '', - 'comment': '', - 'parentEntId': 17, - 'pos': Point3(-4, -117, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20087 - 20094: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(-0.720506, 27.5461, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20094 - 20095: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 32, - 'pos': Point3(0, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - }, # end entity 20095 - 20096: { - 'type': 'nodepath', - 'name': 'cogs', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(4.84921, 8.74482, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - }, # end entity 20096 - # PAINTMIXER - 10017: { - 'type': 'paintMixer', - 'name': 'fifth', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(5.24, 23.52, 8), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Point3(0.8, 0.8, 0.8), - 'motion': 'easeInOut', - 'offset': Point3(-12, -6, 0), - 'period': 8.0, - 'phaseShift': 0.5, - 'shaftScale': 1, - 'waitPercent': 0.10000000000000001, - }, # end entity 10017 - 10018: { - 'type': 'paintMixer', - 'name': 'fourth', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(-12.1, 3, 8), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Point3(0.8, 0.8, 0.8), - 'motion': 'easeInOut', - 'offset': Point3(0, -6, 15), - 'period': 8.0, - 'phaseShift': 0.0, - 'shaftScale': 2.5, - 'waitPercent': 0.10000000000000001, - }, # end entity 10018 - 10019: { - 'type': 'paintMixer', - 'name': 'third', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(-3.85419, -7.75751, 22.5836), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Point3(0.8, 0.8, 0.8), - 'motion': 'easeInOut', - 'offset': Point3(7, 0, 0), - 'period': 8.0, - 'phaseShift': 0.0, - 'shaftScale': 2.5, - 'waitPercent': 0.10000000000000001, - }, # end entity 10019 - 10020: { - 'type': 'paintMixer', - 'name': 'second', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(16.01, -6.47, 23), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Point3(0.8, 0.8, 0.8), - 'motion': 'easeInOut', - 'offset': Point3(-4, -8, -15), - 'period': 8.0, - 'phaseShift': 0.0, - 'shaftScale': 2.5, - 'waitPercent': 0.10000000000000001, - }, # end entity 10020 - 10054: { - 'type': 'paintMixer', - 'name': 'first', - 'comment': '', - 'parentEntId': 10015, - 'pos': Point3(-10, -26.1, 8), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'floorName': 'PaintMixerFloorCollision', - 'modelPath': 'phase_9/models/cogHQ/PaintMixer', - 'modelScale': Point3(0.8, 0.8, 0.8), - 'motion': 'easeInOut', - 'offset': Point3(15, 0, 0), - 'period': 8.0, - 'phaseShift': 0.0, - 'shaftScale': 1, - 'waitPercent': 0.10000000000000001, - }, # end entity 10054 - # PATH - 20008: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 20008 - 20009: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 17, - 'pathScale': 1.0, - }, # end entity 20009 - 20010: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 21, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 36, - 'pathScale': 1.0, - }, # end entity 20010 - 20012: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 21, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 34, - 'pathScale': 1.0, - }, # end entity 20012 - 20015: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 21, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 37, - 'pathScale': 1.0, - }, # end entity 20015 - 20038: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 38, - 'pathScale': 1.0, - }, # end entity 20038 - 20039: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 7, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 12, - 'pathScale': 1.0, - }, # end entity 20039 - 20040: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(41.5, 33.5, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 20040 - 20042: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(15, 34, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 20042 - 20044: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(1.5, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Vec3(1, 1, 1), - 'pathIndex': 6, - 'pathScale': 1.0, - }, # end entity 20044 - 20045: { - 'type': 'path', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 1), - 'pathIndex': 7, - 'pathScale': 1.0, - }, # end entity 20045 - 20049: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 7, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 13, - 'pathScale': 1.0, - }, # end entity 20049 - 20051: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(1, -24, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 42, - 'pathScale': 1.0, - }, # end entity 20051 - 20053: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 8, - 'pathScale': 1.0, - }, # end entity 20053 - 20055: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 9, - 'pathScale': 1.0, - }, # end entity 20055 - 20059: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 10, - 'pathScale': 1.0, - }, # end entity 20059 - 20061: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 20037, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 11, - 'pathScale': 1.0, - }, # end entity 20061 - 20067: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 39, - 'pathScale': 1.0, - }, # end entity 20067 - 20068: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 15, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 40, - 'pathScale': 1.0, - }, # end entity 20068 - 20069: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 9, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 5, - 'pathScale': 1.0, - }, # end entity 20069 - 20070: { - 'type': 'path', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 9, - 'pos': Point3(1, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 5, - 'pathScale': 1.0, - }, # end entity 20070 - 20073: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 21, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 35, - 'pathScale': 1.0, - }, # end entity 20073 - 20075: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 7, - 'pos': Point3(4, 4, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 14, - 'pathScale': 1.0, - }, # end entity 20075 - 20076: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 8, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 15, - 'pathScale': 1.0, - }, # end entity 20076 - 20077: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 8, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 16, - 'pathScale': 1.0, - }, # end entity 20077 - 20078: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 18, - 'pathScale': 1.0, - }, # end entity 20078 - 20079: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 4, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 20079 - 20084: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 9, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 41, - 'pathScale': 1.0, - }, # end entity 20084 - 20097: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 19, - 'pathScale': 1.0, - }, # end entity 20097 - 20098: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 20, - 'pathScale': 1.0, - }, # end entity 20098 - 20099: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 34, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 21, - 'pathScale': 1.0, - }, # end entity 20099 - 20100: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 22, - 'pathScale': 1.0, - }, # end entity 20100 - 20101: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 23, - 'pathScale': 1.0, - }, # end entity 20101 - 20102: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 33, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 24, - 'pathScale': 1.0, - }, # end entity 20102 - 20103: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 32, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 25, - 'pathScale': 1.0, - }, # end entity 20103 - 20104: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 32, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 26, - 'pathScale': 1.0, - }, # end entity 20104 - 20105: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 32, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 27, - 'pathScale': 1.0, - }, # end entity 20105 - 20106: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 28, - 'pathScale': 1.0, - }, # end entity 20106 - 20107: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 29, - 'pathScale': 1.0, - }, # end entity 20107 - 20108: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 30, - 'pathScale': 1.0, - }, # end entity 20108 - 20109: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 31, - 'pathScale': 1.0, - }, # end entity 20109 - 20110: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 32, - 'pathScale': 1.0, - }, # end entity 20110 - 20111: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 13, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 33, - 'pathScale': 1.0, - }, # end entity 20111 - 60133: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 22, - 'pos': Point3(-10, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 60133 - 60134: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 22, - 'pos': Point3(0, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 60134 - 60135: { - 'type': 'path', - 'name': '', - 'comment': '', - 'parentEntId': 22, - 'pos': Point3(10, 0, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'pathIndex': 0, - 'pathScale': 1.0, - }, # end entity 60135 - # PROPSPINNER - 10042: { - 'type': 'propSpinner', - 'name': '', - 'comment': '', - 'parentEntId': 7, - }, # end entity 10042 - # STOMPER - 20001: { - 'type': 'stomper', - 'name': '', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(0, 0, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(7, 5, 7), - 'modelPath': 0, - 'motion': 3, - 'period': 4.0, - 'phaseShift': 0.0, - 'range': 30.0, - 'shaftScale': Point3(0.5, 12, 0.5), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20001 - 20002: { - 'type': 'stomper', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(0, -14.3294, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(7, 5, 7), - 'modelPath': 0, - 'motion': 3, - 'period': 2.0, - 'phaseShift': 0.0, - 'range': 10.0, - 'shaftScale': Point3(0.5, 12, 0.5), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20002 - 20003: { - 'type': 'stomper', - 'name': 'copy of copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(0, -28.3252, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(7, 5, 7), - 'modelPath': 0, - 'motion': 3, - 'period': 2.0, - 'phaseShift': 0.5, - 'range': 10.0, - 'shaftScale': Point3(0.5, 12, 0.5), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20003 - 20004: { - 'type': 'stomper', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(-3.5, 16.2588, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(3.5, 5, 3.5), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0001373423482587, - 'phaseShift': 0.0, - 'range': 15.0, - 'shaftScale': Point3(0.71, 12, 0.71), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20004 - 20005: { - 'type': 'stomper', - 'name': 'copy of copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(3.5, 16.2588, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(3.5, 5, 3.5), - 'modelPath': 0, - 'motion': 3, - 'period': 1.5, - 'phaseShift': 0.0, - 'range': 15.0, - 'shaftScale': Point3(0.71, 12, 0.71), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 1, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20005 - 20006: { - 'type': 'stomper', - 'name': 'copy of copy of copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(-3.5, 23.4392, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(3.5, 5, 3.5), - 'modelPath': 0, - 'motion': 3, - 'period': 1.5, - 'phaseShift': 0.5, - 'range': 15.0, - 'shaftScale': Point3(0.71, 12, 0.71), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20006 - 20007: { - 'type': 'stomper', - 'name': 'copy of copy of copy of copy of ', - 'comment': '', - 'parentEntId': 20000, - 'pos': Point3(3.5, 23.4392, 0), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'crushCellId': None, - 'damage': 3, - 'headScale': Point3(3.5, 5, 3.5), - 'modelPath': 0, - 'motion': 3, - 'period': 3.0, - 'phaseShift': 0.5, - 'range': 15.0, - 'shaftScale': Point3(0.71, 12, 0.71), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 0, - 'style': 'vertical', - 'switchId': 0, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20007 - 20029: { - 'type': 'stomper', - 'name': '', - 'comment': '', - 'parentEntId': 20025, - 'pos': Point3(4.5, 43.5, 0.25), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'animateShadow': 0, - 'crushCellId': 20024, - 'damage': 3, - 'headScale': Point3(3, 2, 3), - 'modelPath': 0, - 'motion': 5, - 'period': 2.0, - 'phaseShift': 0.0, - 'range': 12.0, - 'shaftScale': Point3(0.66, 37.5, 0.66), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 20033, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20029 - 20030: { - 'type': 'stomper', - 'name': 'copy of ', - 'comment': '', - 'parentEntId': 20025, - 'pos': Point3(31.5, 43.5, 0.25), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'animateShadow': 0, - 'crushCellId': 20026, - 'damage': 3, - 'headScale': Point3(3, 2, 3), - 'modelPath': 0, - 'motion': 5, - 'period': 2.0, - 'phaseShift': 0.0, - 'range': 12.0, - 'shaftScale': Point3(0.66, 37.5, 0.66), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 20034, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20030 - 20031: { - 'type': 'stomper', - 'name': 'copy of copy of ', - 'comment': '', - 'parentEntId': 20025, - 'pos': Point3(64.5, 43.5, 0.25), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'animateShadow': 0, - 'crushCellId': 20027, - 'damage': 3, - 'headScale': Point3(3, 2, 3), - 'modelPath': 0, - 'motion': 5, - 'period': 2.0, - 'phaseShift': 0.0, - 'range': 12.0, - 'shaftScale': Point3(0.66, 37.5, 0.66), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 20035, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20031 - 20032: { - 'type': 'stomper', - 'name': 'copy of copy of copy of ', - 'comment': '', - 'parentEntId': 20025, - 'pos': Point3(85.5, 43.5, 0.25), - 'hpr': Point3(0, 0, 0), - 'scale': 1, - 'animateShadow': 0, - 'crushCellId': 20028, - 'damage': 3, - 'headScale': Point3(3, 2, 3), - 'modelPath': 0, - 'motion': 5, - 'period': 2.0, - 'phaseShift': 0.0, - 'range': 12.0, - 'shaftScale': Point3(0.66, 37.5, 0.66), - 'soundLen': 0, - 'soundOn': 1, - 'soundPath': 2, - 'style': 'vertical', - 'switchId': 20036, - 'wantShadow': 1, - 'wantSmoke': 1, - 'zOffset': 0, - }, # end entity 20032 - # TRIGGER - 20050: { - 'type': 'trigger', - 'name': '', - 'comment': '', - 'parentEntId': 20022, - 'pos': Point3(10, 0, 10), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(20, 20, 20), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - 'triggerName': 'signatureRoomView', - }, # end entity 20050 - 20057: { - 'type': 'trigger', - 'name': '', - 'comment': '', - 'parentEntId': 23, - 'pos': Point3(3, -8.8, 15.5091), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(25, 25, 25), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - 'triggerName': 'lookoutTrigger', - }, # end entity 20057 - 30077: { - 'type': 'trigger', - 'name': 'button cutscene', - 'comment': '', - 'parentEntId': 3, - 'pos': Point3(-4, 8, 0), - 'hpr': Vec3(0, 0, 0), - 'scale': Point3(1, 1, 1), - 'isOn': 0, - 'isOnEvent': 0, - 'secondsOn': 1, - 'triggerName': '', - }, # end entity 30077 - # VISIBILITYEXTENDER - 10013: { - 'type': 'visibilityExtender', - 'name': 'intoEastSilo', - 'comment': '', - 'parentEntId': 60009, - 'event': 60101, - 'newZones': [61], - }, # end entity 10013 - 10043: { - 'type': 'visibilityExtender', - 'name': 'beyondLobby', - 'comment': '', - 'parentEntId': 10049, - 'event': 10057, - 'newZones': [5, 116], - }, # end entity 10043 - 10044: { - 'type': 'visibilityExtender', - 'name': 'intoEntrance1', - 'comment': '', - 'parentEntId': 10051, - 'event': 30000, - 'newZones': [3], - }, # end entity 10044 - 10058: { - 'type': 'visibilityExtender', - 'name': 'intoFarHallway', - 'comment': '', - 'parentEntId': 10049, - 'event': 10059, - 'newZones': [6, 118], - }, # end entity 10058 - 10060: { - 'type': 'visibilityExtender', - 'name': 'intoLookout', - 'comment': '', - 'parentEntId': 10049, - 'event': 10061, - 'newZones': [23], - }, # end entity 10060 - 10062: { - 'type': 'visibilityExtender', - 'name': 'intoLobby', - 'comment': '', - 'parentEntId': 60031, - 'event': 10063, - 'newZones': [4, 114], - }, # end entity 10062 - 30022: { - 'type': 'visibilityExtender', - 'name': 'intoLobby', - 'comment': '', - 'parentEntId': 10049, - 'event': 30000, - 'newZones': [4, 113], - }, # end entity 30022 - 30023: { - 'type': 'visibilityExtender', - 'name': 'beyond door 106', - 'comment': '', - 'parentEntId': 60017, - 'event': 30002, - 'newZones': [15, 126], - }, # end entity 30023 - 30024: { - 'type': 'visibilityExtender', - 'name': 'beyond door 106', - 'comment': '', - 'parentEntId': 60016, - 'event': 30002, - 'newZones': [16], - }, # end entity 30024 - 30025: { - 'type': 'visibilityExtender', - 'name': 'beyond door 126', - 'comment': '', - 'parentEntId': 60016, - 'event': 30021, - 'newZones': [14, 17, 121], - }, # end entity 30025 - 30026: { - 'type': 'visibilityExtender', - 'name': 'beyond door 121', - 'comment': '', - 'parentEntId': 60015, - 'event': 30016, - 'newZones': [13, 119], - }, # end entity 30026 - 30027: { - 'type': 'visibilityExtender', - 'name': 'beyond door 126', - 'comment': '', - 'parentEntId': 60015, - 'event': 30021, - 'newZones': [15, 106], - }, # end entity 30027 - 30029: { - 'type': 'visibilityExtender', - 'name': 'beyondLobby', - 'comment': '', - 'parentEntId': 10051, - 'event': 30009, - 'newZones': [5, 116], - }, # end entity 30029 - 30030: { - 'type': 'visibilityExtender', - 'name': 'beyond door 113', - 'comment': '', - 'parentEntId': 60000, - 'event': 30009, - 'newZones': [4, 114], - }, # end entity 30030 - 30031: { - 'type': 'visibilityExtender', - 'name': 'beyond door 116', - 'comment': '', - 'parentEntId': 60000, - 'event': 30011, - 'newZones': [6, 109, 117, 118], - }, # end entity 30031 - 30032: { - 'type': 'visibilityExtender', - 'name': 'intoHallwayFromLobby', - 'comment': '', - 'parentEntId': 60001, - 'event': 30011, - 'newZones': [5, 113], - }, # end entity 30032 - 30033: { - 'type': 'visibilityExtender', - 'name': 'intoBoilerRoom', - 'comment': '', - 'parentEntId': 60001, - 'event': 30012, - 'newZones': [8], - }, # end entity 30033 - 30034: { - 'type': 'visibilityExtender', - 'name': 'intoLookout', - 'comment': '', - 'parentEntId': 60001, - 'event': 30013, - 'newZones': [23, 39], - }, # end entity 30034 - 30035: { - 'type': 'visibilityExtender', - 'name': 'intoGearRoom', - 'comment': '', - 'parentEntId': 60001, - 'event': 30005, - 'newZones': [7], - }, # end entity 30035 - 30036: { - 'type': 'visibilityExtender', - 'name': 'beyond door 109', - 'comment': '', - 'parentEntId': 60002, - 'event': 30005, - 'newZones': [6, 116, 117, 118], - }, # end entity 30036 - 30037: { - 'type': 'visibilityExtender', - 'name': 'beyond door 110', - 'comment': '', - 'parentEntId': 60002, - 'event': 30006, - 'newZones': [9, 25, 26, 33, 34, 35, 38, 41, 53, 112, 115, 200], - }, # end entity 30037 - 30038: { - 'type': 'visibilityExtender', - 'name': 'beyond door 117', - 'comment': '', - 'parentEntId': 60005, - 'event': 30012, - 'newZones': [6, 109, 116, 118], - }, # end entity 30038 - 30039: { - 'type': 'visibilityExtender', - 'name': 'beyond door 108', - 'comment': '', - 'parentEntId': 60005, - 'event': 30004, - 'newZones': [12, 21, 26, 34, 35, 40, 41, 53, 60, 119, 120, 200], - }, # end entity 30039 - 30041: { - 'type': 'visibilityExtender', - 'name': 'beyond door 110', - 'comment': '', - 'parentEntId': 60003, - 'event': 30006, - 'newZones': [7], - }, # end entity 30041 - 30042: { - 'type': 'visibilityExtender', - 'name': 'beyond door 112', - 'comment': '', - 'parentEntId': 60003, - 'event': 30008, - 'newZones': [10, 11], - }, # end entity 30042 - 30043: { - 'type': 'visibilityExtender', - 'name': 'intoWarehouse', - 'comment': '', - 'parentEntId': 60003, - 'event': 30010, - 'newZones': [24, 39], - }, # end entity 30043 - 30044: { - 'type': 'visibilityExtender', - 'name': 'beyond door 112', - 'comment': '', - 'parentEntId': 60004, - 'event': 30008, - 'newZones': [9, 25, 26, 33, 34, 35, 38, 41, 53, 110, 115, 200], - }, # end entity 30044 - 30046: { - 'type': 'visibilityExtender', - 'name': 'beyond door 112', - 'comment': '', - 'parentEntId': 60066, - 'event': 30008, - 'newZones': [9, 25, 26, 41, 200], - }, # end entity 30046 - 30049: { - 'type': 'visibilityExtender', - 'name': 'beyond door 119', - 'comment': '', - 'parentEntId': 60013, - 'event': 30014, - 'newZones': [12, 21, 23, 26, 33, 34, 35, 41, 53, 60, 108, 112, 120, 200], - }, # end entity 30049 - 30050: { - 'type': 'visibilityExtender', - 'name': 'beyond door 121', - 'comment': '', - 'parentEntId': 60013, - 'event': 30016, - 'newZones': [14, 17, 126], - }, # end entity 30050 - 30051: { - 'type': 'visibilityExtender', - 'name': 'beyond door 121', - 'comment': '', - 'parentEntId': 60014, - 'event': 30016, - 'newZones': [13, 119], - }, # end entity 30051 - 30052: { - 'type': 'visibilityExtender', - 'name': 'beyond door 126', - 'comment': '', - 'parentEntId': 60014, - 'event': 30021, - 'newZones': [15, 106], - }, # end entity 30052 - 30055: { - 'type': 'visibilityExtender', - 'name': 'beyond door 105', - 'comment': '', - 'parentEntId': 60019, - 'event': 30001, - 'newZones': [27, 127], - }, # end entity 30055 - 30056: { - 'type': 'visibilityExtender', - 'name': 'beyond door 105', - 'comment': '', - 'parentEntId': 60018, - 'event': 30001, - 'newZones': [27, 127], - }, # end entity 30056 - 30057: { - 'type': 'visibilityExtender', - 'name': 'beyond door 103', - 'comment': '', - 'parentEntId': 60018, - 'event': 60088, - 'newZones': [17], - }, # end entity 30057 - 30059: { - 'type': 'visibilityExtender', - 'name': 'beyond door 108', - 'comment': '', - 'parentEntId': 60006, - 'event': 30004, - 'newZones': [8, 117], - }, # end entity 30059 - 30060: { - 'type': 'visibilityExtender', - 'name': 'beyond door 119', - 'comment': '', - 'parentEntId': 60006, - 'event': 30014, - 'newZones': [13, 121], - }, # end entity 30060 - 30061: { - 'type': 'visibilityExtender', - 'name': 'intoWarehouse', - 'comment': '', - 'parentEntId': 60006, - 'event': 30015, - 'newZones': [24, 39], - }, # end entity 30061 - 30062: { - 'type': 'visibilityExtender', - 'name': 'beyond door 107', - 'comment': '', - 'parentEntId': 60024, - 'event': 30003, - 'newZones': [27, 127], - }, # end entity 30062 - 30063: { - 'type': 'visibilityExtender', - 'name': 'intoHallway', - 'comment': '', - 'parentEntId': 60031, - 'event': 30013, - 'newZones': [6, 109, 116, 117], - }, # end entity 30063 - 30064: { - 'type': 'visibilityExtender', - 'name': 'beyondLowerWestDoor', - 'comment': '', - 'parentEntId': 60007, - 'event': 30015, - 'newZones': [12, 21, 26, 34, 40, 41, 53, 200], - }, # end entity 30064 - 30066: { - 'type': 'visibilityExtender', - 'name': 'beyondLowerEastDoor', - 'comment': '', - 'parentEntId': 60007, - 'event': 30010, - 'newZones': [9, 25, 26, 33, 38, 41, 200], - }, # end entity 30066 - 30067: { - 'type': 'visibilityExtender', - 'name': 'beyondUpperEastDoor', - 'comment': '', - 'parentEntId': 60007, - 'event': 30019, - 'newZones': [9, 33, 38, 41, 200, 222], - }, # end entity 30067 - 30069: { - 'type': 'visibilityExtender', - 'name': 'beyond door 118', - 'comment': '', - 'parentEntId': 60000, - 'event': 30068, - 'newZones': [23], - }, # end entity 30069 - 30071: { - 'type': 'visibilityExtender', - 'name': 'intoLobby', - 'comment': '', - 'parentEntId': 60001, - 'event': 60030, - 'newZones': [4, 114], - }, # end entity 30071 - 30073: { - 'type': 'visibilityExtender', - 'name': 'intoLobbyHallway', - 'comment': '', - 'parentEntId': 60031, - 'event': 60033, - 'newZones': [5, 113], - }, # end entity 30073 - 30075: { - 'type': 'visibilityExtender', - 'name': 'intoGearRoom', - 'comment': '', - 'parentEntId': 60031, - 'event': 60034, - 'newZones': [7], - }, # end entity 30075 - 60008: { - 'type': 'visibilityExtender', - 'name': 'beyondUpperWestDoor', - 'comment': '', - 'parentEntId': 60007, - 'event': 30020, - 'newZones': [12, 21, 34, 40, 41, 60, 127, 200], - }, # end entity 60008 - 60010: { - 'type': 'visibilityExtender', - 'name': 'intoWarehouse', - 'comment': '', - 'parentEntId': 60009, - 'event': 30019, - 'newZones': [24, 39, 125], - }, # end entity 60010 - 60012: { - 'type': 'visibilityExtender', - 'name': 'beyond door 125', - 'comment': '', - 'parentEntId': 60011, - 'event': 30020, - 'newZones': [24, 39, 124], - }, # end entity 60012 - 60020: { - 'type': 'visibilityExtender', - 'name': 'beyond door 106', - 'comment': '', - 'parentEntId': 60015, - 'event': 60076, - 'newZones': [16], - }, # end entity 60020 - 60021: { - 'type': 'visibilityExtender', - 'name': 'beyond door 116', - 'comment': '', - 'parentEntId': 10051, - 'event': 60023, - 'newZones': [6, 118], - }, # end entity 60021 - 60022: { - 'type': 'visibilityExtender', - 'name': 'beyond door 118', - 'comment': '', - 'parentEntId': 10051, - 'event': 60025, - 'newZones': [23], - }, # end entity 60022 - 60026: { - 'type': 'visibilityExtender', - 'name': 'beyond door 109', - 'comment': '', - 'parentEntId': 60000, - 'event': 60028, - 'newZones': [7], - }, # end entity 60026 - 60027: { - 'type': 'visibilityExtender', - 'name': 'beyond door 117', - 'comment': '', - 'parentEntId': 60000, - 'event': 60029, - 'newZones': [8], - }, # end entity 60027 - 60032: { - 'type': 'visibilityExtender', - 'name': 'intoBoilerRoom', - 'comment': '', - 'parentEntId': 60031, - 'event': 60035, - 'newZones': [8], - }, # end entity 60032 - 60036: { - 'type': 'visibilityExtender', - 'name': 'beyond door 117', - 'comment': '', - 'parentEntId': 60002, - 'event': 60037, - 'newZones': [8], - }, # end entity 60036 - 60038: { - 'type': 'visibilityExtender', - 'name': 'beyond door 109', - 'comment': '', - 'parentEntId': 60005, - 'event': 60039, - 'newZones': [7], - }, # end entity 60038 - 60040: { - 'type': 'visibilityExtender', - 'name': 'beyond door 124', - 'comment': '', - 'parentEntId': 60011, - 'event': 60041, - 'newZones': [38], - }, # end entity 60040 - 60042: { - 'type': 'visibilityExtender', - 'name': 'beyondWarehouse', - 'comment': '', - 'parentEntId': 60009, - 'event': 60043, - 'newZones': [12, 200], - }, # end entity 60042 - 60045: { - 'type': 'visibilityExtender', - 'name': 'beyond door 124', - 'comment': '', - 'parentEntId': 60044, - 'event': 60047, - 'newZones': [24], - }, # end entity 60045 - 60046: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60044, - 'event': 10002, - 'newZones': [31], - }, # end entity 60046 - 60048: { - 'type': 'visibilityExtender', - 'name': 'beyond door 127', - 'comment': '', - 'parentEntId': 60024, - 'event': 60049, - 'newZones': [21, 200], - }, # end entity 60048 - 60050: { - 'type': 'visibilityExtender', - 'name': 'beyond door 127', - 'comment': '', - 'parentEntId': 60019, - 'event': 60051, - 'newZones': [21, 34, 200], - }, # end entity 60050 - 60052: { - 'type': 'visibilityExtender', - 'name': 'beyond door 121', - 'comment': '', - 'parentEntId': 60016, - 'event': 60053, - 'newZones': [13, 119], - }, # end entity 60052 - 60054: { - 'type': 'visibilityExtender', - 'name': 'beyond door 126', - 'comment': '', - 'parentEntId': 60017, - 'event': 60055, - 'newZones': [14, 17, 121], - }, # end entity 60054 - 60056: { - 'type': 'visibilityExtender', - 'name': 'beyond door 126', - 'comment': '', - 'parentEntId': 60013, - 'event': 60057, - 'newZones': [15, 106], - }, # end entity 60056 - 60058: { - 'type': 'visibilityExtender', - 'name': 'beyond door 116', - 'comment': '', - 'parentEntId': 60005, - 'event': 60059, - 'newZones': [5], - }, # end entity 60058 - 60060: { - 'type': 'visibilityExtender', - 'name': 'beyond door 118', - 'comment': '', - 'parentEntId': 60005, - 'event': 60061, - 'newZones': [23], - }, # end entity 60060 - 60062: { - 'type': 'visibilityExtender', - 'name': 'beyond door 116', - 'comment': '', - 'parentEntId': 60002, - 'event': 60064, - 'newZones': [5], - }, # end entity 60062 - 60063: { - 'type': 'visibilityExtender', - 'name': 'beyond door 118', - 'comment': '', - 'parentEntId': 60002, - 'event': 60065, - 'newZones': [23], - }, # end entity 60063 - 60068: { - 'type': 'visibilityExtender', - 'name': 'beyond door 105', - 'comment': '', - 'parentEntId': 60067, - 'event': 30001, - 'newZones': [18, 19, 20, 131], - }, # end entity 60068 - 60069: { - 'type': 'visibilityExtender', - 'name': 'beyond door 107', - 'comment': '', - 'parentEntId': 60067, - 'event': 30003, - 'newZones': [22], - }, # end entity 60069 - 60070: { - 'type': 'visibilityExtender', - 'name': 'beyond door 127', - 'comment': '', - 'parentEntId': 60067, - 'event': 10052, - 'newZones': [12, 21, 26, 34, 35, 40, 41, 53, 60, 200], - }, # end entity 60070 - 60071: { - 'type': 'visibilityExtender', - 'name': 'beyond door 127', - 'comment': '', - 'parentEntId': 60006, - 'event': 10052, - 'newZones': [27, 105, 107], - }, # end entity 60071 - 60072: { - 'type': 'visibilityExtender', - 'name': 'beyond door 107', - 'comment': '', - 'parentEntId': 60006, - 'event': 60074, - 'newZones': [22], - }, # end entity 60072 - 60073: { - 'type': 'visibilityExtender', - 'name': 'beyond door 105', - 'comment': '', - 'parentEntId': 60006, - 'event': 60075, - 'newZones': [18], - }, # end entity 60073 - 60077: { - 'type': 'visibilityExtender', - 'name': 'beyond door 106', - 'comment': '', - 'parentEntId': 60014, - 'event': 60078, - 'newZones': [16], - }, # end entity 60077 - 60079: { - 'type': 'visibilityExtender', - 'name': 'beyond door 106', - 'comment': '', - 'parentEntId': 60013, - 'event': 60080, - 'newZones': [16], - }, # end entity 60079 - 60081: { - 'type': 'visibilityExtender', - 'name': 'beyond door 121', - 'comment': '', - 'parentEntId': 60017, - 'event': 60082, - 'newZones': [13], - }, # end entity 60081 - 60083: { - 'type': 'visibilityExtender', - 'name': 'beyond door 119', - 'comment': '', - 'parentEntId': 60005, - 'event': 60084, - 'newZones': [13], - }, # end entity 60083 - 60085: { - 'type': 'visibilityExtender', - 'name': 'beyond door 112', - 'comment': '', - 'parentEntId': 60002, - 'event': 60086, - 'newZones': [10], - }, # end entity 60085 - 60087: { - 'type': 'visibilityExtender', - 'name': 'beyond door 105', - 'comment': '', - 'parentEntId': 60015, - 'event': 60091, - 'newZones': [27], - }, # end entity 60087 - 60089: { - 'type': 'visibilityExtender', - 'name': 'beyond door 103', - 'comment': '', - 'parentEntId': 60019, - 'event': 60088, - 'newZones': [17], - }, # end entity 60089 - 60090: { - 'type': 'visibilityExtender', - 'name': 'beyond door 103', - 'comment': '', - 'parentEntId': 60015, - 'event': 60088, - 'newZones': [18, 19, 105], - }, # end entity 60090 - 60092: { - 'type': 'visibilityExtender', - 'name': 'beyond door 103', - 'comment': '', - 'parentEntId': 60067, - 'event': 60093, - 'newZones': [17], - }, # end entity 60092 - 60097: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60096, - 'event': 60095, - 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 129, 200], - }, # end entity 60097 - 60098: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60044, - 'event': 60095, - 'newZones': [30], - }, # end entity 60098 - 60099: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60096, - 'event': 60100, - 'newZones': [31], - }, # end entity 60099 - 60106: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60011, - 'event': 60094, - 'newZones': [32], - }, # end entity 60106 - 60107: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60011, - 'event': 60095, - 'newZones': [30], - }, # end entity 60107 - 60109: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60108, - 'event': 60094, - 'newZones': [32], - }, # end entity 60109 - 60110: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60108, - 'event': 60095, - 'newZones': [30], - }, # end entity 60110 - 60112: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60111, - 'event': 60094, - 'newZones': [32], - }, # end entity 60112 - 60113: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60111, - 'event': 60095, - 'newZones': [30], - }, # end entity 60113 - 60115: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60114, - 'event': 60094, - 'newZones': [32], - }, # end entity 60115 - 60116: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60114, - 'event': 60095, - 'newZones': [30], - }, # end entity 60116 - 60117: { - 'type': 'visibilityExtender', - 'name': 'beyond door 103', - 'comment': '', - 'parentEntId': 60014, - 'event': 60088, - 'newZones': [18], - }, # end entity 60117 - 60120: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60108, - 'event': 10002, - 'newZones': [31], - }, # end entity 60120 - 60122: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60121, - 'event': 10002, - 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 129, 130, 200], - }, # end entity 60122 - 60123: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60111, - 'event': 10002, - 'newZones': [], - }, # end entity 60123 - 60124: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60114, - 'event': 10002, - 'newZones': [31], - }, # end entity 60124 - 60125: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60011, - 'event': 10002, - 'newZones': [31], - }, # end entity 60125 - 60127: { - 'type': 'visibilityExtender', - 'name': 'beyond door 128', - 'comment': '', - 'parentEntId': 60126, - 'event': 10002, - 'newZones': [31], - }, # end entity 60127 - 60128: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60126, - 'event': 60094, - 'newZones': [32], - }, # end entity 60128 - 60129: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60126, - 'event': 60095, - 'newZones': [30], - }, # end entity 60129 - 60131: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60130, - 'event': 60094, - 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 130, 200], - }, # end entity 60131 - 60136: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60044, - 'event': 60094, - 'newZones': [32], - }, # end entity 60136 - 60137: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60096, - 'event': 60138, - 'newZones': [32], - }, # end entity 60137 - 60139: { - 'type': 'visibilityExtender', - 'name': 'beyond door 129', - 'comment': '', - 'parentEntId': 60121, - 'event': 60141, - 'newZones': [32], - }, # end entity 60139 - 60140: { - 'type': 'visibilityExtender', - 'name': 'beyond door 130', - 'comment': '', - 'parentEntId': 60121, - 'event': 60142, - 'newZones': [30], - }, # end entity 60140 - } - -Scenario0 = { - } - -levelSpec = { - 'globalEntities': GlobalEntities, - 'scenarios': [ - Scenario0, - ], - } +GlobalEntities = {1000: {'type': 'levelMgr', 'name': 'LevelMgr', 'comment': '', 'parentEntId': 0, 'cogLevel': 0, 'farPlaneDistance': 1500.0, 'modelFilename': 'phase_9/models/cogHQ/SelbotLegFactory', 'wantDoors': 1}, 1001: {'type': 'editMgr', 'name': 'EditMgr', 'parentEntId': 0, 'insertEntity': None, 'removeEntity': None, 'requestNewEntity': None, 'requestSave': None}, 0: {'type': 'zone', 'name': 'UberZone', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 3: {'type': 'zone', 'name': 'Main Entrance', 'comment': '', 'parentEntId': 0, 'scale': Vec3(1.0, 1.0, 1.0), 'description': 'Main Entrance', 'visibility': [114]}, 4: {'type': 'zone', 'name': 'Lobby', 'comment': '', 'parentEntId': 0, 'scale': Vec3(1.0, 1.0, 1.0), 'description': 'Lobby', 'visibility': [113, 114]}, 5: {'type': 'zone', 'name': 'hallwayFromLobby', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': [113, 116]}, 6: {'type': 'zone', 'name': 'hallwayToBoiler/Control/Lookout', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Lobby Hallway', 'visibility': [109, 116, 117, 118]}, 7: {'type': 'zone', 'name': 'GearRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Gear Room', 'visibility': [109, 110]}, 8: {'type': 'zone', 'name': 'BoilerRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Boiler Room', 'visibility': [108, 117]}, 9: {'type': 'zone', 'name': 'EastCatwalk', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'East Catwalk', 'visibility': [23, 25, 26, 33, 34, 35, 38, 41, 53, 110, 112, 115, 124, 200, 222]}, 10: {'type': 'zone', 'name': 'PaintMixer', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Paint Mixer', 'visibility': [11, 111, 112]}, 11: {'type': 'zone', 'name': 'PaintMixerRewardRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Paint Mixer Storage Room', 'visibility': [10, 111, 112]}, 12: {'type': 'zone', 'name': 'WestSiloCatwalk', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'West Silo Catwalk', 'visibility': [21, 26, 33, 34, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 119, 120, 125, 127, 128, 129, 130, 200]}, 13: {'type': 'zone', 'name': 'PipeRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Pipe Room', 'visibility': [119, 121]}, 14: {'type': 'zone', 'name': 'StairsToPipeRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': [17, 18, 121, 126, 131]}, 15: {'type': 'zone', 'name': 'DuctRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Duct Room', 'visibility': [106, 126]}, 16: {'type': 'zone', 'name': 'Side Entrance', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Side Entrance', 'visibility': [106]}, 17: {'type': 'zone', 'name': 'StomperAlley', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Stomper Alley', 'visibility': [14, 121, 126, 131]}, 18: {'type': 'zone', 'name': 'LavaRoomFoyer', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Lava Room Foyer', 'visibility': [19, 20, 102, 103, 105, 131]}, 19: {'type': 'zone', 'name': 'LavaRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Lava Room', 'visibility': [17, 18, 20, 105, 131]}, 20: {'type': 'zone', 'name': 'LavaRewardRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Lava Storage Room', 'visibility': [18, 19, 105]}, 21: {'type': 'zone', 'name': 'WestCatwalk', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'West Catwalk', 'visibility': [12, 23, 26, 33, 34, 35, 40, 41, 53, 60, 108, 119, 120, 125, 127, 200]}, 22: {'type': 'zone', 'name': 'OilRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Oil Room', 'visibility': [107]}, 23: {'type': 'zone', 'name': 'Lookout', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Lookout', 'visibility': [24, 39, 115, 118, 120, 123, 124, 125]}, 24: {'type': 'zone', 'name': 'Warehouse', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Warehouse', 'visibility': [23, 39, 115, 120, 123, 124, 125]}, 25: {'type': 'zone', 'name': 'PaintMixerExterior', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 26: {'type': 'zone', 'name': 'WarehouseExterior', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 27: {'type': 'zone', 'name': 'OilRoomHallway', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Oil Room Hallway', 'visibility': [105, 107, 127]}, 30: {'type': 'zone', 'name': 'EastSiloControlRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'East Silo Control Room', 'visibility': [130]}, 31: {'type': 'zone', 'name': 'WestSiloControlRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'West Silo Control Room', 'visibility': [128]}, 32: {'type': 'zone', 'name': 'CenterSiloControlRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Center Silo Control Room', 'visibility': [129]}, 33: {'type': 'zone', 'name': 'EastSilo', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'East Silo', 'visibility': [9, 12, 21, 25, 26, 34, 35, 36, 37, 38, 40, 41, 53, 60, 61, 108, 110, 112, 119, 124, 128, 129, 130, 200, 222]}, 34: {'type': 'zone', 'name': 'WestSilo', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'West Silo', 'visibility': [9, 12, 21, 25, 26, 33, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 120, 125, 127, 128, 129, 130, 200]}, 35: {'type': 'zone', 'name': 'CenterSilo', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'Center Silo', 'visibility': [9, 21, 25, 26, 33, 34, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 128, 129, 130, 200]}, 36: {'type': 'zone', 'name': 'WestSiloBridge', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': [9, 12, 21, 25, 26, 33, 34, 35, 36, 37, 40, 41, 53, 60, 61, 108, 110, 112, 119, 127, 128, 129, 130, 200]}, 37: {'type': 'zone', 'name': 'EastSiloBridge', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': [9, 12, 21, 25, 26, 33, 34, 35, 36, 37, 38, 40, 41, 53, 60, 61, 108, 110, 112, 119, 128, 129, 130, 200, 222]}, 38: {'type': 'zone', 'name': 'EastSiloCatwalk', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'East Silo Catwalk', 'visibility': [9, 25, 26, 33, 34, 35, 36, 37, 41, 53, 60, 110, 112, 115, 124, 200, 222]}, 39: {'type': 'zone', 'name': 'WarehouseCeiling', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 40: {'type': 'zone', 'name': 'WestExterior', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 41: {'type': 'zone', 'name': 'EastExterior', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 53: {'type': 'zone', 'name': 'ExteriorFloor', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 60: {'type': 'zone', 'name': 'WestElevatorShaft', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': 'West Elevator Shaft', 'visibility': []}, 61: {'type': 'zone', 'name': 'EastElevatorShaft', 'comment': 'no geom or DCS', 'parentEntId': 0, 'scale': 1, 'description': 'East Elevator Shaft', 'visibility': []}, 101: {'type': 'zone', 'name': 'dwToLavaRewardRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 102: {'type': 'zone', 'name': 'dwToLavaRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 103: {'type': 'zone', 'name': 'dwToLavaRoomHallway', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 105: {'type': 'zone', 'name': 'dwToOilRoomCatwalks', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 106: {'type': 'zone', 'name': 'dwToDuctRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 107: {'type': 'zone', 'name': 'dwToOilRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 108: {'type': 'zone', 'name': 'dwFromBoilerRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 109: {'type': 'zone', 'name': 'dwToGearRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 110: {'type': 'zone', 'name': 'dwFromGearRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 111: {'type': 'zone', 'name': 'dwToPaintMixerRewardRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 112: {'type': 'zone', 'name': 'dwToPaintMixer', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 113: {'type': 'zone', 'name': 'dwFromLobby', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 114: {'type': 'zone', 'name': 'dwToLobby', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 115: {'type': 'zone', 'name': 'dwToWarehouseFromRight', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 116: {'type': 'zone', 'name': 'dwFromLobbyFar', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 117: {'type': 'zone', 'name': 'dwToBoilerRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 118: {'type': 'zone', 'name': 'dwToLookout', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 119: {'type': 'zone', 'name': 'dwFromPipeRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 120: {'type': 'zone', 'name': 'dwToWarehouseFromLeft', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 121: {'type': 'zone', 'name': 'dwToPipeRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 122: {'type': 'zone', 'name': 'dwToWarehouseControlRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 123: {'type': 'zone', 'name': 'dwFromWarehouseFloor', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 124: {'type': 'zone', 'name': 'dwFromWarehouseRight', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 125: {'type': 'zone', 'name': 'dwFromWarehouseLeft', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 126: {'type': 'zone', 'name': 'dwFromDuctRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 127: {'type': 'zone', 'name': 'dwFromOilRoomHallway', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 128: {'type': 'zone', 'name': 'dwToWestSiloRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 129: {'type': 'zone', 'name': 'dwToCenterSiloRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 130: {'type': 'zone', 'name': 'dwToEastSiloRoom', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 131: {'type': 'zone', 'name': 'dwFromStomperAlley', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 200: {'type': 'zone', 'name': 'sky', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 201: {'type': 'zone', 'name': 'extraZone201', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 202: {'type': 'zone', 'name': 'extraZone202', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 203: {'type': 'zone', 'name': 'extraZone203', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 204: {'type': 'zone', 'name': 'extraZone204', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 205: {'type': 'zone', 'name': 'extraZone205', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 206: {'type': 'zone', 'name': 'extraZone206', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 207: {'type': 'zone', 'name': 'extraZone207', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 208: {'type': 'zone', 'name': 'extraZone208', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 209: {'type': 'zone', 'name': 'extraZone209', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 210: {'type': 'zone', 'name': 'extraZone210', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 211: {'type': 'zone', 'name': 'extraZone211', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 212: {'type': 'zone', 'name': 'extraZone212', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 213: {'type': 'zone', 'name': 'extraZone213', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 214: {'type': 'zone', 'name': 'extraZone214', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 215: {'type': 'zone', 'name': 'extraZone215', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 216: {'type': 'zone', 'name': 'extraZone216', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 217: {'type': 'zone', 'name': 'extraZone217', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 218: {'type': 'zone', 'name': 'extraZone218', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 219: {'type': 'zone', 'name': 'extraZone219', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 220: {'type': 'zone', 'name': 'extraZone220', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 221: {'type': 'zone', 'name': 'extraZone221', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 222: {'type': 'zone', 'name': 'dwToEastSiloInterior', 'comment': '', 'parentEntId': 0, 'scale': 1, 'description': '', 'visibility': []}, 10010: {'type': 'ambientSound', 'name': 'westWind', 'comment': '', 'parentEntId': 35, 'pos': Point3(-52.7548751831, -38.8373908997, 53.3758010864), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'enabled': 1, 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_whistling_wind.mp3', 'volume': 1}, 10016: {'type': 'ambientSound', 'name': 'sndConveyorBelt', 'comment': '', 'parentEntId': 10056, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'enabled': 1, 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_conveyor_belt.mp3', 'volume': 0.5}, 10053: {'type': 'ambientSound', 'name': 'eastWind', 'comment': '', 'parentEntId': 35, 'pos': Point3(52.75, -38.8400001526, 53.3800010681), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'enabled': 1, 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_whistling_wind.mp3', 'volume': 1}, 10055: {'type': 'ambientSound', 'name': 'sndGears', 'comment': '', 'parentEntId': 10056, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'enabled': 1, 'soundPath': 'phase_9/audio/sfx/CHQ_FACT_gears_turning.mp3', 'volume': 1}, 10031: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 8, 'pos': Point3(-1.0, 79.0, 10.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.75, 1.0, 1.0), 'cellId': 1, 'radius': 10.0}, 10035: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 10039, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 4, 'radius': 10.0}, 10038: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 7, 'pos': Point3(0.0, -28.0400009155, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 5, 'radius': 10.0}, 20048: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.973601996899, 71.6999969482, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 0.20000000298, 1.0), 'cellId': 0, 'radius': 15.0}, 20063: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 20033, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 8, 'radius': 1}, 20064: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 20034, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 8, 'radius': 1}, 20065: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 20035, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 8, 'radius': 1}, 20066: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 20036, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'cellId': 8, 'radius': 1}, 20086: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 15, 'pos': Point3(0.0, 33.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 1.0, 1.0), 'cellId': 6, 'radius': 12.0}, 20112: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 33, 'pos': Point3(-10.0935573578, -9.55974674225, 4.0), 'hpr': Point3(45.0, 0.0, 0.0), 'scale': Point3(10.0, 1.0, 5.0), 'cellId': 10, 'radius': 5.0}, 20113: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 34, 'pos': Point3(9.08399391174, 4.42156505585, 0.0), 'hpr': Point3(-50.0, 0.0, 0.0), 'scale': Point3(10.0, 2.0, 6.0), 'cellId': 9, 'radius': 5.0}, 20114: {'type': 'battleBlocker', 'name': '', 'comment': '', 'parentEntId': 60103, 'pos': Point3(0.0, 0.0, 1.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 0.5), 'cellId': 8, 'radius': 3.0}, 10003: {'type': 'beanBarrel', 'name': '', 'comment': '', 'parentEntId': 20, 'pos': Point3(1.25457763672, 19.2471313477, 0.0249528884888), 'hpr': Vec3(-8.28434467316, 0.0, 0.0), 'scale': 1, 'rewardPerGrab': 25, 'rewardPerGrabMax': 0}, 10011: {'type': 'beanBarrel', 'name': '', 'comment': '', 'parentEntId': 20, 'pos': Point3(16.3439731598, -9.72999954224, 0.0250000003725), 'hpr': Vec3(-79.8888015747, 0.0, 0.0), 'scale': 1, 'rewardPerGrab': 25, 'rewardPerGrabMax': 0}, 20017: {'type': 'beanBarrel', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(20.003534317, 2.94231820107, 0.0), 'hpr': Vec3(-31.6032886505, 0.0, 0.0), 'scale': 1, 'rewardPerGrab': 35, 'rewardPerGrabMax': 0}, 10039: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 22, 'pos': Point3(-7.0, 29.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(4.0, 4.0, 4.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 20033: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 20022, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(3.0, 3.0, 3.0), 'color': Vec4(0.862745165825, 0.517647087574, 0.0941176638007, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1}, 20034: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 20022, 'pos': Point3(7.5, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(3.0, 3.0, 3.0), 'color': Vec4(0.862745285034, 0.517647087574, 0.0941176563501, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1}, 20035: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 20022, 'pos': Point3(15.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(3.0, 3.0, 3.0), 'color': Vec4(0.862745285034, 0.517647087574, 0.0941176563501, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1}, 20036: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 20022, 'pos': Point3(22.5, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(3.0, 3.0, 3.0), 'color': Vec4(0.862745285034, 0.517647087574, 0.0941176563501, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1}, 30040: {'type': 'button', 'name': 'door button', 'comment': 'Entrance door unlock', 'parentEntId': 3, 'pos': Point3(0.0, 6.75, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(3.0, 3.0, 3.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 30076: {'type': 'button', 'name': 'open door 113', 'comment': 'Lobby door unlock', 'parentEntId': 4, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.0, 3.0, 3.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1}, 60102: {'type': 'button', 'name': 'door button', 'comment': 'Entrance Door Unlock', 'parentEntId': 16, 'pos': Point3(4.0, 8.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.0, 3.0, 3.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 60103: {'type': 'button', 'name': 'door button', 'comment': '', 'parentEntId': 20022, 'pos': Point3(25.0, -7.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(4.0, 4.0, 4.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 60104: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 31, 'pos': Point3(0.0, 10.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(5.0, 5.0, 4.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 60105: {'type': 'button', 'name': 'door button', 'comment': '', 'parentEntId': 30, 'pos': Point3(-4.0, 7.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Point3(5.0, 5.0, 4.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 60118: {'type': 'button', 'name': '', 'comment': '', 'parentEntId': 15, 'pos': Point3(0.0, 20.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(3.0, 3.0, 3.0), 'color': Vec4(1.0, 0.0, 0.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': -1.0}, 10005: {'type': 'conveyorBelt', 'name': 'belt', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 45.2024307251, 7.24937152863), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1, 'floorName': 'platformcollision', 'length': 78.81881352704218, 'speed': 2.0, 'treadLength': 10.0, 'treadModelPath': 'phase_9/models/cogHQ/platform1', 'widthScale': 0.85}, 20081: {'type': 'crate', 'name': '', 'comment': '', 'parentEntId': 20080, 'pos': Point3(0.0, 0.0, 0.0), 'scale': 0.920000016689, 'crushCellId': None, 'gridId': 20080, 'modelType': 0, 'pushable': 1}, 20091: {'type': 'crate', 'name': '', 'comment': '', 'parentEntId': 20090, 'pos': Point3(0.0, 23.0, 0.0), 'scale': 0.920000016689, 'crushCellId': None, 'gridId': 20090, 'modelType': 0, 'pushable': 1}, 20024: {'type': 'crusherCell', 'name': '', 'comment': '', 'parentEntId': 20023, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'col': 1, 'gridId': 20025, 'row': 14}, 20026: {'type': 'crusherCell', 'name': '', 'comment': '', 'parentEntId': 20023, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'col': 10, 'gridId': 20025, 'row': 14}, 20027: {'type': 'crusherCell', 'name': 'copy of ', 'comment': '', 'parentEntId': 20023, 'pos': Point3(1.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'col': 21, 'gridId': 20025, 'row': 14}, 20028: {'type': 'crusherCell', 'name': 'copy of copy of ', 'comment': '', 'parentEntId': 20023, 'pos': Point3(2.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'col': 28, 'gridId': 20025, 'row': 14}, 30078: {'type': 'cutScene', 'name': 'button door', 'comment': '', 'parentEntId': 114, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'duration': 4.0, 'effect': 'irisInOut', 'motion': 'doorUnlock', 'startStopEvent': 30077}, 10002: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 128, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 10052: {'type': 'door', 'name': 'door 127', 'comment': '', 'parentEntId': 127, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 10039, 'unlock2Event': 0, 'unlock3Event': 0}, 30000: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 114, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 60132, 'unlock2Event': 0, 'unlock3Event': 0}, 30001: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 105, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1.0, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30002: {'type': 'door', 'name': 'door 106', 'comment': '', 'parentEntId': 106, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 60132, 'unlock2Event': 0, 'unlock3Event': 0}, 30003: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 107, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30004: {'type': 'door', 'name': 'doorFromBoilerRoom', 'comment': '', 'parentEntId': 108, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30005: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 109, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30006: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 110, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30008: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 112, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30009: {'type': 'door', 'name': 'door 113', 'comment': '', 'parentEntId': 113, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 60119, 'unlock2Event': 0, 'unlock3Event': 0}, 30010: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 115, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30011: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 116, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30012: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 117, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30013: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 118, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30014: {'type': 'door', 'name': 'doorFromPipeRoom 119', 'comment': '', 'parentEntId': 119, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30015: {'type': 'door', 'name': 'door 120', 'comment': '', 'parentEntId': 120, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30016: {'type': 'door', 'name': 'door 121', 'comment': '', 'parentEntId': 121, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30017: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 122, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30018: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 123, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 0, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 60103, 'unlock2Event': 0, 'unlock3Event': 0}, 30019: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 124, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30020: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 125, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 30021: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 126, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 60119, 'unlock2Event': 0, 'unlock3Event': 0}, 60088: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 131, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1.0, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 60094: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 129, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 0, 'isLock2Unlocked': 0, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1.0, 'unlock0Event': 0, 'unlock1Event': 60104, 'unlock2Event': 60105, 'unlock3Event': 0}, 60095: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 130, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 60101: {'type': 'door', 'name': '', 'comment': '', 'parentEntId': 222, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'color': Vec4(1.0, 1.0, 1.0, 1.0), 'isLock0Unlocked': 1, 'isLock1Unlocked': 1, 'isLock2Unlocked': 1, 'isLock3Unlocked': 1, 'isOpen': 0, 'isOpenEvent': 0, 'isVisBlocker': 1, 'secondsOpen': 1, 'unlock0Event': 0, 'unlock1Event': 0, 'unlock2Event': 0, 'unlock3Event': 0}, 10049: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 3}, 10051: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 4}, 60000: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 5}, 60001: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 6}, 60002: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 7}, 60003: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 9}, 60004: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 10}, 60005: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 8}, 60006: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 21}, 60007: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 24}, 60009: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 38}, 60011: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 12}, 60013: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 13}, 60014: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 14}, 60015: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 17}, 60016: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 15}, 60017: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 16}, 60018: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 19}, 60019: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 18}, 60024: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 22}, 60031: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 23}, 60044: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 33}, 60066: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 11}, 60067: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 27}, 60096: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 30}, 60108: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 34}, 60111: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 36}, 60114: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 37}, 60121: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 31}, 60126: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 35}, 60130: {'type': 'entityGroup', 'name': 'viz', 'comment': '', 'parentEntId': 32}, 10028: {'type': 'entrancePoint', 'name': 'entrance1', 'comment': '', 'parentEntId': 3, 'pos': Point3(0.0, 10.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'entranceId': 0, 'radius': 15, 'theta': 20}, 10029: {'type': 'entrancePoint', 'name': 'entrance2', 'comment': '', 'parentEntId': 16, 'pos': Point3(0.0, 10.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'entranceId': 1, 'radius': 15, 'theta': 20}, 10021: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(-2.02081203461, 0.0, 0.0), 'hpr': Vec3(337.477111816, 0.0, 0.0), 'scale': 1, 'gagLevel': 2, 'gagLevelMax': 0, 'gagTrack': 0, 'rewardPerGrab': 3, 'rewardPerGrabMax': 0}, 10024: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(20.3012371063, -26.3219051361, 0.0), 'hpr': Vec3(233.186553955, 0.0, 0.0), 'scale': 1, 'gagLevel': 4, 'gagLevelMax': 0, 'gagTrack': 4, 'rewardPerGrab': 4, 'rewardPerGrabMax': 0}, 10025: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(-47.3119659424, 7.22571134567, 0.0), 'hpr': Vec3(19.1523990631, 0.0, 0.0), 'scale': 1, 'gagLevel': 0, 'gagLevelMax': 0, 'gagTrack': 0, 'rewardPerGrab': 3, 'rewardPerGrabMax': 0}, 10026: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 10022, 'pos': Point3(-11.2036504745, 5.43513727188, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'gagLevel': 4, 'gagLevelMax': 0, 'gagTrack': 5, 'rewardPerGrab': 4, 'rewardPerGrabMax': 0}, 20020: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 20, 'pos': Point3(-23.0209007263, 0.0, 0.0), 'hpr': Vec3(126.675987244, 0.0, 0.0), 'scale': 1, 'gagLevel': 4, 'gagLevelMax': 0, 'gagTrack': 3, 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 20021: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 20, 'pos': Point3(-31.322473526, 14.1021032333, 0.0), 'hpr': Vec3(-136.569900513, 0.0, 0.0), 'scale': 1, 'gagLevel': 4, 'gagLevelMax': 0, 'gagTrack': 5, 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 20085: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 5, 'pos': Point3(3.1400001049, 12.6702871323, 10.1199998856), 'hpr': Vec3(-24.8104743958, 0.0, 0.0), 'scale': 1, 'gagLevel': 5, 'gagLevelMax': 0, 'gagTrack': 4, 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 20093: {'type': 'gagBarrel', 'name': '', 'comment': '', 'parentEntId': 20087, 'pos': Point3(2.40000009537, -1.0, 7.0), 'hpr': Vec3(-151.531570435, 0.0, 0.0), 'scale': 1, 'gagLevel': 0, 'gagLevelMax': 0, 'gagTrack': 0, 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10006: {'type': 'gear', 'name': 'first', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 0.0, 26.0633583069), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'degreesPerSec': 20.0, 'gearScale': 25.0, 'modelType': 'factory', 'orientation': 'vertical', 'phaseShift': 0}, 10007: {'type': 'gear', 'name': 'second', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 15.0, 26.0599994659), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1, 'degreesPerSec': 30.0, 'gearScale': 25.0, 'modelType': 'factory', 'orientation': 'vertical', 'phaseShift': 0}, 10008: {'type': 'gear', 'name': 'third', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 30.0, 26.0599994659), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'degreesPerSec': 40.0, 'gearScale': 25.0, 'modelType': 'factory', 'orientation': 'vertical', 'phaseShift': 0}, 10009: {'type': 'gear', 'name': 'fourth', 'comment': '', 'parentEntId': 10004, 'pos': Point3(0.0, 45.0, 26.0599994659), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1, 'degreesPerSec': 47.0, 'gearScale': 25.0, 'modelType': 'factory', 'orientation': 'vertical', 'phaseShift': 0}, 20013: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20012, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.25, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 20014: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20010, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.25, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 15, 'velocity': 4}, 20016: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20015, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.25, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 15, 'velocity': 4}, 20041: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20040, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20026, 'goonType': 'pg', 'gridId': 20025, 'hFov': 80.0, 'strength': 10, 'velocity': 6.0}, 20043: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20042, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20024, 'goonType': 'pg', 'gridId': 20025, 'hFov': 80.0, 'strength': 10, 'velocity': 5.0}, 20046: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20044, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20024, 'goonType': 'pg', 'gridId': 20025, 'hFov': 70, 'strength': 10, 'velocity': 6.0}, 20047: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20045, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20026, 'goonType': 'pg', 'gridId': 20025, 'hFov': 80.0, 'strength': 10, 'velocity': 6.0}, 20052: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20051, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 12.0, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 3, 'velocity': 4.0}, 20054: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20053, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20027, 'goonType': 'pg', 'gridId': 20025, 'hFov': 80.0, 'strength': 10, 'velocity': 5.5}, 20056: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20055, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20028, 'goonType': 'pg', 'gridId': 20025, 'hFov': 70, 'strength': 10, 'velocity': 6.0}, 20060: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20059, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20028, 'goonType': 'pg', 'gridId': 20025, 'hFov': 90.0, 'strength': 10, 'velocity': 6.5}, 20062: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20061, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': 20027, 'goonType': 'pg', 'gridId': 20025, 'hFov': 70, 'strength': 10, 'velocity': 7.5}, 20071: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20070, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 5, 'velocity': 6.0}, 20072: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20069, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 80.0, 'strength': 8, 'velocity': 6.0}, 20074: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20073, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.25, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 10, 'velocity': 4}, 20089: {'type': 'goon', 'name': '', 'comment': '', 'parentEntId': 20084, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1.5, 'attackRadius': 15, 'crushCellId': None, 'goonType': 'pg', 'gridId': None, 'hFov': 70, 'strength': 8, 'velocity': 4}, 20115: {'type': 'goonClipPlane', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, -7.40000009537, 0.0), 'hpr': Point3(-90.0, 0.0, 0.0), 'scale': Point3(5.0, 5.0, 5.0), 'goonId': 20052}, 20116: {'type': 'goonClipPlane', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, -58.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': 1, 'goonId': None}, 20117: {'type': 'goonClipPlane', 'name': '', 'comment': '', 'parentEntId': 24, 'pos': Point3(0.0, -29.0, 0.0), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': 1, 'goonId': None}, 20118: {'type': 'goonClipPlane', 'name': '', 'comment': '', 'parentEntId': 24, 'pos': Point3(-52.0, 0.0, 5.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'goonId': None}, 20025: {'type': 'grid', 'name': '', 'comment': '', 'parentEntId': 20023, 'pos': Point3(-48.4442176819, -24.9385223389, 0.0), 'scale': 1, 'cellSize': 3, 'numCol': 30, 'numRow': 16}, 20080: {'type': 'grid', 'name': '', 'comment': '', 'parentEntId': 5, 'pos': Point3(1.5, -10.6999998093, 0.0), 'scale': 1, 'cellSize': 3, 'numCol': 2, 'numRow': 5}, 20090: {'type': 'grid', 'name': '', 'comment': '', 'parentEntId': 17, 'pos': Point3(-6.5, -111.0, 0.0), 'scale': 1, 'cellSize': 3, 'numCol': 2, 'numRow': 9}, 20011: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 20, 'pos': Point3(-2.06235265732, 20.2197608948, 0.0250000003725), 'hpr': Vec3(-19.2152996063, 0.0, 0.0), 'scale': 1, 'rewardPerGrab': 10, 'rewardPerGrabMax': 0}, 20092: {'type': 'healBarrel', 'name': '', 'comment': '', 'parentEntId': 20087, 'pos': Point3(-1.0, -1.5, 7.0), 'hpr': Vec3(-191.789718628, 0.0, 0.0), 'scale': 1, 'rewardPerGrab': 5, 'rewardPerGrabMax': 0}, 10041: {'type': 'lift', 'name': 'westLift', 'comment': '', 'parentEntId': 60, 'pos': Point3(0.0, 0.0, 0.0641994103789), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'autoMoveDelay': 5, 'duration': 7.0, 'endBoardSides': ['back'], 'endGuardName': 'topGuard', 'endPos': Point3(0.0, 0.0, 165.0), 'floorName': 'elevator_floor', 'modelPath': 'phase_9/models/cogHQ/Elevator.bam', 'modelScale': Vec3(1.0, 1.0, 1.0), 'moveDelay': 1, 'startBoardSides': ['front'], 'startGuardName': 'bottomGuard', 'startPos': Point3(0.0, 0.0, 0.0)}, 10048: {'type': 'lift', 'name': 'eastLift', 'comment': '', 'parentEntId': 61, 'pos': Point3(0.0, -0.684064090252, 0.589321613312), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'autoMoveDelay': 5.0, 'duration': 7.0, 'endBoardSides': ['front', 'back', 'left', 'right'], 'endGuardName': 'topGuard', 'endPos': Point3(0.0, 0.0, 165.0), 'floorName': 'elevator_floor', 'modelPath': 'phase_9/models/cogHQ/Elevator.bam', 'modelScale': Vec3(1.0, 1.0, 1.0), 'moveDelay': 1, 'startBoardSides': ['front'], 'startGuardName': 'bottomGuard', 'startPos': Point3(0.0, 0.0, 0.0)}, 10057: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 10043, 'input1Event': 30009, 'input2Event': 30000, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 10059: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 10058, 'input1Event': 10057, 'input2Event': 30011, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 10061: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 10060, 'input1Event': 10059, 'input2Event': 30013, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 10063: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 10062, 'input1Event': 60033, 'input2Event': 30009, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 30068: {'type': 'logicGate', 'name': 'door 116 and door 118', 'comment': '', 'parentEntId': 30069, 'input1Event': 30013, 'input2Event': 30011, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60023: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60021, 'input1Event': 30011, 'input2Event': 30009, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60025: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60022, 'input1Event': 60023, 'input2Event': 30013, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60028: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60026, 'input1Event': 30011, 'input2Event': 30005, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60029: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60027, 'input1Event': 30011, 'input2Event': 30012, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60030: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 30071, 'input1Event': 30011, 'input2Event': 30009, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60033: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 30073, 'input1Event': 30013, 'input2Event': 30011, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60034: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 30075, 'input1Event': 30013, 'input2Event': 30005, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60035: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60032, 'input1Event': 30013, 'input2Event': 30012, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60037: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60036, 'input1Event': 30005, 'input2Event': 30012, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60039: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60038, 'input1Event': 30012, 'input2Event': 30005, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60041: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60040, 'input1Event': 30020, 'input2Event': 30019, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60043: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60042, 'input1Event': 30019, 'input2Event': 30020, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60047: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60045, 'input1Event': 10002, 'input2Event': 30019, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60049: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60048, 'input1Event': 30003, 'input2Event': 10052, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60051: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60050, 'input1Event': 30001, 'input2Event': 10052, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60053: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60052, 'input1Event': 30021, 'input2Event': 30016, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60055: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60054, 'input1Event': 30002, 'input2Event': 30021, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60057: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60056, 'input1Event': 30016, 'input2Event': 30021, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60059: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60058, 'input1Event': 30012, 'input2Event': 30011, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60061: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60060, 'input1Event': 30012, 'input2Event': 30013, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60064: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60062, 'input1Event': 30005, 'input2Event': 30011, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60065: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60063, 'input1Event': 30005, 'input2Event': 30013, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60074: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60072, 'input1Event': 10052, 'input2Event': 30003, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60075: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60073, 'input1Event': 10052, 'input2Event': 30001, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60076: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60020, 'input1Event': 30021, 'input2Event': 30002, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60078: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60077, 'input1Event': 30021, 'input2Event': 30002, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60080: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60079, 'input1Event': 60057, 'input2Event': 30002, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60082: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60081, 'input1Event': 60055, 'input2Event': 30016, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60084: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60083, 'input1Event': 30004, 'input2Event': 30014, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60086: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60085, 'input1Event': 30006, 'input2Event': 30008, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60091: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60087, 'input1Event': 60088, 'input2Event': 30001, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60093: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60092, 'input1Event': 30001, 'input2Event': 60088, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60100: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60099, 'input1Event': 60095, 'input2Event': 10002, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60119: {'type': 'logicGate', 'name': 'open sesame Duct & Lobby', 'comment': 'links together the Duct Room and Lobby buttons', 'parentEntId': 0, 'input1Event': 30076, 'input2Event': 60118, 'isInput1': 0, 'isInput2': 0, 'logicType': 'or'}, 60132: {'type': 'logicGate', 'name': 'open sesame Entrances', 'comment': 'links together the buttons in the two entrances', 'parentEntId': 0, 'input1Event': 30040, 'input2Event': 60102, 'isInput1': 0, 'isInput2': 0, 'logicType': 'or'}, 60138: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60137, 'input1Event': 60095, 'input2Event': 60094, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60141: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60139, 'input1Event': 10002, 'input2Event': 60094, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 60142: {'type': 'logicGate', 'name': '', 'comment': '', 'parentEntId': 60140, 'input1Event': 10002, 'input2Event': 60095, 'isInput1': 0, 'isInput2': 0, 'logicType': 'and'}, 10001: {'type': 'model', 'name': 'dropshadow', 'comment': '', 'parentEntId': 10006, 'pos': Point3(0.0, 0.0, -25.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 1.5, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_3/models/props/drop_shadow.bam'}, 10012: {'type': 'model', 'name': 'backCrate', 'comment': '', 'parentEntId': 10067, 'pos': Point3(0.0, -5.8149638176, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 10033: {'type': 'model', 'name': 'dropshadow', 'comment': '', 'parentEntId': 10007, 'pos': Point3(0.0, 0.0, -25.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 1.5, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_3/models/props/drop_shadow.bam'}, 10045: {'type': 'model', 'name': 'dropshadow', 'comment': '', 'parentEntId': 10008, 'pos': Point3(0.0, 0.0, -25.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 1.5, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_3/models/props/drop_shadow.bam'}, 10046: {'type': 'model', 'name': 'dropshadow', 'comment': '', 'parentEntId': 10009, 'pos': Point3(0.0, 0.0, -25.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(2.0, 1.5, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_3/models/props/drop_shadow.bam'}, 10050: {'type': 'model', 'name': 'sky', 'comment': '', 'parentEntId': 200, 'pos': Point3(-142.019622803, 437.227172852, 0.922491252422), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Point3(2.5, 2.5, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/cog_sky.bam'}, 10066: {'type': 'model', 'name': 'frontCrate', 'comment': '', 'parentEntId': 10067, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 10069: {'type': 'model', 'name': 'backCrate', 'comment': '', 'parentEntId': 10065, 'pos': Point3(0.0, -5.8149638176, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 2.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 10070: {'type': 'model', 'name': 'frontCrate', 'comment': '', 'parentEntId': 10065, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 20082: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 5, 'pos': Point3(4.50815010071, 11.6508359909, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(0.920000016689, 0.920000016689, 0.920000016689), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 20083: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 20082, 'pos': Point3(0.0, 0.0, 5.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 20088: {'type': 'model', 'name': '', 'comment': '', 'parentEntId': 20087, 'pos': Point3(1.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.29999995232, 1.0, 1.29999995232), 'collisionsOnly': 0, 'flattenType': 'light', 'loadType': 'loadModelCopy', 'modelPath': 'phase_9/models/cogHQ/metal_crateB.bam'}, 10000: {'type': 'nodepath', 'name': 'gearGauntletObstacle', 'comment': '', 'parentEntId': 10027, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10004: {'type': 'nodepath', 'name': 'gearGauntlet', 'comment': 'gears are staggered 15 ft in Y', 'parentEntId': 10000, 'pos': Point3(0.0, -23.25, 6.84999990463), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10014: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, 34.0699996948, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10015: {'type': 'nodepath', 'name': 'paint mixer platforms', 'comment': '', 'parentEntId': 10, 'pos': Point3(0.0, 5.15135765076, -2.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10022: {'type': 'nodepath', 'name': 'gagBarrels', 'comment': '', 'parentEntId': 11, 'pos': Point3(11.2328491211, 14.7959222794, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10023: {'type': 'nodepath', 'name': 'leftCogs', 'comment': '', 'parentEntId': 13, 'pos': Point3(-42.0362548828, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10027: {'type': 'nodepath', 'name': 'zoneNodeCompensate', 'comment': 'I think the ZoneNode was moved.', 'parentEntId': 19, 'pos': Point3(-0.426482379436, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10030: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 8, 'pos': Point3(2.5, 62.5, 10.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10032: {'type': 'nodepath', 'name': 'rightCogs', 'comment': '', 'parentEntId': 13, 'pos': Point3(46.8799591064, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10034: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 22, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1}, 10036: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 15, 'pos': Point3(5.5, 0.0, 0.0), 'hpr': Point3(161.0, 0.0, 0.0), 'scale': 1}, 10037: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 7, 'pos': Point3(3.09999990463, -48.2700004578, 0.0500000007451), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 10040: {'type': 'nodepath', 'name': 'FactoryBoss', 'comment': '', 'parentEntId': 24, 'pos': Point3(0.0, 68.4457321167, 9.56690120697), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': 1}, 10047: {'type': 'nodepath', 'name': 'battleCell', 'comment': '', 'parentEntId': 34, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10056: {'type': 'nodepath', 'name': 'sounds', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 0.0, 15.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10064: {'type': 'nodepath', 'name': 'battleCell', 'comment': '', 'parentEntId': 32, 'pos': Point3(0.0, -5.20446538925, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10065: {'type': 'nodepath', 'name': 'backSteps', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, 56.2651863098, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': Point3(1.5, 1.29999995232, 0.730000019073)}, 10067: {'type': 'nodepath', 'name': 'frontSteps', 'comment': '', 'parentEntId': 10000, 'pos': Point3(0.0, -44.7196426392, 0.0), 'hpr': Point3(180.0, 0.0, 0.0), 'scale': Point3(1.5, 1.29999995232, 0.729057013988)}, 10068: {'type': 'nodepath', 'name': 'battleCell', 'comment': '', 'parentEntId': 33, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20000: {'type': 'nodepath', 'name': 'stompers', 'comment': '', 'parentEntId': 17, 'pos': Point3(0.75, 0.0, 0.5), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20018: {'type': 'nodepath', 'name': '', 'comment': '', 'parentEntId': 10014, 'pos': Point3(0.0, -24.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20019: {'type': 'nodepath', 'name': 'cogsJoin', 'comment': '', 'parentEntId': 10030, 'pos': Point3(16.0, 2.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20022: {'type': 'nodepath', 'name': 'StomperButtonsNodepath', 'comment': '', 'parentEntId': 24, 'pos': Point3(-11.75, -35.7999992371, 14.8999996185), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20023: {'type': 'nodepath', 'name': '', 'comment': '', 'parentEntId': 24, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20037: {'type': 'nodepath', 'name': 'SignatureGoonNP', 'comment': '', 'parentEntId': 24, 'pos': Point3(-48.4442176819, -24.9385223389, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20058: {'type': 'nodepath', 'name': 'SigRoomCogs', 'comment': '', 'parentEntId': 24, 'pos': Point3(-1.09280061722, -45.0, 14.9899997711), 'hpr': Point3(90.0, 0.0, 0.0), 'scale': 1}, 20087: {'type': 'nodepath', 'name': '', 'comment': '', 'parentEntId': 17, 'pos': Point3(-4.0, -117.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20094: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 34, 'pos': Point3(-0.720505774021, 27.5460662842, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 20095: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 32, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1}, 20096: {'type': 'nodepath', 'name': 'cogs', 'comment': '', 'parentEntId': 33, 'pos': Point3(4.84920883179, 8.74481773376, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1}, 10017: {'type': 'paintMixer', 'name': 'fifth', 'comment': '', 'parentEntId': 10015, 'pos': Point3(5.23999977112, 23.5200004578, 8.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Point3(0.800000011921, 0.800000011921, 0.800000011921), 'motion': 'easeInOut', 'offset': Point3(-12.0, -6.0, 0.0), 'period': 8.0, 'phaseShift': 0.5, 'shaftScale': 1, 'waitPercent': 0.1}, 10018: {'type': 'paintMixer', 'name': 'fourth', 'comment': '', 'parentEntId': 10015, 'pos': Point3(-12.1000003815, 3.0, 8.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Point3(0.800000011921, 0.800000011921, 0.800000011921), 'motion': 'easeInOut', 'offset': Point3(0.0, -6.0, 15.0), 'period': 8.0, 'phaseShift': 0.0, 'shaftScale': 2.5, 'waitPercent': 0.1}, 10019: {'type': 'paintMixer', 'name': 'third', 'comment': '', 'parentEntId': 10015, 'pos': Point3(-3.85418701172, -7.75750732422, 22.58360672), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Point3(0.800000011921, 0.800000011921, 0.800000011921), 'motion': 'easeInOut', 'offset': Point3(7.0, 0.0, 0.0), 'period': 8.0, 'phaseShift': 0.0, 'shaftScale': 2.5, 'waitPercent': 0.1}, 10020: {'type': 'paintMixer', 'name': 'second', 'comment': '', 'parentEntId': 10015, 'pos': Point3(16.0100002289, -6.46999979019, 23.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Point3(0.800000011921, 0.800000011921, 0.800000011921), 'motion': 'easeInOut', 'offset': Point3(-4.0, -8.0, -15.0), 'period': 8.0, 'phaseShift': 0.0, 'shaftScale': 2.5, 'waitPercent': 0.1}, 10054: {'type': 'paintMixer', 'name': 'first', 'comment': '', 'parentEntId': 10015, 'pos': Point3(-10.0, -26.1000003815, 8.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'floorName': 'PaintMixerFloorCollision', 'modelPath': 'phase_9/models/cogHQ/PaintMixer', 'modelScale': Point3(0.800000011921, 0.800000011921, 0.800000011921), 'motion': 'easeInOut', 'offset': Point3(15.0, 0.0, 0.0), 'period': 8.0, 'phaseShift': 0.0, 'shaftScale': 1, 'waitPercent': 0.1}, 20008: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 20009: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 17, 'pathScale': 1.0}, 20010: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 21, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 36, 'pathScale': 1.0}, 20012: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 21, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 34, 'pathScale': 1.0}, 20015: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 21, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 37, 'pathScale': 1.0}, 20038: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 15, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 38, 'pathScale': 1.0}, 20039: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 7, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 12, 'pathScale': 1.0}, 20040: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(41.5, 33.5, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 20042: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(15.0, 34.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 20044: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(1.5, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Vec3(1.0, 1.0, 1.0), 'pathIndex': 6, 'pathScale': 1.0}, 20045: {'type': 'path', 'name': 'copy of ', 'comment': '', 'parentEntId': 20037, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'pathIndex': 7, 'pathScale': 1.0}, 20049: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 7, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 13, 'pathScale': 1.0}, 20051: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(1.0, -24.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 42, 'pathScale': 1.0}, 20053: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 8, 'pathScale': 1.0}, 20055: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 9, 'pathScale': 1.0}, 20059: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 10, 'pathScale': 1.0}, 20061: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 20037, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 11, 'pathScale': 1.0}, 20067: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 15, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 39, 'pathScale': 1.0}, 20068: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 15, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 40, 'pathScale': 1.0}, 20069: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 9, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 5, 'pathScale': 1.0}, 20070: {'type': 'path', 'name': 'copy of ', 'comment': '', 'parentEntId': 9, 'pos': Point3(1.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 5, 'pathScale': 1.0}, 20073: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 21, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 35, 'pathScale': 1.0}, 20075: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 7, 'pos': Point3(4.0, 4.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 14, 'pathScale': 1.0}, 20076: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 8, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 15, 'pathScale': 1.0}, 20077: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 8, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 16, 'pathScale': 1.0}, 20078: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 18, 'pathScale': 1.0}, 20079: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 4, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 20084: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 9, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 41, 'pathScale': 1.0}, 20097: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 34, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 19, 'pathScale': 1.0}, 20098: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 34, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 20, 'pathScale': 1.0}, 20099: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 34, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 21, 'pathScale': 1.0}, 20100: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 33, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 22, 'pathScale': 1.0}, 20101: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 33, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 23, 'pathScale': 1.0}, 20102: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 33, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 24, 'pathScale': 1.0}, 20103: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 32, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 25, 'pathScale': 1.0}, 20104: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 32, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 26, 'pathScale': 1.0}, 20105: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 32, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 27, 'pathScale': 1.0}, 20106: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 28, 'pathScale': 1.0}, 20107: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 29, 'pathScale': 1.0}, 20108: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 30, 'pathScale': 1.0}, 20109: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 31, 'pathScale': 1.0}, 20110: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 32, 'pathScale': 1.0}, 20111: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 13, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 33, 'pathScale': 1.0}, 60133: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 22, 'pos': Point3(-10.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 60134: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 22, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 60135: {'type': 'path', 'name': '', 'comment': '', 'parentEntId': 22, 'pos': Point3(10.0, 0.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'pathIndex': 0, 'pathScale': 1.0}, 10042: {'type': 'propSpinner', 'name': '', 'comment': '', 'parentEntId': 7}, 20001: {'type': 'stomper', 'name': '', 'comment': '', 'parentEntId': 20000, 'pos': Point3(0.0, 0.0, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(7.0, 5.0, 7.0), 'modelPath': 0, 'motion': 3, 'period': 4.0, 'phaseShift': 0.0, 'range': 30.0, 'shaftScale': Point3(0.5, 12.0, 0.5), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20002: {'type': 'stomper', 'name': 'copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(0.0, -14.3293819427, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(7.0, 5.0, 7.0), 'modelPath': 0, 'motion': 3, 'period': 2.0, 'phaseShift': 0.0, 'range': 10.0, 'shaftScale': Point3(0.5, 12.0, 0.5), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20003: {'type': 'stomper', 'name': 'copy of copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(0.0, -28.3252277374, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(7.0, 5.0, 7.0), 'modelPath': 0, 'motion': 3, 'period': 2.0, 'phaseShift': 0.5, 'range': 10.0, 'shaftScale': Point3(0.5, 12.0, 0.5), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20004: {'type': 'stomper', 'name': 'copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(-3.5, 16.2588481903, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(3.5, 5.0, 3.5), 'modelPath': 0, 'motion': 3, 'period': 3.0001373423482587, 'phaseShift': 0.0, 'range': 15.0, 'shaftScale': Point3(0.709999978542, 12.0, 0.709999978542), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20005: {'type': 'stomper', 'name': 'copy of copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(3.5, 16.2588481903, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(3.5, 5.0, 3.5), 'modelPath': 0, 'motion': 3, 'period': 1.5, 'phaseShift': 0.0, 'range': 15.0, 'shaftScale': Point3(0.709999978542, 12.0, 0.709999978542), 'soundLen': 0, 'soundOn': 1, 'soundPath': 1, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20006: {'type': 'stomper', 'name': 'copy of copy of copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(-3.5, 23.4392471313, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(3.5, 5.0, 3.5), 'modelPath': 0, 'motion': 3, 'period': 1.5, 'phaseShift': 0.5, 'range': 15.0, 'shaftScale': Point3(0.709999978542, 12.0, 0.709999978542), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20007: {'type': 'stomper', 'name': 'copy of copy of copy of copy of ', 'comment': '', 'parentEntId': 20000, 'pos': Point3(3.5, 23.4392471313, 0.0), 'hpr': Point3(0.0, 0.0, 0.0), 'scale': 1, 'crushCellId': None, 'damage': 3, 'headScale': Point3(3.5, 5.0, 3.5), 'modelPath': 0, 'motion': 3, 'period': 3.0, 'phaseShift': 0.5, 'range': 15.0, 'shaftScale': Point3(0.709999978542, 12.0, 0.709999978542), 'soundLen': 0, 'soundOn': 1, 'soundPath': 0, 'style': 'vertical', 'switchId': 0, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20029: {'type': 'stomper', 'name': '', 'comment': '', 'parentEntId': 20025, 'pos': Point3(4.5, 43.5, 0.25), 'hpr': Point3(1.34842386822e-13, 0.0, 3.1635479826e-13), 'scale': 1, 'animateShadow': 0, 'crushCellId': 20024, 'damage': 3, 'headScale': Point3(3.0, 2.0, 3.0), 'modelPath': 0, 'motion': 5, 'period': 2.0, 'phaseShift': 0.0, 'range': 12.0, 'shaftScale': Point3(0.660000026226, 37.5, 0.660000026226), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 20033, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20030: {'type': 'stomper', 'name': 'copy of ', 'comment': '', 'parentEntId': 20025, 'pos': Point3(31.5, 43.5, 0.25), 'hpr': Point3(1.34842386822e-13, 0.0, 3.1635479826e-13), 'scale': 1, 'animateShadow': 0, 'crushCellId': 20026, 'damage': 3, 'headScale': Point3(3.0, 2.0, 3.0), 'modelPath': 0, 'motion': 5, 'period': 2.0, 'phaseShift': 0.0, 'range': 12.0, 'shaftScale': Point3(0.660000026226, 37.5, 0.660000026226), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 20034, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20031: {'type': 'stomper', 'name': 'copy of copy of ', 'comment': '', 'parentEntId': 20025, 'pos': Point3(64.5, 43.5, 0.25), 'hpr': Point3(1.34842386822e-13, 0.0, 3.1635479826e-13), 'scale': 1, 'animateShadow': 0, 'crushCellId': 20027, 'damage': 3, 'headScale': Point3(3.0, 2.0, 3.0), 'modelPath': 0, 'motion': 5, 'period': 2.0, 'phaseShift': 0.0, 'range': 12.0, 'shaftScale': Point3(0.660000026226, 37.5, 0.660000026226), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 20035, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20032: {'type': 'stomper', 'name': 'copy of copy of copy of ', 'comment': '', 'parentEntId': 20025, 'pos': Point3(85.5, 43.5, 0.25), 'hpr': Point3(1.34842386822e-13, 0.0, 3.1635479826e-13), 'scale': 1, 'animateShadow': 0, 'crushCellId': 20028, 'damage': 3, 'headScale': Point3(3.0, 2.0, 3.0), 'modelPath': 0, 'motion': 5, 'period': 2.0, 'phaseShift': 0.0, 'range': 12.0, 'shaftScale': Point3(0.660000026226, 37.5, 0.660000026226), 'soundLen': 0, 'soundOn': 1, 'soundPath': 2, 'style': 'vertical', 'switchId': 20036, 'wantShadow': 1, 'wantSmoke': 1, 'zOffset': 0}, 20050: {'type': 'trigger', 'name': '', 'comment': '', 'parentEntId': 20022, 'pos': Point3(10.0, 0.0, 10.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(20.0, 20.0, 20.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1, 'triggerName': 'signatureRoomView'}, 20057: {'type': 'trigger', 'name': '', 'comment': '', 'parentEntId': 23, 'pos': Point3(3.0, -8.80000019073, 15.5090923309), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(25.0, 25.0, 25.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1, 'triggerName': 'lookoutTrigger'}, 30077: {'type': 'trigger', 'name': 'button cutscene', 'comment': '', 'parentEntId': 3, 'pos': Point3(-4.0, 8.0, 0.0), 'hpr': Vec3(0.0, 0.0, 0.0), 'scale': Point3(1.0, 1.0, 1.0), 'isOn': 0, 'isOnEvent': 0, 'secondsOn': 1, 'triggerName': ''}, 10013: {'type': 'visibilityExtender', 'name': 'intoEastSilo', 'comment': '', 'parentEntId': 60009, 'event': 60101, 'newZones': [61]}, 10043: {'type': 'visibilityExtender', 'name': 'beyondLobby', 'comment': '', 'parentEntId': 10049, 'event': 10057, 'newZones': [5, 116]}, 10044: {'type': 'visibilityExtender', 'name': 'intoEntrance1', 'comment': '', 'parentEntId': 10051, 'event': 30000, 'newZones': [3]}, 10058: {'type': 'visibilityExtender', 'name': 'intoFarHallway', 'comment': '', 'parentEntId': 10049, 'event': 10059, 'newZones': [6, 118]}, 10060: {'type': 'visibilityExtender', 'name': 'intoLookout', 'comment': '', 'parentEntId': 10049, 'event': 10061, 'newZones': [23]}, 10062: {'type': 'visibilityExtender', 'name': 'intoLobby', 'comment': '', 'parentEntId': 60031, 'event': 10063, 'newZones': [4, 114]}, 30022: {'type': 'visibilityExtender', 'name': 'intoLobby', 'comment': '', 'parentEntId': 10049, 'event': 30000, 'newZones': [4, 113]}, 30023: {'type': 'visibilityExtender', 'name': 'beyond door 106', 'comment': '', 'parentEntId': 60017, 'event': 30002, 'newZones': [15, 126]}, 30024: {'type': 'visibilityExtender', 'name': 'beyond door 106', 'comment': '', 'parentEntId': 60016, 'event': 30002, 'newZones': [16]}, 30025: {'type': 'visibilityExtender', 'name': 'beyond door 126', 'comment': '', 'parentEntId': 60016, 'event': 30021, 'newZones': [14, 17, 121]}, 30026: {'type': 'visibilityExtender', 'name': 'beyond door 121', 'comment': '', 'parentEntId': 60015, 'event': 30016, 'newZones': [13, 119]}, 30027: {'type': 'visibilityExtender', 'name': 'beyond door 126', 'comment': '', 'parentEntId': 60015, 'event': 30021, 'newZones': [15, 106]}, 30029: {'type': 'visibilityExtender', 'name': 'beyondLobby', 'comment': '', 'parentEntId': 10051, 'event': 30009, 'newZones': [5, 116]}, 30030: {'type': 'visibilityExtender', 'name': 'beyond door 113', 'comment': '', 'parentEntId': 60000, 'event': 30009, 'newZones': [4, 114]}, 30031: {'type': 'visibilityExtender', 'name': 'beyond door 116', 'comment': '', 'parentEntId': 60000, 'event': 30011, 'newZones': [6, 109, 117, 118]}, 30032: {'type': 'visibilityExtender', 'name': 'intoHallwayFromLobby', 'comment': '', 'parentEntId': 60001, 'event': 30011, 'newZones': [5, 113]}, 30033: {'type': 'visibilityExtender', 'name': 'intoBoilerRoom', 'comment': '', 'parentEntId': 60001, 'event': 30012, 'newZones': [8]}, 30034: {'type': 'visibilityExtender', 'name': 'intoLookout', 'comment': '', 'parentEntId': 60001, 'event': 30013, 'newZones': [23, 39]}, 30035: {'type': 'visibilityExtender', 'name': 'intoGearRoom', 'comment': '', 'parentEntId': 60001, 'event': 30005, 'newZones': [7]}, 30036: {'type': 'visibilityExtender', 'name': 'beyond door 109', 'comment': '', 'parentEntId': 60002, 'event': 30005, 'newZones': [6, 116, 117, 118]}, 30037: {'type': 'visibilityExtender', 'name': 'beyond door 110', 'comment': '', 'parentEntId': 60002, 'event': 30006, 'newZones': [9, 25, 26, 33, 34, 35, 38, 41, 53, 112, 115, 200]}, 30038: {'type': 'visibilityExtender', 'name': 'beyond door 117', 'comment': '', 'parentEntId': 60005, 'event': 30012, 'newZones': [6, 109, 116, 118]}, 30039: {'type': 'visibilityExtender', 'name': 'beyond door 108', 'comment': '', 'parentEntId': 60005, 'event': 30004, 'newZones': [12, 21, 26, 34, 35, 40, 41, 53, 60, 119, 120, 200]}, 30041: {'type': 'visibilityExtender', 'name': 'beyond door 110', 'comment': '', 'parentEntId': 60003, 'event': 30006, 'newZones': [7]}, 30042: {'type': 'visibilityExtender', 'name': 'beyond door 112', 'comment': '', 'parentEntId': 60003, 'event': 30008, 'newZones': [10, 11]}, 30043: {'type': 'visibilityExtender', 'name': 'intoWarehouse', 'comment': '', 'parentEntId': 60003, 'event': 30010, 'newZones': [24, 39]}, 30044: {'type': 'visibilityExtender', 'name': 'beyond door 112', 'comment': '', 'parentEntId': 60004, 'event': 30008, 'newZones': [9, 25, 26, 33, 34, 35, 38, 41, 53, 110, 115, 200]}, 30046: {'type': 'visibilityExtender', 'name': 'beyond door 112', 'comment': '', 'parentEntId': 60066, 'event': 30008, 'newZones': [9, 25, 26, 41, 200]}, 30049: {'type': 'visibilityExtender', 'name': 'beyond door 119', 'comment': '', 'parentEntId': 60013, 'event': 30014, 'newZones': [12, 21, 23, 26, 33, 34, 35, 41, 53, 60, 108, 112, 120, 200]}, 30050: {'type': 'visibilityExtender', 'name': 'beyond door 121', 'comment': '', 'parentEntId': 60013, 'event': 30016, 'newZones': [14, 17, 126]}, 30051: {'type': 'visibilityExtender', 'name': 'beyond door 121', 'comment': '', 'parentEntId': 60014, 'event': 30016, 'newZones': [13, 119]}, 30052: {'type': 'visibilityExtender', 'name': 'beyond door 126', 'comment': '', 'parentEntId': 60014, 'event': 30021, 'newZones': [15, 106]}, 30055: {'type': 'visibilityExtender', 'name': 'beyond door 105', 'comment': '', 'parentEntId': 60019, 'event': 30001, 'newZones': [27, 127]}, 30056: {'type': 'visibilityExtender', 'name': 'beyond door 105', 'comment': '', 'parentEntId': 60018, 'event': 30001, 'newZones': [27, 127]}, 30057: {'type': 'visibilityExtender', 'name': 'beyond door 103', 'comment': '', 'parentEntId': 60018, 'event': 60088, 'newZones': [17]}, 30059: {'type': 'visibilityExtender', 'name': 'beyond door 108', 'comment': '', 'parentEntId': 60006, 'event': 30004, 'newZones': [8, 117]}, 30060: {'type': 'visibilityExtender', 'name': 'beyond door 119', 'comment': '', 'parentEntId': 60006, 'event': 30014, 'newZones': [13, 121]}, 30061: {'type': 'visibilityExtender', 'name': 'intoWarehouse', 'comment': '', 'parentEntId': 60006, 'event': 30015, 'newZones': [24, 39]}, 30062: {'type': 'visibilityExtender', 'name': 'beyond door 107', 'comment': '', 'parentEntId': 60024, 'event': 30003, 'newZones': [27, 127]}, 30063: {'type': 'visibilityExtender', 'name': 'intoHallway', 'comment': '', 'parentEntId': 60031, 'event': 30013, 'newZones': [6, 109, 116, 117]}, 30064: {'type': 'visibilityExtender', 'name': 'beyondLowerWestDoor', 'comment': '', 'parentEntId': 60007, 'event': 30015, 'newZones': [12, 21, 26, 34, 40, 41, 53, 200]}, 30066: {'type': 'visibilityExtender', 'name': 'beyondLowerEastDoor', 'comment': '', 'parentEntId': 60007, 'event': 30010, 'newZones': [9, 25, 26, 33, 38, 41, 200]}, 30067: {'type': 'visibilityExtender', 'name': 'beyondUpperEastDoor', 'comment': '', 'parentEntId': 60007, 'event': 30019, 'newZones': [9, 33, 38, 41, 200, 222]}, 30069: {'type': 'visibilityExtender', 'name': 'beyond door 118', 'comment': '', 'parentEntId': 60000, 'event': 30068, 'newZones': [23]}, 30071: {'type': 'visibilityExtender', 'name': 'intoLobby', 'comment': '', 'parentEntId': 60001, 'event': 60030, 'newZones': [4, 114]}, 30073: {'type': 'visibilityExtender', 'name': 'intoLobbyHallway', 'comment': '', 'parentEntId': 60031, 'event': 60033, 'newZones': [5, 113]}, 30075: {'type': 'visibilityExtender', 'name': 'intoGearRoom', 'comment': '', 'parentEntId': 60031, 'event': 60034, 'newZones': [7]}, 60008: {'type': 'visibilityExtender', 'name': 'beyondUpperWestDoor', 'comment': '', 'parentEntId': 60007, 'event': 30020, 'newZones': [12, 21, 34, 40, 41, 60, 127, 200]}, 60010: {'type': 'visibilityExtender', 'name': 'intoWarehouse', 'comment': '', 'parentEntId': 60009, 'event': 30019, 'newZones': [24, 39, 125]}, 60012: {'type': 'visibilityExtender', 'name': 'beyond door 125', 'comment': '', 'parentEntId': 60011, 'event': 30020, 'newZones': [24, 39, 124]}, 60020: {'type': 'visibilityExtender', 'name': 'beyond door 106', 'comment': '', 'parentEntId': 60015, 'event': 60076, 'newZones': [16]}, 60021: {'type': 'visibilityExtender', 'name': 'beyond door 116', 'comment': '', 'parentEntId': 10051, 'event': 60023, 'newZones': [6, 118]}, 60022: {'type': 'visibilityExtender', 'name': 'beyond door 118', 'comment': '', 'parentEntId': 10051, 'event': 60025, 'newZones': [23]}, 60026: {'type': 'visibilityExtender', 'name': 'beyond door 109', 'comment': '', 'parentEntId': 60000, 'event': 60028, 'newZones': [7]}, 60027: {'type': 'visibilityExtender', 'name': 'beyond door 117', 'comment': '', 'parentEntId': 60000, 'event': 60029, 'newZones': [8]}, 60032: {'type': 'visibilityExtender', 'name': 'intoBoilerRoom', 'comment': '', 'parentEntId': 60031, 'event': 60035, 'newZones': [8]}, 60036: {'type': 'visibilityExtender', 'name': 'beyond door 117', 'comment': '', 'parentEntId': 60002, 'event': 60037, 'newZones': [8]}, 60038: {'type': 'visibilityExtender', 'name': 'beyond door 109', 'comment': '', 'parentEntId': 60005, 'event': 60039, 'newZones': [7]}, 60040: {'type': 'visibilityExtender', 'name': 'beyond door 124', 'comment': '', 'parentEntId': 60011, 'event': 60041, 'newZones': [38]}, 60042: {'type': 'visibilityExtender', 'name': 'beyondWarehouse', 'comment': '', 'parentEntId': 60009, 'event': 60043, 'newZones': [12, 200]}, 60045: {'type': 'visibilityExtender', 'name': 'beyond door 124', 'comment': '', 'parentEntId': 60044, 'event': 60047, 'newZones': [24]}, 60046: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60044, 'event': 10002, 'newZones': [31]}, 60048: {'type': 'visibilityExtender', 'name': 'beyond door 127', 'comment': '', 'parentEntId': 60024, 'event': 60049, 'newZones': [21, 200]}, 60050: {'type': 'visibilityExtender', 'name': 'beyond door 127', 'comment': '', 'parentEntId': 60019, 'event': 60051, 'newZones': [21, 34, 200]}, 60052: {'type': 'visibilityExtender', 'name': 'beyond door 121', 'comment': '', 'parentEntId': 60016, 'event': 60053, 'newZones': [13, 119]}, 60054: {'type': 'visibilityExtender', 'name': 'beyond door 126', 'comment': '', 'parentEntId': 60017, 'event': 60055, 'newZones': [14, 17, 121]}, 60056: {'type': 'visibilityExtender', 'name': 'beyond door 126', 'comment': '', 'parentEntId': 60013, 'event': 60057, 'newZones': [15, 106]}, 60058: {'type': 'visibilityExtender', 'name': 'beyond door 116', 'comment': '', 'parentEntId': 60005, 'event': 60059, 'newZones': [5]}, 60060: {'type': 'visibilityExtender', 'name': 'beyond door 118', 'comment': '', 'parentEntId': 60005, 'event': 60061, 'newZones': [23]}, 60062: {'type': 'visibilityExtender', 'name': 'beyond door 116', 'comment': '', 'parentEntId': 60002, 'event': 60064, 'newZones': [5]}, 60063: {'type': 'visibilityExtender', 'name': 'beyond door 118', 'comment': '', 'parentEntId': 60002, 'event': 60065, 'newZones': [23]}, 60068: {'type': 'visibilityExtender', 'name': 'beyond door 105', 'comment': '', 'parentEntId': 60067, 'event': 30001, 'newZones': [18, 19, 20, 131]}, 60069: {'type': 'visibilityExtender', 'name': 'beyond door 107', 'comment': '', 'parentEntId': 60067, 'event': 30003, 'newZones': [22]}, 60070: {'type': 'visibilityExtender', 'name': 'beyond door 127', 'comment': '', 'parentEntId': 60067, 'event': 10052, 'newZones': [12, 21, 26, 34, 35, 40, 41, 53, 60, 200]}, 60071: {'type': 'visibilityExtender', 'name': 'beyond door 127', 'comment': '', 'parentEntId': 60006, 'event': 10052, 'newZones': [27, 105, 107]}, 60072: {'type': 'visibilityExtender', 'name': 'beyond door 107', 'comment': '', 'parentEntId': 60006, 'event': 60074, 'newZones': [22]}, 60073: {'type': 'visibilityExtender', 'name': 'beyond door 105', 'comment': '', 'parentEntId': 60006, 'event': 60075, 'newZones': [18]}, 60077: {'type': 'visibilityExtender', 'name': 'beyond door 106', 'comment': '', 'parentEntId': 60014, 'event': 60078, 'newZones': [16]}, 60079: {'type': 'visibilityExtender', 'name': 'beyond door 106', 'comment': '', 'parentEntId': 60013, 'event': 60080, 'newZones': [16]}, 60081: {'type': 'visibilityExtender', 'name': 'beyond door 121', 'comment': '', 'parentEntId': 60017, 'event': 60082, 'newZones': [13]}, 60083: {'type': 'visibilityExtender', 'name': 'beyond door 119', 'comment': '', 'parentEntId': 60005, 'event': 60084, 'newZones': [13]}, 60085: {'type': 'visibilityExtender', 'name': 'beyond door 112', 'comment': '', 'parentEntId': 60002, 'event': 60086, 'newZones': [10]}, 60087: {'type': 'visibilityExtender', 'name': 'beyond door 105', 'comment': '', 'parentEntId': 60015, 'event': 60091, 'newZones': [27]}, 60089: {'type': 'visibilityExtender', 'name': 'beyond door 103', 'comment': '', 'parentEntId': 60019, 'event': 60088, 'newZones': [17]}, 60090: {'type': 'visibilityExtender', 'name': 'beyond door 103', 'comment': '', 'parentEntId': 60015, 'event': 60088, 'newZones': [18, 19, 105]}, 60092: {'type': 'visibilityExtender', 'name': 'beyond door 103', 'comment': '', 'parentEntId': 60067, 'event': 60093, 'newZones': [17]}, 60097: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60096, 'event': 60095, 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 129, 200]}, 60098: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60044, 'event': 60095, 'newZones': [30]}, 60099: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60096, 'event': 60100, 'newZones': [31]}, 60106: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60011, 'event': 60094, 'newZones': [32]}, 60107: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60011, 'event': 60095, 'newZones': [30]}, 60109: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60108, 'event': 60094, 'newZones': [32]}, 60110: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60108, 'event': 60095, 'newZones': [30]}, 60112: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60111, 'event': 60094, 'newZones': [32]}, 60113: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60111, 'event': 60095, 'newZones': [30]}, 60115: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60114, 'event': 60094, 'newZones': [32]}, 60116: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60114, 'event': 60095, 'newZones': [30]}, 60117: {'type': 'visibilityExtender', 'name': 'beyond door 103', 'comment': '', 'parentEntId': 60014, 'event': 60088, 'newZones': [18]}, 60120: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60108, 'event': 10002, 'newZones': [31]}, 60122: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60121, 'event': 10002, 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 129, 130, 200]}, 60123: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60111, 'event': 10002, 'newZones': []}, 60124: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60114, 'event': 10002, 'newZones': [31]}, 60125: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60011, 'event': 10002, 'newZones': [31]}, 60127: {'type': 'visibilityExtender', 'name': 'beyond door 128', 'comment': '', 'parentEntId': 60126, 'event': 10002, 'newZones': [31]}, 60128: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60126, 'event': 60094, 'newZones': [32]}, 60129: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60126, 'event': 60095, 'newZones': [30]}, 60131: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60130, 'event': 60094, 'newZones': [33, 34, 35, 36, 37, 60, 61, 128, 130, 200]}, 60136: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60044, 'event': 60094, 'newZones': [32]}, 60137: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60096, 'event': 60138, 'newZones': [32]}, 60139: {'type': 'visibilityExtender', 'name': 'beyond door 129', 'comment': '', 'parentEntId': 60121, 'event': 60141, 'newZones': [32]}, 60140: {'type': 'visibilityExtender', 'name': 'beyond door 130', 'comment': '', 'parentEntId': 60121, 'event': 60142, 'newZones': [30]}} +Scenario0 = {} +levelSpec = {'globalEntities': GlobalEntities, 'scenarios': [Scenario0]} \ No newline at end of file diff --git a/toontown/src/coghq/SinkingPlatformGlobals.py b/toontown/src/coghq/SinkingPlatformGlobals.py index 3e43f954..9abb0949 100644 --- a/toontown/src/coghq/SinkingPlatformGlobals.py +++ b/toontown/src/coghq/SinkingPlatformGlobals.py @@ -1,4 +1,3 @@ - OFF = 0 SINKING = 1 -RISING = 2 +RISING = 2 \ No newline at end of file diff --git a/toontown/src/coghq/SpecImports.py b/toontown/src/coghq/SpecImports.py index f2247b60..a561b41f 100644 --- a/toontown/src/coghq/SpecImports.py +++ b/toontown/src/coghq/SpecImports.py @@ -1,3 +1 @@ -"""SpecImports module: contains all imports required for Factory spec data""" - -from pandac.PandaModules import * +from pandac.PandaModules import * \ No newline at end of file diff --git a/toontown/src/coghq/StageLayout.py b/toontown/src/coghq/StageLayout.py index 3f8e2f83..4601f50e 100644 --- a/toontown/src/coghq/StageLayout.py +++ b/toontown/src/coghq/StageLayout.py @@ -7,33 +7,33 @@ def printAllCashbotInfo(): # print out roomId->room name - print 'roomId: roomName' - for roomId, roomName in StageRoomSpecs.CashbotStageRoomId2RoomName.items(): - print '%s: %s' % (roomId, roomName) + print('roomId: roomName') + for roomId, roomName in list(StageRoomSpecs.CashbotStageRoomId2RoomName.items()): + print('%s: %s' % (roomId, roomName)) # print out # of battles in each room - print '\nroomId: numBattles' - for roomId, numBattles in StageRoomSpecs.roomId2numBattles.items(): - print '%s: %s' % (roomId, numBattles) + print('\nroomId: numBattles') + for roomId, numBattles in list(StageRoomSpecs.roomId2numBattles.items()): + print('%s: %s' % (roomId, numBattles)) # print out all of the rooms in all stage floors - print '\nstageId floor roomIds' + print('\nstageId floor roomIds') printStageRoomIds() # print out # of rooms in each stage floor - print '\nstageId floor numRooms' + print('\nstageId floor numRooms') printNumRooms() # print out # of non-skippable battles in each stage floor - print '\nstageId floor numForcedBattles' + print('\nstageId floor numForcedBattles') printNumBattles() # print out info on all stage levels for Lawbot def iterateLawbotStages(func): # func takes StageLayout from toontown.toonbase import ToontownGlobals - for layoutId in xrange(len(stageLayouts)): - for floorNum in xrange(getNumFloors(layoutId)): + for layoutId in range(len(stageLayouts)): + for floorNum in range(getNumFloors(layoutId)): func(StageLayout(0, floorNum, layoutId)) def printStageInfo(): - def func(sl): print sl + def func(sl): print(sl) iterateLawbotStages(func) def printRoomUsage(): usage = {} @@ -42,29 +42,29 @@ def func(sl): usage.setdefault(roomId, 0) usage[roomId] += 1 iterateLawbotStages(func) - roomIds = usage.keys() + roomIds = list(usage.keys()) roomIds.sort() for roomId in roomIds: - print '%s: %s' % (roomId, usage[roomId]) + print('%s: %s' % (roomId, usage[roomId])) def printRoomInfo(): - roomIds = StageRoomSpecs.roomId2numCogs.keys() + roomIds = list(StageRoomSpecs.roomId2numCogs.keys()) roomIds.sort() for roomId in roomIds: - print 'room %s: %s cogs, %s cogLevels, %s merit cogLevels' % ( + print('room %s: %s cogs, %s cogLevels, %s merit cogLevels' % ( roomId, StageRoomSpecs.roomId2numCogs[roomId], StageRoomSpecs.roomId2numCogLevels[roomId], - StageRoomSpecs.roomId2numMeritCogLevels[roomId]) + StageRoomSpecs.roomId2numMeritCogLevels[roomId])) def printStageRoomIds(): - def func(ml): print ml.getStageId(), ml.getFloorNum(), ml.getRoomIds() + def func(ml): print(ml.getStageId(), ml.getFloorNum(), ml.getRoomIds()) iterateCashbotStages(func) def printStageRoomNames(): - def func(ml): print ml.getStageId(), ml.getFloorNum(), ml.getRoomNames() + def func(ml): print(ml.getStageId(), ml.getFloorNum(), ml.getRoomNames()) iterateCashbotStages(func) def printNumRooms(): - def func(ml): print ml.getStageId(), ml.getFloorNum(), ml.getNumRooms() + def func(ml): print(ml.getStageId(), ml.getFloorNum(), ml.getNumRooms()) iterateCashbotStages(func) def printNumBattles(): - def func(ml): print ml.getStageId(), ml.getFloorNum(), ml.getNumBattles() + def func(ml): print(ml.getStageId(), ml.getFloorNum(), ml.getNumBattles()) iterateCashbotStages(func) @@ -302,7 +302,7 @@ def __init__(self, stageId, floorNum, stageLayout = 0): # pick the hallways hallwayRng = self.getRng() connectorRoomNames = StageRoomSpecs.CashbotStageConnectorRooms - for i in xrange(self.numHallways): + for i in range(self.numHallways): self.hallways.append(hallwayRng.choice(connectorRoomNames)) #import pdb; pdb.set_trace() diff --git a/toontown/src/coghq/StageManagerAI.py b/toontown/src/coghq/StageManagerAI.py index 488981e9..339ecd62 100644 --- a/toontown/src/coghq/StageManagerAI.py +++ b/toontown/src/coghq/StageManagerAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedStageAI +from . import DistributedStageAI from toontown.toonbase import ToontownGlobals from toontown.coghq import StageLayout from direct.showbase import DirectObject @@ -43,7 +43,7 @@ def createStage(self, stageId, players): for avId in players: if bboard.has('stageRoom-%s' % avId): roomId = bboard.get('stageRoom-%s' % avId) - for i in xrange(numFloors): + for i in range(numFloors): layout = StageLayout.StageLayout(stageId, i) if roomId in layout.getRoomIds(): floor = i diff --git a/toontown/src/coghq/StageRoomBase.py b/toontown/src/coghq/StageRoomBase.py index 80adbf58..b9329c70 100644 --- a/toontown/src/coghq/StageRoomBase.py +++ b/toontown/src/coghq/StageRoomBase.py @@ -25,7 +25,7 @@ def getStageEntityTypeReg(self): # return an EntityTypeRegistry with information about the # entity types that stages use # Use the same types as factories - import FactoryEntityTypes + from . import FactoryEntityTypes from otp.level import EntityTypeRegistry typeReg = EntityTypeRegistry.EntityTypeRegistry(FactoryEntityTypes) return typeReg diff --git a/toontown/src/coghq/StageRoomSpecs.py b/toontown/src/coghq/StageRoomSpecs.py index f7fe3eba..dca477c4 100644 --- a/toontown/src/coghq/StageRoomSpecs.py +++ b/toontown/src/coghq/StageRoomSpecs.py @@ -62,8 +62,8 @@ def getNumBattles(roomId): # dict of roomId to spec Python module CashbotStageSpecModules = {} -for roomName, roomId in CashbotStageRoomName2RoomId.items(): - exec 'from toontown.coghq import %s' % roomName +for roomName, roomId in list(CashbotStageRoomName2RoomId.items()): + exec('from toontown.coghq import %s' % roomName) CashbotStageSpecModules[roomId] = eval(roomName) ## until cogs are entities... @@ -79,7 +79,7 @@ def getNumBattles(roomId): } roomId2numBattles = {} -for roomName, roomId in CashbotStageRoomName2RoomId.items(): +for roomName, roomId in list(CashbotStageRoomName2RoomId.items()): if roomName not in CogSpecModules: roomId2numBattles[roomId] = 0 else: @@ -87,7 +87,7 @@ def getNumBattles(roomId): roomId2numBattles[roomId] = len(cogSpecModule.BattleCells) roomId2numCogs = {} -for roomName, roomId in CashbotStageRoomName2RoomId.items(): +for roomName, roomId in list(CashbotStageRoomName2RoomId.items()): if roomName not in CogSpecModules: roomId2numCogs[roomId] = 0 else: @@ -95,7 +95,7 @@ def getNumBattles(roomId): roomId2numCogs[roomId] = len(cogSpecModule.CogData) roomId2numCogLevels = {} -for roomName, roomId in CashbotStageRoomName2RoomId.items(): +for roomName, roomId in list(CashbotStageRoomName2RoomId.items()): if roomName not in CogSpecModules: roomId2numCogLevels[roomId] = 0 else: @@ -106,7 +106,7 @@ def getNumBattles(roomId): roomId2numCogLevels[roomId] = levels roomId2numMeritCogLevels = {} -for roomName, roomId in CashbotStageRoomName2RoomId.items(): +for roomName, roomId in list(CashbotStageRoomName2RoomId.items()): if roomName not in CogSpecModules or roomId in (8, 10): # HACK 8,10! roomId2numMeritCogLevels[roomId] = 0 else: diff --git a/toontown/src/coghq/Stomper.py b/toontown/src/coghq/Stomper.py index f579b1ff..463f3821 100644 --- a/toontown/src/coghq/Stomper.py +++ b/toontown/src/coghq/Stomper.py @@ -1,5 +1,3 @@ -"""Stomper module: contains the Stomper class""" - from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * @@ -8,128 +6,77 @@ import math class Stomper(StateData.StateData, NodePath): + __module__ = __name__ SerialNum = 0 - MotionLinear = 0 MotionSinus = 1 MotionHalfSinus = 2 - DefaultStompSound = 'phase_5/audio/sfx/AA_drop_safe.mp3' - def __init__(self, - model, - range=5., # range of motion in feet along Z-axis - period=1., # duration of full cycle - phaseShift=0., # 0..1 phase shift - zOffset=0., # how close the stomper should get to Z=0 - motionType=None, - shadow=None, - sound=None, - soundLen=None, - ): + def __init__(self, model, range=5.0, period=1.0, phaseShift=0.0, zOffset=0.0, motionType=None, shadow=None, sound=None, soundLen=None): StateData.StateData.__init__(self, 'StomperDone') - self.SerialNum = Stomper.SerialNum Stomper.SerialNum += 1 - - # get the stomp sound self.sound = sound self.soundLen = soundLen if self.sound is not None: self.sound = base.loadSfx(sound) - self.motionType = motionType if self.motionType is None: self.motionType = Stomper.MotionSinus - node = hidden.attachNewNode('Stomper%s' % self.SerialNum) NodePath.__init__(self, node) - self.model = model.copyTo(self) - self.shadow = shadow if shadow is not None: self.shadow = shadow.copyTo(self) - self.shadow.setPos(0,0,.2) - + self.shadow.setPos(0, 0, 0.2) self.TaskName = 'Stomper%sTask' % self.SerialNum - self.range = range self.zOffset = zOffset self.period = period self.phaseShift = phaseShift + return def destroy(self): self.removeNode() def enter(self, startTime): - # stomper should hit at t=0 if self.motionType is Stomper.MotionLinear: - motionIval = Sequence( - LerpPosInterval(self.model, self.period/2., - Point3(0,0,self.zOffset+self.range), - startPos=Point3(0,0,self.zOffset)), - WaitInterval(self.period/4.), - LerpPosInterval(self.model, self.period/4., - Point3(0,0,self.zOffset), - startPos=Point3(0,0,self.zOffset+self.range)), - ) + motionIval = Sequence(LerpPosInterval(self.model, self.period / 2.0, Point3(0, 0, self.zOffset + self.range), startPos=Point3(0, 0, self.zOffset)), WaitInterval(self.period / 4.0), LerpPosInterval(self.model, self.period / 4.0, Point3(0, 0, self.zOffset), startPos=Point3(0, 0, self.zOffset + self.range))) elif self.motionType is Stomper.MotionSinus: + def sinusFunc(t, self=self): - # t: 0..1 - # cos(pi) == -1 (hit/down) - # theta: pi..3*pi - theta = math.pi + (t * 2.*math.pi) - # c: -1..1 + theta = math.pi + t * 2.0 * math.pi c = math.cos(theta) - # z: 0..self.range - self.model.setZ(self.zOffset + - ((.5 + (c*.5)) * self.range)) - motionIval = Sequence( - LerpFunctionInterval(sinusFunc, duration=self.period), - ) + self.model.setZ(self.zOffset + (0.5 + c * 0.5) * self.range) + + motionIval = Sequence(LerpFunctionInterval(sinusFunc, duration=self.period)) elif self.motionType is Stomper.MotionHalfSinus: + def halfSinusFunc(t, self=self): - # t: 0..1 - self.model.setZ(self.zOffset + - (math.sin(t * math.pi) * self.range)) - motionIval = Sequence( - LerpFunctionInterval(halfSinusFunc, duration=self.period), - ) - # put the motion interval into a Parallel so that we can easily add - # concurrent ivals on (like sound, etc) - self.ival = Parallel( - motionIval, - name='Stomper%s' % self.SerialNum, - ) + self.model.setZ(self.zOffset + math.sin(t * math.pi) * self.range) - # 'stomp' sound + motionIval = Sequence(LerpFunctionInterval(halfSinusFunc, duration=self.period)) + self.ival = Parallel(motionIval, name='Stomper%s' % self.SerialNum) if self.sound is not None: - # make sure we don't play a sound that's too long; cap the - # sound length to the motion period if self.soundLen is None: sndDur = motionIval.getDuration() else: sndDur = min(self.soundLen, motionIval.getDuration()) - self.ival.append( - SoundInterval(self.sound, duration=sndDur, node=self)) - - # shadow + self.ival.append(SoundInterval(self.sound, duration=sndDur, node=self)) if self.shadow is not None: + def adjustShadowScale(t, self=self): - # scale the shadow according to the position of the - # stomper modelZ = self.model.getZ() - # a=0..1, 0=down, 1=up - a = modelZ/self.range - self.shadow.setScale(lerp(.7, 1., (1.-a))) - self.ival.append( - LerpFunctionInterval(adjustShadowScale, duration=self.period)) + a = modelZ / self.range + self.shadow.setScale(lerp(0.7, 1.0, 1.0 - a)) + self.ival.append(LerpFunctionInterval(adjustShadowScale, duration=self.period)) self.ival.loop() - self.ival.setT((globalClock.getFrameTime() - startTime) + - (self.period * self.phaseShift)) - + self.ival.setT(globalClock.getFrameTime() - startTime + self.period * self.phaseShift) + return + def exit(self): self.ival.finish() - del self.ival + del self.ival \ No newline at end of file diff --git a/toontown/src/coghq/StomperGlobals.py b/toontown/src/coghq/StomperGlobals.py index 869b590c..95b8149d 100644 --- a/toontown/src/coghq/StomperGlobals.py +++ b/toontown/src/coghq/StomperGlobals.py @@ -1,17 +1,12 @@ - -# setMovie flags STOMPER_START = 0 STOMPER_PAUSE = 1 STOMPER_RESUME = 2 STOMPER_RESET = 3 STOMPER_STOMP = 4 STOMPER_RISE = 5 - -# motion types MotionLinear = 0 MotionSinus = 1 MotionHalfSinus = 2 -MotionSlowFast= 3 +MotionSlowFast = 3 MotionCrush = 4 -MotionSwitched = 5 - +MotionSwitched = 5 \ No newline at end of file diff --git a/toontown/src/distributed/DelayDeletable.py b/toontown/src/distributed/DelayDeletable.py index 6911a10b..ddfde586 100644 --- a/toontown/src/distributed/DelayDeletable.py +++ b/toontown/src/distributed/DelayDeletable.py @@ -24,7 +24,7 @@ def acquireDelayDelete(self, name): if self.getDelayDeleteCount() == 0: self.cr._addDelayDeletedDO(self) - token = DelayDeletable.DelayDeleteSerialGen.next() + token = next(DelayDeletable.DelayDeleteSerialGen) self._token2delayDeleteName[token] = name assert self.notify.debug( @@ -46,7 +46,7 @@ def releaseDelayDelete(self, token): self.disableAnnounceAndDelete() def getDelayDeleteNames(self): - return self._token2delayDeleteName.values() + return list(self._token2delayDeleteName.values()) def forceAllowDelayDelete(self): # Toontown has code that creates a DistributedObject manually and then diff --git a/toontown/src/distributed/DistributedNodeAI.py b/toontown/src/distributed/DistributedNodeAI.py new file mode 100644 index 00000000..f10845f0 --- /dev/null +++ b/toontown/src/distributed/DistributedNodeAI.py @@ -0,0 +1,55 @@ +from direct.distributed.DistributedObjectAI import DistributedObjectAI +from panda3d.core import NodePath + + +class DistributedNodeAI(DistributedObjectAI, NodePath): + def __init__(self, air, name=None): + if name is None: + name = self.__class__.__name__ + NodePath.__init__(self, name) + DistributedObjectAI.__init__(self, air) + self._zoneData = None + + @staticmethod + def staticGetZoneChangeEvent(doId): + return 'DOChangeZone-%s' % doId + + def setPosHpr(self, x, y, z, h, p, r): + self.setPos(x, y, z) + self.setHpr(h, p, r) + + def b_setPosHpr(self, x, y, z, h, p, r): + self.setPosHpr(x, y, z, h, p, r) + self.d_setPosHpr(x, y, z, h, p, r) + + def d_setPosHpr(self, x, y, z, h, p, r): + self.sendUpdate('setPosHpr', [x, y, z, h, p, r]) + + def d_setPos(self, x, y, z): + self.sendUpdate('setPos', [x, y, z]) + + def b_setParent(self, parentToken): + self.setParent(parentToken) + self.d_setParent(parentToken) + + def setParent(self, parentToken): + self.do_setParent(parentToken) + + def d_setParent(self, parentToken): + self.sendUpdate('setParent', [parentToken]) + + def do_setParent(self, parentToken): + self.getZoneData().getParentMgr().requestReparent(self, parentToken) + + def getZoneData(self): + # Call this to get an AIZoneData object for the current zone. + # This class will hold onto it as self._zoneData + # setLocation destroys self._zoneData if we move away to + # a different zone + if self._zoneData is None: + from toontown.ai.AIZoneData import AIZoneData + self._zoneData = AIZoneData(self.air, self.parentId, self.zoneId) + return self._zoneData + + def getCollTrav(self, *args, **kArgs): + return self.getZoneData().getCollTrav(*args, **kArgs) diff --git a/toontown/src/distributed/DistributedSmoothNodeAI.py b/toontown/src/distributed/DistributedSmoothNodeAI.py new file mode 100644 index 00000000..a83d5459 --- /dev/null +++ b/toontown/src/distributed/DistributedSmoothNodeAI.py @@ -0,0 +1,284 @@ +from .DistributedNodeAI import DistributedNodeAI + +from direct.showbase.PythonUtil import randFloat +from direct.distributed.ClockDelta import globalClockDelta + + +class BroadcastTypes: + FULL = 0 + XYH = 1 + XY = 2 + + +def onlyChanged(flags, compare): + return (flags & compare) != 0 and (flags & ~compare) == 0 + + +def isThresholdEqual(value1, value2, threshold): + return -threshold < (value1 - value2) < threshold + + +SmoothNodeEpsilon = 0.01 + + +FLAG_NEW_X = 1 +FLAG_NEW_Y = 1 << 1 +FLAG_NEW_Z = 1 << 2 +FLAG_NEW_H = 1 << 3 +FLAG_NEW_P = 1 << 4 +FLAG_NEW_R = 1 << 5 + + +class DistributedSmoothNodeAI(DistributedNodeAI): + def __init__(self, air, name=None): + DistributedNodeAI.__init__(self, air, name) + self.broadcastTime = 0.2 + self.broadcastType = BroadcastTypes.FULL + self.broadcastFunc = self.broadcastFull + + self.recentSentLocation = 0 + self.recentSetLocation = 0 + + self._storedPosHpr = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + self._storeStop = False + self.__broadcastPeriod = None + + def getPosHprBroadcastTaskName(self): + return self.uniqueName('sendPosHpr') + + def getPosHpr(self): + return list(self.getPos()) + list(self.getHpr()) + + def b_clearSmoothing(self): + self.d_clearSmoothing() + self.clearSmoothing() + + def d_clearSmoothing(self): + self.sendUpdate('clearSmoothing', [0]) + + def clearSmoothing(self, bogus = None): + pass + + def startPosHprBroadcast(self, stagger=0): + # Set stagger to non-zero to randomly delay the initial task execution + # over 'period' seconds, to spread out task processing over time + # when a large number of SmoothNodes are created simultaneously. + taskName = self.getPosHprBroadcastTaskName() + # Broadcast our initial position + self.b_clearSmoothing() + self.sendEverything() + self.setPosHprBroadcastPeriod(self.broadcastTime) + + taskMgr.remove(taskName) + + if self.broadcastType == BroadcastTypes.FULL: + self.broadcastFunc = self.broadcastFull + elif self.broadcastType == BroadcastTypes.XYH: + self.broadcastFunc = self.broadcastXYH + else: + self.broadcastFunc = self.broadcastXY + + delay = 0.0 + if stagger: + delay = randFloat(self.broadcastTime) + if self.wantSmoothPosBroadcastTask(): + taskMgr.doMethodLater(self.__broadcastPeriod + delay, + self._posHprBroadcast, taskName) + + def setPosHprBroadcastPeriod(self, period): + # call this at any time to change the delay between broadcasts + self.__broadcastPeriod = period + + def getPosHprBroadcastPeriod(self): + # query the current delay between broadcasts + return self.__broadcastPeriod + + def wantSmoothPosBroadcastTask(self): + return True + + def stopPosHprBroadcast(self): + taskMgr.remove(self.getPosHprBroadcastTaskName()) + + def _posHprBroadcast(self, task): + self.broadcastFunc() + task.setDelay(self.__broadcastPeriod) + return task.again + + def delete(self): + self.stopPosHprBroadcast() + DistributedNodeAI.delete(self) + + def sendEverything(self): + self.sendUpdate('setSmPosHpr', self._storedPosHpr + [globalClockDelta.getRealNetworkTime(bits=16)]) + + def broadcastFull(self): + posHpr = self.getPosHpr() + + flags = 0 + + for i in range(6): + if not isThresholdEqual(self._storedPosHpr[i], posHpr[i], SmoothNodeEpsilon): + self._storedPosHpr[i] = posHpr[i] + flags |= 1 << i + + ts = globalClockDelta.getRealNetworkTime(bits=16) + + # if self.recentSentLocation != self.recentSetLocation: + # # location (zoneId) has changed, send out all info copy over 'set' + # # location over to 'sent' location + # self.recentSentLocation = self.recentSetLocation + # self._storeStop = False + # + # args = self._storedPosHpr + [self.recentSetLocation, ts] + # self.sendUpdate('setSmPosHprL', args) + if flags == 0: + # No change. Send one and only one "stop" message. + if not self._storeStop: + self._storeStop = True + self.sendUpdate('setSmStop', [ts]) + else: + self._storeStop = False + if onlyChanged(flags, FLAG_NEW_H): + self.sendUpdate('setSmH', [self._storedPosHpr[3], ts]) + elif onlyChanged(flags, FLAG_NEW_Z): + self.sendUpdate('setSmZ', [self._storedPosHpr[2], ts]) + elif onlyChanged(flags, FLAG_NEW_X | FLAG_NEW_Z): + self.sendUpdate('setSmXZ', [self._storedPosHpr[0], self._storedPosHpr[2], ts]) + elif onlyChanged(flags, FLAG_NEW_X | FLAG_NEW_Y | FLAG_NEW_Z): + self.sendUpdate('setSmPos', self._storedPosHpr[:3] + [ts]) + elif onlyChanged(flags, FLAG_NEW_H | FLAG_NEW_P | FLAG_NEW_R): + self.sendUpdate('setSmHpr', self._storedPosHpr[3:] + [ts]) + elif onlyChanged(flags, FLAG_NEW_X | FLAG_NEW_Y | FLAG_NEW_H): + self.sendUpdate('setSmXYH', [self._storedPosHpr[0], self._storedPosHpr[1], self._storedPosHpr[3], ts]) + elif onlyChanged(flags, FLAG_NEW_X | FLAG_NEW_Y | FLAG_NEW_Z | FLAG_NEW_H): + self.sendUpdate('setSmXYZH', self._storedPosHpr[:4] + [ts]) + else: + self.sendUpdate('setSmPosHpr', self._storedPosHpr + [ts]) + + def broadcastXYH(self): + posHpr = self.getPosHpr() + flags = 0 + + if not isThresholdEqual(self._storedPosHpr[0], posHpr[0], SmoothNodeEpsilon): + self._storedPosHpr[0] = posHpr[0] + flags |= FLAG_NEW_X + + if not isThresholdEqual(self._storedPosHpr[1], posHpr[1], SmoothNodeEpsilon): + self._storedPosHpr[1] = posHpr[1] + flags |= FLAG_NEW_Y + + if not isThresholdEqual(self._storedPosHpr[3], posHpr[3], SmoothNodeEpsilon): + self._storedPosHpr[3] = posHpr[3] + flags |= FLAG_NEW_H + + ts = globalClockDelta.getRealNetworkTime(bits=16) + + if flags == 0: + # No change. Send one and only one "stop" message. + if not self._storeStop: + self._storeStop = True + self.sendUpdate('setSmStop', [ts]) + else: + self._storeStop = False + if onlyChanged(flags, FLAG_NEW_H): + self.sendUpdate('setSmH', [self._storedPosHpr[3], ts]) + elif onlyChanged(flags, FLAG_NEW_X | FLAG_NEW_Y): + self.sendUpdate('setSmXY', self._storedPosHpr[:2] + [ts]) + else: + self.sendUpdate('setSmXYH', [self._storedPosHpr[0], self._storedPosHpr[1], self._storedPosHpr[3], ts]) + + def broadcastXY(self): + posHpr = self.getPosHpr() + flags = 0 + + if not isThresholdEqual(self._storedPosHpr[0], posHpr[0], SmoothNodeEpsilon): + self._storedPosHpr[0] = posHpr[0] + flags |= FLAG_NEW_X + + if not isThresholdEqual(self._storedPosHpr[1], posHpr[1], SmoothNodeEpsilon): + self._storedPosHpr[1] = posHpr[1] + flags |= FLAG_NEW_Y + + ts = globalClockDelta.getRealNetworkTime(bits=16) + + if flags == 0: + # No change. Send one and only one "stop" message. + if not self._storeStop: + self._storeStop = True + self.sendUpdate('setSmStop', [ts]) + else: + self._storeStop = False + self.sendUpdate('setSmXY', self._storedPosHpr[:2] + [ts]) + + def setSmStop(self, t=None): + pass + + # These have their FFI functions exposed for efficiency + def setSmH(self, h, t=None): + self.setH(h) + + def setSmZ(self, z, t=None): + self.setZ(z) + + def setSmXY(self, x, y, t=None): + self.setX(x) + self.setY(y) + + def setSmXZ(self, x, z, t=None): + self.setX(x) + self.setZ(z) + + def setSmPos(self, x, y, z, t=None): + self.setPos(x, y, z) + + def setSmHpr(self, h, p, r, t=None): + self.setHpr(h, p, r) + + def setSmXYH(self, x, y, h, t=None): + self.setX(x) + self.setY(y) + self.setH(h) + + def setSmXYZH(self, x, y, z, h, t=None): + self.setPos(x, y, z) + self.setH(h) + + def setSmPosHpr(self, x, y, z, h, p, r, t=None): + self.setPosHpr(x, y, z, h, p, r) + + # Do we use these on the AIx? + def setComponentX(self, x): + self.setX(x) + + def setComponentY(self, y): + self.setY(y) + + def setComponentZ(self, z): + self.setZ(z) + + def setComponentH(self, h): + self.setH(h) + + def setComponentP(self, p): + self.setP(p) + + def setComponentR(self, r): + self.setR(r) + + def getComponentX(self): + return self.getX() + + def getComponentY(self): + return self.getY() + + def getComponentZ(self): + return self.getZ() + + def getComponentH(self): + return self.getH() + + def getComponentP(self): + return self.getP() + + def getComponentR(self): + return self.getR() diff --git a/toontown/src/distributed/DistributedTester.py b/toontown/src/distributed/DistributedTester.py index 70a1e697..3b84a866 100644 --- a/toontown/src/distributed/DistributedTester.py +++ b/toontown/src/distributed/DistributedTester.py @@ -21,29 +21,29 @@ def setMovie(self, active, toons, suits, """ def __init__(self, cr): - print "DistributedTester: __init__" + print("DistributedTester: __init__") DistributedObject.DistributedObject.__init__(self, cr) def disable(self): - print "DistributedTester: disable" + print("DistributedTester: disable") DistributedObject.DistributedObject.disable(self) def generate(self): - print "DistributedTester: generate" + print("DistributedTester: generate") DistributedObject.DistributedObject.generate(self) def generateInit(self): - print "DistributedTester: generateInit" + print("DistributedTester: generateInit") DistributedObject.DistributedObject.generateInit(self) def delete(self): - print "DistributedTester: delete" + print("DistributedTester: delete") DistributedObject.DistributedObject.delete(self) def setMovie(self, *args): - print "DistributedTester setMovie: doId: ", self.doId + print("DistributedTester setMovie: doId: ", self.doId) def setState(self, *args): - print "DistributedTester setState: doId: ", self.doId + print("DistributedTester setState: doId: ", self.doId) diff --git a/toontown/src/distributed/DistributedTesterAI.py b/toontown/src/distributed/DistributedTesterAI.py index ca35f985..db0d1f10 100644 --- a/toontown/src/distributed/DistributedTesterAI.py +++ b/toontown/src/distributed/DistributedTesterAI.py @@ -122,21 +122,21 @@ def getState(self): def getMovie(self): msg = self.getMsg() - print "get movie", msg + print("get movie", msg) return msg def badMovie(self): return [-126, [955899898, 509065983, 960926492, 81065606], [680133635, 605541213, 292096447, 796580728], -26, -108, 62, 923747760, [-25682, -29341, -7593, 30016], -12694, 5591, [22660, -16418, -5502, 2241], -26, -101, 13, 52, 645424651, [-7770, -5732, 9321, -15618], 14005, 11185, [17463, -13305, -17446, 3621], 32, 13, 100, 35, 988348921, [-32722, -9363, -18511, 29851], 29093, 6620, [17046, -29729, -26187, -31586], 42, -10, -49, -2, 487248998, [29940, 6573, -30864, 2953], -8914, -9981, [-952, -20232, 16826, -834], 123, -45, -90, 12, [-28659, 27866, -24647, 23687], -29, 96, 0, 50, -127, -104, [31348, 30517, 24694, 24052], 64, -104, 18, -46, 42, 17, [5558, -896, -30330, -18004], 118, -121, -11, -122, 51, 6, [23869, 14629, -3689, 5496], 19, -122, -106] def d_setMovie(self): - print "about to send setMovie" + print("about to send setMovie") msg = self.getMovie() # msg = self.badMovie() - print "movie message: ", msg + print("movie message: ", msg) self.sendUpdate('setMovie', msg) stime = globalClock.getRealTime() + 2.0 self.sendUpdate('setState', ['PlayMovie', globalClockDelta.localToNetworkTime(stime)]) - print "sent setMovie" + print("sent setMovie") def sendMovieLoop(self, task): self.d_setMovie() diff --git a/toontown/src/distributed/DistributedTimer.py b/toontown/src/distributed/DistributedTimer.py index c9dbc548..932b46f3 100644 --- a/toontown/src/distributed/DistributedTimer.py +++ b/toontown/src/distributed/DistributedTimer.py @@ -22,7 +22,7 @@ def delete(self): def setStartTime(self, time): self.startTime = time - print ("TIMER startTime %s" % (time)) + print(("TIMER startTime %s" % (time))) def getStartTime(self): return self.startTime diff --git a/toontown/src/distributed/HoodMgr.py b/toontown/src/distributed/HoodMgr.py index 909fd4ad..23f15975 100644 --- a/toontown/src/distributed/HoodMgr.py +++ b/toontown/src/distributed/HoodMgr.py @@ -277,7 +277,7 @@ def getZonesInPhase(self, phase): assert(self.notify.debug("getZonesInPhase()")) # return the zone id's available in given phase p = [] - for i in ToontownGlobals.phaseMap.items(): + for i in list(ToontownGlobals.phaseMap.items()): if (i[1] == phase): p.append(i[0]) return p @@ -286,7 +286,7 @@ def getPhaseFromHood(self, hoodId): hoodId = ZoneUtil.getCanonicalHoodId(hoodId) assert(self.notify.debug("getPhaseFromHood()")) # return the phase that the specified zone is in - assert(ToontownGlobals.phaseMap.has_key(hoodId)) + assert(hoodId in ToontownGlobals.phaseMap) return ToontownGlobals.phaseMap[hoodId] # TODO: put these points in the dna diff --git a/toontown/src/distributed/NonRepeatableRandomSourceAI.py b/toontown/src/distributed/NonRepeatableRandomSourceAI.py index 21ca7d8b..e436a8f6 100644 --- a/toontown/src/distributed/NonRepeatableRandomSourceAI.py +++ b/toontown/src/distributed/NonRepeatableRandomSourceAI.py @@ -12,7 +12,7 @@ def __init__(self, air): def announceGenerate(self): DistributedObjectAI.announceGenerate(self) - self._contextGen = SerialMaskedGen((1L<<32)-1) + self._contextGen = SerialMaskedGen((1<<32)-1) self._requests = {} # in case the UD goes down before ack-ing, send a sample every few minutes self._sampleTask = self.doMethodLater(3 * 60, self._sampleRandomTask, self.uniqueName('sampleRandom')) @@ -33,7 +33,7 @@ def _sampleRandom(self): self.air.sendUpdateToDoId('NonRepeatableRandomSource', 'randomSample', OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE, - [self.doId, int(random.randrange(1L << 32))] + [self.doId, int(random.randrange(1 << 32))] ) def randomSampleAck(self): @@ -47,7 +47,7 @@ def getRandomSamples(self, callback, num=None): """ if num is None: num = 1 - context = self._contextGen.next() + context = next(self._contextGen) self._requests[context] = (callback, ) self.air.sendUpdateToDoId('NonRepeatableRandomSource', 'getRandomSamples', @@ -61,7 +61,7 @@ def getRandomSamplesReply(self, context, samples): if __debug__: def printSamples(self, samples): - print samples + print(samples) def testRandom(self): self.getRandomSamples(self.printSamples, 100) diff --git a/toontown/src/distributed/NonRepeatableRandomSourceUD.py b/toontown/src/distributed/NonRepeatableRandomSourceUD.py index d33df602..a6d649ca 100644 --- a/toontown/src/distributed/NonRepeatableRandomSourceUD.py +++ b/toontown/src/distributed/NonRepeatableRandomSourceUD.py @@ -61,7 +61,7 @@ def _processRequests(self): if self._fakeIt: # if we're in fake-it mode, just generate random numbers locally # (and repeatably) - for i in xrange(numRandoms): + for i in range(numRandoms): request.randoms.append(random.random() * 0xffffffff) else: request.randoms += self._randoms[:numRandoms] diff --git a/toontown/src/distributed/ParentMgr.py b/toontown/src/distributed/ParentMgr.py new file mode 100644 index 00000000..a6ecd9cc --- /dev/null +++ b/toontown/src/distributed/ParentMgr.py @@ -0,0 +1,138 @@ +"""ParentMgr module: contains the ParentMgr class""" + +from direct.directnotify import DirectNotifyGlobal + +class ParentMgr: + # This is now used on the AI as well. + """ParentMgr holds a table of nodes that avatars may be parented to + in a distributed manner. All clients within a particular zone maintain + identical tables of these nodes, and the nodes are referenced by 'tokens' + which the clients can pass to each other to communicate distributed + reparenting information. + + The functionality of ParentMgr used to be implemented with a simple + token->node dictionary. As distributed 'parent' objects were manifested, + they would add themselves to the dictionary. Problems occured when + distributed avatars were manifested before the objects to which they + were parented to. + + Since the order of object manifestation depends on the order of the + classes in the DC file, we could maintain an ordering of DC definitions + that ensures that the necessary objects are manifested before avatars. + However, it's easy enough to keep a list of pending reparents and thus + support the general case without requiring any strict ordering in the DC. + """ + + notify = DirectNotifyGlobal.directNotify.newCategory('ParentMgr') + + def __init__(self): + self.token2nodepath = {} + # these are nodepaths that have requested to be parented to + # a node that has not yet registered as a parent + self.pendingParentToken2children = {} + # Multiple reparent requests may come in for a given child + # before that child can successfully be reparented. We need to + # make sure that each child is only scheduled to be parented to + # a single parent, at most. + # For efficient removal of pending children, we keep a dict + # of pending children to the token of the parent they're waiting for + self.pendingChild2parentToken = {} + + def destroy(self): + del self.token2nodepath + del self.pendingParentToken2children + del self.pendingChild2parentToken + + def privRemoveReparentRequest(self, child): + """ this internal function removes any currently-pending reparent + request for the given child nodepath """ + if child in self.pendingChild2parentToken: + self.notify.debug("cancelling pending reparent of %s to '%s'" % + (repr(child), + self.pendingChild2parentToken[child])) + parentToken = self.pendingChild2parentToken[child] + del self.pendingChild2parentToken[child] + self.pendingParentToken2children[parentToken].remove(child) + + def requestReparent(self, child, parentToken): + if parentToken in self.token2nodepath: + # this parent has registered + # this child may already be waiting on a different parent; + # make sure they aren't any more + self.privRemoveReparentRequest(child) + self.notify.debug("performing wrtReparent of %s to '%s'" % + (repr(child), parentToken)) + child.wrtReparentTo(self.token2nodepath[parentToken]) + else: + self.notify.warning( + "child %s requested reparent to parent '%s' that is not (yet) registered" % + (repr(child), parentToken)) + # cancel any pending reparent on behalf of this child + self.privRemoveReparentRequest(child) + # make note of this pending parent request + self.pendingChild2parentToken[child] = parentToken + self.pendingParentToken2children.setdefault(parentToken, []) + self.pendingParentToken2children[parentToken].append(child) + # there is no longer any valid place for the child in the + # scenegraph; put it under hidden + child.reparentTo(hidden) + + def registerParent(self, token, parent): + if token in self.token2nodepath: + self.notify.error( + "registerParent: token '%s' already registered, referencing %s" % + (token, repr(self.token2nodepath[token]))) + + self.notify.debug("registering %s as '%s'" % (repr(parent), token)) + self.token2nodepath[token] = parent + + # if we have any pending children, add them + if token in self.pendingParentToken2children: + children = self.pendingParentToken2children[token] + del self.pendingParentToken2children[token] + for child in children: + # NOTE: We do a plain-old reparentTo here (non-wrt) + # under the assumption that the node has been + # positioned as if it is already under the new parent. + # + # The only case that I can think of where the parent + # node would not have been registered at the time of + # the reparent request is when we're entering a new + # zone and manifesting remote toons along with + # other distributed objects, and a remote toon is + # requesting to be parented to geometry owned by a + # distributed object that has not yet been manifested. + # + # (The situation in the factory is a little different; + # the distributed toons of your companions are never + # disabled, since the toons are in the factory's uberzone. + # They send out requests to be parented to nodes that + # may be distributed objects, which may not be generated + # on your client) + # + # It is therefore important for that remote toon to + # have his position set as a required field, relative + # to the parent node, after the reparent request. + # If the node has already been registered, the toon will + # be in the correct position. Otherwise, the toon will + # have the correct position but the wrong parent node, + # until this code runs and corrects the toon's parent + # node. Since we don't start rendering until all objects + # in a new zone have been generated, all of that action + # will happen in a single frame, and the net result will + # be that the toon will be in the right place when + # rendering starts. + self.notify.debug("performing reparent of %s to '%s'" % + (repr(child), token)) + child.reparentTo(self.token2nodepath[token]) + # remove this child from the child->parent table + assert (self.pendingChild2parentToken[child] == token) + del self.pendingChild2parentToken[child] + + def unregisterParent(self, token): + if not token in self.token2nodepath: + self.notify.warning("unregisterParent: unknown parent token '%s'" % + token) + return + self.notify.debug("unregistering parent '%s'" % (token)) + del self.token2nodepath[token] diff --git a/toontown/src/distributed/PlayGame.py b/toontown/src/distributed/PlayGame.py index 77d5ff1f..38b7f8a9 100644 --- a/toontown/src/distributed/PlayGame.py +++ b/toontown/src/distributed/PlayGame.py @@ -9,7 +9,7 @@ from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task.Task import Task -from ToontownMsgTypes import * +from .ToontownMsgTypes import * from toontown.toonbase import ToontownGlobals from toontown.hood import TTHood from toontown.hood import DDHood diff --git a/toontown/src/distributed/ToontownClientRepository.py b/toontown/src/distributed/ToontownClientRepository.py index a5669173..2d13bbd0 100644 --- a/toontown/src/distributed/ToontownClientRepository.py +++ b/toontown/src/distributed/ToontownClientRepository.py @@ -61,9 +61,9 @@ from toontown.makeatoon import TTPickANamePattern from toontown.parties import ToontownTimeManager from toontown.toon import Toon, DistributedToon -from ToontownMsgTypes import * -import HoodMgr -import PlayGame +from .ToontownMsgTypes import * +from . import HoodMgr +from . import PlayGame from toontown.toontowngui import ToontownLoadingBlocker @@ -255,15 +255,15 @@ def __init__(self, serverVersion, launcher=None): for torso in ToonDNA.toonTorsoTypes: for legs in ToonDNA.toonLegTypes: for gender in ('m', 'f'): - print 'species: %s, head: %s, torso: %s, legs: %s, gender: %s' % ( - species, head, torso, legs, gender) + print('species: %s, head: %s, torso: %s, legs: %s, gender: %s' % ( + species, head, torso, legs, gender)) dna = ToonDNA.ToonDNA() dna.newToon((head, torso, legs, gender, )) toon = Toon.Toon() try: toon.setDNA(dna) - except Exception, e: - print e + except Exception as e: + print(e) # Each state will have an enter function, an exit function, # and a datagram handler, which will be set during each enter function. @@ -685,7 +685,7 @@ def cancelAvatarDetailsRequest(self, avatar): assert self.notify.debugStateCall(self, 'loginFSM', 'gameFSM') # Remove query map from dictionary avId = avatar.doId - if self.__queryAvatarMap.has_key(avId): + if avId in self.__queryAvatarMap: pad = self.__queryAvatarMap.pop(avId) pad.delayDelete.destroy() @@ -750,14 +750,14 @@ def handleGetAvatarDetailsResp(self, di): pad.avatar.updateAllRequiredFields(dclass, di) gotData = 1 - if isinstance(pad.func, types.StringType): + if isinstance(pad.func, bytes): # If the pad "function" is actually a string, send an # event instead of calling the function. messenger.send(pad.func, list((gotData, pad.avatar) + pad.args)) else: # Otherwise, call the function with the handle and the # additional arguments supplied. - apply(pad.func, (gotData, pad.avatar) + pad.args) + pad.func(*(gotData, pad.avatar) + pad.args) pad.delayDelete.destroy() @@ -1057,7 +1057,7 @@ def dumpAllSubShardObjects(self): # give objects a chance to clean themselves up before checking for DelayDelete leaks messenger.send('clientCleanup') # cancel any outstanding avatarDetails requests (they use DelayDeletes) - for avId, pad in self.__queryAvatarMap.items(): + for avId, pad in list(self.__queryAvatarMap.items()): pad.delayDelete.destroy() self.__queryAvatarMap = {} # some of these objects might be holding delayDeletes on others @@ -1065,7 +1065,7 @@ def dumpAllSubShardObjects(self): # and check them after all objects have had a chance to delete delayDeleted = [] # get a local copy of the doIds in case the doId2do table changes while we're working - doIds = self.doId2do.keys() + doIds = list(self.doId2do.keys()) for doId in doIds: obj = self.doId2do[doId] if isNotLive: @@ -1098,12 +1098,12 @@ def dumpAllSubShardObjects(self): (safeRepr(obj), itype(obj), obj.getDelayDeleteNames())) self.notify.error(s) if isNotLive: - self.notify.info('dumpAllSubShardObjects: doIds left: %s' % self.doId2do.keys()) + self.notify.info('dumpAllSubShardObjects: doIds left: %s' % list(self.doId2do.keys())) assert self.allSubShardObjectsGone() if __debug__: def allSubShardObjectsGone(self): - for doId, obj in self.doId2do.items(): + for doId, obj in list(self.doId2do.items()): if not ((obj is localAvatar) or (obj.parentId != localAvatar.defaultShard) or ((obj.parentId == localAvatar.defaultShard) and obj.neverDisable)): @@ -1148,7 +1148,7 @@ def _doIdIsOnCurrentShard(self, doId): # Interface to get Shard Stat Details ################################################### def _wantShardListComplete(self): - print self.activeDistrictMap + print(self.activeDistrictMap) if self._shardsAreReady(): self.acceptOnce(ToontownDistrictStats.EventName(), self.shardDetailStatsComplete) ToontownDistrictStats.refresh() @@ -1236,7 +1236,7 @@ def isFriendOnline(self, doId): Returns true if the indicated friend is currently online, false otherwise. """ - return self.friendsOnline.has_key(doId) + return doId in self.friendsOnline def addAvatarToFriendsList(self, avatar): self.friendsMap[avatar.doId] = avatar @@ -1252,13 +1252,13 @@ def identifyFriend(self, doId, source=None): something other than None even if the avatar is not a friend. Use isFriend() to ask whether a particular avatar is a friend. """ - if self.friendsMap.has_key(doId): + if doId in self.friendsMap: return self.friendsMap[doId] # Hmm, we don't know who this friend is. Is it someone # we've heard about this session? avatar = None - if self.doId2do.has_key(doId): + if doId in self.doId2do: avatar = self.doId2do[doId] elif self.cache.contains(doId): avatar = self.cache.dict[doId] @@ -1297,7 +1297,7 @@ def identifyAvatar(self, doId): Returns either an avatar or a FriendHandle, whichever we can find, to reference the indicated doId. """ - if self.doId2do.has_key(doId): + if doId in self.doId2do: return self.doId2do[doId] else: return self.identifyFriend(doId) @@ -1312,9 +1312,9 @@ def isFriendsMapComplete(self): return 0 if base.wantPets and base.localAvatar.hasPet(): - print str(self.friendsMap) - print str(self.friendsMap.has_key(base.localAvatar.getPetId())) - if self.friendsMap.has_key(base.localAvatar.getPetId()) == None: + print(str(self.friendsMap)) + print(str(base.localAvatar.getPetId() in self.friendsMap)) + if (base.localAvatar.getPetId() in self.friendsMap) == None: return 0 return 1 @@ -1388,24 +1388,24 @@ def cleanPetsFromFriendsMap(self): #this looks through the friends list for any DistributedPet #references hanging around and makes sure the references are gone - for (objId, obj) in self.friendsMap.items(): + for (objId, obj) in list(self.friendsMap.items()): from toontown.pets import DistributedPet if (isinstance(obj, DistributedPet.DistributedPet)): - print "Removing %s reference from the friendsMap" % obj.getName() + print("Removing %s reference from the friendsMap" % obj.getName()) del self.friendsMap[objId] def removePetFromFriendsMap(self): #removes the handle to the localToon's pet from the friendslist map doId = base.localAvatar.getPetId() - if doId and self.friendsMap.has_key(doId): + if doId and doId in self.friendsMap: del self.friendsMap[doId] def addPetToFriendsMap(self, callback=None): #need to add the pet to the list doId = base.localAvatar.getPetId() - if (not doId) or self.friendsMap.has_key(doId): + if (not doId) or doId in self.friendsMap: #toon does not have a pet or the pet has already been added if callback: callback() @@ -1445,10 +1445,10 @@ def handleGetFriendsList(self, di): # Make sure our list of online friends has the most # current info. - if self.friendsOnline.has_key(doId): + if doId in self.friendsOnline: self.friendsOnline[doId] = handle - if self.friendPendingChatSettings.has_key(doId): + if doId in self.friendPendingChatSettings: self.notify.debug('calling setCommonAndWL %s' % str(self.friendPendingChatSettings[doId])) handle.setCommonAndWhitelistChatFlags( @@ -1506,7 +1506,7 @@ def handleFriendOnline(self, di): self.notify.debug("Friend %d now online. common=%d whitelist=%d" % (doId, commonChatFlags, whitelistChatFlags)) - if not self.friendsOnline.has_key(doId): + if doId not in self.friendsOnline: self.friendsOnline[doId] = self.identifyFriend(doId) messenger.send('friendOnline', [doId, commonChatFlags, whitelistChatFlags]) if not self.friendsOnline[doId]: @@ -1530,7 +1530,7 @@ def handleFriendOffline(self, di): def getFirstBattle(self): # Return the first battle in the repository (for testing purposes) from toontown.battle import DistributedBattleBase - for dobj in self.doId2do.values(): + for dobj in list(self.doId2do.values()): if (isinstance(dobj, DistributedBattleBase.DistributedBattleBase)): return dobj @@ -1754,7 +1754,7 @@ def deleteObject(self, doId, ownerView=False): This is not a distributed message and does not delete the object on the server or on any other client. """ - if self.doId2do.has_key(doId): + if doId in self.doId2do: # If it is in the dictionary, remove it. obj = self.doId2do[doId] # Remove it from the dictionary @@ -1774,7 +1774,7 @@ def deleteObject(self, doId, ownerView=False): def _abandonShard(self): # simulate removal of shard interest for quick shutdown - for doId, obj in self.doId2do.items(): + for doId, obj in list(self.doId2do.items()): if ((obj.parentId == localAvatar.defaultShard) and (obj is not localAvatar)): self.deleteObject(doId) diff --git a/toontown/src/distributed/ToontownDistrictAI.py b/toontown/src/distributed/ToontownDistrictAI.py index f136e557..0354b0b5 100644 --- a/toontown/src/distributed/ToontownDistrictAI.py +++ b/toontown/src/distributed/ToontownDistrictAI.py @@ -9,19 +9,68 @@ class ToontownDistrictAI(DistributedDistrictAI): See Also: "toontown/src/distributed/DistributedDistrict.py" """ notify = directNotify.newCategory("ToontownDistrictAI") - + def __init__(self, air, name="untitled"): DistributedDistrictAI.__init__(self, air, name) - self.stats = None - - def generate(self): + self.avatarCount = 0 + self.newAvatarCount = 0 + self.updateFreq = 5 + + def generate(self): DistributedDistrictAI.generate(self) - self.stats = ToontownDistrictStatsAI.ToontownDistrictStatsAI(self.air) - self.stats.toontownDistrictId = self.doId - self.stats.generateOtpObject(self.stats.defaultParent, self.stats.defaultZone) + self.pushDistrictStats(firstTime = True) def delete(self): - DistributedDistrictAI.delete(self) - if(self.stats is not None): - self.stats.requestDelete() - self.stats = None + DistributedDistrictAI.delete(self) + + def setAvatarCount(self, avatarCount): + self.avatarCount = avatarCount + + def d_setAvatarCount(self, avatarCount): + self.sendUpdate('setAvatarCount', [avatarCount]) + + def b_setAvatarCount(self, avatarCount): + self.setAvatarCount(avatarCount) + self.d_setAvatarCount(avatarCount) + + def getAvatarCount(self): + return self.avatarCount + + def setNewAvatarCount(self, newAvatarCount): + self.newAvatarCount = newAvatarCount + + def d_setNewAvatarCount(self, newAvatarCount): + self.sendUpdate('setNewAvatarCount', [newAvatarCount]) + + def b_setNewAvatarCount(self, newAvatarCount): + self.setNewAvatarCount(newAvatarCount) + self.d_setNewAvatarCount(newAvatarCount) + + def getNewAvatarCount(self): + return self.newAvatarCount + + def setStats(self, avatarCount, newAvatarCount): + self.setAvatarCount(avatarCount) + self.setNewAvatarCount(newAvatarCount) + + def d_setStats(self, avatarCount, newAvatarCount): + self.sendUpdate('setStats', [avatarCount, newAvatarCount]) + + def b_setStats(self, avatarCount, newAvatarCount): + self.setStats(avatarCount, newAvatarCount) + self.d_setStats(avatarCount, newAvatarCount) + + def pushDistrictStats(self, task = None, firstTime = False): + if self.isDeleted(): + return + + # the first time we're called, the AIR doesn't have a welcomeValleyManager yet + if firstTime: + wvCount = 0 + else: + wvCount = self.air.getWelcomeValleyCount() + + avatarCount = self.air.getPopulation() + self.b_setStats(avatarCount, wvCount) + taskMgr.doMethodLater(self.updateFreq, self.pushDistrictStats, 'DistributedDistrictUpdate') + self.air.writeServerStatus('', avatarCount, len(self.air.doId2do)) \ No newline at end of file diff --git a/toontown/src/distributed/ToontownDistrictStats.py b/toontown/src/distributed/ToontownDistrictStats.py index 77edb649..534e8aee 100644 --- a/toontown/src/distributed/ToontownDistrictStats.py +++ b/toontown/src/distributed/ToontownDistrictStats.py @@ -84,14 +84,14 @@ def settoontownDistrictId(self, value): def setAvatarCount(self, avatarCount): - if self.cr.activeDistrictMap.has_key(self.toontownDistrictId): + if self.toontownDistrictId in self.cr.activeDistrictMap: self.cr.activeDistrictMap[self.toontownDistrictId].avatarCount=avatarCount #print self.cr.activeDistrictMap def setNewAvatarCount(self, newAvatarCount): - if self.cr.activeDistrictMap.has_key(self.toontownDistrictId): + if self.toontownDistrictId in self.cr.activeDistrictMap: self.cr.activeDistrictMap[self.toontownDistrictId].newAvatarCount=newAvatarCount def setStats(self, avatarCount, newAvatarCount): diff --git a/toontown/src/distributed/ToontownDistrictStatsAI.py b/toontown/src/distributed/ToontownDistrictStatsAI.py index 60f9d63c..579e5977 100644 --- a/toontown/src/distributed/ToontownDistrictStatsAI.py +++ b/toontown/src/distributed/ToontownDistrictStatsAI.py @@ -10,47 +10,47 @@ class ToontownDistrictStatsAI(DistributedObjectAI.DistributedObjectAI): See Also: "toontown/src/distributed/DistributedDistrictAi.py" """ notify = DirectNotifyGlobal.directNotify.newCategory("ToontownDistrictStatsAI") - + defaultParent = OTP_DO_ID_TOONTOWN defaultZone = OTP_ZONE_ID_DISTRICTS_STATS - - - + + + def __init__(self, air): DistributedObjectAI.DistributedObjectAI.__init__(self, air) self.updateFreq = 5 self.toontownDistrictId = 0 - + def gettoontownDistrictId(self): - return self.toontownDistrictId - - def generate(self): + return self.toontownDistrictId + + def generate(self): DistributedObjectAI.DistributedObjectAI.generate(self) self.pushDistrictStats(firstTime=True) def delete(self): taskMgr.remove("DistributedToonDistrictAIStatsUpdate") - DistributedObjectAI.DistributedObjectAI.delete(self) - + DistributedObjectAI.DistributedObjectAI.delete(self) + # set avatar count def setAvatarCount(self, avatarCount): pass - + def d_setAvatarCount(self, avatarCount): self.sendUpdate("setAvatarCount", [avatarCount]) - + def b_setAvatarCount(self, avatarCount): self.setAvatarCount(avatarCount) self.d_setAvatarCount(avatarCount) - - ## avatars in bewbe zone... + + ## avatars in bewbe zone... def setNewAvatarCount(self, newAvatarCount): pass def d_setNewAvatarCount(self, newAvatarCount): self.sendUpdate("setAvatarCount", [newAvatarCount]) - + def b_setNewAvatarCount(self, newAvatarCount): self.setNewAvatarCount(newAvatarCount) self.d_setNewAvatarCount(newAvatarCount) @@ -67,8 +67,8 @@ def d_setStats(self, avatarCount, newAvatarCount): def b_setStats(self, avatarCount, newAvatarCount): self.setStats(avatarCount, newAvatarCount) self.d_setStats(avatarCount, newAvatarCount) - - + + def pushDistrictStats(self, task=None, firstTime=False): if self.isDeleted(): return diff --git a/toontown/src/dna/DNAPathCheck.py b/toontown/src/dna/DNAPathCheck.py index 59136983..b7b5a78b 100644 --- a/toontown/src/dna/DNAPathCheck.py +++ b/toontown/src/dna/DNAPathCheck.py @@ -75,7 +75,7 @@ def lookupDNAFileName(filename): return dnaFile.cStr() for file in dnaFiles: - print ("Checking file: %s" % (file)) + print(("Checking file: %s" % (file))) dnaStore = DNAStorage() file = lookupDNAFileName(file) dnaData = loadDNAFileAI(dnaStore, file, CSDefault) @@ -93,13 +93,13 @@ def lookupDNAFileName(filename): allPoints = streetPointList + frontdoorPointList + sidedoorPointList numPoints = len(allPoints) if numPoints == 0: - print ("No points found in file: %s" % (file)) + print(("No points found in file: %s" % (file))) continue count = 0 startTime = time.time() for point1 in allPoints: count += 1 - print ("Checking point index: %s, %s/%s" % (point1.getIndex(), count, numPoints)) + print(("Checking point index: %s, %s/%s" % (point1.getIndex(), count, numPoints))) for point2 in allPoints: if point1 != point2: minPathLen = 40 @@ -110,7 +110,7 @@ def lookupDNAFileName(filename): endTime = time.time() dt = endTime - startTime totalPaths = numPoints * numPoints - print ("Computed %s paths in %s seconds. Avg %s sec/path" % - (totalPaths, dt, dt/float(totalPaths))) + print(("Computed %s paths in %s seconds. Avg %s sec/path" % + (totalPaths, dt, dt/float(totalPaths)))) pprint.pprint(errors) diff --git a/toontown/src/dna/DNAPrintTitles.py b/toontown/src/dna/DNAPrintTitles.py index 272be6ed..98dec69a 100644 --- a/toontown/src/dna/DNAPrintTitles.py +++ b/toontown/src/dna/DNAPrintTitles.py @@ -65,7 +65,7 @@ print ("zone2TitleDict = {") for file in dnaFiles: - print (" # titles for: %s" % (file)) + print((" # titles for: %s" % (file))) loadDNAFile(dnaStore, file, CSDefault, 0) for blockIndex in range(dnaStore.getNumBlockTitles()): blockNumber = dnaStore.getTitleBlockAt(blockIndex) @@ -74,7 +74,7 @@ article = dnaStore.getArticleFromBlockNumber(blockNumber) branchZone = zone-(zone%100) finalZone = branchZone + 500 + blockNumber - print (' %s : ("%s", "%s"),' % (finalZone, title, article)) + print((' %s : ("%s", "%s"),' % (finalZone, title, article))) dnaStore.resetBlockTitle() dnaStore.resetBlockNumbers() dnaStore.resetBlockArticle() diff --git a/toontown/src/effects/BlastEffect.py b/toontown/src/effects/BlastEffect.py index c4f2bf36..a310159d 100644 --- a/toontown/src/effects/BlastEffect.py +++ b/toontown/src/effects/BlastEffect.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController +from .EffectController import EffectController class BlastEffect(NodePath, EffectController): diff --git a/toontown/src/effects/ChrysanthemumEffect.py b/toontown/src/effects/ChrysanthemumEffect.py index 66c5722f..006d1973 100644 --- a/toontown/src/effects/ChrysanthemumEffect.py +++ b/toontown/src/effects/ChrysanthemumEffect.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController +from .EffectController import EffectController class ChrysanthemumEffect(NodePath, EffectController): diff --git a/toontown/src/effects/DistributedFireworkShowAI.py b/toontown/src/effects/DistributedFireworkShowAI.py index 3b395f6f..c7a3daba 100644 --- a/toontown/src/effects/DistributedFireworkShowAI.py +++ b/toontown/src/effects/DistributedFireworkShowAI.py @@ -2,8 +2,8 @@ from direct.distributed import DistributedObjectAI from direct.directnotify import DirectNotifyGlobal from direct.distributed import ClockDelta -from FireworkShow import FireworkShow -from FireworkShows import getShowDuration +from .FireworkShow import FireworkShow +from .FireworkShows import getShowDuration import random from direct.task import Task diff --git a/toontown/src/effects/EffectController.py b/toontown/src/effects/EffectController.py index bdcfa4c4..0a802990 100644 --- a/toontown/src/effects/EffectController.py +++ b/toontown/src/effects/EffectController.py @@ -47,7 +47,7 @@ def play(self, lod=None): if lod != None: try: self.createTrack(lod) - except TypeError, e: + except TypeError as e: raise TypeError('Error loading %s effect.' % self.__class__.__name__) else: self.createTrack() @@ -87,7 +87,7 @@ def startLoop(self, lod=None): if lod != None: try: self.createTrack(lod) - except TypeError, e: + except TypeError as e: raise TypeError('Error loading %s effect.' % self.__class__.__name__) else: self.createTrack() diff --git a/toontown/src/effects/FireworkManagerAI.py b/toontown/src/effects/FireworkManagerAI.py index b2e78165..71ade489 100644 --- a/toontown/src/effects/FireworkManagerAI.py +++ b/toontown/src/effects/FireworkManagerAI.py @@ -1,9 +1,9 @@ from direct.directnotify import DirectNotifyGlobal import random from direct.task import Task -import DistributedFireworkShowAI +from . import DistributedFireworkShowAI from toontown.ai import HolidayBaseAI -import FireworkShow +from . import FireworkShow from toontown.toonbase.ToontownGlobals import DonaldsDock, ToontownCentral, \ TheBrrrgh, MinniesMelodyland, DaisyGardens, OutdoorZone, GoofySpeedway, DonaldsDreamland import time @@ -73,7 +73,7 @@ def startShow(self, zone, showType = -1, magicWord = 0): Warns and returns 0 if a show was already running in this zone. There can only be one show per zone. """ - if self.fireworkShows.has_key(zone): + if zone in self.fireworkShows: self.notify.warning("startShow: already running a show in zone: %s" % (zone)) return 0 self.notify.debug("startShow: zone: %s showType: %s" % (zone, showType)) @@ -95,7 +95,7 @@ def stopShow(self, zone): Stop a firework show in this zone. Returns 1 if it did stop a show, warns and returns 0 if there is not one """ - if not self.fireworkShows.has_key(zone): + if zone not in self.fireworkShows: self.notify.warning("stopShow: no show running in zone: %s" % (zone)) return 0 self.notify.debug("stopShow: zone: %s" % (zone)) @@ -111,7 +111,7 @@ def stopAllShows(self): Returns number of shows stopped by this command. """ numStopped = 0 - for zone, show in self.fireworkShows.items(): + for zone, show in list(self.fireworkShows.items()): self.notify.debug("stopAllShows: zone: %s" % (zone)) show.requestDelete() numStopped += 1 @@ -122,5 +122,5 @@ def isShowRunning(self, zone): """ Is there currently a show running in this zone? """ - return self.fireworkShows.has_key(zone) + return zone in self.fireworkShows diff --git a/toontown/src/effects/FireworkShowMixin.py b/toontown/src/effects/FireworkShowMixin.py index b8f2e9e9..83aad4ed 100644 --- a/toontown/src/effects/FireworkShowMixin.py +++ b/toontown/src/effects/FireworkShowMixin.py @@ -18,9 +18,9 @@ from toontown.hood import * # effects imports -import Fireworks -import FireworkShows -from FireworkGlobals import skyTransitionDuration,preShowPauseDuration,postShowPauseDuration,preNormalMusicPauseDuration +from . import Fireworks +from . import FireworkShows +from .FireworkGlobals import skyTransitionDuration,preShowPauseDuration,postShowPauseDuration,preNormalMusicPauseDuration from toontown.effects.FireworkShow import FireworkShow class FireworkShowMixin: diff --git a/toontown/src/effects/FireworkShows.py b/toontown/src/effects/FireworkShows.py index 61b191b7..dfc2667b 100644 --- a/toontown/src/effects/FireworkShows.py +++ b/toontown/src/effects/FireworkShows.py @@ -1,5 +1,5 @@ -from FireworkGlobals import * +from .FireworkGlobals import * from toontown.toonbase import ToontownGlobals from toontown.parties import PartyGlobals diff --git a/toontown/src/effects/FireworkSparkles.py b/toontown/src/effects/FireworkSparkles.py index 30e3430e..68560add 100644 --- a/toontown/src/effects/FireworkSparkles.py +++ b/toontown/src/effects/FireworkSparkles.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect import random class FireworkSparkles(PooledEffect, EffectController): diff --git a/toontown/src/effects/Fireworks.py b/toontown/src/effects/Fireworks.py index 556616d3..171f1bbe 100644 --- a/toontown/src/effects/Fireworks.py +++ b/toontown/src/effects/Fireworks.py @@ -4,7 +4,7 @@ from direct.particles import ForceGroup from pandac.PandaModules import * import random -from FireworkGlobals import * +from .FireworkGlobals import * colors = { WHITE : Vec4(1,1,1,1), diff --git a/toontown/src/effects/FireworksEditor.py b/toontown/src/effects/FireworksEditor.py index 43b21d6e..37391a13 100644 --- a/toontown/src/effects/FireworksEditor.py +++ b/toontown/src/effects/FireworksEditor.py @@ -1,12 +1,12 @@ """ Fireworks Editor/Control Panel module """ from direct.tkwidgets.AppShell import * from direct.showbase.TkGlobal import * -from FireworkGlobals import * +from .FireworkGlobals import * from direct.interval.IntervalGlobal import * -from tkFileDialog import * -from tkMessageBox import askyesno +from tkinter.filedialog import * +from tkinter.messagebox import askyesno from direct.tkwidgets import VectorWidgets -import Fireworks +from . import Fireworks from direct.tkwidgets import Slider from direct.task import Task import Types @@ -17,7 +17,7 @@ ttmodelsDirectory = Filename.expandFrom("$TTMODELS") -UppercaseColorNames = map(string.upper, ColorNames) +UppercaseColorNames = list(map(string.upper, ColorNames)) dnaDirectory = Filename.expandFrom(base.config.GetString("dna-directory", "$TTMODELS/src/dna")) @@ -124,7 +124,7 @@ def getFirework(self, ID): return self.fwDict.get(ID, None) def removeFirework(self, ID): - if self.fwDict.has_key(ID): + if ID in self.fwDict: del(self.fwDict[ID]) def getSortedList(self): @@ -138,7 +138,7 @@ def sortFW(a,b): else: return 0 # Sort the firework show by start time - fwList = self.fwDict.values() + fwList = list(self.fwDict.values()) fwList.sort(sortFW) return fwList @@ -198,10 +198,10 @@ def getDuration(self): return max(self.minDuration, musicDuration, fwDuration) def printShow(self): - print '(' + print('(') for fw in self.getShow(): - print ' %s,' % (fwTuple2Str(fw)) - print ')' + print(' %s,' % (fwTuple2Str(fw))) + print(')') def saveShow(self, fireworksFilename): fname = Filename(fireworksFilename) @@ -227,11 +227,11 @@ def loadShow(self, fireworksFilename): self.setMusicFile(l[11:].strip()) elif (l[:11] == 'FIREWORKS: '): fwStr = l[11:].strip() - print fwStr + print(fwStr) fw = self.fireworkFromString(fwStr, currentT) currentT = fw.getStartTime() if not fw: - print 'ERROR Parsing fireworks string' + print('ERROR Parsing fireworks string') self.clearShow() break @@ -244,7 +244,7 @@ def fireworkFromString(self, fwStr, currentT = 0): fwStr = fwStr[lParen + 1: rParen] # If its a valid line, split on separator and # strip leading/trailing whitespace from each element - data = map(string.strip, fwStr.split(',')) + data = list(map(string.strip, fwStr.split(','))) # Try to convert string to firework data Z = 50 Z2 = 70 @@ -257,7 +257,7 @@ def fireworkFromString(self, fwStr, currentT = 0): x = eval(data[FW_POS_X]) y = eval(data[FW_POS_Y]) z = eval(data[FW_POS_Z]) - except ValueError, IndexError: + except ValueError as IndexError: return None return self.createFirework(startT, style, Point3(x,y,z), color1, color2, amp) @@ -368,7 +368,7 @@ def offsetPos(self, dx=0, dy=0, dz=0, startT = 0.0, endT = 'END', fwList = self.getSortedList() for fw in fwList: if fw.getStyle() in excludeList: - print 'Excluding', styleNames[fw.getStyle()] + print('Excluding', styleNames[fw.getStyle()]) continue currT = fw.getStartTime() if currT < startT: diff --git a/toontown/src/effects/FlashEffect.py b/toontown/src/effects/FlashEffect.py index 753ef330..f11d05a2 100644 --- a/toontown/src/effects/FlashEffect.py +++ b/toontown/src/effects/FlashEffect.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController +from .EffectController import EffectController class FlashEffect(NodePath, EffectController): diff --git a/toontown/src/effects/Glow.py b/toontown/src/effects/Glow.py index 2bf12614..f3799d09 100644 --- a/toontown/src/effects/Glow.py +++ b/toontown/src/effects/Glow.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect class Glow(PooledEffect, EffectController): diff --git a/toontown/src/effects/GlowTrail.py b/toontown/src/effects/GlowTrail.py index fb1445d6..749265c5 100644 --- a/toontown/src/effects/GlowTrail.py +++ b/toontown/src/effects/GlowTrail.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class GlowTrail(PooledEffect, EffectController): diff --git a/toontown/src/effects/IceCream.py b/toontown/src/effects/IceCream.py index 7fbd2d7b..f91a8b39 100644 --- a/toontown/src/effects/IceCream.py +++ b/toontown/src/effects/IceCream.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect class IceCream(PooledEffect, EffectController): diff --git a/toontown/src/effects/NoiseSparkles.py b/toontown/src/effects/NoiseSparkles.py index 83d2cc66..1a360c2e 100644 --- a/toontown/src/effects/NoiseSparkles.py +++ b/toontown/src/effects/NoiseSparkles.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect import random class NoiseSparkles(PooledEffect, EffectController): diff --git a/toontown/src/effects/PeonyEffect.py b/toontown/src/effects/PeonyEffect.py index f3203bd7..878ca347 100644 --- a/toontown/src/effects/PeonyEffect.py +++ b/toontown/src/effects/PeonyEffect.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.showbase.DirectObject import * from direct.interval.IntervalGlobal import * -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class PeonyEffect(PooledEffect, EffectController): diff --git a/toontown/src/effects/RayBurst.py b/toontown/src/effects/RayBurst.py index 4f797357..1789636a 100644 --- a/toontown/src/effects/RayBurst.py +++ b/toontown/src/effects/RayBurst.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController +from .EffectController import EffectController class RayBurst(NodePath, EffectController): diff --git a/toontown/src/effects/RingEffect.py b/toontown/src/effects/RingEffect.py index c5e6c93d..76571cba 100644 --- a/toontown/src/effects/RingEffect.py +++ b/toontown/src/effects/RingEffect.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect import random class RingEffect(PooledEffect, EffectController): diff --git a/toontown/src/effects/ScavengerHuntEffects.py b/toontown/src/effects/ScavengerHuntEffects.py index d3594290..b59e9aac 100644 --- a/toontown/src/effects/ScavengerHuntEffects.py +++ b/toontown/src/effects/ScavengerHuntEffects.py @@ -44,7 +44,7 @@ def __init__(self,beanAmount): def countUp(t,startVal, endVal): beanCountStr = startVal + t*(endVal-startVal) - self.countLabel['text'] = '+'+`int(beanCountStr)` + self.countLabel['text'] = '+'+repr(int(beanCountStr)) def setCountColor(color): self.countLabel['text_fg'] = color diff --git a/toontown/src/effects/SimpleSparkles.py b/toontown/src/effects/SimpleSparkles.py index c497e228..4b4619a5 100644 --- a/toontown/src/effects/SimpleSparkles.py +++ b/toontown/src/effects/SimpleSparkles.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect import random class SimpleSparkles(PooledEffect, EffectController): diff --git a/toontown/src/effects/SkullBurst.py b/toontown/src/effects/SkullBurst.py index d5d21bd6..27086b7e 100644 --- a/toontown/src/effects/SkullBurst.py +++ b/toontown/src/effects/SkullBurst.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.showbase.DirectObject import * from direct.interval.IntervalGlobal import * -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class SkullBurst(PooledEffect, EffectController): diff --git a/toontown/src/effects/SkullFlash.py b/toontown/src/effects/SkullFlash.py index ceb98f5d..4eecb5c7 100644 --- a/toontown/src/effects/SkullFlash.py +++ b/toontown/src/effects/SkullFlash.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.showbase.DirectObject import * from direct.interval.IntervalGlobal import * -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class SkullFlash(PooledEffect, EffectController): diff --git a/toontown/src/effects/SparksTrail.py b/toontown/src/effects/SparksTrail.py index e24362a9..5e499e13 100644 --- a/toontown/src/effects/SparksTrail.py +++ b/toontown/src/effects/SparksTrail.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class SparksTrail(PooledEffect, EffectController): diff --git a/toontown/src/effects/SparksTrailLong.py b/toontown/src/effects/SparksTrailLong.py index 62437e86..bd08898a 100644 --- a/toontown/src/effects/SparksTrailLong.py +++ b/toontown/src/effects/SparksTrailLong.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from PooledEffect import PooledEffect -from EffectController import EffectController +from .PooledEffect import PooledEffect +from .EffectController import EffectController class SparksTrailLong(PooledEffect, EffectController): diff --git a/toontown/src/effects/Splash.py b/toontown/src/effects/Splash.py index b6b1a249..f86a355a 100644 --- a/toontown/src/effects/Splash.py +++ b/toontown/src/effects/Splash.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from Ripples import * +from .Ripples import * from toontown.battle.BattleProps import globalPropPool from toontown.battle import BattleParticles diff --git a/toontown/src/effects/StarBurst.py b/toontown/src/effects/StarBurst.py index 373ca99d..66883a2d 100644 --- a/toontown/src/effects/StarBurst.py +++ b/toontown/src/effects/StarBurst.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.particles import ParticleEffect, Particles, ForceGroup -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect class StarBurst(PooledEffect, EffectController): diff --git a/toontown/src/effects/TrailExplosion.py b/toontown/src/effects/TrailExplosion.py index 7e2d7675..0bd07364 100644 --- a/toontown/src/effects/TrailExplosion.py +++ b/toontown/src/effects/TrailExplosion.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -from EffectController import EffectController -from PooledEffect import PooledEffect +from .EffectController import EffectController +from .PooledEffect import PooledEffect from toontown.effects.SparksTrailLong import SparksTrailLong import random diff --git a/toontown/src/estate/ClosetGUI.py b/toontown/src/estate/ClosetGUI.py index bdacd8b7..14300f23 100644 --- a/toontown/src/estate/ClosetGUI.py +++ b/toontown/src/estate/ClosetGUI.py @@ -2,7 +2,7 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.makeatoon import ClothesGUI -import ClosetGlobals +from . import ClosetGlobals from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals from toontown.toontowngui import TTDialog diff --git a/toontown/src/estate/DistributedBank.py b/toontown/src/estate/DistributedBank.py index 55847a07..21598c08 100644 --- a/toontown/src/estate/DistributedBank.py +++ b/toontown/src/estate/DistributedBank.py @@ -6,10 +6,10 @@ from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * from toontown.toonbase import ToontownGlobals -import DistributedFurnitureItem +from . import DistributedFurnitureItem from toontown.toonbase import TTLocalizer -import BankGUI -from BankGlobals import * +from . import BankGUI +from .BankGlobals import * from toontown.toontowngui import TTDialog from toontown.catalog.CatalogFurnitureItem import FurnitureTypes from toontown.catalog.CatalogFurnitureItem import FTScale diff --git a/toontown/src/estate/DistributedBankAI.py b/toontown/src/estate/DistributedBankAI.py index e4329cab..e9881dc5 100644 --- a/toontown/src/estate/DistributedBankAI.py +++ b/toontown/src/estate/DistributedBankAI.py @@ -3,10 +3,10 @@ from direct.fsm import ClassicFSM from direct.distributed import ClockDelta from direct.distributed import DistributedObjectAI -import DistributedFurnitureItemAI +from . import DistributedFurnitureItemAI from direct.task.Task import Task from direct.fsm import State -from BankGlobals import * +from .BankGlobals import * class DistributedBankAI(DistributedFurnitureItemAI.DistributedFurnitureItemAI): diff --git a/toontown/src/estate/DistributedCannon.py b/toontown/src/estate/DistributedCannon.py index 39b80d55..0b88ff56 100644 --- a/toontown/src/estate/DistributedCannon.py +++ b/toontown/src/estate/DistributedCannon.py @@ -14,7 +14,7 @@ from toontown.effects import Splash from toontown.effects import DustCloud from toontown.minigame import CannonGameGlobals -import CannonGlobals +from . import CannonGlobals from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer @@ -425,7 +425,7 @@ def setMovie(self, mode, avId): self.incrementPinballInfo(0,0) - if (self.cr.doId2do.has_key(self.avId)): + if (self.avId in self.cr.doId2do): # If the toon exists, look it up self.av = self.cr.doId2do[self.avId] self.acceptOnce(self.av.uniqueName('disable'), @@ -1117,7 +1117,7 @@ def __localCannonMoveTask(self, task): self.sndCannonMove.stop() # make sure everyone has the correct final position self.__broadcastLocalCannonPosition() - print("Cannon Rot:%s Angle:%s" % (pos[0], pos[1])) + print(("Cannon Rot:%s Angle:%s" % (pos[0], pos[1]))) return Task.cont @@ -1231,7 +1231,7 @@ def __fireCannonTask(self, task): flightResults = self.__calcFlightResults(avId, launchTime) # pull all the results into the local namespace for key in flightResults: - exec "%s = flightResults['%s']" % (key, key) + exec("%s = flightResults['%s']" % (key, key)) self.notify.debug("start position: " + str(startPos)) self.notify.debug("start velocity: " + str(startVel)) @@ -1256,7 +1256,7 @@ def __fireCannonTask(self, task): # head was av = self.toonModel av.reparentTo(render) - print("start Pos%s Hpr%s" % (startPos, startHpr)) + print(("start Pos%s Hpr%s" % (startPos, startHpr))) av.setPos(startPos) barrelHpr = self.barrel.getHpr(render) # subtract 90 degrees from hpr since barrels hpr measures the angle from the ground @@ -1349,7 +1349,7 @@ def removeAvFromCannon(self): if not hasattr(place, 'fsm'): return placeState = place.fsm.getCurrentState().getName() - print placeState + print(placeState) if ((self.inWater) or place.toonSubmerged) and (placeState != "fishing"): if (self.av != None): self.av.startSmooth() diff --git a/toontown/src/estate/DistributedCannonAI.py b/toontown/src/estate/DistributedCannonAI.py index 61c46c0c..1980351c 100644 --- a/toontown/src/estate/DistributedCannonAI.py +++ b/toontown/src/estate/DistributedCannonAI.py @@ -6,7 +6,7 @@ from toontown.minigame import CannonGameGlobals from direct.distributed import DistributedObjectAI from toontown.minigame import Trajectory -import CannonGlobals +from . import CannonGlobals class DistributedCannonAI(DistributedObjectAI.DistributedObjectAI): diff --git a/toontown/src/estate/DistributedChangingStatuary.py b/toontown/src/estate/DistributedChangingStatuary.py index 1355877f..4151e52c 100644 --- a/toontown/src/estate/DistributedChangingStatuary.py +++ b/toontown/src/estate/DistributedChangingStatuary.py @@ -51,7 +51,7 @@ def hideParts(self): stage = len(growthThresholds) self.notify.debug('growth Stage=%d' % stage) # we know the right stage, hide the others - for index in xrange(len(growthThresholds) +1): + for index in range(len(growthThresholds) +1): if index != stage: partName = '**/growthStage_%d' % index self.notify.debug('trying to remove %s' % partName) diff --git a/toontown/src/estate/DistributedCloset.py b/toontown/src/estate/DistributedCloset.py index 2d88c093..3f821043 100644 --- a/toontown/src/estate/DistributedCloset.py +++ b/toontown/src/estate/DistributedCloset.py @@ -9,10 +9,10 @@ from direct.showbase import DirectObject from toontown.toon import ToonDNA from direct.fsm import ClassicFSM, State, StateData -import ClosetGUI +from . import ClosetGUI from direct.task.Task import Task -import ClosetGlobals -import DistributedFurnitureItem +from . import ClosetGlobals +from . import DistributedFurnitureItem from toontown.toonbase import TTLocalizer class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem): @@ -305,12 +305,12 @@ def setState(self, mode, # print out our clothes and closet information before we start print ("-----------Starting closet interaction-----------") - print "customerId: %s, gender: %s, ownerId: %s" % (self.av.doId, self.av.style.gender, ownerId) - print "current top = %s,%s,%s,%s and bot = %s,%s," % (self.av.style.topTex, self.av.style.topTexColor, + print("customerId: %s, gender: %s, ownerId: %s" % (self.av.doId, self.av.style.gender, ownerId)) + print("current top = %s,%s,%s,%s and bot = %s,%s," % (self.av.style.topTex, self.av.style.topTexColor, self.av.style.sleeveTex, self.av.style.sleeveTexColor, - self.av.style.botTex, self.av.style.botTexColor) - print "topsList = %s" % self.av.getClothesTopsList() - print "bottomsList = %s" % self.av.getClothesBottomsList() + self.av.style.botTex, self.av.style.botTexColor)) + print("topsList = %s" % self.av.getClothesTopsList()) + print("bottomsList = %s" % self.av.getClothesBottomsList()) print ("-------------------------------------------------") if not self.isOwner: @@ -547,12 +547,12 @@ def setMovie(self, mode, avId, timestamp): # print out our clothes and closet information before we start print ("-----------ending closet interaction-----------") - print "avid: %s, gender: %s" % (self.av.doId, self.av.style.gender) - print "current top = %s,%s,%s,%s and bot = %s,%s," % (self.av.style.topTex, self.av.style.topTexColor, + print("avid: %s, gender: %s" % (self.av.doId, self.av.style.gender)) + print("current top = %s,%s,%s,%s and bot = %s,%s," % (self.av.style.topTex, self.av.style.topTexColor, self.av.style.sleeveTex, self.av.style.sleeveTexColor, - self.av.style.botTex, self.av.style.botTexColor) - print "topsList = %s" % self.av.getClothesTopsList() - print "bottomsList = %s" % self.av.getClothesBottomsList() + self.av.style.botTex, self.av.style.botTexColor)) + print("topsList = %s" % self.av.getClothesTopsList()) + print("bottomsList = %s" % self.av.getClothesBottomsList()) print ("-------------------------------------------------") self.resetCloset() diff --git a/toontown/src/estate/DistributedClosetAI.py b/toontown/src/estate/DistributedClosetAI.py index c99207f8..d484302a 100644 --- a/toontown/src/estate/DistributedClosetAI.py +++ b/toontown/src/estate/DistributedClosetAI.py @@ -3,13 +3,13 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM from direct.distributed import ClockDelta -import DistributedFurnitureItemAI +from . import DistributedFurnitureItemAI from direct.task.Task import Task from direct.fsm import State from toontown.toon import ToonDNA from toontown.ai import DatabaseObject from toontown.toon import DistributedToonAI -import ClosetGlobals +from . import ClosetGlobals from toontown.toon import InventoryBase class DistributedClosetAI(DistributedFurnitureItemAI.DistributedFurnitureItemAI): @@ -58,7 +58,7 @@ def enterAvatar(self): if self.busy > 0: self.freeAvatar(avId) return - + # Store the original customer DNA so we can revert if a disconnect # happens av = self.air.doId2do.get(avId) @@ -68,14 +68,14 @@ def enterAvatar(self): self.customerDNA.makeFromNetString(av.getDNAString()) self.customerId = avId self.busy = avId - print ("av %s: entering closet with shirt(%s,%s,%s,%s) and shorts(%s,%s)" % (avId, + print(("av %s: entering closet with shirt(%s,%s,%s,%s) and shorts(%s,%s)" % (avId, self.customerDNA.topTex, - self.customerDNA.topTexColor, - self.customerDNA.sleeveTex, + self.customerDNA.topTexColor, + self.customerDNA.sleeveTex, self.customerDNA.sleeveTexColor, self.customerDNA.botTex, - self.customerDNA.botTexColor)) - + self.customerDNA.botTexColor))) + # Handle unexpected exit self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId]) @@ -85,7 +85,7 @@ def enterAvatar(self): # Find the owner of the closet if self.ownerId: self.ownerAv = None - if self.air.doId2do.has_key(self.ownerId): + if self.ownerId in self.air.doId2do: self.ownerAv = self.air.doId2do[self.ownerId] self.__openCloset() else: @@ -96,55 +96,50 @@ def enterAvatar(self): db.doneEvent = gotAvEvent db.getFields(db.getDatabaseFields(aidc)) else: - print "this house has no owner, therefore we can't use the closet" + print("this house has no owner, therefore we can't use the closet") # send a reset message to the client. same as a completed purchase self.completePurchase(avId) - + def __openCloset(self): self.notify.debug("__openCloset") topList = self.ownerAv.getClothesTopsList() botList = self.ownerAv.getClothesBottomsList() - + self.sendUpdate("setState", [ClosetGlobals.OPEN, self.customerId, self.ownerAv.doId, self.ownerAv.dna.getGender(), topList, botList]) # Start the timer - taskMgr.doMethodLater(ClosetGlobals.TIMEOUT_TIME, + taskMgr.doMethodLater(ClosetGlobals.TIMEOUT_TIME, self.sendTimeoutMovie, self.uniqueName('clearMovie')) - + def __gotOwnerAv(self, db, retCode): print ("gotOwnerAv information") - if retCode == 0 and db.values.has_key('setDNAString'): + if retCode == 0 and 'setDNAString' in db.values: aidc = self.air.dclassesByName['DistributedToonAI'] self.ownerAv = DistributedToonAI.DistributedToonAI(self.air) self.ownerAv.doId = db.doId - print ("owner doId = %d" % db.doId) + print(("owner doId = %d" % db.doId)) self.ownerAv.inventory = InventoryBase.InventoryBase(self.ownerAv) self.ownerAv.teleportZoneArray = [] - + try: db.fillin(self.ownerAv, aidc) - except Exception, theException: + except Exception as theException: assert(self.notify.debug('suspicious: customer %s, owner %s: Exception = %s: DistributedClosetAI.__gotOwnerAv: invalid db' %(self.customerId, db.doId, str(theException)))) assert(self.notify.debug("FIXME: %s: DistributedClosetAI.__gotOwnerAv: This toon's DB is so broken: look at setClothesBottomsList." %(db.doId))) self.air.writeServerEvent('suspicious', self.customerId, 'DistributedClosetAI.__gotOwnerAv: invalid db. ownerId %s' % (db.doId)) self.air.writeServerEvent('FIXME', db.doId, "DistributedClosetAI.__gotOwnerAv: This toon's DB is so broken: look at setClothesBottomsList.") return - + self.__openCloset() self.dummyToonAI = self.ownerAv def removeItem(self, trashBlob, which): trashedDNA = ToonDNA.ToonDNA() - - # AI side verify trashBlob - if not trashedDNA.isValidNetString(trashBlob): - self.air.writeServerEvent('suspicious', avId, 'DistributedClosetAI.removeItem: invalid dna: %s' % trashBlob) - return trashedDNA.makeFromNetString(trashBlob) # make a list of things to be deleted later, when user is "finished" @@ -186,7 +181,7 @@ def updateToonClothes(self, av, blob): av.b_setDNAString(updatedDNA.makeNetString()) return updatedDNA - + def setDNA(self, blob, finished, which): assert(self.notify.debug('setDNA(): %s, finished=%s' % (self.timedOut, finished))) avId = self.air.getAvatarIdFromSender() @@ -195,15 +190,12 @@ def setDNA(self, blob, finished, which): self.air.writeServerEvent('suspicious', avId, 'DistributedClosetAI.setDNA current customer %s' % (self.customerId)) self.notify.warning("customerId: %s, but got setDNA for: %s" % (self.customerId, avId)) return - if (self.air.doId2do.has_key(avId)): + if (avId in self.air.doId2do): av = self.air.doId2do[avId] # make sure the DNA is valid testDNA = ToonDNA.ToonDNA() - if not testDNA.isValidNetString(blob): - self.air.writeServerEvent('suspicious', avId, 'DistributedClosetAI.setDNA: invalid dna: %s' % blob) - return - + if (finished == 2): # Set the DNA string now, since we haven't done it yet newDNA = self.updateToonClothes(av, blob) @@ -215,8 +207,8 @@ def setDNA(self, blob, finished, which): newDNA.sleeveTex, newDNA.sleeveTexColor, self.customerDNA.topTex, - self.customerDNA.topTexColor, - self.customerDNA.sleeveTex, + self.customerDNA.topTexColor, + self.customerDNA.sleeveTex, self.customerDNA.sleeveTexColor)) # replace newDNA in closet with customerDNA (since we are now wearing newDNA) if av.replaceItemInClothesTopsList(newDNA.topTex, @@ -224,8 +216,8 @@ def setDNA(self, blob, finished, which): newDNA.sleeveTex, newDNA.sleeveTexColor, self.customerDNA.topTex, - self.customerDNA.topTexColor, - self.customerDNA.sleeveTex, + self.customerDNA.topTexColor, + self.customerDNA.sleeveTex, self.customerDNA.sleeveTexColor) == 1: av.b_setClothesTopsList(av.getClothesTopsList()) else: @@ -261,7 +253,7 @@ def setDNA(self, blob, finished, which): # are exiting the closet. the lists will be reset automatically # on re-enter # self.sendUpdate("resetItemLists") - + else: # Warning - we are trusting the client to set their DNA here # This is a big security hole. Either the client should just send @@ -320,8 +312,8 @@ def __handleBootMessage(self, avId): if toon: toon.b_setDNAString(self.customerDNA.makeNetString()) self.sendClearMovie(None) - - + + def completePurchase(self, avId): assert(self.notify.debug('completePurchase()')) self.busy = avId @@ -337,7 +329,7 @@ def sendTimeoutMovie(self, task): # The timeout has expired. Restore the client back to his # original DNA automatically (instead of waiting for the # client to request this). - + toon = self.air.doId2do.get(self.customerId) # On second thought, we're better off not asserting this. if (toon != None and self.customerDNA): @@ -350,7 +342,7 @@ def sendTimeoutMovie(self, task): self.sendUpdate("setMovie", [ClosetGlobals.CLOSET_MOVIE_TIMEOUT, self.busy, ClockDelta.globalClockDelta.getRealNetworkTime()]) - + self.sendClearMovie(None) return Task.done @@ -382,7 +374,7 @@ def isClosetOwner(self): def getOwnerId(self): return self.ownerId - + if __debug__: def debugPrint(self, message): """for debugging""" diff --git a/toontown/src/estate/DistributedEstate.py b/toontown/src/estate/DistributedEstate.py index 26904b8e..a20fba28 100644 --- a/toontown/src/estate/DistributedEstate.py +++ b/toontown/src/estate/DistributedEstate.py @@ -15,18 +15,18 @@ from direct.task.Task import Task from toontown.toonbase import TTLocalizer import random -import cPickle +import pickle import time from direct.showbase import PythonUtil from toontown.hood import Place -import Estate -import HouseGlobals +from . import Estate +from . import HouseGlobals from toontown.estate import GardenGlobals from toontown.estate import DistributedFlower from toontown.estate import DistributedGagTree from toontown.estate import DistributedStatuary -import GardenDropGame -import GardenProgressMeter +from . import GardenDropGame +from . import GardenProgressMeter from toontown.estate import FlowerSellGUI from toontown.toontowngui import TTDialog @@ -260,7 +260,7 @@ def setEstateType(self, index): def setHouseInfo(self, houseInfo): self.notify.debug("setHouseInfo") - houseType, housePos = cPickle.loads(houseInfo) + houseType, housePos = pickle.loads(houseInfo) self.loadEstate(houseType, housePos) def loadEstate(self, indexList, posList): @@ -349,7 +349,7 @@ def getDeltaTime(self): curTime = time.time() % HouseGlobals.DAY_NIGHT_PERIOD dawnTime = self.dawnTime dT = ((curTime - dawnTime) - self.deltaTime) % HouseGlobals.DAY_NIGHT_PERIOD - print ("getDeltaTime = %s. curTime=%s. dawnTime=%s. serverTime=%s. deltaTime=%s" % (dT,curTime,dawnTime,self.serverTime,self.deltaTime)) + print(("getDeltaTime = %s. curTime=%s. dawnTime=%s. serverTime=%s. deltaTime=%s" % (dT,curTime,dawnTime,self.serverTime,self.deltaTime))) return dT def __initDaytimeTask(self): @@ -400,7 +400,7 @@ def __dayTimeTask(self, task): ts = 0 if hasattr(task, 'ts'): ts = task.ts - print "ts=%s" % ts + print("ts=%s" % ts) self.dayTrack.start(ts) taskMgr.doMethodLater(HouseGlobals.DAY_NIGHT_PERIOD-ts, self.__dayTimeTask, @@ -472,7 +472,7 @@ def __sunTask(self, task): else: self.__stopCrickets() self.__startBirds() - print "ts(sun)=%s" % ts + print("ts(sun)=%s" % ts) self.sunTrack.start(ts) taskMgr.doMethodLater(HouseGlobals.DAY_NIGHT_PERIOD-ts, self.__sunTask, diff --git a/toontown/src/estate/DistributedEstateAI.py b/toontown/src/estate/DistributedEstateAI.py index feb36f17..7300412c 100644 --- a/toontown/src/estate/DistributedEstateAI.py +++ b/toontown/src/estate/DistributedEstateAI.py @@ -5,21 +5,21 @@ from otp.otpbase import OTPGlobals from otp.ai.AIZoneData import AIZoneData from direct.distributed import DistributedObjectAI -import DistributedHouseAI +from . import DistributedHouseAI #import DistributedPlantAI from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task import random -import cPickle -import HouseGlobals +import pickle +from . import HouseGlobals from toontown.safezone import DistributedButterflyAI from toontown.safezone import ButterflyGlobals from toontown.safezone import ETreasurePlannerAI from toontown.safezone import DistributedPicnicTableAI from toontown.safezone import DistributedChineseCheckersAI -import DistributedTargetAI -import GardenGlobals +from . import DistributedTargetAI +from . import GardenGlobals from toontown.estate import DistributedFlowerAI from toontown.estate import DistributedGagTreeAI from toontown.estate import DistributedStatuaryAI @@ -125,16 +125,16 @@ def __init__(self, air, avId, zoneId, ts, dawn, valDict = None): self.gardenTable.append([0] * self.maxSlots) #ACCOUNT HAS 6 TOONS + self.rentalTimeStamp = 0 + def generate(self): DistributedEstateAI.notify.debug("DistEstate generate: %s" % self.doId) self.Estate_generated = 1 DistributedObjectAI.DistributedObjectAI.generate(self) - def generateWithRequiredAndId(self, doId, air, zoneId): self.notify.debug("DistributedEstateAI generateWithRequiredAndId") - DistributedObjectAI.DistributedObjectAI.generateWithRequiredAndId(self, doId, air, zoneId) # def requestDelete(self): @@ -331,7 +331,7 @@ def initEstateData(self, estateVal=None, numHouses=0, houseId=None, houseVal=Non if self.fireworksEnabled: pos = (29.7, -1.77, 10.93) - import DistributedFireworksCannonAI + from . import DistributedFireworksCannonAI self.estateFireworks = DistributedFireworksCannonAI.DistributedFireworksCannonAI(self.air, *pos) self.estateFireworks.generateWithRequired(self.zoneId) @@ -366,28 +366,11 @@ def initEstateData(self, estateVal=None, numHouses=0, houseId=None, houseVal=Non #self.air.queryObjectField("DistributedEstate", "setDecorData", self.doId, None) #self.b_setDecorData([[1,0,16,16,0]]) - def postHouseInit(self): - #print("post house Init") - - currentTime = time.time() - #print("time: %s \n cts:%s" % (currentTime, self.rentalTimeStamp)) - if self.rentalTimeStamp >= currentTime: - #print("starting cannons") - if self.rentalType == ToontownGlobals.RentalCannon: - self.makeCannonsUntil(self.rentalTimeStamp) - elif self.rentalType == ToontownGlobals.RentalGameTable: - self.makeGameTableUntil(self.rentalTimeStamp) - else: - self.b_setRentalTimeStamp(0) - pass - #print("not starting cannons") - - def startCannons(self, fool = 0): if self.cannonFlag: return from toontown.safezone import EFlyingTreasurePlannerAI - import DistributedCannonAI + from . import DistributedCannonAI # create flying treasures if not self.estateFlyingTreasurePlanner: @@ -458,7 +441,6 @@ def bootStrapEpochs(self): secondsNextEpoch = (time.mktime(tupleLastDay) + self.epochHourInSeconds + self.dayInSeconds + randomDelay) - currentTime - #should we do the epoch for the current day? #beforeEpoch = 1 #if tupleNewTime[3] >= self.timeToEpoch: @@ -509,16 +491,12 @@ def scheduleNextEpoch(self): tupleNextEpoch = time.localtime(whenNextEpoch) - self.notify.info("Next epoch to happen at %s" % (tupleNextEpoch)) - - - + self.notify.info("Next epoch to happen at %s" % (str(tupleNextEpoch))) def gardenInit(self, avIdList): self.sendUpdate('setIdList', [avIdList]) #self.bootStrapEpochs() - self.avIdList = avIdList #check to see if the av field tags match the house owners for index in range(len(avIdList)): @@ -658,7 +636,7 @@ def hasGagTree(self, ownerIndex, gagTrack, gagLevel): def findLowestGagTreePlot(self, ownerIndex, gagTrack, gagLevel): """Returns the lowest plot index of a gag tree that matches paremeters. Returns -1 if not found""" - for plotIndex in xrange(len(self.gardenTable[ownerIndex])): + for plotIndex in range(len(self.gardenTable[ownerIndex])): distLawnDecor = self.gardenTable[ownerIndex][plotIndex] if hasattr(distLawnDecor, 'gagTrack') and hasattr(distLawnDecor, 'gagLevel'): if distLawnDecor.gagTrack == gagTrack and \ @@ -770,7 +748,7 @@ def setGrowthLevelMyGarden(self, avId, growthLevel, specificHardPoint = -1): else: someLawnDecor = self.gardenTable[index][specificHardPoint] if someLawnDecor and hasattr(someLawnDecor,'b_setGrowthLevel'): - someLawnDecor.b_setGrowthLevel(growthLevel) + someLawnDecor.b_setGrowthLevel(growthLevel) def wiltMyGarden(self, avId, specificHardPoint = -1): self.notify.debug("wilting my garden %s" % (avId)) @@ -836,7 +814,7 @@ def addLawnDecorItem(self, slot, type, hardPoint, waterLevel, growthLevel, optio elif plantType == GardenGlobals.STATUARY_TYPE: #print("STATUARY") plantClass = DistributedStatuaryAI.DistributedStatuaryAI - if type in GardenGlobals.ToonStatuaryTypeIndices: + if type in GardenGlobals.ToonStatuaryTypeIndices: # Some hardcoded optional values for testing # optional = 2325 #Pig = 3861 #Bear = 3349 #Monkey = 2837 #Duck = 2325 #Rabbit = 1813 #Mouse = 1557 #Horse = 1045 #Cat = 533 #Dog = 21 testPlant = DistributedToonStatuaryAI.DistributedToonStatuaryAI(type, waterLevel, growthLevel, optional, slot, hardPoint) @@ -868,13 +846,13 @@ def placeLawnDecor(self, toonIndex, itemList): newBox.setupPetCollision() self.gardenBoxList[toonIndex].append(newBox) plotList = GardenGlobals.estatePlots[toonIndex] - for plotPointIndex in (range(len(plotList))): + for plotPointIndex in (list(range(len(plotList)))): item = self.findItemAtHardPoint(itemList, plotPointIndex) if not item or not GardenGlobals.PlantAttributes.get(item[0]): item = None if item: type = item[0] - if type not in GardenGlobals.PlantAttributes.keys(): + if type not in list(GardenGlobals.PlantAttributes.keys()): self.notify.warning('type %d not found in PlantAttributes, forcing it to 48' % type) type = 48 hardPoint = item[1] @@ -893,7 +871,7 @@ def removePlantAndPlaceGardenPlot(self, slot, hardPoint): self.removePlant(slot, hardPoint) itemId = self.addGardenPlot(slot,hardPoint) return itemId - + def addGardenPlot(self, slot, hardPoint): #print("HARDPOINT") @@ -1018,7 +996,7 @@ def setDecorData(self, decorData): #print ("setDecorData %s" % (self.doId)) def d_setDecorData(self, decorData): - print "FIXME when correct toon.dc is checked in" + print("FIXME when correct toon.dc is checked in") #self.sendUpdate("setDecorData", [decorData]) def getDecorData(self): @@ -1472,10 +1450,10 @@ def makeGameTableUntil(self, endTime): secondsUntil = endTime - currentTime taskMgr.remove(self.uniqueName("endGameTable")) taskMgr.doMethodLater(secondsUntil, self.endGameTable, self.uniqueName("endGameTable")) - + def startGameTable(self, avatar = 0): if self.gameTableFlag: - return + return if not self.picnicTable: self.notify.debug('creating game table') # Create the game table @@ -1485,7 +1463,7 @@ def startGameTable(self, avatar = 0): pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) self.gameTableFlag = True - + def endGameTable(self, avatar = 0): self.notify.debug('endGameTable') if not self.gameTableFlag: @@ -1495,14 +1473,14 @@ def endGameTable(self, avatar = 0): self.picnicTable.requestDelete() del self.picnicTable self.picnicTable = None - + # Tell the client that the game table rental is over self.sendUpdate("gameTableOver", []) - + self.gameTableFlag = False - + def rentItem(self, type, duration): - timeleft = 0 + timeleft = 0 currentTime = time.time() if self.rentalType == type: timeleft = self.rentalTimeStamp - currentTime @@ -1510,7 +1488,7 @@ def rentItem(self, type, duration): timeleft = 0 newTime = currentTime + (duration * 60) + timeleft self.air.writeServerEvent('rental', self.doId, "New rental end time %s." % (newTime)) - + self.b_setRentalTimeStamp(newTime) self.b_setRentalType(type) if type == ToontownGlobals.RentalCannon: @@ -1527,4 +1505,4 @@ def movePlanter(self, slot, index, x, y, heading): def printPlanterPos(self, slot, index): box = self.gardenBoxLispdb; t[slot][index] - print ("X %s Y%s Heading %s" % (box.getX(), box.getY, box.getH())) + print(("X %s Y%s Heading %s" % (box.getX(), box.getY, box.getH()))) diff --git a/toontown/src/estate/DistributedFireworksCannon.py b/toontown/src/estate/DistributedFireworksCannon.py index e8b67d9b..10172fe4 100644 --- a/toontown/src/estate/DistributedFireworksCannon.py +++ b/toontown/src/estate/DistributedFireworksCannon.py @@ -1,13 +1,13 @@ from toontown.toonbase.ToontownGlobals import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * -from HouseGlobals import * +from .HouseGlobals import * from toontown.effects import DistributedFireworkShow from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from pandac.PandaModules import CollisionSphere from pandac.PandaModules import CollisionNode -import FireworksGui +from . import FireworksGui class DistributedFireworksCannon(DistributedFireworkShow.DistributedFireworkShow): @@ -131,6 +131,6 @@ def localShootFirework(self, index): pos = dummy.getPos(render) dummy.removeNode() - print ("lauFirework: %s, col=%s" % (index,col1)) + print(("lauFirework: %s, col=%s" % (index,col1))) self.d_requestFirework(pos[0],pos[1],pos[2],style,col1,col2) diff --git a/toontown/src/estate/DistributedFireworksCannonAI.py b/toontown/src/estate/DistributedFireworksCannonAI.py index 1e8aae08..ccaeb51e 100644 --- a/toontown/src/estate/DistributedFireworksCannonAI.py +++ b/toontown/src/estate/DistributedFireworksCannonAI.py @@ -1,7 +1,7 @@ from toontown.toonbase.ToontownGlobals import * from otp.ai.AIBase import * from direct.task.Task import Task -from HouseGlobals import * +from .HouseGlobals import * from toontown.effects import DistributedFireworkShowAI from direct.fsm import ClassicFSM from direct.distributed import ClockDelta diff --git a/toontown/src/estate/DistributedFlowerAI.py b/toontown/src/estate/DistributedFlowerAI.py index ad334964..3994da39 100644 --- a/toontown/src/estate/DistributedFlowerAI.py +++ b/toontown/src/estate/DistributedFlowerAI.py @@ -1,6 +1,6 @@ from toontown.estate import DistributedPlantBaseAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals class DistributedFlowerAI(DistributedPlantBaseAI.DistributedPlantBaseAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFlowerAI') diff --git a/toontown/src/estate/DistributedFurnitureItem.py b/toontown/src/estate/DistributedFurnitureItem.py index d61996da..15d22751 100644 --- a/toontown/src/estate/DistributedFurnitureItem.py +++ b/toontown/src/estate/DistributedFurnitureItem.py @@ -5,10 +5,10 @@ from toontown.toonbase import ToontownGlobals from direct.distributed import DistributedObject from toontown.toonbase import TTLocalizer -import DistributedHouseItem +from . import DistributedHouseItem from direct.distributed import DistributedSmoothNode from direct.task import Task -import HouseGlobals +from . import HouseGlobals class DistributedFurnitureItem(DistributedHouseItem.DistributedHouseItem, DistributedSmoothNode.DistributedSmoothNode): diff --git a/toontown/src/estate/DistributedFurnitureItemAI.py b/toontown/src/estate/DistributedFurnitureItemAI.py index 1399d331..f5bac5d3 100644 --- a/toontown/src/estate/DistributedFurnitureItemAI.py +++ b/toontown/src/estate/DistributedFurnitureItemAI.py @@ -6,8 +6,8 @@ from direct.fsm import State from toontown.catalog import CatalogItem import random -import HouseGlobals -import DistributedHouseItemAI +from . import HouseGlobals +from . import DistributedHouseItemAI from direct.distributed import DistributedSmoothNodeAI class DistributedFurnitureItemAI(DistributedHouseItemAI.DistributedHouseItemAI, diff --git a/toontown/src/estate/DistributedFurnitureManager.py b/toontown/src/estate/DistributedFurnitureManager.py index f89d9606..068b7e11 100644 --- a/toontown/src/estate/DistributedFurnitureManager.py +++ b/toontown/src/estate/DistributedFurnitureManager.py @@ -38,7 +38,7 @@ def setOwnerId(self, ownerId): if self.ownerId == base.localAvatar.doId: self.cr.furnitureManager = self if self.cr.objectManager == None: - import houseDesign + from . import houseDesign self.cr.objectManager = houseDesign.ObjectManager() def setOwnerName(self, name): diff --git a/toontown/src/estate/DistributedFurnitureManagerAI.py b/toontown/src/estate/DistributedFurnitureManagerAI.py index af1de059..97b59b5c 100644 --- a/toontown/src/estate/DistributedFurnitureManagerAI.py +++ b/toontown/src/estate/DistributedFurnitureManagerAI.py @@ -1,8 +1,8 @@ from direct.distributed import DistributedObjectAI -import DistributedFurnitureItemAI -import DistributedBankAI -import DistributedClosetAI -import DistributedPhoneAI +from . import DistributedFurnitureItemAI +from . import DistributedBankAI +from . import DistributedClosetAI +from . import DistributedPhoneAI from toontown.catalog import CatalogFurnitureItem from toontown.catalog import CatalogSurfaceItem from toontown.catalog import CatalogWindowItem diff --git a/toontown/src/estate/DistributedGagTree.py b/toontown/src/estate/DistributedGagTree.py index 6f97a82b..f1b79eb5 100644 --- a/toontown/src/estate/DistributedGagTree.py +++ b/toontown/src/estate/DistributedGagTree.py @@ -5,8 +5,8 @@ from toontown.toonbase import ToontownBattleGlobals from toontown.toontowngui import TTDialog from toontown.toonbase import TTLocalizer -import GardenGlobals -import HouseGlobals +from . import GardenGlobals +from . import HouseGlobals from direct.task import Task from pandac.PandaModules import * from otp.otpbase import OTPGlobals diff --git a/toontown/src/estate/DistributedGagTreeAI.py b/toontown/src/estate/DistributedGagTreeAI.py index 35d4fd37..17dc0380 100644 --- a/toontown/src/estate/DistributedGagTreeAI.py +++ b/toontown/src/estate/DistributedGagTreeAI.py @@ -1,6 +1,6 @@ from toontown.estate import DistributedPlantBaseAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals class DistributedGagTreeAI(DistributedPlantBaseAI.DistributedPlantBaseAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedGagTreeAI') diff --git a/toontown/src/estate/DistributedGarden.py b/toontown/src/estate/DistributedGarden.py index 5e0a87c8..3ca2e3a3 100644 --- a/toontown/src/estate/DistributedGarden.py +++ b/toontown/src/estate/DistributedGarden.py @@ -13,11 +13,11 @@ from toontown.toonbase import TTLocalizer import random import random -import cPickle +import pickle from direct.showbase import PythonUtil from toontown.hood import Place -import Estate -import HouseGlobals +from . import Estate +from . import HouseGlobals class DistributedGarden(DistributedObject.DistributedObject): """ @@ -66,7 +66,7 @@ def delete(self): def sendNewProp(self, prop, x, y, z): self.notify.debug("sendNewProp") - print("new prop (%d) = %s,%s,%s" % (prop,x,y,z)) + print(("new prop (%d) = %s,%s,%s" % (prop,x,y,z))) if prop == HouseGlobals.PROP_ICECUBE: model = loader.loadModel("phase_8/models/props/icecube.bam") elif prop == HouseGlobals.PROP_FLOWER: diff --git a/toontown/src/estate/DistributedGardenAI.py b/toontown/src/estate/DistributedGardenAI.py index 12bd7ac7..f57ea94d 100644 --- a/toontown/src/estate/DistributedGardenAI.py +++ b/toontown/src/estate/DistributedGardenAI.py @@ -1,13 +1,13 @@ from otp.ai.AIBase import * from direct.distributed.ClockDelta import * from direct.distributed import DistributedObjectAI -import DistributedHouseAI +from . import DistributedHouseAI from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task import random -import cPickle -import HouseGlobals +import pickle +from . import HouseGlobals class DistributedGardenAI(DistributedObjectAI.DistributedObjectAI): diff --git a/toontown/src/estate/DistributedGardenBox.py b/toontown/src/estate/DistributedGardenBox.py index 00c8cec6..134088ba 100644 --- a/toontown/src/estate/DistributedGardenBox.py +++ b/toontown/src/estate/DistributedGardenBox.py @@ -1,7 +1,7 @@ -import DistributedLawnDecor +from . import DistributedLawnDecor from direct.directnotify import DirectNotifyGlobal from direct.showbase.ShowBase import * -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer from toontown.estate import PlantingGUI from toontown.estate import PlantTreeGUI diff --git a/toontown/src/estate/DistributedGardenBoxAI.py b/toontown/src/estate/DistributedGardenBoxAI.py index 34e8ea41..56e3e98d 100644 --- a/toontown/src/estate/DistributedGardenBoxAI.py +++ b/toontown/src/estate/DistributedGardenBoxAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * -import DistributedLawnDecorAI +from . import DistributedLawnDecorAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals from direct.showbase.ShowBase import * diff --git a/toontown/src/estate/DistributedGardenPlot.py b/toontown/src/estate/DistributedGardenPlot.py index b786e894..23689269 100644 --- a/toontown/src/estate/DistributedGardenPlot.py +++ b/toontown/src/estate/DistributedGardenPlot.py @@ -1,8 +1,8 @@ -import DistributedLawnDecor +from . import DistributedLawnDecor from direct.directnotify import DirectNotifyGlobal from direct.showbase.ShowBase import * from direct.interval.IntervalGlobal import * -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer from toontown.estate import PlantingGUI from toontown.estate import PlantTreeGUI @@ -76,7 +76,7 @@ def loadModel(self): if self.defaultModel: self.model = loader.loadModel(self.defaultModel) - if type(self.plotScale) == types.TupleType: + if type(self.plotScale) == tuple: self.model.setScale(*self.plotScale) else: self.model.setScale(self.plotScale) diff --git a/toontown/src/estate/DistributedGardenPlotAI.py b/toontown/src/estate/DistributedGardenPlotAI.py index e2a95088..fe281daa 100644 --- a/toontown/src/estate/DistributedGardenPlotAI.py +++ b/toontown/src/estate/DistributedGardenPlotAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * -import DistributedLawnDecorAI +from . import DistributedLawnDecorAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals from direct.showbase.ShowBase import * @@ -18,12 +18,12 @@ def plantNothing(self, burntBeans): senderId = self.air.getAvatarIdFromSender() toon = simbase.air.doId2do.get(senderId) toon.takeMoney(burntBeans) - print("burning money%s" % (burntBeans)) + print(("burning money%s" % (burntBeans))) #deliberately not burning the special, since they cost so much, #beside Clarabelle tells you what beans to plant it with anyway. def plantFlower(self, species, variety): - print "planting flower species=%d variety=%d" % (species, variety) + print("planting flower species=%d variety=%d" % (species, variety)) senderId = self.air.getAvatarIdFromSender() zoneId = self.zoneId @@ -107,7 +107,7 @@ def doGardenAccelerator(self): estate.doEpochNow(onlyForThisToonIndex = self.ownerIndex) def plantStatuary(self, species): - print "planting item species=%d " % (species) + print("planting item species=%d " % (species)) if species == GardenGlobals.GardenAcceleratorSpecies: self.doGardenAccelerator() else: diff --git a/toontown/src/estate/DistributedHouse.py b/toontown/src/estate/DistributedHouse.py index 02be2ecd..1062c35e 100644 --- a/toontown/src/estate/DistributedHouse.py +++ b/toontown/src/estate/DistributedHouse.py @@ -16,7 +16,7 @@ import random from direct.showbase import PythonUtil from toontown.hood import Place -import HouseGlobals +from . import HouseGlobals from toontown.building import ToonInteriorColors from direct.showbase.MessengerGlobal import messenger @@ -25,9 +25,11 @@ class DistributedHouse(DistributedObject.DistributedObject): This is the house object on the client """ notify = directNotify.newCategory("DistributedHouse") + notify.setDebug(True) def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) + print(('yeah', cr)) self.houseType = None self.avId = -1 diff --git a/toontown/src/estate/DistributedHouseAI.py b/toontown/src/estate/DistributedHouseAI.py index ae34deb6..808d2195 100644 --- a/toontown/src/estate/DistributedHouseAI.py +++ b/toontown/src/estate/DistributedHouseAI.py @@ -3,13 +3,13 @@ from pandac.PandaModules import * from toontown.ai.ToontownAIMsgTypes import * from direct.distributed import DistributedObjectAI -import DistributedHouseAI +from . import DistributedHouseAI # import DistributedGardenAI -import DistributedCannonAI -import DistributedHouseInteriorAI -import DistributedHouseDoorAI -import DistributedMailboxAI -import DistributedFurnitureManagerAI +from . import DistributedCannonAI +from . import DistributedHouseInteriorAI +from . import DistributedHouseDoorAI +from . import DistributedMailboxAI +from . import DistributedFurnitureManagerAI from toontown.toon import DistributedToonAI from toontown.catalog import CatalogItemList from toontown.catalog import CatalogItem @@ -24,8 +24,8 @@ from direct.fsm import State from direct.task import Task import random -import HouseGlobals -import CannonGlobals +from . import HouseGlobals +from . import CannonGlobals from toontown.ai import DatabaseObject from direct.showbase import PythonUtil from toontown.toonbase import ToontownGlobals @@ -41,6 +41,7 @@ class DistributedHouseAI(DistributedObjectAI.DistributedObjectAI): """ notify = directNotify.newCategory("DistributedHouseAI") + notify.setDebug(True) HouseModel = None @@ -52,13 +53,13 @@ def __init__(self, air, doId, estateId, zoneId, posIndex): # self.garden = None self.cannon = None self.housePosInd = posIndex - + # these members are stored in the db and initialized in the # initFromServerResponse function (called by the estateAI). # These are the default values until they are initialized by # the database. (It is more convenient here not to depend on # initial value settings in the dc file.) - + self.houseType = HouseGlobals.HOUSE_DEFAULT self.gardenPosInd = 0 self.ownerId = 0 @@ -72,7 +73,7 @@ def __init__(self, air, doId, estateId, zoneId, posIndex): self.interiorWindows = CatalogItemList.CatalogItemList() self.deletedItems = CatalogItemList.CatalogItemList() self.cannonEnabled = 0 - + # initialize the stuff that doesn't need a response from the database self.interior = None self.interiorManager = None @@ -139,11 +140,11 @@ def setupEnvirons(self): # Outside door: self.door = DistributedHouseDoorAI.DistributedHouseDoorAI( self.air, self.doId, DoorTypes.EXT_STANDARD) - + # Inside door of the same door (different zone, and different distributed object): self.insideDoor = DistributedHouseDoorAI.DistributedHouseDoorAI( self.air, self.doId, DoorTypes.INT_STANDARD) - + # Tell them about each other: self.door.setOtherDoor(self.insideDoor) self.insideDoor.setOtherDoor(self.door) @@ -163,10 +164,10 @@ def setupEnvirons(self): # create a cannon #if self.cannonEnabled and simbase.config.GetBool('estate-cannons', 0): # posHpr = CannonGlobals.cannonDrops[self.housePosInd] - # self.cannon = DistributedCannonAI.DistributedCannonAI(self.air, self.estateId, + # self.cannon = DistributedCannonAI.DistributedCannonAI(self.air, self.estateId, # *posHpr) # self.cannon.generateWithRequired(self.zoneId) - + if self.interior != None: self.interior.requestDelete() self.interior = None @@ -218,13 +219,13 @@ def __hasPhone(self): for item in self.interiorItems: if (item.getFlags() & CatalogFurnitureItem.FLPhone) != 0: return 1 - + for item in self.atticItems: if (item.getFlags() & CatalogFurnitureItem.FLPhone) != 0: return 1 return 0 - + def resetFurniture(self): # Deletes all of the furniture, wallpaper, and window items, and # recreates it all. @@ -236,7 +237,7 @@ def resetFurniture(self): # Create a furniture manager for the interior furniture. self.interiorManager = DistributedFurnitureManagerAI.DistributedFurnitureManagerAI(self.air, self, 1) self.interiorManager.generateWithRequired(self.interiorZoneId) - + # Create all of the furniture items inside the house. for item in self.interiorItems: self.interiorManager.manifestInteriorItem(item) @@ -245,7 +246,6 @@ def resetFurniture(self): # interior. self.interior.b_setWallpaper(self.interiorWallpaper) self.interior.b_setWindows(self.interiorWindows) - def setInitialFurniture(self): # Resets the furniture to the initial default furniture for an @@ -272,7 +272,7 @@ def setInitialFurniture(self): CatalogFurnitureItem.CatalogFurnitureItem(700, posHpr = (4.44649, -0.463924, 0.025, 0, 0, 0)), CatalogFurnitureItem.CatalogFurnitureItem(1399, posHpr = (-10.1, 2.0, 0.1, 0, 0, 0)), ]) - + InitialFurnitureB = CatalogItemList.CatalogItemList([ CatalogFurnitureItem.CatalogFurnitureItem(200, posHpr = (-3.2, 17.0, 0.025, -0.2, 0.0, 0.0)), CatalogFurnitureItem.CatalogFurnitureItem(400, posHpr = (-18.6, -7.1, 0.025, 90.0, 0.0, 0.0)), @@ -299,7 +299,7 @@ def setInitialFurniture(self): CatalogFurnitureItem.CatalogFurnitureItem(1399, posHpr = (-10.1, 2.0, 0.1, 0, 0, 0)), ]) - + self.b_setDeletedItems(CatalogItemList.CatalogItemList()) self.b_setAtticItems(CatalogItemList.CatalogItemList()) self.b_setInteriorItems(random.choice((InitialFurnitureA, @@ -329,12 +329,12 @@ def setInitialFurniture(self): CatalogWindowItem.CatalogWindowItem(20, placement = 2), CatalogWindowItem.CatalogWindowItem(20, placement = 4), ])) - + def b_setHouseType(self, houseType): self.setHouseType(houseType) self.d_setHouseType(houseType) - + def d_setHouseType(self, houseType): self.sendUpdate("setHouseType", [houseType]) @@ -364,7 +364,7 @@ def setHousePos(self, housePosInd): def getHousePos(self): self.notify.debug('getHousePos') return self.housePosInd - + def b_setAvatarId(self, avId): self.notify.debug("b_setAvatarId(%s) = %s" % (self.doId, avId)) self.setAvatarId(avId) @@ -372,17 +372,17 @@ def b_setAvatarId(self, avId): def d_setAvatarId(self, avId): self.sendUpdate("setAvatarId", [avId]) - + def setAvatarId(self, avId): self.notify.debug("setAvatarId(%s) = %s" % (self.doId, avId)) self.ownerId = avId # set the avatars houseId also try: av = self.air.doId2do[avId] - av.b_setHouseId(self.doId) + av.b_setHouseId(self.doId) except: self.notify.debug("unable to set av(%s)'s houseId" % avId) - + def getAvatarId(self): self.notify.debug("getAvatarId(%s)" % (self.doId)) return self.ownerId @@ -438,7 +438,7 @@ def addAtticItem(self, item): self.removeOldItem(CatalogFurnitureItem.FLCloset) self.makeRoomFor(1) - + self.atticItems.append(item) self.d_setAtticItems(self.atticItems) if self.interiorManager: @@ -576,7 +576,7 @@ def reconsiderDeletedItems(self): deleted, remaining = self.deletedItems.extractDeliveryItems(now) if deleted: self.notify.info("Aging out deleted items for %s, eliminated %s" % (self.doId, deleted)) - + self.deletedItems = remaining return deleted @@ -656,19 +656,18 @@ def setInteriorWindows(self, items): def getInteriorWindows(self): return self.interiorWindows.getBlob(store = CatalogItem.Customization | CatalogItem.WindowPlacement) - def checkOwner(self): # Checks whether the owner still exists, and checks whether # he's got stuff waiting in his mailbox. - + self.notify.debug("__checkOwner: %s" % (self.doId)) if self.ownerId == 0: # No owner. Duh. self.d_setHouseReady() return - + owner = self.air.doId2do.get(self.ownerId) if owner and hasattr(owner, "onOrder"): # The avatar is in the live database. @@ -685,9 +684,9 @@ def checkOwner(self): db.doneEvent = gotAvEvent db.getFields(['setDeliverySchedule', 'setMailboxContents', 'setMaxHp', 'setAwardMailboxContents']) - + def __gotOwnerAv(self, db, retcode): - assert(self.notify.debug("__gotOwnerAv(%s, %s): %s" % (db.values.keys(), retcode, self.doId))) + assert(self.notify.debug("__gotOwnerAv(%s, %s): %s" % (list(db.values.keys()), retcode, self.doId))) if retcode != 0: self.notify.warning("Avatar %s for house %s does not exist!" % (self.ownerId, self.doId)) return @@ -700,13 +699,13 @@ def __gotOwnerAv(self, db, retcode): dg = db.values.get('setDeliverySchedule') if dg: di = PyDatagramIterator(dg) - blob = di.getString() + blob = di.getBlob() onOrder = CatalogItemList.CatalogItemList(blob, store = CatalogItem.Customization | CatalogItem.DeliveryDate) - + dg = db.values.get('setMailboxContents') if dg: di = PyDatagramIterator(dg) - blob = di.getString() + blob = di.getBlob() mailboxContents = CatalogItemList.CatalogItemList(blob, store = CatalogItem.Customization) dg = db.values.get('setMaxHp') @@ -717,9 +716,9 @@ def __gotOwnerAv(self, db, retcode): dg = db.values.get('setAwardMailboxContents') if dg: di = PyDatagramIterator(dg) - blob = di.getString() + blob = di.getBlob() awardMailboxContents = CatalogItemList.CatalogItemList(blob, store = CatalogItem.Customization) - + #self.b_setCannonEnabled(1) self.__checkMailbox(onOrder, mailboxContents, 0, awardMailboxContents) @@ -727,7 +726,7 @@ def __checkMailbox(self, onOrder, mailboxContents, liveDatabase, awardMailboxCon # We have gotten the above data for the owner of this house. # Check whether we should raise the flag because he has # something in his mailbox. - + assert(self.notify.debug("__checkMailbox(%s, %s, %s): %s" % (onOrder, mailboxContents, liveDatabase, self.doId))) @@ -754,7 +753,7 @@ def __checkMailbox(self, onOrder, mailboxContents, liveDatabase, awardMailboxCon else: self.notify.debug("delivery has been completed, raising flag: %s" % (self.doId)) self.mailbox.b_setFullIndicator(1) - + # Now tell the client that the house is ready. self.d_setHouseReady() @@ -772,7 +771,7 @@ def setCannonEnabled(self, index): posHpr = CannonGlobals.cannonDrops[self.housePosInd] estate = simbase.air.doId2do[self.estateId] targetId = estate.target.doId - self.cannon = DistributedCannonAI.DistributedCannonAI(self.air, self.estateId, + self.cannon = DistributedCannonAI.DistributedCannonAI(self.air, self.estateId, targetId, *posHpr) self.cannon.generateWithRequired(self.zoneId) elif self.cannon and not self.cannonEnabled: @@ -783,7 +782,7 @@ def setCannonEnabled(self, index): def getCannonEnabled(self): return self.cannonEnabled - + def d_setHouseReady(self): self.notify.debug("setHouseReady: %s" % (self.doId)) self.sendUpdate("setHouseReady", []) diff --git a/toontown/src/estate/DistributedHouseDoor.py b/toontown/src/estate/DistributedHouseDoor.py index 03491b26..53b7e671 100644 --- a/toontown/src/estate/DistributedHouseDoor.py +++ b/toontown/src/estate/DistributedHouseDoor.py @@ -102,7 +102,7 @@ def __gotRelatedHouse(self): def getBuilding(self, allowEmpty=False): # Once we find it, we store it, so we don't have to find it again. - if (not self.__dict__.has_key('building')): + if ('building' not in self.__dict__): if self.doorType == DoorTypes.INT_STANDARD: #if ZoneUtil.isInterior(self.zoneId): # building interior. diff --git a/toontown/src/estate/DistributedHouseInterior.py b/toontown/src/estate/DistributedHouseInterior.py index f9cf601b..331f7eef 100644 --- a/toontown/src/estate/DistributedHouseInterior.py +++ b/toontown/src/estate/DistributedHouseInterior.py @@ -8,7 +8,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed import DistributedObject -import HouseGlobals +from . import HouseGlobals from toontown.catalog import CatalogItemList from toontown.catalog import CatalogItem from toontown.catalog import CatalogSurfaceItem diff --git a/toontown/src/estate/DistributedHouseItemAI.py b/toontown/src/estate/DistributedHouseItemAI.py index 2489d8f4..12de4580 100644 --- a/toontown/src/estate/DistributedHouseItemAI.py +++ b/toontown/src/estate/DistributedHouseItemAI.py @@ -5,7 +5,7 @@ from direct.distributed import ClockDelta from direct.fsm import State import random -import HouseGlobals +from . import HouseGlobals class DistributedHouseItemAI(DistributedObjectAI.DistributedObjectAI): diff --git a/toontown/src/estate/DistributedMailbox.py b/toontown/src/estate/DistributedMailbox.py index fc626a23..3767d614 100644 --- a/toontown/src/estate/DistributedMailbox.py +++ b/toontown/src/estate/DistributedMailbox.py @@ -1,6 +1,6 @@ from direct.distributed import DistributedObject from toontown.toonbase import ToontownGlobals -import MailboxGlobals +from . import MailboxGlobals from toontown.catalog import CatalogItem from toontown.catalog import CatalogItemList from toontown.toontowngui import TTDialog diff --git a/toontown/src/estate/DistributedMailboxAI.py b/toontown/src/estate/DistributedMailboxAI.py index 1ad990fe..717d5772 100644 --- a/toontown/src/estate/DistributedMailboxAI.py +++ b/toontown/src/estate/DistributedMailboxAI.py @@ -1,5 +1,5 @@ from direct.distributed import DistributedObjectAI -import MailboxGlobals +from . import MailboxGlobals from toontown.catalog import CatalogItem from toontown.catalog import CatalogItemList from toontown.toonbase import ToontownGlobals @@ -91,7 +91,7 @@ def avatarEnter(self): return # Fetch the actual avatar object - av = self.air.doId2do.get(avId) + av = self.air.doId2do.get(avId) if not av: self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.avatarEnter unknown') self.notify.warning("av %s not in doId2do tried to pick up mailbox" % (avId)) @@ -113,7 +113,7 @@ def avatarEnter(self): # Update the quest manager. Yes, there are mailbox quests. self.air.questManager.toonOpenedMailbox(self.av) - + if len(av.mailboxContents) != 0: # Purchases are available! Tell the client; he will # start accepting the items one at a time when he's @@ -124,11 +124,11 @@ def avatarEnter(self): # start accepting the items one at a time when he's # ready. self.sendAwardCatalog() - + elif ((av.numMailItems > 0) or (av.getNumInvitesToShowInMailbox() > 0)): # he's got mail, tell the client self.sendMail() - + elif len(av.onOrder) != 0: self.sendUpdate("setMovie", [MailboxGlobals.MAILBOX_MOVIE_WAITING, avId]) self.sendClearMovie() @@ -166,7 +166,7 @@ def sendAwardCatalog(self): def sendMail(self): DistributedMailboxAI.notify.debug("sendMail") # Now open the catalog up on the client. - self.sendUpdate("setMovie", [MailboxGlobals.MAILBOX_MOVIE_READY, self.av.doId]) + self.sendUpdate("setMovie", [MailboxGlobals.MAILBOX_MOVIE_READY, self.av.doId]) #RAU TODO set mailNotify to oldItems # The avatar has seen his items now. #if self.av.mailNotify == ToontownGlobals.NewItems: @@ -188,7 +188,7 @@ def __handleUnexpectedExit(self, avId): def __handleBootMessage(self, avId): self.notify.warning('avatar:' + str(avId) + ' got booted ') self.sendClearMovie() - + def sendExitMovie(self): assert(DistributedMailboxAI.notify.debug('sendExitMovie()')) # Send movie to play closing sound @@ -214,16 +214,12 @@ def isItemIndexValid(self, item, itemIndex): if itemIndex < 0 or itemIndex >= (len(self.av.mailboxContents) + len(self.av.awardMailboxContents)): result = False if result: - if not item.isAward(): - if adjustedMailboxContentsIndex < 0: - result = False - elif adjustedMailboxContentsIndex >= len(self.av.mailboxContents): - result = False - else: - if self.av.mailboxContents[adjustedMailboxContentsIndex] != item: - result = False + if adjustedMailboxContentsIndex < 0: + result = False + elif adjustedMailboxContentsIndex >= len(self.av.mailboxContents): + result = False else: - if self.av.awardMailboxContents[itemIndex] != item: + if self.av.mailboxContents[adjustedMailboxContentsIndex] != item: result = False return result @@ -237,8 +233,7 @@ def acceptItemMessage(self, context, blob, itemIndex, optional): if self.av: adjustedMailboxContentsIndex = itemIndex - len(self.av.awardMailboxContents) else: - adjustedMailboxContentsIndex = itemIndex - isAward = item.isAward() + adjustedMailboxContentsIndex = itemIndex if self.busy != avId: # The client should filter this already. self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptItem busy with %s' % (self.busy)) @@ -249,26 +244,22 @@ def acceptItemMessage(self, context, blob, itemIndex, optional): self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptItem invalid index %s' % (itemIndex)) retcode = ToontownGlobals.P_InvalidIndex elif not self.isItemIndexValid(item, itemIndex): - self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptItem invalid index %d isAward=%s adjustedIndex=%d' % (itemIndex, isAward, adjustedMailboxContentsIndex)) + self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptItem invalid index %d adjustedIndex=%d' % (itemIndex, adjustedMailboxContentsIndex)) retcode = ToontownGlobals.P_InvalidIndex else: # Give the item to the user. retcode = item.recordPurchase(self.av, optional) if retcode >= 0: - if isAward: - del self.av.awardMailboxContents[itemIndex] - self.av.b_setAwardMailboxContents(self.av.awardMailboxContents) - else: - del self.av.mailboxContents[adjustedMailboxContentsIndex] - self.av.b_setMailboxContents(self.av.mailboxContents) + del self.av.mailboxContents[adjustedMailboxContentsIndex] + self.av.b_setMailboxContents(self.av.mailboxContents) elif retcode == ToontownGlobals.P_ReachedPurchaseLimit or \ retcode == ToontownGlobals.P_NoRoomForItem: pass #del self.av.mailboxContents[itemIndex] - #self.av.b_setMailboxContents(self.av.mailboxContents) - #import pdb; pdb.set_trace() + #self.av.b_setMailboxContents(self.av.mailboxContents) + #import pdb; pdb.set_trace() self.sendUpdateToAvatarId(avId, "acceptItemResponse", [context, retcode]) - + def discardItemMessage(self, context, blob, itemIndex, optional): DistributedMailboxAI.notify.debug("discardItemMessage") # Sent from the client code to request a particular item from @@ -279,8 +270,7 @@ def discardItemMessage(self, context, blob, itemIndex, optional): if self.av: adjustedMailboxContentsIndex = itemIndex - len(self.av.awardMailboxContents) else: - adjustedMailboxContentsIndex = itemIndex - isAward = item.isAward() + adjustedMailboxContentsIndex = itemIndex if self.busy != avId: # The client should filter this already. self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptItem busy with %s' % (self.busy)) @@ -290,20 +280,14 @@ def discardItemMessage(self, context, blob, itemIndex, optional): self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.discardItem invalid index %s' % (itemIndex)) retcode = ToontownGlobals.P_InvalidIndex elif not self.isItemIndexValid(item, itemIndex): - self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.discardItem invalid index %d isAward=%s adjustedIndex=%d' % (itemIndex, isAward, adjustedMailboxContentsIndex )) + self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.discardItem invalid index %d adjustedIndex=%d' % (itemIndex, adjustedMailboxContentsIndex )) retcode = ToontownGlobals.P_InvalidIndex else: # delete the item - if item.isAward(): - del self.av.awardMailboxContents[itemIndex] - self.air.writeServerEvent("Discarding Item award", avId, "discarded item %s" % (item.getName())) - self.av.b_setAwardMailboxContents(self.av.awardMailboxContents) - else: - del self.av.mailboxContents[adjustedMailboxContentsIndex] - self.air.writeServerEvent("Discarding Item", avId, "discarded item %s" % (item.getName())) - self.av.b_setMailboxContents(self.av.mailboxContents) + del self.av.mailboxContents[adjustedMailboxContentsIndex] + self.air.writeServerEvent("Discarding Item", avId, "discarded item %s" % (item.getName())) + self.av.b_setMailboxContents(self.av.mailboxContents) - self.sendUpdateToAvatarId(avId, "discardItemResponse", [context, retcode]) def acceptInviteMessage(self, context, inviteKey): @@ -324,7 +308,7 @@ def acceptInviteMessage(self, context, inviteKey): self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptInvite busy with %s' % (self.busy)) self.notify.warning("Got unexpected accept invite request from %s while busy with %s." % (avId, self.busy)) retcode = ToontownGlobals.P_NotAtMailbox - + elif not validInviteKey: self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.acceptInvite invalid inviteKey %s' % (inviteKey)) retcode = ToontownGlobals.P_InvalidIndex @@ -335,7 +319,7 @@ def acceptInviteMessage(self, context, inviteKey): if not (retcode == None): self.sendUpdateToAvatarId(avId, "acceptItemResponse", [context, retcode]) - + def respondToAcceptInviteCallback(self, context, inviteKey, retcode): """Tell the client the result of accepting/rejecting the invite.""" @@ -357,7 +341,7 @@ def markInviteReadButNotReplied(self, inviteKey): break if validInviteKey: self.air.partyManager.markInviteReadButNotReplied(inviteKey) - + def rejectInviteMessage(self, context, inviteKey): DistributedMailboxAI.notify.debug("rejectInviteMessage") # Sent from the client code to request a particular item from @@ -376,7 +360,7 @@ def rejectInviteMessage(self, context, inviteKey): self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.rejectInvite busy with %s' % (self.busy)) DistributedMailboxAI.notify.warning("Got unexpected reject invite request from %s while busy with %s." % (avId, self.busy)) retcode = ToontownGlobals.P_NotAtMailbox - + elif not validInviteKey: self.air.writeServerEvent('suspicious', avId, 'DistributedMailboxAI.rejectInvite invalid inviteKey %s' % (inviteKey)) retcode = ToontownGlobals.P_InvalidIndex @@ -387,7 +371,7 @@ def rejectInviteMessage(self, context, inviteKey): if not (retcode == None): self.sendUpdateToAvatarId(avId, "discardItemResponse", [context, retcode]) - + def respondToRejectInviteCallback(self, context, inviteKey, retcode): DistributedMailboxAI.notify.debug("respondToRejectInviteCallback") @@ -395,4 +379,4 @@ def respondToRejectInviteCallback(self, context, inviteKey, retcode): if self.av: self.sendUpdateToAvatarId(self.av.doId, "discardItemResponse", [context, retcode]) pass - + diff --git a/toontown/src/estate/DistributedPhone.py b/toontown/src/estate/DistributedPhone.py index b46b69f2..b51b23b2 100644 --- a/toontown/src/estate/DistributedPhone.py +++ b/toontown/src/estate/DistributedPhone.py @@ -1,12 +1,12 @@ from toontown.toonbase import ToontownGlobals -import PhoneGlobals +from . import PhoneGlobals from toontown.catalog import CatalogScreen from toontown.catalog import CatalogItem from toontown.toontowngui import TTDialog from toontown.toonbase import TTLocalizer -import DistributedHouseInterior +from . import DistributedHouseInterior from direct.actor import Actor -import DistributedFurnitureItem +from . import DistributedFurnitureItem from direct.distributed import ClockDelta from direct.showbase import PythonUtil from direct.showutil import Rope @@ -369,7 +369,7 @@ def requestGiftPurchase(self, item, targetDoID, callback, optional = -1): # parameters: the appropriate code from PhoneGlobals.py, # followed by the item itself. - print "in the client phone" + print("in the client phone") blob = item.getBlob(store = CatalogItem.Customization) context = self.getCallbackContext(callback, [item]) diff --git a/toontown/src/estate/DistributedPhoneAI.py b/toontown/src/estate/DistributedPhoneAI.py index 6efa4551..3bad2f49 100644 --- a/toontown/src/estate/DistributedPhoneAI.py +++ b/toontown/src/estate/DistributedPhoneAI.py @@ -1,5 +1,5 @@ -import DistributedFurnitureItemAI -import PhoneGlobals +from . import DistributedFurnitureItemAI +from . import PhoneGlobals from toontown.catalog import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.ai import DatabaseObject @@ -33,7 +33,7 @@ def __init__(self, air, furnitureMgr, item): scale = ToontownGlobals.toonBodyScales[animalStyle] self.initialScale = (scale, scale, scale) - + def getInitialScale(self): return self.initialScale @@ -64,7 +64,7 @@ def avatarEnter(self): return # Fetch the actual avatar object - av = self.air.doId2do.get(avId) + av = self.air.doId2do.get(avId) if not av: self.air.writeServerEvent('suspicious', avId, 'DistributedPhoneAI.avatarEnter unknown') self.notify.warning("av %s not in doId2do tried to pick up phone" % (avId)) @@ -87,7 +87,7 @@ def avatarEnter(self): # any phone. if len(av.weeklyCatalog) + len(av.monthlyCatalog) + len(av.backCatalog) != 0: self.lookupHouse() - + else: # No catalog yet. self.d_setMovie(PhoneGlobals.PHONE_MOVIE_EMPTY, avId) @@ -139,9 +139,9 @@ def lookupHouse(self): db.getFields(['setAtticItems', 'setAtticWallpaper', 'setAtticWindows', 'setInteriorItems']) - + def __gotHouse(self, db, retcode): - assert(self.notify.debug("__gotHouse(%s, %s): %s" % (db.values.keys(), retcode, self.doId))) + assert(self.notify.debug("__gotHouse(%s, %s): %s" % (list(db.values.keys()), retcode, self.doId))) if retcode != 0: self.notify.warning("House %s for avatar %s does not exist!" % (self.av.houseId, self.av.doId)) self.sendCatalog(0) @@ -177,7 +177,7 @@ def __gotHouse(self, db, retcode): numAtticItems = len(atticItems) + len(atticWallpaper) + len(atticWindows) numHouseItems = numAtticItems + len(interiorItems) self.sendCatalog(numHouseItems) - + def sendCatalog(self, numHouseItems): # Send the setMovie command to the user to tell him to open up @@ -187,7 +187,7 @@ def sendCatalog(self, numHouseItems): # Now open the catalog up on the client. self.d_setMovie(PhoneGlobals.PHONE_MOVIE_PICKUP, self.av.doId) - + # The avatar has seen his catalog now. if self.av.catalogNotify == ToontownGlobals.NewItems: self.av.b_setCatalogNotify(ToontownGlobals.OldItems, self.av.mailboxNotify) @@ -210,7 +210,7 @@ def __handleUnexpectedExit(self, avId): def __handleBootMessage(self, avId): self.notify.warning('avatar:' + str(avId) + ' got booted ') self.sendClearMovie() - + def sendClearMovie(self): assert(self.notify.debug('sendClearMovie()')) # Ignore unexpected exits on whoever I was busy with @@ -230,9 +230,9 @@ def requestPurchaseMessage(self, context, blob, optional): else: # The user is requesting purchase of one particular item. retcode = self.air.catalogManager.purchaseItem(self.av, item, optional) - + self.sendUpdateToAvatarId(avId, "requestPurchaseResponse", [context, retcode]) - + def requestGiftPurchaseMessage(self, context, targetDoID, blob, optional): # print "in the AI phone" # Sent from the client code to request a particular purchase item. to be sent to a target doid @@ -245,19 +245,19 @@ def requestGiftPurchaseMessage(self, context, targetDoID, blob, optional): retcode = ToontownGlobals.P_NotShopping #in this case we can send the response immediately self.sendUpdateToAvatarId(sAvId, "requestGiftPurchaseResponse", [context, retcode]) - + elif self.air.catalogManager.payForGiftItem(self.av, item, retcode): # The user is requesting purchase of one particular item.in this case we have to wait for the purchase to go through # which involves waiting for a query from the database: intancing the gift receiver on the local machine - + self.checkAvatarThenGift(targetDoID, sAvId, item, context) #simbase.air.deliveryManager.sendRequestPurchaseGift(item, targetDoID, sAvId, context, self) - + #can't return immediately must what for the query to go through else: retcode = ToontownGlobals.P_NotEnoughMoney self.sendUpdateToAvatarId(sAvId, "requestGiftPurchaseResponse", [context, retcode]) - + def checkAvatarThenGift(self, targetDoID, sAvId, item, context): # Requests a particular avatar. The avatar will be requested # from the database and stored in self.rav when the response is @@ -266,22 +266,20 @@ def checkAvatarThenGift(self, targetDoID, sAvId, item, context): checkMessage = "gift check %s" % (targetDoID) self.acceptOnce(("gift check %s" % (targetDoID)), self.__gotAvGiftCheck, [targetDoID, sAvId, item, context]) - + db = DatabaseObject.DatabaseObject(self.air, targetDoID) db.doneEvent = checkMessage fields = ['setDNAString'] - + db.getFields(fields) - + def __gotAvGiftCheck(self, targetDoID, sAvId, item, context, db, data2): - valid = db.values.has_key('setDNAString') + valid = 'setDNAString' in db.values if valid: simbase.air.deliveryManager.sendRequestPurchaseGift(item, targetDoID, sAvId, context, self) else: self.air.writeServerEvent('suspicious', sAvId, 'Attempted to buy a gift for %s which is not a toon' % (targetDoID)) - - def d_setMovie(self, mode, avId): timestamp = ClockDelta.globalClockDelta.getRealNetworkTime(bits = 32) diff --git a/toontown/src/estate/DistributedPlantBase.py b/toontown/src/estate/DistributedPlantBase.py index 634a0967..135d968f 100644 --- a/toontown/src/estate/DistributedPlantBase.py +++ b/toontown/src/estate/DistributedPlantBase.py @@ -1,8 +1,8 @@ -import DistributedLawnDecor +from . import DistributedLawnDecor from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal from direct.showbase.ShowBase import * -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer class DistributedPlantBase(DistributedLawnDecor.DistributedLawnDecor): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedPlantBase') @@ -16,7 +16,7 @@ def __init__(self, cr): def delete(self): self.notify.debug('delete') - for waterTrack in self.waterTrackDict.values(): + for waterTrack in list(self.waterTrackDict.values()): if waterTrack: waterTrack.finish() self.waterTrackDict = None diff --git a/toontown/src/estate/DistributedPlantBaseAI.py b/toontown/src/estate/DistributedPlantBaseAI.py index 8702dead..8dae964e 100644 --- a/toontown/src/estate/DistributedPlantBaseAI.py +++ b/toontown/src/estate/DistributedPlantBaseAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * -import DistributedLawnDecorAI +from . import DistributedLawnDecorAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals from direct.showbase.ShowBase import * @@ -112,7 +112,7 @@ def doEpoch(self, numEpochs): growthLevel = self.getGrowthLevel() if waterLevel > 0: - print "growing plant" + print("growing plant") # grow the plant growthLevel += 1 waterLevel -= 1 diff --git a/toontown/src/estate/DistributedStatuary.py b/toontown/src/estate/DistributedStatuary.py index c6cb8969..a34b4e78 100644 --- a/toontown/src/estate/DistributedStatuary.py +++ b/toontown/src/estate/DistributedStatuary.py @@ -1,7 +1,7 @@ -import DistributedLawnDecor +from . import DistributedLawnDecor from direct.directnotify import DirectNotifyGlobal from direct.showbase.ShowBase import * -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals from toontown.toontowngui import TTDialog @@ -49,11 +49,11 @@ def setTypeIndex(self, typeIndex): self.plantType = GardenGlobals.PlantAttributes[typeIndex]['plantType'] self.modelPath = GardenGlobals.PlantAttributes[typeIndex]['model'] self.pinballScore = None - if GardenGlobals.PlantAttributes[typeIndex].has_key('pinballScore'): + if 'pinballScore' in GardenGlobals.PlantAttributes[typeIndex]: self.pinballScore = GardenGlobals.PlantAttributes[typeIndex]\ ['pinballScore'] self.worldScale = 1.0 - if GardenGlobals.PlantAttributes[typeIndex].has_key('worldScale'): + if 'worldScale' in GardenGlobals.PlantAttributes[typeIndex]: self.worldScale = GardenGlobals.PlantAttributes[typeIndex]['worldScale'] def getTypeIndex(self): diff --git a/toontown/src/estate/DistributedStatuaryAI.py b/toontown/src/estate/DistributedStatuaryAI.py index 0e8783e2..e06bc20f 100644 --- a/toontown/src/estate/DistributedStatuaryAI.py +++ b/toontown/src/estate/DistributedStatuaryAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBase import * -import DistributedLawnDecorAI +from . import DistributedLawnDecorAI from direct.directnotify import DirectNotifyGlobal -import GardenGlobals +from . import GardenGlobals class DistributedStatuaryAI(DistributedLawnDecorAI.DistributedLawnDecorAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedStatuaryAI') diff --git a/toontown/src/estate/DistributedToonStatuary.py b/toontown/src/estate/DistributedToonStatuary.py index afb44838..96b6927e 100644 --- a/toontown/src/estate/DistributedToonStatuary.py +++ b/toontown/src/estate/DistributedToonStatuary.py @@ -5,7 +5,7 @@ from pandac.PandaModules import * from toontown.toon import Toon from toontown.toon import ToonDNA -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals from pandac.PandaModules import NodePath diff --git a/toontown/src/estate/DistributedToonStatuaryAI.py b/toontown/src/estate/DistributedToonStatuaryAI.py index 564a0058..7d4d0fd7 100644 --- a/toontown/src/estate/DistributedToonStatuaryAI.py +++ b/toontown/src/estate/DistributedToonStatuaryAI.py @@ -1,7 +1,7 @@ from toontown.estate import DistributedStatuaryAI from direct.directnotify import DirectNotifyGlobal from otp.ai.AIBase import * -import GardenGlobals +from . import GardenGlobals class DistributedToonStatuaryAI(DistributedStatuaryAI.DistributedStatuaryAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedToonStatuaryAI') diff --git a/toontown/src/estate/Estate.py b/toontown/src/estate/Estate.py index 70eeeffe..970d776b 100644 --- a/toontown/src/estate/Estate.py +++ b/toontown/src/estate/Estate.py @@ -15,7 +15,7 @@ from toontown.hood import SkyUtil from toontown.pets import PetTutorial from direct.controls.GravityWalker import GravityWalker -import HouseGlobals +from . import HouseGlobals class Estate(Place.Place): notify = DirectNotifyGlobal.directNotify.newCategory("Estate") diff --git a/toontown/src/estate/EstateLoader.py b/toontown/src/estate/EstateLoader.py index 72a8c987..07c6fd98 100644 --- a/toontown/src/estate/EstateLoader.py +++ b/toontown/src/estate/EstateLoader.py @@ -7,9 +7,9 @@ from toontown.safezone import SafeZoneLoader import random from toontown.launcher import DownloadForceAcknowledge -import House -import Estate -import HouseGlobals +from . import House +from . import Estate +from . import HouseGlobals import random import math from toontown.coghq import MovingPlatform @@ -94,15 +94,15 @@ def load(self): self.underwaterSound = base.loadSfx('phase_4/audio/sfx/AV_ambient_water.mp3') self.swimSound = base.loadSfx('phase_4/audio/sfx/AV_swim_single_stroke.mp3') self.submergeSound = base.loadSfx('phase_5.5/audio/sfx/AV_jump_in_water.mp3') - self.birdSound=map(base.loadSfx, [ + self.birdSound=list(map(base.loadSfx, [ 'phase_4/audio/sfx/SZ_TC_bird1.mp3', 'phase_4/audio/sfx/SZ_TC_bird2.mp3', - 'phase_4/audio/sfx/SZ_TC_bird3.mp3']) + 'phase_4/audio/sfx/SZ_TC_bird3.mp3'])) # SDN: use birds as a place holder for crickets for now - self.cricketSound=map(base.loadSfx, [ + self.cricketSound=list(map(base.loadSfx, [ 'phase_4/audio/sfx/SZ_TC_bird1.mp3', 'phase_4/audio/sfx/SZ_TC_bird2.mp3', - 'phase_4/audio/sfx/SZ_TC_bird3.mp3']) + 'phase_4/audio/sfx/SZ_TC_bird3.mp3'])) if base.goonsEnabled: #self.testHouse = loader.loadModel("phase_5.5/models/estate/houseA.bam") @@ -483,19 +483,19 @@ def __cloudTrack(self): return track def debugGeom(self, decomposed): - print 'numPrimitives = %d' % decomposed.getNumPrimitives() + print('numPrimitives = %d' % decomposed.getNumPrimitives()) for primIndex in range(decomposed.getNumPrimitives()): prim = decomposed.getPrimitive(primIndex) - print 'prim = %s' % prim - print 'isIndexed = %d' % prim.isIndexed() - print 'prim.getNumPrimitives = %d' % prim.getNumPrimitives() + print('prim = %s' % prim) + print('isIndexed = %d' % prim.isIndexed()) + print('prim.getNumPrimitives = %d' % prim.getNumPrimitives()) #import pdb; pdb.set_trace() for basicPrim in range(prim.getNumPrimitives()): pass - print '%d start=%d' % (basicPrim, prim.getPrimitiveStart(basicPrim)) - print '%d end=%d' % (basicPrim, prim.getPrimitiveEnd(basicPrim)) + print('%d start=%d' % (basicPrim, prim.getPrimitiveStart(basicPrim))) + print('%d end=%d' % (basicPrim, prim.getPrimitiveEnd(basicPrim))) diff --git a/toontown/src/estate/EstateManager.py b/toontown/src/estate/EstateManager.py index c2df5fa6..712b8650 100644 --- a/toontown/src/estate/EstateManager.py +++ b/toontown/src/estate/EstateManager.py @@ -6,8 +6,8 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import HouseGlobals -import Estate +from . import HouseGlobals +from . import Estate class EstateManager(DistributedObject.DistributedObject): notify = DirectNotifyGlobal.directNotify.newCategory("EstateManager") diff --git a/toontown/src/estate/EstateManagerAI.py b/toontown/src/estate/EstateManagerAI.py index 67c0f106..a970cc27 100644 --- a/toontown/src/estate/EstateManagerAI.py +++ b/toontown/src/estate/EstateManagerAI.py @@ -4,10 +4,10 @@ from direct.distributed import DistributedObjectAI from direct.directnotify import DirectNotifyGlobal from direct.showbase.PythonUtil import Functor -import DistributedEstateAI +from . import DistributedEstateAI from direct.task.Task import Task -import DistributedHouseAI -import HouseGlobals +from . import DistributedHouseAI +from . import HouseGlobals import random TELEPORT_TO_OWNER_ONLY = 0 @@ -40,11 +40,11 @@ def delete(self): self.notify.debug("BASE: delete: deleting EstateManagerAI object") self.ignoreAll() DistributedObjectAI.DistributedObjectAI.delete(self) - for estate in self.estate.values(): + for estate in list(self.estate.values()): estate.requestDelete() # This automatically gets called by the server # estate.delete() - for hList in self.house.values(): + for hList in list(self.house.values()): for house in hList: house.requestDelete() # This automatically gets called by the server @@ -96,7 +96,7 @@ def getEstateZone(self, ownerId, name): self.notify.debug("we aren't teleporting to the same estate") goingHome = 0 - if not self.estateZone.has_key(ownerId): + if ownerId not in self.estateZone: # The person we are visiting is not in this shard # (or for some reason is not really in his estate) self.notify.warning("Can't go to friends house if he is not there") @@ -359,7 +359,7 @@ def setEstateZone(self, index, info): self.notify.debug(str) def clearEstateZone(self, index): - assert self.estateZone.has_key(index) + assert index in self.estateZone #print some debug info frame = sys._getframe(1) @@ -397,7 +397,7 @@ def __checkAccountSwitchedAvatars(self, name, ownerId): self.account2avId[name] = ownerId #if self.estateZone.has_key(prevAvId): - if self.toBeDeleted.has_key(prevAvId): + if prevAvId in self.toBeDeleted: self.setEstateZone(ownerId, self.toBeDeleted[prevAvId]) del self.toBeDeleted[prevAvId] return 1 @@ -422,7 +422,7 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, # there is a chance that the owner will already have left (by # closing the window). We need to handle that gracefully. - if not self.estateZone.has_key(ownerId): + if ownerId not in self.estateZone: self.notify.warning("Estate info was requested, but the owner left before it could be recived: %d" % estateId) return elif not avId in self.air.doId2do: @@ -430,8 +430,8 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, return # create the DistributedEstateAI object for this avId - if self.estateZone.has_key(avId): - if self.air.doId2do.has_key(estateId): + if avId in self.estateZone: + if estateId in self.air.doId2do: self.notify.warning("Already have distobj %s, not generating again" % (estateId)) else: self.notify.info('start estate %s init, owner=%s, frame=%s' % @@ -450,8 +450,6 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, self.air.districtId, estateZoneId) - - estateAI.initEstateData(estateVal, numHouses, houseId, houseVal) estateAI.setPetIds(petIds) self.estate[avId] = estateAI @@ -461,7 +459,7 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, # DistributedHouse objects get deleted from the stateserver. self.house[avId] = [None] * numHouses for i in range(numHouses): - if self.air.doId2do.has_key(houseId[i]): + if houseId[i] in self.air.doId2do: self.notify.warning("doId of house %s conflicts with a %s!" % (houseId[i], self.air.doId2do[houseId[i]].__class__.__name__)) else: @@ -491,8 +489,6 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, estateAI.houseList.append(house) - estateAI.postHouseInit() - #get us a list of the owners of the houses avIdList = [] for id in houseId: @@ -513,8 +509,6 @@ def handleGetEstate(self, avId, ownerId, estateId, estateVal, self.notify.info('finish estate %s init, owner=%s' % (estateId, ownerId)) - estateAI.gardenInit(avIdList) - # Now that the zone is set up, send the notification back to # the client. self.__sendZoneToClient(avId, ownerId) @@ -574,7 +568,7 @@ def __exitEstate(self, avId): self.notify.debug("__exitEstate: av %d doesn't own estate" % avId) # avId doesn't own this estate, just remove references to avId # from the data structures - if self.estateZone.has_key(avId): + if avId in self.estateZone: self.clearEstateZone(avId) try: self.refCount[avZone[0]].remove(avId) @@ -584,7 +578,7 @@ def __exitEstate(self, avId): self.notify.debug("__exitEstate can't find zone for %d" % avId) # stop the healing - if self.air.doId2do.has_key(avId): + if avId in self.air.doId2do: # Find the avatar av = self.air.doId2do[avId] # Stop healing them @@ -600,7 +594,7 @@ def __cleanupEstate(self, avId, zoneId, task): # friend A is visting friend B # friend B exits his estate # friend C attempts to visit friend A at the same time - for someAvId, avZone in self.estateZone.items(): + for someAvId, avZone in list(self.estateZone.items()): if avZone[0] == zoneId: # This may be a slow client that just hasn't reported back. # If the toon is still in the zone, announce that they've @@ -628,7 +622,7 @@ def __cleanupEstate(self, avId, zoneId, task): avZone = self.toBeDeleted.get(avId) if avZone: if avZone[2] != "": - if self.account2avId.has_key(avZone[2]): + if avZone[2] in self.account2avId: self.notify.debug( "removing %s from account2avId" % avZone[2]) del self.account2avId[avZone[2]] del self.toBeDeleted[avId] @@ -641,7 +635,7 @@ def __cleanupEstate(self, avId, zoneId, task): self.ignore(self.air.getAvatarExitEvent(avId)) # refcount should be empty, just delete - if self.refCount.has_key(zoneId): + if zoneId in self.refCount: del self.refCount[zoneId] return Task.done @@ -659,7 +653,7 @@ def __deleteEstate(self, avId): self.notify.debug("__deleteEstate(avId=%s)" % avId) # delete from state server - if self.estate.has_key(avId): + if avId in self.estate: if self.estate[avId] != None: self.estate[avId].destroyEstateData() self.notify.debug('DistEstate requestDelete, doId=%s' % @@ -706,7 +700,7 @@ def __bootVisitorsAndCleanup(self, ownerId, zoneId, task): def __bootAv(self, avId, zoneId, ownerId, retCode=1): messenger.send("bootAvFromEstate-"+str(avId)) self.sendUpdateToAvatarId(avId, "sendAvToPlayground", [avId, retCode]) - if self.toBeDeleted.has_key(avId): + if avId in self.toBeDeleted: del self.toBeDeleted[avId] try: self.refCount[zoneId].remove(avId) @@ -734,12 +728,12 @@ def removeFriend(self, ownerId, avId): # avId is indeed in owner's estate. boot him self.__bootAv(avId, ownZone[0], ownerId, retCode=2) else: - print "visitor not in owners estate" + print("visitor not in owners estate") else: - print "av is not in an estate" + print("av is not in an estate") else: - print "owner not in estate" + print("owner not in estate") ## ----------------------------------------------------------- ## April fools stuff diff --git a/toontown/src/estate/FireworkItemPanel.py b/toontown/src/estate/FireworkItemPanel.py index edff1fb8..7293e6cc 100644 --- a/toontown/src/estate/FireworkItemPanel.py +++ b/toontown/src/estate/FireworkItemPanel.py @@ -4,7 +4,7 @@ from toontown.toonbase import TTLocalizer from toontown.effects import FireworkGlobals from toontown.effects import Fireworks -import FireworksGui +from . import FireworksGui class FireworkItemPanel(DirectFrame): def __init__(self, itemName, itemNum, *extraArgs): diff --git a/toontown/src/estate/FireworksGui.py b/toontown/src/estate/FireworksGui.py index aedce141..436e131f 100644 --- a/toontown/src/estate/FireworksGui.py +++ b/toontown/src/estate/FireworksGui.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from direct.gui.DirectScrolledList import * from toontown.toonbase import ToontownGlobals -import FireworkItemPanel +from . import FireworkItemPanel from direct.directnotify import DirectNotifyGlobal from toontown.effects import FireworkGlobals from toontown.effects import Fireworks @@ -96,7 +96,7 @@ def load(self): self.hilightColor = VBase4(1,1,1,1) self.bgColor = VBase4(.8,.8,.8,1) self.colorButtons = [] - for i in Fireworks.colors.keys(): + for i in list(Fireworks.colors.keys()): color = Fireworks.colors[i] height = .07 paddedHeight = .10 diff --git a/toontown/src/estate/FlowerBase.py b/toontown/src/estate/FlowerBase.py index 1f681625..1098641c 100644 --- a/toontown/src/estate/FlowerBase.py +++ b/toontown/src/estate/FlowerBase.py @@ -1,7 +1,7 @@ # NOTE: This file is imported on the client and AI, so do not import anything # that the AI will have a problem with (like opening a window) -import GardenGlobals +from . import GardenGlobals from toontown.toonbase import TTLocalizer from direct.directnotify import DirectNotifyGlobal @@ -12,11 +12,11 @@ def __init__(self, species, variety): self.species = species self.variety = variety #temp hack code to fix rose - if self.species not in GardenGlobals.PlantAttributes.keys(): - print "remove me when everyone is updated" + if self.species not in list(GardenGlobals.PlantAttributes.keys()): + print("remove me when everyone is updated") self.species = 56 species = 56 - assert self.species in GardenGlobals.PlantAttributes.keys() + assert self.species in list(GardenGlobals.PlantAttributes.keys()) assert self.variety < len(GardenGlobals.PlantAttributes[species]['varieties']) def getSpecies(self): @@ -24,7 +24,7 @@ def getSpecies(self): def setSpecies(self, species): self.species = species - assert self.species in GardenGlobals.PlantAttributes.keys() + assert self.species in list(GardenGlobals.PlantAttributes.keys()) def getVariety(self): diff --git a/toontown/src/estate/FlowerBasket.py b/toontown/src/estate/FlowerBasket.py index 4c4bbc0f..2550c5fc 100644 --- a/toontown/src/estate/FlowerBasket.py +++ b/toontown/src/estate/FlowerBasket.py @@ -1,6 +1,6 @@ -import GardenGlobals +from . import GardenGlobals from direct.directnotify import DirectNotifyGlobal -import FlowerBase +from . import FlowerBase class FlowerBasket: """ diff --git a/toontown/src/estate/FlowerBrowser.py b/toontown/src/estate/FlowerBrowser.py index d79792e6..9a522a48 100644 --- a/toontown/src/estate/FlowerBrowser.py +++ b/toontown/src/estate/FlowerBrowser.py @@ -5,8 +5,8 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import FlowerSpeciesPanel -import GardenGlobals +from . import FlowerSpeciesPanel +from . import GardenGlobals class FlowerBrowser(DirectScrolledList): """ @@ -54,7 +54,7 @@ def __init__(self, parent=aspect2d, **kw): # Make the disabled button fade out ('decButton_image3_color', Vec4(0.8,0.8,0.8,0.5), None), ('numItemsVisible', 1, None), - ('items', map(str, GardenGlobals.getFlowerSpecies()), None), + ('items', list(map(str, GardenGlobals.getFlowerSpecies())), None), ('scrollSpeed', 4, None), ('itemMakeFunction', FlowerSpeciesPanel.FlowerSpeciesPanel, None), ('itemMakeExtraArgs', base.localAvatar.flowerCollection, None), diff --git a/toontown/src/estate/FlowerCollection.py b/toontown/src/estate/FlowerCollection.py index 0b75b22a..ce20ae74 100644 --- a/toontown/src/estate/FlowerCollection.py +++ b/toontown/src/estate/FlowerCollection.py @@ -1,6 +1,6 @@ -import GardenGlobals +from . import GardenGlobals from direct.directnotify import DirectNotifyGlobal -import FlowerBase +from . import FlowerBase class FlowerCollection: """ diff --git a/toontown/src/estate/FlowerPanel.py b/toontown/src/estate/FlowerPanel.py index a0d2c2eb..1ce546ab 100644 --- a/toontown/src/estate/FlowerPanel.py +++ b/toontown/src/estate/FlowerPanel.py @@ -6,8 +6,8 @@ from pandac.PandaModules import * from toontown.toonbase import TTLocalizer from direct.interval.IntervalGlobal import * -import GardenGlobals -import FlowerPhoto +from . import GardenGlobals +from . import FlowerPhoto class FlowerPanel(DirectFrame): """ @@ -175,8 +175,8 @@ def show(self, code=GardenGlobals.FlowerItem): assert self.notify.debugStateCall(self) # if we are browsing flower we must be awake messenger.send('wakeup') - apply(self.photo.setSwimBounds, self.swimBounds) - apply(self.photo.setSwimColor, self.swimColor) + self.photo.setSwimBounds(*self.swimBounds) + self.photo.setSwimColor(*self.swimColor) if code == GardenGlobals.FlowerItem: self.extraLabel.hide() diff --git a/toontown/src/estate/FlowerPhoto.py b/toontown/src/estate/FlowerPhoto.py index 5702d290..7108d36d 100644 --- a/toontown/src/estate/FlowerPhoto.py +++ b/toontown/src/estate/FlowerPhoto.py @@ -5,7 +5,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from toontown.fishing import FishGlobals -import GardenGlobals +from . import GardenGlobals from direct.actor import Actor class DirectRegion(NodePath): @@ -62,18 +62,18 @@ def load(self): cm = CardMaker('displayRegionCard') assert hasattr(self, "bounds") - apply(cm.setFrame, self.bounds) + cm.setFrame(*self.bounds) self.card = card = self.attachNewNode(cm.generate()) assert hasattr(self, "color") - apply(card.setColor, self.color) + card.setColor(*self.color) newBounds=card.getTightBounds() ll=render2d.getRelativePoint(card, newBounds[0]) ur=render2d.getRelativePoint(card, newBounds[1]) newBounds=[ll.getX(), ur.getX(), ll.getZ(), ur.getZ()] # scale the -1.0..2.0 range to 0.0..1.0: - newBounds=map(lambda x: max(0.0, min(1.0, (x+1.0)/2.0)), newBounds) + newBounds=[max(0.0, min(1.0, (x+1.0)/2.0)) for x in newBounds] self.cDr = base.win.makeDisplayRegion(*newBounds) self.cDr.setSort(10) @@ -151,8 +151,8 @@ def makeFlowerFrame(self, actor): # scale the actor to the frame if not hasattr(self, "flowerDisplayRegion"): self.flowerDisplayRegion = DirectRegion(parent=self) - apply(self.flowerDisplayRegion.setBounds, self.swimBounds) - apply(self.flowerDisplayRegion.setColor, self.swimColor) + self.flowerDisplayRegion.setBounds(*self.swimBounds) + self.flowerDisplayRegion.setColor(*self.swimColor) frame = self.flowerDisplayRegion.load() pitch = frame.attachNewNode('pitch') rotate = pitch.attachNewNode('rotate') @@ -164,7 +164,7 @@ def makeFlowerFrame(self, actor): actor.setPos(-center[0], -center[1], -center[2]) attrib = GardenGlobals.PlantAttributes[self.species] - if attrib.has_key('photoPos'): + if 'photoPos' in attrib: self.notify.debug('oldPos = %s' % actor.getPos()) photoPos = attrib['photoPos'] self.notify.debug('newPos = %s' % str(photoPos)) diff --git a/toontown/src/estate/FlowerPicker.py b/toontown/src/estate/FlowerPicker.py index 3e684c86..1e30611a 100644 --- a/toontown/src/estate/FlowerPicker.py +++ b/toontown/src/estate/FlowerPicker.py @@ -5,7 +5,7 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import FlowerPanel +from . import FlowerPanel class FlowerPicker(DirectScrolledList): diff --git a/toontown/src/estate/FlowerSellGUI.py b/toontown/src/estate/FlowerSellGUI.py index 5c203444..1bc73525 100644 --- a/toontown/src/estate/FlowerSellGUI.py +++ b/toontown/src/estate/FlowerSellGUI.py @@ -4,8 +4,8 @@ from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from direct.task import Task -import FlowerBase -import FlowerPicker +from . import FlowerBase +from . import FlowerPicker class FlowerSellGUI(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory("FlowerGui") diff --git a/toontown/src/estate/FlowerSpeciesPanel.py b/toontown/src/estate/FlowerSpeciesPanel.py index abb02084..d2c5e32f 100644 --- a/toontown/src/estate/FlowerSpeciesPanel.py +++ b/toontown/src/estate/FlowerSpeciesPanel.py @@ -6,8 +6,8 @@ from pandac.PandaModules import * from toontown.toonbase import TTLocalizer #import FishBase -import GardenGlobals -import FlowerPhoto +from . import GardenGlobals +from . import FlowerPhoto from toontown.estate import BeanRecipeGui class FlowerSpeciesPanel(DirectFrame): diff --git a/toontown/src/estate/GardenDropGame.py b/toontown/src/estate/GardenDropGame.py index 1a95da04..c6270a0d 100644 --- a/toontown/src/estate/GardenDropGame.py +++ b/toontown/src/estate/GardenDropGame.py @@ -17,11 +17,11 @@ from toontown.toonbase import TTLocalizer import random import random -import cPickle +import pickle from direct.showbase import PythonUtil -import GameSprite +from . import GameSprite from math import pi -import GardenProgressMeter +from . import GardenProgressMeter class GardenDropGame(DirectObject.DirectObject): @@ -76,7 +76,7 @@ def __init__(self): self.queExtent = 3 - print("Grid Dimensions X%s Z%s" % (gX, gZ)) + print(("Grid Dimensions X%s Z%s" % (gX, gZ))) self.grid = [] self.gridDimX= gX @@ -288,7 +288,7 @@ def findGrid2(self, x, z): tileDimZ = rangeZ / self.gridDimZ tileX = int(framedX / tileDimX) tileZ = int(framedZ / tileDimZ) - print("find Grid tileX%s tileZ%s" % (tileX, tileZ)) + print(("find Grid tileX%s tileZ%s" % (tileX, tileZ))) return tileX, tileZ @@ -300,7 +300,7 @@ def findPos(self,x,z): tileDimZ = rangeZ / self.gridDimZ posX = (tileDimX * x) + self.minX posZ = (tileDimZ * z) + self.minZ - print("find Pos X%s Z%s" % (posX, posZ)) + print(("find Pos X%s Z%s" % (posX, posZ))) return posX, posZ @@ -311,7 +311,7 @@ def placeIntoGrid(self, sprite, x, z): newX, newZ = self.findPos(x,z) sprite.setX(newX) sprite.setZ(newZ) - print("Setting Final Pos X%s Z%s" % (newX, newZ)) + print(("Setting Final Pos X%s Z%s" % (newX, newZ))) else: self.placeIntoGrid(sprite, x+1, z-1) #import pdb; pdb.set_trace() @@ -424,7 +424,7 @@ def addSprite(self, image, size = .5, posX = 0, posZ = 0, found = 0): scale = size, image_color = (1.0, 1.0, 1.0, 1), ) - colorChoice = random.choice(range(0, 3)) + colorChoice = random.choice(list(range(0, 3))) newSprite = GameSprite.GameSprite(nodeObj, colorChoice, found) self.sprites.append(newSprite) if found: diff --git a/toontown/src/estate/GardenGlobals.py b/toontown/src/estate/GardenGlobals.py index 68c22f23..1b4f35ed 100644 --- a/toontown/src/estate/GardenGlobals.py +++ b/toontown/src/estate/GardenGlobals.py @@ -137,7 +137,7 @@ def getWateringCanPower(wateringCan , wateringCanSkill): def getMaxWateringCanPower(): retval = 0 - for wateringCanAttrib in WateringCanAttributes.values(): + for wateringCanAttrib in list(WateringCanAttributes.values()): retval += wateringCanAttrib['numBoxes'] return retval @@ -161,8 +161,8 @@ def getMaxWateringCanPower(): FLOWER_WHITE = 6 FLOWER_GREEN = 7 -ToonStatuaryTypeIndices = xrange(205,209) # 205,206,206,207,208 -ChangingStatuaryTypeIndices = xrange(230,231) # just 230 +ToonStatuaryTypeIndices = range(205,209) # 205,206,206,207,208 +ChangingStatuaryTypeIndices = range(230,231) # just 230 PlantAttributes = { #### Gag trees #### @@ -394,15 +394,15 @@ def getMaxWateringCanPower(): 'worldScale' : 0.05, 'varieties' : ( (1008,1,0),), 'pinballScore' : (500,1) - }, + }, 230 :{ 'name': TTLocalizer.StatuaryMeltingSnowman, 'plantType' : STATUARY_TYPE, 'model' : "phase_5.5/models/estate/tt_m_prp_ext_snowman", 'worldScale' : 1.0, 'varieties' : ( (1030,1,0),), 'pinballScore' : (500,1), - 'growthThresholds': (1,2) # different models at growth level 0, 1, then 2 and up - }, + 'growthThresholds': (1,2) # different models at growth level 0, 1, then 2 and up + }, 254 :{ 'name' : 'reserved tag', #HARDCODED!!!!!!!!!!!! HAHAHA!!! 'plantType' : STATUARY_TYPE, 'model' : "phase_5.5/models/estate/garden_minnie", @@ -428,7 +428,7 @@ def getMaxWateringCanPower(): ##Tree Utils def getTreeTrackAndLevel(typeIndex): - track = typeIndex / 7 + track = typeIndex // 7 level = typeIndex % 7 return (track, level) @@ -440,7 +440,7 @@ def getTreeTypeIndex(track, level): for i in range(NUM_GAGS): track, level = getTreeTrackAndLevel(i) if level <= 6: - name = TTLocalizer.BattleGlobalAvPropStrings[track][level] + TTLocalizer.GardenGagTree + name = TTLocalizer.BattleGlobalAvPropStrings[track][level] + TTLocalizer.GardenGagTree else: name = TTLocalizer.GardenUberGag attr = {'name': name, @@ -697,7 +697,7 @@ def getTreeTypeIndex(track, level): # melting snowman 1030 : { 'beans': 'S', 'special' : 130 - }, + }, # reserved tag recipe, deliberately invalid color 2001 : { 'beans': 'ZVOVOVO', 'special' : -1 @@ -713,7 +713,7 @@ def getRecipeKey( beans, special): returns -1 if not found """ testDict = { 'beans':beans, 'special' :special } - for key in Recipes.keys(): + for key in list(Recipes.keys()): recipe = Recipes[key] if testDict == recipe: return key @@ -724,7 +724,7 @@ def getRecipeKeyUsingSpecial( special): returns -1 if not found WARNING assumes 1 special is not used in 2 recipes """ - for key in Recipes.keys(): + for key in list(Recipes.keys()): recipe = Recipes[key] if recipe['special'] == special: return key @@ -797,13 +797,13 @@ def getMaxShovelSkill(): def getNumberOfShovelBoxes(): retVal = 0 - for attrib in ShovelAttributes.values(): + for attrib in list(ShovelAttributes.values()): retVal += attrib['numBoxes'] return retVal def getNumberOfWateringCanBoxes(): retVal = 0 - for attrib in WateringCanAttributes.values(): + for attrib in list(WateringCanAttributes.values()): retVal += attrib['numBoxes'] return retVal @@ -813,7 +813,7 @@ def getNumberOfFlowerVarieties(): How many Flower Varieties do we have """ retVal = 0 - for attrib in PlantAttributes.values(): + for attrib in list(PlantAttributes.values()): if attrib['plantType'] == FLOWER_TYPE: retVal += len( attrib['varieties']) return retVal @@ -823,7 +823,7 @@ def getNumberOfFlowerSpecies(): How many Flower species do we have """ retVal = 0 - for attrib in PlantAttributes.values(): + for attrib in list(PlantAttributes.values()): if attrib['plantType'] == FLOWER_TYPE: retVal += 1 return retVal @@ -833,7 +833,7 @@ def getFlowerVarieties(species): return the varieties for this species """ retval = () - if species in PlantAttributes.keys(): + if species in list(PlantAttributes.keys()): attrib = PlantAttributes[species] if attrib['plantType'] == FLOWER_TYPE: retval = attrib['varieties'] @@ -844,7 +844,7 @@ def getFlowerSpecies(): return a list of flower species keys """ retVal = [] - for key in PlantAttributes.keys(): + for key in list(PlantAttributes.keys()): attrib = PlantAttributes[key] if attrib['plantType'] == FLOWER_TYPE: retVal.append(key) @@ -861,7 +861,7 @@ def getRandomFlower(): def getFlowerVarietyName(species, variety): retVal = TTLocalizer.FlowerUnknown - if species in PlantAttributes.keys(): + if species in list(PlantAttributes.keys()): attrib = PlantAttributes[species] if variety < len(attrib['varieties']) : #this block would produce something like 'red rose' @@ -889,11 +889,11 @@ def getSpeciesVarietyGivenRecipe(recipeKey): """ returns (-1,-1) if not found """ - for species in PlantAttributes.keys(): + for species in list(PlantAttributes.keys()): attrib = PlantAttributes[species] if attrib['plantType'] == GAG_TREE_TYPE: continue - if attrib.has_key('varieties'): + if 'varieties' in attrib: for variety in range(len(attrib['varieties'])): if attrib['varieties'][variety][0] == recipeKey: return (species, variety) @@ -906,7 +906,7 @@ def getNumBeansRequired(species,variety): retval = -1 if not PlantAttributes.get(species): return retval - if not PlantAttributes[species].has_key('varieties'): + if 'varieties' not in PlantAttributes[species]: return retval if variety >= len(PlantAttributes[species]['varieties'] ): return -1 @@ -914,7 +914,7 @@ def getNumBeansRequired(species,variety): recipe = Recipes.get(recipeKey) if recipe: - if recipe.has_key('beans'): + if 'beans' in recipe: retval = len(recipe['beans']) return retval @@ -932,7 +932,7 @@ def validateRecipes(notify): #we now enfore the rule that a special can only appear in the recipes once uniqueSpecials = [] - for key in Recipes.keys(): + for key in list(Recipes.keys()): recipe = Recipes[key] beans = recipe['beans'] @@ -960,7 +960,7 @@ def validateRecipes(notify): #double check uniqueness and validity of special special = recipe['special'] if special != -1: - assert special in Specials.keys(), 'No special %d in Specials dict' % (special) + assert special in list(Specials.keys()), 'No special %d in Specials dict' % (special) assert special not in uniqueSpecials, 'Duplicate special %s key=%d' % (testTuple, key) uniqueSpecials.append(special) @@ -983,7 +983,7 @@ def validatePlantAttributes(notify): - for key in PlantAttributes.keys(): + for key in list(PlantAttributes.keys()): plant = PlantAttributes[key] notify.debug('now validating %s' % plant['name']) #check growth thresholds @@ -1000,7 +1000,7 @@ def validatePlantAttributes(notify): for variety in varieties: recipeNum = variety[0] #check if recipeNum is valid - assert recipeNum in Recipes.keys(), 'Invalid recipeNum %d, key=%d, variety=%s' % (recipeNum, key, str(variety)) + assert recipeNum in list(Recipes.keys()), 'Invalid recipeNum %d, key=%d, variety=%s' % (recipeNum, key, str(variety)) assert recipeNum not in uniqueRecipes, 'duplicate recipe %d, key=%d, variety=%s' % (recipeNum, key, str(variety)) uniqueRecipes.append(recipeNum) @@ -1379,7 +1379,7 @@ def whatCanBePlanted( plotIndex, hardPointIndex): 'subtype' : GARDEN_ITEM_SUBTYPE, 'photoModel' : "phase_5.5/models/estate/tt_m_prp_ext_snowman_icon", 'photoScale' : 90.0, - 'photoPos' : (0,0,0), + 'photoPos' : (0,0,0), 'photoName' : TTLocalizer.StatuaryMeltingSnowman, 'description': TTLocalizer.GardenSpecialDiscription, 'isCatalog' : True, @@ -1413,7 +1413,7 @@ def getPlantItWithString(special): return retval #this automatically sets up the description for the Special dictionary -for specialKey in Specials.keys(): +for specialKey in list(Specials.keys()): recipeKey = getRecipeKeyUsingSpecial(specialKey) if not recipeKey == -1: Specials[specialKey]['description'] = getPlantItWithString(specialKey) diff --git a/toontown/src/estate/GardenProgressMeter.py b/toontown/src/estate/GardenProgressMeter.py index c4be4d2f..2e1641e4 100644 --- a/toontown/src/estate/GardenProgressMeter.py +++ b/toontown/src/estate/GardenProgressMeter.py @@ -16,9 +16,9 @@ from toontown.toonbase import TTLocalizer import random import random -import cPickle +import pickle from direct.showbase import PythonUtil -import GameSprite +from . import GameSprite from math import pi from toontown.estate import GardenGlobals @@ -36,7 +36,7 @@ def __init__(self, typePromotion = "game", level = 0): elif typePromotion == "game": self.typePromotion == GAMEWIN else: - print ("No type of %s" % (typePromotion)) + print(("No type of %s" % (typePromotion))) self.level = level self.acceptErrorDialog = None self.doneEvent = "game Done" diff --git a/toontown/src/estate/GardenTestGame.py b/toontown/src/estate/GardenTestGame.py index 6f76fe4b..566b0c17 100644 --- a/toontown/src/estate/GardenTestGame.py +++ b/toontown/src/estate/GardenTestGame.py @@ -17,9 +17,9 @@ from toontown.toonbase import TTLocalizer import random import random -import cPickle +import pickle from direct.showbase import PythonUtil -import GameSprite +from . import GameSprite from math import pi class GardenTestGame(DirectObject.DirectObject): @@ -64,7 +64,7 @@ def __init__(self): self.queExtent = 3 - print("Grid Dimensions X%s Z%s" % (gX, gZ)) + print(("Grid Dimensions X%s Z%s" % (gX, gZ))) self.grid = [] self.gridDimX= gX @@ -269,7 +269,7 @@ def findGrid2(self, x, z): tileDimZ = rangeZ / self.gridDimZ tileX = int(framedX / tileDimX) tileZ = int(framedZ / tileDimZ) - print("find Grid tileX%s tileZ%s" % (tileX, tileZ)) + print(("find Grid tileX%s tileZ%s" % (tileX, tileZ))) return tileX, tileZ @@ -281,7 +281,7 @@ def findPos(self,x,z): tileDimZ = rangeZ / self.gridDimZ posX = (tileDimX * x) + self.minX posZ = (tileDimZ * z) + self.minZ - print("find Pos X%s Z%s" % (posX, posZ)) + print(("find Pos X%s Z%s" % (posX, posZ))) return posX, posZ @@ -292,7 +292,7 @@ def placeIntoGrid(self, sprite, x, z): newX, newZ = self.findPos(x,z) sprite.setX(newX) sprite.setZ(newZ) - print("Setting Final Pos X%s Z%s" % (newX, newZ)) + print(("Setting Final Pos X%s Z%s" % (newX, newZ))) else: self.placeIntoGrid(sprite, x+1, z-1) #import pdb; pdb.set_trace() @@ -405,7 +405,7 @@ def addSprite(self, image, size = .5, posX = 0, posZ = 0): scale = size, image_color = (1.0, 1.0, 1.0, 1), ) - colorChoice = random.choice(range(0, 3)) + colorChoice = random.choice(list(range(0, 3))) newSprite = GameSprite.GameSprite(nodeObj, colorChoice) self.sprites.append(newSprite) return newSprite diff --git a/toontown/src/estate/SpecialsPhoto.py b/toontown/src/estate/SpecialsPhoto.py index a679bf76..8ab80d0a 100644 --- a/toontown/src/estate/SpecialsPhoto.py +++ b/toontown/src/estate/SpecialsPhoto.py @@ -5,7 +5,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from toontown.fishing import FishGlobals -import GardenGlobals +from . import GardenGlobals from direct.actor import Actor #WARNING Specials Photo is used in both GardenPage.py and PlantingGUI.py @@ -65,18 +65,18 @@ def load(self): cm = CardMaker('displayRegionCard') assert hasattr(self, "bounds") - apply(cm.setFrame, self.bounds) + cm.setFrame(*self.bounds) self.card = card = self.attachNewNode(cm.generate()) assert hasattr(self, "color") - apply(card.setColor, self.color) + card.setColor(*self.color) newBounds=card.getTightBounds() ll=render2d.getRelativePoint(card, newBounds[0]) ur=render2d.getRelativePoint(card, newBounds[1]) newBounds=[ll.getX(), ur.getX(), ll.getZ(), ur.getZ()] # scale the -1.0..2.0 range to 0.0..1.0: - newBounds=map(lambda x: max(0.0, min(1.0, (x+1.0)/2.0)), newBounds) + newBounds=[max(0.0, min(1.0, (x+1.0)/2.0)) for x in newBounds] self.cDr = base.win.makeDisplayRegion(*newBounds) self.cDr.setSort(10) @@ -161,8 +161,8 @@ def makeSpecialsFrame(self, actor): # scale the actor to the frame if not hasattr(self, "specialsDisplayRegion"): self.specialsDisplayRegion = DirectRegion(parent=self) - apply(self.specialsDisplayRegion.setBounds, self.backBounds) - apply(self.specialsDisplayRegion.setColor, self.backColor) + self.specialsDisplayRegion.setBounds(*self.backBounds) + self.specialsDisplayRegion.setColor(*self.backColor) frame = self.specialsDisplayRegion.load() pitch = frame.attachNewNode('pitch') rotate = pitch.attachNewNode('rotate') diff --git a/toontown/src/estate/ToonStatueSelectionGUI.py b/toontown/src/estate/ToonStatueSelectionGUI.py index 24659dc1..e2abde26 100644 --- a/toontown/src/estate/ToonStatueSelectionGUI.py +++ b/toontown/src/estate/ToonStatueSelectionGUI.py @@ -237,7 +237,7 @@ def __chooseFriend(self, friendId, friendName): else: # The request to the database takes too long, so we cache off the value # everytime a new family avatar is clicked. Check this list before making a new database request. - if self.doId2Dna.has_key(friendId): + if friendId in self.doId2Dna: self.createPreviewToon(self.doId2Dna[friendId]) else: familyAvatar = DistributedToon.DistributedToon(base.cr) diff --git a/toontown/src/estate/WallpaperDesignPanel.py b/toontown/src/estate/WallpaperDesignPanel.py index f716701e..e8522df8 100644 --- a/toontown/src/estate/WallpaperDesignPanel.py +++ b/toontown/src/estate/WallpaperDesignPanel.py @@ -6,25 +6,25 @@ wallpaperDict = {} wallpaperTextures = [] -keys = WallpaperTypes.keys() +keys = list(WallpaperTypes.keys()) keys.sort() for key in keys: wallpaperData = WallpaperTypes[key] wallTexture = wallpaperData[WTTextureName] - if not wallpaperDict.has_key(wallTexture): + if wallTexture not in wallpaperDict: wallpaperDict[wallTexture] = key wallpaperTextures.append(wallTexture) borderDict = {} borderTextures = [] -bkeys = BorderTypes.keys() +bkeys = list(BorderTypes.keys()) bkeys.sort() for key in bkeys: borderData = BorderTypes[key] borderTexture = borderData[BDTextureName] - if not borderDict.has_key(borderTexture): + if borderTexture not in borderDict: borderDict[borderTexture] = key borderTextures.append(borderTexture) diff --git a/toontown/src/estate/houseDesign.py b/toontown/src/estate/houseDesign.py index 76aaf4b4..04ba584a 100644 --- a/toontown/src/estate/houseDesign.py +++ b/toontown/src/estate/houseDesign.py @@ -734,7 +734,7 @@ def moveObjectStop(self, *args): self.selectedObject.collisionNodePath.unstash() self.selectedObject.dfitem.stopAdjustPosHpr() # Make sure collision nodes are unstashed - for object in self.objectDict.values(): + for object in list(self.objectDict.values()): object.unstashBuiltInCollisionNodes() # Adjust center marker image self.centerMarker['image'] = [self.grabUp,self.grabDown, @@ -757,7 +757,7 @@ def moveObjectContinue(self, *args): messenger.send('wakeup') # If user selected an object if self.selectedObject: - for object in self.objectDict.values(): + for object in list(self.objectDict.values()): object.stashBuiltInCollisionNodes() # And stash furniture collision node of selected object self.selectedObject.collisionNodePath.stash() @@ -964,7 +964,7 @@ def collisionTest(self): # We detected some collisions, try to sum up offsets to fix if offsetDict: # Find orthogonal components - keys = offsetDict.keys() + keys = list(offsetDict.keys()) # Pick first offset as first cardinal direction ortho1 = offsetDict[keys[0]] ortho2 = Vec3(0) @@ -1202,7 +1202,7 @@ def moveObjectInit(self): self.selectedObject.wrtReparentTo(self.collisionOffsetNP) def resetFurniture(self): - for o in self.objectDict.values(): + for o in list(self.objectDict.values()): o.resetMovableObject() self.objectDict = {} self.deselectObject() @@ -1635,7 +1635,7 @@ def createInRoomPicker(self): # the room. # First, generate a list of FurnitureItemPanels. self.inRoomPanels = [] - for objectId, object in self.objectDict.items(): + for objectId, object in list(self.objectDict.items()): panel = FurnitureItemPanel(object.dfitem.item, objectId, command = self.requestReturnToAttic, deleteMode = self.deleteMode, @@ -1944,7 +1944,7 @@ def bringItemFromAttic(self, item, itemIndex): if item.getFlags() & CatalogFurnitureItem.FLPainting: # Paintings are started out on a wall. - for object in self.objectDict.values(): + for object in list(self.objectDict.values()): object.stashBuiltInCollisionNodes() self.gridSnapNP.iPosHpr() target = self.targetNodePath @@ -1955,7 +1955,7 @@ def bringItemFromAttic(self, item, itemIndex): origin = Point3(0, 0, 6), dir = Vec3(0, 1, 0), skipFlags = SKIP_BACKFACE | SKIP_CAMERA | SKIP_UNPICKABLE) - for object in self.objectDict.values(): + for object in list(self.objectDict.values()): object.unstashBuiltInCollisionNodes() if entry: self.alignObject(entry, target, fClosest = 0, wallOffset = 0.1) @@ -2574,7 +2574,7 @@ def showIt(task): self.helpText['text'] = helpText self.helpText.show() else: - print "category: %s not found" + print("category: %s not found") # Give it a pause before displaying taskMgr.doMethodLater(0.75, showIt, "showHelpTextDoLater") diff --git a/toontown/src/fishing/BingoCardBase.py b/toontown/src/fishing/BingoCardBase.py index 418ecb35..7d4d6c7f 100644 --- a/toontown/src/fishing/BingoCardBase.py +++ b/toontown/src/fishing/BingoCardBase.py @@ -44,7 +44,7 @@ def __init__( self, cardSize=BingoGlobals.CARD_SIZE, self.cellList = [] self.gameType = None - self.gameState = 1< 4: rodId = 0 # Now, fill up the the card by randomly placing the fish in a cell. - for index in xrange(self.cardSize): - if index != self.cardSize/2: + for index in range(self.cardSize): + if index != self.cardSize//2: choice = rng.randrange(0,len(fishList)) self.cellList.append( fishList.pop(choice) ) else: @@ -217,7 +217,7 @@ def checkForWin(self, id): # Output: None ################################################################# def rowCheck(self, rowId): - for colId in xrange(self.colSize): + for colId in range(self.colSize): if not (self.gameState & (1 << (self.rowSize*rowId+colId) )): return 0 return 1 @@ -231,7 +231,7 @@ def rowCheck(self, rowId): # Output: None ################################################################# def colCheck(self, colId): - for rowId in xrange(self.rowSize): + for rowId in range(self.rowSize): if not (self.gameState & (1 << (self.rowSize*rowId+colId) )): return 0 return 1 @@ -247,7 +247,7 @@ def colCheck(self, colId): def fDiagCheck(self, id): checkNum = self.rowSize+1 if not (id % checkNum): - for i in xrange(self.rowSize): + for i in range(self.rowSize): if not (self.gameState & (1 << i*checkNum)): return 0 return 1 @@ -266,7 +266,7 @@ def fDiagCheck(self, id): def bDiagCheck(self, id): checkNum = self.rowSize-1 if not(id % checkNum) and (not(id==(self.cardSize-1))): - for i in xrange(self.rowSize): + for i in range(self.rowSize): if not (self.gameState & (1 << (i*checkNum+checkNum))): return 0 return 1 @@ -295,7 +295,7 @@ def cellCheck(self, id): # Output: returns 1 or 0 whether cell is on the specified row. ################################################################# def onRow(self, row, id): - if int( id / self.rowSize ) == row: + if int( id // self.rowSize ) == row: return 1 return 0 diff --git a/toontown/src/fishing/BingoCardGui.py b/toontown/src/fishing/BingoCardGui.py index 284f918c..7927c338 100644 --- a/toontown/src/fishing/BingoCardGui.py +++ b/toontown/src/fishing/BingoCardGui.py @@ -401,7 +401,7 @@ def destroy(self): ################################################################# def loadCard(self): cardSize = self.game.getCardSize() - for index in xrange(cardSize): + for index in range(cardSize): self.cellGuiList[index].generateLogo() if index == cardSize/2: self.cellGuiList[index].generateMarkedLogo() @@ -418,7 +418,7 @@ def loadCard(self): ################################################################# def disableCard(self): self.stopCellBlinking() - for index in xrange(self.game.getCardSize()): + for index in range(self.game.getCardSize()): self.cellGuiList[index].disable() ################################################################# @@ -432,7 +432,7 @@ def disableCard(self): def enableCard(self, callback=None): self.notify.info("enable Bingo card") self.stopCellBlinking() - for index in xrange(len(self.cellGuiList)): + for index in range(len(self.cellGuiList)): if index != self.game.getCardSize()/2: self.cellGuiList[index].enable(callback) @@ -462,7 +462,7 @@ def generateCard(self, tileSeed, zoneId): # There is no need to generate a Fish object. Tuples (genus, species) # can effectively be used to identify the type of fish for a specific # BingoCardCell. - for i in xrange(len(fishList)): + for i in range(len(fishList)): fishTuple = fishList.pop(0) weight = FishGlobals.getRandomWeight(fishTuple[0], fishTuple[1]) fish = FishBase.FishBase(fishTuple[0], fishTuple[1], weight) @@ -474,7 +474,7 @@ def generateCard(self, tileSeed, zoneId): # Fill up the empty cells with randomly generated fish. In order to # maintain fairness, iterate through the rods as well. rodId = 0 - for i in xrange(emptyCells): + for i in range(emptyCells): fishVitals = FishGlobals.getRandomFishVitals(zoneId, rodId, rng) while( not fishVitals[0] ): fishVitals = FishGlobals.getRandomFishVitals(zoneId, rodId, rng) @@ -488,8 +488,8 @@ def generateCard(self, tileSeed, zoneId): # it is time to actually generate a BingoCardCell for every fish. This # cell will be parented to the GUI instance and its position and scale # are based on the CardImageScale. (See base positions above) - for i in xrange(rowSize): - for j in xrange(self.game.getColSize()): + for i in range(rowSize): + for j in range(self.game.getColSize()): color = self.getCellColor(i*rowSize+j) if i*rowSize+j == self.game.getCardSize()/2: tmpFish = 'Free' diff --git a/toontown/src/fishing/BingoGlobals.py b/toontown/src/fishing/BingoGlobals.py index 73d13225..edb80673 100644 --- a/toontown/src/fishing/BingoGlobals.py +++ b/toontown/src/fishing/BingoGlobals.py @@ -41,15 +41,15 @@ def getJackpot(typeId): return CardTypeDict[typeId][1] def getColor(typeId): - float_color = map(lambda x: x/255.0, CardTypeDict[typeId][0][0]) + float_color = [x/255.0 for x in CardTypeDict[typeId][0][0]] return float_color def getButtonColor(typeId): - float_color = map(lambda x: x/255.0, CardTypeDict[typeId][0][1]) + float_color = [x/255.0 for x in CardTypeDict[typeId][0][1]] return float_color def getButtonRolloverColor(typeId): - float_color = map(lambda x: x/255.0, CardTypeDict[typeId][0][2]) + float_color = [x/255.0 for x in CardTypeDict[typeId][0][2]] return float_color def getHelpString(typeId): diff --git a/toontown/src/fishing/BingoManagerAI.py b/toontown/src/fishing/BingoManagerAI.py index 271b0eeb..16e694ed 100644 --- a/toontown/src/fishing/BingoManagerAI.py +++ b/toontown/src/fishing/BingoManagerAI.py @@ -36,7 +36,7 @@ ################################################################# # Python Specific Modules ################################################################# -import cPickle +import pickle import os import time @@ -110,7 +110,7 @@ def start(self): # CHEATS #initState = 'Intermission' - for do in self.doId2do.values(): + for do in list(self.doId2do.values()): do.startup(initState) self.waitForIntermission() @@ -147,7 +147,7 @@ def shutdown(self): if self.doId2do: #self.notify.warning('__shutdown: Not all PondBingoManagers have shutdown! Manual Shutdown for Memory sake.') - for bingoMgr in self.doId2do.values(): + for bingoMgr in list(self.doId2do.values()): self.notify.info("__shutdown: shutting down PondBinfoManagerAI in zone %s" % bingoMgr.zoneId) bingoMgr.shutdown() self.doId2do.clear() @@ -167,7 +167,7 @@ def shutdown(self): ############################################################ def __resumeBingoNight(self, task): self.__hoodJackpots = self.load() - for bingoMgr in self.doId2do.values(): + for bingoMgr in list(self.doId2do.values()): if bingoMgr.isGenerated(): if self.finalGame: bingoMgr.setFinalGame(self.finalGame) @@ -193,7 +193,7 @@ def __handleSuperBingoClose(self, task): # Save Jackpot Data to File self.notify.info("handleSuperBingoClose: Saving Hood Jackpots to DB") self.notify.info("handleSuperBingoClose: hoodJackpots %s" %(self.__hoodJackpots)) - for hood in self.__hoodJackpots.keys(): + for hood in list(self.__hoodJackpots.keys()): if self.__hoodJackpots[hood][1]: self.__hoodJackpots[hood][0] += BG.ROLLOVER_AMOUNT # clamp it if it exceeds jackpot total @@ -239,7 +239,7 @@ def getIntermissionTime(self): # Output: None ############################################################ def __startIntermission(self): - for bingoMgr in self.doId2do.values(): + for bingoMgr in list(self.doId2do.values()): bingoMgr.setFinalGame(BG.INTERMISSION) if not self.finalGame: @@ -304,7 +304,7 @@ def generateBingoManagers(self): self.createPondBingoMgrAI(hood) # Create DPBMAI for every pond in every active estate. - for estateAI in self.air.estateMgr.estate.values(): + for estateAI in list(self.air.estateMgr.estate.values()): self.createPondBingoMgrAI(estateAI) ############################################################ @@ -394,7 +394,7 @@ def startDynPondBingoMgrAI(self, bingoMgr): # Output: None ############################################################ def removePondBingoMgrAI(self, doId): - if self.doId2do.has_key(doId): + if doId in self.doId2do: zoneId = self.doId2do[doId].zoneId self.notify.info('removePondBingoMgrAI: Removing PondBingoMgrAI %s' %(zoneId)) hood = self.__hoodToUse(zoneId) @@ -414,7 +414,7 @@ def removePondBingoMgrAI(self, doId): ############################################################ def setAvCatchForPondMgr(self, avId, zoneId, catch): self.notify.info('setAvCatchForPondMgr: zoneId %s' %(zoneId)) - if self.zoneId2do.has_key(zoneId): + if zoneId in self.zoneId2do: self.zoneId2do[zoneId].setAvCatch(avId, catch) else: self.notify.info('setAvCatchForPondMgr Failed: zoneId %s' %(zoneId)) @@ -439,7 +439,7 @@ def getFileName(self): # Output: None ############################################################ def saveTo(self, file): - cPickle.dump(self.__hoodJackpots, file) + pickle.dump(self.__hoodJackpots, file) ############################################################ # Method: save @@ -475,7 +475,7 @@ def loadFrom(self, file): # Default Jackpot Amount jackpots = self.DefaultReward try: - jackpots = cPickle.load(file) + jackpots = pickle.load(file) except EOFError: pass return jackpots diff --git a/toontown/src/fishing/BingoNightHolidayAI.py b/toontown/src/fishing/BingoNightHolidayAI.py index c7428b5e..e218f24f 100644 --- a/toontown/src/fishing/BingoNightHolidayAI.py +++ b/toontown/src/fishing/BingoNightHolidayAI.py @@ -65,7 +65,7 @@ def __init__(self, air, holidayId): def start(self): if self.air.bingoMgr: - raise PythonUtil.SingletonError, "Bingo Manager already Exists! DO NOT RUN HOLIDAY!!" + raise PythonUtil.SingletonError("Bingo Manager already Exists! DO NOT RUN HOLIDAY!!") else: self.notify.info('Starting BingoNight Holiday: %s' % (time.ctime())) self.bingoMgr = BingoManagerAI.BingoManagerAI(self.air) diff --git a/toontown/src/fishing/BlockoutBingo.py b/toontown/src/fishing/BlockoutBingo.py index 7220d267..31d8e6c5 100644 --- a/toontown/src/fishing/BlockoutBingo.py +++ b/toontown/src/fishing/BlockoutBingo.py @@ -44,7 +44,7 @@ def __init__( self, cardSize=BingoGlobals.CARD_SIZE, # Output: None ################################################################# def checkForWin(self, id=0): - for i in xrange(self.rowSize): + for i in range(self.rowSize): if not self.rowCheck(i): return BingoGlobals.NO_UPDATE return BingoGlobals.WIN diff --git a/toontown/src/fishing/DistributedFishingPond.py b/toontown/src/fishing/DistributedFishingPond.py index 75bf181b..b7788196 100644 --- a/toontown/src/fishing/DistributedFishingPond.py +++ b/toontown/src/fishing/DistributedFishingPond.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer -import FishGlobals +from . import FishGlobals from toontown.fishing import DistributedPondBingoManager from pandac.PandaModules import Vec3 from direct.task import Task @@ -76,7 +76,7 @@ def checkTargets(self, task=None): """ self.notify.debug("checkTargets") if self.localToonSpot != None: - for target in self.targets.values(): + for target in list(self.targets.values()): targetPos = target.getPos(render) distVec = Vec3(targetPos - self.localToonBobPos) dist = distVec.length() @@ -190,7 +190,7 @@ def cleanupBingoMgr(self): def setLocalToonSpot(self, spot=None): self.localToonSpot = spot - if (spot is not None) and (not self.visitedSpots.has_key(spot.getDoId())): + if (spot is not None) and (spot.getDoId() not in self.visitedSpots): self.visitedSpots[spot.getDoId()] = spot ############################################################ @@ -225,7 +225,7 @@ def getLocalToonSpot(self): # Output: None ############################################################ def resetSpotGui(self): - for spot in self.visitedSpots.values(): + for spot in list(self.visitedSpots.values()): spot.resetCastGui() ############################################################ @@ -239,7 +239,7 @@ def resetSpotGui(self): # Output: None ############################################################ def setSpotGui(self): - for spot in self.visitedSpots.values(): + for spot in list(self.visitedSpots.values()): spot.setCastGui() diff --git a/toontown/src/fishing/DistributedFishingPondAI.py b/toontown/src/fishing/DistributedFishingPondAI.py index 41a58b9d..a17121cc 100644 --- a/toontown/src/fishing/DistributedFishingPondAI.py +++ b/toontown/src/fishing/DistributedFishingPondAI.py @@ -1,8 +1,8 @@ from direct.distributed import DistributedObjectAI from toontown.toonbase import TTLocalizer from direct.directnotify import DirectNotifyGlobal -import DistributedFishingTargetAI -import FishingTargetGlobals +from . import DistributedFishingTargetAI +from . import FishingTargetGlobals from toontown.hood import ZoneUtil import random @@ -32,7 +32,7 @@ def generate(self): def delete(self): self.notify.debug("delete") # Delete all the targets - for target in self.targets.values(): + for target in list(self.targets.values()): target.requestDelete() del self.targets DistributedObjectAI.DistributedObjectAI.delete(self) diff --git a/toontown/src/fishing/DistributedFishingTarget.py b/toontown/src/fishing/DistributedFishingTarget.py index 21c000e0..c6aa81f6 100644 --- a/toontown/src/fishing/DistributedFishingTarget.py +++ b/toontown/src/fishing/DistributedFishingTarget.py @@ -10,7 +10,7 @@ from direct.directutil import Mopath from toontown.toonbase import ToontownGlobals from direct.actor import Actor -import FishingTargetGlobals +from . import FishingTargetGlobals import random import math from toontown.effects import Bubbles diff --git a/toontown/src/fishing/DistributedFishingTargetAI.py b/toontown/src/fishing/DistributedFishingTargetAI.py index 9da424e7..16f5b796 100644 --- a/toontown/src/fishing/DistributedFishingTargetAI.py +++ b/toontown/src/fishing/DistributedFishingTargetAI.py @@ -2,7 +2,7 @@ from direct.fsm import ClassicFSM from direct.fsm import State from direct.task import Task -import FishingTargetGlobals +from . import FishingTargetGlobals import random from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals diff --git a/toontown/src/fishing/DistributedPondBingoManagerAI.py b/toontown/src/fishing/DistributedPondBingoManagerAI.py index 4258c57c..7c39caf1 100644 --- a/toontown/src/fishing/DistributedPondBingoManagerAI.py +++ b/toontown/src/fishing/DistributedPondBingoManagerAI.py @@ -295,14 +295,14 @@ def cardUpdate(self, cardId, cellId, genus, species): success = self.card.cellUpdateCheck(cellId, genus, species) if success == BingoGlobals.WIN: self.avId2Fish[avId] = ( None, None ) - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): if id != avId: self.notify.debug('cardUpdate: avId %s enable Bingo' %(id)) self.d_updateGameState(id, cellId) self.d_enableBingo(id) elif success == BingoGlobals.UPDATE: self.avId2Fish[avId] = ( None, None ) - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): if id != avId: self.notify.debug('cardUpdate: avId %s Update only' %(id)) self.d_updateGameState(id, cellId) @@ -344,7 +344,7 @@ def isUpdateValid(self, id, genus, species): # validate that the user and the ai have matching fish. Otherwise, # it could be a hack attempt. Without this check, a hacker could # send a boot every time, virtually guaranteeing a win. - if self.avId2Fish.has_key(id): + if id in self.avId2Fish: if self.avId2Fish[id] != (genus, species): self.notify.warning('isUpdateValid: Avatar and AI Fish do not match.') result = 0 @@ -445,7 +445,7 @@ def addAvToGame(self, avId): # Output: Returns success or failure ############################################################ def removeAvFromGame(self, avId): - if self.avId2Fish.has_key(avId): + if avId in self.avId2Fish: self.notify.debug("removeAvFromGame: Removing avId %s from avId2Fish" % (avId)) del self.avId2Fish[avId] else: @@ -560,7 +560,7 @@ def getPondDoId(self): # Output: None ########################################################### def setAvCatch(self, avId, catch): - if self.avId2Fish.has_key(avId): + if avId in self.avId2Fish: self.avId2Fish[avId] = catch # For cheating / testing @@ -646,7 +646,7 @@ def enterIntro(self): # however, that seems silly to call this for # every game since the spots handle entering and # exiting already. - avIdList = self.pond.avId2SpotDict.keys() + avIdList = list(self.pond.avId2SpotDict.keys()) if avIdList: self.notify.debug('enterIntro: Avatars %s found at Fishing Pond in zone %s' %(avIdList, self.zoneId)) for id in avIdList: @@ -711,7 +711,7 @@ def enterWaitCountdown(self): BingoGlobals.TIMEOUT_SESSION, ['Playing']) - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): self.d_setCardState(id) if self.typeId == BingoGlobals.BLOCKOUT_CARD: self.d_setJackpot(id) @@ -765,7 +765,7 @@ def enterPlaying(self): ['GameOver']) # Change the client state for each player # participating in the game. - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): # Reset Fish for each player in the game. self.avId2Fish[id] = (None, None) self.d_setState(id, 'Playing') @@ -819,7 +819,7 @@ def enterReward(self): self.timeStamp = globalClockDelta.getRealNetworkTime() avId = self.air.getAvatarIdFromSender() winningIds = [] - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): if (id is not None): winningIds.append(str(id)) av = self.air.doId2do.get(id, None) @@ -948,7 +948,7 @@ def enterIntermission(self): #self.timeStamp = globalClockDelta.getRealNetworkTime() self.timeStamp = self.air.bingoMgr.getIntermissionTime() - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): self.d_setState(id, 'Intermission') ################################################################# @@ -993,7 +993,7 @@ def enterCloseEvent(self): self.notify.debug("enterCloseEvent: Enter CloseEvent State in zone %s" %(self.zoneId)) self.timeStamp = globalClockDelta.getRealNetworkTime() - for id in self.avId2Fish.keys(): + for id in list(self.avId2Fish.keys()): self.d_setState(id, 'CloseEvent') self.__startTimeout(self.uniqueName('CloseEventTimer-%s'%(self.doId)), diff --git a/toontown/src/fishing/FishBase.py b/toontown/src/fishing/FishBase.py index 0b417e02..a4c071ca 100644 --- a/toontown/src/fishing/FishBase.py +++ b/toontown/src/fishing/FishBase.py @@ -1,7 +1,7 @@ # NOTE: This file is imported on the client and AI, so do not import anything # that the AI will have a problem with (like opening a window) -import FishGlobals +from . import FishGlobals from toontown.toonbase import TTLocalizer from direct.directnotify import DirectNotifyGlobal diff --git a/toontown/src/fishing/FishBrowser.py b/toontown/src/fishing/FishBrowser.py index 5def03d5..2cf36adc 100644 --- a/toontown/src/fishing/FishBrowser.py +++ b/toontown/src/fishing/FishBrowser.py @@ -5,8 +5,8 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import GenusPanel -import FishGlobals +from . import GenusPanel +from . import FishGlobals class FishBrowser(DirectScrolledList): """ @@ -54,7 +54,7 @@ def __init__(self, parent=aspect2d, **kw): # Make the disabled button fade out ('decButton_image3_color', Vec4(0.8,0.8,0.8,0.5), None), ('numItemsVisible', 1, None), - ('items', map(str, FishGlobals.getGenera()), None), + ('items', list(map(str, FishGlobals.getGenera())), None), ('scrollSpeed', 4, None), ('itemMakeFunction', GenusPanel.GenusPanel, None), ('itemMakeExtraArgs', None, None), diff --git a/toontown/src/fishing/FishCollection.py b/toontown/src/fishing/FishCollection.py index aa539320..b861292a 100644 --- a/toontown/src/fishing/FishCollection.py +++ b/toontown/src/fishing/FishCollection.py @@ -1,6 +1,6 @@ -import FishBase -import FishGlobals +from . import FishBase +from . import FishGlobals class FishCollection: diff --git a/toontown/src/fishing/FishGlobals.py b/toontown/src/fishing/FishGlobals.py index 9bbd7729..ad25db89 100644 --- a/toontown/src/fishing/FishGlobals.py +++ b/toontown/src/fishing/FishGlobals.py @@ -39,7 +39,7 @@ 94: JellybeanItem, 100: BootItem, } -SortedProbabilityCutoffs = ProbabilityDict.keys() +SortedProbabilityCutoffs = list(ProbabilityDict.keys()) SortedProbabilityCutoffs.sort() Rod2JellybeanDict = { @@ -297,7 +297,7 @@ def getGenera(): """ Return a list of all genera (plural for genus) """ - return __fishDict.keys() + return list(__fishDict.keys()) # Indexes into the FishDict data ROD_WEIGHT_MIN_INDEX = 0 @@ -461,7 +461,7 @@ def getValue(genus, species, weight): __anywhereDict = copy.deepcopy(__emptyRodDict) __pondInfoDict = {} # Loop through all the fish -for genus, speciesList in __fishDict.items(): +for genus, speciesList in list(__fishDict.items()): for species in range(len(speciesList)): __totalNumFish += 1 # Pull off the properties we are interested in @@ -477,7 +477,7 @@ def getValue(genus, species, weight): if zone == Anywhere: # Now go through the rod indexes adding fish to the pond that # can be caught by that rod - for rodIndex, rarityDict in __anywhereDict.items(): + for rodIndex, rarityDict in list(__anywhereDict.items()): if canBeCaughtByRod(genus, species, rodIndex): fishList = rarityDict.setdefault(effectiveRarity, []) fishList.append( (genus, species) ) @@ -492,27 +492,27 @@ def getValue(genus, species, weight): if subZones: pondZones.extend(subZones) for pondZone in pondZones: - if __pondInfoDict.has_key(pondZone): + if pondZone in __pondInfoDict: rodDict = __pondInfoDict[pondZone] else: rodDict = copy.deepcopy(__emptyRodDict) __pondInfoDict[pondZone] = rodDict # Now go through the rod indexes adding fish to the pond that # can be caught by that rod - for rodIndex, rarityDict in rodDict.items(): + for rodIndex, rarityDict in list(rodDict.items()): if canBeCaughtByRod(genus, species, rodIndex): fishList = rarityDict.setdefault(effectiveRarity, []) fishList.append( (genus, species) ) # Now add the fish in the anywhere dict to the pondInfoDict entries -for zone, rodDict in __pondInfoDict.items(): - for rodIndex, anywhereRarityDict in __anywhereDict.items(): - for rarity, anywhereFishList in anywhereRarityDict.items(): +for zone, rodDict in list(__pondInfoDict.items()): + for rodIndex, anywhereRarityDict in list(__anywhereDict.items()): + for rarity, anywhereFishList in list(anywhereRarityDict.items()): rarityDict = rodDict[rodIndex] fishList = rarityDict.setdefault(rarity, []) fishList.extend(anywhereFishList) def getPondDict(zoneId): - print __pondInfoDict[zoneId] + print(__pondInfoDict[zoneId]) def getTotalNumFish(): return __totalNumFish @@ -529,16 +529,16 @@ def testRarity(rodId = 0, numIter = 100000): v = __rollRarityDice(rodId) d[v] += 1 # convert to a percentage - for rarity, count in d.items(): + for rarity, count in list(d.items()): percentage = count / float(numIter) * 100 d[rarity] = percentage - print d + print(d) def getRandomFish(): """ Useful for debugging """ - genus = random.choice(__fishDict.keys()) + genus = random.choice(list(__fishDict.keys())) species = random.randint(0, len(__fishDict[genus])-1) return genus, species @@ -553,10 +553,10 @@ def getSimplePondInfo(): # import pprint # pprint.pprint(FishGlobals.getPondInfo()) info = {} - for pondId, pondInfo in __pondInfoDict.items(): + for pondId, pondInfo in list(__pondInfoDict.items()): pondFishList = [] - for rodId, rodInfo in pondInfo.items(): - for rarity, fishList in rodInfo.items(): + for rodId, rodInfo in list(pondInfo.items()): + for rarity, fishList in list(rodInfo.items()): for fish in fishList: if fish not in pondFishList: pondFishList.append(fish) @@ -576,12 +576,12 @@ def getPondGeneraList(pondId): def printNumGeneraPerPond(): pondInfo = getSimplePondInfo() - for pondId, fishList in pondInfo.items(): + for pondId, fishList in list(pondInfo.items()): generaList = [] for fish in fishList: if fish[0] not in generaList: generaList.append(fish[0]) - print "Pond %s has %s Genera" % (pondId, len(generaList)) + print("Pond %s has %s Genera" % (pondId, len(generaList))) def generateFishingReport(numCasts = 10000, hitRate = 0.8): @@ -629,24 +629,24 @@ def generateFishingReport(numCasts = 10000, hitRate = 0.8): # Else it is a boot, which we do not care about numPonds = len(totalPondMoney) - for pond, money in totalPondMoney.items(): + for pond, money in list(totalPondMoney.items()): baitCost = 0 for rod in range(MaxRodId+1): baitCost += getCastCost(rod) totalCastCost = baitCost * (numCasts) - print ("pond: %s totalMoney: %s profit: %s perCast: %s" % + print(("pond: %s totalMoney: %s profit: %s perCast: %s" % (pond, money, (money - totalCastCost), # Profit (money - totalCastCost)/float(numCasts * (MaxRodId+1))), # Profit per cast - ) - for rod, money in totalRodMoney.items(): + )) + for rod, money in list(totalRodMoney.items()): baitCost = getCastCost(rod) totalCastCost = baitCost * (numCasts * numPonds) - print ("rod: %s totalMoney: %s castCost: %s profit: %s perCast: %s" % + print(("rod: %s totalMoney: %s castCost: %s profit: %s perCast: %s" % (rod, money, totalCastCost, (money - totalCastCost), # Profit (money - totalCastCost)/float(numCasts * numPonds)), # Profit per cast - ) + )) diff --git a/toontown/src/fishing/FishManagerAI.py b/toontown/src/fishing/FishManagerAI.py index e207b7c4..fa48014f 100644 --- a/toontown/src/fishing/FishManagerAI.py +++ b/toontown/src/fishing/FishManagerAI.py @@ -5,10 +5,10 @@ from toontown.toon import NPCToons import random from direct.showbase import PythonUtil -import FishGlobals +from . import FishGlobals from toontown.toonbase import TTLocalizer -import FishBase -import FishGlobals +from . import FishBase +from . import FishGlobals from toontown.hood import ZoneUtil from toontown.toonbase import ToontownGlobals diff --git a/toontown/src/fishing/FishPanel.py b/toontown/src/fishing/FishPanel.py index c45edcf3..db921604 100644 --- a/toontown/src/fishing/FishPanel.py +++ b/toontown/src/fishing/FishPanel.py @@ -6,8 +6,8 @@ from pandac.PandaModules import * from toontown.toonbase import TTLocalizer from direct.interval.IntervalGlobal import * -import FishGlobals -import FishPhoto +from . import FishGlobals +from . import FishPhoto class FishPanel(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory("FishPanel") @@ -170,8 +170,8 @@ def show(self, code=FishGlobals.FishItem): assert self.notify.debugStateCall(self) # if we are browsing fish we must be awake messenger.send('wakeup') - apply(self.photo.setSwimBounds, self.swimBounds) - apply(self.photo.setSwimColor, self.swimColor) + self.photo.setSwimBounds(*self.swimBounds) + self.photo.setSwimColor(*self.swimColor) if code == FishGlobals.FishItem: self.extraLabel.hide() diff --git a/toontown/src/fishing/FishPhoto.py b/toontown/src/fishing/FishPhoto.py index 0aa3bae9..16b45909 100644 --- a/toontown/src/fishing/FishPhoto.py +++ b/toontown/src/fishing/FishPhoto.py @@ -4,7 +4,7 @@ #from direct.gui.DirectGui import * from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import FishGlobals +from . import FishGlobals class DirectRegion(NodePath): notify = DirectNotifyGlobal.directNotify.newCategory("DirectRegion") @@ -59,18 +59,18 @@ def load(self): cm = CardMaker('displayRegionCard') assert hasattr(self, "bounds") - apply(cm.setFrame, self.bounds) + cm.setFrame(*self.bounds) self.card = card = self.attachNewNode(cm.generate()) assert hasattr(self, "color") - apply(card.setColor, self.color) + card.setColor(*self.color) newBounds=card.getTightBounds() ll=render2d.getRelativePoint(card, newBounds[0]) ur=render2d.getRelativePoint(card, newBounds[1]) newBounds=[ll.getX(), ur.getX(), ll.getZ(), ur.getZ()] # scale the -1.0..2.0 range to 0.0..1.0: - newBounds=map(lambda x: max(0.0, min(1.0, (x+1.0)/2.0)), newBounds) + newBounds=[max(0.0, min(1.0, (x+1.0)/2.0)) for x in newBounds] self.cDr = base.win.makeDisplayRegion(*newBounds) self.cDr.setSort(10) @@ -145,8 +145,8 @@ def makeFishFrame(self, actor): # scale the actor to the frame if not hasattr(self, "fishDisplayRegion"): self.fishDisplayRegion = DirectRegion(parent=self) - apply(self.fishDisplayRegion.setBounds, self.swimBounds) - apply(self.fishDisplayRegion.setColor, self.swimColor) + self.fishDisplayRegion.setBounds(*self.swimBounds) + self.fishDisplayRegion.setColor(*self.swimColor) frame = self.fishDisplayRegion.load() pitch = frame.attachNewNode('pitch') rotate = pitch.attachNewNode('rotate') diff --git a/toontown/src/fishing/FishPicker.py b/toontown/src/fishing/FishPicker.py index e32f396b..61c6b717 100644 --- a/toontown/src/fishing/FishPicker.py +++ b/toontown/src/fishing/FishPicker.py @@ -5,7 +5,7 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import FishPanel +from . import FishPanel class FishPicker(DirectScrolledList): diff --git a/toontown/src/fishing/FishPokerBase.py b/toontown/src/fishing/FishPokerBase.py index e51e1c81..cfbdcb76 100644 --- a/toontown/src/fishing/FishPokerBase.py +++ b/toontown/src/fishing/FishPokerBase.py @@ -1,5 +1,5 @@ -import FishBase +from . import FishBase from toontown.toonbase import TTLocalizer CARD_INDEX = 0 @@ -79,17 +79,17 @@ def drawCard(self, card): def getCurrentValue(self): cards = {} noneList = [] - for cardInfo in self.__cards.values(): + for cardInfo in list(self.__cards.values()): card, locked = cardInfo if card is None: noneList.append(1) else: genus = card.getGenus() - if cards.has_key(genus): + if genus in cards: cards[genus] += 1 else: cards[genus] = 1 - cardList = cards.values() + cardList = list(cards.values()) cardList.sort() cardList.reverse() cardList.extend(noneList) diff --git a/toontown/src/fishing/FishPokerGui.py b/toontown/src/fishing/FishPokerGui.py index c0cd569a..baece866 100644 --- a/toontown/src/fishing/FishPokerGui.py +++ b/toontown/src/fishing/FishPokerGui.py @@ -1,8 +1,8 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * -import FishPokerBase -import FishGlobals +from . import FishPokerBase +from . import FishGlobals from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals @@ -158,7 +158,7 @@ def drawCard(self, card): def clear(self): FishPokerBase.FishPokerBase.clear(self) # Update the gui - for cardGui in self.__cardGuis.values(): + for cardGui in list(self.__cardGuis.values()): cardGui.clear() # Update value self.updateCashIn() diff --git a/toontown/src/fishing/FishSellGUI.py b/toontown/src/fishing/FishSellGUI.py index 576dcbfa..d7d0fe09 100644 --- a/toontown/src/fishing/FishSellGUI.py +++ b/toontown/src/fishing/FishSellGUI.py @@ -4,8 +4,8 @@ from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from direct.task import Task -import FishBase -import FishPicker +from . import FishBase +from . import FishPicker class FishSellGUI(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory("FishGui") diff --git a/toontown/src/fishing/FishTank.py b/toontown/src/fishing/FishTank.py index 78dd292f..0e0d5e8a 100644 --- a/toontown/src/fishing/FishTank.py +++ b/toontown/src/fishing/FishTank.py @@ -1,6 +1,6 @@ -import FishBase -import FishGlobals +from . import FishBase +from . import FishGlobals class FishTank: diff --git a/toontown/src/fishing/GenusPanel.py b/toontown/src/fishing/GenusPanel.py index a87434f6..dfa5f373 100644 --- a/toontown/src/fishing/GenusPanel.py +++ b/toontown/src/fishing/GenusPanel.py @@ -5,9 +5,9 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import FishBase -import FishGlobals -import FishPhoto +from . import FishBase +from . import FishGlobals +from . import FishPhoto class GenusPanel(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory("GenusPanel") diff --git a/toontown/src/fishing/NormalBingo.py b/toontown/src/fishing/NormalBingo.py index 1cb59768..ea227615 100644 --- a/toontown/src/fishing/NormalBingo.py +++ b/toontown/src/fishing/NormalBingo.py @@ -81,7 +81,7 @@ def checkForBingo(self): return BingoGlobals.WIN # Next check remaining rows and columns - for i in xrange(BingoGlobals.CARD_ROWS): + for i in range(BingoGlobals.CARD_ROWS): if i != (BingoGlobals.CARD_ROWS/2): rowResult = self.rowCheck(i) colResult = self.colCheck(i) diff --git a/toontown/src/fishing/fishingSim.py b/toontown/src/fishing/fishingSim.py index 4fc24025..05b01a32 100644 --- a/toontown/src/fishing/fishingSim.py +++ b/toontown/src/fishing/fishingSim.py @@ -478,7 +478,7 @@ def flashFish(): fBite = (random.random() < 0.4) or (not self.fTargetMode) delay = self.fTargetMode * 0.25 if fBite: - print 'BITE' + print('BITE') Sequence(Wait(random.random() * delay), Func(flashFunc), Func(self.catchFish), @@ -486,7 +486,7 @@ def flashFish(): Func(moveFunc), ).play() else: - print 'MISS' + print('MISS') def moveIt(): moveFunc(targetPos = target.getPos()) Sequence(Wait(random.random() * delay), diff --git a/toontown/src/friends/FriendInviter.py b/toontown/src/friends/FriendInviter.py index 0e1c28a8..b87ad224 100644 --- a/toontown/src/friends/FriendInviter.py +++ b/toontown/src/friends/FriendInviter.py @@ -505,11 +505,11 @@ def enterCheckAvailability(self): # shouldn't be possible, but maybe someone managed to click # the "Friend" button before the AvatarPanel shut itself down # or something dumb like that. - if not base.cr.doId2do.has_key(self.avId): + if self.avId not in base.cr.doId2do: self.fsm.request('wentAway') return - if not base.cr.doId2do.has_key(self.avId): + if self.avId not in base.cr.doId2do: self.fsm.request('wentAway') return else: @@ -719,7 +719,7 @@ def enterFriendsNoMore(self): # We cheat by sending a spurious "disable" message in this # case. Presumably this will not confuse anyone, since no one # else should be listening for this toon's disable message. - if not base.cr.doId2do.has_key(self.avId): + if self.avId not in base.cr.doId2do: messenger.send(self.avDisableName) def exitFriendsNoMore(self): diff --git a/toontown/src/friends/FriendsListManager.py b/toontown/src/friends/FriendsListManager.py index 3cc01c38..1b51fa80 100644 --- a/toontown/src/friends/FriendsListManager.py +++ b/toontown/src/friends/FriendsListManager.py @@ -1,8 +1,8 @@ from pandac.PandaModules import * -import FriendsListPanel -import FriendInviter -import FriendInvitee -import FriendNotifier +from . import FriendsListPanel +from . import FriendInviter +from . import FriendInvitee +from . import FriendNotifier from direct.directnotify import DirectNotifyGlobal from toontown.toon import ToonTeleportPanel from toontown.friends import ToontownFriendSecret @@ -15,7 +15,7 @@ from toontown.toon import PlayerDetailPanel from toontown.toonbase import ToontownGlobals from toontown.toon import Toon -import FriendHandle +from . import FriendHandle from otp.otpbase import OTPGlobals class FriendsListManager: diff --git a/toontown/src/friends/FriendsListPanel.py b/toontown/src/friends/FriendsListPanel.py index b7d63dd3..c8a442dd 100644 --- a/toontown/src/friends/FriendsListPanel.py +++ b/toontown/src/friends/FriendsListPanel.py @@ -567,7 +567,7 @@ def __updateScrollList(self): #print playerFriendList for playerFriendId in playerFriendList: - if base.cr.playerFriendsManager.playerId2Info.has_key(playerFriendId): + if playerFriendId in base.cr.playerFriendsManager.playerId2Info: playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerFriendId) #print("playerFriendInfo.avatarId %s" % (playerFriendInfo.avatarId)) if playerFriendInfo.onlineYesNo: @@ -595,7 +595,7 @@ def __updateScrollList(self): #print playerFriendList for playerFriendId in playerFriendList: - if base.cr.playerFriendsManager.playerId2Info.has_key(playerFriendId): + if playerFriendId in base.cr.playerFriendsManager.playerId2Info: playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerFriendId) if playerFriendInfo.onlineYesNo: if playerFriendInfo.understandableYesNo: @@ -706,7 +706,7 @@ def __updateScrollList(self): if self.panelType == FLPPets: # The list is a list of nearby pets - for (objId, obj) in base.cr.doId2do.items(): + for (objId, obj) in list(base.cr.doId2do.items()): from toontown.pets import DistributedPet if isinstance(obj, DistributedPet.DistributedPet): friendPair = (objId, 0) @@ -723,7 +723,7 @@ def __updateScrollList(self): # Remove old buttons - for friendPair in self.friends.keys(): + for friendPair in list(self.friends.keys()): #if friendPair not in newFriends: friendButton = self.friends[friendPair] self.scrollList.removeItem(friendButton, refresh=0) @@ -758,7 +758,7 @@ def __updateScrollList(self): # Add new friends for friendPair in newFriends: - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -766,7 +766,7 @@ def __updateScrollList(self): # Add Pet Friends for friendPair in petFriends: - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorNoChat, 0) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -775,7 +775,7 @@ def __updateScrollList(self): # Add Secret Friends for friendPair in freeChatDouble: #print ("freeChatDouble %s" % (friendPair[0])) - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorFreeChat, 1) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -783,7 +783,7 @@ def __updateScrollList(self): for friendPair in freeChatOneRef: #print ("freeChatOneRef %s" % (friendPair[0])) - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorFreeChat, 0) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -792,7 +792,7 @@ def __updateScrollList(self): # Add Speed Friends for friendPair in speedChatDouble: #print ("speedChatDouble %s" % (friendPair[0])) - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorSpeedChat, 1) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -800,7 +800,7 @@ def __updateScrollList(self): for friendPair in speedChatOneRef: #print ("speedChatOneRef %s" % (friendPair[0])) - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorSpeedChat, 0) if friendButton: self.scrollList.addItem(friendButton, refresh=0) @@ -809,7 +809,7 @@ def __updateScrollList(self): # Add Offline Friends for friendPair in offlineFriends: - if not self.friends.has_key(friendPair): + if friendPair not in self.friends: friendButton = self.makeFriendButton(friendPair, ToontownGlobals.ColorNoChat, 0) if friendButton: self.scrollList.addItem(friendButton, refresh=0) diff --git a/toontown/src/golf/DistributedGolfCourseAI.py b/toontown/src/golf/DistributedGolfCourseAI.py index df64d85c..1c15dc21 100644 --- a/toontown/src/golf/DistributedGolfCourseAI.py +++ b/toontown/src/golf/DistributedGolfCourseAI.py @@ -412,7 +412,7 @@ def handleTimeout(avIds, self=self): # some clients may already be ready - for avId in self.avStateDict.keys(): + for avId in list(self.avStateDict.keys()): if self.avStateDict[avId] == READY: self.__barrier.clear(avId) @@ -481,7 +481,7 @@ def handleTimeout(avIds, self=self): # some clients may already be ready - for avId in self.avStateDict.keys(): + for avId in list(self.avStateDict.keys()): if self.avStateDict[avId] == ONHOLE: self.__barrier.clear(avId) @@ -498,7 +498,7 @@ def getStillPlayingAvIds(self): for avId in self.avIdList: av = simbase.air.doId2do.get(avId) if av: - if self.avStateDict.has_key(avId) and not \ + if avId in self.avStateDict and not \ self.avStateDict[avId] == EXITED: retval.append(avId) return retval @@ -576,7 +576,7 @@ def enterWaitReward(self): self.recordCourseUnderPar() trophiesList = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] if avId in self.newTrophies: oneTrophyList = self.newTrophies[avId] @@ -589,7 +589,7 @@ def enterWaitReward(self): trophiesList.append([]) holeBestList = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] if avId in self.newHoleBest: oneTrophyList = self.newHoleBest[avId] @@ -602,7 +602,7 @@ def enterWaitReward(self): holeBestList.append([]) courseBestList = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] if avId in self.newCourseBest: oneTrophyList = self.newCourseBest[avId] @@ -615,7 +615,7 @@ def enterWaitReward(self): courseBestList.append([]) cupList = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] if avId in self.newCups: oneCupList = self.newCups[avId] @@ -707,7 +707,7 @@ def isCurHoleDone(self): else: # if everyone is exited or Ball in we're done retval = True - for state in self.avStateDict.values(): + for state in list(self.avStateDict.values()): if not (state == BALLIN or state == EXITED): retval = False break @@ -717,7 +717,7 @@ def areAllBallsInHole(self): """Return true if everyone's ball is in the hole.""" self.notify.debug('areAllBallsInHole, self.avStateDict=%s' % self.avStateDict) allBallsInHole = True - for state in self.avStateDict.values(): + for state in list(self.avStateDict.values()): if state != BALLIN: allBallsInHole = False return allBallsInHole @@ -781,8 +781,8 @@ def updateHistoryForBallIn(self, avId): def incrementEndingHistory(self, avId, historyIndex): """Safely increment the golf ending history for an avatar.""" - if self.endingHistory.has_key(avId) and \ - GolfGlobals.TrophyRequirements.has_key(historyIndex): + if avId in self.endingHistory and \ + historyIndex in GolfGlobals.TrophyRequirements: maximumAmount = GolfGlobals.TrophyRequirements[historyIndex][-1] if self.endingHistory[avId][historyIndex] < maximumAmount: self.endingHistory[avId][historyIndex] += 1 @@ -1001,7 +1001,7 @@ def scoreCompareWithTime(tupleA, tupleB): winnerAvId = random.choice(tiedForFirst) winnerIndex = self.avIdList.index(winnerAvId) self.winnerByTieBreak = winnerAvId - for index in xrange(len(self.rankings)): + for index in range(len(self.rankings)): if (self.rankings[index] > 0) and (index != winnerIndex) : self.rankings[index] += 1 for avId in self.rankingsById: @@ -1027,7 +1027,7 @@ def awardTrophies(self): # now figure out which trophies he just got newTrophies = [] - for index in xrange(len(oldTrophies)): + for index in range(len(oldTrophies)): if not oldTrophies[index] and endingTrophies[index]: self.notify.debug('New Trophy %d' % index) self.air.writeServerEvent("golf_trophy", avId, "%s" % (index)) @@ -1050,7 +1050,7 @@ def awardCups(self): # now figure out which trophies he just got newCups = [] - for index in xrange(len(oldCups)): + for index in range(len(oldCups)): if not oldCups[index] and endingCups[index]: self.notify.debug('New Trophy %d' % index) newCups.append(True) @@ -1079,7 +1079,7 @@ def awardHoleBest(self): longestHoleBestList = 0 - for index in xrange(len(oldHoleBest)): + for index in range(len(oldHoleBest)): if endingHoleBest[index] < oldHoleBest[index]: self.notify.debug('New HoleBest %d' % index) newHoleBest.append(True) @@ -1106,7 +1106,7 @@ def awardCourseBest(self): longestCourseBestList = 0 - for index in xrange(len(oldCourseBest)): + for index in range(len(oldCourseBest)): if endingCourseBest[index] < oldCourseBest[index]: self.notify.debug('New CourseBest %d' % index) newCourseBest.append(True) @@ -1150,7 +1150,7 @@ def calcCoursePar(self): def getTotalScore(self, avId): """Return the total golf score for an avatar.""" retval = 0 - if self.scores.has_key(avId): + if avId in self.scores: for holeScore in self.scores[avId]: retval += holeScore return retval @@ -1259,7 +1259,7 @@ def recordHoleInOne(self): stillPlaying = self.getStillPlayingAvIds() for avId in stillPlaying: scoreList = self.scores[avId] - for holeIndex in xrange(len(scoreList)): + for holeIndex in range(len(scoreList)): strokes = scoreList[holeIndex] if strokes == 1: holeId = self.holeIds[holeIndex] diff --git a/toontown/src/golf/DistributedGolfEntranceAI.py b/toontown/src/golf/DistributedGolfEntranceAI.py index 4d449fa6..7715e319 100644 --- a/toontown/src/golf/DistributedGolfEntranceAI.py +++ b/toontown/src/golf/DistributedGolfEntranceAI.py @@ -26,7 +26,7 @@ def sendToGolfCourse(self, avId): self.golfZone = self.air.allocateZone() someHole = DistributedGolfHoleAI.DistributedGolfHoleAI(self.golfZone) someHole.generateWithRequired(self.golfZone) - print("Sending %s to course %s" % (avId, self.golfZone)) + print(("Sending %s to course %s" % (avId, self.golfZone))) self.sendUpdate("sendToGolfCourse", [avId, self.golfZone]) \ No newline at end of file diff --git a/toontown/src/golf/DistributedGolfHole.py b/toontown/src/golf/DistributedGolfHole.py index 264be2f6..5c919450 100644 --- a/toontown/src/golf/DistributedGolfHole.py +++ b/toontown/src/golf/DistributedGolfHole.py @@ -347,7 +347,7 @@ def loadSounds(self): self.crowdBuildupSfx = [] self.crowdApplauseSfx = [] self.crowdMissSfx = [] - for i in xrange(4): + for i in range(4): self.crowdBuildupSfx.append( loader.loadSfx("phase_6/audio/sfx/Golf_Crowd_Buildup.mp3")) self.crowdApplauseSfx.append( @@ -395,7 +395,7 @@ def setup(self): if self.holeBottomNodePath.isEmpty(): holePositions = self.holePositions - for index in xrange(len(holePositions)): + for index in range(len(holePositions)): holePos = holePositions[index] targetNodePathGeom, t1, t2 = BuildGeometry.addCircleGeom(self.targets, 16, 1) targetNodePathGeom.setPos(holePos) @@ -1695,7 +1695,7 @@ def __endTossGolf(self): def __updateGolfPower(self, task): """Change the value of the power meter.""" if not self.powerBar: - print "### no power bar!!!" + print("### no power bar!!!") return Task.done newPower = self.__getGolfPower(globalClock.getFrameTime()) @@ -1873,7 +1873,7 @@ def doFlyOverMovie(self, avId): try: self.flyOverActor = Actor.Actor(camModelFullPath, {'camera':cameraAnimFullPath}) - except StandardError: + except Exception: # this hole doesn't have the flyover animation, just return self.notify.debug("Couldn't find flyover %s" % camModelFullPath) return False @@ -1887,7 +1887,7 @@ def doFlyOverMovie(self, avId): flyOverJoint = self.flyOverActor.find('**/camera1') children = flyOverJoint.getChildren() numChild = children.getNumPaths() - for i in xrange(numChild): + for i in range(numChild): childNodePath = children.getPath(i) childNodePath.removeNode() self.flyOverJoint = flyOverJoint diff --git a/toontown/src/golf/DistributedGolfHoleAI.py b/toontown/src/golf/DistributedGolfHoleAI.py index 075e57be..2f7e4d56 100644 --- a/toontown/src/golf/DistributedGolfHoleAI.py +++ b/toontown/src/golf/DistributedGolfHoleAI.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from pandac.PandaModules import * -import DistributedPhysicsWorldAI +from . import DistributedPhysicsWorldAI from direct.fsm.FSM import FSM from toontown.ai.ToonBarrier import * from toontown.golf import GolfGlobals @@ -503,10 +503,10 @@ def setBox(self, pos0, pos1, pos2, def parseLocators(self, objectCollection, optional = 0): if optional and objectCollection.getNumPaths(): # setup the optional movers as dictated by HoleInfo - if self.holeInfo.has_key('optionalMovers'): + if 'optionalMovers' in self.holeInfo: for optionalMoverId in self.holeInfo['optionalMovers']: searchStr = 'optional_mover_' + str(optionalMoverId) - for objIndex in xrange(objectCollection.getNumPaths()): + for objIndex in range(objectCollection.getNumPaths()): object = objectCollection.getPath(objIndex) if searchStr in object.getName(): self.fillLocator(objectCollection, objIndex) diff --git a/toontown/src/golf/DistributedPhysicsWorld.py b/toontown/src/golf/DistributedPhysicsWorld.py index 337964d5..0e31877f 100644 --- a/toontown/src/golf/DistributedPhysicsWorld.py +++ b/toontown/src/golf/DistributedPhysicsWorld.py @@ -10,7 +10,7 @@ from direct.showutil import Rope from direct.task import Task from direct.distributed.ClockDelta import * -import BuildGeometry +from . import BuildGeometry from toontown.golf import GolfGlobals from toontown.golf import PhysicsWorldBase import random, time diff --git a/toontown/src/golf/DistributedPhysicsWorldAI.py b/toontown/src/golf/DistributedPhysicsWorldAI.py index 6e01360c..f816a907 100644 --- a/toontown/src/golf/DistributedPhysicsWorldAI.py +++ b/toontown/src/golf/DistributedPhysicsWorldAI.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from pandac.PandaModules import * -import BuildGeometry +from . import BuildGeometry import random, time from math import * import math @@ -59,7 +59,7 @@ def upSetCommonObjects(self, objectData): def setupCommonObjects(self): print("setupCommonObjects") - print(self.commonHoldData) + print((self.commonHoldData)) if not self.commonHoldData: return elif self.commonHoldData[0][1] == 99: diff --git a/toontown/src/golf/DistributedPhysicsWorldBase.py b/toontown/src/golf/DistributedPhysicsWorldBase.py index 71fde715..9feb6423 100644 --- a/toontown/src/golf/DistributedPhysicsWorldBase.py +++ b/toontown/src/golf/DistributedPhysicsWorldBase.py @@ -9,7 +9,7 @@ from direct.showbase import PythonUtil from direct.task import Task from direct.distributed.ClockDelta import * -import BuildGeometry +from . import BuildGeometry from toontown.golf import GolfGlobals import random, time @@ -225,7 +225,7 @@ def placeBodies(self): def preStep(self): - print "Base class prestep" + print("Base class prestep") pass def postStep(self): @@ -429,7 +429,7 @@ def createCommonObject(self, type, commonId, pos, hpr, sizeX = 0 , sizeY = 0, mo #(time, ) timeData = (0.0, 5.0) forceData = (moveDistance/4.0, -moveDistance/4.0) - print ("Move Distance %s" % (moveDistance)) + print(("Move Distance %s" % (moveDistance))) self.commonObjectDict[commonId] = (commonId, type, box, motor, timeData, forceData) @@ -451,7 +451,7 @@ def createSphere(self, world, space, density, radius, ballIndex = None): geom = OdeSphereGeom(space, radius) self.space.setSurfaceType(geom, 1) # GolfGlobals.BALL_SURFACE - print (("collide ID is %s") % (self.space.setCollideId(geom, 42))) # GolfGlobals.BALL_COLLIDE_ID + print((("collide ID is %s") % (self.space.setCollideId(geom, 42)))) # GolfGlobals.BALL_COLLIDE_ID self.space.getCollideId(geom) geom2 = OdeSphereGeom(space, radius) diff --git a/toontown/src/golf/GolfGlobals.py b/toontown/src/golf/GolfGlobals.py index 0e83745c..760d01b0 100644 --- a/toontown/src/golf/GolfGlobals.py +++ b/toontown/src/golf/GolfGlobals.py @@ -363,7 +363,7 @@ if type(HoleInfo[holeId]['blockers']) == type(0): blockerNum = HoleInfo[holeId]['blockers'] HoleInfo[holeId]['blockers'] = (blockerNum,) - if HoleInfo[holeId].has_key('optionalMovers'): + if 'optionalMovers' in HoleInfo[holeId]: if type(HoleInfo[holeId]['optionalMovers']) == type(0): blockerNum = HoleInfo[holeId]['optionalMovers'] HoleInfo[holeId]['optionalMovers'] = (blockerNum,) @@ -444,7 +444,7 @@ def calcTrophyListFromHistory( history): Last item is for 100 course two wins.""" retval = [] historyIndex = 0 - for trophyIndex in xrange(NumHistory): + for trophyIndex in range(NumHistory): requirements = TrophyRequirements[trophyIndex] for amountNeeded in requirements: if history[historyIndex] >= amountNeeded: @@ -466,7 +466,7 @@ def calcCupListFromHistory( history): for gotTrophy in trophyList: if gotTrophy: numTrophiesWon += 1 - for cupIndex in xrange(len(retval)): + for cupIndex in range(len(retval)): threshold = (cupIndex + 1) * TrophiesPerCup if threshold <= numTrophiesWon: retval[cupIndex] = True diff --git a/toontown/src/golf/GolfHoleBase.py b/toontown/src/golf/GolfHoleBase.py index 0dc26672..a39c60d5 100644 --- a/toontown/src/golf/GolfHoleBase.py +++ b/toontown/src/golf/GolfHoleBase.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from pandac.PandaModules import * -import DistributedPhysicsWorldAI +from . import DistributedPhysicsWorldAI from direct.fsm.FSM import FSM from toontown.ai.ToonBarrier import * from toontown.golf import GolfGlobals @@ -95,7 +95,7 @@ def loadLevel(self): self.golfBarrier = self.terrainModel.find('**/collision1') if not self.golfBarrier.isEmpty(): golfBarrierCollection = self.terrainModel.findAllMatches('**/collision?') - for i in xrange(golfBarrierCollection.getNumPaths()): + for i in range(golfBarrierCollection.getNumPaths()): oneBarrier = golfBarrierCollection.getPath(i) if oneBarrier != self.golfBarrier: oneBarrier.wrtReparentTo(self.golfBarrier) diff --git a/toontown/src/golf/GolfRewardDialog.py b/toontown/src/golf/GolfRewardDialog.py index 3320d385..ab7f65f9 100644 --- a/toontown/src/golf/GolfRewardDialog.py +++ b/toontown/src/golf/GolfRewardDialog.py @@ -36,7 +36,7 @@ def calcTrophyTextListForOnePlayer(self, avId): if av and avId in self.avIdList: playerIndex = self.avIdList.index(avId) name = av.getName() - for trophyIndex in xrange(len(self.trophyList[playerIndex])): + for trophyIndex in range(len(self.trophyList[playerIndex])): wonTrophy = self.trophyList[playerIndex][trophyIndex] if wonTrophy: trophyName = TTLocalizer.GolfTrophyDescriptions[trophyIndex] diff --git a/toontown/src/golf/PhysicsWorldBase.py b/toontown/src/golf/PhysicsWorldBase.py index 3b2d24ce..efd0d50e 100644 --- a/toontown/src/golf/PhysicsWorldBase.py +++ b/toontown/src/golf/PhysicsWorldBase.py @@ -9,7 +9,7 @@ from direct.showbase import PythonUtil from direct.task import Task from direct.distributed.ClockDelta import * -import BuildGeometry +from . import BuildGeometry from toontown.golf import GolfGlobals import random, time @@ -210,7 +210,7 @@ def getTimingCycleLength(self): def getCycleTime(self, doprint = 0): cycleTime = (globalClock.getRealTime() + self.timingCycleOffset) % self.timingCycleLength if doprint: - print ("Get Cycle Time %s" % (cycleTime)) + print(("Get Cycle Time %s" % (cycleTime))) return cycleTime def setTimeIntoCycle(self, time, doprint = 0): diff --git a/toontown/src/hood/BRHood.py b/toontown/src/hood/BRHood.py index 175fd947..7fdd343b 100644 --- a/toontown/src/hood/BRHood.py +++ b/toontown/src/hood/BRHood.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import BRTownLoader from toontown.safezone import BRSafeZoneLoader from toontown.toonbase.ToontownGlobals import * diff --git a/toontown/src/hood/BRHoodDataAI.py b/toontown/src/hood/BRHoodDataAI.py index b7939e75..5295f5df 100644 --- a/toontown/src/hood/BRHoodDataAI.py +++ b/toontown/src/hood/BRHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import BRTreasurePlannerAI diff --git a/toontown/src/hood/BossbotHQ.py b/toontown/src/hood/BossbotHQ.py index 002897ed..d55dca83 100644 --- a/toontown/src/hood/BossbotHQ.py +++ b/toontown/src/hood/BossbotHQ.py @@ -1,5 +1,5 @@ -import CogHood +from . import CogHood from toontown.toonbase import ToontownGlobals from toontown.coghq import BossbotCogHQLoader from toontown.hood import ZoneUtil diff --git a/toontown/src/hood/BossbotHQDataAI.py b/toontown/src/hood/BossbotHQDataAI.py index 355ef873..eb73c4f3 100644 --- a/toontown/src/hood/BossbotHQDataAI.py +++ b/toontown/src/hood/BossbotHQDataAI.py @@ -1,6 +1,6 @@ from pandac.PandaModules import Point3 from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.coghq import DistributedCogHQDoorAI from toontown.building import DistributedDoorAI @@ -99,7 +99,7 @@ def createCogKarts(self): hprList = ( (110.815, 0, 0), (61.231, 0,0), (-105.481,0,0) ) mins = ToontownGlobals.FactoryLaffMinimums[3] kartIdList = [] - for cogCourse in xrange(len(posList)): + for cogCourse in range(len(posList)): pos = posList[cogCourse] hpr = hprList[cogCourse] cogKart = DistributedCogKartAI.DistributedCogKartAI(self.air, cogCourse, diff --git a/toontown/src/hood/CSHoodDataAI.py b/toontown/src/hood/CSHoodDataAI.py index 11abae0f..19c127be 100644 --- a/toontown/src/hood/CSHoodDataAI.py +++ b/toontown/src/hood/CSHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.coghq import DistributedFactoryElevatorExtAI from toontown.coghq import DistributedCogHQDoorAI @@ -7,7 +7,6 @@ from toontown.coghq import LobbyManagerAI from toontown.building import DistributedBossElevatorAI from toontown.suit import DistributedSellbotBossAI -from toontown.building import DistributedBoardingPartyAI class CSHoodDataAI(HoodDataAI.HoodDataAI): notify = DirectNotifyGlobal.directNotify.newCategory("CSHoodDataAI") @@ -22,33 +21,24 @@ def startup(self): HoodDataAI.HoodDataAI.startup(self) mins = ToontownGlobals.FactoryLaffMinimums[0] - + # TODO: define these in a more modular way self.testElev0 = DistributedFactoryElevatorExtAI.DistributedFactoryElevatorExtAI(self.air, self.air.factoryMgr, ToontownGlobals.SellbotFactoryInt, 0, antiShuffle = 0, minLaff = mins[0]) # antiShufflePOI self.testElev0.generateWithRequired(ToontownGlobals.SellbotFactoryExt) self.addDistObj(self.testElev0) - + self.testElev1 = DistributedFactoryElevatorExtAI.DistributedFactoryElevatorExtAI(self.air, self.air.factoryMgr, ToontownGlobals.SellbotFactoryInt, 1, antiShuffle = 0, minLaff = mins[1]) # antiShufflePOI self.testElev1.generateWithRequired(ToontownGlobals.SellbotFactoryExt) self.addDistObj(self.testElev1) - + # Lobby elevator self.lobbyMgr = LobbyManagerAI.LobbyManagerAI(self.air, DistributedSellbotBossAI.DistributedSellbotBossAI) self.lobbyMgr.generateWithRequired(ToontownGlobals.SellbotLobby) self.addDistObj(self.lobbyMgr) - + self.lobbyElevator = DistributedBossElevatorAI.DistributedBossElevatorAI(self.air, self.lobbyMgr, ToontownGlobals.SellbotLobby, antiShuffle = 1)#antiShufflePOI self.lobbyElevator.generateWithRequired(ToontownGlobals.SellbotLobby) self.addDistObj(self.lobbyElevator) - - if simbase.config.GetBool('want-boarding-groups', 1): - self.boardingParty = DistributedBoardingPartyAI.DistributedBoardingPartyAI(self.air, [self.lobbyElevator.doId], 8) - self.boardingParty.generateWithRequired(ToontownGlobals.SellbotLobby) - - factoryIdList = [self.testElev0.doId, self.testElev1.doId] - if simbase.config.GetBool('want-boarding-groups', 1): - self.factoryBoardingParty = DistributedBoardingPartyAI.DistributedBoardingPartyAI(self.air, factoryIdList, 4) - self.factoryBoardingParty.generateWithRequired(ToontownGlobals.SellbotFactoryExt) # CogHQ Main building -> Lobby doors destinationZone = ToontownGlobals.SellbotLobby @@ -56,13 +46,13 @@ def startup(self): self.air, 0, DoorTypes.EXT_COGHQ, destinationZone, doorIndex=0) extDoor1=DistributedCogHQDoorAI.DistributedCogHQDoorAI( - self.air, 1, DoorTypes.EXT_COGHQ, + self.air, 1, DoorTypes.EXT_COGHQ, destinationZone, doorIndex=1) extDoor2=DistributedCogHQDoorAI.DistributedCogHQDoorAI( - self.air, 2, DoorTypes.EXT_COGHQ, + self.air, 2, DoorTypes.EXT_COGHQ, destinationZone, doorIndex=2) extDoor3=DistributedCogHQDoorAI.DistributedCogHQDoorAI( - self.air, 3, DoorTypes.EXT_COGHQ, + self.air, 3, DoorTypes.EXT_COGHQ, destinationZone, doorIndex=3) extDoorList = [extDoor0, extDoor1, extDoor2, extDoor3] @@ -82,7 +72,7 @@ def startup(self): # Setup the doors and generate them for extDoor in extDoorList: # Tell them about each other - extDoor.setOtherDoor(intDoor0) + extDoor.setOtherDoor(intDoor0) # Put them in the right zones extDoor.zoneId = ToontownGlobals.SellbotHQ # Now that they both now about each other, generate them: diff --git a/toontown/src/hood/CashbotHQ.py b/toontown/src/hood/CashbotHQ.py index 9e66648a..aee9d32f 100644 --- a/toontown/src/hood/CashbotHQ.py +++ b/toontown/src/hood/CashbotHQ.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import CogHood +from . import CogHood from toontown.toonbase import ToontownGlobals, TTLocalizer from toontown.hood import ZoneUtil from toontown.coghq import CashbotCogHQLoader diff --git a/toontown/src/hood/CashbotHQDataAI.py b/toontown/src/hood/CashbotHQDataAI.py index d9ae9794..f0057936 100644 --- a/toontown/src/hood/CashbotHQDataAI.py +++ b/toontown/src/hood/CashbotHQDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.coghq import DistributedMintElevatorExtAI from toontown.coghq import DistributedCogHQDoorAI @@ -8,7 +8,6 @@ from toontown.building import DistributedCFOElevatorAI from toontown.suit import DistributedCashbotBossAI from toontown.building import FADoorCodes -from toontown.building import DistributedBoardingPartyAI class CashbotHQDataAI(HoodDataAI.HoodDataAI): notify = DirectNotifyGlobal.directNotify.newCategory("CashbotHqDataAI") @@ -18,13 +17,13 @@ def __init__(self, air, zoneId = None): if zoneId == None: zoneId = hoodId HoodDataAI.HoodDataAI.__init__(self, air, zoneId, hoodId) - + def startup(self): HoodDataAI.HoodDataAI.startup(self) mins = ToontownGlobals.FactoryLaffMinimums[1] - + # TODO: define these in a more modular way self.testElev0 = DistributedMintElevatorExtAI.DistributedMintElevatorExtAI(self.air, self.air.mintMgr, ToontownGlobals.CashbotMintIntA, antiShuffle = 0, minLaff = mins[0]) # antiShufflePOI self.testElev0.generateWithRequired(ToontownGlobals.CashbotHQ) @@ -42,14 +41,10 @@ def startup(self): self.lobbyMgr = LobbyManagerAI.LobbyManagerAI(self.air, DistributedCashbotBossAI.DistributedCashbotBossAI) self.lobbyMgr.generateWithRequired(ToontownGlobals.CashbotLobby) self.addDistObj(self.lobbyMgr) - + self.lobbyElevator = DistributedCFOElevatorAI.DistributedCFOElevatorAI(self.air, self.lobbyMgr, ToontownGlobals.CashbotLobby, antiShuffle = 1)#antiShufflePOI self.lobbyElevator.generateWithRequired(ToontownGlobals.CashbotLobby) self.addDistObj(self.lobbyElevator) - - if simbase.config.GetBool('want-boarding-groups', 1): - self.boardingParty = DistributedBoardingPartyAI.DistributedBoardingPartyAI(self.air, [self.lobbyElevator.doId], 8) - self.boardingParty.generateWithRequired(ToontownGlobals.CashbotLobby) # CogHQ Main building -> Lobby doors destinationZone = ToontownGlobals.CashbotLobby @@ -65,17 +60,11 @@ def startup(self): ToontownGlobals.CashbotHQ, doorIndex=0) intDoor0.setOtherDoor(extDoor0) intDoor0.zoneId = ToontownGlobals.CashbotLobby - - - mintIdList = [self.testElev0.doId, self.testElev1.doId, self.testElev2.doId] - if simbase.config.GetBool('want-boarding-groups', 1): - self.mintBoardingParty = DistributedBoardingPartyAI.DistributedBoardingPartyAI(self.air, mintIdList, 4) - self.mintBoardingParty.generateWithRequired(self.zoneId) - + # Setup the doors and generate them for extDoor in extDoorList: # Tell them about each other - extDoor.setOtherDoor(intDoor0) + extDoor.setOtherDoor(intDoor0) # Put them in the right zones extDoor.zoneId = ToontownGlobals.CashbotHQ # Now that they both now about each other, generate them: diff --git a/toontown/src/hood/CogHood.py b/toontown/src/hood/CogHood.py index 4e97467b..e88bfc90 100644 --- a/toontown/src/hood/CogHood.py +++ b/toontown/src/hood/CogHood.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import Hood +from . import Hood class CogHood(Hood.Hood): diff --git a/toontown/src/hood/DDHood.py b/toontown/src/hood/DDHood.py index 9fb3dca3..d2b44dd2 100644 --- a/toontown/src/hood/DDHood.py +++ b/toontown/src/hood/DDHood.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import DDTownLoader from toontown.safezone import DDSafeZoneLoader from toontown.toonbase.ToontownGlobals import * diff --git a/toontown/src/hood/DDHoodDataAI.py b/toontown/src/hood/DDHoodDataAI.py index cd84d731..b15f803c 100644 --- a/toontown/src/hood/DDHoodDataAI.py +++ b/toontown/src/hood/DDHoodDataAI.py @@ -1,10 +1,9 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import DDTreasurePlannerAI from toontown.safezone import DistributedBoatAI -from toontown.classicchars import DistributedDonaldDockAI class DDHoodDataAI(HoodDataAI.HoodDataAI): notify = DirectNotifyGlobal.directNotify.newCategory("DDHoodDataAI") @@ -17,7 +16,7 @@ def __init__(self, air, zoneId = None): def startup(self): HoodDataAI.HoodDataAI.startup(self) - + trolley = DistributedTrolleyAI.DistributedTrolleyAI(self.air) trolley.generateWithRequired(self.zoneId) trolley.start() @@ -29,9 +28,4 @@ def startup(self): boat = DistributedBoatAI.DistributedBoatAI(self.air) boat.generateWithRequired(self.zoneId) boat.start() - self.addDistObj(boat) - - self.classicChar = DistributedDonaldDockAI.DistributedDonaldDockAI(self.air) - self.classicChar.generateWithRequired(self.zoneId) - self.classicChar.start() - self.addDistObj(self.classicChar) + self.addDistObj(boat) \ No newline at end of file diff --git a/toontown/src/hood/DGHood.py b/toontown/src/hood/DGHood.py index 64163c1e..9846b224 100644 --- a/toontown/src/hood/DGHood.py +++ b/toontown/src/hood/DGHood.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import DGTownLoader from toontown.safezone import DGSafeZoneLoader from toontown.toonbase.ToontownGlobals import * -import SkyUtil +from . import SkyUtil class DGHood(ToonHood.ToonHood): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): diff --git a/toontown/src/hood/DGHoodDataAI.py b/toontown/src/hood/DGHoodDataAI.py index 35b54e64..f138ec01 100644 --- a/toontown/src/hood/DGHoodDataAI.py +++ b/toontown/src/hood/DGHoodDataAI.py @@ -1,10 +1,9 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import DGTreasurePlannerAI from toontown.classicchars import DistributedGoofyAI -from toontown.classicchars import DistributedDaisyAI from toontown.safezone import DistributedDGFlowerAI from toontown.safezone import ButterflyGlobals @@ -28,7 +27,7 @@ def startup(self): self.treasurePlanner = DGTreasurePlannerAI.DGTreasurePlannerAI(self.zoneId) self.treasurePlanner.start() - self.classicChar = DistributedDaisyAI.DistributedDaisyAI(self.air) + self.classicChar = DistributedGoofyAI.DistributedGoofyAI(self.air) self.classicChar.generateWithRequired(self.zoneId) self.classicChar.start() self.addDistObj(self.classicChar) diff --git a/toontown/src/hood/DLHood.py b/toontown/src/hood/DLHood.py index 6ec9a474..5b0c8ae6 100644 --- a/toontown/src/hood/DLHood.py +++ b/toontown/src/hood/DLHood.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import DLTownLoader from toontown.safezone import DLSafeZoneLoader from toontown.toonbase.ToontownGlobals import * diff --git a/toontown/src/hood/DLHoodDataAI.py b/toontown/src/hood/DLHoodDataAI.py index e50ba05c..5c2669b8 100644 --- a/toontown/src/hood/DLHoodDataAI.py +++ b/toontown/src/hood/DLHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import DLTreasurePlannerAI diff --git a/toontown/src/hood/EstateHood.py b/toontown/src/hood/EstateHood.py index 52c9d232..fb84f024 100644 --- a/toontown/src/hood/EstateHood.py +++ b/toontown/src/hood/EstateHood.py @@ -8,12 +8,12 @@ from direct.fsm import State from toontown.minigame import Purchase from otp.avatar import DistributedAvatar -import SkyUtil +from . import SkyUtil from direct.task.Task import Task -import Hood +from . import Hood from toontown.estate import EstateLoader from toontown.estate import HouseGlobals -import ZoneUtil +from . import ZoneUtil class EstateHood(Hood.Hood): """ diff --git a/toontown/src/hood/FishAnimatedProp.py b/toontown/src/hood/FishAnimatedProp.py index b85e9009..adaba43f 100644 --- a/toontown/src/hood/FishAnimatedProp.py +++ b/toontown/src/hood/FishAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import * from toontown.effects.Splash import * diff --git a/toontown/src/hood/GSHood.py b/toontown/src/hood/GSHood.py index 44009bfd..6dc56c0e 100644 --- a/toontown/src/hood/GSHood.py +++ b/toontown/src/hood/GSHood.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.safezone import GSSafeZoneLoader from toontown.toonbase.ToontownGlobals import * from toontown.racing import DistributedVehicle -import SkyUtil +from . import SkyUtil class GSHood(ToonHood.ToonHood): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): diff --git a/toontown/src/hood/GSHoodDataAI.py b/toontown/src/hood/GSHoodDataAI.py index a029bf21..7d211146 100644 --- a/toontown/src/hood/GSHoodDataAI.py +++ b/toontown/src/hood/GSHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI, ZoneUtil +from . import HoodDataAI, ZoneUtil from toontown.toonbase import ToontownGlobals from toontown.racing import DistributedStartingBlockAI from pandac.PandaModules import * diff --git a/toontown/src/hood/GZHood.py b/toontown/src/hood/GZHood.py index c146922b..344090c2 100644 --- a/toontown/src/hood/GZHood.py +++ b/toontown/src/hood/GZHood.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.safezone import GZSafeZoneLoader from toontown.toonbase.ToontownGlobals import * from toontown.racing import DistributedVehicle -import SkyUtil +from . import SkyUtil class GZHood(ToonHood.ToonHood): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): diff --git a/toontown/src/hood/GZHoodDataAI.py b/toontown/src/hood/GZHoodDataAI.py index 4b566e62..b6dcfa9a 100644 --- a/toontown/src/hood/GZHoodDataAI.py +++ b/toontown/src/hood/GZHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI, ZoneUtil +from . import HoodDataAI, ZoneUtil from toontown.toonbase import ToontownGlobals from toontown.racing import DistributedStartingBlockAI from pandac.PandaModules import * @@ -230,7 +230,7 @@ def createGolfKarts(self): self.golfKarts += foundKarts self.golfKartGroups += foundKartGroups - print self.golfKarts, self.golfKartGroups + print(self.golfKarts, self.golfKartGroups) # Place each Golf Kart into the proper WaitEmpty State. Handle this # after each they have generated so that they are diff --git a/toontown/src/hood/GenericAnimatedProp.py b/toontown/src/hood/GenericAnimatedProp.py index c2cc964b..6860c8bb 100644 --- a/toontown/src/hood/GenericAnimatedProp.py +++ b/toontown/src/hood/GenericAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal @@ -96,7 +96,7 @@ def calcHoodId(self,node): self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug("calcHoodId %d from %s" % (self.hoodId,fullString)) - except Exception, generic: + except Exception as generic: if not ('Editor' in fullString): self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString) self.hoodId = 0 diff --git a/toontown/src/hood/HQPeriscopeAnimatedProp.py b/toontown/src/hood/HQPeriscopeAnimatedProp.py index a8bed34b..fa513e49 100644 --- a/toontown/src/hood/HQPeriscopeAnimatedProp.py +++ b/toontown/src/hood/HQPeriscopeAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import * diff --git a/toontown/src/hood/HQTelescopeAnimatedProp.py b/toontown/src/hood/HQTelescopeAnimatedProp.py index 6b06a825..735552df 100644 --- a/toontown/src/hood/HQTelescopeAnimatedProp.py +++ b/toontown/src/hood/HQTelescopeAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import * diff --git a/toontown/src/hood/Hood.py b/toontown/src/hood/Hood.py index b886ecc2..40915ecc 100644 --- a/toontown/src/hood/Hood.py +++ b/toontown/src/hood/Hood.py @@ -10,8 +10,8 @@ from direct.gui import OnscreenText from otp.avatar import DistributedAvatar from toontown.building import SuitInterior -import QuietZoneState -import ZoneUtil +from . import QuietZoneState +from . import ZoneUtil from toontown.toonbase import TTLocalizer class Hood(StateData.StateData): @@ -291,7 +291,7 @@ def handleWaitForSetZoneResponse(self, requestStatus): elif loaderName=="minigame": pass elif loaderName=="cogHQLoader": - print "should be loading HQ" + print("should be loading HQ") else: assert(self.notify.debug(" unknown loaderName="+loaderName)) diff --git a/toontown/src/hood/HoodDataAI.py b/toontown/src/hood/HoodDataAI.py index 9d58b98a..b770f28a 100644 --- a/toontown/src/hood/HoodDataAI.py +++ b/toontown/src/hood/HoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import ZoneUtil +from . import ZoneUtil from toontown.building import DistributedBuildingMgrAI from toontown.suit import DistributedSuitPlannerAI from toontown.safezone import ButterflyGlobals @@ -35,7 +35,6 @@ def __init__(self, air, zoneId, canonicalHoodId): def startup(self): self.createFishingPonds() - self.createPartyPeople() self.createBuildingManagers() self.createSuitPlanners() @@ -59,10 +58,10 @@ def shutdown(self): ButterflyGlobals.clearIndexes(self.zoneId) del self.fishingPonds - for distObj in self.doId2do.values(): + for distObj in list(self.doId2do.values()): distObj.requestDelete() del self.doId2do - + # Break back-pointers del self.air @@ -118,7 +117,7 @@ def createFishingPonds(self): fishingSpots += self.air.findFishingSpots(dnaGroup, distPond) for distObj in fishingSpots: self.addDistObj(distObj) - + def createBuildingManagers(self): for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[1]: @@ -128,7 +127,7 @@ def createBuildingManagers(self): self.air, zoneId, dnaStore, self.air.trophyMgr) self.buildingManagers.append(mgr) self.air.buildingManagers[zoneId] = mgr - + def createSuitPlanners(self): for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[2]: @@ -154,7 +153,7 @@ def createButterflies(self, playground): bfly.generateWithRequired(self.zoneId) bfly.start() self.addDistObj(bfly) - + # WelcomeValley hoods have some additional methods for managing # population balancing (via the WelcomeValleyManagerAI class). @@ -165,7 +164,7 @@ def setRedirect(self, replacementHood): # avatar requests to or within this hood are to be redirected # to the indicated other hood, which will also immediately # begin reporting this hood's population as its own. - + if self.replacementHood: self.replacementHood[0].redirectingToMe.remove(self) self.replacementHood = replacementHood @@ -198,7 +197,7 @@ def getHoodPopulation(self): # Returns the complete population of avatars within the hood, # including those within hoods that are currently redirecting # to this hood. - + population = self.hoodPopulation for hood in self.redirectingToMe: population += hood.getHoodPopulation() @@ -208,7 +207,7 @@ def getPgPopulation(self): # Returns the population of avatars within the playground # only, including those within hoods that are currently # redirecting to this hood. - + population = self.pgPopulation for pg in self.redirectingToMe: population += pg.getPgPopulation() diff --git a/toontown/src/hood/InteractiveAnimatedProp.py b/toontown/src/hood/InteractiveAnimatedProp.py index 39391855..8828ed0c 100644 --- a/toontown/src/hood/InteractiveAnimatedProp.py +++ b/toontown/src/hood/InteractiveAnimatedProp.py @@ -1,6 +1,6 @@ import math import random -import GenericAnimatedProp +from . import GenericAnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import Sequence, ActorInterval,Wait, Func, SoundInterval, Parallel from direct.fsm import FSM @@ -92,7 +92,7 @@ def setupActor(self, node): animDict = {} animDict['anim'] = "%s/%s"%(self.path,anim) - for i in xrange(self.numIdles): + for i in range(self.numIdles): baseAnim = self.ZoneToIdles[self.hoodId][i] if isinstance(baseAnim, tuple): baseAnim=baseAnim[0] @@ -106,7 +106,7 @@ def setupActor(self, node): settleKey = "settle%d" % i animDict[settleKey] = settleStr - for i in xrange(self.numFightAnims): + for i in range(self.numFightAnims): animStr = self.path + '/' + self.ZoneToFightAnims[self.hoodId][i] animKey = "fight%d" % i animDict[animKey] = animStr @@ -136,8 +136,8 @@ def createIdleInterval(self): result = Sequence() if self.numIdles >= 3: numberOfAnimsAbove2 = self.numIdles - 2 - for rareIdle in xrange( 2, self.numIdles): - for i in xrange(2): + for rareIdle in range( 2, self.numIdles): + for i in range(2): result.append(ActorInterval( self.node, 'idle0')) result.append(Wait(self.IdlePauseTime)) result.append(ActorInterval( self.node, 'idle1')) @@ -145,7 +145,7 @@ def createIdleInterval(self): result.append(ActorInterval(self.node, 'idle%d' % rareIdle)) result.append(Wait(self.IdlePauseTime)) else: - for i in xrange(self.numIdles): + for i in range(self.numIdles): result.append(ActorInterval(self.node, "idle%d" % i)) self.notify.debug("idle interval=%s" % result) return result @@ -190,7 +190,7 @@ def createBattleCheerText(self): def createBattleCheerInterval(self): """Create a looping interval that the prop plays when buffing battles.""" result=Sequence() - for i in xrange(self.numFightAnims): + for i in range(self.numFightAnims): animKey = "fight%d" % i animAndSoundIval = self.createAnimAndSoundIval(animKey) origAnimName = self.node.getAnimFilename(animKey).split('/')[-1] @@ -336,7 +336,7 @@ def chooseIdleAnimToRun(self): result = self.numIdles -1 if base.config.GetBool('randomize-interactive-idles', True): pairs = [] - for i in xrange(self.numIdles): + for i in range(self.numIdles): # actually we want idle2 to have a lower chance of occcurring # as it's the niftier idle compared to idle1 and idle0 reversedChance = self.numIdles - i -1 @@ -419,7 +419,7 @@ def createIdleAnimSequence(self, whichIdleAnim): numberOfLoops = random.randrange(minLoop, maxLoop+1) pauseTime = random.randrange(minPauseTime, maxPauseTime+1) result = Sequence() - for i in xrange(numberOfLoops): + for i in range(numberOfLoops): result.append(idleAnimAndSound) if self.getSettleName(whichIdleAnim): result.append(self.node.actorInterval('settle%d' % whichIdleAnim)) @@ -600,7 +600,7 @@ def printAnimIfClose(self,animKey): baseAnimName = animName.split('/')[-1] if localAvatar.zoneId == self.visId: self.notify.info("playing %s" % baseAnimName) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in printAnimIfClose, giving up:\n%s" % str(e)) def clearCurIval(self): diff --git a/toontown/src/hood/LawbotHQ.py b/toontown/src/hood/LawbotHQ.py index 223abd4c..2dd0f9ac 100644 --- a/toontown/src/hood/LawbotHQ.py +++ b/toontown/src/hood/LawbotHQ.py @@ -1,5 +1,5 @@ -import CogHood +from . import CogHood from toontown.toonbase import ToontownGlobals from toontown.coghq import LawbotCogHQLoader diff --git a/toontown/src/hood/LawbotHQDataAI.py b/toontown/src/hood/LawbotHQDataAI.py index ade313f1..628df573 100644 --- a/toontown/src/hood/LawbotHQDataAI.py +++ b/toontown/src/hood/LawbotHQDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.coghq import DistributedLawOfficeElevatorExtAI from toontown.coghq import DistributedCogHQDoorAI diff --git a/toontown/src/hood/MMHood.py b/toontown/src/hood/MMHood.py index fbfc674c..255ce680 100644 --- a/toontown/src/hood/MMHood.py +++ b/toontown/src/hood/MMHood.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import MMTownLoader from toontown.safezone import MMSafeZoneLoader from toontown.toonbase.ToontownGlobals import * diff --git a/toontown/src/hood/MMHoodDataAI.py b/toontown/src/hood/MMHoodDataAI.py index 11cba2be..791f0c34 100644 --- a/toontown/src/hood/MMHoodDataAI.py +++ b/toontown/src/hood/MMHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import MMTreasurePlannerAI diff --git a/toontown/src/hood/OZHood.py b/toontown/src/hood/OZHood.py index f93fea28..b27600dc 100644 --- a/toontown/src/hood/OZHood.py +++ b/toontown/src/hood/OZHood.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.safezone import OZSafeZoneLoader from toontown.toonbase.ToontownGlobals import * from toontown.racing import DistributedVehicle -import SkyUtil +from . import SkyUtil class OZHood(ToonHood.ToonHood): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): diff --git a/toontown/src/hood/OZHoodDataAI.py b/toontown/src/hood/OZHoodDataAI.py index 7e8b26a0..e4bbbbb6 100644 --- a/toontown/src/hood/OZHoodDataAI.py +++ b/toontown/src/hood/OZHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI, ZoneUtil +from . import HoodDataAI, ZoneUtil from toontown.toonbase import ToontownGlobals from toontown.safezone import OZTreasurePlannerAI from toontown.racing import DistributedStartingBlockAI diff --git a/toontown/src/hood/PetShopFishAnimatedProp.py b/toontown/src/hood/PetShopFishAnimatedProp.py index 348c465d..27950de3 100644 --- a/toontown/src/hood/PetShopFishAnimatedProp.py +++ b/toontown/src/hood/PetShopFishAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.actor import Actor from direct.interval.IntervalGlobal import * diff --git a/toontown/src/hood/Place.py b/toontown/src/hood/Place.py index 73d48697..3723a8bc 100644 --- a/toontown/src/hood/Place.py +++ b/toontown/src/hood/Place.py @@ -7,8 +7,8 @@ from direct.fsm import StateData from toontown.safezone import PublicWalk from toontown.launcher import DownloadForceAcknowledge -import TrialerForceAcknowledge -import ZoneUtil +from . import TrialerForceAcknowledge +from . import ZoneUtil from toontown.friends import FriendsListManager from toontown.toonbase import ToontownGlobals from toontown.estate import HouseGlobals @@ -16,7 +16,7 @@ from otp.otpbase import OTPLocalizer from otp.avatar import Emote from direct.task import Task -import QuietZoneState +from . import QuietZoneState from toontown.distributed import ToontownDistrictStats class Place(StateData.StateData, @@ -675,7 +675,7 @@ def enterDFACallback(self, requestStatus, doneStatus): else: # Some return code that is not handled Place.notify.error("Unknown done status for DownloadForceAcknowledge: " - + `doneStatus`) + + repr(doneStatus)) def enterDFAReject(self): # TODO: reject movie, turn toon around @@ -994,7 +994,7 @@ def enterTeleportIn(self, requestStatus): avId = requestStatus.get("avId", -1) if avId != -1: - if base.cr.doId2do.has_key(avId): + if avId in base.cr.doId2do: # Teleport to avatar avatar = base.cr.doId2do[avId] avatar.forceToTruePosition() diff --git a/toontown/src/hood/QuietZoneState.py b/toontown/src/hood/QuietZoneState.py index 783adbcd..d43a5322 100644 --- a/toontown/src/hood/QuietZoneState.py +++ b/toontown/src/hood/QuietZoneState.py @@ -10,7 +10,7 @@ from direct.fsm import StateData from direct.fsm import ClassicFSM, State from direct.fsm import State -import ZoneUtil +from . import ZoneUtil class QuietZoneState(StateData.StateData): """QuietZoneState state class""" diff --git a/toontown/src/hood/SellbotHQ.py b/toontown/src/hood/SellbotHQ.py index ac6732dd..389caa17 100644 --- a/toontown/src/hood/SellbotHQ.py +++ b/toontown/src/hood/SellbotHQ.py @@ -1,5 +1,5 @@ -import CogHood +from . import CogHood from toontown.toonbase import ToontownGlobals from toontown.coghq import SellbotCogHQLoader diff --git a/toontown/src/hood/SleepingHydrantAnimatedProp.py b/toontown/src/hood/SleepingHydrantAnimatedProp.py index 1ea0797a..3746add0 100644 --- a/toontown/src/hood/SleepingHydrantAnimatedProp.py +++ b/toontown/src/hood/SleepingHydrantAnimatedProp.py @@ -1,4 +1,4 @@ -import AnimatedProp +from . import AnimatedProp from direct.interval.IntervalGlobal import * from direct.task import Task import math diff --git a/toontown/src/hood/TTHood.py b/toontown/src/hood/TTHood.py index 2b4eb951..d11ed66e 100644 --- a/toontown/src/hood/TTHood.py +++ b/toontown/src/hood/TTHood.py @@ -1,10 +1,10 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * -import ToonHood +from . import ToonHood from toontown.town import TTTownLoader from toontown.safezone import TTSafeZoneLoader from toontown.toonbase.ToontownGlobals import * -import SkyUtil +from . import SkyUtil from direct.directnotify import DirectNotifyGlobal class TTHood(ToonHood.ToonHood): diff --git a/toontown/src/hood/TTHoodDataAI.py b/toontown/src/hood/TTHoodDataAI.py index 1f5b5600..553774e9 100644 --- a/toontown/src/hood/TTHoodDataAI.py +++ b/toontown/src/hood/TTHoodDataAI.py @@ -1,5 +1,5 @@ from direct.directnotify import DirectNotifyGlobal -import HoodDataAI +from . import HoodDataAI from toontown.toonbase import ToontownGlobals from toontown.safezone import DistributedTrolleyAI from toontown.safezone import TTTreasurePlannerAI diff --git a/toontown/src/hood/ToonHood.py b/toontown/src/hood/ToonHood.py index 0a8fe8c2..15d3611d 100644 --- a/toontown/src/hood/ToonHood.py +++ b/toontown/src/hood/ToonHood.py @@ -8,7 +8,7 @@ from direct.fsm import State from toontown.minigame import Purchase from otp.avatar import DistributedAvatar -import Hood +from . import Hood from toontown.building import SuitInterior from toontown.cogdominium import CogdoInterior diff --git a/toontown/src/hood/TrialerForceAcknowledge.py b/toontown/src/hood/TrialerForceAcknowledge.py index 470b7f3a..1557cedb 100644 --- a/toontown/src/hood/TrialerForceAcknowledge.py +++ b/toontown/src/hood/TrialerForceAcknowledge.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from toontown.toonbase import TTLocalizer -import ZoneUtil +from . import ZoneUtil from toontown.toonbase import ToontownGlobals from toontown.toontowngui import TeaserPanel diff --git a/toontown/src/hood/TutorialHood.py b/toontown/src/hood/TutorialHood.py index 7f1d7859..c4908ca5 100644 --- a/toontown/src/hood/TutorialHood.py +++ b/toontown/src/hood/TutorialHood.py @@ -1,9 +1,9 @@ from pandac.PandaModules import * -import ToonHood +from . import ToonHood from toontown.town import TutorialTownLoader from toontown.toonbase.ToontownGlobals import * -import SkyUtil +from . import SkyUtil class TutorialHood(ToonHood.ToonHood): def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): diff --git a/toontown/src/hood/ZeroAnimatedProp.py b/toontown/src/hood/ZeroAnimatedProp.py index 67775661..3b039da2 100644 --- a/toontown/src/hood/ZeroAnimatedProp.py +++ b/toontown/src/hood/ZeroAnimatedProp.py @@ -48,8 +48,8 @@ def delete(self): def loadPhaseAnims(self): """Load our animations to our actor.""" animDict = {} - for key,info in self.phaseInfo.iteritems(): - if type(info[0]) == types.TupleType: + for key,info in self.phaseInfo.items(): + if type(info[0]) == tuple: for index,anims in enumerate(info[0]): fullPath = self.path + '/' + anims animName = "phase%d_%d" % (key, index) @@ -67,9 +67,9 @@ def createPhaseIntervals(self): self.notify.debug("not creating phase ivals again") return self.phaseIvals = [] - for key,info in self.phaseInfo.iteritems(): + for key,info in self.phaseInfo.items(): self.notify.debug("key=%s"%key) - if type(info[0]) == types.TupleType: + if type(info[0]) == tuple: ival = Sequence() for index,anims in enumerate(info[0]): animName = "phase%d_%d" % (key, index) @@ -130,7 +130,7 @@ def chooseAnimToRun(self): result = self.curPhase if base.config.GetBool("anim-props-randomized", True): pairs = [] - for i in xrange(self.curPhase +1): + for i in range(self.curPhase +1): pairs.append(( math.pow(2,i) , i)) sum = math.pow(2,self.curPhase+1) - 1 result = weightedChoice(pairs, sum=sum) diff --git a/toontown/src/hood/ZoneUtil.py b/toontown/src/hood/ZoneUtil.py index a5b91689..c20a31ae 100644 --- a/toontown/src/hood/ZoneUtil.py +++ b/toontown/src/hood/ZoneUtil.py @@ -1,6 +1,6 @@ """ ZoneUtil - + Get various information from a zone ID. """ @@ -57,14 +57,14 @@ def getLoaderName(zoneId): # zone or toon they correspond to. if suffix >= 500: suffix -= 500 - + if isCogHQZone(zoneId): loaderName="cogHQLoader" elif suffix < 100: loaderName="safeZoneLoader" else: loaderName="townLoader" - + assert(zoneUtilNotify.debug("getLoaderName(zoneId=" +str(zoneId)+") returning "+loaderName)) assert(loaderName) @@ -101,7 +101,7 @@ def getToonWhereName(zoneId): def isPlayground(zoneId): whereName = getWhereName(zoneId, False) if whereName == "cogHQExterior": - return True + return True else: return (zoneId%1000 == 0 and zoneId < DynamicZonesBegin) @@ -185,7 +185,7 @@ def getBranchZone(zoneId): if not isCogHQZone(zoneId): if (zoneId % 1000) >= 500: # ...this is an interior zone id. - branchId -= 500 + branchId -= 500 assert(zoneUtilNotify.debug("getBranchZone(zoneId=" +str(zoneId)+") returning "+str(branchId))) return branchId @@ -268,7 +268,7 @@ def getTrueZoneId(zoneId, currentZoneId): offset = currentZoneId - (currentZoneId % 2000) if hoodId == ToontownCentral: return (zoneId - ToontownCentral) + offset - elif hoodId == GoofySpeedway: + elif hoodId == GoofySpeedway: return (zoneId - GoofySpeedway) + offset + 1000 return zoneId diff --git a/toontown/src/launcher/QuickLauncher.py b/toontown/src/launcher/QuickLauncher.py index b5ffb31a..e03793df 100644 --- a/toontown/src/launcher/QuickLauncher.py +++ b/toontown/src/launcher/QuickLauncher.py @@ -38,7 +38,7 @@ class QuickLauncher(LauncherBase): PatchExt = 'pch' def __init__(self): - print "Running: ToontownQuickLauncher" + print("Running: ToontownQuickLauncher") # Used to pass to server for authentication self.toontownBlueKey = "TOONTOWN_BLUE" @@ -59,7 +59,7 @@ def __init__(self): self.toontownPlayTokenKey = "LOGIN_TOKEN" else: self.toontownPlayTokenKey = "PLAYTOKEN" - print ("useTTSpecificLogin=%s" % self.useTTSpecificLogin) + print(("useTTSpecificLogin=%s" % self.useTTSpecificLogin)) self.contentDir = '/' # HACK: to make connecting to server happy @@ -192,7 +192,7 @@ def resumeInstall(self): self.cleanup() return - raise StandardError, 'Some phases not listed in LauncherPhases: %s' % (self.requiredInstallFiles) + raise Exception('Some phases not listed in LauncherPhases: %s' % (self.requiredInstallFiles)) def getDecompressMultifile(self, mfname): if not self.DecompressMultifiles: @@ -287,10 +287,10 @@ def decompressMultifileDone(self): self.finalizePhase() - self.notify.info('Done updating multifiles in phase: ' + `self.currentPhase`) + self.notify.info('Done updating multifiles in phase: ' + repr(self.currentPhase)) self.progressSoFar += int(round(self.phaseOverallMap[self.currentPhase]*100)) - self.notify.info('progress so far ' + `self.progressSoFar`) - messenger.send('phaseComplete-' + `self.currentPhase`) + self.notify.info('progress so far ' + repr(self.progressSoFar)) + messenger.send('phaseComplete-' + repr(self.currentPhase)) self.resumeInstall() @@ -362,12 +362,12 @@ def parseWebAcctParams(self): elif len(args) == 2: name, value = args dict[name] = int(value) - if dict.has_key('secretsNeedsParentPassword'): + if 'secretsNeedsParentPassword' in dict: self.secretNeedsParentPasswordKey = 1 and dict['secretsNeedsParentPassword'] self.notify.info('secretNeedsParentPassword = %d' % self.secretNeedsParentPasswordKey) else: self.notify.warning('no secretNeedsParentPassword token in webAcctParams') - if dict.has_key('chatEligible'): + if 'chatEligible' in dict: self.chatEligibleKey = 1 and dict['chatEligible'] self.notify.info('chatEligibleKey = %d' % self.chatEligibleKey) else: diff --git a/toontown/src/launcher/StartToontownWebLauncher.py b/toontown/src/launcher/StartToontownWebLauncher.py index 1c340136..a41a0629 100644 --- a/toontown/src/launcher/StartToontownWebLauncher.py +++ b/toontown/src/launcher/StartToontownWebLauncher.py @@ -3,7 +3,7 @@ from pandac.PandaModules import PandaSystem if not appRunner: - print "Not running in a web environment; using dummyAppRunner." + print("Not running in a web environment; using dummyAppRunner.") from direct.p3d.AppRunner import dummyAppRunner appRunner = dummyAppRunner() @@ -15,12 +15,12 @@ if int(appRunner.tokenDict.get('download', '0')): # When the download token is set, it means we only want to use # this p3d file to download the required files, and then exit. - print "Download token set; not running launcher." + print("Download token set; not running launcher.") import sys sys.exit(0) else: launcher = ToontownWebLauncher(appRunner) - print "Reached end of StartToontownLauncher.py." + print("Reached end of StartToontownLauncher.py.") base.run() diff --git a/toontown/src/launcher/ToontownDummyLauncher.py b/toontown/src/launcher/ToontownDummyLauncher.py index eea55194..6548f5f1 100644 --- a/toontown/src/launcher/ToontownDummyLauncher.py +++ b/toontown/src/launcher/ToontownDummyLauncher.py @@ -53,7 +53,7 @@ def getReferrerCode(self): return None def setRegistry(self, name, value): - print "setRegistry[%s] = %s" % (name, value) + print("setRegistry[%s] = %s" % (name, value)) self.reg[name] = value def getRegistry(self, name, defaultValue = None): @@ -61,7 +61,7 @@ def getRegistry(self, name, defaultValue = None): value = self.reg[name] else: value = defaultValue - print "getRegistry[%s] = %s" % (name, value) + print("getRegistry[%s] = %s" % (name, value)) return value def getGame2Done(self): diff --git a/toontown/src/launcher/ToontownLauncher.py b/toontown/src/launcher/ToontownLauncher.py index f635127c..a0da85a5 100644 --- a/toontown/src/launcher/ToontownLauncher.py +++ b/toontown/src/launcher/ToontownLauncher.py @@ -138,11 +138,11 @@ def flush(self): sys.stderr = logErr # Write to the log - print "\n\nStarting Toontown..." - print ("Current time: " + time.asctime(time.localtime(time.time())) - + " " + time.tzname[0]) - print "sys.path = ", sys.path - print "sys.argv = ", sys.argv + print("\n\nStarting Toontown...") + print(("Current time: " + time.asctime(time.localtime(time.time())) + + " " + time.tzname[0])) + print("sys.path = ", sys.path) + print("sys.argv = ", sys.argv) from otp.launcher.LauncherBase import LauncherBase from otp.otpbase import OTPLauncherGlobals @@ -186,7 +186,7 @@ def __init__(self): self.testServerFlag = int(sys.argv[4]) else: # This error message is a little too helpful for potential hackers - print "Error: Launcher: incorrect number of parameters" + print("Error: Launcher: incorrect number of parameters") sys.exit() # Used to pass to server for authentication @@ -279,14 +279,14 @@ def parseWebAcctParams(self): dict[name] = int(value) self.secretNeedsParentPasswordKey = 1 - if dict.has_key('secretsNeedsParentPassword'): + if 'secretsNeedsParentPassword' in dict: self.secretNeedsParentPasswordKey = 1 and dict['secretsNeedsParentPassword'] else: self.notify.warning('no secretNeedsParentPassword token in webAcctParams') self.notify.info('secretNeedsParentPassword = %d' % self.secretNeedsParentPasswordKey) self.chatEligibleKey = 0 - if dict.has_key('chatEligible'): + if 'chatEligible' in dict: self.chatEligibleKey = 1 and dict['chatEligible'] else: self.notify.warning('no chatEligible token in webAcctParams') @@ -339,15 +339,15 @@ def setRegistry(self, name, value): # You can only set strings and integers in here t = type(value) - if (t == types.IntType): + if (t == int): WindowsRegistry.setIntValue(self.toontownRegistryKey, name, value) - elif (t == types.StringType): + elif (t == bytes): WindowsRegistry.setStringValue(self.toontownRegistryKey, name, value) else: self.notify.warning("setRegistry: Invalid type for registry value: " - + `value`) + + repr(value)) def getRegistry(self, name, missingValue = None): # Return the value of this key. diff --git a/toontown/src/launcher/ToontownWebLauncher.py b/toontown/src/launcher/ToontownWebLauncher.py index 2b4d5ae1..50351841 100644 --- a/toontown/src/launcher/ToontownWebLauncher.py +++ b/toontown/src/launcher/ToontownWebLauncher.py @@ -107,14 +107,14 @@ def parseWebAcctParams(self): dict[name] = int(value) self.secretNeedsParentPasswordKey = 1 - if dict.has_key('secretsNeedsParentPassword'): + if 'secretsNeedsParentPassword' in dict: self.secretNeedsParentPasswordKey = 1 and dict['secretsNeedsParentPassword'] else: self.notify.warning('no secretNeedsParentPassword token in webAcctParams') self.notify.info('secretNeedsParentPassword = %d' % self.secretNeedsParentPasswordKey) self.chatEligibleKey = 0 - if dict.has_key('chatEligible'): + if 'chatEligible' in dict: self.chatEligibleKey = 1 and dict['chatEligible'] else: self.notify.warning('no chatEligible token in webAcctParams') diff --git a/toontown/src/leveleditor/AnimBuildingObj.py b/toontown/src/leveleditor/AnimBuildingObj.py index 674b4cf6..d732d2c1 100644 --- a/toontown/src/leveleditor/AnimBuildingObj.py +++ b/toontown/src/leveleditor/AnimBuildingObj.py @@ -2,7 +2,7 @@ AnimBuilding object """ -from AnimPropObj import * +from .AnimPropObj import * class AnimBuildingObj(AnimPropObj): def __init__(self, editor, animBuildingType, dna=None, nodePath=None): diff --git a/toontown/src/leveleditor/AnimPropObj.py b/toontown/src/leveleditor/AnimPropObj.py index 0d3d157c..702dcc5f 100644 --- a/toontown/src/leveleditor/AnimPropObj.py +++ b/toontown/src/leveleditor/AnimPropObj.py @@ -3,8 +3,8 @@ """ import glob, os -from ToonTownObj import * -from LevelEditorGlobals import importModule +from .ToonTownObj import * +from .LevelEditorGlobals import importModule class AnimPropObj(ToonTownObj): def __init__(self, editor, animPropType, dna=None, nodePath=None): @@ -22,7 +22,7 @@ def initDNA(self): def createAnimatedProp(self): objDef = self.editor.objectPalette.findItem(self.animPropType) if objDef is None or\ - not objDef.properties.has_key('anims'): + 'anims' not in objDef.properties: return animNameList = objDef.properties['anims'][4] diff --git a/toontown/src/leveleditor/FlatBuildingObj.py b/toontown/src/leveleditor/FlatBuildingObj.py index 17d832ee..8f1fa02f 100644 --- a/toontown/src/leveleditor/FlatBuildingObj.py +++ b/toontown/src/leveleditor/FlatBuildingObj.py @@ -3,7 +3,7 @@ """ import random, string -from ToonTownObj import * +from .ToonTownObj import * class FlatBuildingObj(ToonTownObj): def __init__(self, editor, buildingType, dna=None, nodePath=None): @@ -23,7 +23,7 @@ def initDNA(self): def getRandomHeightList(self, buildingHeight): # Select a list of wall heights - heightLists = self.getList(`buildingHeight` + '_ft_wall_heights') + heightLists = self.getList(repr(buildingHeight) + '_ft_wall_heights') l = len(heightLists) if l > 0: # If a list exists for this building height, pick randomly @@ -82,7 +82,7 @@ def getRandomWallWidth(self): def getRandomDictionaryEntry(self, dict): numKeys = len(dict) if numKeys > 0: - keys = dict.keys() + keys = list(dict.keys()) key = keys[random.randint(0, numKeys - 1)] return dict[key] else: @@ -130,16 +130,16 @@ def setRandomBuildingStyle(self, dnaNode, name = 'building'): buildingType = createHeightCode(heightList) else: # Use specified height list - heightList = map(string.atof, string.split(buildingType, '_')) + heightList = list(map(string.atof, string.split(buildingType, '_'))) height = calcHeight(heightList) # Is this a never before seen height list? If so, record it. try: - attr = self.getAttribute(`height` + '_ft_wall_heights') + attr = self.getAttribute(repr(height) + '_ft_wall_heights') if heightList not in attr.getList(): - print 'Adding new height list entry' + print('Adding new height list entry') attr.add(heightList) except KeyError: - print 'Non standard height building' + print('Non standard height building') # See if this building type corresponds to existing style dict try: @@ -155,7 +155,7 @@ def setRandomBuildingStyle(self, dnaNode, name = 'building'): numWalls = len(heightList) # Get the building_style attribute dictionary for # this number of walls - dict = self.getDict(`numWalls` + '_wall_styles') + dict = self.getDict(repr(numWalls) + '_wall_styles') if not dict: # Still no dict, create new random style using height list diff --git a/toontown/src/leveleditor/GroupObj.py b/toontown/src/leveleditor/GroupObj.py index 93a630b5..2df75fc0 100644 --- a/toontown/src/leveleditor/GroupObj.py +++ b/toontown/src/leveleditor/GroupObj.py @@ -2,7 +2,7 @@ ToonTown Group object """ -from ToonTownObj import * +from .ToonTownObj import * class GroupObj(ToonTownObjBase): def __init__(self, editor, groupName, dna=None, nodePath=None): diff --git a/toontown/src/leveleditor/InteractivePropObj.py b/toontown/src/leveleditor/InteractivePropObj.py index 6bcf2493..c50bd138 100644 --- a/toontown/src/leveleditor/InteractivePropObj.py +++ b/toontown/src/leveleditor/InteractivePropObj.py @@ -2,7 +2,7 @@ InteractiveProp object """ -from AnimPropObj import * +from .AnimPropObj import * class InteractivePropObj(AnimPropObj): def __init__(self, editor, interactivePropType, dna=None, nodePath=None): diff --git a/toontown/src/leveleditor/LandmarkObj.py b/toontown/src/leveleditor/LandmarkObj.py index 95127643..f8dea966 100644 --- a/toontown/src/leveleditor/LandmarkObj.py +++ b/toontown/src/leveleditor/LandmarkObj.py @@ -2,7 +2,7 @@ Landmark object """ -from ToonTownObj import * +from .ToonTownObj import * class LandmarkObj(ToonTownObj): def __init__(self, editor, landmarkType, dna=None, nodePath=None): diff --git a/toontown/src/leveleditor/LevelEditor.py b/toontown/src/leveleditor/LevelEditor.py index dfd23a96..ace9c47d 100644 --- a/toontown/src/leveleditor/LevelEditor.py +++ b/toontown/src/leveleditor/LevelEditor.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from direct.directbase.DirectStart import * from direct.showbase.DirectObject import DirectObject -from PieMenu import * +from .PieMenu import * import direct.gui.DirectGuiGlobals as DGG from direct.gui import DirectGui from direct.showbase.TkGlobal import * @@ -10,9 +10,9 @@ from direct.directtools.DirectGeometry import * from direct.tkwidgets.SceneGraphExplorer import * from direct.directnotify import DirectNotifyGlobal -from tkMessageBox import showinfo -from tkFileDialog import * -from Tkinter import * +from tkinter.messagebox import showinfo +from tkinter.filedialog import * +from tkinter import * #from whrandom import * #from random import * from direct.tkwidgets import Floater @@ -27,7 +27,7 @@ import types from direct.task import Task import Pmw -import __builtin__ +import builtins # [gjeon] to control avatar movement in drive mode from direct.controls import ControlManager @@ -42,7 +42,7 @@ from otp.otpbase import OTPGlobals -from LevelStyleManager import * +from .LevelStyleManager import * # Force direct and tk to be on base.startDirect(fWantDirect = 1, fWantTk = 1) @@ -62,8 +62,8 @@ try: opts, pargs = getopt.getopt(sys.argv[1:], '') hoods = pargs - except Exception, e: - print e + except Exception as e: + print(e) # If you do not run from the command line, we just load all of them # or you can hack this up for your own purposes. else: @@ -75,12 +75,12 @@ NEIGHBORHOODS = [] NEIGHBORHOOD_CODES = {} for hoodId in hoods: - if HOOD_IDS.has_key(hoodId): + if hoodId in HOOD_IDS: hoodName = HOOD_IDS[hoodId] NEIGHBORHOOD_CODES[hoodName] = hoodId NEIGHBORHOODS.append(hoodName) else: - print 'Error: no hood defined for: ', hoodId + print('Error: no hood defined for: ', hoodId) # To safely load the storage files def loadStorageFile(pandaPath): @@ -94,13 +94,13 @@ def loadStorageFile(pandaPath): if dnaLoaded: pass except NameError: - print "Loading LevelEditor for hoods: ", hoods + print("Loading LevelEditor for hoods: ", hoods) # DNAStorage instance for storing level DNA info # We need to use the __builtin__.foo syntax, not the # __builtins__["foo"] syntax, since this file runs at the top # level. - __builtin__.DNASTORE = DNASTORE = DNAStorage() + builtins.DNASTORE = DNASTORE = DNAStorage() ## # Load the generic storage files ## loadDNAFile(DNASTORE, 'dna/storage.dna', CSDefault, 1) @@ -227,7 +227,7 @@ def loadStorageFile(pandaPath): loadDNAFile(DNASTORE, 'phase_12/dna/storage_CC_sz.dna', CSDefault, 1) if 'PA' in hoods: loadDNAFile(DNASTORE, 'phase_13/dna/storage_party_sz.dna', CSDefault, 1) - __builtin__.dnaLoaded = 1 + builtins.dnaLoaded = 1 class LevelEditor(NodePath, DirectObject): """Class used to create a Toontown LevelEditor object""" @@ -910,7 +910,7 @@ def initVisibilityData(self): # down one level to find the vis groups as an optimization groupNode = self.NPToplevel.find("**/" + groupFullName) if groupNode.isEmpty(): - print "Could not find visgroup" + print("Could not find visgroup") self.nodeList.append(groupNode) for j in range(DNASTORE.getNumVisiblesInDNAVisGroup(i)): visName = DNASTORE.getVisibleName(i, j) @@ -1116,11 +1116,11 @@ def removeNodePathHook(self, nodePath): pointOrCell, type = self.findPointOrCell(nodePath) if pointOrCell and type: if (type == 'suitPointMarker'): - print 'Suit Point:', pointOrCell + print('Suit Point:', pointOrCell) if DNASTORE.removeSuitPoint(pointOrCell): - print "Removed from DNASTORE" + print("Removed from DNASTORE") else: - print "Not found in DNASTORE" + print("Not found in DNASTORE") # Remove point from pointDict del(self.pointDict[pointOrCell]) # Remove point from visitedPoints list @@ -1151,20 +1151,20 @@ def removeNodePathHook(self, nodePath): # Get parent vis group visGroupNP, visGroupDNA = self.findParentVisGroup( nodePath) - print 'Battle Cell:', pointOrCell + print('Battle Cell:', pointOrCell) # Remove cell from vis group if visGroupNP and visGroupDNA: if visGroupDNA.removeBattleCell(pointOrCell): - print "Removed from Vis Group" + print("Removed from Vis Group") else: - print "Not found in Vis Group" + print("Not found in Vis Group") else: - print "Parent Vis Group not found" + print("Parent Vis Group not found") # Remove cell from DNASTORE if DNASTORE.removeBattleCell(pointOrCell): - print "Removed from DNASTORE" + print("Removed from DNASTORE") else: - print "Not found in DNASTORE" + print("Not found in DNASTORE") # Remove cell from cellDict del(self.cellDict[pointOrCell]) @@ -1213,9 +1213,9 @@ def setActiveParent(self, nodePath = None): self.DNAParent = newDNAParent self.NPParent = nodePath else: - print 'LevelEditor.setActiveParent: nodePath not found' + print('LevelEditor.setActiveParent: nodePath not found') else: - print 'LevelEditor.setActiveParent: nodePath == None' + print('LevelEditor.setActiveParent: nodePath == None') def setName(self, nodePath, newName): """ Set name of nodePath's DNA (if it exists) """ @@ -1269,7 +1269,7 @@ def updateSelectedPose(self, nodePathList): # Update DNA pointOrCell.setPos(newPos) if (type == 'suitPointMarker'): - print "Found suit point!", pointOrCell + print("Found suit point!", pointOrCell) # Ok, now update all the lines into that node for edge in self.point2edgeDict[pointOrCell]: # Is it still in edge dict? @@ -1283,7 +1283,7 @@ def updateSelectedPose(self, nodePathList): edge, self.NPParent) self.edgeDict[edge] = newEdgeLine elif (type == 'battleCellMarker'): - print "Found battle cell!", pointOrCell + print("Found battle cell!", pointOrCell) def updatePose(self, dnaObject, nodePath): """ @@ -1399,7 +1399,7 @@ def createAnimatedBuilding(self, dnaNode, newNodePath): modelPath = getModelPath().findFile(modelPathStr) animFileList = glob.glob('%s%s/%s_a_%s_*.bam'%(os.environ['PANDA_ROOT'], modelPath, tokens[0], tokens[1])) - print animFileList + print(animFileList) # [gjeon] define anim list menu for selection animNameList = [] @@ -1437,7 +1437,7 @@ def initDNANode(self, dnaNode): # First create the visible geometry for this DNA Node try: self.initNodePath(dnaNode) - except AssertionError, error: + except AssertionError as error: self.notify.debug("Error loading %s" %dnaNode) # And add hooks to insert copies of dnaNode # self.addReplicationHooks(dnaNode) @@ -1447,7 +1447,7 @@ def initDNANode(self, dnaNode): self.notify.debug("Selected Node: %s" %selectedNode) # Move it #selectedNode.setPos(render, base.direct.cameraControl.coaMarker.getPos(render)) - print self.newObjPos + print(self.newObjPos) selectedNode.setPos(render, self.newObjPos) self.notify.debug("Node Position: %s" %selectedNode.getPos()) @@ -1471,16 +1471,16 @@ def setRandomBuildingStyle(self, dnaNode, name = 'building'): buildingType = createHeightCode(heightList) else: # Use specified height list - heightList = map(string.atof, string.split(buildingType, '_')) + heightList = list(map(string.atof, string.split(buildingType, '_'))) height = calcHeight(heightList) # Is this a never before seen height list? If so, record it. try: - attr = self.getAttribute(`height` + '_ft_wall_heights') + attr = self.getAttribute(repr(height) + '_ft_wall_heights') if heightList not in attr.getList(): - print 'Adding new height list entry' + print('Adding new height list entry') attr.add(heightList) except KeyError: - print 'Non standard height building' + print('Non standard height building') # See if this building type corresponds to existing style dict try: @@ -1496,7 +1496,7 @@ def setRandomBuildingStyle(self, dnaNode, name = 'building'): numWalls = len(heightList) # Get the building_style attribute dictionary for # this number of walls - dict = self.getDict(`numWalls` + '_wall_styles') + dict = self.getDict(repr(numWalls) + '_wall_styles') if not dict: # Still no dict, create new random style using height list @@ -1519,7 +1519,7 @@ def setRandomBuildingStyle(self, dnaNode, name = 'building'): def getRandomHeightList(self, buildingHeight): # Select a list of wall heights - heightLists = self.getList(`buildingHeight` + '_ft_wall_heights') + heightLists = self.getList(repr(buildingHeight) + '_ft_wall_heights') l = len(heightLists) if l > 0: # If a list exists for this building height, pick randomly @@ -1637,8 +1637,8 @@ def initNodePath(self, dnaNode, hotKey = None): # And create the geometry try: newNodePath = dnaNode.traverse(self.NPParent, DNASTORE, 1) - except Exception, error: - print error + except Exception as error: + print(error) self.notify.warning("Error while adding: %s" %dnaNode) return # Update scene graph explorer @@ -1680,13 +1680,13 @@ def addVisGroup(self, nodePath): self.createNewGroup(type = 'vis') def createNewGroup(self, type = 'dna'): - print "createNewGroup" + print("createNewGroup") """ Create a new DNA Node group under the active parent """ # Create a new DNA Node group if type == 'dna': - newDNANode = DNANode('group_' + `self.getGroupNum()`) + newDNANode = DNANode('group_' + repr(self.getGroupNum())) else: - newDNANode = DNAVisGroup('VisGroup_' + `self.getGroupNum()`) + newDNANode = DNAVisGroup('VisGroup_' + repr(self.getGroupNum())) # Increment group counter self.setGroupNum(self.getGroupNum() + 1) # Add new DNA Node group to the current parent DNA Object @@ -1731,7 +1731,7 @@ def addLandmark(self, landmarkType, specialType): self.initDNANode(newDNALandmarkBuilding) def addAnimBuilding(self, animBuildingType): - print "addAnimBuilding %s " % animBuildingType + print("addAnimBuilding %s " % animBuildingType) # Record new anim building type self.setCurrent('anim_building_texture', animBuildingType) # And create new anim building @@ -1749,8 +1749,8 @@ def addAnimBuilding(self, animBuildingType): self.initDNANode(newDNAAnimBuilding) def addProp(self, propType): - print base.direct.cameraControl.coaMarker.getPos(render) - print "addProp %s " % propType + print(base.direct.cameraControl.coaMarker.getPos(render)) + print("addProp %s " % propType) # Record new prop type self.setCurrent('prop_texture', propType) # And create new prop @@ -1762,7 +1762,7 @@ def addProp(self, propType): self.initDNANode(newDNAProp) def addAnimProp(self, animPropType): - print "addAnimProp %s " % animPropType + print("addAnimProp %s " % animPropType) # Record new anim prop type self.setCurrent('anim_prop_texture', animPropType) # And create new anim prop @@ -1775,7 +1775,7 @@ def addAnimProp(self, animPropType): self.initDNANode(newDNAAnimProp) def addInteractiveProp(self, interactivePropType): - print "addInteractiveProp %s " % interactivePropType + print("addInteractiveProp %s " % interactivePropType) # Record new interactive prop type self.setCurrent('interactive_prop_texture', interactivePropType) # And create new interactive prop @@ -1815,13 +1815,13 @@ def createCornice(self): def createDoor(self, type): if (type == 'landmark_door'): newDNADoor = DNADoor('door') - print "createDoor %s" % type + print("createDoor %s" % type) if not (self.getCurrent('door_double_texture')): doorStyles = self.styleManager.attributeDictionary['door_double_texture'].getList()[1:] defaultDoorStyle = random.choice(doorStyles) self.setCurrent('door_double_texture', defaultDoorStyle) newDNADoor.setCode(self.getCurrent('door_double_texture')) - print "doorcolor = %s" % self.getCurrent('door_color') + print("doorcolor = %s" % self.getCurrent('door_color')) newDNADoor.setColor(self.getCurrent('door_color')) elif (type == 'door'): newDNADoor = DNAFlatDoor('door') @@ -2289,7 +2289,7 @@ def setBuildingStyle(self, style): self.addReplicationHooks(self.DNATarget) def setBuildingType(self, type): - print 'setBuildingType: ', `type` + print('setBuildingType: ', repr(type)) def setBuildingWidth(self, width): if self.DNATarget: @@ -2383,10 +2383,10 @@ def selectedNodePathHook(self, nodePath): else: pointOrCell, type = self.findPointOrCell(nodePath) if pointOrCell and (type == 'suitPointMarker'): - print "Found suit point!", pointOrCell + print("Found suit point!", pointOrCell) self.selectedSuitPoint = pointOrCell elif pointOrCell and (type == 'battleCellMarker'): - print "Found battle cell!", pointOrCell + print("Found battle cell!", pointOrCell) else: if nodePath.getName() != 'suitEdge': suitEdge = self.findSuitEdge(nodePath.getParent()) @@ -2684,7 +2684,7 @@ def createMap(self, neighborhood): def selectMap(self, neighborhood): if self.activeMap: self.activeMap.reparentTo(hidden) - if self.mapDictionary.has_key(neighborhood): + if neighborhood in self.mapDictionary: self.activeMap = self.mapDictionary[neighborhood] self.activeMap.reparentTo(self.levelMap) @@ -2721,7 +2721,7 @@ def insertionMarkerTask(self, state): def getRandomDictionaryEntry(self, dict): numKeys = len(dict) if numKeys > 0: - keys = dict.keys() + keys = list(dict.keys()) key = keys[random.randint(0, numKeys - 1)] return dict[key] else: @@ -2887,28 +2887,28 @@ def jumpToInsertionPoint(self): def cvsUpdate(self, filename): dirname = os.path.dirname(filename) if not os.path.isdir(dirname): - print 'Cannot CVS update %s: invalid directory' % (filename) + print('Cannot CVS update %s: invalid directory' % (filename)) return basename = os.path.basename(filename) cwd = os.getcwd() os.chdir(dirname) cvsCommand = 'cvs update ' + basename - print cvsCommand + print(cvsCommand) os.system(cvsCommand) os.chdir(cwd) def cvsAdd(self, filename): dirname = os.path.dirname(filename) if not os.path.isdir(dirname): - print 'Cannot CVS add %s: invalid directory' % (filename) + print('Cannot CVS add %s: invalid directory' % (filename)) return basename = os.path.basename(filename) cwd = os.getcwd() os.chdir(dirname) cvsCommand = 'cvs add ' + basename - print cvsCommand + print(cvsCommand) os.system(cvsCommand) os.chdir(cwd) @@ -2916,13 +2916,13 @@ def cvsUpdateAll(self): # Update the entire dna source directory. dirname = dnaDirectory.toOsSpecific() if not os.path.isdir(dirname): - print 'Cannot CVS commit: invalid directory' + print('Cannot CVS commit: invalid directory') return cwd = os.getcwd() os.chdir(dirname) cvsCommand = 'cvs update -dP' - print cvsCommand + print(cvsCommand) os.system(cvsCommand) os.chdir(cwd) @@ -2930,13 +2930,13 @@ def cvsCommitAll(self): # cvs commit always commits the entire dna source directory. dirname = dnaDirectory.toOsSpecific() if not os.path.isdir(dirname): - print 'Cannot CVS commit: invalid directory' + print('Cannot CVS commit: invalid directory') return cwd = os.getcwd() os.chdir(dirname) cvsCommand = 'cvs commit -m "level editor"' - print cvsCommand + print(cvsCommand) os.system(cvsCommand) os.chdir(cwd) @@ -2944,8 +2944,8 @@ def cvsCommitAll(self): def loadSpecifiedDNAFile(self): path = dnaDirectory.toOsSpecific() if not os.path.isdir(path): - print 'LevelEditor Warning: Invalid default DNA directory!' - print 'Using current directory' + print('LevelEditor Warning: Invalid default DNA directory!') + print('Using current directory') path = '.' dnaFilename = askopenfilename( defaultextension = '.dna', @@ -2956,13 +2956,13 @@ def loadSpecifiedDNAFile(self): if dnaFilename: self.loadDNAFromFile(dnaFilename) self.outputFile = dnaFilename - print "Finished Load: ", dnaFilename + print("Finished Load: ", dnaFilename) def saveToSpecifiedDNAFile(self): path = dnaDirectory.toOsSpecific() if not os.path.isdir(path): - print 'LevelEditor Warning: Invalid DNA save directory!' - print 'Using current directory' + print('LevelEditor Warning: Invalid DNA save directory!') + print('Using current directory') path = '.' dnaFilename = asksaveasfilename( defaultextension = '.dna', @@ -3031,7 +3031,7 @@ def outputDNADefaultFile(self): self.outputDNA(file) def outputDNA(self, filename): - print 'Saving DNA to: ', filename + print('Saving DNA to: ', filename) binaryFilename = Filename(filename) binaryFilename.setBinary() self.DNAData.writeDna(binaryFilename, Notify.out(), DNASTORE) @@ -3107,7 +3107,7 @@ def saveBuildingStyle(self): style = DNAFlatBuildingStyle(dnaObject) self.saveStyle(filename, style) return - print 'Must select building before saving building style' + print('Must select building before saving building style') # GET/SET # DNA Object elements @@ -3315,14 +3315,14 @@ def placeSuitPoint(self): # That is what gets stored in the point mat = base.direct.grid.getMat(self.NPToplevel) absPos = Point3(mat.xformPoint(v)) - print 'Suit point: ' + `absPos` + print('Suit point: ' + repr(absPos)) # Store the point in the DNA. If this point is already in there, # it returns the existing point suitPoint = DNASTORE.storeSuitPoint(self.currentSuitPointType, absPos) - print "placeSuitPoint: ", suitPoint + print("placeSuitPoint: ", suitPoint) # In case the point returned is a different type, update our type self.currentSuitPointType = suitPoint.getPointType() - if not self.pointDict.has_key(suitPoint): + if suitPoint not in self.pointDict: marker = self.drawSuitPoint(suitPoint, absPos, self.currentSuitPointType, self.suitPointToplevel) @@ -3348,7 +3348,7 @@ def placeSuitPoint(self): # Store the edge on each point in case we move the point # we can update the edge for point in [self.startSuitPoint, self.endSuitPoint]: - if self.point2edgeDict.has_key(point): + if point in self.point2edgeDict: self.point2edgeDict[point].append(suitEdge) else: self.point2edgeDict[point] = [suitEdge] @@ -3369,14 +3369,14 @@ def placeSuitPoint(self): self.edgeDict[suitEdge] = edgeLine self.np2EdgeDict[edgeLine.id()] = [suitEdge, self.DNAParent] for point in [self.startSuitPoint, self.endSuitPoint]: - if self.point2edgeDict.has_key(point): + if point in self.point2edgeDict: self.point2edgeDict[point].append(suitEdge) else: self.point2edgeDict[point] = [suitEdge] - print 'Added dnaSuitEdge to zone: ' + zoneId + print('Added dnaSuitEdge to zone: ' + zoneId) else: - print 'Error: DNAParent is not a dnaVisGroup. Did not add edge' + print('Error: DNAParent is not a dnaVisGroup. Did not add edge') # Reset self.startSuitPoint = None self.endSuitPoint = None @@ -3424,7 +3424,7 @@ def highlightConnectedRec(self, suitPoint, fReversePath): fReversePath) def clearPathHighlights(self): - for point in self.pointDict.keys(): + for point in list(self.pointDict.keys()): type = point.getPointType() marker = self.pointDict[point] if (type == DNASuitPoint.STREETPOINT): @@ -3433,7 +3433,7 @@ def clearPathHighlights(self): marker.setColor(0, 0, 1) elif (type == DNASuitPoint.SIDEDOORPOINT): marker.setColor(0, 0.6, 0.2) - for edge in self.edgeDict.values(): + for edge in list(self.edgeDict.values()): edge.clearColor() self.visitedPoints = [] self.visitedEdges = [] @@ -3464,7 +3464,7 @@ def drawBattleCell(self, cell, parent, cellId=0): def placeBattleCell(self): # Store the battle cell in the current vis group if not DNAClassEqual(self.DNAParent, DNA_VIS_GROUP): - print 'Error: DNAParent is not a dnaVisGroup. Did not add battle cell' + print('Error: DNAParent is not a dnaVisGroup. Did not add battle cell') return v = self.getGridSnapIntersectionPoint() @@ -3512,7 +3512,7 @@ def createSuitPaths(self): # Store the edge on each point in case we move the point # we can update the edge for point in [edge.getStartPoint(), edge.getEndPoint()]: - if self.point2edgeDict.has_key(point): + if point in self.point2edgeDict: self.point2edgeDict[point].append(edge) else: self.point2edgeDict[point] = [edge] @@ -3524,33 +3524,33 @@ def getSuitPointFromNodePath(self, nodePath): cannot find it, return None. TODO: a reverse lookup pointDict would speed this up quite a bit """ - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if marker.eq(nodePath): return point return None def resetPathMarkers(self): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): if not edgeLine.isEmpty(): edgeLine.reset() edgeLine.removeNode() self.edgeDict = {} self.np2EdgeDict = {} - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if not marker.isEmpty(): marker.removeNode() self.pointDict = {} def hideSuitPaths(self): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): edgeLine.hide() - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): marker.hide() def showSuitPaths(self): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): edgeLine.show() - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): marker.show() def createBattleCells(self): @@ -3566,17 +3566,17 @@ def createBattleCells(self): self.cellDict[cell] = marker def resetBattleCellMarkers(self): - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): if not marker.isEmpty(): marker.remove() self.cellDict = {} def hideBattleCells(self): - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): marker.hide() def showBattleCells(self): - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): marker.show() def getBattleCellFromNodePath(self, nodePath): @@ -3586,7 +3586,7 @@ def getBattleCellFromNodePath(self, nodePath): cannot find it, return None. TODO: a reverse lookup cellDict would speed this up quite a bit """ - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): if marker.eq(nodePath): return cell return None @@ -3658,7 +3658,7 @@ def addToLandmarkBlock(self): elif self.selectedSuitPoint and self.lastLandmarkBuildingDNA: block=self.lastLandmarkBuildingDNA.getName() block=block[2:block.find(':')] - print ("associate point with building: " + str(block)) + print(("associate point with building: " + str(block))) self.selectedSuitPoint.setLandmarkBuildingIndex(int(block)) marker = self.pointDict[self.selectedSuitPoint] marker.setColor(1, 0, 0, 1) @@ -3676,7 +3676,7 @@ def findHighestLandmarkBlock(self, dnaRoot, npRoot): # Make a list of flat building names, outside of the # recursive function: self.flatNames=['random'] + BUILDING_TYPES - self.flatNames=map(lambda n: n+'_DNARoot', self.flatNames) + self.flatNames=[n+'_DNARoot' for n in self.flatNames] # Search/recurse the dna: newHighest=self.convertToLandmarkBlocks(highest, dnaRoot) # Get rid of the list of flat building names: @@ -3759,7 +3759,7 @@ def toggleShowLandmarkBlock(self): nodePath.setColor(0, 1, 0, 1) # Get the suit point for this lb - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if ((point.getPointType() == DNASuitPoint.FRONTDOORPOINT) or (point.getPointType() == DNASuitPoint.SIDEDOORPOINT)): lbIndex = point.getLandmarkBuildingIndex() @@ -3775,7 +3775,7 @@ def toggleShowLandmarkBlock(self): else: for i in self.showLandmarkBlockToggleGroup: i.clearColor() - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if (point.getPointType() == DNASuitPoint.FRONTDOORPOINT): marker.setColor(0, 0, 1, 1) marker.setScale(0.5) @@ -3818,7 +3818,7 @@ def consolidateStreetBuildings(self): return newGroup def makeNewBuildingGroup(self, sequenceNum, side, curveName): - print "-------------------------- new building group %s curveName=%s------------------------" % (sequenceNum, curveName) + print("-------------------------- new building group %s curveName=%s------------------------" % (sequenceNum, curveName)) # Now create a new group with just the buildings self.addGroup(self.NPToplevel) newGroup = self.NPParent @@ -3828,10 +3828,10 @@ def makeNewBuildingGroup(self, sequenceNum, side, curveName): if 'curveside' in curveName: #we want to preserve which group the side street is closest to - print "special casing %s" % curveName + print("special casing %s" % curveName) parts = curveName.split('_') groupName = 'Buildings_' + side + "-" + parts[3] + "_" + parts[4] - print "groupname = %s" % groupName + print("groupname = %s" % groupName) else: groupName = 'Buildings_' + side + "-" + str(sequenceNum) newGroup.setName(groupName) @@ -3920,17 +3920,17 @@ def loadStreetCurve(self): curves = {'inner':[], 'outer':[],'innersidest':[], 'outersidest':[]} curvesInner = modelFile.findAllMatches('**/*curve_inner*') print("-------------- curvesInner-----------------") - print curvesInner + print(curvesInner) curvesOuter = modelFile.findAllMatches('**/*curve_outer*') print("---------------- curvesOuter---------------") - print curvesOuter + print(curvesOuter) curveInnerSideSts = modelFile.findAllMatches('**/*curveside_inner*') print("--------- curveInnerSideSts----------") - print curveInnerSideSts + print(curveInnerSideSts) curveOuterSideSts = modelFile.findAllMatches('**/*curveside_outer*') print("----------- curveOuterSideSits ----------") - print curveOuterSideSts + print(curveOuterSideSts) # return an ordered list for i in range(len(curvesInner) +1): #RAU don't forget, these curves are 1 based @@ -3963,7 +3963,7 @@ def loadStreetCurve(self): # Mark whether it is a section of buildings or trees curveType = curve.getName().split("_")[0] curves['innersidest'].append([curve.node(), curveType]) - print "adding innersidest %s" % curve.getName() + print("adding innersidest %s" % curve.getName()) for i in range(maxNum): for barricade in ['innerbarricade','outerbarricade']: @@ -3972,34 +3972,34 @@ def loadStreetCurve(self): # Mark whether it is a section of buildings or trees curveType = curve.getName().split("_")[0] curves['outersidest'].append([curve.node(), curveType]) - print "adding outersidest %s" % curve.getName() + print("adding outersidest %s" % curve.getName()) - print "loaded curves: %s" % curves + print("loaded curves: %s" % curves) return curves else: return None def duplicateFlatBuilding(self, oldDNANode): # Yes, make a new copy of the dnaNode - print "a" + print("a") dnaNode = oldDNANode.__class__(oldDNANode) - print "b" + print("b") dnaNode.setWidth(oldDNANode.getWidth()) # Add the DNA to the active parent - print "c" + print("c") self.DNAParent.add(dnaNode) # And create the geometry - print "d %s" % (oldDNANode) + print("d %s" % (oldDNANode)) newNodePath = dnaNode.traverse(self.NPParent, DNASTORE, 1) - print "e" + print("e") return newNodePath def getBldg(self, bldgIndex, bldgs, forceDuplicate = False): numBldgs = len(bldgs) if bldgIndex < numBldgs and not forceDuplicate: # Use original - print "using original bldg" + print("using original bldg") bldg = bldgs[bldgIndex] bldgIndex += 1 else: @@ -4011,7 +4011,7 @@ def getBldg(self, bldgIndex, bldgs, forceDuplicate = False): oldDNANode = self.findDNANode(oldBldg) nodeClass = DNAGetClassType(oldDNANode) if nodeClass.eq(DNA_LANDMARK_BUILDING): - print "making landmark copy" + print("making landmark copy") # Remove white and dark grey doors from color list colorList = self.getAttribute('door_color').getList() colorList = colorList[1:3] + colorList[4:len(colorList)] @@ -4021,7 +4021,7 @@ def getBldg(self, bldgIndex, bldgs, forceDuplicate = False): self.addLandmark(oldDNANode.getCode(), oldDNANode.getBuildingType()) bldg = self.lastNodePath else: - print "making flatbuilding copy" + print("making flatbuilding copy") bldg = self.duplicateFlatBuilding(oldDNANode) return bldg, bldgIndex @@ -4032,10 +4032,10 @@ def updateBarricadeDict(self, side, barricadeOrigNum, curBldgGroupIndex): elif (side == 'inner'): barricadeDict = self.innerBarricadeDict else: - print("unhandled side %s" % side) + print(("unhandled side %s" % side)) return - if not barricadeDict.has_key(barricadeOrigNum): + if barricadeOrigNum not in barricadeDict: barricadeDict[barricadeOrigNum] = [curBldgGroupIndex, curBldgGroupIndex] if curBldgGroupIndex < barricadeDict[barricadeOrigNum][0]: @@ -4044,7 +4044,7 @@ def updateBarricadeDict(self, side, barricadeOrigNum, curBldgGroupIndex): if barricadeDict[barricadeOrigNum][1] < curBldgGroupIndex: barricadeDict[barricadeOrigNum][1] = curBldgGroupIndex - print "---------- %s barricadeDict origNum=%d data=(%d, %d)" %(side, barricadeOrigNum, barricadeDict[barricadeOrigNum][0], barricadeDict[barricadeOrigNum][1]) + print("---------- %s barricadeDict origNum=%d data=(%d, %d)" %(side, barricadeOrigNum, barricadeDict[barricadeOrigNum][0], barricadeDict[barricadeOrigNum][1])) def makeStreetAlongCurve(self): curves = self.loadStreetCurve() @@ -4073,7 +4073,7 @@ def makeStreetAlongCurve(self): sides = ['inner', 'outer'] maxGroupWidth = 500 for side in sides: - print "Building street for %s side" % side + print("Building street for %s side" % side) # Subdivide the curve into different groups. bldgGroupIndex = 0 curGroupWidth = 0 @@ -4085,7 +4085,7 @@ def makeStreetAlongCurve(self): self.makeNewBuildingGroup(bldgGroupIndex, side, curveName) for curve, curveType in curves[side]: - print "----------------- curve(%s, %s): %s --------------- " % (side, curve.getName(), curve) + print("----------------- curve(%s, %s): %s --------------- " % (side, curve.getName(), curve)) #import pdb; pdb.set_trace() currT = 0 endT = curve.getMaxT() @@ -4116,7 +4116,7 @@ def makeStreetAlongCurve(self): self.updateSelectedPose([bldg]) self.adjustPropChildren(bldg) base.direct.reparent(bldg, fWrt = 1) - print bldgIndex + print(bldgIndex) elif curveType == 'trees': curve.getPoint(currT, currPoint) # trees are spaced anywhere from 40-80 ft apart @@ -4149,27 +4149,27 @@ def makeStreetAlongCurve(self): elif curveType == 'bridge': # Don't add any dna for the bridge sections, but add the length # of the bridge so we can increment our building groups correctly - print "adding bridge (%s), curT = %s" % (side, currT) + print("adding bridge (%s), curT = %s" % (side, currT)) bridgeWidth = 1050 curGroupWidth += bridgeWidth #currT, currPoint = self.findBldgEndPoint(bridgeWidth, curve, currT, currPoint, rd = 0) - print "currT after adding bridge = %s" % currT + print("currT after adding bridge = %s" % currT) # force move to next curve currT = endT + 1 elif curveType == 'tunnel': # Don't add any dna for the tunnel sections, but add the length # of the bridge so we can increment our building groups correctly - print "adding tunnel (%s), curT = %s" % (side, currT) + print("adding tunnel (%s), curT = %s" % (side, currT)) tunnelWidth = 775 curGroupWidth += tunnelWidth #currT, currPoint = self.findBldgEndPoint(tunnelWidth, curve, currT, currPoint, rd = 0) - print "currT after adding tunnel = %s" % currT + print("currT after adding tunnel = %s" % currT) # force move to next curve currT = endT + 1 elif curveType == 'barricade': - print "adding barricade (%s) %s, curT = %d" % (side, curve.getName(), currT) + print("adding barricade (%s) %s, curT = %d" % (side, curve.getName(), currT)) barricadeWidth = curve.calcLength() - print "barricade width = %f" % barricadeWidth + print("barricade width = %f" % barricadeWidth) simple =1 if (simple): @@ -4204,15 +4204,15 @@ def makeStreetAlongCurve(self): # Check if we need a new group yet if curGroupWidth > maxGroupWidth: - print "curGroupWidth %s > %s" % (curGroupWidth, maxGroupWidth) + print("curGroupWidth %s > %s" % (curGroupWidth, maxGroupWidth)) diffGroup = curGroupWidth - maxGroupWidth while diffGroup > 0: bldgGroupIndex += 1 self.makeNewBuildingGroup(bldgGroupIndex, side, curve.getName()) - print "adding group %s (%s)" % (bldgGroupIndex, diffGroup) + print("adding group %s (%s)" % (bldgGroupIndex, diffGroup)) diffGroup -= maxGroupWidth curGroupWidth = 0 - print currT, curGroupWidth + print(currT, curGroupWidth) def makeSideStreets(self, curves): @@ -4236,14 +4236,14 @@ def makeSideStreets(self, curves): sides = ['innersidest', 'outersidest'] maxGroupWidth = 50000 for side in sides: - print "Building street for %s side" % side + print("Building street for %s side" % side) # Subdivide the curve into different groups. bldgGroupIndex = 0 curGroupWidth = 0 for curve, curveType in curves[side]: - print "----------------- curve(%s, %s): %s --------------- " % (side, curve.getName(), curve) + print("----------------- curve(%s, %s): %s --------------- " % (side, curve.getName(), curve)) #import pdb; pdb.set_trace() currT = 0 endT = curve.getMaxT() @@ -4251,7 +4251,7 @@ def makeSideStreets(self, curves): #RAU side streets still too long, lets try arbitrarily dividing it in half #endT = endT / 2 - print ("endT = %f" % endT) + print(("endT = %f" % endT)) #if (maxGroupWidth < endT): # self.notify.debug("changing endT from %f to %f" % (endT, maxGroupWidth)) # endT = maxGroupWidth @@ -4286,7 +4286,7 @@ def makeSideStreets(self, curves): self.updateSelectedPose([bldg]) self.adjustPropChildren(bldg) base.direct.reparent(bldg, fWrt = 1) - print bldgIndex + print(bldgIndex) elif curveType == 'trees': curve.getPoint(currT, currPoint) # trees are spaced anywhere from 40-80 ft apart @@ -4318,27 +4318,27 @@ def makeSideStreets(self, curves): elif curveType == 'bridge': # Don't add any dna for the bridge sections, but add the length # of the bridge so we can increment our building groups correctly - print "adding bridge (%s), curT = %s" % (side, currT) + print("adding bridge (%s), curT = %s" % (side, currT)) bridgeWidth = 1050 curGroupWidth += bridgeWidth #currT, currPoint = self.findBldgEndPoint(bridgeWidth, curve, currT, currPoint, rd = 0) - print "currT after adding bridge = %s" % currT + print("currT after adding bridge = %s" % currT) # force move to next curve currT = endT + 1 elif curveType == 'tunnel': # Don't add any dna for the tunnel sections, but add the length # of the bridge so we can increment our building groups correctly - print "adding tunnel (%s), curT = %s" % (side, currT) + print("adding tunnel (%s), curT = %s" % (side, currT)) tunnelWidth = 775 curGroupWidth += tunnelWidth #currT, currPoint = self.findBldgEndPoint(tunnelWidth, curve, currT, currPoint, rd = 0) - print "currT after adding tunnel = %s" % currT + print("currT after adding tunnel = %s" % currT) # force move to next curve currT = endT + 1 elif curveType == 'barricade': - print "adding barricade (%s) %s, curT = %d" % (side, curve.getName(), currT) + print("adding barricade (%s) %s, curT = %d" % (side, curve.getName(), currT)) barricadeWidth = curve.calcLength() - print "barricade width = %f" % barricadeWidth + print("barricade width = %f" % barricadeWidth) simple =1 if (simple): @@ -4553,9 +4553,8 @@ def __init__(self, levelEditor, parent = None, **kw): text = 'ADD STREET', command = self.addStreet) self.addStreetButton.pack(fill = X, padx = 20, pady = 10) - streets = map(lambda s: s[7:], - self.styleManager.getCatalogCodes( - 'street')) + streets = [s[7:] for s in self.styleManager.getCatalogCodes( + 'street')] streets.sort() self.streetSelector = Pmw.ComboBox( streetsPage, @@ -4665,9 +4664,8 @@ def __init__(self, levelEditor, parent = None, **kw): text = 'ADD LANDMARK BUILDING', command = self.addLandmark) self.addLandmarkBuildingButton.pack(fill = X, padx = 20, pady = 10) - bldgs = map(lambda s: s[14:], - self.styleManager.getCatalogCodes( - 'toon_landmark')) + bldgs = [s[14:] for s in self.styleManager.getCatalogCodes( + 'toon_landmark')] bldgs.sort() self.landmarkBuildingSelector = Pmw.ComboBox( landmarkBuildingsPage, @@ -5291,9 +5289,9 @@ def setFlatBuildingHeight(self): def updateHeightList(self, height): # Update combo box - heightList = self.levelEditor.getList(`height` + '_ft_wall_heights') + heightList = self.levelEditor.getList(repr(height) + '_ft_wall_heights') self.toonBuildingSelector.setlist( - ['random'] + map(createHeightCode, heightList)) + ['random'] + list(map(createHeightCode, heightList))) self.toonBuildingSelector.selectitem(0) self.toonBuildingSelector.invoke() @@ -5469,7 +5467,7 @@ def selectSignBaselineItem(self, val): def setSignBaselineStyle(self, val): baseline=self.currentBaselineDNA if baseline == None: - print "\n\nbaseline == None" + print("\n\nbaseline == None") return #skyler: This isn't working yet. # As a workaround, select the baseline from the tk panel. # Try to find the first baseline in the sign: @@ -5659,7 +5657,7 @@ def addAnimBuilding(self): self.levelEditor.addAnimBuilding(self.animBuildingType) def setAnimBuildingType(self, name): - print name + print(name) def setPropType(self, name): self.propType = name @@ -5707,7 +5705,7 @@ def setSuitPointType(self, name): self.levelEditor.currentSuitPointType = DNASuitPoint.FRONTDOORPOINT elif (name == "side door"): self.levelEditor.currentSuitPointType = DNASuitPoint.SIDEDOORPOINT - print self.levelEditor.currentSuitPointType + print(self.levelEditor.currentSuitPointType) def setBattleCellType(self, name): self.levelEditor.currentBattleCellType = name @@ -5758,8 +5756,7 @@ def __init__(self, levelEditor, visGroups = ['None'], self.levelEditor = levelEditor self.visGroups = visGroups - self.visGroupNames = map(lambda pair: pair[1].getName(), - self.visGroups) + self.visGroupNames = [pair[1].getName() for pair in self.visGroups] # Initialize dictionary of visibility relationships self.visDict = {} # Group we are currently setting visGroups for @@ -5854,7 +5851,7 @@ def __init__(self, levelEditor, visGroups = ['None'], self.selectVisGroup(self.visGroupNames[0]) def selectVisGroup(self, target): - print 'Setting vis options for group:', target + print('Setting vis options for group:', target) # Record current target oldTarget = self.target # Record new target @@ -5884,7 +5881,7 @@ def toggleVisGroup(self, groupName, state): # MRM: Add change in visibility here # Show all vs. show active if state == 1: - print 'Vis Group:', self.target, 'adding group:', groupName + print('Vis Group:', self.target, 'adding group:', groupName) if groupName not in visList: visList.append(groupName) target.addVisible(groupName) @@ -5892,7 +5889,7 @@ def toggleVisGroup(self, groupName, state): groupNP.show() groupNP.setColor(1, 0, 0, 1) else: - print 'Vis Group:', self.target, 'removing group:', groupName + print('Vis Group:', self.target, 'removing group:', groupName) if groupName in visList: visList.remove(groupName) target.removeVisible(groupName) @@ -5905,7 +5902,7 @@ def refreshVisibility(self): # Get current visibility list for target targetInfo = self.visDict[self.target] visList = targetInfo[2] - for key in self.visDict.keys(): + for key in list(self.visDict.keys()): groupNP = self.visDict[key][0] if key in visList: groupNP.show() diff --git a/toontown/src/leveleditor/LevelEditorGlobals.py b/toontown/src/leveleditor/LevelEditorGlobals.py index 28964cbd..110006e2 100644 --- a/toontown/src/leveleditor/LevelEditorGlobals.py +++ b/toontown/src/leveleditor/LevelEditorGlobals.py @@ -26,12 +26,12 @@ NEIGHBORHOODS = [] NEIGHBORHOOD_CODES = {} for hoodId in hoods: - if HOOD_IDS.has_key(hoodId): + if hoodId in HOOD_IDS: hoodName = HOOD_IDS[hoodId] NEIGHBORHOOD_CODES[hoodName] = hoodId NEIGHBORHOODS.append(hoodName) else: - print 'Error: no hood defined for: ', hoodId + print('Error: no hood defined for: ', hoodId) dnaDirectory = Filename.expandFrom(base.config.GetString("dna-directory", "$TTMODELS/src/dna")) @@ -362,13 +362,13 @@ def importModule(dcImports, moduleName, importSymbols): if hasattr(module, "__all__"): importSymbols = module.__all__ else: - importSymbols = module.__dict__.keys() + importSymbols = list(module.__dict__.keys()) for symbolName in importSymbols: if hasattr(module, symbolName): dcImports[symbolName] = getattr(module, symbolName) else: - raise StandardError, 'Symbol %s not defined in module %s.' % (symbolName, moduleName) + raise Exception('Symbol %s not defined in module %s.' % (symbolName, moduleName)) else: # "import moduleName" diff --git a/toontown/src/leveleditor/LevelEditorStart.py b/toontown/src/leveleditor/LevelEditorStart.py index 230cff2d..775060dc 100644 --- a/toontown/src/leveleditor/LevelEditorStart.py +++ b/toontown/src/leveleditor/LevelEditorStart.py @@ -1,5 +1,5 @@ from direct.directbase.DirectStart import * -import LevelEditor +from . import LevelEditor #base.le = LevelEditor.LevelEditor() # [gjeon] Don't use this yet # to start leveleditor use diff --git a/toontown/src/leveleditor/LevelEditorUI.py b/toontown/src/leveleditor/LevelEditorUI.py index a144db82..b920a9b5 100644 --- a/toontown/src/leveleditor/LevelEditorUI.py +++ b/toontown/src/leveleditor/LevelEditorUI.py @@ -2,17 +2,17 @@ from pandac.PandaModules import * from direct.leveleditor.LevelEditorUIBase import * from direct.gui import DirectGui -from SceneGraphUI import * -from FlatBuildingObj import * -from LandmarkObj import * -from PropObj import * -from AnimPropObj import * -from AnimBuildingObj import * -from GroupObj import * -from SignEditFrame import * -from VisGroupsUI import * - -from LevelEditorGlobals import HOOD_IDS +from .SceneGraphUI import * +from .FlatBuildingObj import * +from .LandmarkObj import * +from .PropObj import * +from .AnimPropObj import * +from .AnimBuildingObj import * +from .GroupObj import * +from .SignEditFrame import * +from .VisGroupsUI import * + +from .LevelEditorGlobals import HOOD_IDS ID_SAVE_DNA = 1101 ID_SAVE_DNA_AS = 1102 @@ -184,7 +184,7 @@ def addSignMenuItem(objNP): elif isinstance(objNP, PropObj): if objDef.hood == 'Generic': - for hoodId in HOOD_IDS.keys(): + for hoodId in list(HOOD_IDS.keys()): addSubMenuItem('Prop Color for %s'%hoodId, None, 'prop_color', objNP.dna, None, hoodId) else: addSubMenuItem('Prop Color', None, 'prop_color', objNP.dna) @@ -246,9 +246,9 @@ def removeBattleCell(self, evt, objNP, visGroupDNA, cell): objNP.removeBattleCell(cell) # Remove cell from DNASTORE if DNASTORE.removeBattleCell(cell): - print "Removed from DNASTORE" + print("Removed from DNASTORE") else: - print "Not found in DNASTORE" + print("Not found in DNASTORE") del self.cellDict[cell] for i in range(visGroupDNA.getNumBattleCells()): @@ -299,7 +299,7 @@ def drawBattleCell(self, cell, parent, cellId=0): return marker def resetBattleCellMarkers(self): - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): if not marker.isEmpty(): marker.remove() self.cellDict = {} @@ -485,19 +485,19 @@ def onRightDown(self, evt=None): self.PopupMenu(self.contextMenu, mpos) def onShowBattleCells(self, evt=None): - for cell, marker in self.cellDict.items(): + for cell, marker in list(self.cellDict.items()): if self.showBattleCellsMenuItem.IsChecked(): marker.show() else: marker.hide() def onShowSuitPath(self, evt=None): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): if self.showSuitPathMenuItem.IsChecked(): edgeLine.show() else: edgeLine.hide() - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if self.showSuitPathMenuItem.IsChecked(): marker.show() else: @@ -573,13 +573,13 @@ def drawSuitPoint(self, suitPoint, pos, type, parent): return marker def resetPathMarkers(self): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): if not edgeLine.isEmpty(): edgeLine.reset() edgeLine.removeNode() self.edgeDict = {} self.np2EdgeDict = {} - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if not marker.isEmpty(): marker.removeNode() self.pointDict = {} @@ -609,7 +609,7 @@ def populateSuitPaths(self): # Store the edge on each point in case we move the point # we can update the edge for point in [edge.getStartPoint(), edge.getEndPoint()]: - if self.point2edgeDict.has_key(point): + if point in self.point2edgeDict: self.point2edgeDict[point].append(edge) else: self.point2edgeDict[point] = [edge] @@ -623,10 +623,10 @@ def updateBarricadeDict(self, side, barricadeOrigNum, curBldgGroupIndex): elif (side == 'inner'): barricadeDict = self.innerBarricadeDict else: - print("unhandled side %s" % side) + print(("unhandled side %s" % side)) return - if not barricadeDict.has_key(barricadeOrigNum): + if barricadeOrigNum not in barricadeDict: barricadeDict[barricadeOrigNum] = [curBldgGroupIndex, curBldgGroupIndex] if curBldgGroupIndex < barricadeDict[barricadeOrigNum][0]: @@ -635,7 +635,7 @@ def updateBarricadeDict(self, side, barricadeOrigNum, curBldgGroupIndex): if barricadeDict[barricadeOrigNum][1] < curBldgGroupIndex: barricadeDict[barricadeOrigNum][1] = curBldgGroupIndex - print "---------- %s barricadeDict origNum=%d data=(%d, %d)" %(side, barricadeOrigNum, barricadeDict[barricadeOrigNum][0], barricadeDict[barricadeOrigNum][1]) + print("---------- %s barricadeDict origNum=%d data=(%d, %d)" %(side, barricadeOrigNum, barricadeDict[barricadeOrigNum][0], barricadeDict[barricadeOrigNum][1])) def reparentStreetBuildings(self, nodePath): dnaNode = self.editor.findDNANode(nodePath) @@ -668,7 +668,7 @@ def consolidateStreetBuildings(self): return newGroup def makeNewBuildingGroup(self, sequenceNum, side, curveName): - print "-------------------------- new building group %s curveName=%s------------------------" % (sequenceNum, curveName) + print("-------------------------- new building group %s curveName=%s------------------------" % (sequenceNum, curveName)) # Now create a new group with just the buildings self.editor.addGroup(self.editor.NPToplevel) newGroup = self.editor.NPParent @@ -678,10 +678,10 @@ def makeNewBuildingGroup(self, sequenceNum, side, curveName): if 'curveside' in curveName: #we want to preserve which group the side street is closest to - print "special casing %s" % curveName + print("special casing %s" % curveName) parts = curveName.split('_') groupName = 'Buildings_' + side + "-" + parts[3] + "_" + parts[4] - print "groupname = %s" % groupName + print("groupname = %s" % groupName) else: groupName = 'Buildings_' + side + "-" + str(sequenceNum) newGroup.setName(groupName) @@ -808,13 +808,13 @@ def drawSuitPoint(self, suitPoint, pos, type, parent): return marker def resetPathMarkers(self): - for edge, edgeLine in self.edgeDict.items(): + for edge, edgeLine in list(self.edgeDict.items()): if not edgeLine.isEmpty(): edgeLine.reset() edgeLine.removeNode() self.edgeDict = {} self.np2EdgeDict = {} - for point, marker in self.pointDict.items(): + for point, marker in list(self.pointDict.items()): if not marker.isEmpty(): marker.removeNode() self.pointDict = {} @@ -844,7 +844,7 @@ def populateSuitPaths(self): # Store the edge on each point in case we move the point # we can update the edge for point in [edge.getStartPoint(), edge.getEndPoint()]: - if self.point2edgeDict.has_key(point): + if point in self.point2edgeDict: self.point2edgeDict[point].append(edge) else: self.point2edgeDict[point] = [edge] diff --git a/toontown/src/leveleditor/LevelStyleManager.py b/toontown/src/leveleditor/LevelStyleManager.py index 2c73bd6e..7c7dcdbb 100644 --- a/toontown/src/leveleditor/LevelStyleManager.py +++ b/toontown/src/leveleditor/LevelStyleManager.py @@ -2,10 +2,11 @@ import direct.gui.DirectGuiGlobals as DGG from direct.gui.DirectGui import * -from PieMenu import * -from ScrollMenu import * +from .PieMenu import * +from .ScrollMenu import * -from LevelEditorGlobals import * +from .LevelEditorGlobals import * +from functools import reduce class LevelStyleManager: """Class which reads in style files and manages class variables""" @@ -46,7 +47,7 @@ def createBaselineStyleDictionary(self, neighborhood): Create a dictionary of baseline styles for a neighborhood """ filename = neighborhood + '_baseline_styles.txt' - print 'Loading baseline styles from: ' + filename + print('Loading baseline styles from: ' + filename) styleData = self.getStyleFileData(filename) return self.initializeBaselineStyleDictionary(styleData, neighborhood) @@ -62,7 +63,7 @@ def initializeBaselineStyleDictionary(self, styleData, neighborhood): if l == 'baselineStyle': # Start of new style, strip off first line then extract style style, styleData = self.extractBaselineStyle(styleData) - style.name = code + '_baseline_style_' + `styleCount` + style.name = code + '_baseline_style_' + repr(styleCount) # Store style in dictionary styleDictionary[style.name] = style styleCount = styleCount + 1 @@ -87,8 +88,8 @@ def extractBaselineStyle(self, styleData): # Note, endBaselineStyle line is *not* stripped off return style, styleData else: - pair = map(string.strip, l.split(':')) - if style.__dict__.has_key(pair[0]): + pair = list(map(string.strip, l.split(':'))) + if pair[0] in style.__dict__: pair_0 = pair[0] # Convert some numerical values if (pair_0 == 'color' @@ -106,8 +107,8 @@ def extractBaselineStyle(self, styleData): else: style[pair_0] = pair[1] else: - print 'extractBaselineStyle: Invalid Key' - print pair[0] + print('extractBaselineStyle: Invalid Key') + print(pair[0]) styleData = styleData[1:] # No end of style found, return style data as is return style, None @@ -120,9 +121,9 @@ def createBaselineStyleMenu(self, neighborhood, dictionary): newStyleMenu = hidden.attachNewNode(neighborhood + '_style_menu') radius = 0.7 angle = deg2Rad(360.0/numItems) - keys = dictionary.keys() + keys = list(dictionary.keys()) keys.sort() - styles = map(lambda x, d = dictionary: d[x], keys) + styles = list(map(lambda x, d = dictionary: d[x], keys)) sf = 0.1 aspectRatio = (base.direct.dr.getWidth()/float(base.direct.dr.getHeight())) for i in range(numItems): @@ -179,7 +180,7 @@ def createWallStyleDictionary(self, neighborhood): Create a dictionary of wall styles for a neighborhood """ filename = neighborhood + '_wall_styles.txt' - print 'Loading wall styles from: ' + filename + print('Loading wall styles from: ' + filename) styleData = self.getStyleFileData(filename) return self.initializeWallStyleDictionary(styleData, neighborhood) @@ -195,7 +196,7 @@ def initializeWallStyleDictionary(self, styleData, neighborhood): if l == 'wallStyle': # Start of new style, strip off first line then extract style style, styleData = self.extractWallStyle(styleData) - style.name = code + '_wall_style_' + `styleCount` + style.name = code + '_wall_style_' + repr(styleCount) # Store style in dictionary styleDictionary[style.name] = style styleCount = styleCount + 1 @@ -220,8 +221,8 @@ def extractWallStyle(self, styleData): # Note, endWallStyle line is *not* stripped off return style, styleData else: - pair = map(string.strip, l.split(':')) - if style.__dict__.has_key(pair[0]): + pair = list(map(string.strip, l.split(':'))) + if pair[0] in style.__dict__: # Convert colors and count strings to numerical values if ((string.find(pair[0],'_color') >= 0) or (string.find(pair[0],'_count') >= 0)): @@ -229,8 +230,8 @@ def extractWallStyle(self, styleData): else: style[pair[0]] = pair[1] else: - print 'getStyleDictionaryFromStyleData: Invalid Key' - print pair[0] + print('getStyleDictionaryFromStyleData: Invalid Key') + print(pair[0]) styleData = styleData[1:] # No end of style found, return style data as is return style, None @@ -243,9 +244,9 @@ def createWallStyleMenu(self, neighborhood, dictionary): newStyleMenu = hidden.attachNewNode(neighborhood + '_style_menu') radius = 0.7 angle = deg2Rad(360.0/numItems) - keys = dictionary.keys() + keys = list(dictionary.keys()) keys.sort() - styles = map(lambda x, d = dictionary: d[x], keys) + styles = list(map(lambda x, d = dictionary: d[x], keys)) sf = 0.03 aspectRatio = (base.direct.dr.getWidth()/float(base.direct.dr.getHeight())) for i in range(numItems): @@ -321,11 +322,11 @@ def createBuildingStyleAttributes(self): typeKey = i + '_styles' self.attributeDictionary[typeKey] = {} for i in NUM_WALLS: - numWallKey = `i` + '_wall_styles' + numWallKey = repr(i) + '_wall_styles' self.attributeDictionary[numWallKey] = {} # Also sort height lists according to total height of the building for i in BUILDING_HEIGHTS: - heightKey = `i` + '_ft_wall_heights' + heightKey = repr(i) + '_ft_wall_heights' self.attributeDictionary[heightKey] = {} # Now distribute data for each neighborhood for neighborhood in self.NEIGHBORHOODS: @@ -341,17 +342,17 @@ def createBuildingStyleAttributes(self): typeAttributes[i] = LevelAttribute(typeAttrName) # Number of walls for i in NUM_WALLS: - styleAttrName = neighborhood + '_' + `i` + '_wall_styles' + styleAttrName = neighborhood + '_' + repr(i) + '_wall_styles' numWallsAttributes[i] = LevelAttribute(styleAttrName) # Building height for i in BUILDING_HEIGHTS: - heightAttrName = neighborhood + '_' + `i` + '_ft_wall_heights' + heightAttrName = neighborhood + '_' + repr(i) + '_ft_wall_heights' heightAttributes[i] = LevelAttribute(heightAttrName) # Sort through the styles and store in separate lists for style in styleDict[neighborhood].getList(): # Put in code for number of walls into building styles heightType = string.strip(string.split(style.name, ':')[1]) - heightList = map(string.atof, string.split(heightType, '_')) + heightList = list(map(string.atof, string.split(heightType, '_'))) numWalls = len(heightList) # This one stores styles sorted by type typeAttributes[heightType].add(style) @@ -370,12 +371,12 @@ def createBuildingStyleAttributes(self): typeAttributes[i]) for i in NUM_WALLS: # Styles - numWallKey = `i` + '_wall_styles' + numWallKey = repr(i) + '_wall_styles' self.attributeDictionary[numWallKey][neighborhood] = ( numWallsAttributes[i]) for i in BUILDING_HEIGHTS: # Heights - heightKey = `i` + '_ft_wall_heights' + heightKey = repr(i) + '_ft_wall_heights' self.attributeDictionary[heightKey][neighborhood] = ( heightAttributes[i]) @@ -384,7 +385,7 @@ def createBuildingStyleDictionary(self, neighborhood): Create a dictionary of wall styles for a neighborhood """ filename = neighborhood + '_building_styles.txt' - print 'Loading building styles from: ' + filename + print('Loading building styles from: ' + filename) styleData = self.getStyleFileData(filename) return self.initializeBuildingStyleDictionary(styleData, neighborhood) @@ -406,11 +407,11 @@ def initializeBuildingStyleDictionary(self, styleData, neighborhood): bldgStyle = DNAFlatBuildingStyle(styleList = []) # Extract height information found at end of line heightCode = string.strip(string.split(l, ':')[1]) - heightList = map(string.atof, string.split(heightCode, '_')) + heightList = list(map(string.atof, string.split(heightCode, '_'))) # Construct name for building style. Tack on height code # to be used later to split styles by heightCode bldgStyle.name = ( - code + '_building_style_' + `styleCount` + + code + '_building_style_' + repr(styleCount) + ':' + heightCode) # Increment counter styleCount = styleCount + 1 @@ -424,7 +425,7 @@ def initializeBuildingStyleDictionary(self, styleData, neighborhood): elif l[:9] == 'wallStyle': # Beginning of next wall style wallStyle, styleData = self.extractWallStyle(styleData) - wallStyle.name = bldgStyle.name + '_wall_' + `wallCount` + wallStyle.name = bldgStyle.name + '_wall_' + repr(wallCount) try: height = heightList[wallCount] except IndexError: @@ -445,9 +446,9 @@ def createBuildingStyleMenu(self, neighborhood, dictionary): newStyleMenu = hidden.attachNewNode(neighborhood + '_style_menu') radius = 0.7 angle = deg2Rad(360.0/numItems) - keys = dictionary.keys() + keys = list(dictionary.keys()) keys.sort() - styles = map(lambda x, d = dictionary: d[x], keys) + styles = list(map(lambda x, d = dictionary: d[x], keys)) sf = 0.02 aspectRatio = (base.direct.dr.getWidth()/float(base.direct.dr.getHeight())) for i in range(numItems): @@ -570,33 +571,33 @@ def printFlatBuildingStyle(self, building): self.printWallStyle(child) def printWallStyle(self, wall): - print 'wall_texture: ' + wall.getCode() + print('wall_texture: ' + wall.getCode()) color = wall.getColor() - print ('wall_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % - (color[0], color[1], color[2])) + print(('wall_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % + (color[0], color[1], color[2]))) for i in range(wall.getNumChildren()): child = wall.at(i) if DNAClassEqual(child, DNA_WINDOWS): - print 'window_texture: ' + child.getCode() + print('window_texture: ' + child.getCode()) color = child.getColor() - print ('window_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % - (color[0], color[1], color[2])) + print(('window_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % + (color[0], color[1], color[2]))) # MRM: Check for awnings here elif DNAClassEqual(child, DNA_DOOR): - print 'door_texture: ' + child.getCode() + print('door_texture: ' + child.getCode()) color = child.getColor() - print ('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % - (color[0], color[1], color[2])) + print(('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % + (color[0], color[1], color[2]))) elif DNAClassEqual(child, DNA_FLAT_DOOR): - print 'door_texture: ' + child.getCode() + print('door_texture: ' + child.getCode()) color = child.getColor() - print ('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % - (color[0], color[1], color[2])) + print(('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % + (color[0], color[1], color[2]))) elif DNAClassEqual(child, DNA_CORNICE): - print 'cornice_texture: ' + child.getCode() + print('cornice_texture: ' + child.getCode()) color = child.getColor() - print ('cornice_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % - (color[0], color[1], color[2])) + print(('cornice_color: Vec4(%.3f, %.3f, %.3f, 1.0)' % + (color[0], color[1], color[2]))) # COLOR PALETTE FUNCTIONS def createColorAttributes(self): @@ -628,7 +629,7 @@ def createColorAttributes(self): def createColorDictionary(self, neighborhood): filename = neighborhood + '_colors.txt' - print 'Loading Color Palettes from: ' + filename + print('Loading Color Palettes from: ' + filename) colorData = self.getStyleFileData(filename) return self.getColorDictionary(colorData) @@ -639,17 +640,17 @@ def getColorDictionary(self, colorData): dict[colorType] = DEFAULT_COLORS[:] # Add color information to appropriate sub-list for line in colorData: - pair = map(string.strip, line.split(':')) + pair = list(map(string.strip, line.split(':'))) key = pair[0] - if dict.has_key(key): + if key in dict: dict[key].append(eval(pair[1])) else: - print 'LevelStyleManager.getColorDictionary key not found' + print('LevelStyleManager.getColorDictionary key not found') return dict def createColorMenus(self, neighborhood, dictionary): menuDict = {} - keys = dictionary.keys() + keys = list(dictionary.keys()) for key in keys: menuDict[key] = ( self.createColorMenu(neighborhood + key, dictionary[key])) @@ -744,7 +745,7 @@ def createDNAAttributes(self): attribute.setMenu(self.createDNAPieMenu(dnaType, dnaList, sf = 0.125)) else: - print 'unknown attribute' + print('unknown attribute') # Add it to the attributeDictionary self.attributeDictionary[dnaType + '_texture'] = attribute @@ -895,21 +896,21 @@ def getAttribute(self, attribute): """ Return specified attribute for current neighborhood """ levelAttribute = self.attributeDictionary[attribute] # Get attribute for current neighborhood - if (type(levelAttribute) == types.DictionaryType): + if (type(levelAttribute) == dict): levelAttribute = levelAttribute[self.getEditMode()] return levelAttribute # UTILITY FUNCTIONS def hasAttribute(self, attribute): """ Return specified attribute for current neighborhood """ - if not self.attributeDictionary.has_key(attribute): + if attribute not in self.attributeDictionary: return 0 else: levelAttribute = self.attributeDictionary[attribute] # Get attribute for current neighborhood - if (type(levelAttribute) == types.DictionaryType): + if (type(levelAttribute) == dict): editMode = self.getEditMode() - return levelAttribute.has_key(editMode) + return editMode in levelAttribute else: return 1 @@ -963,7 +964,7 @@ def setMenu(self, menu): def setDict(self, dict): self._dict = dict # Create a list from the dictionary - self._list = dict.values() + self._list = list(dict.values()) # Update count self.count = len(self._list) # Initialize current to first item @@ -1040,9 +1041,9 @@ def output(self, file = sys.stdout): def createHeightCode(heightList): def joinHeights(h1, h2): return '%s_%s' % (h1, h2) - hl = map(ROUND_INT, heightList) + hl = list(map(ROUND_INT, heightList)) if len(hl) == 1: - return `hl[0]` + return repr(hl[0]) return reduce(joinHeights, hl) def calcHeight(heightList): diff --git a/toontown/src/leveleditor/ObjectHandler.py b/toontown/src/leveleditor/ObjectHandler.py index 563cf860..fa51ab20 100644 --- a/toontown/src/leveleditor/ObjectHandler.py +++ b/toontown/src/leveleditor/ObjectHandler.py @@ -6,15 +6,15 @@ from direct.actor import Actor from direct.leveleditor import ObjectGlobals as OG -from SuitPointObj import * -from GroupObj import * -from PropObj import * -from LandmarkObj import * -from FlatBuildingObj import * -from AnimBuildingObj import * -from AnimPropObj import * -from InteractivePropObj import * -from StreetObj import * +from .SuitPointObj import * +from .GroupObj import * +from .PropObj import * +from .LandmarkObj import * +from .FlatBuildingObj import * +from .AnimBuildingObj import * +from .AnimPropObj import * +from .InteractivePropObj import * +from .StreetObj import * class ObjectHandler: """ ObjectHandler will create and update objects """ @@ -24,7 +24,7 @@ def __init__(self, editor): def createGroup(self, name=None): if name is None: - groupName = 'group_' + `self.editor.getGroupNum()` + groupName = 'group_' + repr(self.editor.getGroupNum()) self.editor.setGroupNum(self.editor.getGroupNum() + 1) else: groupName = name @@ -32,7 +32,7 @@ def createGroup(self, name=None): def createVisGroup(self, name=None): if name is None: - groupName = 'VisGroup_' + `self.editor.getGroupNum()` + groupName = 'VisGroup_' + repr(self.editor.getGroupNum()) self.editor.setGroupNum(self.editor.getGroupNum() + 1) else: groupName = name @@ -42,7 +42,7 @@ def createVisGroup(self, name=None): def createNode(self, name=None): if name is None: - groupName = 'node_' + `self.editor.getGroupNum()` + groupName = 'node_' + repr(self.editor.getGroupNum()) self.editor.setGroupNum(self.editor.getGroupNum() + 1) else: groupName = name diff --git a/toontown/src/leveleditor/ObjectMgr.py b/toontown/src/leveleditor/ObjectMgr.py index ea36a610..d809d795 100644 --- a/toontown/src/leveleditor/ObjectMgr.py +++ b/toontown/src/leveleditor/ObjectMgr.py @@ -1,15 +1,15 @@ from direct.leveleditor.ObjectMgrBase import * -from LevelEditorGlobals import * +from .LevelEditorGlobals import * -from SuitPointObj import * -from GroupObj import * -from PropObj import * -from LandmarkObj import * -from FlatBuildingObj import * -from AnimBuildingObj import * -from AnimPropObj import * -from InteractivePropObj import * -from StreetObj import * +from .SuitPointObj import * +from .GroupObj import * +from .PropObj import * +from .LandmarkObj import * +from .FlatBuildingObj import * +from .AnimBuildingObj import * +from .AnimPropObj import * +from .InteractivePropObj import * +from .StreetObj import * class ObjectMgr(ObjectMgrBase): @@ -127,7 +127,7 @@ def populateObject(self, dnaNode, objType, objClass, parent): try: nodePath = NodePath(DNASTORE.findPandaNode(dnaNode)) except: - print "Can't find Panda Node", dnaNode, parent + print("Can't find Panda Node", dnaNode, parent) return parent if DNAClassEqual(dnaNode, DNA_PROP): @@ -143,7 +143,7 @@ def populateObject(self, dnaNode, objType, objClass, parent): obj = self.findObjectByNodePath(newParent) objDef = obj[OG.OBJ_DEF] objProp = obj[OG.OBJ_PROP] - for propName in objDef.dnaProperties.keys(): + for propName in list(objDef.dnaProperties.keys()): propDef = objDef.properties[propName] propDataType = propDef[OG.PROP_DATATYPE] val = getattr(dnaNode, objDef.dnaProperties[propName])() @@ -167,7 +167,7 @@ def populateObjects(self, dnaNode, dnaParent, parent): name = dnaNode.getName() index = name.find(':') if index < 0: - print 'Wrong flat building DNA', name + print('Wrong flat building DNA', name) ## if dnaNode.getNumChildren() == 0: ## dnaParent.remove(dnaNode) else: diff --git a/toontown/src/leveleditor/ObjectPalette.py b/toontown/src/leveleditor/ObjectPalette.py index 3fe553d9..261c7ed0 100644 --- a/toontown/src/leveleditor/ObjectPalette.py +++ b/toontown/src/leveleditor/ObjectPalette.py @@ -1,7 +1,7 @@ """ ToonTown Object Palette will be automatically generated while loading storage DNA files """ -import __builtin__, os, glob +import builtins, os, glob from pandac.PandaModules import * from direct.leveleditor.ObjectPaletteBase import * @@ -238,13 +238,12 @@ def populateHood(self, hoodName): if hoodName != 'Generic': codes = BUILDING_TYPES - codes.extend(map(lambda x: 'random%s'%x, ['10', '14', '20', '24', '25', '30'])) - codes = map(lambda x:'%s_%s'%(hoodName, x), codes) + codes.extend(['random%s'%x for x in ['10', '14', '20', '24', '25', '30']]) + codes = ['%s_%s'%(hoodName, x) for x in codes] codes.sort() self.populateTree(hoodName, 'Flat Buildings', codes, ObjectFlatBuilding) - codes = map(lambda s: s[7:], - self.getCatalogCodes('street')) + codes = [s[7:] for s in self.getCatalogCodes('street')] for pond in ['BR', 'DD', 'DG', 'DL', 'MM', 'TT']: if '%s_pond'%pond in codes: @@ -252,14 +251,14 @@ def populateHood(self, hoodName): if hoodName in ['BR', 'DD', 'DG', 'DL', 'MM', 'TT']: codes.append('pond') - codes = map(lambda x:'%s_%s'%(hoodName, x), codes) + codes = ['%s_%s'%(hoodName, x) for x in codes] codes.sort() self.populateTree(hoodName, 'Streets', codes, ObjectStreet) def populateTree(self, hoodName, groupName, codeList, objClass): registeredList = [] - for key in self.hoodDict.keys(): + for key in list(self.hoodDict.keys()): if self.hoodDict[key].get(groupName): registeredList.extend(self.hoodDict[key][groupName]) newList = [] @@ -274,7 +273,7 @@ def populateTree(self, hoodName, groupName, codeList, objClass): self.hoodDict[hoodName][groupName].append(code) def populate(self): - __builtin__.DNASTORE = DNASTORE = DNAStorage() + builtins.DNASTORE = DNASTORE = DNAStorage() # adding some hidden object type self.data['__sys__'] = ObjectBase('__sys__', createFunction=('.createSys', {})) self.data['__group__'] = ObjectToon('__group__', createFunction=('.createGroup', {'name':OG.ARG_NAME}), movable=False, named=True) diff --git a/toontown/src/leveleditor/PropObj.py b/toontown/src/leveleditor/PropObj.py index 8081166c..367a739e 100644 --- a/toontown/src/leveleditor/PropObj.py +++ b/toontown/src/leveleditor/PropObj.py @@ -2,7 +2,7 @@ ToonTown Prop object """ -from ToonTownObj import * +from .ToonTownObj import * class PropObj(ToonTownObj): def __init__(self, editor, propType, dna=None, nodePath=None, nameStr=None): diff --git a/toontown/src/leveleditor/SignEditFrame.py b/toontown/src/leveleditor/SignEditFrame.py index 2250ee50..836af96c 100644 --- a/toontown/src/leveleditor/SignEditFrame.py +++ b/toontown/src/leveleditor/SignEditFrame.py @@ -3,7 +3,7 @@ """ import wx -from LevelStyleManager import * +from .LevelStyleManager import * from wx.lib.agw.knobctrl import * class ToonKnobCtrl(KnobCtrl): diff --git a/toontown/src/leveleditor/StreetObj.py b/toontown/src/leveleditor/StreetObj.py index 15f3cf20..f0931a83 100644 --- a/toontown/src/leveleditor/StreetObj.py +++ b/toontown/src/leveleditor/StreetObj.py @@ -2,7 +2,7 @@ Street object """ -from ToonTownObj import * +from .ToonTownObj import * class StreetObj(ToonTownObj): def __init__(self, editor, streetType, dna=None, nodePath=None): diff --git a/toontown/src/leveleditor/ToonControlManager.py b/toontown/src/leveleditor/ToonControlManager.py index bae2a5d4..e16c4fe7 100644 --- a/toontown/src/leveleditor/ToonControlManager.py +++ b/toontown/src/leveleditor/ToonControlManager.py @@ -273,7 +273,7 @@ def initVisibilityData(self): # down one level to find the vis groups as an optimization groupNode = self.editor.NPToplevel.find("**/" + groupFullName) if groupNode.isEmpty(): - print "Could not find visgroup" + print("Could not find visgroup") self.nodeList.append(groupNode) for j in range(DNASTORE.getNumVisiblesInDNAVisGroup(i)): visName = DNASTORE.getVisibleName(i, j) diff --git a/toontown/src/leveleditor/ToonLevelEditor.py b/toontown/src/leveleditor/ToonLevelEditor.py index 295a0174..ef30d7ec 100644 --- a/toontown/src/leveleditor/ToonLevelEditor.py +++ b/toontown/src/leveleditor/ToonLevelEditor.py @@ -5,14 +5,14 @@ from pandac.PandaModules import * from direct.leveleditor.LevelEditorBase import * from direct.gui import DirectGui -from ObjectMgr import * -from ObjectHandler import * -from ObjectPalette import * -from LevelEditorUI import * -from ProtoPalette import * - -from LevelStyleManager import * -from ToonControlManager import * +from .ObjectMgr import * +from .ObjectHandler import * +from .ObjectPalette import * +from .LevelEditorUI import * +from .ProtoPalette import * + +from .LevelStyleManager import * +from .ToonControlManager import * #from LevelEditorGlobals import * class ToonLevelEditor(LevelEditorBase): @@ -225,7 +225,7 @@ def findHighestLandmarkBlock(self, dnaRoot, npRoot): # Make a list of flat building names, outside of the # recursive function: self.flatNames=['random'] + BUILDING_TYPES - self.flatNames=map(lambda n: n+'_DNARoot', self.flatNames) + self.flatNames=[n+'_DNARoot' for n in self.flatNames] # Search/recurse the dna: newHighest=self.convertToLandmarkBlocks(highest, dnaRoot) # Get rid of the list of flat building names: @@ -272,13 +272,13 @@ def setName(self, nodePath, newName): dnaNode.setName(newName) def createNewGroup(self, type = 'dna'): - print "createNewGroup" + print("createNewGroup") """ Create a new DNA Node group under the active parent """ # Create a new DNA Node group if type == 'dna': - newDNANode = DNANode('group_' + `self.getGroupNum()`) + newDNANode = DNANode('group_' + repr(self.getGroupNum())) else: - newDNANode = DNAVisGroup('VisGroup_' + `self.getGroupNum()`) + newDNANode = DNAVisGroup('VisGroup_' + repr(self.getGroupNum())) # Increment group counter self.setGroupNum(self.getGroupNum() + 1) # Add new DNA Node group to the current parent DNA Object @@ -378,7 +378,7 @@ def updateSelectedPose(self, nodePathList): # Update DNA pointOrCell.setPos(newPos) if (type == 'suitPointMarker'): - print "Found suit point!", pointOrCell + print("Found suit point!", pointOrCell) # Ok, now update all the lines into that node for edge in self.point2edgeDict[pointOrCell]: # Is it still in edge dict? @@ -392,7 +392,7 @@ def updateSelectedPose(self, nodePathList): edge, self.NPParent) self.edgeDict[edge] = newEdgeLine elif (type == 'battleCellMarker'): - print "Found battle cell!", pointOrCell + print("Found battle cell!", pointOrCell) def updatePose(self, dnaObject, nodePath): """ diff --git a/toontown/src/leveleditor/ToonTownObj.py b/toontown/src/leveleditor/ToonTownObj.py index 15213771..c5254bd0 100644 --- a/toontown/src/leveleditor/ToonTownObj.py +++ b/toontown/src/leveleditor/ToonTownObj.py @@ -4,7 +4,7 @@ import random from pandac.PandaModules import * from direct.leveleditor import ObjectGlobals as OG -from LevelStyleManager import * +from .LevelStyleManager import * DNA_TYPE_DICT = { 'cornice': DNA_CORNICE, diff --git a/toontown/src/leveleditor/VisGroupsUI.py b/toontown/src/leveleditor/VisGroupsUI.py index 0be4cbbe..04edb580 100644 --- a/toontown/src/leveleditor/VisGroupsUI.py +++ b/toontown/src/leveleditor/VisGroupsUI.py @@ -9,8 +9,7 @@ def __init__(self, parent, id, title, editor, visGroups): self.editor = editor self.visGroups = visGroups - self.visGroupNames = map(lambda pair: pair[1].getName(), - self.visGroups) + self.visGroupNames = [pair[1].getName() for pair in self.visGroups] # Initialize dictionary of visibility relationships self.visDict = {} @@ -64,7 +63,7 @@ def createInterface(self): def selectVisGroup(self, evt): target = evt.GetString() - print 'Setting vis options for group:', target + print('Setting vis options for group:', target) # Record current target oldTarget = self.target # Record new target @@ -96,7 +95,7 @@ def toggleVisGroup(self, evt, groupName): # MRM: Add change in visibility here # Show all vs. show active if state == 1: - print 'Vis Group:', self.target, 'adding group:', groupName + print('Vis Group:', self.target, 'adding group:', groupName) if groupName not in visList: visList.append(groupName) if hasattr(targetNP, 'addVisible'): @@ -107,7 +106,7 @@ def toggleVisGroup(self, evt, groupName): groupNP.show() groupNP.setColor(1, 0, 0, 1) else: - print 'Vis Group:', self.target, 'removing group:', groupName + print('Vis Group:', self.target, 'removing group:', groupName) if groupName in visList: visList.remove(groupName) if hasattr(targetNP, 'removeVisible'): @@ -123,7 +122,7 @@ def refreshVisibility(self, evt=None): # Get current visibility list for target targetInfo = self.visDict[self.target] visList = targetInfo[2] - for key in self.visDict.keys(): + for key in list(self.visDict.keys()): groupNP = self.visDict[key][0] if key in visList: groupNP.show() @@ -145,7 +144,7 @@ def onDestroy(self, evt): # Get current visibility list for target targetInfo = self.visDict[self.target] visList = targetInfo[2] - for key in self.visDict.keys(): + for key in list(self.visDict.keys()): groupNP = self.visDict[key][0] groupNP.show() groupNP.clearColor() diff --git a/toontown/src/leveleditor/sitecustomize.py b/toontown/src/leveleditor/sitecustomize.py index 390ec8a2..9b39414b 100644 --- a/toontown/src/leveleditor/sitecustomize.py +++ b/toontown/src/leveleditor/sitecustomize.py @@ -2,4 +2,4 @@ import sys sys.setdefaultencoding('utf8') -print "Encoding set to UTF8" +print("Encoding set to UTF8") diff --git a/toontown/src/login/AccountServerDate.py b/toontown/src/login/AccountServerDate.py index 2c24a918..d0c0bc2e 100644 --- a/toontown/src/login/AccountServerDate.py +++ b/toontown/src/login/AccountServerDate.py @@ -4,8 +4,8 @@ from otp.login.HTTPUtil import * from direct.directnotify import DirectNotifyGlobal from otp.login import TTAccount -import DateObject -import TTDateObject +from . import DateObject +from . import TTDateObject import time class AccountServerDate: @@ -50,16 +50,14 @@ def grabDate(self, force=0): # make sure we got a valid response if response[0] != 'ACCOUNT SERVER DATE': self.notify.debug('invalid response header') - raise UnexpectedResponse, \ - "unexpected response, response=%s" % response + raise UnexpectedResponse("unexpected response, response=%s" % response) # grab the date try: epoch = int(response[1]) - except ValueError, e: + except ValueError as e: self.notify.debug(str(e)) - raise UnexpectedResponse, \ - "unexpected response, response=%s" % response + raise UnexpectedResponse("unexpected response, response=%s" % response) # since we're now dealing with birth-days, we need a precise day # value. Just use Pacific time for now; the rest of the world diff --git a/toontown/src/login/AvatarChooser.py b/toontown/src/login/AvatarChooser.py index b11d0c63..2cddbbe7 100644 --- a/toontown/src/login/AvatarChooser.py +++ b/toontown/src/login/AvatarChooser.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from toontown.toonbase import ToontownGlobals -import AvatarChoice +from . import AvatarChoice from direct.fsm import StateData from direct.fsm import ClassicFSM, State from direct.fsm import State diff --git a/toontown/src/login/DateOfBirthEntry.py b/toontown/src/login/DateOfBirthEntry.py index 949d33c2..95157128 100644 --- a/toontown/src/login/DateOfBirthEntry.py +++ b/toontown/src/login/DateOfBirthEntry.py @@ -87,8 +87,8 @@ def __init__(self, showDay=1, ) # set to empty by default - self.days = range(1,31+1) - strDays = map(str, self.days) + self.days = list(range(1,31+1)) + strDays = list(map(str, self.days)) self.dayControl = DirectScrolledList( parent = self, relief = None, @@ -131,11 +131,11 @@ def __init__(self, showDay=1, if curYear == None: curYear = self.dateObject.getYear() - self.years = range(self.firstYear, curYear+1) + self.years = list(range(self.firstYear, curYear+1)) # reverse the list so that the up button increments the year self.years.reverse() # convert the list of integers to strings - strYears = map(str, self.years) + strYears = list(map(str, self.years)) self.yearControl = DirectScrolledList( parent = self, items = strYears, @@ -215,7 +215,7 @@ def setMonth(self, month): if month in [1,2,3,4,5,6,7,8,9,10,11,12]: self.monthControl.scrollTo(month-1) else: - print ("month not found in list: %s" % (month)) + print(("month not found in list: %s" % (month))) self.monthControl.scrollTo(0) self.__updateDaysInMonth() @@ -224,7 +224,7 @@ def setDay(self, day): if day in self.days: self.dayControl.scrollTo(self.days.index(day)) else: - print ("day not found in list: %s" % (day)) + print(("day not found in list: %s" % (day))) self.dayControl.scrollTo(0) def setYear(self, year): @@ -232,7 +232,7 @@ def setYear(self, year): if year in self.years: self.yearControl.scrollTo(self.years.index(year)) else: - print ("year not found in list: %s" % (year)) + print(("year not found in list: %s" % (year))) self.yearControl.scrollTo(0) self.__updateDaysInMonth() @@ -277,7 +277,7 @@ def __updateDaysInMonth(self): oldNumDays = len(self.days) numDays = self.dateObject.getNumDaysInMonth(month=self.getMonth(), year=self.getYear()) - self.days = range(1,numDays+1) + self.days = list(range(1,numDays+1)) self.__updateDayControlLength(oldNumDays, numDays) diff --git a/toontown/src/login/TTDateObject.py b/toontown/src/login/TTDateObject.py index 63285acc..b2bd59d7 100644 --- a/toontown/src/login/TTDateObject.py +++ b/toontown/src/login/TTDateObject.py @@ -1,4 +1,4 @@ -import DateObject +from . import DateObject class TTDateObject(DateObject.DateObject): """ Toontown date object; uses the account server date """ diff --git a/toontown/src/login/TestTTAccount.py b/toontown/src/login/TestTTAccount.py index b6bcd029..67e54a30 100644 --- a/toontown/src/login/TestTTAccount.py +++ b/toontown/src/login/TestTTAccount.py @@ -19,10 +19,10 @@ def __logResult(self, success, errMsg=None): self.errStrings.append(errMsg) def printResults(self): - print "================================================" - print "%s tests, %s failures" % (self.tests, len(self.errStrings)) + print("================================================") + print("%s tests, %s failures" % (self.tests, len(self.errStrings))) for i in range(len(self.errStrings)): - print "- %s" % (self.errStrings[i]) + print("- %s" % (self.errStrings[i])) def runTest(self, test, shouldFail, errMsg): """ test is the test condition; it should be a functor that @@ -35,7 +35,7 @@ def runTest(self, test, shouldFail, errMsg): """ result = test() if result: - print 'result:' + result + print('result:' + result) # the test may have failed, but that might be what we wanted passed = 0 diff --git a/toontown/src/makeatoon/BodyShop.py b/toontown/src/makeatoon/BodyShop.py index 76b9c773..70dd02f9 100644 --- a/toontown/src/makeatoon/BodyShop.py +++ b/toontown/src/makeatoon/BodyShop.py @@ -4,12 +4,12 @@ from toontown.toon import ToonDNA from direct.fsm import StateData from direct.gui.DirectGui import * -from MakeAToonGlobals import * +from .MakeAToonGlobals import * import random from toontown.toonbase import TTLocalizer from direct.directnotify import DirectNotifyGlobal from toontown.toontowngui import TeaserPanel -import ShuffleButton +from . import ShuffleButton class BodyShop(StateData.StateData): """ diff --git a/toontown/src/makeatoon/ClothesGUI.py b/toontown/src/makeatoon/ClothesGUI.py index 02fdd094..6357c540 100644 --- a/toontown/src/makeatoon/ClothesGUI.py +++ b/toontown/src/makeatoon/ClothesGUI.py @@ -5,10 +5,10 @@ from direct.fsm import StateData from direct.gui.DirectGui import * from pandac.PandaModules import * -from MakeAToonGlobals import * +from .MakeAToonGlobals import * from toontown.toonbase import TTLocalizer from direct.directnotify import DirectNotifyGlobal -import ShuffleButton +from . import ShuffleButton import random CLOTHES_MAKETOON = 0 # used by MakeAToon diff --git a/toontown/src/makeatoon/ColorShop.py b/toontown/src/makeatoon/ColorShop.py index 7c34c62a..9d4dd0c5 100644 --- a/toontown/src/makeatoon/ColorShop.py +++ b/toontown/src/makeatoon/ColorShop.py @@ -5,9 +5,9 @@ from direct.fsm import StateData from direct.gui.DirectGui import * from pandac.PandaModules import * -from MakeAToonGlobals import * +from .MakeAToonGlobals import * from toontown.toonbase import TTLocalizer -import ShuffleButton +from . import ShuffleButton import random from direct.directnotify import DirectNotifyGlobal @@ -89,7 +89,7 @@ def exit(self): try: del self.toon except: - print "ColorShop: toon not found" + print("ColorShop: toon not found") self.hideButtons() def load(self): diff --git a/toontown/src/makeatoon/GenderShop.py b/toontown/src/makeatoon/GenderShop.py index dcad5fb0..5129c1d7 100644 --- a/toontown/src/makeatoon/GenderShop.py +++ b/toontown/src/makeatoon/GenderShop.py @@ -7,7 +7,7 @@ from toontown.toonbase import ToontownGlobals from toontown.toon import ToonDNA from toontown.toon import Toon -from MakeAToonGlobals import * +from .MakeAToonGlobals import * from direct.directnotify import DirectNotifyGlobal import random diff --git a/toontown/src/makeatoon/MakeAToon.py b/toontown/src/makeatoon/MakeAToon.py index 79b20927..2de73248 100644 --- a/toontown/src/makeatoon/MakeAToon.py +++ b/toontown/src/makeatoon/MakeAToon.py @@ -16,15 +16,15 @@ from direct.task import Task from direct.gui.DirectGui import * from toontown.toonbase import TTLocalizer -from MakeAToonGlobals import * +from .MakeAToonGlobals import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal from toontown.toontowngui import TTDialog -import GenderShop -import BodyShop -import ColorShop -import MakeClothesGUI -import NameShop +from . import GenderShop +from . import BodyShop +from . import ColorShop +from . import MakeClothesGUI +from . import NameShop import random class MakeAToon(StateData.StateData): diff --git a/toontown/src/makeatoon/MakeClothesGUI.py b/toontown/src/makeatoon/MakeClothesGUI.py index 7a1adc86..98f78235 100644 --- a/toontown/src/makeatoon/MakeClothesGUI.py +++ b/toontown/src/makeatoon/MakeClothesGUI.py @@ -1,4 +1,4 @@ -import ClothesGUI +from . import ClothesGUI from toontown.toon import ToonDNA class MakeClothesGUI(ClothesGUI.ClothesGUI): diff --git a/toontown/src/makeatoon/NameCheckTest.py b/toontown/src/makeatoon/NameCheckTest.py index 2ecd2efb..062af37c 100644 --- a/toontown/src/makeatoon/NameCheckTest.py +++ b/toontown/src/makeatoon/NameCheckTest.py @@ -9,7 +9,7 @@ def checkNames(names, goodFlags=None): # the game does the strip() in NameShop.py problem = NameCheck.checkName(name.strip()) if problem: - print ' user msg: ' + problem + print(' user msg: ' + problem) if goodFlags: # make sure our results are consistent if problem: @@ -76,10 +76,10 @@ def checkNames(names, goodFlags=None): ] def runTest(): - print 'CHECKING GOOD NAMES' + print('CHECKING GOOD NAMES') checkNames(goodNames, [1] * len(goodNames)) - print 'CHECKING BAD NAMES' + print('CHECKING BAD NAMES') checkNames(badNames, [0] * len(badNames)) - print '*** all tests passed' + print('*** all tests passed') checkNames(testNames) diff --git a/toontown/src/makeatoon/NameFunctions.py b/toontown/src/makeatoon/NameFunctions.py index 9f39c568..28188c61 100644 --- a/toontown/src/makeatoon/NameFunctions.py +++ b/toontown/src/makeatoon/NameFunctions.py @@ -183,7 +183,7 @@ def __init__(self): return def writeNameMaster(self): - print "Writing Name Master" + print("Writing Name Master") output = open('NameMasterEnglish.txt', 'w') for x in self.header: output.write(x+'\n') @@ -194,7 +194,7 @@ def writeNameMaster(self): uniqueID = 0 for cat in range(0,9): - print "Working on list " + str(cat) + ". UniqueID is up to " + str(uniqueID) + print("Working on list " + str(cat) + ". UniqueID is up to " + str(uniqueID)) for name in categoryNames[cat]: output.write(str(uniqueID) + "*" + str(cat) + "*" + name + '\n') uniqueID += 1 @@ -206,16 +206,16 @@ def readNameMaster(self): try: input = open('NameMasterEnglish.txt1', 'r') except: - print "NameFunctions: Error opening list text file." + print("NameFunctions: Error opening list text file.") return - for currentLine in input.xreadlines(): + for currentLine in input: if currentLine.lstrip()[0:1] != '#': a1 = currentLine.find('*') a2 = currentLine.find('*', a1+1) self.nameDictionary[int(currentLine[0:a1])]=(int(currentLine[a1+1:a2]), currentLine[a2+1:len(currentLine)-1]) masterList = [[],[],[],[],[],[],[],[],[]] - for tu in self.nameDictionary.values(): + for tu in list(self.nameDictionary.values()): masterList[tu[0]].append(tu[1]) self.nboyTitles = masterList[0] @@ -228,8 +228,8 @@ def readNameMaster(self): self.nlastPrefixes = masterList[7] self.nlastSuffixes = masterList[8] - print self.boyTitles - print self.nboyTitles + print(self.boyTitles) + print(self.nboyTitles) diff --git a/toontown/src/makeatoon/NameGenerator.py b/toontown/src/makeatoon/NameGenerator.py index 66273a1a..537066ac 100644 --- a/toontown/src/makeatoon/NameGenerator.py +++ b/toontown/src/makeatoon/NameGenerator.py @@ -79,7 +79,7 @@ def generateLists(self): masterList = [self.boyTitles, self.girlTitles, self.neutralTitles, self.boyFirsts, self.girlFirsts, self.neutralFirsts, self.capPrefixes, self.lastPrefixes, self.lastSuffixes] - for tu in self.nameDictionary.values(): + for tu in list(self.nameDictionary.values()): masterList[tu[0]].append(tu[1]) return 1 @@ -87,7 +87,7 @@ def _getNameParts(self, cat2part): # returns list of dict of string->index, one dict per name part nameParts = [{}, {}, {}, {}] # cat2part is mapping of NameMasterEnglish.txt category -> namePart index - for id, tpl in self.nameDictionary.iteritems(): + for id, tpl in self.nameDictionary.items(): cat, str = tpl if cat in cat2part: nameParts[cat2part[cat]][str] = id @@ -139,7 +139,7 @@ def returnUniqueID(self, name, listnumber): newtu[1] = (7, name) else: newtu[0] = (8, name) - for tu in self.nameDictionary.items(): + for tu in list(self.nameDictionary.items()): for g in newtu: if tu[1] == g: return tu[0] @@ -153,7 +153,7 @@ def findWidestInList(self, text, nameList): if width > maxWidth: maxWidth = text.calcWidth(name) maxName = name - print maxName + " " + str(maxWidth) + print(maxName + " " + str(maxWidth)) return maxName def findWidestName(self): @@ -247,15 +247,15 @@ def printWidestName(self): name = self.findWidestName() width = self.text.calcWidth(name) widthStr = str(width) - print ("The widest name is: " + name + " (" + - widthStr + " units)") + print(("The widest name is: " + name + " (" + + widthStr + " units)")) def printWidestLastName(self): name = self.findWidestLastName() width = self.text.calcWidth(name) widthStr = str(width) - print ("The widest last name is: " + name + " (" + - widthStr + " units)") + print(("The widest last name is: " + name + " (" + + widthStr + " units)")) def randomName(self, boy=0, girl=0): """ This method is outdated for current uses in Toontown, but good for @@ -444,9 +444,9 @@ def printRandomNames(self, boy=0, girl=0, total=1): width = self.text.calcWidth(name) widthStr = str(width) if boy: - print "Boy: " + name + " (" + widthStr + " units)" + print("Boy: " + name + " (" + widthStr + " units)") if girl: - print "Girl: " + name + " (" + widthStr + " units)" + print("Girl: " + name + " (" + widthStr + " units)") i += 1 @@ -460,18 +460,18 @@ def percentOver(self, limit=9.0, samples=1000): over += 1 i += 1 percent = (float(over) / float(samples)) * 100 - print ("Samples: " + str(samples) + " Over: " + - str(over) + " Percent: " + str(percent)) + print(("Samples: " + str(samples) + " Over: " + + str(over) + " Percent: " + str(percent))) def totalNames(self): # Firsts only firsts = (len(self.boyFirsts) + len(self.girlFirsts) + len(self.neutralFirsts)) - print "Total firsts: " + str(firsts) + print("Total firsts: " + str(firsts)) # Lasts only lasts = len(self.lastPrefixes) * len(self.lastSuffixes) - print "Total lasts: " + str(lasts) + print("Total lasts: " + str(lasts)) # Title plus first neutralTitleFirsts = len(self.neutralTitles) * len(self.neutralFirsts) @@ -485,7 +485,7 @@ def totalNames(self): len(self.girlFirsts)))) totalTitleFirsts = (neutralTitleFirsts + boyTitleFirsts + girlTitleFirsts) - print "Total title firsts: " + str(totalTitleFirsts) + print("Total title firsts: " + str(totalTitleFirsts)) # Title plus last neutralTitleLasts = len(self.neutralTitles) * lasts @@ -495,7 +495,7 @@ def totalNames(self): lasts) totalTitleLasts = (neutralTitleLasts + boyTitleFirsts + girlTitleLasts) - print "Total title lasts: " + str(totalTitleLasts) + print("Total title lasts: " + str(totalTitleLasts)) # First plus last neutralFirstLasts = len(self.neutralFirsts) * lasts @@ -503,20 +503,20 @@ def totalNames(self): girlFirstLasts = len(self.girlFirsts) * lasts totalFirstLasts = (neutralFirstLasts + boyFirstLasts + girlFirstLasts) - print "Total first lasts: " + str(totalFirstLasts) + print("Total first lasts: " + str(totalFirstLasts)) # Title plus first plus last neutralTitleFirstLasts = neutralTitleFirsts * lasts boyTitleFirstLasts = boyTitleFirsts * lasts girlTitleFirstLasts = girlTitleFirsts * lasts totalTitleFirstLasts = (neutralTitleFirstLasts + boyTitleFirstLasts + girlTitleFirstLasts) - print "Total title first lasts: " + str(totalTitleFirstLasts) + print("Total title first lasts: " + str(totalTitleFirstLasts)) # Total totalNames = (firsts + lasts + totalTitleFirsts + totalTitleLasts + totalFirstLasts + totalTitleFirstLasts) - print "Total Names: " + str(totalNames) + print("Total Names: " + str(totalNames)) diff --git a/toontown/src/makeatoon/NameShop.py b/toontown/src/makeatoon/NameShop.py index c1f92d62..d04ed060 100644 --- a/toontown/src/makeatoon/NameShop.py +++ b/toontown/src/makeatoon/NameShop.py @@ -17,7 +17,7 @@ import re import string from toontown.toonbase import TTLocalizer -import NameGenerator +from . import NameGenerator import random from otp.distributed import PotentialAvatar from otp.namepanel import NameCheck @@ -244,7 +244,7 @@ def enter(self, toon, usedNames, warp): k = self.allFirsts.index("Von") self.allFirsts[k] = "von" except: - print "NameShop: Couldn't find von" + print("NameShop: Couldn't find von") @@ -859,7 +859,7 @@ def ubershow(self, guiObjectsToShow): try: x.show() except: - print "NameShop: Tried to show already removed object" + print("NameShop: Tried to show already removed object") if base.cr.productName in [ 'DE', 'BR']: # No type-a-name for DE (German) and BR (Brazil) @@ -876,7 +876,7 @@ def uberhide(self, guiObjectsToHide): try: x.hide() except: - print "NameShop: Tried to hide already removed object" + print("NameShop: Tried to hide already removed object") def uberdestroy(self, guiObjectsToDestroy): self.notify.debug("uberdestroy %s" % str(guiObjectsToDestroy)) @@ -889,7 +889,7 @@ def uberdestroy(self, guiObjectsToDestroy): x.destroy() del x except: - print "NameShop: Tried to destroy already removed object" + print("NameShop: Tried to destroy already removed object") def getNameIndices(self): """getNameIndices(self) @@ -943,7 +943,7 @@ def match(npcName, name=name): name = string.strip(name) return (TextEncoder.upper(npcName) == TextEncoder.upper(name)) - for npcId in NPCToons.NPCToonDict.keys(): + for npcId in list(NPCToons.NPCToonDict.keys()): npcName = NPCToons.NPCToonDict[npcId][1] if match(npcName): self.notify.info('name matches NPC name "%s"' % npcName) @@ -1124,8 +1124,8 @@ def _updateGuiWithPickAName(self, flags, names, fullName): self.nameIndices[0] = self.nameGen.returnUniqueID(uberReturn[3],0) self.nameFlags[0] = 1 except: - print "NameShop : Should have found title, uh oh!" - print uberReturn + print("NameShop : Should have found title, uh oh!") + print(uberReturn) try: # Find position in scrolledList of the firstname used @@ -1133,8 +1133,8 @@ def _updateGuiWithPickAName(self, flags, names, fullName): self.nameIndices[1] = self.nameGen.returnUniqueID(uberReturn[4],1) self.nameFlags[1] = 1 except: - print "NameShop : Should have found first name, uh oh!" - print uberReturn + print("NameShop : Should have found first name, uh oh!") + print(uberReturn) # If there was a last name used (you get it...) try: @@ -1150,8 +1150,8 @@ def _updateGuiWithPickAName(self, flags, names, fullName): else: self.nameFlags[3] = 0 except: - print "NameShop : Some part of last name not found, uh oh!" - print uberReturn + print("NameShop : Some part of last name not found, uh oh!") + print(uberReturn) self.updateCheckBoxes() self.updateLists() @@ -1441,7 +1441,7 @@ def _submitTypeANameAsPickAName(self): self.fsm.request('PickAName') flags = [pattern[0] != -1, pattern[1] != -1, pattern[2] != -1,] names = [] - for i in xrange(len(pattern)): + for i in range(len(pattern)): if pattern[i] != -1: names.append(pnp.getNamePartString( self.toon.style.gender, i, pattern[i])) diff --git a/toontown/src/makeatoon/ShuffleButton.py b/toontown/src/makeatoon/ShuffleButton.py index f047d4e6..3f6fa2ee 100644 --- a/toontown/src/makeatoon/ShuffleButton.py +++ b/toontown/src/makeatoon/ShuffleButton.py @@ -4,7 +4,7 @@ from direct.gui.DirectGui import * from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals -from MakeAToonGlobals import * +from .MakeAToonGlobals import * from direct.directnotify import DirectNotifyGlobal from direct.interval.IntervalGlobal import * import random diff --git a/toontown/src/makeatoon/TTPickANamePattern.py b/toontown/src/makeatoon/TTPickANamePattern.py index e692c233..52d4e830 100644 --- a/toontown/src/makeatoon/TTPickANamePattern.py +++ b/toontown/src/makeatoon/TTPickANamePattern.py @@ -15,7 +15,7 @@ def _getNameParts(self, gender): TTPickANamePattern.NameParts['f'] = ng.getFemaleNameParts() # make sure the dicts haven't been inverted - assert type(TTPickANamePattern.NameParts[gender][0].keys()[0]) is types.StringType + assert type(list(TTPickANamePattern.NameParts[gender][0].keys())[0]) is bytes return TTPickANamePattern.NameParts[gender] diff --git a/toontown/src/minigame/BuildMazeData.py b/toontown/src/minigame/BuildMazeData.py index 13210251..8a372ca9 100644 --- a/toontown/src/minigame/BuildMazeData.py +++ b/toontown/src/minigame/BuildMazeData.py @@ -207,9 +207,9 @@ def calcTreasurePosList(collisionTable, mazeWidth, mazeHeight, f, ['"""' + outputFile + ': GENERATED FILE, DO NOT EDIT"""', '', - 'CELL_WIDTH = ' + `CELL_WIDTH`, + 'CELL_WIDTH = ' + repr(CELL_WIDTH), '', - 'mazeNames = ' + `mazeNames`, + 'mazeNames = ' + repr(mazeNames), '', 'mazeData = {}' ]) @@ -218,12 +218,12 @@ def calcTreasurePosList(collisionTable, mazeWidth, mazeHeight, for mazeGroup in mazeNames: for mazeName in mazeGroup: if mazeName in processedMazes: - print mazeName + " already added" + print(mazeName + " already added") continue else: processedMazes.append(mazeName) - print "analyzing " + mazeName + "..." + print("analyzing " + mazeName + "...") maze = loader.loadModel(mazeName) maze.reparentTo(root) maze.setPos(0,0,0) @@ -242,22 +242,22 @@ def calcTreasurePosList(collisionTable, mazeWidth, mazeHeight, fwrite(f,'') fwrite(f,'mazeData["' + mazeName + '"] = {}') fwrite(f,'data = mazeData["' + mazeName + '"]') - fwrite(f,'data["width"] = ' + `mazeWidth`) - fwrite(f,'data["height"] = ' + `mazeHeight`) - fwrite(f,'data["originX"] = ' + `originX`) - fwrite(f,'data["originY"] = ' + `originY`) + fwrite(f,'data["width"] = ' + repr(mazeWidth)) + fwrite(f,'data["height"] = ' + repr(mazeHeight)) + fwrite(f,'data["originX"] = ' + repr(originX)) + fwrite(f,'data["originY"] = ' + repr(originY)) fwrite(f,'data["collisionTable"] = [') for y in range(mazeHeight): f.write(' [') for x in range(mazeWidth): - f.write(`collisionTable[y][x]` + ',') + f.write(repr(collisionTable[y][x]) + ',') f.write('],\n') f.write(' ]\n') fwrite(f,'data["treasurePosList"] = [') for pos in treasurePosList: - f.write(`pos` + ',\n') + f.write(repr(pos) + ',\n') f.write(' ]\n') f.close() diff --git a/toontown/src/minigame/CatchGameGlobals.py b/toontown/src/minigame/CatchGameGlobals.py index 1860715c..c7631b83 100644 --- a/toontown/src/minigame/CatchGameGlobals.py +++ b/toontown/src/minigame/CatchGameGlobals.py @@ -51,7 +51,7 @@ def isBaseline(self): # Name2DOTypeId['apple'] == some number # DOTypeId2Name[some number] == 'apple' Name2DOTypeId = {} -names = Name2DropObjectType.keys() +names = list(Name2DropObjectType.keys()) names.sort() for i in range(len(names)): Name2DOTypeId[names[i]] = i diff --git a/toontown/src/minigame/CatchGameToonSD.py b/toontown/src/minigame/CatchGameToonSD.py index adaa158e..03855b72 100644 --- a/toontown/src/minigame/CatchGameToonSD.py +++ b/toontown/src/minigame/CatchGameToonSD.py @@ -9,7 +9,7 @@ from direct.fsm import StateData from direct.fsm import ClassicFSM, State from direct.fsm import State -import CatchGameGlobals +from . import CatchGameGlobals from direct.task.Task import Task class CatchGameToonSD(StateData.StateData): diff --git a/toontown/src/minigame/ClerkPurchase.py b/toontown/src/minigame/ClerkPurchase.py index 72b03fba..a75dc1ae 100644 --- a/toontown/src/minigame/ClerkPurchase.py +++ b/toontown/src/minigame/ClerkPurchase.py @@ -1,4 +1,4 @@ -from PurchaseBase import * +from .PurchaseBase import * from toontown.toonbase import ToontownTimer COUNT_UP_RATE = 0.15 diff --git a/toontown/src/minigame/CogThief.py b/toontown/src/minigame/CogThief.py index 6e258c2e..c5258f51 100644 --- a/toontown/src/minigame/CogThief.py +++ b/toontown/src/minigame/CogThief.py @@ -284,7 +284,7 @@ def thinkAboutGettingBarrel(self): if not hasattr(self.game, 'barrels'): return - if not self.goalId in xrange(len(self.game.barrels)): + if not self.goalId in range(len(self.game.barrels)): return if not self.lastThinkTime: @@ -583,7 +583,7 @@ def seeFriends(self): self.clearVisibleList(); - for cogIndex in self.game.cogInfo.keys(): + for cogIndex in list(self.game.cogInfo.keys()): if cogIndex == self.cogIndex: continue diff --git a/toontown/src/minigame/DistributedCannonGame.py b/toontown/src/minigame/DistributedCannonGame.py index 2faffbc4..c6e6ff08 100644 --- a/toontown/src/minigame/DistributedCannonGame.py +++ b/toontown/src/minigame/DistributedCannonGame.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from direct.fsm import ClassicFSM, State @@ -10,12 +10,12 @@ from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownTimer from direct.task.Task import Task -import Trajectory +from . import Trajectory import math from toontown.toon import ToonHead from toontown.effects import Splash from toontown.effects import DustCloud -import CannonGameGlobals +from . import CannonGameGlobals from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer @@ -437,7 +437,7 @@ def unload(self): del self.rightButton # make sure the blink and lookaround tasks are cleaned up - for avId in self.toonHeadDict.keys(): + for avId in list(self.toonHeadDict.keys()): head = self.toonHeadDict[avId] head.stopBlink() head.stopLookAroundNow() @@ -449,11 +449,11 @@ def unload(self): av.nametag.removeNametag(head.tag) head.delete() del self.toonHeadDict - for model in self.toonModelDict.values(): + for model in list(self.toonModelDict.values()): model.removeNode() del self.toonModelDict del self.toonScaleDict - for interval in self.toonIntervalDict.values(): + for interval in list(self.toonIntervalDict.values()): interval.finish() del self.toonIntervalDict @@ -522,7 +522,7 @@ def offstage(self): for avId in self.avIdList: self.cannonDict[avId][0].reparentTo(hidden) # this dict may not have been filled in - if self.dropShadowDict.has_key(avId): + if avId in self.dropShadowDict: self.dropShadowDict[avId].reparentTo(hidden) av = self.getAvatar(avId) @@ -1206,7 +1206,7 @@ def __fireCannonTask(self, task): flightResults = self.__calcFlightResults(avId, launchTime) # pull all the results into the local namespace for key in flightResults: - exec "%s = flightResults['%s']" % (key, key) + exec("%s = flightResults['%s']" % (key, key)) self.notify.debug("start position: " + str(startPos)) self.notify.debug("start velocity: " + str(startVel)) diff --git a/toontown/src/minigame/DistributedCannonGameAI.py b/toontown/src/minigame/DistributedCannonGameAI.py index ad71e879..94bec905 100644 --- a/toontown/src/minigame/DistributedCannonGameAI.py +++ b/toontown/src/minigame/DistributedCannonGameAI.py @@ -1,10 +1,10 @@ -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task -import CannonGameGlobals +from . import CannonGameGlobals class DistributedCannonGameAI(DistributedMinigameAI): diff --git a/toontown/src/minigame/DistributedCatchGame.py b/toontown/src/minigame/DistributedCatchGame.py index 0482e509..258d2d81 100644 --- a/toontown/src/minigame/DistributedCatchGame.py +++ b/toontown/src/minigame/DistributedCatchGame.py @@ -2,36 +2,37 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.interval.IntervalGlobal import * -from OrthoWalk import * +from .OrthoWalk import * from direct.showbase.PythonUtil import Functor, bound, lineupPos, lerp from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import TTLocalizer -import CatchGameGlobals +from . import CatchGameGlobals from direct.task.Task import Task from toontown.toon import Toon from toontown.suit import Suit -import MinigameAvatarScorePanel +from . import MinigameAvatarScorePanel from toontown.toonbase import ToontownTimer from toontown.toonbase import ToontownGlobals -import CatchGameToonSD -import Trajectory +from . import CatchGameToonSD +from . import Trajectory import math from direct.distributed import DistributedSmoothNode from direct.showbase.RandomNumGen import RandomNumGen -import MinigameGlobals +from . import MinigameGlobals from toontown.toon import ToonDNA from toontown.suit import SuitDNA # explicitly bring some drop-object-type tables into the local scope -from CatchGameGlobals import DropObjectTypes -from CatchGameGlobals import Name2DropObjectType +from .CatchGameGlobals import DropObjectTypes +from .CatchGameGlobals import Name2DropObjectType # and bring in everything from DropPlacer -from DropPlacer import * -from DropScheduler import * +from .DropPlacer import * +from .DropScheduler import * +from functools import reduce class DistributedCatchGame(DistributedMinigame): @@ -137,7 +138,7 @@ def load(self): 'watermelon' : .6, 'pineapple' : .45, } - if modelScales.has_key(objType.name): + if objType.name in modelScales: model.setScale(modelScales[objType.name]) # adjust the model if necessary @@ -219,7 +220,7 @@ def unload(self): del self.__textGen - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): toonSD = self.toonSDs[avId] toonSD.unload() del self.toonSDs @@ -235,7 +236,7 @@ def unload(self): self.dropShadow.removeNode() del self.dropShadow - for model in self.dropObjModels.values(): + for model in list(self.dropObjModels.values()): model.removeNode() del self.dropObjModels @@ -406,8 +407,8 @@ def scaledDimensions(widthHeight,scale): 'anvil' : 1, } # normalize the probabilities to [0..1] - probSum = reduce(lambda x,y: x+y, typeProbs.values()) - for key in typeProbs.keys(): + probSum = reduce(lambda x,y: x+y, list(typeProbs.values())) + for key in list(typeProbs.keys()): typeProbs[key] = float(typeProbs[key]) / probSum scheduler = DropScheduler( @@ -532,7 +533,7 @@ def defineConstants(self): 'Please replace with the preceding table.' ) else: - print str + print(str) self.calcDifficultyConstants(self.getDifficulty(), @@ -659,8 +660,8 @@ def showDropGrid(self): """ debugging aid; show the drop grid """ self.hideDropGrid() self.dropMarkers = [] - print "dropRows: %s" % self.DropRows - print "dropCols: %s" % self.DropColumns + print("dropRows: %s" % self.DropRows) + print("dropCols: %s" % self.DropColumns) for row in range(self.DropRows): self.dropMarkers.append([]) rowList = self.dropMarkers[row] @@ -790,7 +791,7 @@ def offstage(self): # make sure the intro movie is finished self.introMovie.finish() - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): self.toonSDs[avId].exit() # it's always safe to call these @@ -918,7 +919,7 @@ def enterPlay(self): # Initialize the scoreboard self.scores = [0] * self.numPlayers spacing = .4 - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): avId = self.avIdList[i] avName = self.getAvatarName(avId) scorePanel = \ @@ -986,7 +987,7 @@ def exitPlay(self): suit.collNodePath.removeNode() # get rid of the drop intervals - for ival in self.dropIntervals.values(): + for ival in list(self.dropIntervals.values()): ival.finish() del self.dropIntervals # get rid of list of dropped-objs @@ -1021,7 +1022,7 @@ def showCatch(self, avId, objNum): objType = Name2DropObjectType[objName] if objType.good: # have we already shown this fruit being eaten? - if not self.droppedObjCaught.has_key(objNum): + if objNum not in self.droppedObjCaught: if isLocal: # TODO (maybe): move this to CatchGameToonSD, move sound # loads to ToonSD @@ -1067,7 +1068,7 @@ def finishDropInterval(self, objNum): """ this function ensures that the drop interval for object number 'objNum' has finished; if interval already finished, does nothing """ - if self.dropIntervals.has_key(objNum): + if objNum in self.dropIntervals: self.dropIntervals[objNum].finish() def scheduleDrops(self): @@ -1440,7 +1441,7 @@ def setup(self=self, startPos=startPos, stopPos=stopPos, def cleanup(self=self, data=data, lerpNP=lerpNP): # if there were no available suits when the ival started, # there's no suit to clean up - if data.has_key('suit'): + if 'suit' in data: suit = data['suit'] suit.reparentTo(hidden) # put the suit back in the available list diff --git a/toontown/src/minigame/DistributedCatchGameAI.py b/toontown/src/minigame/DistributedCatchGameAI.py index 9eeb7711..71bee9dc 100644 --- a/toontown/src/minigame/DistributedCatchGameAI.py +++ b/toontown/src/minigame/DistributedCatchGameAI.py @@ -1,11 +1,11 @@ """DistributedCatchGameAI module: contains the DistributedCatchGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from toontown.ai.ToonBarrier import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import CatchGameGlobals -import MinigameGlobals +from . import CatchGameGlobals +from . import MinigameGlobals class DistributedCatchGameAI(DistributedMinigameAI): diff --git a/toontown/src/minigame/DistributedCogThiefGame.py b/toontown/src/minigame/DistributedCogThiefGame.py index 0e6fd3c3..e64fa3e4 100644 --- a/toontown/src/minigame/DistributedCogThiefGame.py +++ b/toontown/src/minigame/DistributedCogThiefGame.py @@ -256,7 +256,7 @@ def unload(self): barrel.removeNode() del self.barrels - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): toonSD = self.toonSDs[avId] toonSD.unload() del self.toonSDs @@ -295,7 +295,7 @@ def onstage(self): self.stopGameWalk() # put the cogs on the board - for cogIndex in xrange(self.getNumCogs()): + for cogIndex in range(self.getNumCogs()): suit= self.cogInfo[cogIndex]['suit'].suit pos = self.cogInfo[cogIndex]['pos'] suit.reparentTo(self.gameBoard) @@ -307,7 +307,7 @@ def onstage(self): # create random num generators for each toon self.toonRNGs = [] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): self.toonRNGs.append(RandomNumGen.RandomNumGen(self.randomNumGen)) # create an instance of each sound so that they can be @@ -319,7 +319,7 @@ def onstage(self): "hitBySuit" : [None] * self.numPlayers, "falling" : [None] * self.numPlayers, } - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): self.sndTable["hitBySuit"][i] = base.loadSfx( "phase_4/audio/sfx/MG_Tag_C.mp3" #"phase_4/audio/sfx/MG_cannon_fire_alt.mp3" @@ -346,7 +346,7 @@ def offstage(self): for barrel in self.barrels: barrel.hide() - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): self.toonSDs[avId].exit() # reset the toons' LODs and show their dropshadows again @@ -547,7 +547,7 @@ def doCollisions(oldPos, newPos, self=self): def initCogInfo(self): """For each cog, initialize the info about him.""" - for cogIndex in xrange(self.getNumCogs()): + for cogIndex in range(self.getNumCogs()): self.cogInfo[cogIndex] = { 'pos' : Point3(CTGG.CogStartingPositions[cogIndex]), 'goal' : CTGG.NoGoal, @@ -562,7 +562,7 @@ def loadCogs(self): 'bc', # bean counter 'ms', # mover & shaker ] - for suitIndex in xrange(self.getNumCogs()): + for suitIndex in range(self.getNumCogs()): st = self.randomNumGen.choice(suitTypes) suit = CogThief.CogThief(suitIndex, st, self, self.getCogSpeed()) @@ -609,7 +609,7 @@ def hitBySuit(self, avId, timestamp, suitNum, x, y, z): return if self.gameIsEnding: return - self.notify.debug("avatar " + `avId` + " hit by a suit") + self.notify.debug("avatar " + repr(avId) + " hit by a suit") if avId != self.localAvId: self.showToonHitBySuit(avId, timestamp) self.makeSuitRespondToToonHit(timestamp, suitNum) @@ -632,7 +632,7 @@ def showToonHitBySuit(self, avId, timestamp): # put the toon under a new node assert (toon.getParent() == render) - parentNode = render.attachNewNode('mazeFlyToonParent-'+`avId`) + parentNode = render.attachNewNode('mazeFlyToonParent-'+repr(avId)) parentNode.setPos(toon.getPos()) toon.reparentTo(parentNode) toon.setPos(0,0,0) @@ -1032,7 +1032,7 @@ def throwingPie(self, avId, timestamp, heading, x, y, z): 'play', ]: self.notify.warning('ignoring msg: av %s hit by suit' % avId) return - self.notify.debug("avatar " + `avId` + " throwing pie") + self.notify.debug("avatar " + repr(avId) + " throwing pie") if avId != self.localAvId: pos = Point3(x,y,z) self.showToonThrowingPie(avId, timestamp, heading, pos) @@ -1178,7 +1178,7 @@ def pieHitSuit(self, avId, timestamp, suitNum, x, y, z): return if self.gameIsEnding: return - self.notify.debug("avatar " + `avId` + " hit by a suit") + self.notify.debug("avatar " + repr(avId) + " hit by a suit") if avId != self.localAvId: self.makeSuitRespondToPieHit(timestamp, suitNum) diff --git a/toontown/src/minigame/DistributedCogThiefGameAI.py b/toontown/src/minigame/DistributedCogThiefGameAI.py index 7b95f4cd..33b5bf1b 100644 --- a/toontown/src/minigame/DistributedCogThiefGameAI.py +++ b/toontown/src/minigame/DistributedCogThiefGameAI.py @@ -140,7 +140,7 @@ def exitCleanup(self): def initCogInfo(self): """For each cog, initialize the info about him.""" - for cogIndex in xrange(self.getNumCogs()): + for cogIndex in range(self.getNumCogs()): self.cogInfo[cogIndex] = { 'pos' : Point3(CogThiefGameGlobals.CogStartingPositions[cogIndex]), 'goal' : CTGG.NoGoal, @@ -150,7 +150,7 @@ def initCogInfo(self): def initBarrelInfo(self): """For each barrel, initialize the info about him.""" - for barrelIndex in xrange(CogThiefGameGlobals.NumBarrels): + for barrelIndex in range(CogThiefGameGlobals.NumBarrels): self.barrelInfo[barrelIndex] = { 'pos' : Point3(CogThiefGameGlobals.BarrelStartingPositions[barrelIndex]), 'carriedBy' : CTGG.BarrelOnGround, @@ -224,10 +224,10 @@ def startSuitGoals(self): #self.chaseToon(0, avId) #self.chaseBarrel(0, 0) delayTimes = [] - for cogIndex in xrange(self.getNumCogs()): + for cogIndex in range(self.getNumCogs()): delayTimes.append(cogIndex *1.0) random.shuffle(delayTimes) - for cogIndex in xrange(self.getNumCogs()): + for cogIndex in range(self.getNumCogs()): self.doMethodLater(delayTimes[cogIndex], self.chooseSuitGoal, self.uniqueName('choseSuitGoal-%d-' % cogIndex), extraArgs = [cogIndex]) @@ -357,7 +357,7 @@ def chooseReturnPos(self, cogIndex, cogPos): # for now choose the nearest one and run to it shortestDistance = 10000 shortestReturnIndex = -1 - for retIndex in xrange(len(CTGG.CogReturnPositions)): + for retIndex in range(len(CTGG.CogReturnPositions)): retPos = CTGG.CogReturnPositions[retIndex] distance = (cogPos - retPos).length() if distance < shortestDistance: @@ -462,7 +462,7 @@ def markBarrelStolen(self, clientStamp, barrelIndex): def getNumBarrelsStolen(self): """Return the number of stolen barrels.""" numStolen = 0 - for barrel in self.barrelInfo.values(): + for barrel in list(self.barrelInfo.values()): if barrel['stolen']: numStolen += 1 return numStolen diff --git a/toontown/src/minigame/DistributedDivingGame.py b/toontown/src/minigame/DistributedDivingGame.py index 3e4fd1c0..fe06d4d1 100644 --- a/toontown/src/minigame/DistributedDivingGame.py +++ b/toontown/src/minigame/DistributedDivingGame.py @@ -4,7 +4,7 @@ from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * from toontown.toonbase import ToontownTimer -from DistributedMinigame import * +from .DistributedMinigame import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM from direct.fsm import State @@ -12,20 +12,20 @@ from direct.actor import Actor from toontown.toon import LaffMeter from direct.distributed import DistributedSmoothNode -import ArrowKeys -import Ring -import RingTrack -import DivingGameGlobals +from . import ArrowKeys +from . import Ring +from . import RingTrack +from . import DivingGameGlobals #import DistributedShark -import RingGroup -import RingTrackGroups +from . import RingGroup +from . import RingTrackGroups import random -import DivingGameToonSD -import DivingFishSpawn -import DivingTreasure +from . import DivingGameToonSD +from . import DivingFishSpawn +from . import DivingTreasure import math -import TreasureScorePanel +from . import TreasureScorePanel from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -221,7 +221,7 @@ def unload(self): # remove our game ClassicFSM from the framework ClassicFSM self.removeChildGameFSM(self.gameFSM) - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): toonSD = self.toonSDs[avId] toonSD.unload() del self.toonSDs @@ -244,7 +244,7 @@ def fishCollision(self,collEntry): # send information on the spawning location and the id of the fish spawnerId = int(name[2]) spawnId = int(name[3:len(name)]) - if self.spawners[spawnerId].fishArray.has_key(spawnId): + if spawnId in self.spawners[spawnerId].fishArray: #print "fish collision() - fish" self.sendUpdate("handleFishCollision", [avId, spawnId, spawnerId, toonSD.status]) @@ -485,7 +485,7 @@ def offstage(self): # Restore normal non-predictive smoothing. DistributedSmoothNode.activateSmoothing(1, 0) - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): self.toonSDs[avId].exit() # Restore camera @@ -543,7 +543,7 @@ def offstage(self): del self.cSphereNodePath2 if hasattr(self, "remoteToonCollNPs"): - for np in self.remoteToonCollNPs.values(): + for np in list(self.remoteToonCollNPs.values()): np.removeNode() del self.remoteToonCollNPs @@ -1068,7 +1068,7 @@ def performFishCollision(self, avId, spawnId, spawnerId, timestamp): self.localLerp = Sequence(Func(toonSD.fsm.request,'freeze'), Wait(3.0), Func(toonSD.fsm.request,'normal')) self.localLerp.start(ts) - if self.spawners[spawnerId].fishArray.has_key(spawnId): + if spawnId in self.spawners[spawnerId].fishArray: fish = self.spawners[spawnerId].fishArray[spawnId] endX = self.spawners[spawnerId].position.getX() @@ -1148,7 +1148,7 @@ def fishRemove(self, code): spawnerId = int(code[0]) #print "FISH REMOVE TOO" - if self.spawners[spawnerId].fishArray.has_key(spawnId): + if spawnId in self.spawners[spawnerId].fishArray: fish = self.spawners[spawnerId].fishArray[spawnId] fish.specialLerp.finish() fish.moveLerp.finish() diff --git a/toontown/src/minigame/DistributedDivingGameAI.py b/toontown/src/minigame/DistributedDivingGameAI.py index 30c114e4..d7d5259d 100644 --- a/toontown/src/minigame/DistributedDivingGameAI.py +++ b/toontown/src/minigame/DistributedDivingGameAI.py @@ -1,13 +1,13 @@ """DistributedDivingGameAI module: contains the DistributedDivingGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToonBaseGlobal import * from direct.fsm import ClassicFSM from direct.fsm import State from direct.actor import Actor -import DivingGameGlobals +from . import DivingGameGlobals #import DistributedSharkAI import random import random @@ -171,7 +171,7 @@ def setGameReady(self): # reset scores - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreDict[avId] = 0 @@ -195,7 +195,7 @@ def setGameStart(self, timestamp): self.scoreTracking = {} - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreTracking[avId] = [0,0,0,0,0] #0fishhits, 1crabhits, 2treasure catches, 3treasure drops, 4treasure Recoveries # called from the client @@ -226,11 +226,11 @@ def treasureRecovered(self): self.scoreTracking[avId][4] += 1 # increment scores in AI - for someAvId in self.scoreDict.keys(): + for someAvId in list(self.scoreDict.keys()): if someAvId == avId:#reward to carrier self.scoreDict[avId] += 10 * (self.REWARDMOD * 0.25) - self.scoreDict[someAvId] += 10 * ((self.REWARDMOD * 0.75)/ float(len(self.scoreDict.keys()))) + self.scoreDict[someAvId] += 10 * ((self.REWARDMOD * 0.75)/ float(len(list(self.scoreDict.keys())))) self.sendUpdate("incrementScore", [avId, newSpot, timestamp]) @@ -253,7 +253,7 @@ def gameOver(self): DistributedMinigameAI.gameOver(self) trackingString = "MiniGame Stats : Diving Game" trackingString += ("\nDistrict:%s" % (self.getSafezoneId())) - for avId in self.scoreTracking.keys(): + for avId in list(self.scoreTracking.keys()): trackingString = trackingString + ("\navId:%s fishHits:%s crabHits:%s treasureCatches:%s treasureDrops:%s treasureRecoveries:%s Score: %s" % (avId, self.scoreTracking[avId][0],self.scoreTracking[avId][1],self.scoreTracking[avId][2],self.scoreTracking[avId][3],self.scoreTracking[avId][4], self.scoreDict[avId])) #print trackingString self.air.writeServerEvent("MiniGame Stats", None, trackingString) @@ -294,7 +294,7 @@ def timerExpired(self, task): #print "time to kick everyone out" # make sure players get at least 5 - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): if self.scoreDict[avId] < 5: self.scoreDict[avId] = 5 diff --git a/toontown/src/minigame/DistributedIceGame.py b/toontown/src/minigame/DistributedIceGame.py index 5fbc08eb..36882d41 100644 --- a/toontown/src/minigame/DistributedIceGame.py +++ b/toontown/src/minigame/DistributedIceGame.py @@ -232,7 +232,7 @@ def load(self): index += 1 #setup dummy tires - for index in xrange(len(self.avIdList), 4): + for index in range(len(self.avIdList), 4): self.setupTire(-index, index) self.setupForceArrow(-index) @@ -288,7 +288,7 @@ def load(self): self.penaltyGrabSound = loader.loadSfx("phase_4/audio/sfx/MG_cannon_fire_alt.mp3") self.tireSounds=[] - for tireIndex in xrange(4): + for tireIndex in range(4): tireHit = loader.loadSfx("phase_4/audio/sfx/Golf_Hit_Barrier_1.mp3") wallHit = loader.loadSfx("phase_4/audio/sfx/MG_maze_pickup.mp3") obstacleHit = loader.loadSfx("phase_4/audio/sfx/Golf_Hit_Barrier_2.mp3") @@ -312,7 +312,7 @@ def unload(self): self.gameBoard.removeNode() del self.gameBoard - for forceArrow in self.forceArrowDict.values(): + for forceArrow in list(self.forceArrowDict.values()): forceArrow.removeNode() del self.forceArrowDict @@ -392,7 +392,7 @@ def setGameReady(self): return # all of the remote toons have joined the game; # it's safe to show them now. - for index in xrange(self.numPlayers): + for index in range(self.numPlayers): avId = self.avIdList[index] # Find the actual avatar in the cr toon = self.getAvatar(avId) @@ -432,7 +432,7 @@ def setGameStart(self, timestamp): # Initialize the scoreboard self.scores = [0] * self.numPlayers spacing = .4 - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): avId = self.avIdList[i] avName = self.getAvatarName(avId) scorePanel = \ @@ -584,7 +584,7 @@ def enterMoveTires(self): body.setAngularVel(0,0,0) # make sure it's not spinning when it starts body.setLinearVel(0,0,0) # make sure it's not moving when it starts - for index in xrange(len(self.allTireInputs)): + for index in range(len(self.allTireInputs)): input = self.allTireInputs[index] avId = self.avIdList[index] body = self.getTireBody(avId) @@ -656,7 +656,7 @@ def compareDistance(x,y): self.scoreCircle.show() self.notify.debug('newScores = %s' % self.newScores) circleStartTime = 0 - for index in xrange(len(sortedByDistance)): + for index in range(len(sortedByDistance)): distance = sortedByDistance[index][1] avId = sortedByDistance[index][0] scorePanelIndex = self.avIdList.index(avId) @@ -729,7 +729,7 @@ def enterFinalResults(self): ((lX,tY),(rX,tY),(lX,bY),(rX,bY)), ) scorePanelLocs = scorePanelLocs[self.numPlayers - 1] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] lerpTrack.append(Parallel( @@ -837,7 +837,7 @@ def setupForceArrow(self, avId): def hideForceArrows(self): """Hide all the arrows.""" - for forceArrow in self.forceArrowDict.values(): + for forceArrow in list(self.forceArrowDict.values()): forceArrow.hide() def showForceArrows(self, realPlayersOnly = True): @@ -873,7 +873,7 @@ def stopDebugTask(self): def debugTask(self, task): """Do stuff we need to debug the game.""" - if self.canDrive and self.tireDict.has_key(localAvatar.doId): + if self.canDrive and localAvatar.doId in self.tireDict: dt = globalClock.getDt() forceMove = 25000 forceMoveDt = forceMove #* dt @@ -1117,17 +1117,17 @@ def setTireInputs(self, tireInputs): def enableAllTireBodies(self): """Enable all the tires.""" - for avId in self.tireDict.keys(): + for avId in list(self.tireDict.keys()): self.tireDict[avId]["tireBody"].enable() def disableAllTireBodies(self): """Enable all the tires.""" - for avId in self.tireDict.keys(): + for avId in list(self.tireDict.keys()): self.tireDict[avId]["tireBody"].disable() def areAllTiresDisabled(self): """Return true if they are all disabled.""" - for avId in self.tireDict.keys(): + for avId in list(self.tireDict.keys()): if self.tireDict[avId]["tireBody"].isEnabled(): return False return True @@ -1144,13 +1144,13 @@ def __moveTiresTask(self, task): def sendTirePositions(self): """Send the ending tire positions.""" tirePositions = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] tire = self.getTireBody(avId) pos = Point3(tire.getPosition()) tirePositions.append([pos[0], pos[1], pos[2]]) - for index in xrange(len(self.avIdList), 4): + for index in range(len(self.avIdList), 4): avId = -index tire = self.getTireBody(avId) pos = Point3(tire.getPosition()) @@ -1161,7 +1161,7 @@ def sendTirePositions(self): def setFinalPositions(self, finalPos): """Handle the AI dictating the tire positions.""" if not self.hasLocalToon: return - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] tire = self.getTireBody(avId) np = self.getTireNp(avId) @@ -1169,7 +1169,7 @@ def setFinalPositions(self, finalPos): tire.setPosition(pos[0], pos[1], pos[2]) np.setPos(pos[0], pos[1], pos[2]) - for index in xrange(len(self.avIdList), 4): + for index in range(len(self.avIdList), 4): avId = -index tire = self.getTireBody(avId) np = self.getTireNp(avId) @@ -1212,7 +1212,7 @@ def setNewState(self, state): def putAllTiresInStartingPositions(self): """Move all the tires to their starting positions.""" - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): avId = self.avIdList[index] np = self.tireDict[avId]['tireNodePath'] np.setPos(IceGameGlobals.StartingPositions[index]) @@ -1224,7 +1224,7 @@ def putAllTiresInStartingPositions(self): body.setQuaternion(quat) - for index in xrange(len(self.avIdList),4): + for index in range(len(self.avIdList),4): avId = -index np = self.tireDict[avId]['tireNodePath'] np.setPos(IceGameGlobals.StartingPositions[index]) diff --git a/toontown/src/minigame/DistributedIceGameAI.py b/toontown/src/minigame/DistributedIceGameAI.py index dff4067b..cd87c45a 100644 --- a/toontown/src/minigame/DistributedIceGameAI.py +++ b/toontown/src/minigame/DistributedIceGameAI.py @@ -249,11 +249,11 @@ def enterProcessEndingPositions(self): # TODO detect if someone is dead center averagePos = [Point3(0,0,0), Point3(0,0,0), Point3(0,0,0), Point3(0,0,0)] divisor = 0 - for avId in self.avatarEndingPositions.keys(): + for avId in list(self.avatarEndingPositions.keys()): divisor += 1 oneClientEndingPositions = self.avatarEndingPositions[avId] avIndex = self.avIdList.index(avId) - for index in xrange(len(oneClientEndingPositions)): + for index in range(len(oneClientEndingPositions)): pos = oneClientEndingPositions[index] averagePos[index] += Point3(pos[0], pos[1], pos[2]) self.notify.debug('index = %d averagePos = %s' % (index,averagePos)) @@ -316,7 +316,7 @@ def compareDistance(x,y): self.scoresAsList = [] totalPointsAdded = 0 - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): # since the center is at 0,0,0 just query the length pos = Point3(*self.finalEndingPositions[index]) pos.setZ(0) @@ -328,7 +328,7 @@ def compareDistance(x,y): self.notify.debug('length = %s points=%s avId=%d' % (length, points, avId)) avId = self.avIdList[index] bonusIndex = 0 - for sortIndex in xrange(len(sortedByDistance)): + for sortIndex in range(len(sortedByDistance)): if sortedByDistance[sortIndex][0] == avId: bonusIndex = sortIndex bonusIndex += 4 - len(self.avIdList) @@ -400,7 +400,7 @@ def __doneShowingScores(self, task): def waitClientsChoicesTimeout(self, task): self.notify.debug("waitClientsChoicesTimeout: did not hear from all clients") # Anybody who did not choose gets a 0 for their input - for avId in self.avatarChoices.keys(): + for avId in list(self.avatarChoices.keys()): if self.avatarChoices[avId] == (-1,0): self.avatarChoices[avId] = (0,0) @@ -447,7 +447,7 @@ def allAvatarsChosen(self): """ Returns true if all avatars playing have chosen their votes """ - for avId in self.avatarChoices.keys(): + for avId in list(self.avatarChoices.keys()): choice = self.avatarChoices[avId] if (choice[0] == -1) and not (self.stateDict[avId] == DistributedMinigameAI.EXITED): return False @@ -497,7 +497,7 @@ def claimTreasure(self, treasureNum): # we're getting strange AI crashes where a toon claims # a treasure, and the toon is not listed in the scoreDict avId = self.air.getAvatarIdFromSender() - if not self.scoreDict.has_key(avId): + if avId not in self.scoreDict: self.notify.warning( 'PROBLEM: avatar %s called claimTreasure(%s) ' 'but he is not in the scoreDict: %s. avIdList is: %s' % @@ -528,7 +528,7 @@ def claimPenalty(self, penaltyNum): # we're getting strange AI crashes where a toon claims # a penalty, and the toon is not listed in the scoreDict avId = self.air.getAvatarIdFromSender() - if not self.scoreDict.has_key(avId): + if avId not in self.scoreDict: self.notify.warning( 'PROBLEM: avatar %s called claimPenalty(%s) ' 'but he is not in the scoreDict: %s. avIdList is: %s' % @@ -554,7 +554,7 @@ def claimPenalty(self, penaltyNum): def checkScores(self): """Force everyone to have at least a score of at least 1.""" self.scoresAsList = [] - for index in xrange(len(self.avIdList)): + for index in range(len(self.avIdList)): # since the center is at 0,0,0 just query the length avId = self.avIdList[index] if self.scoreDict[avId] < 0: diff --git a/toontown/src/minigame/DistributedMazeGame.py b/toontown/src/minigame/DistributedMazeGame.py index 4a94f877..8583f9e4 100644 --- a/toontown/src/minigame/DistributedMazeGame.py +++ b/toontown/src/minigame/DistributedMazeGame.py @@ -3,24 +3,24 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from DistributedMinigame import * -from MazeSuit import * +from .DistributedMinigame import * +from .MazeSuit import * from direct.gui.DirectGui import * from pandac.PandaModules import * from direct.showbase.PythonUtil import * -from OrthoWalk import * +from .OrthoWalk import * from direct.showbase.PythonUtil import lerp from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownTimer -import MazeGameGlobals -import MazeData -import MazeTreasure -import Trajectory +from . import MazeGameGlobals +from . import MazeData +from . import MazeTreasure +from . import Trajectory from direct.showbase import RandomNumGen -import MinigameAvatarScorePanel -import MinigameGlobals +from . import MinigameAvatarScorePanel +from . import MinigameGlobals from direct.task.Task import Task class DistributedMazeGame(DistributedMinigame): @@ -154,7 +154,7 @@ def printPeriodTable(name, numSuitList, fasterSuits, # there must be an even number of suits assert not numSuits % 2 speeds = [] - for i in xrange(numSuits/2): + for i in range(numSuits/2): if fasterSuits: i += numSuits/2 t = i / float(numSuits-1) @@ -182,7 +182,7 @@ def calcUpdatePeriod(speed): return int((float(MazeGameGlobals.SUIT_TIC_FREQ) * \ float(MazeData.CELL_WIDTH)) / speed) - periods = map(calcUpdatePeriod, speeds) + periods = list(map(calcUpdatePeriod, speeds)) filler = "" if numSuits < 10: @@ -192,7 +192,7 @@ def calcUpdatePeriod(speed): ' '*4, ' '*8) str += '},\n' str += '%s}' % (' '*4) - print str + print(str) # these helper functions are used to distort the t time value. def rampIntoCurve(t): @@ -438,12 +438,12 @@ def onstage(self): # create random num generators for each toon self.toonRNGs = [] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): self.toonRNGs.append(RandomNumGen.RandomNumGen(self.randomNumGen)) # create the treasures self.treasures = [] - for i in xrange(self.maze.numTreasures): + for i in range(self.maze.numTreasures): self.treasures.append(MazeTreasure.MazeTreasure( self.treasureModel, self.maze.treasurePosList[i], i, self.doId)) @@ -460,7 +460,7 @@ def onstage(self): "hitBySuit" : [None] * self.numPlayers, "falling" : [None] * self.numPlayers, } - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): self.sndTable["hitBySuit"][i] = base.loadSfx( "phase_4/audio/sfx/MG_Tag_C.mp3" #"phase_4/audio/sfx/MG_cannon_fire_alt.mp3" @@ -470,7 +470,7 @@ def onstage(self): # load a few copies of the grab sound self.grabSounds = [] - for i in xrange(5): + for i in range(5): self.grabSounds.append(base.loadSfx( "phase_4/audio/sfx/MG_maze_pickup.mp3" )) @@ -509,7 +509,7 @@ def offstage(self): self.introTrack.finish() del self.introTrack - for avId in self.toonHitTracks.keys(): + for avId in list(self.toonHitTracks.keys()): track = self.toonHitTracks[avId] if track.isPlaying(): track.finish() @@ -624,7 +624,7 @@ def enterPlay(self): self.notify.debug("enterPlay") # Initialize the scoreboard - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): avId = self.avIdList[i] avName = self.getAvatarName(avId) scorePanel = \ @@ -749,7 +749,7 @@ def hitBySuit(self, avId, timestamp): 'play', 'showScores']: self.notify.warning('ignoring msg: av %s hit by suit' % avId) return - self.notify.debug("avatar " + `avId` + " hit by a suit") + self.notify.debug("avatar " + repr(avId) + " hit by a suit") if avId != self.localAvId: self.__showToonHitBySuit(avId, timestamp) @@ -771,7 +771,7 @@ def __showToonHitBySuit(self, avId, timestamp): # put the toon under a new node assert (toon.getParent() == render) - parentNode = render.attachNewNode('mazeFlyToonParent-'+`avId`) + parentNode = render.attachNewNode('mazeFlyToonParent-'+repr(avId)) parentNode.setPos(toon.getPos()) toon.reparentTo(parentNode) toon.setPos(0,0,0) @@ -845,7 +845,7 @@ def camTask(task, zenith=zenith, camera.lookAt(toon) return Task.cont - camTaskName = "mazeToonFlyCam-"+`avId` + camTaskName = "mazeToonFlyCam-"+repr(avId) taskMgr.add(camTask, camTaskName, priority=20) def cleanupCamTask(self=self, toon=toon, @@ -1111,11 +1111,11 @@ def __loadSuits(self): fasterPeriods = fasterTable[safeZone][self.numSuits] suitPeriods = slowerPeriods + fasterPeriods - self.notify.debug("suit periods: " + `suitPeriods`) + self.notify.debug("suit periods: " + repr(suitPeriods)) self.randomNumGen.shuffle(suitPeriods) - for i in xrange(self.numSuits): + for i in range(self.numSuits): self.suits.append(MazeSuit(i, self.maze, self.randomNumGen, suitPeriods[i], self.getDifficulty())) @@ -1152,9 +1152,9 @@ def __updateSuitsTask(self, task): suitUpdates = [] # aggregate a list of all the suit update times - for i in xrange(len(self.suits)): + for i in range(len(self.suits)): updateTics = self.suits[i].getThinkTimestampTics(curTic) - suitUpdates.extend(zip(updateTics, [i]*len(updateTics))) + suitUpdates.extend(list(zip(updateTics, [i]*len(updateTics)))) # sort the list in-place suitUpdates.sort(lambda a,b: a[0]-b[0]) @@ -1163,7 +1163,7 @@ def __updateSuitsTask(self, task): curTic = 0 # run through the sorted update list, and execute the updates - for i in xrange(len(suitUpdates)): + for i in range(len(suitUpdates)): update = suitUpdates[i] tic = update[0] suitIndex = update[1] @@ -1185,9 +1185,9 @@ def __updateSuitsTask(self, task): # make list of tiles where this suit may not walk # (because other suits are already there) unwalkables = [] - for si in xrange(suitIndex): + for si in range(suitIndex): unwalkables.extend(self.suits[si].occupiedTiles) - for si in xrange(suitIndex+1,len(self.suits)): + for si in range(suitIndex+1,len(self.suits)): unwalkables.extend(self.suits[si].occupiedTiles) # do the actual update @@ -1221,7 +1221,7 @@ def enterShowScores(self): ((lX,tY),(rX,tY),(lX,bY),(rX,bY)), ) scorePanelLocs = scorePanelLocs[self.numPlayers-1] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] lerpTrack.append(Parallel( diff --git a/toontown/src/minigame/DistributedMazeGameAI.py b/toontown/src/minigame/DistributedMazeGameAI.py index 18705195..7ef1edaa 100644 --- a/toontown/src/minigame/DistributedMazeGameAI.py +++ b/toontown/src/minigame/DistributedMazeGameAI.py @@ -1,12 +1,12 @@ """DistributedMazeGameAI module: contains the DistributedMazeGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import PatternGameGlobals +from . import PatternGameGlobals from direct.task.Task import Task -import MazeGameGlobals -import MazeData +from . import MazeGameGlobals +from . import MazeData class DistributedMazeGameAI(DistributedMinigameAI): def __init__(self, air, minigameId): @@ -70,7 +70,7 @@ def setGameReady(self): self.takenTable = [0] * self.numTreasures # reset scores - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreDict[avId] = 0 def setGameStart(self, timestamp): @@ -126,7 +126,7 @@ def claimTreasure(self, treasureNum): # we're getting strange AI crashes where a toon claims # a treasure, and the toon is not listed in the scoreDict avId = self.air.getAvatarIdFromSender() - if not self.scoreDict.has_key(avId): + if avId not in self.scoreDict: self.notify.warning( 'PROBLEM: avatar %s called claimTreasure(%s) ' 'but he is not in the scoreDict: %s. avIdList is: %s' % @@ -174,12 +174,12 @@ def __doneShowingScores(self, task): self.notify.debug("doneShowingScores") # tone down the scores, and make sure everyone has # at least one jellybean - for key in self.scoreDict.keys(): + for key in list(self.scoreDict.keys()): self.scoreDict[key] = max(1, self.scoreDict[key]/12) if self.numTreasuresTaken >= self.numTreasures: # increase everybody's score - for key in self.scoreDict.keys(): + for key in list(self.scoreDict.keys()): self.scoreDict[key] += 8 self.gameOver() diff --git a/toontown/src/minigame/DistributedMinigame.py b/toontown/src/minigame/DistributedMinigame.py index b72caa56..3ac8e148 100644 --- a/toontown/src/minigame/DistributedMinigame.py +++ b/toontown/src/minigame/DistributedMinigame.py @@ -9,13 +9,13 @@ from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State -import MinigameRulesPanel +from . import MinigameRulesPanel from direct.task.Task import Task from toontown.toon import Toon from direct.showbase import RandomNumGen from toontown.toonbase import TTLocalizer import random -import MinigameGlobals +from . import MinigameGlobals from direct.showbase import PythonUtil from toontown.toon import TTEmote from otp.avatar import Emote @@ -336,22 +336,22 @@ def calcMaxDuration(self=self): self.uniqueName('random-netplugpull')) def doRandomAbort(self, task): - print ("*** DOING RANDOM MINIGAME ABORT AFTER %.2f SECONDS ***" % - self.randomAbortDelay) + print(("*** DOING RANDOM MINIGAME ABORT AFTER %.2f SECONDS ***" % + self.randomAbortDelay)) self.d_requestExit() return Task.done def doRandomDisconnect(self, task): - print ("*** DOING RANDOM MINIGAME DISCONNECT AFTER %.2f SECONDS ***" % - self.randomDisconnectDelay) + print(("*** DOING RANDOM MINIGAME DISCONNECT AFTER %.2f SECONDS ***" % + self.randomDisconnectDelay)) # this is a message that clients cannot send; # get booted off the server intentionally self.sendUpdate('setGameReady') return Task.done def doRandomNetworkPlugPull(self, task): - print ('*** DOING RANDOM MINIGAME NETWORK-PLUG-PULL AFTER ' - '%.2f SECONDS ***' % self.randomNetPlugPullDelay) + print(('*** DOING RANDOM MINIGAME NETWORK-PLUG-PULL AFTER ' + '%.2f SECONDS ***' % self.randomNetPlugPullDelay)) base.cr.pullNetworkPlug() return Task.done @@ -455,7 +455,7 @@ def setGameReady(self): # assert that all of the remote toons are present for avId in self.remoteAvIdList: # make sure we have this avatar in our dictionary - if not self.cr.doId2do.has_key(avId): + if avId not in self.cr.doId2do: # well gollee, the toon is already gone! # end the minigame self.notify.warning("BASE: toon %s already left or has not " @@ -555,7 +555,7 @@ def getAvatar(self, avId): """ # If it is an avatar, look it up in the doid2do - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: return self.cr.doId2do[avId] # I do not know what this avId is else: diff --git a/toontown/src/minigame/DistributedMinigameAI.py b/toontown/src/minigame/DistributedMinigameAI.py index 0a24705c..6ea19058 100644 --- a/toontown/src/minigame/DistributedMinigameAI.py +++ b/toontown/src/minigame/DistributedMinigameAI.py @@ -6,12 +6,12 @@ from direct.fsm import State from toontown.shtiker import PurchaseManagerAI from toontown.shtiker import NewbiePurchaseManagerAI -import MinigameCreatorAI +from . import MinigameCreatorAI from direct.task import Task import random -import MinigameGlobals +from . import MinigameGlobals from direct.showbase import PythonUtil -import TravelGameGlobals +from . import TravelGameGlobals from toontown.toonbase import ToontownGlobals # Codes to indicate avatar state @@ -424,7 +424,7 @@ def handleTimeout(avIds, self=self): allAvatarsReady, handleTimeout) # some clients may already be ready - for avId in self.stateDict.keys(): + for avId in list(self.stateDict.keys()): if self.stateDict[avId] == READY: self.__barrier.clear(avId) @@ -510,7 +510,7 @@ def handleTimeout(avIds, self=self): allAvatarsExited, handleTimeout) # process any toons that have already exited - for avId in self.stateDict.keys(): + for avId in list(self.stateDict.keys()): if self.stateDict[avId] == EXITED: self.__barrier.clear(avId) @@ -602,7 +602,7 @@ def handleMetagamePurchaseManager(self,scoreList): votesArray = [] for avId in self.avIdList: - if votesToUse.has_key(avId): + if avId in votesToUse: votesArray.append(votesToUse[avId]) else: self.notify.warning('votesToUse=%s does not have avId=%d' % (votesToUse,avId)) @@ -780,7 +780,7 @@ def getStartingVotes(self): """ retval = [] for avId in self.avIdList: - if self.startingVotes.has_key(avId): + if avId in self.startingVotes: retval.append( self.startingVotes[avId]) else: self.notify.warning('how did this happen? avId=%d not in startingVotes %s' % diff --git a/toontown/src/minigame/DistributedMinigameTemplate.py b/toontown/src/minigame/DistributedMinigameTemplate.py index fd805066..3fe6c315 100644 --- a/toontown/src/minigame/DistributedMinigameTemplate.py +++ b/toontown/src/minigame/DistributedMinigameTemplate.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import TTLocalizer diff --git a/toontown/src/minigame/DistributedMinigameTemplateAI.py b/toontown/src/minigame/DistributedMinigameTemplateAI.py index c1e0b337..69760916 100644 --- a/toontown/src/minigame/DistributedMinigameTemplateAI.py +++ b/toontown/src/minigame/DistributedMinigameTemplateAI.py @@ -1,6 +1,6 @@ """DistributedMinigameTemplateAI module: contains the DistributedMinigameTemplateAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State diff --git a/toontown/src/minigame/DistributedPairingGame.py b/toontown/src/minigame/DistributedPairingGame.py index d81f3700..a72aa803 100644 --- a/toontown/src/minigame/DistributedPairingGame.py +++ b/toontown/src/minigame/DistributedPairingGame.py @@ -2,7 +2,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import TTLocalizer, ToontownTimer @@ -11,8 +11,8 @@ from toontown.minigame import PairingGameCard from toontown.minigame import PlayingCardDeck from toontown.minigame import PairingGameGlobals -from OrthoWalk import OrthoWalk -from OrthoDrive import OrthoDrive +from .OrthoWalk import OrthoWalk +from .OrthoDrive import OrthoDrive from direct.interval.IntervalGlobal import Sequence,Parallel,Func, LerpColorScaleInterval, LerpScaleInterval, LerpFunctionInterval, Wait, SoundInterval from toontown.toonbase.ToontownGlobals import GlobalDialogColor @@ -142,7 +142,7 @@ def load(self): self.cards = [] - for index in xrange(len(self.deck.cards)): + for index in range(len(self.deck.cards)): cardValue = self.deck.cards[index] oneCard = PairingGameCard.PairingGameCard(cardValue) oneCard.load() @@ -156,7 +156,7 @@ def load(self): oneCard.turnDown(doInterval = False) self.cards.append(oneCard) - self.bonusTraversal = range(len(self.cards)) + self.bonusTraversal = list(range(len(self.cards))) self.bonusGlow = render.attachNewNode('bonusGlow') @@ -325,7 +325,7 @@ def setGameReady(self): return # all of the remote toons have joined the game; # it's safe to show them now. - for index in xrange(self.numPlayers): + for index in range(self.numPlayers): avId = self.avIdList[index] # Find the actual avatar in the cr toon = self.getAvatar(avId) @@ -473,7 +473,7 @@ def __doPairingGameCollisions(self, oldPos, newPos): return newPos def getDeckOrderFromValue(self, value): - for index in xrange(len(self.cards)): + for index in range(len(self.cards)): if self.cards[index].value == value: return index return -1 @@ -765,10 +765,10 @@ def calcBonusTraversal(self): halfRow = self.cardsPerRow / 2 if self.cardsPerRow % 2: halfRow += 1 - for i in xrange( halfRow): - for j in xrange(2): + for i in range( halfRow): + for j in range(2): col = i + j*halfRow - for row in xrange(self.cardsPerCol): + for row in range(self.cardsPerCol): card = self.getDeckOrderIndex(row,col) if card > -1: self.bonusTraversal.append(card) diff --git a/toontown/src/minigame/DistributedPairingGameAI.py b/toontown/src/minigame/DistributedPairingGameAI.py index 6d543195..81be90f2 100644 --- a/toontown/src/minigame/DistributedPairingGameAI.py +++ b/toontown/src/minigame/DistributedPairingGameAI.py @@ -1,6 +1,6 @@ """DistributedMinigameTemplateAI module: contains the DistributedMinigameTemplateAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.minigame import PlayingCardGlobals @@ -89,7 +89,7 @@ def setGameReady(self): for avId in self.avIdList: self.faceUpDict[avId] = [] self.deck = PairingGameGlobals.createDeck(self.deckSeed, self.numPlayers) - for index in xrange(len(self.deck.cards)): + for index in range(len(self.deck.cards)): cardValue = self.deck.cards[index] oneCard = PlayingCardBase(cardValue) self.cards.append(oneCard) @@ -192,7 +192,7 @@ def getDeckSeed(self): def isCardFaceUp(self, deckOrderIndex): retval = False - for key in self.faceUpDict.keys(): + for key in list(self.faceUpDict.keys()): if deckOrderIndex in self.faceUpDict[key]: retval = True break @@ -203,7 +203,7 @@ def isCardFaceDown(self, deckOrderIndex): def checkForMatch(self): faceUpList = [] - for oneToonFaceUpList in self.faceUpDict.values(): + for oneToonFaceUpList in list(self.faceUpDict.values()): faceUpList += oneToonFaceUpList for i in range(len(faceUpList)): cardA = faceUpList[i] @@ -216,7 +216,7 @@ def checkForMatch(self): def handleMatch(self, cardA, cardB): self.notify.debug('we got a match %d %d' % (cardA, cardB)) - for key in self.faceUpDict.keys(): + for key in list(self.faceUpDict.keys()): if cardA in self.faceUpDict[key]: self.faceUpDict[key].remove(cardA) if cardB in self.faceUpDict[key]: @@ -227,7 +227,7 @@ def handleMatch(self, cardA, cardB): def turnDownCard(self, cardA): self.notify.debug('turning down card %d' % cardA) - for key in self.faceUpDict.keys(): + for key in list(self.faceUpDict.keys()): if cardA in self.faceUpDict[key]: self.faceUpDict[key].remove(cardA) diff --git a/toontown/src/minigame/DistributedPatternGame.py b/toontown/src/minigame/DistributedPatternGame.py index c264d843..9ec3c4a7 100644 --- a/toontown/src/minigame/DistributedPatternGame.py +++ b/toontown/src/minigame/DistributedPatternGame.py @@ -3,17 +3,17 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.gui.DirectGui import * from pandac.PandaModules import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import ToontownTimer -import PatternGameGlobals +from . import PatternGameGlobals from toontown.toon import ToonHead from toontown.char import CharDNA from toontown.char import Char -import ArrowKeys +from . import ArrowKeys import random from toontown.toonbase import ToontownGlobals import string @@ -270,7 +270,7 @@ def unload(self): # or other toons, they are popped out and put in arrowDict. # Therefore both self.arrows and self.arrowDict may have stuff in # them, so clean em! - for x in self.arrowDict.values(): + for x in list(self.arrowDict.values()): x[0].removeNode() x[1].removeNode() if len(x) == 3: @@ -1180,7 +1180,7 @@ def exitCheckGameOver(self): def enterCleanup(self): self.notify.debug("enterCleanup") - for track in self.animTracks.values(): + for track in list(self.animTracks.values()): if track and track.isPlaying(): track.pause() del self.animTracks diff --git a/toontown/src/minigame/DistributedPatternGameAI.py b/toontown/src/minigame/DistributedPatternGameAI.py index 60a16e52..db34b058 100644 --- a/toontown/src/minigame/DistributedPatternGameAI.py +++ b/toontown/src/minigame/DistributedPatternGameAI.py @@ -1,11 +1,11 @@ """DistributedPatternGameAI module: contains the DistributedPatternGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from toontown.ai.ToonBarrier import * from direct.fsm import ClassicFSM, State from direct.fsm import State import random -import PatternGameGlobals +from . import PatternGameGlobals import copy class DistributedPatternGameAI(DistributedMinigameAI): diff --git a/toontown/src/minigame/DistributedPhotoGame.py b/toontown/src/minigame/DistributedPhotoGame.py index 521b3161..db4a3412 100644 --- a/toontown/src/minigame/DistributedPhotoGame.py +++ b/toontown/src/minigame/DistributedPhotoGame.py @@ -2,7 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.distributed.ClockDelta import * from direct.interval.IntervalGlobal import * from direct.fsm import ClassicFSM, State @@ -12,7 +12,7 @@ from direct.task.Task import Task import math from toontown.toon import ToonHead -import PhotoGameGlobals +from . import PhotoGameGlobals from direct.gui.DirectGui import * from pandac.PandaModules import * from toontown.toonbase import TTLocalizer @@ -524,7 +524,7 @@ def __setupCollisions(self): for row in range(-(GOODROWS/2),(GOODROWS/2) + 1): for column in range(-(GOODROWS/2),(GOODROWS/2) + 1): - goodRange = range(-((GOODROWS-BADROWS)/2),((GOODROWS-BADROWS)/2) + 1) + goodRange = list(range(-((GOODROWS-BADROWS)/2),((GOODROWS-BADROWS)/2) + 1)) rayQuality = "g" if (not (row in goodRange)) or (not (column in goodRange)): rayQuality = "l" @@ -707,7 +707,7 @@ def __testCollisions(self): distance = Vec3(entry.getSurfacePoint(self.tripod)).lengthSquared() name = entry.getFromNode().getName() - if not distDict.has_key(name): + if name not in distDict: distDict[name] = distance hitDict[name] = (entry.getFromNode(), object, marker) elif distance < distDict[name]: @@ -738,7 +738,7 @@ def __testCollisions(self): quality = 1 onCenter = 1 - if not centerDict.has_key(superParent): + if superParent not in centerDict: centerDict[superParent] = (onCenter, overB, overT, overR, overL) else: centerDict[superParent] = (onCenter + centerDict[superParent][0], overB + centerDict[superParent][1], overT + centerDict[superParent][2], overR + centerDict[superParent][3], overL + centerDict[superParent][4]) @@ -1388,7 +1388,7 @@ def generateAssignmentPanels(self): def printAD(self): for assignment in self.assignmentDataDict: data = self.assignmentDataDict[assignment] - print("Key:%s\nData:%s\n" % (str(assignment), data)) + print(("Key:%s\nData:%s\n" % (str(assignment), data))) def updateScorePanel(self): diff --git a/toontown/src/minigame/DistributedPhotoGameAI.py b/toontown/src/minigame/DistributedPhotoGameAI.py index 8c1bf4fd..8372d0a3 100644 --- a/toontown/src/minigame/DistributedPhotoGameAI.py +++ b/toontown/src/minigame/DistributedPhotoGameAI.py @@ -1,10 +1,10 @@ -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task -import PhotoGameGlobals +from . import PhotoGameGlobals from toontown.minigame import PhotoGameBase import random diff --git a/toontown/src/minigame/DistributedRaceGame.py b/toontown/src/minigame/DistributedRaceGame.py index da4ce700..d8f58398 100644 --- a/toontown/src/minigame/DistributedRaceGame.py +++ b/toontown/src/minigame/DistributedRaceGame.py @@ -1,14 +1,14 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.distributed.ClockDelta import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.gui.DirectGui import * from pandac.PandaModules import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task.Task import Task from toontown.toonbase import ToontownTimer -import RaceGameGlobals +from . import RaceGameGlobals from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -389,7 +389,7 @@ def localToonWon(self): return 0 def anyAvatarWon(self): - for position in self.avatarPositions.values(): + for position in list(self.avatarPositions.values()): if position >= RaceGameGlobals.NumberToWin: # If any single avatar won, return true self.notify.debug("anyAvatarWon: Somebody won") @@ -641,10 +641,10 @@ def resetChanceCard(self, task): def moveCamera(self): # find the integer position of the avatar farthest ahead - bestPosIdx = self.avatarPositions.values()[0] + bestPosIdx = list(self.avatarPositions.values())[0] best_lane = 0 cur_lane = 0 - for pos in self.avatarPositions.values(): + for pos in list(self.avatarPositions.values()): if pos > bestPosIdx: bestPosIdx = pos best_lane = cur_lane diff --git a/toontown/src/minigame/DistributedRaceGameAI.py b/toontown/src/minigame/DistributedRaceGameAI.py index 358e5927..54d7510b 100644 --- a/toontown/src/minigame/DistributedRaceGameAI.py +++ b/toontown/src/minigame/DistributedRaceGameAI.py @@ -1,12 +1,12 @@ from math import * -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State import random from direct.task.Task import Task -import RaceGameGlobals +from . import RaceGameGlobals """ # Trolley manager code: @@ -102,7 +102,7 @@ def gameOver(self): DistributedMinigameAI.gameOver(self) def anyAvatarWon(self, positionDict): - for avId, position in positionDict.items(): + for avId, position in list(positionDict.items()): if position >= RaceGameGlobals.NumberToWin: # If any single avatar won, return true self.notify.debug("anyAvatarWon: Somebody won") @@ -113,7 +113,7 @@ def anyAvatarWon(self, positionDict): def allAvatarsChosen(self): # Returns true if all avatars playing have chosen their number - for choice in self.avatarChoices.values(): + for choice in list(self.avatarChoices.values()): # If the choice is -1, that avId has not chosen yet if (choice == -1): return 0 @@ -195,7 +195,7 @@ def waitClientsChoicesTimeout(self, task): self.notify.debug("waitClientsChoicesTimeout: did not hear from all clients") # Anybody who did not choose gets a 0 for their input - for avId in self.avatarChoices.keys(): + for avId in list(self.avatarChoices.keys()): if self.avatarChoices[avId] == -1: self.avatarChoices[avId] = 0 @@ -213,7 +213,7 @@ def enterProcessChoices(self): # start from the the left most lane and process move for avId in self.avIdList: choice = self.avatarChoices[avId] - freq = self.avatarChoices.values().count(choice) + freq = list(self.avatarChoices.values()).count(choice) self.processChoice(avId, choice, freq) # make this list once and just use copies @@ -358,7 +358,7 @@ def oldEnterProcessChoices(self, recurse = 0): reward = -1 if choice != 0: # See how many people chose this number - freq = self.avatarChoices.values().count(choice) + freq = list(self.avatarChoices.values()).count(choice) # If this is not a recursive call (ie the result # of a chance card) only update if the choice is unique diff --git a/toontown/src/minigame/DistributedRingGame.py b/toontown/src/minigame/DistributedRingGame.py index bacb7ed5..9975d2ef 100644 --- a/toontown/src/minigame/DistributedRingGame.py +++ b/toontown/src/minigame/DistributedRingGame.py @@ -3,19 +3,20 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task -import ArrowKeys -import Ring -import RingTrack -import RingGameGlobals -import RingGroup -import RingTrackGroups +from . import ArrowKeys +from . import Ring +from . import RingTrack +from . import RingGameGlobals +from . import RingGroup +from . import RingTrackGroups from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer +from functools import reduce class DistributedRingGame(DistributedMinigame): @@ -546,7 +547,7 @@ def __generateRings(self): } # make sure that the difficulty numbers add up correctly - for distr in difficultyDistributions.values(): + for distr in list(difficultyDistributions.values()): sum = reduce(lambda x,y: x+y, distr) assert sum == self.NumRingGroups @@ -600,7 +601,7 @@ def patternsAreValid(difficultyPatterns=difficultyPatterns, difficultyDistributions= difficultyDistributions): # for each safezone - for sz in difficultyPatterns.keys(): + for sz in list(difficultyPatterns.keys()): # for each pattern for pattern in difficultyPatterns[sz]: assert len(pattern) == self.NumRingGroups @@ -611,13 +612,13 @@ def patternsAreValid(difficultyPatterns=difficultyPatterns, numGroupsPerDifficulty = difficultyDistributions[sz] if numGroupsPerDifficulty[difficulty] != \ pattern.count(difficulty): - print 'safezone:', sz - print 'pattern:', pattern - print 'difficulty:', difficulty - print 'expected %s %ss, found %s' % ( + print('safezone:', sz) + print('pattern:', pattern) + print('difficulty:', difficulty) + print('expected %s %ss, found %s' % ( numGroupsPerDifficulty[difficulty], difficulty, - pattern.count(difficulty)) + pattern.count(difficulty))) return 0 return 1 assert patternsAreValid() @@ -750,7 +751,7 @@ def enterCleanup(self): # toon/toon collisions were set up in setGameReady if not self.isSinglePlayer(): # get rid of remote toon collisions - for np in self.remoteToonCollNPs.values(): + for np in list(self.remoteToonCollNPs.values()): np.removeNode() del self.remoteToonCollNPs diff --git a/toontown/src/minigame/DistributedRingGameAI.py b/toontown/src/minigame/DistributedRingGameAI.py index 8ed3be1f..d6cce545 100644 --- a/toontown/src/minigame/DistributedRingGameAI.py +++ b/toontown/src/minigame/DistributedRingGameAI.py @@ -1,10 +1,10 @@ """DistributedRingGameAI module: contains the DistributedRingGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import RingGameGlobals +from . import RingGameGlobals import random import types @@ -104,7 +104,7 @@ def selectColorIndices(self): for i in range(0, 4): c = random.choice(chooseFrom) chooseFrom.remove(c) - if isinstance(c, types.TupleType): + if isinstance(c, tuple): c = random.choice(c) self.colorIndices[i] = c diff --git a/toontown/src/minigame/DistributedTagGame.py b/toontown/src/minigame/DistributedTagGame.py index 4258de7a..50108946 100644 --- a/toontown/src/minigame/DistributedTagGame.py +++ b/toontown/src/minigame/DistributedTagGame.py @@ -1,21 +1,21 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.interval.IntervalGlobal import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.safezone import Walk from toontown.toonbase import ToontownTimer from direct.gui import OnscreenText -import MinigameAvatarScorePanel +from . import MinigameAvatarScorePanel from direct.distributed import DistributedSmoothNode import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from otp.otpbase import OTPGlobals -import TagGameGlobals -import Trajectory +from . import TagGameGlobals +from . import Trajectory class DistributedTagGame(DistributedMinigame): diff --git a/toontown/src/minigame/DistributedTagGameAI.py b/toontown/src/minigame/DistributedTagGameAI.py index 76cb15a0..d07541ee 100644 --- a/toontown/src/minigame/DistributedTagGameAI.py +++ b/toontown/src/minigame/DistributedTagGameAI.py @@ -1,11 +1,11 @@ -from DistributedMinigameAI import * -from TagTreasurePlannerAI import * +from .DistributedMinigameAI import * +from .TagTreasurePlannerAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task import random -import TagGameGlobals +from . import TagGameGlobals class DistributedTagGameAI(DistributedMinigameAI): diff --git a/toontown/src/minigame/DistributedTargetGame.py b/toontown/src/minigame/DistributedTargetGame.py index 6003583f..d090c7e1 100644 --- a/toontown/src/minigame/DistributedTargetGame.py +++ b/toontown/src/minigame/DistributedTargetGame.py @@ -3,21 +3,21 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task -import ArrowKeys -import TargetGameGlobals +from . import ArrowKeys +from . import TargetGameGlobals from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer import math from math import * import random import random -import RubberBand -import FogOverlay +from . import RubberBand +from . import FogOverlay def circleX(angle, radius, centerX, centerY): x = radius * cos(angle) + centerX @@ -644,7 +644,7 @@ def setTargetSeed(self, targetSeed, extra = None): if not self.hasLocalToon: return random.seed(targetSeed) self.pattern = TargetGameGlobals.difficultyPatterns[self.getSafezoneId()] - print ("seed %s" % (targetSeed)) + print(("seed %s" % (targetSeed))) self.setupTargets() def setupTargets(self): @@ -1417,7 +1417,7 @@ def enterCleanup(self): # toon/toon collisions were set up in setGameReady if not self.isSinglePlayer(): # get rid of remote toon collisions - for np in self.remoteToonCollNPs.values(): + for np in list(self.remoteToonCollNPs.values()): np.removeNode() del self.remoteToonCollNPs diff --git a/toontown/src/minigame/DistributedTargetGameAI.py b/toontown/src/minigame/DistributedTargetGameAI.py index 9650e9e0..12575e9e 100644 --- a/toontown/src/minigame/DistributedTargetGameAI.py +++ b/toontown/src/minigame/DistributedTargetGameAI.py @@ -1,10 +1,10 @@ """DistributedTargetGameAI module: contains the DistributedTargetGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.distributed.ClockDelta import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import TargetGameGlobals +from . import TargetGameGlobals import random import types @@ -137,7 +137,7 @@ def setGameStart(self, timestamp): self.notify.debug("setGameStart") # reset scores - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreDict[avId] = 0 # base class will cause gameFSM to enter initial state @@ -234,7 +234,7 @@ def getScoreList(self): scoreList = [0,0,0,0] avList = [0,0,0,0] scoreIndex = 0 - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): scoreList[scoreIndex] = self.scoreDict[avId] avList[scoreIndex] = avId scoreIndex += 1 @@ -289,7 +289,7 @@ def setPlayerDone(self, other = None): self.barrierScore.clear(avId) #self.b_setGameExit() # process any toons that have already exited - for avId in self.stateDict.keys(): + for avId in list(self.stateDict.keys()): if self.stateDict[avId] == EXITED: self.barrierScore.clear(avId) @@ -300,7 +300,7 @@ def gameOver(self): if self.scoreDict[entry] == 0: self.scoreDict[entry] = 1 self.scoreTrack.append(self.getScoreList()) - statMessage = ("MiniGame Stats : Target Game" + "\nScores" + ("%s" % self.scoreTrack) + "\nAvIds" + ("%s" % self.scoreDict.keys()) + "\nSafeZone" + ("%s" % self.getSafezoneId())) + statMessage = ("MiniGame Stats : Target Game" + "\nScores" + ("%s" % self.scoreTrack) + "\nAvIds" + ("%s" % list(self.scoreDict.keys())) + "\nSafeZone" + ("%s" % self.getSafezoneId())) self.air.writeServerEvent("MiniGame Stats", None, statMessage) diff --git a/toontown/src/minigame/DistributedTravelGame.py b/toontown/src/minigame/DistributedTravelGame.py index c17afa58..d03a2242 100644 --- a/toontown/src/minigame/DistributedTravelGame.py +++ b/toontown/src/minigame/DistributedTravelGame.py @@ -3,19 +3,19 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from toontown.toonbase.ToontownGlobals import GlobalDialogColor -from DistributedMinigame import * +from .DistributedMinigame import * from direct.fsm import ClassicFSM, State from direct.fsm import State from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownTimer -import TravelGameGlobals +from . import TravelGameGlobals import math from pandac.PandaModules import rad2Deg from toontown.toontowngui import TTDialog from direct.interval.IntervalGlobal import * -import VoteResultsPanel -import VoteResultsTrolleyPanel +from . import VoteResultsPanel +from . import VoteResultsTrolleyPanel # For each minigame, what's the corresponding icon IconDict = { @@ -101,9 +101,9 @@ def map3dToAspect2d(node, point): # invert a dictionary, turn the keys into values and vice versa def invertTable(table): index = { } #empty dictionary - for key in table.keys(): + for key in list(table.keys()): value = table[key] - if not index.has_key(value): + if value not in index: index[value] = key # empty list return index @@ -244,7 +244,7 @@ def load(self): for i in range(self.numKeys): key = self.keys[i] key.setTwoSided(1) - ref = self.trolleyCar.attachNewNode('key' + `i` + 'ref') + ref = self.trolleyCar.attachNewNode('key' + repr(i) + 'ref') ref.iPosHpr(key) self.keyRef.append(ref) self.keyInit.append(key.getTransform()) @@ -255,7 +255,7 @@ def load(self): self.frontWheelRef = [] for i in range(self.numFrontWheels): wheel = self.frontWheels[i] - ref = self.trolleyCar.attachNewNode('frontWheel' + `i` + 'ref') + ref = self.trolleyCar.attachNewNode('frontWheel' + repr(i) + 'ref') ref.iPosHpr(wheel) self.frontWheelRef.append(ref) self.frontWheelInit.append(wheel.getTransform()) @@ -266,7 +266,7 @@ def load(self): self.backWheelRef = [] for i in range(self.numBackWheels): wheel = self.backWheels[i] - ref = self.trolleyCar.attachNewNode('backWheel' + `i` + 'ref') + ref = self.trolleyCar.attachNewNode('backWheel' + repr(i) + 'ref') ref.iPosHpr(wheel) self.backWheelRef.append(ref) self.backWheelInit.append(wheel.getTransform()) @@ -285,7 +285,7 @@ def load(self): self.fullLength = maxPoint[0] - for key in TravelGameGlobals.BoardLayouts[self.boardIndex].keys(): + for key in list(TravelGameGlobals.BoardLayouts[self.boardIndex].keys()): info = TravelGameGlobals.BoardLayouts[self.boardIndex][key] switchModel = turnTable.find('**/turntable1').copyTo(render) @@ -315,7 +315,7 @@ def load(self): # lay more extra tracks for the trolley going out tunnelX = None - for key in TravelGameGlobals.BoardLayouts[self.boardIndex].keys(): + for key in list(TravelGameGlobals.BoardLayouts[self.boardIndex].keys()): if self.isLeaf(key): info = TravelGameGlobals.BoardLayouts[self.boardIndex][key] switchX, switchY, switchZ = info['pos'] @@ -545,17 +545,17 @@ def unload(self): self.trolleyCar.removeNode() del self.trolleyCar - for key in self.trainSwitches.keys(): + for key in list(self.trainSwitches.keys()): self.trainSwitches[key].removeNode() del self.trainSwitches[key] self.trainSwitches = {} - for key in self.tunnels.keys(): + for key in list(self.tunnels.keys()): self.tunnels[key].removeNode() del self.tunnels[key] self.tunnels = {} - for key in self.trainTracks.keys(): + for key in list(self.trainTracks.keys()): self.trainTracks[key].removeNode() del self.trainTracks[key] self.trainTracks = {} @@ -639,10 +639,10 @@ def onstage(self): self.trolleyCar.reparentTo(render) - for key in self.trainSwitches.keys(): + for key in list(self.trainSwitches.keys()): self.trainSwitches[key].reparentTo(render) - for key in self.trainTracks.keys(): + for key in list(self.trainTracks.keys()): self.trainTracks[key].reparentTo(render) for trainTrack in self.extraTrainTracks: @@ -679,10 +679,10 @@ def offstage(self): self.hideMinigamesAndBonuses() - for key in self.trainSwitches.keys(): + for key in list(self.trainSwitches.keys()): self.trainSwitches[key].hide() - for key in self.trainTracks.keys(): + for key in list(self.trainTracks.keys()): self.trainTracks[key].hide() for trainTrack in self.extraTrainTracks: @@ -1043,7 +1043,7 @@ def enterWinMovie(self): localAvatarWon = False localAvatarLost = False noWinner = True - for avId in self.avIdBonuses.keys(): + for avId in list(self.avIdBonuses.keys()): name = '' avatar = self.getAvatar(avId) if avatar: @@ -1135,7 +1135,7 @@ def setStartingVotes(self, startingVotesArray): for index in range(len( self.avIdList)): avId = self.avIdList[index] self.startingVotes[avId] = startingVotesArray[index] - if not self.currentVotes.has_key(avId): + if avId not in self.currentVotes: self.currentVotes[avId] = startingVotesArray[index] self.notify.debug('starting votes = %s' % self.startingVotes) @@ -1212,7 +1212,7 @@ def getAbsVoteChoice(self): retval = 0 if hasattr(self,'scrollList'): selectedIndex = self.scrollList.getSelectedIndex() - if self.indexToVotes.has_key(selectedIndex): + if selectedIndex in self.indexToVotes: retval = self.indexToVotes[selectedIndex] return retval @@ -1367,13 +1367,13 @@ def loadMinigameIcons(self): load an icon, if missing use a direct Label """ self.mg_icons = loader.loadModel('phase_4/models/minigames/mg_icons') - for switch in self.switchToMinigameDict.keys(): + for switch in list(self.switchToMinigameDict.keys()): minigame = self.switchToMinigameDict[switch] switchPos = self.trainSwitches[switch].getPos() labelPos = map3dToAspect2d(render, switchPos) useText = True iconName = None - if minigame in IconDict.keys(): + if minigame in list(IconDict.keys()): iconName = IconDict[minigame] icon = None if self.mg_icons: @@ -1433,7 +1433,7 @@ def hideMinigamesAndBonuses(self): def loadBonuses(self): self.switchToBonusLabelDict = {} - for avId in self.avIdBonuses.keys(): + for avId in list(self.avIdBonuses.keys()): # make sure we show only this local toon's bonus if avId == self.localAvId: switch = self.avIdBonuses[avId][0] diff --git a/toontown/src/minigame/DistributedTravelGameAI.py b/toontown/src/minigame/DistributedTravelGameAI.py index a919eba2..4062e730 100644 --- a/toontown/src/minigame/DistributedTravelGameAI.py +++ b/toontown/src/minigame/DistributedTravelGameAI.py @@ -3,7 +3,7 @@ from toontown.minigame.DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import TravelGameGlobals +from . import TravelGameGlobals from toontown.toonbase import ToontownGlobals class DistributedTravelGameAI(DistributedMinigameAI): @@ -59,7 +59,7 @@ def __init__(self, air, minigameId): self.gotBonus = {} self.desiredNextGame = -1 - self.boardIndex = random.choice(range(len(TravelGameGlobals.BoardLayouts))) + self.boardIndex = random.choice(list(range(len(TravelGameGlobals.BoardLayouts)))) def generate(self): @@ -233,7 +233,7 @@ def createDefaultStartingVotes(self): def waitClientsChoicesTimeout(self, task): self.notify.debug("waitClientsChoicesTimeout: did not hear from all clients") # Anybody who did not choose gets a 0 for their input - for avId in self.avatarChoices.keys(): + for avId in list(self.avatarChoices.keys()): if self.avatarChoices[avId] == (-1,0): self.avatarChoices[avId] = (0,0) @@ -297,7 +297,7 @@ def allAvatarsChosen(self): """ Returns true if all avatars playing have chosen their votes """ - for avId in self.avatarChoices.keys(): + for avId in list(self.avatarChoices.keys()): choice = self.avatarChoices[avId] if (choice[0] == -1) and not (self.stateDict[avId] == EXITED): return False @@ -320,7 +320,7 @@ def giveBonusBeans(self, endingSwitch): give the bonus beans if a toon reaches his goal """ noOneGotBonus = True - for avId in self.avIdBonuses.keys(): + for avId in list(self.avIdBonuses.keys()): self.scoreDict[avId] = 0 if self.avIdBonuses[avId][0] == endingSwitch and \ not self.stateDict[avId] == EXITED: @@ -330,7 +330,7 @@ def giveBonusBeans(self, endingSwitch): # if no one reached the secret goal, give everyone 1 bean if noOneGotBonus: - for avId in self.avIdBonuses.keys(): + for avId in list(self.avIdBonuses.keys()): self.scoreDict[avId] = 1 @@ -388,7 +388,7 @@ def calcMinigames(self): allowedGames = MinigameCreatorAI.removeUnreleasedMinigames(allowedGames) #allowedGames = [1,2,13,14,15,16] # uncomment to see the newest icons self.switchToMinigameDict = {} - for switch in TravelGameGlobals.BoardLayouts[self.boardIndex].keys(): + for switch in list(TravelGameGlobals.BoardLayouts[self.boardIndex].keys()): if self.isLeaf(switch): if len(allowedGames) == 0: #if we somehow don't have enough allowed games, just @@ -401,7 +401,7 @@ def calcMinigames(self): switches = [] minigames = [] - for key in self.switchToMinigameDict.keys(): + for key in list(self.switchToMinigameDict.keys()): switches.append( key) minigames.append( self.switchToMinigameDict[key]) @@ -412,7 +412,7 @@ def calcBonusBeans(self): figure out where the bonus beans go """ possibleLeaves = [] - for switch in TravelGameGlobals.BoardLayouts[self.boardIndex].keys(): + for switch in list(TravelGameGlobals.BoardLayouts[self.boardIndex].keys()): if self.isLeaf(switch): possibleLeaves.append(switch) @@ -457,7 +457,7 @@ def handleExitedAvatar(self, avId): allExited = True for avId in self.avIdList: - if avId in self.stateDict.keys() and self.stateDict[avId]!=EXITED: + if avId in list(self.stateDict.keys()) and self.stateDict[avId]!=EXITED: allExited =False break diff --git a/toontown/src/minigame/DistributedTugOfWarGame.py b/toontown/src/minigame/DistributedTugOfWarGame.py index 80ceca24..0cad9535 100644 --- a/toontown/src/minigame/DistributedTugOfWarGame.py +++ b/toontown/src/minigame/DistributedTugOfWarGame.py @@ -3,7 +3,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -from DistributedMinigame import * +from .DistributedMinigame import * from direct.gui.DirectGui import * from pandac.PandaModules import * from direct.fsm import ClassicFSM, State @@ -13,17 +13,17 @@ from toontown.suit import SuitDNA from toontown.suit import Suit from toontown.char import Char -import ArrowKeys +from . import ArrowKeys import random from toontown.toonbase import ToontownGlobals import string from toontown.toonbase import TTLocalizer -import TugOfWarGameGlobals +from . import TugOfWarGameGlobals from direct.showutil import Rope from toontown.effects import Splash from toontown.effects import Ripples from toontown.toonbase import TTLocalizer -import MinigamePowerMeter +from . import MinigamePowerMeter from direct.task.Task import Task class DistributedTugOfWarGame(DistributedMinigame): @@ -393,7 +393,7 @@ def offstage(self): del self.introTrack self.introTrack = None - for track in self.animTracks.values(): + for track in list(self.animTracks.values()): if track: track.finish() del track @@ -458,9 +458,9 @@ def offstage(self): for avId in self.avIdList: # this dict may not have been filled in - if self.dropShadowDict.has_key(avId): + if avId in self.dropShadowDict: self.dropShadowDict[avId].reparentTo(hidden) - if self.dropShadowDict.has_key(self.suitId): + if self.suitId in self.dropShadowDict: self.dropShadowDict[self.suitId].reparentTo(hidden) def initCamera(self): @@ -1214,7 +1214,7 @@ def sendStopSignal(self, winners, losers, tieers): exitSeq.append(Func(self.gameOver)) self.showTrack = Parallel(reactSeq, exitSeq) - for x in self.animTracks.values(): + for x in list(self.animTracks.values()): if x != None: x.finish() diff --git a/toontown/src/minigame/DistributedTugOfWarGameAI.py b/toontown/src/minigame/DistributedTugOfWarGameAI.py index d0d90a0e..cf6f0e01 100644 --- a/toontown/src/minigame/DistributedTugOfWarGameAI.py +++ b/toontown/src/minigame/DistributedTugOfWarGameAI.py @@ -1,12 +1,12 @@ """DistributedTugOfWarGameAI module: contains the DistributedTugOfWarGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State import random from direct.task.Task import Task import copy -import TugOfWarGameGlobals +from . import TugOfWarGameGlobals import math class DistributedTugOfWarGameAI(DistributedMinigameAI): @@ -284,7 +284,7 @@ def calculateOffsets(self): f = [0,0] # total up all the toon forces on each side for i in [0,1]: - for x in self.forceDict[i].values(): + for x in list(self.forceDict[i].values()): f[i] += x # since the cog is always on the right side (side=0) add that in if self.gameType == TugOfWarGameGlobals.TOON_VS_COG: @@ -323,7 +323,7 @@ def reportCurrentKeyRate(self, keyRate, force): if self.howManyReported == self.numPlayers: self.howManyReported = 0 self.calculateOffsets() - self.sendUpdate("sendCurrentPosition", [self.offsetDict.keys(), self.offsetDict.values()]) + self.sendUpdate("sendCurrentPosition", [list(self.offsetDict.keys()), list(self.offsetDict.values())]) if self.gameType == TugOfWarGameGlobals.TOON_VS_COG: self.sendUpdate("sendSuitPosition", [self.suitOffset]) diff --git a/toontown/src/minigame/DistributedTwoDGame.py b/toontown/src/minigame/DistributedTwoDGame.py index 3d995959..83d8bde4 100644 --- a/toontown/src/minigame/DistributedTwoDGame.py +++ b/toontown/src/minigame/DistributedTwoDGame.py @@ -28,12 +28,12 @@ from direct.task.Task import Task from direct.fsm import ClassicFSM, State from direct.directnotify import DirectNotifyGlobal -from DistributedMinigame import * -import MinigameAvatarScorePanel, ArrowKeys, ToonBlitzAssetMgr, TwoDCamera -import TwoDSectionMgr, ToonBlitzGlobals, TwoDGameToonSD +from .DistributedMinigame import * +from . import MinigameAvatarScorePanel, ArrowKeys, ToonBlitzAssetMgr, TwoDCamera +from . import TwoDSectionMgr, ToonBlitzGlobals, TwoDGameToonSD from toontown.toonbase import ToontownTimer -from TwoDWalk import * -from TwoDDrive import * +from .TwoDWalk import * +from .TwoDDrive import * COLOR_RED = VBase4(1, 0, 0, 0.3) @@ -151,7 +151,7 @@ def unload(self): taskMgr.remove(self.UpdateLocalToonTask) # unload resources and delete objects from load() here - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): toonSD = self.toonSDs[avId] toonSD.destroy() del self.toonSDs @@ -209,7 +209,7 @@ def offstage(self): # stop the minigame; parent things to hidden, stop the music... self.assetMgr.offstage() - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): self.toonSDs[avId].exit() base.localAvatar.setTransparency(0) @@ -275,7 +275,7 @@ def setGameStart(self, timestamp): # Initialize the scoreboard self.scores = [0] * self.numPlayers spacing = .4 - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): avId = self.avIdList[i] avName = self.getAvatarName(avId) scorePanel = \ @@ -376,7 +376,7 @@ def enterShowScores(self): ((lX,tY),(rX,tY),(lX,bY),(rX,bY)), ) scorePanelLocs = scorePanelLocs[self.numPlayers - 1] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] lerpTrack.append(Parallel( @@ -453,7 +453,7 @@ def __updateLocalToonTask(self, task): if (base.localAvatar.getZ() < -2.): self.localToonFellDown() - for avId in self.toonSDs.keys(): + for avId in list(self.toonSDs.keys()): self.toonSDs[avId].update() return task.cont diff --git a/toontown/src/minigame/DistributedTwoDGameAI.py b/toontown/src/minigame/DistributedTwoDGameAI.py index 0365fd37..d2729ce1 100644 --- a/toontown/src/minigame/DistributedTwoDGameAI.py +++ b/toontown/src/minigame/DistributedTwoDGameAI.py @@ -1,6 +1,6 @@ """DistributedTwoDGameAI module: contains the DistributedTwoDGameAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from toontown.ai.ToonBarrier import * from direct.fsm import ClassicFSM, State from direct.directnotify import DirectNotifyGlobal @@ -85,7 +85,7 @@ def setGameReady(self): self.numEnemiesKilled = 0 # Reset scores - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreDict[avId] = 0 self.finishedBonusDict[avId] = 0 self.finishedTimeLeftDict[avId] = -1 @@ -95,31 +95,31 @@ def setGameReady(self): self.treasuresCollectedDict[avId] = [0, 0, 0, 0] # [value1, value2, value3, value4] # Maintaining a table for enemy health and another table for treasure taken - for i in xrange(len(self.sectionsSelected)): + for i in range(len(self.sectionsSelected)): sectionIndex = self.sectionsSelected[i][0] attribs = ToonBlitzGlobals.SectionTypes[sectionIndex] enemiesPool = attribs[3] # Set up enemy health table self.enemyHealthTable += [[]] enemyIndicesSelected = self.sectionsSelected[i][1] - for j in xrange(len(enemyIndicesSelected)): + for j in range(len(enemyIndicesSelected)): # Maintaining this enemy's health in enemyHealthTable enemyIndex = enemyIndicesSelected[j] enemyType = enemiesPool[enemyIndex][0] self.enemyHealthTable[i] += [ToonBlitzGlobals.EnemyBaseHealth] self.enemyHealthTable[i][j] *= self.numPlayers - if ToonBlitzGlobals.EnemyHealthMultiplier.has_key(enemyType): + if enemyType in ToonBlitzGlobals.EnemyHealthMultiplier: self.enemyHealthTable[i][j] *= ToonBlitzGlobals.EnemyHealthMultiplier[enemyType] # Set up the treasure taken table self.treasureTakenTable += [[]] treasureIndicesSelected = self.sectionsSelected[i][2] - for j in xrange(len(treasureIndicesSelected)): + for j in range(len(treasureIndicesSelected)): # Maintaining this treasure's taken flag in treasureTakenTable self.treasureTakenTable[i] += [0] # Adding the enemy generated treasures to this list also. enemyIndicesSelected = self.sectionsSelected[i][1] - for j in xrange(len(enemyIndicesSelected)): + for j in range(len(enemyIndicesSelected)): self.treasureTakenTable[i] += [0] def setGameStart(self, timestamp): @@ -290,7 +290,7 @@ def reportDone(self): def toonVictory(self, avId, timestamp): """ Called when a remote toon reaches the end of tunnel. """ - if avId not in self.scoreDict.keys(): + if avId not in list(self.scoreDict.keys()): self.notify.warning('Avatar %s not in list.' %avId) self.air.writeServerEvent('suspicious: ', avId, 'TwoDGameAI.toonVictory toon not in list.') return @@ -318,7 +318,7 @@ def toonVictory(self, avId, timestamp): def toonFellDown(self, avId, timestamp): """ Called when a toon falls through a hole.""" - if avId not in self.scoreDict.keys(): + if avId not in list(self.scoreDict.keys()): self.notify.warning('Avatar %s not in list.' %avId) self.air.writeServerEvent('warning', avId, 'TwoDGameAI.toonFellDown toon not in list.') return @@ -330,7 +330,7 @@ def toonFellDown(self, avId, timestamp): def toonHitByEnemy(self, avId, timestamp): """ Called when a toon is hit by suit """ - if avId not in self.scoreDict.keys(): + if avId not in list(self.scoreDict.keys()): self.notify.warning('Avatar %s not in list.' %avId) self.air.writeServerEvent('warning', avId, 'TwoDGameAI.toonHitByEnemy toon not in list.') return @@ -342,7 +342,7 @@ def toonHitByEnemy(self, avId, timestamp): def toonSquished(self, avId, timestamp): """ Called when a toon is squished by a stomper.""" - if avId not in self.scoreDict.keys(): + if avId not in list(self.scoreDict.keys()): self.notify.warning('Avatar %s not in list.' %avId) self.air.writeServerEvent('warning', avId, 'TwoDGameAI.toonSquished toon not in list.') return @@ -369,7 +369,7 @@ def setupSections(self): difficultyPool += [difficulty] * probability # Now make a list of difficulty from the difficultyPool - for i in xrange(numSections): + for i in range(numSections): difficulty = random.choice(difficultyPool) difficultyList.append(difficulty) # Sort the difficultyList so that the more difficult sections appear at the end of the game @@ -404,12 +404,12 @@ def setupSections(self): self.notify.debug('We need more sections than we have choices. We have to now repeat.') # Fill up sectionIndicesSelected from sectionsSelectedByDifficulty to maintain 1 comprehensive list - for i in xrange(len(sectionsSelectedByDifficulty)): - for j in xrange(len(sectionsSelectedByDifficulty[i])): + for i in range(len(sectionsSelectedByDifficulty)): + for j in range(len(sectionsSelectedByDifficulty[i])): sectionIndicesSelected.append(sectionsSelectedByDifficulty[i][j]) # Now go through the sectionIndicesSelected and get their properties - for i in xrange(len(sectionIndicesSelected)): + for i in range(len(sectionIndicesSelected)): sectionIndex = sectionIndicesSelected[i] self.sectionIndexList.append(sectionIndex) attribs = sectionTypes[sectionIndex] @@ -426,11 +426,11 @@ def setupSections(self): enemyIndicesSelected = [] if (enemiesPool != None): minEnemies, maxEnemies = attribs[7] - for i in xrange(len(enemiesPool)): + for i in range(len(enemiesPool)): enemyIndicesPool += [i] numEnemies = maxEnemies * ToonBlitzGlobals.PercentMaxEnemies[szId] / 100 numEnemies = max(numEnemies, minEnemies) - for j in xrange(int(numEnemies)): + for j in range(int(numEnemies)): if (len(enemyIndicesPool) == 0): break enemyIndex = random.choice(enemyIndicesPool) @@ -448,11 +448,11 @@ def setupSections(self): treasureIndicesSelected = [] if (treasuresPool != None): minTreasures, maxTreasures = attribs[8] - for i in xrange(len(treasuresPool)): + for i in range(len(treasuresPool)): treasureIndicesPool += [i] numTreasures = maxTreasures * ToonBlitzGlobals.PercentMaxTreasures[szId] / 100 numTreasures = max(numTreasures, minTreasures) - for i in xrange(int(numTreasures)): + for i in range(int(numTreasures)): if (len(treasureIndicesPool) == 0): break treasureIndex = random.choice(treasureIndicesPool) @@ -468,11 +468,11 @@ def setupSections(self): spawnPointIndicesSelected = [] if (spawnPointsPool != None): minSpawnPoints, maxSpawnPoints = attribs[9] - for i in xrange(len(spawnPointsPool)): + for i in range(len(spawnPointsPool)): spawnPointIndicesPool += [i] numSpawnPoints = maxSpawnPoints * ToonBlitzGlobals.PercentMaxSpawnPoints[szId] / 100 numSpawnPoints = max(numSpawnPoints, minSpawnPoints) - for i in xrange(int(numSpawnPoints)): + for i in range(int(numSpawnPoints)): if (len(spawnPointIndicesPool) == 0): break spawnPoint = random.choice(spawnPointIndicesPool) @@ -486,11 +486,11 @@ def setupSections(self): stomperIndicesSelected = [] if (stompersPool != None): minStompers, maxStompers = attribs[10] - for i in xrange(len(stompersPool)): + for i in range(len(stompersPool)): stomperIndicesPool += [i] numStompers = maxStompers * ToonBlitzGlobals.PercentMaxStompers[szId] / 100 numStompers = max(numStompers, minStompers) - for i in xrange(int(numStompers)): + for i in range(int(numStompers)): if (len(stomperIndicesPool) == 0): break stomper = random.choice(stomperIndicesPool) diff --git a/toontown/src/minigame/DistributedVineGame.py b/toontown/src/minigame/DistributedVineGame.py index e6637094..77b7db70 100644 --- a/toontown/src/minigame/DistributedVineGame.py +++ b/toontown/src/minigame/DistributedVineGame.py @@ -150,7 +150,7 @@ def __init__(self, cr): def getClimbDir(self, avId): """Get the last know climb direction of this toon.""" retval = 0 - if self.toonInfo.has_key(avId): + if avId in self.toonInfo: retval = self.toonInfo[avId][5] return retval @@ -298,7 +298,7 @@ def onstage(self): # create the treasures self.numTreasures = len(self.vines) - 1 self.treasures = [] - for i in xrange(self.numTreasures): + for i in range(self.numTreasures): height = self.randomNumGen.randrange( 10, 25) xPos = self.randomNumGen.randrange( 12, 18) #pos = Point3( 5, 0, 20) @@ -473,7 +473,7 @@ def updateToonInfo( self, avId, vineIndex = None, vineT =None, posX = None, posZ newVelZ = velZ newFallingInfo = fallingInfo oldInfo = None - if self.toonInfo.has_key(avId): + if avId in self.toonInfo: oldInfo = self.toonInfo[avId] if vineIndex == None: newVineIndex = oldInfo[0] @@ -594,11 +594,11 @@ def sanityCheck(self): if not self.isInPlayState(): return - for avId in self.toonInfo.keys(): + for avId in list(self.toonInfo.keys()): myVineIndex = self.toonInfo[avId][0] foundVines = [] foundVineIndex = -1 - for curVine in xrange(len(self.vines)): + for curVine in range(len(self.vines)): curInfo = self.vines[curVine].getAttachedToonInfo(avId) if curInfo: foundVines.append(curVine) @@ -615,7 +615,7 @@ def getVineAndVineInfo(self, avId): """ retVine = -1 retInfo = None - for curVine in xrange(len(self.vines)): + for curVine in range(len(self.vines)): curInfo = self.vines[curVine].getAttachedToonInfo(avId) if curInfo: retVine = curVine @@ -639,7 +639,7 @@ def setGameReady(self): self.toonOffsetsFalling = {} # all of the remote toons have joined the game; # it's safe to show them now. - for index in xrange(self.numPlayers): + for index in range(self.numPlayers): avId = self.avIdList[index] # Find the actual avatar in the cr toon = self.getAvatar(avId) @@ -701,7 +701,7 @@ def enterPlay(self): # Initialize the scoreboard self.scores = [0] * self.numPlayers spacing = .4 - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): avId = self.avIdList[i] avName = self.getAvatarName(avId) scorePanel = \ @@ -784,7 +784,7 @@ def enterShowScores(self): ((lX,tY),(rX,tY),(lX,bY),(rX,bY)), ) scorePanelLocs = scorePanelLocs[self.numPlayers - 1] - for i in xrange(self.numPlayers): + for i in range(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] lerpTrack.append(Parallel( @@ -899,7 +899,7 @@ def makeCameraFollowJumpingToon(self): camera.setX(minX) def __updateOtherToonsClimbing(self): - for avId in self.toonInfo.keys(): + for avId in list(self.toonInfo.keys()): if avId == self.localAvId: continue toonInfo = self.toonInfo[avId] @@ -950,12 +950,12 @@ def __updateLocalToonTask(self, task): avId = self.localAvId curInfo = None - for vineIndex in xrange(len(self.vines)): + for vineIndex in range(len(self.vines)): curInfo = self.vines[vineIndex].getAttachedToonInfo(avId) if curInfo: break if not curInfo: - if not self.endingTracks.has_key(avId): + if avId not in self.endingTracks: # local toon is falling self.makeCameraFollowJumpingToon() #pos = base.localAvatar.getPos(render) @@ -1241,7 +1241,7 @@ def swingVineEnter(self, entry): def makeOtherToonJump( self, avId, posX, posZ, velX, velZ): # assert self.notify.debugStateCall(self) - if not self.otherToonPhysics.has_key(avId): + if avId not in self.otherToonPhysics: an = ActorNode('other-physics%s' % avId) anp = render.attachNewNode(an) base.physicsMgr.attachPhysicalNode(an) @@ -1264,7 +1264,7 @@ def makeOtherToonJump( self, avId, posX, posZ, velX, velZ): def makeOtherToonFallFromMidair( self, avId, posX, posZ, velX, velZ): # assert self.notify.debugStateCall(self) - if not self.otherToonPhysics.has_key(avId): + if avId not in self.otherToonPhysics: an = ActorNode('other-physics%s' % avId) anp = render.attachNewNode(an) base.physicsMgr.attachPhysicalNode(an) @@ -1394,7 +1394,7 @@ def rightArrowKeyHandler(self): #self.notify.debug('rightArrowKeyHandler') curInfo = None - for vineIndex in xrange(len(self.vines)): + for vineIndex in range(len(self.vines)): curInfo = self.vines[vineIndex].getAttachedToonInfo(base.localAvatar.doId) if curInfo: break @@ -1421,7 +1421,7 @@ def rightArrowKeyHandler(self): def leftArrowKeyHandler(self): #self.notify.debug('leftArrowKeyHandler') curInfo = None - for vineIndex in xrange(len(self.vines)): + for vineIndex in range(len(self.vines)): curInfo = self.vines[vineIndex].getAttachedToonInfo(base.localAvatar.doId) if curInfo: break @@ -1835,7 +1835,7 @@ def loadBats(self): def createBatIvals(self): """Create all the bat intervals.""" self.batIvals = [] - for batIndex in xrange(len(self.bats)): + for batIndex in range(len(self.bats)): newBatIval = self.createBatIval(batIndex) self.batIvals.append(newBatIval) @@ -1897,7 +1897,7 @@ def getIntroTrack(self): retval = Sequence() toonTakeoffs = Parallel() didCameraMove = False - for index in xrange(len( self.avIdList)): + for index in range(len( self.avIdList)): avId = self.avIdList[index] # we are not guaranteed that the other toons are generated at this point # thinking if we should do it only on the local toon or on all @@ -2015,7 +2015,7 @@ def getIntroTrack(self): def doEndingTrackTask(self, avId): """Call setupEndingTrack after a certain amount of time.""" taskName = 'VineGameEnding-%s' % avId - if not self.endingTracks.has_key(avId): + if avId not in self.endingTracks: taskMgr.doMethodLater( 0.5, self.setupEndingTrack, taskName, extraArgs = (avId,) ) self.endingTrackTaskNames.append(taskName) @@ -2025,7 +2025,7 @@ def debugCameraPos(self): def setupEndingTrack(self, avId): """Create and play the ending sequence where he jumps to the end platform.""" - if self.endingTracks.has_key(avId): + if avId in self.endingTracks: self.notify.warning('setupEndingTrack duplicate call avId=%d' % avId) return # make sure we still have vines @@ -2067,7 +2067,7 @@ def cleanupEndingTracks(self): """Cleanup ending tracks and related tasks.""" for taskName in self.endingTrackTaskNames: taskMgr.remove(taskName) - for endingTrack in self.endingTracks.values(): + for endingTrack in list(self.endingTracks.values()): endingTrack.finish del endingTrack self.endingTracks = {} diff --git a/toontown/src/minigame/DistributedVineGameAI.py b/toontown/src/minigame/DistributedVineGameAI.py index 270aec44..feba2541 100644 --- a/toontown/src/minigame/DistributedVineGameAI.py +++ b/toontown/src/minigame/DistributedVineGameAI.py @@ -1,9 +1,9 @@ """DistributedMinigameTemplateAI module: contains the DistributedMinigameTemplateAI class""" -from DistributedMinigameAI import * +from .DistributedMinigameAI import * from direct.fsm import ClassicFSM, State from direct.fsm import State -import VineGameGlobals +from . import VineGameGlobals class DistributedVineGameAI(DistributedMinigameAI): @@ -87,7 +87,7 @@ def setGameReady(self): self.takenTable = [0] * self.numTreasures # reset scores - for avId in self.scoreDict.keys(): + for avId in list(self.scoreDict.keys()): self.scoreDict[avId] = 0 self.finishedBonus[avId] = 0 self.finishedTimeLeft[avId] = -1 @@ -178,7 +178,7 @@ def claimTreasure(self, treasureNum): # we're getting strange AI crashes where a toon claims # a treasure, and the toon is not listed in the scoreDict avId = self.air.getAvatarIdFromSender() - if not self.scoreDict.has_key(avId): + if avId not in self.scoreDict: self.notify.warning( 'PROBLEM: avatar %s called claimTreasure(%s) ' 'but he is not in the scoreDict: %s. avIdList is: %s' % @@ -272,7 +272,7 @@ def checkForEndVine( self, avId): self.notify.debug('curTime =%s timeLeft = %s' % (curTime, timeLeft)) # we're getting strange AI crashes where a toon claims # a treasure, and the toon is not listed in the scoreDict - if not self.scoreDict.has_key(avId): + if avId not in self.scoreDict: self.notify.warning( 'PROBLEM: avatar %s called claimTreasure(%s) ' 'but he is not in the scoreDict: %s. avIdList is: %s' % @@ -302,7 +302,7 @@ def updateToonInfo( self, avId, vineIndex = None, vineT =None, posX = None, posZ newVelX = velX newVelZ = velZ oldInfo = None - if self.toonInfo.has_key(avId): + if avId in self.toonInfo: oldInfo = self.toonInfo[avId] if vineIndex == None: newVineIndex = oldInfo[0] @@ -395,7 +395,7 @@ def awardPartialBeans(self): vineIndex = self.toonInfo[avId][0] if not vineIndex == VineGameGlobals.NumVines -1: partialBeans = int( vineIndex / 5.0) - if self.scoreDict.has_key(avId): + if avId in self.scoreDict: self.scoreDict[avId] += partialBeans self.sendUpdate("setScore", [avId, self.scoreDict[avId]]) diff --git a/toontown/src/minigame/DivingFishSpawn.py b/toontown/src/minigame/DivingFishSpawn.py index e5367ef8..0ec8819c 100644 --- a/toontown/src/minigame/DivingFishSpawn.py +++ b/toontown/src/minigame/DivingFishSpawn.py @@ -6,7 +6,7 @@ from direct.interval.IntervalGlobal import * from direct.actor import Actor import random -import DivingGameGlobals +from . import DivingGameGlobals # fish spawn have information on direction of the fish that spawn, their position class DivingFishSpawn(DirectObject): @@ -144,7 +144,7 @@ def createFish(self, fishcode): def destroy(self): self.ignoreAll() - for fish in self.fishArray.values(): + for fish in list(self.fishArray.values()): fish.moveLerp.pause() fish.specialLerp.finish() if hasattr(fish, "sound"): diff --git a/toontown/src/minigame/DivingGameToonSD.py b/toontown/src/minigame/DivingGameToonSD.py index 0c1d1481..d9332ea8 100644 --- a/toontown/src/minigame/DivingGameToonSD.py +++ b/toontown/src/minigame/DivingGameToonSD.py @@ -8,7 +8,7 @@ from direct.fsm import StateData from direct.fsm import ClassicFSM from direct.fsm import State -import CatchGameGlobals +from . import CatchGameGlobals class DivingGameToonSD(StateData.StateData): """ DivingGameToonSD catching game char anim statedata """ diff --git a/toontown/src/minigame/DivingTreasure.py b/toontown/src/minigame/DivingTreasure.py index ec197523..0067dda0 100644 --- a/toontown/src/minigame/DivingTreasure.py +++ b/toontown/src/minigame/DivingTreasure.py @@ -4,7 +4,7 @@ from toontown.toonbase.ToontownGlobals import * from direct.directnotify import DirectNotifyGlobal from direct.interval.IntervalGlobal import * -import DivingGameGlobals +from . import DivingGameGlobals # a treasure that has some information on who grabbed it # and a moveLerp diff --git a/toontown/src/minigame/DropPlacer.py b/toontown/src/minigame/DropPlacer.py index e3748eb7..6c7dc152 100644 --- a/toontown/src/minigame/DropPlacer.py +++ b/toontown/src/minigame/DropPlacer.py @@ -1,8 +1,8 @@ """DropPlacer module: contains the DropPlacer base class and derived drop placer classes""" from direct.showbase.RandomNumGen import RandomNumGen -import CatchGameGlobals -import DropScheduler +from . import CatchGameGlobals +from . import DropScheduler from toontown.parties.PartyGlobals import CatchActivityDuration as PartyCatchDuration # in order to cleanly support different drop 'behaviors', we @@ -89,8 +89,7 @@ def getNextDrop(self): dropTypeName is the name of the type of object to drop gridColumn and gridRow are grid coordinates, zero-based """ - raise RuntimeError, \ - 'DropPlacer.getNextDrop should never be called' + raise RuntimeError('DropPlacer.getNextDrop should never be called') class RandomDropPlacer(DropPlacer): """ @@ -258,12 +257,12 @@ def __init__(self, game, dropTypes, startTime=None): rowList = self.DropRegionTable[row] for column in range(len(rowList)): region = rowList[column] - if not self.DropRegion2GridCoordList.has_key(region): + if region not in self.DropRegion2GridCoordList: self.DropRegion2GridCoordList[region] = [] self.DropRegion2GridCoordList[region].append( [row,column]) # and create a sorted list of drop regions - self.DropRegions = self.DropRegion2GridCoordList.keys() + self.DropRegions = list(self.DropRegion2GridCoordList.keys()) self.DropRegions.sort() # keep track of which drop regions have an object in them @@ -357,7 +356,7 @@ def __init__(self, game, dropTypes, startTime=None): # be careful to create N *unique* descriptors, not N # references to a single descriptor self.paths = [] - for i in xrange(self.game.getNumPlayers()): + for i in range(self.game.getNumPlayers()): # create a new path descriptor and add it to the list dir = self.rng.randrange(0,len(self.moves)) col,row = self.getRandomColRow() diff --git a/toontown/src/minigame/Maze.py b/toontown/src/minigame/Maze.py index ef99fdc7..5bae0d04 100644 --- a/toontown/src/minigame/Maze.py +++ b/toontown/src/minigame/Maze.py @@ -3,7 +3,7 @@ from toontown.toonbase.ToonBaseGlobal import * -import MazeData +from . import MazeData # world space: # diff --git a/toontown/src/minigame/MazeSuit.py b/toontown/src/minigame/MazeSuit.py index 7bfa7fff..bbb915ff 100644 --- a/toontown/src/minigame/MazeSuit.py +++ b/toontown/src/minigame/MazeSuit.py @@ -4,9 +4,9 @@ from toontown.toonbase.ToontownGlobals import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal -import Maze -import MazeData -import MazeGameGlobals +from . import Maze +from . import MazeData +from . import MazeGameGlobals from direct.showbase import RandomNumGen from toontown.suit import Suit from toontown.suit import SuitDNA @@ -51,7 +51,7 @@ def destroy(self): self.suit.delete() def uniqueName(self, str): - return str + `self.serialNum` + return str + repr(self.serialNum) def gameStart(self, gameStartTime): self.gameStartTime = gameStartTime @@ -236,7 +236,7 @@ def getThinkTimestampTics(self, curTic): if curTic < self.nextThinkTic: return [] else: - r = range(self.nextThinkTic, curTic+1, self.ticPeriod) + r = list(range(self.nextThinkTic, curTic+1, self.ticPeriod)) # store the last tic for which update() will be called this frame # this way, we only create a maximum of one move track per # frame per suit diff --git a/toontown/src/minigame/MinigameAvatarScorePanel.py b/toontown/src/minigame/MinigameAvatarScorePanel.py index db796526..1eae0b37 100644 --- a/toontown/src/minigame/MinigameAvatarScorePanel.py +++ b/toontown/src/minigame/MinigameAvatarScorePanel.py @@ -9,7 +9,7 @@ def __init__(self, avId, avName): self.avId = avId - if base.cr.doId2do.has_key(self.avId): + if self.avId in base.cr.doId2do: self.avatar = base.cr.doId2do[self.avId] else: # Must be a suit diff --git a/toontown/src/minigame/MinigameCreatorAI.py b/toontown/src/minigame/MinigameCreatorAI.py index 830bf342..99afa5c4 100644 --- a/toontown/src/minigame/MinigameCreatorAI.py +++ b/toontown/src/minigame/MinigameCreatorAI.py @@ -5,25 +5,25 @@ from toontown.toonbase import ToontownGlobals # Import all the minigames because we create them -import DistributedMinigameTemplateAI -import DistributedRaceGameAI -import DistributedCannonGameAI -import DistributedTagGameAI -import DistributedPatternGameAI -import DistributedRingGameAI -import DistributedMazeGameAI -import DistributedTugOfWarGameAI -import DistributedCatchGameAI -import DistributedDivingGameAI -import DistributedTargetGameAI -import DistributedPairingGameAI -import DistributedPhotoGameAI -import DistributedVineGameAI -import DistributedIceGameAI -import DistributedCogThiefGameAI -import DistributedTwoDGameAI -import DistributedTravelGameAI -import TravelGameGlobals +from . import DistributedMinigameTemplateAI +from . import DistributedRaceGameAI +from . import DistributedCannonGameAI +from . import DistributedTagGameAI +from . import DistributedPatternGameAI +from . import DistributedRingGameAI +from . import DistributedMazeGameAI +from . import DistributedTugOfWarGameAI +from . import DistributedCatchGameAI +from . import DistributedDivingGameAI +from . import DistributedTargetGameAI +from . import DistributedPairingGameAI +from . import DistributedPhotoGameAI +from . import DistributedVineGameAI +from . import DistributedIceGameAI +from . import DistributedCogThiefGameAI +from . import DistributedTwoDGameAI +from . import DistributedTravelGameAI +from . import TravelGameGlobals #------------------------------------------------------------------------------ # This config allows devs to temporarily register temp games created with the minigame framework @@ -125,24 +125,14 @@ def createMinigame(air, playerArray, trolleyZone, ToontownGlobals.MazeGameId: DistributedMazeGameAI.DistributedMazeGameAI, ToontownGlobals.TugOfWarGameId: DistributedTugOfWarGameAI.DistributedTugOfWarGameAI, ToontownGlobals.CatchGameId: DistributedCatchGameAI.DistributedCatchGameAI, - ToontownGlobals.DivingGameId: DistributedDivingGameAI.DistributedDivingGameAI, - ToontownGlobals.TargetGameId: DistributedTargetGameAI.DistributedTargetGameAI, - ToontownGlobals.MinigameTemplateId: DistributedMinigameTemplateAI.DistributedMinigameTemplateAI, - ToontownGlobals.PairingGameId : DistributedPairingGameAI.DistributedPairingGameAI, - ToontownGlobals.VineGameId: DistributedVineGameAI.DistributedVineGameAI, - ToontownGlobals.IceGameId : DistributedIceGameAI.DistributedIceGameAI, - ToontownGlobals.CogThiefGameId : DistributedCogThiefGameAI.DistributedCogThiefGameAI, - ToontownGlobals.TwoDGameId : DistributedTwoDGameAI.DistributedTwoDGameAI, - ToontownGlobals.TravelGameId : DistributedTravelGameAI.DistributedTravelGameAI, - ToontownGlobals.PhotoGameId: DistributedPhotoGameAI.DistributedPhotoGameAI, } if ALLOW_TEMP_MINIGAMES: # Adds the temp minigames to the list of minigame creators... - from TempMinigameAI import TempMgCtors + from .TempMinigameAI import TempMgCtors - for key, value in TempMgCtors.items(): + for key, value in list(TempMgCtors.items()): mgCtors[key] = value @@ -161,7 +151,7 @@ def createMinigame(air, playerArray, trolleyZone, #import pdb; pdb.set_trace() mg = mgCtors[mgId](air, mgId) except KeyError: - raise Exception, "unknown minigame ID: %s" % mgId + raise Exception("unknown minigame ID: %s" % mgId) # Tell the minigame who we are expecting # do this before generating the minigame; @@ -184,7 +174,7 @@ def createMinigame(air, playerArray, trolleyZone, avId = playerArray[index] votes = startingVotes[index] if votes < 0: - print('createMinigame negative votes, avId=%s votes=%s' %(avId, votes)) + print(('createMinigame negative votes, avId=%s votes=%s' %(avId, votes))) votes = 0 mg.setStartingVote(avId, votes ) #print('setting starting vote of %d to %d' % (avId,votes)) diff --git a/toontown/src/minigame/MinigameDebug.py b/toontown/src/minigame/MinigameDebug.py index 13018934..21046b5d 100644 --- a/toontown/src/minigame/MinigameDebug.py +++ b/toontown/src/minigame/MinigameDebug.py @@ -4,7 +4,7 @@ # call this on the client to print your local toon's avatar ID def getLocalAvId(): - print str(base.localAvatar.doId) + print(str(base.localAvatar.doId)) # call startMinigameAI() on the AI server (see MinigameDebugAI.py) diff --git a/toontown/src/minigame/MinigameDebugAI.py b/toontown/src/minigame/MinigameDebugAI.py index 8e6a4a91..de4d195e 100644 --- a/toontown/src/minigame/MinigameDebugAI.py +++ b/toontown/src/minigame/MinigameDebugAI.py @@ -1,7 +1,7 @@ from toontown.toonbase import ToontownGlobals -import DistributedRaceGameAI -import DistributedCannonGameAI +from . import DistributedRaceGameAI +from . import DistributedCannonGameAI # TO START A MINIGAME: @@ -25,6 +25,6 @@ def startMinigameAI(minigameId, avID, avID2=1, avID3=2, avID4=3): # set the expected avatars directly # (I do not think this needs to be an update) mg.setExpectedAvatars(avID, avID2, avID3, avID4) - print "zoneId = " + str(zoneId) + print("zoneId = " + str(zoneId)) # call startMinigame() on the client diff --git a/toontown/src/minigame/MinigameRulesPanel.py b/toontown/src/minigame/MinigameRulesPanel.py index fdf2bc83..fde87c17 100644 --- a/toontown/src/minigame/MinigameRulesPanel.py +++ b/toontown/src/minigame/MinigameRulesPanel.py @@ -6,7 +6,7 @@ from pandac.PandaModules import * from toontown.toonbase import ToontownTimer from toontown.toonbase import TTLocalizer -import MinigameGlobals +from . import MinigameGlobals class MinigameRulesPanel(StateData.StateData): """ diff --git a/toontown/src/minigame/MovingBlock.py b/toontown/src/minigame/MovingBlock.py index e3a29490..0334ade8 100644 --- a/toontown/src/minigame/MovingBlock.py +++ b/toontown/src/minigame/MovingBlock.py @@ -45,11 +45,11 @@ def delete(self): def __handleOnFloor(self, collEntry): if (collEntry.getIntoNode().getName() == self.name): - print ('on floor %s' % (self.name)) + print(('on floor %s' % (self.name))) base.localAvatar.b_setParent(self.token) def __handleOffFloor(self, collEntry): if (collEntry.getIntoNode().getName() == self.name): - print ('off floor %s' % (self.name)) + print(('off floor %s' % (self.name))) base.localAvatar.b_setParent(ToontownGlobals.SPRender) diff --git a/toontown/src/minigame/OrthoDrive.py b/toontown/src/minigame/OrthoDrive.py index 861f4cf6..62af14a6 100644 --- a/toontown/src/minigame/OrthoDrive.py +++ b/toontown/src/minigame/OrthoDrive.py @@ -2,7 +2,7 @@ from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * -import ArrowKeys +from . import ArrowKeys from direct.task.Task import Task class OrthoDrive: diff --git a/toontown/src/minigame/OrthoWalk.py b/toontown/src/minigame/OrthoWalk.py index 7e8e6f87..2ce4dbea 100644 --- a/toontown/src/minigame/OrthoWalk.py +++ b/toontown/src/minigame/OrthoWalk.py @@ -3,7 +3,7 @@ from toontown.toonbase.ToonBaseGlobal import * from direct.task.Task import Task from direct.interval.IntervalGlobal import * -from OrthoDrive import * +from .OrthoDrive import * from direct.directnotify import DirectNotifyGlobal class OrthoWalk: diff --git a/toontown/src/minigame/PairingGameCard.py b/toontown/src/minigame/PairingGameCard.py index 7936f5e0..1c3fbaa1 100644 --- a/toontown/src/minigame/PairingGameCard.py +++ b/toontown/src/minigame/PairingGameCard.py @@ -1,5 +1,5 @@ -from PlayingCard import PlayingCardNodePath -import PlayingCardGlobals +from .PlayingCard import PlayingCardNodePath +from . import PlayingCardGlobals from pandac.PandaModules import NodePath, Vec3 from direct.interval.IntervalGlobal import LerpHprInterval, Parallel, SoundInterval diff --git a/toontown/src/minigame/PairingGameGlobals.py b/toontown/src/minigame/PairingGameGlobals.py index d7c4a2ea..054917fe 100644 --- a/toontown/src/minigame/PairingGameGlobals.py +++ b/toontown/src/minigame/PairingGameGlobals.py @@ -1,4 +1,4 @@ -import PlayingCardDeck +from . import PlayingCardDeck EasiestGameDuration = 120 HardestGameDuration = 90 diff --git a/toontown/src/minigame/PatternGameGlobals.py b/toontown/src/minigame/PatternGameGlobals.py index 23901749..38c949b1 100644 --- a/toontown/src/minigame/PatternGameGlobals.py +++ b/toontown/src/minigame/PatternGameGlobals.py @@ -1,7 +1,7 @@ # PatternGameGlobals.py: contains pattern game stuff # used by AI and client -import MinigameGlobals +from . import MinigameGlobals # pattern constants INITIAL_ROUND_LENGTH = 2 diff --git a/toontown/src/minigame/PhotoGameBase.py b/toontown/src/minigame/PhotoGameBase.py index 857f97f4..a68d8734 100644 --- a/toontown/src/minigame/PhotoGameBase.py +++ b/toontown/src/minigame/PhotoGameBase.py @@ -1,4 +1,4 @@ -import PhotoGameGlobals +from . import PhotoGameGlobals import random class PhotoGameBase: @@ -17,7 +17,7 @@ def generateAssignmentTemplates(self, numAssignments): if numPathes == 0: return assignmentTemplates while len(assignmentTemplates) < numAssignments: - subjectIndex = random.choice(range(numPathes)) + subjectIndex = random.choice(list(range(numPathes))) pose = (None, None) while pose[0] == None: animSetIndex = self.data["PATHANIMREL"][subjectIndex] diff --git a/toontown/src/minigame/PlayingCard.py b/toontown/src/minigame/PlayingCard.py index deeedcd0..e98a8bfb 100644 --- a/toontown/src/minigame/PlayingCard.py +++ b/toontown/src/minigame/PlayingCard.py @@ -4,7 +4,7 @@ from toontown.toonbase import TTLocalizer -import PlayingCardGlobals +from . import PlayingCardGlobals class PlayingCardBase: """ diff --git a/toontown/src/minigame/PlayingCardDeck.py b/toontown/src/minigame/PlayingCardDeck.py index 36c32161..6ce3bda5 100644 --- a/toontown/src/minigame/PlayingCardDeck.py +++ b/toontown/src/minigame/PlayingCardDeck.py @@ -1,6 +1,6 @@ import random -import PlayingCardGlobals +from . import PlayingCardGlobals from toontown.minigame.PlayingCard import PlayingCardBase class PlayingCardDeck: @@ -8,13 +8,13 @@ def __init__(self): self.shuffle() def shuffle(self): - self.cards = range(0,PlayingCardGlobals.MaxSuit * PlayingCardGlobals.MaxRank) + self.cards = list(range(0,PlayingCardGlobals.MaxSuit * PlayingCardGlobals.MaxRank)) random.shuffle(self.cards) def shuffleWithSeed(self, seed): generator = random.Random() generator.seed(seed) - self.cards = range(0,PlayingCardGlobals.MaxSuit * PlayingCardGlobals.MaxRank) + self.cards = list(range(0,PlayingCardGlobals.MaxSuit * PlayingCardGlobals.MaxRank)) generator.shuffle(self.cards) def dealCard(self): diff --git a/toontown/src/minigame/Purchase.py b/toontown/src/minigame/Purchase.py index f6ddb14d..651a203c 100644 --- a/toontown/src/minigame/Purchase.py +++ b/toontown/src/minigame/Purchase.py @@ -1,4 +1,4 @@ -from PurchaseBase import * +from .PurchaseBase import * from direct.task.Task import Task from toontown.toon import ToonHead from toontown.toonbase import ToontownTimer @@ -159,7 +159,7 @@ def load(self): (self.states[index] != PURCHASE_DISCONNECTED_STATE)): if avId != base.localAvatar.doId: # Do not add the doId if they are not in the doId - if base.cr.doId2do.has_key(avId): + if avId in base.cr.doId2do: self.avInfoArray.append( (avId, headFramePosList[layout[pos]], index) ) pos = pos + 1 @@ -490,7 +490,7 @@ def celebrate(task): for i in range(len(task.ids)): if task.pointsArray[i] == winningPoints: avId = task.ids[i] - if base.cr.doId2do.has_key(avId): + if avId in base.cr.doId2do: toon = base.cr.doId2do[avId] toon.setAnimState("jump", 1.0) @@ -846,7 +846,7 @@ def doMetagamePlayAgain(self): # count how many toons are still connected numToons = 0 for avId in self.ids: - if base.cr.doId2do.has_key(avId) and \ + if avId in base.cr.doId2do and \ avId not in self.unexpectedExits: numToons +=1 assert self.notify.debug('found avId=%s numToons=%s' % (avId, numToons)) @@ -864,7 +864,7 @@ def doMetagamePlayAgain(self): def setupUnexpectedExitHooks(self): """Setup hooks to inform us when other toons exit unexpectedly.""" for avId in self.ids: - if base.cr.doId2do.has_key(avId): + if avId in base.cr.doId2do: toon = base.cr.doId2do[avId] eventName = toon.uniqueName('disable') self.accept(eventName, diff --git a/toontown/src/minigame/Ring.py b/toontown/src/minigame/Ring.py index 810368bc..fc8d0647 100644 --- a/toontown/src/minigame/Ring.py +++ b/toontown/src/minigame/Ring.py @@ -3,7 +3,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from pandac.PandaModules import NodePath -import RingTrack +from . import RingTrack class Ring(NodePath): """ring for ring minigame""" diff --git a/toontown/src/minigame/RingAction.py b/toontown/src/minigame/RingAction.py index beec422b..c1d81d9d 100644 --- a/toontown/src/minigame/RingAction.py +++ b/toontown/src/minigame/RingAction.py @@ -1,7 +1,7 @@ """RingAction.py: contains the RingAction class""" from direct.directnotify import DirectNotifyGlobal -import RingTrack +from . import RingTrack """ see RingTrack.py diff --git a/toontown/src/minigame/RingGroup.py b/toontown/src/minigame/RingGroup.py index 69b21c92..dc929c47 100644 --- a/toontown/src/minigame/RingGroup.py +++ b/toontown/src/minigame/RingGroup.py @@ -3,10 +3,10 @@ from pandac.PandaModules import * from toontown.toonbase.ToonBaseGlobal import * from pandac.PandaModules import NodePath -import Ring -import RingTrack -import RingTrackGroup -import RingGameGlobals +from . import Ring +from . import RingTrack +from . import RingTrackGroup +from . import RingGameGlobals class RingGroup(NodePath): """RingGroup: manages from 1 to 4 rings diff --git a/toontown/src/minigame/RingTrack.py b/toontown/src/minigame/RingTrack.py index f4af8899..85f5da05 100644 --- a/toontown/src/minigame/RingTrack.py +++ b/toontown/src/minigame/RingTrack.py @@ -15,7 +15,7 @@ """ from direct.directnotify import DirectNotifyGlobal -import RingAction +from . import RingAction class RingTrack: notify = DirectNotifyGlobal.directNotify.newCategory("RingTrack") diff --git a/toontown/src/minigame/RingTrackGroups.py b/toontown/src/minigame/RingTrackGroups.py index 4e50beba..3f7a6709 100644 --- a/toontown/src/minigame/RingTrackGroups.py +++ b/toontown/src/minigame/RingTrackGroups.py @@ -1,11 +1,11 @@ """RingTrackGroups.py: contains various Ring Game ring track groups""" import math -import RingGameGlobals -import RingAction -import RingTracks -import RingTrack -import RingTrackGroup +from . import RingGameGlobals +from . import RingAction +from . import RingTracks +from . import RingTrack +from . import RingTrackGroup from direct.showbase import PythonUtil # ringTrackGroup types/difficulty levels @@ -176,7 +176,7 @@ def __get_Slots(numRings, rng, vertical=1): # staying within bounds offset = 1 - fpTab[-1] offset = (rng.random() * (offset*2)) - offset - fpTab = map(lambda x: x+offset, fpTab) + fpTab = [x+offset for x in fpTab] for i in range(0,numRings): if vertical: diff --git a/toontown/src/minigame/RingTracks.py b/toontown/src/minigame/RingTracks.py index 27845499..128420a4 100644 --- a/toontown/src/minigame/RingTracks.py +++ b/toontown/src/minigame/RingTracks.py @@ -1,8 +1,8 @@ """RingTracks.py: contains various Ring Game ring tracks""" import math -import RingTrack -import RingAction +from . import RingTrack +from . import RingAction center = (0,0) up = ( 0, 1) diff --git a/toontown/src/minigame/SwingVine.py b/toontown/src/minigame/SwingVine.py index ec4433bb..53dccbc8 100644 --- a/toontown/src/minigame/SwingVine.py +++ b/toontown/src/minigame/SwingVine.py @@ -6,8 +6,8 @@ from direct.showutil import Rope import math from toontown.toonbase import ToontownGlobals -import VineGameGlobals -import VineSpider +from . import VineGameGlobals +from . import VineSpider class SwingVine(NodePath.NodePath): notify = DirectNotifyGlobal.directNotify.newCategory('SwingVine') @@ -117,7 +117,7 @@ def unload(self): if self.hasSpider: self.spider.destroy() del self.spider - for toonInfo in self.attachedToons.values(): + for toonInfo in list(self.attachedToons.values()): attachNode = toonInfo[4] if attachNode: attachNode.removeNode() @@ -135,7 +135,7 @@ def setupCable(self): self.links.append((self.topLink, Point3(0,0,0))) anchor = self.topLink - for linkNum in xrange(self.numLinks): + for linkNum in range(self.numLinks): anchor = self.__makeLink(anchor, linkNum) self.bottomLink = self.links[-1][0] @@ -201,7 +201,7 @@ def setupTubes(self): self.tubes = [] self.tubes2 = [] radius = 0.5 - for tubeIndex in xrange(self.numTubes): + for tubeIndex in range(self.numTubes): az = self.tubeLength / 2.0 bz = - self.tubeLength / 2.0 ct = CollisionTube(0, 0, az, 0, 0, bz, radius) @@ -261,17 +261,17 @@ def makeSpline(self): # the cable. rope = Rope.Rope() - for i in xrange(len(self.links)): + for i in range(len(self.links)): pass #self.notify.debug('%s %s' % (self.links[i][0], self.links[i][0].getPos())) rope.setup(min(len(self.links), 4), self.links) - for i in xrange(len(self.links)): + for i in range(len(self.links)): pass #self.notify.debug('%s %s' % (self.links[i][0], self.links[i][0].getPos())) rope.curve.normalizeKnots() self.notify.debug('after normalize Knots') - for i in xrange(len(self.links)): + for i in range(len(self.links)): pass #self.notify.debug('%s %s' % (self.links[i][0], self.links[i][0].getPos())) @@ -378,7 +378,7 @@ def stopSwing(self): def getAttachNode(self, toonId): """Return the attachNode for a toon, create one if needed.""" retval = None - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: existingAttachNode = self.attachedToons[toonId][4] if existingAttachNode: retval = existingAttachNode @@ -405,7 +405,7 @@ def calcOffset(self, toonId): def doubleCheckOffset(self, toonId): """In case we somehow got an offset of zero, recalculate it.""" - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: curOffset = self.attachedToons[toonId][3] if curOffset == Point3.zero(): newOffset = self.calcOffset(toonId) @@ -447,7 +447,7 @@ def changeAttachedToonT(self, toonId, t): """ the toon climbed up or down the vine """ - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: oldT = self.attachedToons[toonId][0] self.attachedToons[toonId][0] = t oldSwingType = self.calcSwingAnimType(oldT) @@ -463,7 +463,7 @@ def changeAttachedToonFacing(self, toonId, facing): """ the toon climbed up or down the vine """ - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: curT = self.attachedToons[toonId][0] self.detachToon(toonId) self.attachToon(toonId, curT, facing) @@ -475,7 +475,7 @@ def changeAttachedToonFacing(self, toonId, facing): def detachToon(self, toonId): assert self.notify.debugStateCall(self) self.notify.debug('detachToon toonId=%d vineIndex=%d' % (toonId, self.vineIndex)) - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: self.attachedToons[toonId][4].removeNode() swingIval = self.attachedToons[toonId][6] if swingIval: @@ -487,7 +487,7 @@ def detachToon(self, toonId): del self.attachedToons[toonId] def getAttachedToonInfo(self, toonId): - if self.attachedToons.has_key(toonId): + if toonId in self.attachedToons: return self.attachedToons[toonId] else: return None @@ -499,7 +499,7 @@ def getCenterTForTube(self, tubeIndex): def updateTubes(self): newPoint = Vec3(0,0,0) curve = self.rope.ropeNode.getCurve().evaluate() - for tubeIndex in xrange(self.numTubes): + for tubeIndex in range(self.numTubes): tube = self.tubes[tubeIndex] t = self.getCenterTForTube(tubeIndex) curve.evalPoint(t, newPoint) @@ -514,7 +514,7 @@ def updateTubes(self): rAngle = -90 - degrees tube.setR(rAngle) - for tubeIndex in xrange(self.numTubes): + for tubeIndex in range(self.numTubes): tube = self.tubes2[tubeIndex] t = self.getCenterTForTube(tubeIndex) curve.evalPoint(t, newPoint) @@ -559,7 +559,7 @@ def updateAttachedStuff(self): def updateAttachedToons(self): curve = self.rope.ropeNode.getCurve().evaluate() - for avId in self.attachedToons.keys(): + for avId in list(self.attachedToons.keys()): self.doubleCheckOffset(avId) t = self.attachedToons[avId][0] newPoint = Vec3(0,0,0) @@ -832,7 +832,7 @@ def setupSwingAnimMinimal(self, av, avId): def setupSwingAnim(self, avId): """Figure out the swing anim when a toon has just attached to the vine.""" #assert self.notify.debugStateCall(self) - if not self.attachedToons.has_key(avId): + if avId not in self.attachedToons: return av = base.cr.doId2do.get(avId) if not av: @@ -868,6 +868,6 @@ def updateSwingAnims(self): if self.unloading: return - for avId in self.attachedToons.keys(): + for avId in list(self.attachedToons.keys()): #self.notify.debugStateCall(self) self.setupSwingAnim(avId) diff --git a/toontown/src/minigame/TagTreasurePlannerAI.py b/toontown/src/minigame/TagTreasurePlannerAI.py index 6f162c2b..85a0b340 100644 --- a/toontown/src/minigame/TagTreasurePlannerAI.py +++ b/toontown/src/minigame/TagTreasurePlannerAI.py @@ -3,7 +3,7 @@ from toontown.toonbase.ToontownGlobals import * from toontown.safezone import RegenTreasurePlannerAI -import DistributedTagTreasureAI +from . import DistributedTagTreasureAI class TagTreasurePlannerAI(RegenTreasurePlannerAI.RegenTreasurePlannerAI): notify = DirectNotifyGlobal.directNotify.newCategory( diff --git a/toontown/src/minigame/TempMinigameAI.py b/toontown/src/minigame/TempMinigameAI.py index 300df630..cb1b7374 100644 --- a/toontown/src/minigame/TempMinigameAI.py +++ b/toontown/src/minigame/TempMinigameAI.py @@ -15,7 +15,7 @@ TempMgCtors = {} def _printMessage(message): - print "\n\n!!!", message, "\n\n" + print("\n\n!!!", message, "\n\n") def _registerTempMinigame(name, Class, id, minPlayers=1, maxPlayers=4): """ @@ -30,7 +30,7 @@ def _registerTempMinigame(name, Class, id, minPlayers=1, maxPlayers=4): return assert minPlayers >= 1 and minPlayers <= 4 and maxPlayers >=1 and maxPlayers <= 4 and minPlayers <= maxPlayers - assert ToontownGlobals.MinigameNames.has_key(name) == False + assert (name in ToontownGlobals.MinigameNames) == False assert id is not None and id not in ToontownGlobals.MinigameIDs and id < ToontownGlobals.TravelGameId ToontownGlobals.MinigameIDs += (id,) diff --git a/toontown/src/minigame/ToonBlitzAssetMgr.py b/toontown/src/minigame/ToonBlitzAssetMgr.py index 8062e2c6..b8f96a11 100644 --- a/toontown/src/minigame/ToonBlitzAssetMgr.py +++ b/toontown/src/minigame/ToonBlitzAssetMgr.py @@ -52,7 +52,7 @@ def load(self): self.particleGlow = loader.loadModel("phase_4/models/minigames/particleGlow") self.blockTypes = [] - for i in xrange(4): + for i in range(4): blockType = loader.loadModel("phase_4/models/minigames/toonblitz_game_block0" + str(i)) self.blockTypes.append(blockType) @@ -91,7 +91,7 @@ def load(self): self.progressLine.setPos(0, 0, self.faceStartPos[2]) self.cardMaker.setName('RaceProgressLineHash') - for n in xrange(ToonBlitzGlobals.NumSections[self.game.getSafezoneId()] + 1): + for n in range(ToonBlitzGlobals.NumSections[self.game.getSafezoneId()] + 1): hash = self.aspect2dRoot.attachNewNode(self.cardMaker.generate()) hash.setScale(self.progressLine.getScale()[2],1,self.progressLine.getScale()[2] * 5) t = float(n) / ToonBlitzGlobals.NumSections[self.game.getSafezoneId()] diff --git a/toontown/src/minigame/TrolleyHolidayMgrAI.py b/toontown/src/minigame/TrolleyHolidayMgrAI.py index 474fcb1b..3d5d3bbb 100644 --- a/toontown/src/minigame/TrolleyHolidayMgrAI.py +++ b/toontown/src/minigame/TrolleyHolidayMgrAI.py @@ -17,9 +17,6 @@ def start(self): # let the holiday system know we started bboard.post(TrolleyHolidayMgrAI.PostName, True) - # tell everyone race night is starting - simbase.air.newsManager.trolleyHolidayStart() - messenger.send(TrolleyHolidayMgrAI.StartStopMsg) def stop(self): diff --git a/toontown/src/minigame/TwoDDrive.py b/toontown/src/minigame/TwoDDrive.py index 92b2c4d5..9d47ac57 100644 --- a/toontown/src/minigame/TwoDDrive.py +++ b/toontown/src/minigame/TwoDDrive.py @@ -3,7 +3,7 @@ from toontown.toonbase.ToonBaseGlobal import * from otp.otpbase import OTPGlobals from direct.interval.IntervalGlobal import * -import ArrowKeys +from . import ArrowKeys from direct.task.Task import Task class TwoDDrive: diff --git a/toontown/src/minigame/TwoDEnemyMgr.py b/toontown/src/minigame/TwoDEnemyMgr.py index 108fb635..b8154ff0 100644 --- a/toontown/src/minigame/TwoDEnemyMgr.py +++ b/toontown/src/minigame/TwoDEnemyMgr.py @@ -37,7 +37,7 @@ def load(self): # Creating enemies self.enemies = [] - for index in xrange(len(self.enemyList)): + for index in range(len(self.enemyList)): enemyId = self.section.getSectionizedId(index) suitAttribs = self.enemyList[index] newEnemy = TwoDEnemy.TwoDEnemy(self, enemyId, suitAttribs) diff --git a/toontown/src/minigame/TwoDGameToonSD.py b/toontown/src/minigame/TwoDGameToonSD.py index 9322344f..c50ba256 100644 --- a/toontown/src/minigame/TwoDGameToonSD.py +++ b/toontown/src/minigame/TwoDGameToonSD.py @@ -8,7 +8,7 @@ from direct.fsm import StateData from direct.fsm import ClassicFSM, State from direct.fsm import State -import ToonBlitzGlobals +from . import ToonBlitzGlobals from otp.otpbase import OTPGlobals from direct.task.Task import Task from toontown.minigame import TwoDBattleMgr diff --git a/toontown/src/minigame/TwoDSectionMgr.py b/toontown/src/minigame/TwoDSectionMgr.py index d6698eb4..920f9c03 100644 --- a/toontown/src/minigame/TwoDSectionMgr.py +++ b/toontown/src/minigame/TwoDSectionMgr.py @@ -79,7 +79,7 @@ def setupStartSection(self): # Creating level blocks # We don't create a section for the start section. It does not have a spawnPoint # TODO: We could make it a section, dunno if it'll break. - for index in xrange(len(ToonBlitzGlobals.BlockListStart)): + for index in range(len(ToonBlitzGlobals.BlockListStart)): blockAttribs = ToonBlitzGlobals.BlockListStart[index] fileName = ToonBlitzGlobals.BlockTypes[blockAttribs[0]][0] blockIndex = int(fileName[-1]) diff --git a/toontown/src/minigame/TwoDStomper.py b/toontown/src/minigame/TwoDStomper.py index 401a83ac..509c5f2b 100644 --- a/toontown/src/minigame/TwoDStomper.py +++ b/toontown/src/minigame/TwoDStomper.py @@ -92,7 +92,7 @@ def setupStomper(self, stomperAttribs): # Setup the collision solids self.collSolids = [] self.collSolids.append(originalColl) - for i in xrange(self.numCollSolids - 1): + for i in range(self.numCollSolids - 1): newColl = originalColl.copyTo(self.model) self.collSolids.append(newColl) self.collSolids[-1].reparentTo(self.head) diff --git a/toontown/src/minigame/TwoDStomperMgr.py b/toontown/src/minigame/TwoDStomperMgr.py index 4d2f9ba3..7fd1bdb8 100644 --- a/toontown/src/minigame/TwoDStomperMgr.py +++ b/toontown/src/minigame/TwoDStomperMgr.py @@ -36,7 +36,7 @@ def load(self): self.stompersNP.reparentTo(self.section.sectionNP) self.stompers = [] - for index in xrange(len(self.stomperList)): + for index in range(len(self.stomperList)): stomperAttribs = self.stomperList[index] self.createNewStomper(stomperAttribs) diff --git a/toontown/src/minigame/TwoDTreasureMgr.py b/toontown/src/minigame/TwoDTreasureMgr.py index 683a32d4..42ec3c37 100644 --- a/toontown/src/minigame/TwoDTreasureMgr.py +++ b/toontown/src/minigame/TwoDTreasureMgr.py @@ -38,7 +38,7 @@ def load(self): # Creating treasuresNP self.treasures = [] # Create the initial treasures from the treasure list - for index in xrange(len(self.treasureList)): + for index in range(len(self.treasureList)): treasureAttribs = self.treasureList[index][0] treasureValue = self.treasureList[index][1] self.createNewTreasure(treasureAttribs, treasureValue) @@ -48,7 +48,7 @@ def load(self): # The value of the enemy generated treasure increases when there are more players. numPlayers = self.section.sectionMgr.game.numPlayers pos = Point3(-1, -1, -1) - for index in xrange(len(self.enemyList)): + for index in range(len(self.enemyList)): self.createNewTreasure([pos], numPlayers, isEnemyGenerated = True) def createNewTreasure(self, attrib, value, isEnemyGenerated = False, model = None): diff --git a/toontown/src/minigame/TwoDWalk.py b/toontown/src/minigame/TwoDWalk.py index a9fa0f6a..07666306 100644 --- a/toontown/src/minigame/TwoDWalk.py +++ b/toontown/src/minigame/TwoDWalk.py @@ -1,6 +1,6 @@ """ TwoDWalk.py: contains the TwoDWalk class """ -from OrthoWalk import * +from .OrthoWalk import * class TwoDWalk(OrthoWalk): """ diff --git a/toontown/src/minigame/VineBat.py b/toontown/src/minigame/VineBat.py index f5603b81..50deeab0 100644 --- a/toontown/src/minigame/VineBat.py +++ b/toontown/src/minigame/VineBat.py @@ -4,7 +4,7 @@ from toontown.toonbase.ToontownGlobals import * from direct.directnotify import DirectNotifyGlobal from pandac.PandaModules import * -import VineGameGlobals +from . import VineGameGlobals from direct.interval.SoundInterval import SoundInterval diff --git a/toontown/src/minigame/VineHeadFrame.py b/toontown/src/minigame/VineHeadFrame.py index cf390bd2..778f191d 100644 --- a/toontown/src/minigame/VineHeadFrame.py +++ b/toontown/src/minigame/VineHeadFrame.py @@ -16,7 +16,7 @@ def __init__(self, av = None, color = Vec4(1,1,1,1), *args, **kwargs): 'pos':(0,0,0), } opts.update(kwargs) - apply(DirectFrame.__init__,(self,)+args,opts) + DirectFrame.__init__(*(self,)+args, **opts) self.initialiseoptions(VineHeadFrame) if (av): diff --git a/toontown/src/minigame/VineSpider.py b/toontown/src/minigame/VineSpider.py index 2a93f116..dd111eb8 100644 --- a/toontown/src/minigame/VineSpider.py +++ b/toontown/src/minigame/VineSpider.py @@ -4,7 +4,7 @@ from toontown.toonbase.ToontownGlobals import * from direct.directnotify import DirectNotifyGlobal from pandac.PandaModules import * -import VineGameGlobals +from . import VineGameGlobals class VineSpider(NodePath.NodePath, DirectObject): """ @@ -89,8 +89,8 @@ def destroy(self): self.removeNode() def __handleEnterSphere(self, collEntry): - print 'VineSpider.__handleEnterSphere' - print collEntry + print('VineSpider.__handleEnterSphere') + print(collEntry) self.ignoreAll() # announce that this treasure was grabbed self.notify.debug('treasuerGrabbed') diff --git a/toontown/src/minigame/VoteResultsTrolleyPanel.py b/toontown/src/minigame/VoteResultsTrolleyPanel.py index f89a696d..fa9bc65b 100644 --- a/toontown/src/minigame/VoteResultsTrolleyPanel.py +++ b/toontown/src/minigame/VoteResultsTrolleyPanel.py @@ -331,7 +331,7 @@ def totalTicker(t, label = self.totalVotesLabels[direction], label['text'] = str( int(t*additionalVotes + startVotes)) track.append(LerpFunc(totalTicker, duration=duration, name='countTotal %d' %index)) - if self.avVotesLabel.has_key(index): + if index in self.avVotesLabel: def avVotesTicker(t, label = self.avVotesLabel[index], startVotes = 0, endVotes = numVotes, direction = direction): oldValue = label['text'] @@ -349,7 +349,7 @@ def avVotesTicker(t, label = self.avVotesLabel[index], label = self.avVotesLabel[index] track.append(Func(self.avVotesLabel[index].show, name='showName %d' % index)) - if self.avArrows.has_key(index): + if index in self.avArrows: track.append(Func(self.avArrows[index].show, name='showArrow %d' % index)) if direction == 0 and numVotes: #track.append(SoundInterval(self.upArrowSfx)) diff --git a/toontown/src/parties/CalendarGuiMonth.py b/toontown/src/parties/CalendarGuiMonth.py index 27a62acd..67ea8172 100644 --- a/toontown/src/parties/CalendarGuiMonth.py +++ b/toontown/src/parties/CalendarGuiMonth.py @@ -44,7 +44,7 @@ def createDummyLocators(self): self.monthLocator.setZ(0.6) self.weekDayLocators = [] - for i in xrange(7): + for i in range(7): self.weekDayLocators.append( self.attachNewNode('weekDayLocator-%d'%i)) self.weekDayLocators[i].setZ(0.5) self.weekDayLocators[i].setX( i*(0.24) + -0.75) @@ -52,9 +52,9 @@ def createDummyLocators(self): dayTopLeftX = -0.8 dayTopLeftZ = 0.4 self.dayLocators =[] - for row in xrange(6): + for row in range(6): oneWeek = [] - for col in xrange(7): + for col in range(7): newDayLoc = self.attachNewNode('dayLocator-row-%d-col-%d' % (row,col)) newDayLoc.setX( col *0.24 + dayTopLeftX) @@ -90,9 +90,9 @@ def load(self): self.attachMarker(weekDayLoc) self.dayLocators =[] - for row in xrange(6): + for row in range(6): oneWeek = [] - for col in xrange(7): + for col in range(7): newDayLoc = self.find('**/loc_box_%s_%s' % (row, col)) oneWeek.append(newDayLoc) self.dayLocators.append(oneWeek) @@ -129,7 +129,7 @@ def createGuiObjects(self): ) self.weekdayLabels = [] - for posIndex in xrange(7): + for posIndex in range(7): # Sunday is the usual first day of the week, but # self.startDate.weekDay() reports 0 for Monday adjustedNameIndex = (posIndex-1) % 7 diff --git a/toontown/src/parties/Decoration.py b/toontown/src/parties/Decoration.py index 6b996df3..b1e71209 100644 --- a/toontown/src/parties/Decoration.py +++ b/toontown/src/parties/Decoration.py @@ -283,7 +283,7 @@ def __init__(self, name, x, y, h): self.decorationModels = loader.loadModel("phase_4/models/parties/partyDecorations") self.decorationModels.copyTo(self) decors = self.findAllMatches("**/partyDecoration_*") - for i in xrange(decors.getNumPaths()): + for i in range(decors.getNumPaths()): decPiece = decors.getPath(i) n = decPiece.getName() if n.endswith("shadow") or n.endswith("base") or n.endswith("collision") or n.endswith(name): diff --git a/toontown/src/parties/DistributedParty.py b/toontown/src/parties/DistributedParty.py index aa7f1d0a..df1284d7 100644 --- a/toontown/src/parties/DistributedParty.py +++ b/toontown/src/parties/DistributedParty.py @@ -23,7 +23,7 @@ from toontown.toon import GMUtils from toontown.parties import PartyGlobals from toontown.parties.Decoration import Decoration -import PartyUtils +from . import PartyUtils class DistributedParty(DistributedObject.DistributedObject): notify = directNotify.newCategory("DistributedParty") @@ -234,7 +234,7 @@ def getClearSquarePos(self): # A party with no clear squares shouldn't be able to make it through validation. If you get # this exception, take a look at DistributedPartyManagerAI.validatePartyAndReturnCost(). if len(clearPositions) == 0: - raise StandardError, "Party %s has no empty grid squares." % self.doId + raise Exception("Party %s has no empty grid squares." % self.doId) return random.choice(clearPositions) diff --git a/toontown/src/parties/DistributedPartyActivity.py b/toontown/src/parties/DistributedPartyActivity.py index 3657ea59..727342e9 100644 --- a/toontown/src/parties/DistributedPartyActivity.py +++ b/toontown/src/parties/DistributedPartyActivity.py @@ -380,7 +380,7 @@ def cleanup(self=self): def disable(self): self.notify.debug("BASE: disable") DistributedObject.DistributedObject.disable(self) - rorToonIds = self._toonId2ror.keys() + rorToonIds = list(self._toonId2ror.keys()) for toonId in rorToonIds: self.cr.relatedObjectMgr.abortRequest(self._toonId2ror[toonId]) del self._toonId2ror[toonId] @@ -774,7 +774,7 @@ def getAvatar(self, toonId): """ # If it is an avatar, look it up in the doid2do - if self.cr.doId2do.has_key(toonId): + if toonId in self.cr.doId2do: return self.cr.doId2do[toonId] # I do not know what this toonId is else: diff --git a/toontown/src/parties/DistributedPartyActivityAI.py b/toontown/src/parties/DistributedPartyActivityAI.py index b545a1a5..43f22313 100644 --- a/toontown/src/parties/DistributedPartyActivityAI.py +++ b/toontown/src/parties/DistributedPartyActivityAI.py @@ -215,13 +215,13 @@ def issueJellybeanRewards(self): """ now = globalClock.getFrameTime() while len(self.toonIdsToJellybeanRewards): - self.issueJellybeanRewardToToonId(self.toonIdsToJellybeanRewards.keys()[0], now=now) + self.issueJellybeanRewardToToonId(list(self.toonIdsToJellybeanRewards.keys())[0], now=now) def issueJellybeanRewardToToonId(self, toonId, now=None): """ Give a specific toon a their jellybean reward. """ - if self.toonIdsToJellybeanRewards.has_key(toonId): + if toonId in self.toonIdsToJellybeanRewards: if now is None: now = globalClock.getFrameTime() reward = self.toonIdsToJellybeanRewards[toonId] diff --git a/toontown/src/parties/DistributedPartyCannon.py b/toontown/src/parties/DistributedPartyCannon.py index 44c715e8..37a5671a 100644 --- a/toontown/src/parties/DistributedPartyCannon.py +++ b/toontown/src/parties/DistributedPartyCannon.py @@ -304,7 +304,7 @@ def enterCannon(self, avId): # Place toon inside cannon - if self.cr.doId2do.has_key(avId): + if avId in self.cr.doId2do: # If the toon exists, look it up self.toonInsideAvId = avId self.notify.debug("enterCannon self.toonInsideAvId=%d" % self.toonInsideAvId) @@ -406,7 +406,7 @@ def removeAvFromCannon(self, avId): if not hasattr(place, 'fsm'): return placeState = place.fsm.getCurrentState().getName() - print placeState + print(placeState) if (placeState != "fishing"): if (av != None): av.startSmooth() diff --git a/toontown/src/parties/DistributedPartyCannonActivity.py b/toontown/src/parties/DistributedPartyCannonActivity.py index 94f7e48e..3c74c0c0 100644 --- a/toontown/src/parties/DistributedPartyCannonActivity.py +++ b/toontown/src/parties/DistributedPartyCannonActivity.py @@ -398,7 +398,7 @@ def __fireCannonTask(self, task): flightResults = self.__calcFlightResults(cannon, toonId, launchTime) # pull all the results (startPos, startHpr, startVel, trajectory) into the local namespace for key in flightResults: - exec "%s = flightResults['%s']" % (key, key) + exec("%s = flightResults['%s']" % (key, key)) self.notify.debug("start position: " + str(startPos)) self.notify.debug("start velocity: " + str(startVel)) @@ -1281,5 +1281,5 @@ def __checkHoodValidity(self): def handleToonExited(self, toonId): self.notify.debug("DistributedPartyCannonActivity handleToonExited( toonId=%s ) " %toonId) - if self.cr.doId2do.has_key(toonId): + if toonId in self.cr.doId2do: self.notify.warning("handleToonExited is not defined") diff --git a/toontown/src/parties/DistributedPartyCannonActivityAI.py b/toontown/src/parties/DistributedPartyCannonActivityAI.py index 7607528b..f14d773e 100644 --- a/toontown/src/parties/DistributedPartyCannonActivityAI.py +++ b/toontown/src/parties/DistributedPartyCannonActivityAI.py @@ -54,7 +54,7 @@ def spawnCannonAt(self, x, y, h): def delete(self): self.ignoreAll() - for cannon in self.cannons.values(): + for cannon in list(self.cannons.values()): cannon.requestDelete() self.cannons.clear() self.flyingToons.clear() @@ -68,11 +68,11 @@ def __handleFireCannon(self, cannonId, timeEnteredCannon): Sets cannon to fire """ # Confirm that cannon is lit, otherwise ignore and report suspicious behavior - if self.cannons.has_key(cannonId) and self.cannons[cannonId].isReadyToFire(): + if cannonId in self.cannons and self.cannons[cannonId].isReadyToFire(): cannon = self.cannons[cannonId] toonId = cannon.getToonInsideId() - if toonId and not self.flyingToons.has_key(toonId): + if toonId and toonId not in self.flyingToons: self.flyingToons[toonId] = cannon.doId self.flyingToonCloudsHit[toonId] = 0 self.toonIdsToJellybeanRewards[toonId] = 0 @@ -90,7 +90,7 @@ def __handleFireCannon(self, cannonId, timeEnteredCannon): self.d_setCannonWillFire(cannonId, cannon.rotation, cannon.angle) else: - if self.cannons.has_key(cannonId): + if cannonId in self.cannons: self.notify.warning("__handleFireCannon failed self.cannons[%d].isReadyToFire() = False" % cannonId) cannon = self.cannons[cannonId] toonId = cannon.getToonInsideId() @@ -106,7 +106,7 @@ def _handleUnexpectedToonExit(self, toonId): """ Flying toon client exits, request cleanup. """ - if self.flyingToons.has_key(toonId): + if toonId in self.flyingToons: self.notify.warning("Avatar %s has exited unexpectedly." % toonId) # cannon_movie_force_exit will clean up the avatar on the client @@ -116,12 +116,12 @@ def _handleUnexpectedToonExit(self, toonId): DistributedPartyActivityAI._handleUnexpectedToonExit(self, toonId) def __cleanupFlyingToon(self, toonId): - if self.flyingToons.has_key(toonId): + if toonId in self.flyingToons: self.ignore(self.air.getAvatarExitEvent(toonId)) del self.flyingToons[toonId] del self.flyingToonCloudsHit[toonId] self._removeToon(toonId) - if self.toonIdsToJellybeanRewards.has_key(toonId): + if toonId in self.toonIdsToJellybeanRewards: del self.toonIdsToJellybeanRewards[toonId] #=============================================================================== @@ -133,7 +133,7 @@ def cloudsColorRequest(self): self.notify.debug("cloudsColorRequest") senderId = self.air.getAvatarIdFromSender() cloudColorList = [] - for key, value in self.cloudColors.items(): + for key, value in list(self.cloudColors.items()): cloudColorList.append([key, value[0], value[1], value[2]]) self.d_cloudsColorResponse(senderId, cloudColorList) @@ -147,7 +147,7 @@ def requestCloudHit(self, cloudNumber, r, g, b): self.notify.debug("requestCloudHit %d (%d, %d, %d)" % (cloudNumber, r, g, b)) senderId = self.air.getAvatarIdFromSender() - if self.flyingToonCloudsHit.has_key(senderId): + if senderId in self.flyingToonCloudsHit: self.flyingToonCloudsHit[senderId] += 1 addedJellyBeans = PartyGlobals.CannonJellyBeanReward if self.air.holidayManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_DAY): @@ -185,7 +185,7 @@ def setLanded(self, toonId): From the client, a toon has landed. Cleanup the toon and inform all clients. """ self.notify.debug("%s setLanded %s" % (self.doId, toonId)) - if self.flyingToons.has_key(toonId): + if toonId in self.flyingToons: cloudsHit = self.flyingToonCloudsHit[toonId] if cloudsHit: @@ -207,7 +207,7 @@ def isInActivity(self, avId): if avId in self.flyingToons: result = True else: - for cannon in self.cannons.values(): + for cannon in list(self.cannons.values()): if cannon.getToonInsideId() == avId: result = True break; diff --git a/toontown/src/parties/DistributedPartyCatchActivity.py b/toontown/src/parties/DistributedPartyCatchActivity.py index 108f0e97..ff151b42 100644 --- a/toontown/src/parties/DistributedPartyCatchActivity.py +++ b/toontown/src/parties/DistributedPartyCatchActivity.py @@ -154,25 +154,25 @@ def load(self): if __dev__: # log stats on drop rates for diff numbers of players - for o in xrange(3): - print {0: 'SPOTS PER PLAYER', + for o in range(3): + print({0: 'SPOTS PER PLAYER', 1: 'DROPS PER MINUTE PER SPOT DURING NORMAL DROP PERIOD', 2: 'DROPS PER MINUTE PER PLAYER DURING NORMAL DROP PERIOD', - }[o] - for i in xrange(1, self.FallRateCap_Players+10): + }[o]) + for i in range(1, self.FallRateCap_Players+10): self.defineConstants(forceNumPlayers=i) numDropLocations = self.DropRows * self.DropColumns numDropsPerMin = 60. / self.DropPeriod if o == 0: spotsPerPlayer = numDropLocations / float(i) - print '%2d PLAYERS: %s' % (i, spotsPerPlayer) + print('%2d PLAYERS: %s' % (i, spotsPerPlayer)) elif o == 1: numDropsPerMinPerSpot = numDropsPerMin / numDropLocations - print '%2d PLAYERS: %s' % (i, numDropsPerMinPerSpot) + print('%2d PLAYERS: %s' % (i, numDropsPerMinPerSpot)) else: if i > 0: numDropsPerMinPerPlayer = numDropsPerMin / i - print '%2d PLAYERS: %s' % (i, numDropsPerMinPerPlayer) + print('%2d PLAYERS: %s' % (i, numDropsPerMinPerPlayer)) # load resources and create objects here self.defineConstants() @@ -240,7 +240,7 @@ def load(self): 'watermelon' : .6, 'pineapple' : .45, } - if modelScales.has_key(objType.name): + if objType.name in modelScales: model.setScale(modelScales[objType.name]) # adjust the model if necessary @@ -295,8 +295,8 @@ def unload(self): del self.__textGen - for avId in self.toonSDs.keys(): - if self.toonSDs.has_key(avId): + for avId in list(self.toonSDs.keys()): + if avId in self.toonSDs: toonSD = self.toonSDs[avId] toonSD.unload() del self.toonSDs @@ -312,7 +312,7 @@ def unload(self): base.cr.parentMgr.unregisterParent(self._avatarNodePathParentToken) - for model in self.dropObjModels.values(): + for model in list(self.dropObjModels.values()): model.removeNode() del self.dropObjModels @@ -338,14 +338,14 @@ def joinRequestDenied(self, reason): base.cr.playGame.getPlace().fsm.request("walk") def handleToonJoined(self, toonId): - if not self.toonSDs.has_key(toonId): + if toonId not in self.toonSDs: toonSD = PartyCatchActivityToonSD(toonId, self) self.toonSDs[toonId] = toonSD toonSD.load() self.notify.debug("handleToonJoined : currentState = %s" % self.activityFSM.state) self.cr.doId2do[toonId].useLOD(500) if self.activityFSM.state == "Active": - if self.toonSDs.has_key(toonId): + if toonId in self.toonSDs: self.toonSDs[toonId].enter() if base.localAvatar.doId == toonId: base.localAvatar.b_setParent(self._avatarNodePathParentToken) @@ -353,14 +353,14 @@ def handleToonJoined(self, toonId): else: pass #self.cr.doId2do[toonId].reparentTo(self.avatarNodePath) - if self.toonSDs.has_key(toonId): + if toonId in self.toonSDs: self.toonSDs[toonId].fsm.request('rules') def handleToonExited(self, toonId): self.notify.debug("handleToonExited( toonId=%s )" % toonId) - if self.cr.doId2do.has_key(toonId): + if toonId in self.cr.doId2do: self.cr.doId2do[toonId].resetLOD() - if self.toonSDs.has_key(toonId): + if toonId in self.toonSDs: self.toonSDs[toonId].fsm.request("notPlaying") del self.toonSDs[toonId] @@ -448,7 +448,7 @@ def _toonExitedTree(self, collEntry): self._enteredTree = False if (hasattr(base.cr.playGame.getPlace(), 'fsm') and self.activityFSM.state == "Active" and self.isLocalToonInActivity()): - if self.toonSDs.has_key(base.localAvatar.doId): + if base.localAvatar.doId in self.toonSDs: self.takeLocalAvatarOutOfActivity() self.toonSDs[base.localAvatar.doId].fsm.request("notPlaying") self.d_toonExitDemand() @@ -457,7 +457,7 @@ def setToonsPlaying(self, toonIds): self.notify.info('setToonsPlaying(%s)' % (toonIds, )) DistributedPartyActivity.setToonsPlaying(self, toonIds) if self.isLocalToonInActivity() and (base.localAvatar.doId not in toonIds): - if self.toonSDs.has_key(base.localAvatar.doId): + if base.localAvatar.doId in self.toonSDs: self.takeLocalAvatarOutOfActivity() self.toonSDs[base.localAvatar.doId].fsm.request("notPlaying") @@ -616,7 +616,7 @@ def handleToonDisabled(self, avId): DistributedPartyCatchActivity.notify.debug("handleToonDisabled") DistributedPartyCatchActivity.notify.debug("avatar " + str(avId) + " disabled") # clean up any references to the disabled avatar before he disappears - if self.toonSDs.has_key(avId): + if avId in self.toonSDs: self.toonSDs[avId].exit(unexpectedExit=True) del self.toonSDs[avId] @@ -744,7 +744,7 @@ def __handleCatch(self, generation, objNum): def showCatch(self, avId, generation, objNum): """ show the result of the catch action """ - if not self.toonSDs.has_key(avId): + if avId not in self.toonSDs: return isLocal = (avId == base.localAvatar.doId) if generation not in self._id2gen: @@ -755,7 +755,7 @@ def showCatch(self, avId, generation, objNum): objType = PartyGlobals.Name2DropObjectType[objName] if objType.good: # have we already shown this fruit being eaten? - if not self._id2gen[generation].droppedObjCaught.has_key(objNum): + if objNum not in self._id2gen[generation].droppedObjCaught: if isLocal: base.playSfx(self.sndGoodCatch) @@ -809,12 +809,12 @@ def finishDropInterval(self, generation, objNum): number 'objNum' has finished; if interval already finished, does nothing """ if hasattr(self, "dropIntervals"): - if self.dropIntervals.has_key((generation, objNum)): + if (generation, objNum) in self.dropIntervals: self.dropIntervals[(generation, objNum)].finish() def finishAllDropIntervals(self): if hasattr(self, "dropIntervals"): - for dropInterval in self.dropIntervals.values(): + for dropInterval in list(self.dropIntervals.values()): dropInterval.finish() def setGenerations(self, generations): @@ -830,7 +830,7 @@ def setGenerations(self, generations): gen2nt[id] = timestamp32 gen2np[id] = numPlayers # prune removed generations - ids = self._id2gen.keys() + ids = list(self._id2gen.keys()) for id in ids: if id not in gen2t: self._removeGeneration(id) @@ -1175,7 +1175,7 @@ def finishIdle(self): def startActive(self): DistributedPartyCatchActivity.notify.debug("startActive") for avId in self.toonIds: - if self.toonSDs.has_key(avId): + if avId in self.toonSDs: toonSD = self.toonSDs[avId] toonSD.enter() toonSD.fsm.request('normal') @@ -1233,7 +1233,7 @@ def finishActive(self): if base.localAvatar.doId in self.toonIds: self.takeLocalAvatarOutOfActivity() # get rid of the drop intervals - for ival in self.dropIntervals.values(): + for ival in list(self.dropIntervals.values()): ival.finish() del self.dropIntervals @@ -1242,7 +1242,7 @@ def startConclusion(self): DistributedPartyCatchActivity.notify.debug("startConclusion") for avId in self.toonIds: - if self.toonSDs.has_key(avId): + if avId in self.toonSDs: toonSD = self.toonSDs[avId] toonSD.fsm.request('notPlaying') diff --git a/toontown/src/parties/DistributedPartyCatchActivityAI.py b/toontown/src/parties/DistributedPartyCatchActivityAI.py index fae99edc..f3f8a04c 100644 --- a/toontown/src/parties/DistributedPartyCatchActivityAI.py +++ b/toontown/src/parties/DistributedPartyCatchActivityAI.py @@ -65,7 +65,7 @@ def _handlePartyEnded(self): # since this activity lasts for the entire party, end the activity when the party ends # (don't wait until players get kicked out of the party) # make sure everyone gets their reward - for toonId, reward in self.toonIdsToScores.items(): + for toonId, reward in list(self.toonIdsToScores.items()): reward = self.toonIdsToScores[toonId] if reward > PartyGlobals.CatchMaxTotalReward: # put a cap so we don't go beyond something ridiculous @@ -87,7 +87,7 @@ def _setUpNextGenScheduleTask(self, startT, delay=None): delay, Functor(self._scheduleNextGeneration, startT), 'schedNextGen-%s-%s' % (self.doId, nextGen)) # cancel any pending generations that start after this one - for gen, item in self._schedTasks.items(): + for gen, item in list(self._schedTasks.items()): if item[0] > self._lastGenerationStartTime: taskMgr.remove(item[1]) del self._schedTasks[gen] @@ -101,7 +101,7 @@ def _scheduleNextGeneration(self, startT, task=None): tCutoff = (globalClock.getFrameTime() - self.activityStartTime) - self.generationDuration # add a minute of wiggle room for laggy client connections tCutoff -= 60. - genIndices = self._id2gen.keys() + genIndices = list(self._id2gen.keys()) genIndices.sort() for genIndex in genIndices: timestamp = self._id2gen[genIndex].startTime @@ -128,7 +128,7 @@ def _scheduleNextGeneration(self, startT, task=None): # create the data list for the network generations = [] - genIndices = self._id2gen.keys() + genIndices = list(self._id2gen.keys()) genIndices.sort() for genIndex in genIndices: timestamp = self._id2gen[genIndex].startTime + self.activityStartTime @@ -209,7 +209,7 @@ def toonExitDemand(self): def sendToonJoinResponse(self, toonId, joined): # since toons can join mid-activity, make sure to add to scores dictionary if needed if joined: - if not self.toonIdsToScores.has_key(toonId): + if toonId not in self.toonIdsToScores: self.toonIdsToScores[toonId] = 0 DistributedPartyActivityAI.sendToonJoinResponse(self, toonId, joined) # number of players changed, start a new generation of drops @@ -224,7 +224,7 @@ def _handleUnexpectedToonExit(self, toonId): DistributedPartyActivityAI._handleUnexpectedToonExit(self, toonId) if toonId in self._playerIds: self._playerIds.remove(toonId) - if self.toonIdsToScores.has_key(toonId): + if toonId in self.toonIdsToScores: del self.toonIdsToScores[toonId] # number of players changed, start a new generation of drops self._setUpNextGenScheduleTask(globalClock.getRealTime() - self.activityStartTime) diff --git a/toontown/src/parties/DistributedPartyCatchActivityBase.py b/toontown/src/parties/DistributedPartyCatchActivityBase.py index 35eb2dcd..0cb04e2c 100644 --- a/toontown/src/parties/DistributedPartyCatchActivityBase.py +++ b/toontown/src/parties/DistributedPartyCatchActivityBase.py @@ -2,6 +2,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.minigame.DropScheduler import ThreePhaseDropScheduler from toontown.parties import PartyGlobals +from functools import reduce class DistributedPartyCatchActivityBase: notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPartyCatchActivityBase") @@ -163,8 +164,8 @@ def scaledDimensions(widthHeight, scale): 'anvil' : 1, } # normalize the probabilities to [0..1] - probSum = reduce(lambda x, y: x + y, typeProbs.values()) - for key in typeProbs.keys(): + probSum = reduce(lambda x, y: x + y, list(typeProbs.values())) + for key in list(typeProbs.keys()): typeProbs[key] = float(typeProbs[key]) / probSum scheduler = ThreePhaseDropScheduler( diff --git a/toontown/src/parties/DistributedPartyCogActivity.py b/toontown/src/parties/DistributedPartyCogActivity.py index 376c92e2..407c2f92 100644 --- a/toontown/src/parties/DistributedPartyCogActivity.py +++ b/toontown/src/parties/DistributedPartyCogActivity.py @@ -10,9 +10,9 @@ from toontown.toonbase import TTLocalizer -import PartyGlobals -from DistributedPartyTeamActivity import DistributedPartyTeamActivity -from PartyCogActivity import PartyCogActivity +from . import PartyGlobals +from .DistributedPartyTeamActivity import DistributedPartyTeamActivity +from .PartyCogActivity import PartyCogActivity from toontown.toon import GMUtils class DistributedPartyCogActivity(DistributedPartyTeamActivity): diff --git a/toontown/src/parties/DistributedPartyCogActivityAI.py b/toontown/src/parties/DistributedPartyCogActivityAI.py index 22dc531f..3a664260 100644 --- a/toontown/src/parties/DistributedPartyCogActivityAI.py +++ b/toontown/src/parties/DistributedPartyCogActivityAI.py @@ -8,9 +8,9 @@ from toontown.toonbase import TTLocalizer -from DistributedPartyTeamActivityAI import DistributedPartyTeamActivityAI -import PartyGlobals -import PartyCogUtils +from .DistributedPartyTeamActivityAI import DistributedPartyTeamActivityAI +from . import PartyGlobals +from . import PartyCogUtils class DistributedPartyCogActivityAI(DistributedPartyTeamActivityAI): notify = directNotify.newCategory("DistributedPartyCogActivityAI") @@ -103,7 +103,7 @@ def _resetScores(self): self.score = [0, 0] def _addToToonScore(self, toonId, points): - if self.toonScore.has_key(toonId): + if toonId in self.toonScore: self.toonScore[toonId] += points def _addToonToTeam(self, toonId, team): @@ -112,15 +112,15 @@ def _addToonToTeam(self, toonId, team): def _removeToonFromTeam(self, toonId, team): if DistributedPartyTeamActivityAI._removeToonFromTeam(self, toonId, team) and \ - self.toonScore.has_key(toonId): + toonId in self.toonScore: del self.toonScore[toonId] def _findNewHighScore(self): """Check to see if a new high score has been made, and broadcast""" highScoreFound = False - for toonId, score in self.toonScore.items(): - if score > self.highScore[1] and self.air.doId2do.has_key(toonId): + for toonId, score in list(self.toonScore.items()): + if score > self.highScore[1] and toonId in self.air.doId2do: self.highScore = (self.air.doId2do[toonId].getName(), score) highScoreFound = True diff --git a/toontown/src/parties/DistributedPartyDance20Activity.py b/toontown/src/parties/DistributedPartyDance20Activity.py index c76a65fe..d7c00301 100644 --- a/toontown/src/parties/DistributedPartyDance20Activity.py +++ b/toontown/src/parties/DistributedPartyDance20Activity.py @@ -36,7 +36,7 @@ def load(self): correctBall = self.danceFloor.find("**/discoBall_20") if not correctBall.isEmpty(): numChildren = parentGroup.getNumChildren() - for i in xrange(numChildren): + for i in range(numChildren): child = parentGroup.getChild(i) if child != correctBall: child.hide() diff --git a/toontown/src/parties/DistributedPartyDanceActivity.py b/toontown/src/parties/DistributedPartyDanceActivity.py index 5c591756..6d01e219 100644 --- a/toontown/src/parties/DistributedPartyDanceActivity.py +++ b/toontown/src/parties/DistributedPartyDanceActivity.py @@ -37,7 +37,7 @@ def load(self): origBall = self.danceFloor.find("**/discoBall_mesh_orig") if not correctBall.isEmpty(): numChildren = parentGroup.getNumChildren() - for i in xrange(numChildren): + for i in range(numChildren): child = parentGroup.getChild(i) if child != correctBall: child.hide() diff --git a/toontown/src/parties/DistributedPartyDanceActivityBase.py b/toontown/src/parties/DistributedPartyDanceActivityBase.py index faf8401a..7cc3ed2c 100644 --- a/toontown/src/parties/DistributedPartyDanceActivityBase.py +++ b/toontown/src/parties/DistributedPartyDanceActivityBase.py @@ -66,7 +66,7 @@ def generateInit(self): self.notify.debug("generateInit") DistributedPartyActivity.generateInit(self) - self.keyCodes = KeyCodes(patterns = self.dancePatternToAnims.keys()) + self.keyCodes = KeyCodes(patterns = list(self.dancePatternToAnims.keys())) self.gui = KeyCodesGui(self.keyCodes) self.__initOrthoWalk() self.activityFSM = DanceActivityFSM(self) @@ -141,7 +141,7 @@ def unload(self): self.__destroyOrthoWalk() - for toonId in self.dancingToonFSMs.keys(): + for toonId in list(self.dancingToonFSMs.keys()): self.dancingToonFSMs[toonId].destroy() del self.dancingToonFSMs[toonId] del self.dancingToonFSMs @@ -162,7 +162,7 @@ def handleToonDisabled(self, toonId): """This will be called if an avatar exits unexpectedly""" self.notify.debug("handleToonDisabled avatar " + str(toonId) + " disabled") # clean up any references to the disabled avatar before he disappears - if self.dancingToonFSMs.has_key(toonId): + if toonId in self.dancingToonFSMs: self.dancingToonFSMs[toonId].request("cleanup") self.dancingToonFSMs[toonId].destroy() del self.dancingToonFSMs[toonId] @@ -293,7 +293,7 @@ def handleToonJoined(self, toonId, h): Called when toon is allowed to enter dance floor. """ self.notify.debug("handleToonJoined( toonId=%d, h=%.2f )" %(toonId, h)) - if base.cr.doId2do.has_key(toonId): + if toonId in base.cr.doId2do: toonFSM = PartyDanceActivityToonFSM(toonId, self, h) toonFSM.request("Init") self.dancingToonFSMs[toonId] = toonFSM @@ -324,7 +324,7 @@ def handleRulesDone(self): self.finishRules() def __localEnableControls(self): - if not self.dancingToonFSMs.has_key(base.localAvatar.doId): + if base.localAvatar.doId not in self.dancingToonFSMs: self.notify.debug("no dancing FSM for local avatar, not enabling controls") return self.accept(KeyCodes.PATTERN_MATCH_EVENT, self.__doDanceMove) @@ -514,11 +514,11 @@ def setDancingToonState(self, toonId, state, anim): """ From AI, it sets a dancing toon's FSM """ - if toonId != base.localAvatar.doId and self.dancingToonFSMs.has_key(toonId): + if toonId != base.localAvatar.doId and toonId in self.dancingToonFSMs: self._requestToonState(toonId, state, anim) def _requestToonState(self, toonId, state, anim): - if self.dancingToonFSMs.has_key(toonId): + if toonId in self.dancingToonFSMs: state = ToonDancingStates.getString(state) curState = self.dancingToonFSMs[toonId].getCurrentOrNextState() assert(self.notify.debug("requestToonState toonId=%s, state=%s, anim=%s" % (toonId, state, anim))) diff --git a/toontown/src/parties/DistributedPartyDanceActivityBaseAI.py b/toontown/src/parties/DistributedPartyDanceActivityBaseAI.py index 3d00ec00..a71f2b46 100644 --- a/toontown/src/parties/DistributedPartyDanceActivityBaseAI.py +++ b/toontown/src/parties/DistributedPartyDanceActivityBaseAI.py @@ -103,7 +103,7 @@ def updateDancingToon(self, state, anim): Gets from client when a dancing toon performs a dance move. """ senderId = self.air.getAvatarIdFromSender() - if anim != "" and anim not in self.dancePatternToAnims.values(): + if anim != "" and anim not in list(self.dancePatternToAnims.values()): # TODO: Log suspicious behavior? return self.d_setDancingToonState(senderId, state, anim) diff --git a/toontown/src/parties/DistributedPartyFireworksActivity.py b/toontown/src/parties/DistributedPartyFireworksActivity.py index f8bb7773..4e37ecb0 100644 --- a/toontown/src/parties/DistributedPartyFireworksActivity.py +++ b/toontown/src/parties/DistributedPartyFireworksActivity.py @@ -21,18 +21,18 @@ from toontown.toonbase import TTLocalizer # Party imports -from PartyGlobals import FireworkShows -from PartyGlobals import ActivityIds -from PartyGlobals import ActivityTypes -from PartyGlobals import FireworksStartedEvent -from PartyGlobals import FireworksFinishedEvent -from PartyGlobals import FireworksPostLaunchDelay -from PartyGlobals import RocketSoundDelay -from PartyGlobals import RocketDirectionDelay -from DistributedPartyActivity import DistributedPartyActivity -from activityFSMs import FireworksActivityFSM +from .PartyGlobals import FireworkShows +from .PartyGlobals import ActivityIds +from .PartyGlobals import ActivityTypes +from .PartyGlobals import FireworksStartedEvent +from .PartyGlobals import FireworksFinishedEvent +from .PartyGlobals import FireworksPostLaunchDelay +from .PartyGlobals import RocketSoundDelay +from .PartyGlobals import RocketDirectionDelay +from .DistributedPartyActivity import DistributedPartyActivity +from .activityFSMs import FireworksActivityFSM -import PartyGlobals +from . import PartyGlobals class DistributedPartyFireworksActivity(DistributedPartyActivity, FireworkShowMixin): diff --git a/toontown/src/parties/DistributedPartyFireworksActivityAI.py b/toontown/src/parties/DistributedPartyFireworksActivityAI.py index fa23cd93..92c7da84 100644 --- a/toontown/src/parties/DistributedPartyFireworksActivityAI.py +++ b/toontown/src/parties/DistributedPartyFireworksActivityAI.py @@ -14,9 +14,9 @@ from toontown.effects.FireworkShow import FireworkShow # parties imports -import PartyGlobals -from DistributedPartyActivityAI import DistributedPartyActivityAI -from activityFSMs import FireworksActivityFSM +from . import PartyGlobals +from .DistributedPartyActivityAI import DistributedPartyActivityAI +from .activityFSMs import FireworksActivityFSM class DistributedPartyFireworksActivityAI(DistributedPartyActivityAI): diff --git a/toontown/src/parties/DistributedPartyJukeboxActivityBaseAI.py b/toontown/src/parties/DistributedPartyJukeboxActivityBaseAI.py index ce125ba7..8d10e2c1 100644 --- a/toontown/src/parties/DistributedPartyJukeboxActivityBaseAI.py +++ b/toontown/src/parties/DistributedPartyJukeboxActivityBaseAI.py @@ -250,13 +250,13 @@ def __handleTimeoutTask(self, task): def getRandomMusicInfo(self, phase=13): if phase == -1: # Get random phase - keys = self.phaseToMusicData.keys() + keys = list(self.phaseToMusicData.keys()) # bias random music towards the new party songs keys += [13,13,13,] phase = random.choice(keys) # this is random.choice # From that phase, get random filename - values = self.phaseToMusicData[phase].keys() + values = list(self.phaseToMusicData[phase].keys()) filename = values[randint(0, len(values) - 1)] return (phase, filename) diff --git a/toontown/src/parties/DistributedPartyTeamActivityAI.py b/toontown/src/parties/DistributedPartyTeamActivityAI.py index 0b5ba9ce..09ef6d69 100644 --- a/toontown/src/parties/DistributedPartyTeamActivityAI.py +++ b/toontown/src/parties/DistributedPartyTeamActivityAI.py @@ -692,7 +692,7 @@ def finishConclusion(self): self.cleanupRequestLater() - for toonId, reward in self.toonIdsToJellybeanRewards.items(): + for toonId, reward in list(self.toonIdsToJellybeanRewards.items()): if reward > 0: self.sendUpdateToAvatarId( toonId, diff --git a/toontown/src/parties/DistributedPartyTrampolineActivity.py b/toontown/src/parties/DistributedPartyTrampolineActivity.py index 92d5bb07..0d964366 100644 --- a/toontown/src/parties/DistributedPartyTrampolineActivity.py +++ b/toontown/src/parties/DistributedPartyTrampolineActivity.py @@ -434,7 +434,7 @@ def setupJellyBeans( self ): beanAnim.loop() self.beanAnims.append( beanAnim ) self.beanDetails.append( (height, bean, guiBean, beanAnim) ) - self.beansToCollect = range( self.numJellyBeans ) + self.beansToCollect = list(range( self.numJellyBeans)) def cleanupJellyBeans( self ): for bean in self.beans: diff --git a/toontown/src/parties/DistributedPartyTugOfWarActivity.py b/toontown/src/parties/DistributedPartyTugOfWarActivity.py index 384e54e6..d103d016 100644 --- a/toontown/src/parties/DistributedPartyTugOfWarActivity.py +++ b/toontown/src/parties/DistributedPartyTugOfWarActivity.py @@ -32,9 +32,9 @@ from toontown.minigame.MinigamePowerMeter import MinigamePowerMeter from toontown.minigame.ArrowKeys import ArrowKeys -import PartyGlobals -import PartyUtils -from DistributedPartyTeamActivity import DistributedPartyTeamActivity +from . import PartyGlobals +from . import PartyUtils +from .DistributedPartyTeamActivity import DistributedPartyTeamActivity class DistributedPartyTugOfWarActivity(DistributedPartyTeamActivity): @@ -219,7 +219,7 @@ def handleToonDisabled(self, toonId): """ assert(self.notify.debug("handleToonDisabled( toonId:%d )" %toonId )) - if self.toonIdsToAnimIntervals.has_key(toonId): + if toonId in self.toonIdsToAnimIntervals: if self.toonIdsToAnimIntervals[toonId]: if self.toonIdsToAnimIntervals[toonId].isPlaying(): self.toonIdsToAnimIntervals[toonId].finish() @@ -669,7 +669,7 @@ def startConclusion(self, losingTeam): if self.getAvatar(toonId): self.getAvatar(toonId).loop("victory") - for ival in self.toonIdsToAnimIntervals.values(): + for ival in list(self.toonIdsToAnimIntervals.values()): if ival is not None: ival.finish() @@ -873,7 +873,7 @@ def setAnimState(self, toonId, keyRate): if self.activityFSM.state != "Active": return toon = self.getAvatar(toonId) - if not self.toonIdsToIsPullingFlags.has_key(toonId): + if toonId not in self.toonIdsToIsPullingFlags: if self.getTeam(toonId) == None: self.notify.warning("setAnimState called with toonId (%d) that wasn't in self.toonIds" %toonId) return diff --git a/toontown/src/parties/DistributedPartyTugOfWarActivityAI.py b/toontown/src/parties/DistributedPartyTugOfWarActivityAI.py index 875021fe..f9700e80 100644 --- a/toontown/src/parties/DistributedPartyTugOfWarActivityAI.py +++ b/toontown/src/parties/DistributedPartyTugOfWarActivityAI.py @@ -7,8 +7,8 @@ # - Nov 2009 Migrated to DistributedPartyTeamActivityAI #------------------------------------------------------------------------------- from toontown.toonbase import ToontownGlobals -from DistributedPartyTeamActivityAI import DistributedPartyTeamActivityAI -import PartyGlobals +from .DistributedPartyTeamActivityAI import DistributedPartyTeamActivityAI +from . import PartyGlobals class DistributedPartyTugOfWarActivityAI(DistributedPartyTeamActivityAI): notify = directNotify.newCategory("DistributedPartyTugOfWarActivityAI") @@ -86,7 +86,7 @@ def reportKeyRateForce(self, keyRate, force): toonId = self.air.getAvatarIdFromSender() self.toonIdsToKeyRates[toonId] = keyRate # sometimes the game has cleaned up and we get an old update from a client - if self.toonIdsToTeams.has_key(toonId): + if toonId in self.toonIdsToTeams: self.forceDictList[self.toonIdsToTeams[toonId]][toonId] = force # send the keyrate for this toonId to the clients so they can update @@ -110,7 +110,7 @@ def calculateOffset(self): forceTotals = [0.0, 0.0] # left team force, right team force # total up all the toon forces on each side for teamIndex in [0,1]: - for x in self.forceDictList[teamIndex].values(): + for x in list(self.forceDictList[teamIndex].values()): forceTotals[teamIndex] += x deltaF = forceTotals[1] - forceTotals[0] diff --git a/toontown/src/parties/JukeboxGui.py b/toontown/src/parties/JukeboxGui.py index 5a7a6714..69c9432a 100644 --- a/toontown/src/parties/JukeboxGui.py +++ b/toontown/src/parties/JukeboxGui.py @@ -208,14 +208,14 @@ def enable(self, timer=0): # Add the new party songs first, these are in Phase 13 phase = 13 tunes = self.phaseToMusicData[13] - for filename, info, in tunes.items(): + for filename, info, in list(tunes.items()): self.addToSongList(info[0], phase, filename, info[1]) # Add the songs automatically: - for phase, tunes in self.phaseToMusicData.items(): + for phase, tunes in list(self.phaseToMusicData.items()): if phase == 13: continue - for filename, info, in tunes.items(): + for filename, info, in list(tunes.items()): self.addToSongList(info[0], phase, filename, info[1]) self._windowFrame.show() diff --git a/toontown/src/parties/KeyCodes.py b/toontown/src/parties/KeyCodes.py index d5c0f92f..f565bf84 100644 --- a/toontown/src/parties/KeyCodes.py +++ b/toontown/src/parties/KeyCodes.py @@ -142,7 +142,7 @@ def __enableControls(self): """ Enables keys that will be used to create patterns. """ - for key in self._keyMap.keys(): + for key in list(self._keyMap.keys()): self.__acceptKeyDown(key) self.__acceptKeyUp(key) diff --git a/toontown/src/parties/Party.py b/toontown/src/parties/Party.py index c743043f..952355c1 100644 --- a/toontown/src/parties/Party.py +++ b/toontown/src/parties/Party.py @@ -163,7 +163,7 @@ def unload(self): self.partyPlanner.close() del self.partyPlanner if hasattr(base, "distributedParty"): - if base.cr.doId2do.has_key(base.distributedParty.partyInfo.hostId): + if base.distributedParty.partyInfo.hostId in base.cr.doId2do: host = base.cr.doId2do[base.distributedParty.partyInfo.hostId] if hasattr(host, "gmIcon") and host.gmIcon: host.removeGMIcon() @@ -278,7 +278,7 @@ def enterTeleportIn(self, requestStatus): # DistributedParty in delete. if hasattr(base, "distributedParty"): x,y,z = base.distributedParty.getClearSquarePos() - if base.cr.doId2do.has_key(base.distributedParty.partyInfo.hostId): + if base.distributedParty.partyInfo.hostId in base.cr.doId2do: host = base.cr.doId2do[base.distributedParty.partyInfo.hostId] if hasattr(host, "gmIcon") and host.gmIcon: host.removeGMIcon() diff --git a/toontown/src/parties/PartyCog.py b/toontown/src/parties/PartyCog.py index 6202b563..cbff5239 100644 --- a/toontown/src/parties/PartyCog.py +++ b/toontown/src/parties/PartyCog.py @@ -23,7 +23,7 @@ from toontown.battle.BattleProps import globalPropPool from toontown.battle.BattleSounds import globalBattleSoundCache -import PartyGlobals +from . import PartyGlobals class PartyCogManager: diff --git a/toontown/src/parties/PartyCogActivity.py b/toontown/src/parties/PartyCogActivity.py index 6d12eff5..4cffdb46 100644 --- a/toontown/src/parties/PartyCogActivity.py +++ b/toontown/src/parties/PartyCogActivity.py @@ -21,12 +21,12 @@ from toontown.toonbase import TTLocalizer from toontown.toonbase.ToontownTimer import ToontownTimer -import PartyGlobals -import PartyCogUtils -from PartyCog import PartyCogManager -from PartyCogActivityPlayer import PartyCogActivityPlayer -from PartyCogActivityPlayer import PartyCogActivityLocalPlayer -from StretchingArrow import StretchingArrow +from . import PartyGlobals +from . import PartyCogUtils +from .PartyCog import PartyCogManager +from .PartyCogActivityPlayer import PartyCogActivityPlayer +from .PartyCogActivityPlayer import PartyCogActivityLocalPlayer +from .StretchingArrow import StretchingArrow class PartyCogActivity(DirectObject): notify = directNotify.newCategory("PartyCogActivity") @@ -276,7 +276,7 @@ def unload(self): self.distanceLabels = None if len(self.players): - for player in self.players.values(): + for player in list(self.players.values()): player.disable() player.destroy() @@ -300,7 +300,7 @@ def unload(self): self.arena = None - for ival in self.toonPieTracks.values(): + for ival in list(self.toonPieTracks.values()): if ival is not None and ival.isPlaying(): ival.finish() self.toonPieTracks = {} @@ -311,7 +311,7 @@ def unload(self): self.pieIvals = [] self.toonIdsToAnimIntervals = {} - for eventName in self.toonPieEventNames.values(): + for eventName in list(self.toonPieEventNames.values()): self.ignore(eventName) self.toonPieEventNames = {} @@ -480,7 +480,7 @@ def handleToonSwitchedTeams(self, toon): def handleToonShifted(self, toon): toonId = toon.doId - if self.players.has_key(toonId): + if toonId in self.players: player = self.players[toonId] spot = self.activity.getIndex(toonId, player.team) @@ -547,7 +547,7 @@ def startActivity(self, timestamp): self.player.resetScore() self.hideTeamFlags(self.player.team) - for player in self.players.values(): + for player in list(self.players.values()): self.finishToonIval(player.toon.doId) player.enable() @@ -560,10 +560,10 @@ def startActivity(self, timestamp): self.pieIvals = [] def stopActivity(self): - for player in self.players.values(): + for player in list(self.players.values()): player.disable() - for eventName in self.toonPieEventNames.values(): + for eventName in list(self.toonPieEventNames.values()): self.ignore(eventName) self.toonPieEventNames.clear() diff --git a/toontown/src/parties/PartyCogActivityGui.py b/toontown/src/parties/PartyCogActivityGui.py index 7786f302..1d68f94d 100644 --- a/toontown/src/parties/PartyCogActivityGui.py +++ b/toontown/src/parties/PartyCogActivityGui.py @@ -19,7 +19,7 @@ from toontown.toonbase import ToontownIntervals from toontown.toonbase import TTLocalizer -import PartyGlobals +from . import PartyGlobals class PartyCogTrackerGui: def __init__(self): diff --git a/toontown/src/parties/PartyCogActivityPlayer.py b/toontown/src/parties/PartyCogActivityPlayer.py index c18bdd51..4453fa95 100644 --- a/toontown/src/parties/PartyCogActivityPlayer.py +++ b/toontown/src/parties/PartyCogActivityPlayer.py @@ -20,11 +20,11 @@ from toontown.battle.BattleProps import globalPropPool from toontown.battle.BattleSounds import globalBattleSoundCache -import PartyGlobals -from PartyCogActivityInput import PartyCogActivityInput -from PartyCogActivityGui import PartyCogActivityGui -from PartyCogUtils import CameraManager -from PartyCogUtils import StrafingControl +from . import PartyGlobals +from .PartyCogActivityInput import PartyCogActivityInput +from .PartyCogActivityGui import PartyCogActivityGui +from .PartyCogUtils import CameraManager +from .PartyCogUtils import StrafingControl UPDATE_TASK_NAME = "PartyCogActivityLocalPlayer_UpdateTask" THROW_PIE_LIMIT_TIME = 0.2 diff --git a/toontown/src/parties/PartyCogUtils.py b/toontown/src/parties/PartyCogUtils.py index 9edef2a8..f1b3208b 100644 --- a/toontown/src/parties/PartyCogUtils.py +++ b/toontown/src/parties/PartyCogUtils.py @@ -8,7 +8,7 @@ from pandac.PandaModules import NodePath, Point3 -import PartyGlobals +from . import PartyGlobals inverse_e = 1.0/math.e diff --git a/toontown/src/parties/PartyGlobals.py b/toontown/src/parties/PartyGlobals.py index ad2991fe..473ade15 100644 --- a/toontown/src/parties/PartyGlobals.py +++ b/toontown/src/parties/PartyGlobals.py @@ -3,7 +3,7 @@ # Created: Aug 2008 # # Purpose: Central location for Toontown Parties' variables -#------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- from pandac.PandaModules import BitMask32 from pandac.PandaModules import Point3, VBase4 @@ -11,6 +11,8 @@ from toontown.toonbase import TTLocalizer +import enum + # This event is dispatched when # the DistributedPartyManager kicks a toon back to the playground KICK_TO_PLAYGROUND_EVENT = "parties_kickToPlayground" @@ -75,14 +77,14 @@ PartyEditorTrashBounds = ((-0.16, -0.38), (-0.05, -0.56)) -ActivityRequestStatus = PythonUtil.Enum( +ActivityRequestStatus = enum.IntEnum("ActivityRequestStatus", ( "Joining", "Exiting", ), ) -InviteStatus = PythonUtil.Enum( +InviteStatus = enum.IntEnum("InviteStatus", ( "NotRead", "ReadButNotReplied", @@ -91,7 +93,7 @@ ), ) -InviteTheme = PythonUtil.Enum( +InviteTheme = enum.IntEnum("InviteTheme", ( "Birthday", "GenericMale", @@ -100,9 +102,9 @@ "Valentoons", "VictoryParty", ), -) +start=0) -PartyStatus = PythonUtil.Enum( +PartyStatus = enum.IntEnum("PartyStatus", ( "Pending", # party's start time is still in the future "Cancelled", # user cancelled this party @@ -110,22 +112,22 @@ "CanStart", # party can start, time is good, go button hasn't been hit yet "Started", # Party has started "NeverStarted", # End time has passed, party was never started - ) -) + ), +start=0) # TODO For all error codes add differentiation between # the different ways validation and database errors can fail -AddPartyErrorCode = PythonUtil.Enum( +AddPartyErrorCode = enum.IntEnum("AddPartyErrorCode", ( "AllOk", "ValidationError", "DatabaseError", - "TooManyHostedParties", + "TooManyHostedParties", ), ) # used by both changePrivate and changePartyStatus -ChangePartyFieldErrorCode = PythonUtil.Enum( +ChangePartyFieldErrorCode = enum.IntEnum("ChangePartyFieldErrorCode", ( "AllOk", "ValidationError", @@ -134,7 +136,7 @@ ), ) -ActivityTypes = PythonUtil.Enum( +ActivityTypes = enum.IntEnum("ActivityTypes", ( "HostInitiated", "GuestInitiated", @@ -143,7 +145,7 @@ ) # reasons why a request to join a party from the party gate can fail -PartyGateDenialReasons = PythonUtil.Enum( +PartyGateDenialReasons = enum.IntEnum("PartyGateDenialReasons", ( "Unavailable", "Full", @@ -151,7 +153,7 @@ ) # Note : If this enum changes, TTLocalizer PartyActivityNameDict must change too -ActivityIds = PythonUtil.Enum( +ActivityIds = enum.IntEnum("ActivityIds", ( "PartyJukebox", "PartyCannon", @@ -186,7 +188,7 @@ assert (len(PartyEditorActivityOrder) == len(ActivityIds)) - + # a list of activity ids which we are advertising but not letting people buy UnreleasedActivityIds = ( #ActivityIds.PartyTugOfWar, @@ -212,7 +214,7 @@ ActivityIds.PartyTrampoline, # replaced by PartyVictoryTrampoline ]) -DecorationIds = PythonUtil.Enum( +DecorationIds = enum.IntEnum("DecorationIds", ( "BalloonAnvil", "BalloonStage", @@ -242,7 +244,7 @@ # Decoration sound attributes DECORATION_VOLUME = 1.0 DECORATION_CUTOFF = 45 - + # Decoration IDs that should be available only for victory parties. VictoryPartyDecorationIds = frozenset([ DecorationIds.Hydra, @@ -267,7 +269,7 @@ #DecorationIds.Pinwheel ) -GoToPartyStatus = PythonUtil.Enum( +GoToPartyStatus = enum.IntEnum("GoToPartyStatus", ( "AllowedToGo", "PartyFull", @@ -328,7 +330,7 @@ "limitPerParty" : 1, "paidOnly" : False, "gridAsset" : "PartyJukebox_activity_1x1", - }, + }, ActivityIds.PartyCannon : { "cost" : int( 50 *PartyCostMultiplier), "gridsize" : (1,1), @@ -384,7 +386,7 @@ "limitPerParty" : 1, "paidOnly" : True, "gridAsset" : "PartyDance_activity_3x3", - }, + }, ActivityIds.PartyTugOfWar : { "cost" : int(200 * PartyCostMultiplier), "gridsize" : (4,4), @@ -420,7 +422,7 @@ "numberPerPurchase" : 1, "limitPerParty" : 5, "paidOnly" : False, - #"gridAsset" : "PartyDance_activity_3x3", + #"gridAsset" : "PartyDance_activity_3x3", "gridAsset" : "decoration_propStage_2x2", } else: @@ -440,13 +442,13 @@ DefaultRulesTimeout = 10.0 # why a join or exit request is denied -DenialReasons = PythonUtil.Enum( +DenialReasons = enum.IntEnum("DenialReasons", ( "Default", "Full", "SilentFail", ), - start = 0, + start=0, ) #=============================================================================== @@ -457,7 +459,7 @@ # ToontownGlobals, as both are used in effects/FireworkShows as keys into the # shows dictionary -FireworkShows = PythonUtil.Enum( +FireworkShows = enum.IntEnum("FireworkShows", ( "Summer", ), @@ -482,7 +484,7 @@ # Distributed Party Team Activity #============================================================================== -TeamActivityTeams = PythonUtil.Enum( +TeamActivityTeams = enum.IntEnum("TeamActivityTeams", ( "LeftTeam", "RightTeam", @@ -494,14 +496,14 @@ TeamActivityTextScale = 0.135 # How long it counts down waiting for more players before it begins -TeamActivityStartDelay = 8.0 +TeamActivityStartDelay = 8.0 TeamActivityDefaultMinPlayersPerTeam = 1 TeamActivityDefaultMaxPlayersPerTeam = 4 TeamActivityDefaultDuration = 60.0 # How long does the tallying up results lasts -TeamActivityDefaultConclusionDuration = 4.0 +TeamActivityDefaultConclusionDuration = 4.0 TeamActivityStatusColor = VBase4(1.0, 1.0, 0.65, 1.0) @@ -524,7 +526,7 @@ # The base color of the splat texture is a yellowish color CogActivitySplatColorBase = VBase4(.98, .9, .094, 1.0) -# In order to tint it correctly, we divide the color we want by +# In order to tint it correctly, we divide the color we want by # that yellow, so when we do a setColorScale it multiplies properly. CogActivitySplatColors = ( VBase4( @@ -547,7 +549,7 @@ CogActivityHitPoints = 1 CogActivityHitPointsForHead = 3 # How far to push the cog when body is hit -CogPinataPushBodyFactor = 0.05 +CogPinataPushBodyFactor = 0.05 # How far to push the cog when head is hit CogPinataPushHeadFactor = CogPinataPushBodyFactor * abs(CogActivityHitPointsForHead - CogActivityHitPoints) @@ -639,7 +641,7 @@ # Party Tug of War #============================================================================== TugOfWarStartDelay = 8.0 # in seconds. wait this long to allow more players to - # join after we have gotten the minimum number of + # join after we have gotten the minimum number of # players TugOfWarReadyDuration = 1.5 # time between "ready" and "go" when starting a game TugOfWarGoDuration = 0.75 # time between "go" and when you can start pulling @@ -682,7 +684,7 @@ (6.0, 10), (7.0, 11), (8.0, 12), -] +] TugOfWarKeyPressTimeToLive = 1.0 # key presses are considered valid towards the # rate for this long TugOfWarKeyPressUpdateRate = 0.1 # delay between updates of the player's rate @@ -702,12 +704,12 @@ TugOfWarTieReward = 5 TugOfWarTieThreshold = 0.75 # if the teams moved this much or less from their # start position, consider it a tie - + #=============================================================================== # Party Trampoline #=============================================================================== -TrampolineDuration = 60.0 # kick you off the trampoline after this long +TrampolineDuration = 60.0 # kick you off the trampoline after this long TrampolineSignOffset = Point3(-6.0, -6.0, 0.0) TrampolineLeverOffset = Point3(-5.0, -9.0, 0.0) TrampolineNumJellyBeans = 12 @@ -768,7 +770,7 @@ def isBaseline(self): # Name2DOTypeId['apple'] == some number # DOTypeId2Name[some number] == 'apple' Name2DOTypeId = {} -names = Name2DropObjectType.keys() +names = list(Name2DropObjectType.keys()) names.sort() for i in range(len(names)): Name2DOTypeId[names[i]] = i @@ -803,7 +805,7 @@ def isBaseline(self): # Dance Activity #=============================================================================== -# TODO make DistributedDanceFloorBase to support 8, 16 and 24 move Dance floors +# TODO make DistributedDanceFloorBase to support 8, 16 and 24 move Dance floors # rule first 3 letters must be unique # Dance Patterns to Animations @@ -811,25 +813,25 @@ def isBaseline(self): # "ddd" : "down", "dduu" : "slip-backward", # "drul" : "sad-walk", -# "ldr" : "push", +# "ldr" : "push", "ldddud" : "happy-dance", -# "ldu" : "sprinkle-dust", +# "ldu" : "sprinkle-dust", "lll" : "left", -# "llrr" : "firehose", -# "lrlr" : "wave", +# "llrr" : "firehose", +# "lrlr" : "wave", # "ludr" : "conked", -# "lurd" : "walk", +# "lurd" : "walk", # "rdl" : "shrug", - "rdu" : "struggle", -# "rlrl" : "confused", + "rdu" : "struggle", +# "rlrl" : "confused", "rrr" : "right", - "rulu" : "running-jump", + "rulu" : "running-jump", # "uddd" : "reel-neutral", - "udlr" : "good-putt", + "udlr" : "good-putt", # "udud" : "angry", "udllrr" : "victory", "ulu" : "jump", - "uudd" : "slip-forward", + "uudd" : "slip-forward", # "uuu" : "up", } @@ -838,25 +840,25 @@ def isBaseline(self): "ddd" : "down", "dduu" : "slip-backward", "drul" : "sad-walk", - "ldr" : "push", + "ldr" : "push", "ldddud" : "happy-dance", - "ldu" : "sprinkle-dust", + "ldu" : "sprinkle-dust", "lll" : "left", - "llrr" : "firehose", - "lrlr" : "wave", + "llrr" : "firehose", + "lrlr" : "wave", # "ludr" : "conked", -# "lurd" : "walk", +# "lurd" : "walk", # "rdl" : "shrug", - "rdu" : "struggle", - "rlrl" : "confused", + "rdu" : "struggle", + "rlrl" : "confused", "rrr" : "right", - "rulu" : "running-jump", + "rulu" : "running-jump", "uddd" : "reel-neutral", - "udlr" : "good-putt", + "udlr" : "good-putt", "udud" : "angry", "udllrr" : "victory", "ulu" : "jump", - "uudd" : "slip-forward", + "uudd" : "slip-forward", "uuu" : "up", } @@ -891,7 +893,7 @@ def isBaseline(self): DanceReverseLoopAnims = ["left", "right", "up", "down", "good-putt"] # Used to transfer state data between clietns -ToonDancingStates = PythonUtil.Enum( +ToonDancingStates = enum.IntEnum("ToonDancingStates", ( "Init", "DanceMove", @@ -1098,18 +1100,18 @@ def countMusic(): numMusic = 0 for key in PhaseToMusicData: numMusic += len(PhaseToMusicData[key]) - print "PhaseToMusicData %d" % numMusic - + print("PhaseToMusicData %d" % numMusic) + numMusic = 0 for key in PhaseToMusicData40: numMusic += len(PhaseToMusicData40[key]) - print "PhaseToMusicData40 %d" % numMusic + print("PhaseToMusicData40 %d" % numMusic) # helper functions for globals: def getMusicRepeatTimes(length, minLength=MUSIC_MIN_LENGTH_SECONDS): - times = round(float(minLength) / length) + times = round(float(minLength) / length) if minLength <= 0 or times < 1.0: times = 1.0 return times @@ -1136,16 +1138,16 @@ def sanitizePhase(phase): PartyCannonCollisions = { "clouds" : ["cloudSphere-0"], - + "bounce" : [ "wall_collision", "discoBall_collision", "platform_left_collision", "platform_right_collision", ], - + "trampoline_bounce" : "TrampolineCollision", - + "ground" : [ "floor_collision", "danceFloor_collision", @@ -1153,7 +1155,7 @@ def sanitizePhase(phase): "hill_collision", "fence_floor", ], - + "fence" : [ "dockTube1_collision", "dockTube2_collision", diff --git a/toontown/src/parties/PartyLoader.py b/toontown/src/parties/PartyLoader.py index 163aa07e..dc2d1323 100644 --- a/toontown/src/parties/PartyLoader.py +++ b/toontown/src/parties/PartyLoader.py @@ -79,15 +79,15 @@ def load(self): self.underwaterSound = base.loadSfx('phase_4/audio/sfx/AV_ambient_water.mp3') self.swimSound = base.loadSfx('phase_4/audio/sfx/AV_swim_single_stroke.mp3') self.submergeSound = base.loadSfx('phase_5.5/audio/sfx/AV_jump_in_water.mp3') - self.birdSound=map(base.loadSfx, [ + self.birdSound=list(map(base.loadSfx, [ 'phase_4/audio/sfx/SZ_TC_bird1.mp3', 'phase_4/audio/sfx/SZ_TC_bird2.mp3', - 'phase_4/audio/sfx/SZ_TC_bird3.mp3']) + 'phase_4/audio/sfx/SZ_TC_bird3.mp3'])) # SDN: use birds as a place holder for crickets for now - self.cricketSound=map(base.loadSfx, [ + self.cricketSound=list(map(base.loadSfx, [ 'phase_4/audio/sfx/SZ_TC_bird1.mp3', 'phase_4/audio/sfx/SZ_TC_bird2.mp3', - 'phase_4/audio/sfx/SZ_TC_bird3.mp3']) + 'phase_4/audio/sfx/SZ_TC_bird3.mp3'])) def unload(self): assert(self.notify.debug("unload()")) @@ -300,19 +300,19 @@ def __cloudTrack(self): return track def debugGeom(self, decomposed): - print 'numPrimitives = %d' % decomposed.getNumPrimitives() + print('numPrimitives = %d' % decomposed.getNumPrimitives()) for primIndex in range(decomposed.getNumPrimitives()): prim = decomposed.getPrimitive(primIndex) - print 'prim = %s' % prim - print 'isIndexed = %d' % prim.isIndexed() - print 'prim.getNumPrimitives = %d' % prim.getNumPrimitives() + print('prim = %s' % prim) + print('isIndexed = %d' % prim.isIndexed()) + print('prim.getNumPrimitives = %d' % prim.getNumPrimitives()) #import pdb; pdb.set_trace() for basicPrim in range(prim.getNumPrimitives()): pass - print '%d start=%d' % (basicPrim, prim.getPrimitiveStart(basicPrim)) - print '%d end=%d' % (basicPrim, prim.getPrimitiveEnd(basicPrim)) + print('%d start=%d' % (basicPrim, prim.getPrimitiveStart(basicPrim))) + print('%d end=%d' % (basicPrim, prim.getPrimitiveEnd(basicPrim))) diff --git a/toontown/src/parties/PartyPlanner.py b/toontown/src/parties/PartyPlanner.py index 171519b8..b49f23d7 100644 --- a/toontown/src/parties/PartyPlanner.py +++ b/toontown/src/parties/PartyPlanner.py @@ -1062,7 +1062,7 @@ def __handleHolidays(self): """ Handle cases for game events """ - self.inviteThemes = range(len(PartyGlobals.InviteTheme)) + self.inviteThemes = list(range(len(PartyGlobals.InviteTheme))) if hasattr(base.cr, "newsManager") and base.cr.newsManager: holidayIds = base.cr.newsManager.getHolidayIdList() diff --git a/toontown/src/parties/activityFSMMixins.py b/toontown/src/parties/activityFSMMixins.py index 846c055a..61f00d5c 100644 --- a/toontown/src/parties/activityFSMMixins.py +++ b/toontown/src/parties/activityFSMMixins.py @@ -13,7 +13,7 @@ """ # parties imports -from BaseActivityFSM import BaseActivityFSM +from .BaseActivityFSM import BaseActivityFSM #-------------------------------------------------------------------------- # Idle State diff --git a/toontown/src/parties/activityFSMs.py b/toontown/src/parties/activityFSMs.py index 07ecce6d..5a292e93 100644 --- a/toontown/src/parties/activityFSMs.py +++ b/toontown/src/parties/activityFSMs.py @@ -9,16 +9,16 @@ from direct.directnotify import DirectNotifyGlobal # parties imports -from BaseActivityFSM import BaseActivityFSM -from activityFSMMixins import IdleMixin -from activityFSMMixins import RulesMixin -from activityFSMMixins import ActiveMixin -from activityFSMMixins import DisabledMixin -from activityFSMMixins import ConclusionMixin -from activityFSMMixins import WaitForEnoughMixin -from activityFSMMixins import WaitToStartMixin -from activityFSMMixins import WaitClientsReadyMixin -from activityFSMMixins import WaitForServerMixin +from .BaseActivityFSM import BaseActivityFSM +from .activityFSMMixins import IdleMixin +from .activityFSMMixins import RulesMixin +from .activityFSMMixins import ActiveMixin +from .activityFSMMixins import DisabledMixin +from .activityFSMMixins import ConclusionMixin +from .activityFSMMixins import WaitForEnoughMixin +from .activityFSMMixins import WaitToStartMixin +from .activityFSMMixins import WaitClientsReadyMixin +from .activityFSMMixins import WaitForServerMixin class FireworksActivityFSM(BaseActivityFSM, IdleMixin, ActiveMixin, DisabledMixin): notify = DirectNotifyGlobal.directNotify.newCategory( "FireworksActivityFSM" ) diff --git a/toontown/src/parties/feedparser.py b/toontown/src/parties/feedparser.py index bc057cb7..ca6493ac 100644 --- a/toontown/src/parties/feedparser.py +++ b/toontown/src/parties/feedparser.py @@ -66,11 +66,11 @@ PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] # ---------- required modules (should come with any Python distribution) ---------- -import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 +import sgmllib, re, sys, copy, urllib.parse, time, rfc822, types, cgi, urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse try: - from cStringIO import StringIO as _StringIO + from io import StringIO as _StringIO except: - from StringIO import StringIO as _StringIO + from io import StringIO as _StringIO # ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- @@ -191,7 +191,7 @@ def __getitem__(self, key): if key == 'categories': return [(tag['scheme'], tag['term']) for tag in UserDict.__getitem__(self, 'tags')] realkey = self.keymap.get(key, key) - if type(realkey) == types.ListType: + if type(realkey) == list: for k in realkey: if UserDict.has_key(self, k): return UserDict.__getitem__(self, k) @@ -200,21 +200,21 @@ def __getitem__(self, key): return UserDict.__getitem__(self, realkey) def __setitem__(self, key, value): - for k in self.keymap.keys(): + for k in list(self.keymap.keys()): if key == k: key = self.keymap[k] - if type(key) == types.ListType: + if type(key) == list: key = key[0] return UserDict.__setitem__(self, key, value) def get(self, key, default=None): - if self.has_key(key): + if key in self: return self[key] else: return default def setdefault(self, key, value): - if not self.has_key(key): + if key not in self: self[key] = value return self[key] @@ -233,7 +233,7 @@ def __getattr__(self, key): assert not key.startswith('_') return self.__getitem__(key) except: - raise AttributeError, "object has no attribute '%s'" % key + raise AttributeError("object has no attribute '%s'" % key) def __setattr__(self, key, value): if key.startswith('_') or key == 'data': @@ -242,7 +242,7 @@ def __setattr__(self, key, value): return self.__setitem__(key, value) def __contains__(self, key): - return self.has_key(key) + return key in self def zopeCompatibilityHack(): global FeedParserDict @@ -277,13 +277,13 @@ def _ebcdic_to_ascii(s): ) import string _ebcdic_to_ascii_map = string.maketrans( \ - ''.join(map(chr, range(256))), ''.join(map(chr, emap))) + ''.join(map(chr, list(range(256)))), ''.join(map(chr, emap))) return s.translate(_ebcdic_to_ascii_map) _urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)') def _urljoin(base, uri): uri = _urifixer.sub(r'\1\3', uri) - return urlparse.urljoin(base, uri) + return urllib.parse.urljoin(base, uri) class _FeedParserMixin: namespaces = {'': '', @@ -357,7 +357,7 @@ class _FeedParserMixin: def __init__(self, baseuri=None, baselang=None, encoding='utf-8'): if _debug: sys.stderr.write('initializing FeedParser\n') if not self._matchnamespaces: - for k, v in self.namespaces.items(): + for k, v in list(self.namespaces.items()): self._matchnamespaces[k.lower()] = v self.feeddata = FeedParserDict() # feed-level data self.encoding = encoding # character encoding @@ -420,7 +420,7 @@ def unknown_starttag(self, tag, attrs): self.trackNamespace(None, uri) # track inline content - if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + if self.incontent and 'type' in self.contentparams and not self.contentparams.get('type', 'xml').endswith('xml'): # element declared itself as escaped markup, but it isn't really self.contentparams['type'] = 'application/xhtml+xml' if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': @@ -436,7 +436,7 @@ def unknown_starttag(self, tag, attrs): return self.handle_data('<%s%s>' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) # match namespaces - if tag.find(':') <> -1: + if tag.find(':') != -1: prefix, suffix = tag.split(':', 1) else: prefix, suffix = '', tag @@ -461,7 +461,7 @@ def unknown_starttag(self, tag, attrs): def unknown_endtag(self, tag): if _debug: sys.stderr.write('end %s\n' % tag) # match namespaces - if tag.find(':') <> -1: + if tag.find(':') != -1: prefix, suffix = tag.split(':', 1) else: prefix, suffix = '', tag @@ -478,7 +478,7 @@ def unknown_endtag(self, tag): self.pop(prefix + suffix) # track inline content - if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + if self.incontent and 'type' in self.contentparams and not self.contentparams.get('type', 'xml').endswith('xml'): # element declared itself as escaped markup, but it isn't really self.contentparams['type'] = 'application/xhtml+xml' if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': @@ -506,7 +506,7 @@ def handle_charref(self, ref): c = int(ref[1:], 16) else: c = int(ref) - text = unichr(c).encode('utf-8') + text = chr(c).encode('utf-8') self.elementstack[-1][2].append(text) def handle_entityref(self, ref): @@ -518,16 +518,16 @@ def handle_entityref(self, ref): else: # entity resolution graciously donated by Aaron Swartz def name2cp(k): - import htmlentitydefs + import html.entities if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 - return htmlentitydefs.name2codepoint[k] - k = htmlentitydefs.entitydefs[k] + return html.entities.name2codepoint[k] + k = html.entities.entitydefs[k] if k.startswith('&#') and k.endswith(';'): return int(k[2:-1]) # not in latin-1 return ord(k) try: name2cp(ref) except KeyError: text = '&%s;' % ref - else: text = unichr(name2cp(ref)).encode('utf-8') + else: text = chr(name2cp(ref)).encode('utf-8') self.elementstack[-1][2].append(text) def handle_data(self, text, escape=1): @@ -579,11 +579,11 @@ def trackNamespace(self, prefix, uri): self.version = 'rss10' if loweruri == 'http://www.w3.org/2005/atom' and not self.version: self.version = 'atom10' - if loweruri.find('backend.userland.com/rss') <> -1: + if loweruri.find('backend.userland.com/rss') != -1: # match any backend.userland.com namespace uri = 'http://backend.userland.com/rss' loweruri = uri - if self._matchnamespaces.has_key(loweruri): + if loweruri in self._matchnamespaces: self.namespacemap[prefix] = self._matchnamespaces[loweruri] self.namespacesInUse[self._matchnamespaces[loweruri]] = uri else: @@ -645,9 +645,9 @@ def pop(self, element, stripWhitespace=1): if element in self.can_contain_dangerous_markup: output = _sanitizeHTML(output, self.encoding) - if self.encoding and type(output) != type(u''): + if self.encoding and type(output) != type(''): try: - output = unicode(output, self.encoding) + output = str(output, self.encoding) except: pass @@ -704,7 +704,7 @@ def popContent(self, tag): def _mapToStandardPrefix(self, name): colonpos = name.find(':') - if colonpos <> -1: + if colonpos != -1: prefix = name[:colonpos] suffix = name[colonpos+1:] prefix = self.namespacemap.get(prefix, prefix) @@ -767,11 +767,11 @@ def _start_channel(self, attrsD): _start_feedinfo = _start_channel def _cdf_common(self, attrsD): - if attrsD.has_key('lastmod'): + if 'lastmod' in attrsD: self._start_modified({}) self.elementstack[-1][-1] = attrsD['lastmod'] self._end_modified() - if attrsD.has_key('href'): + if 'href' in attrsD: self._start_link({}) self.elementstack[-1][-1] = attrsD['href'] self._end_link() @@ -1147,7 +1147,7 @@ def _start_link(self, attrsD): attrsD.setdefault('rel', 'alternate') attrsD.setdefault('type', 'text/html') attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): + if 'href' in attrsD: attrsD['href'] = self.resolveURI(attrsD['href']) expectingText = self.infeed or self.inentry or self.insource context = self._getContext() @@ -1155,7 +1155,7 @@ def _start_link(self, attrsD): context['links'].append(FeedParserDict(attrsD)) if attrsD['rel'] == 'enclosure': self._start_enclosure(attrsD) - if attrsD.has_key('href'): + if 'href' in attrsD: expectingText = 0 if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): context['link'] = attrsD['href'] @@ -1178,7 +1178,7 @@ def _start_guid(self, attrsD): def _end_guid(self): value = self.pop('id') - self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) + self._save('guidislink', self.guidislink and 'link' not in self._getContext()) if self.guidislink: # guid acts as link, but only if 'ispermalink' is not present or is 'true', # and only if the item doesn't already have a link element @@ -1201,7 +1201,7 @@ def _end_title(self): def _start_description(self, attrsD): context = self._getContext() - if context.has_key('summary'): + if 'summary' in context: self._summaryKey = 'content' self._start_content(attrsD) else: @@ -1234,7 +1234,7 @@ def _end_info(self): def _start_generator(self, attrsD): if attrsD: attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): + if 'href' in attrsD: attrsD['href'] = self.resolveURI(attrsD['href']) self._getContext()['generator_detail'] = FeedParserDict(attrsD) self.push('generator', 1) @@ -1242,7 +1242,7 @@ def _start_generator(self, attrsD): def _end_generator(self): value = self.pop('generator') context = self._getContext() - if context.has_key('generator_detail'): + if 'generator_detail' in context: context['generator_detail']['name'] = value def _start_admin_generatoragent(self, attrsD): @@ -1262,7 +1262,7 @@ def _start_admin_errorreportsto(self, attrsD): def _start_summary(self, attrsD): context = self._getContext() - if context.has_key('summary'): + if 'summary' in context: self._summaryKey = 'content' self._start_content(attrsD) else: @@ -1352,7 +1352,7 @@ def startPrefixMapping(self, prefix, uri): def startElementNS(self, name, qname, attrs): namespace, localname = name lowernamespace = str(namespace or '').lower() - if lowernamespace.find('backend.userland.com/rss') <> -1: + if lowernamespace.find('backend.userland.com/rss') != -1: # match any backend.userland.com namespace namespace = 'http://backend.userland.com/rss' lowernamespace = namespace @@ -1361,12 +1361,12 @@ def startElementNS(self, name, qname, attrs): else: givenprefix = None prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): - raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix + if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse: + raise UndeclaredNamespace("'%s' is not associated with a namespace" % givenprefix) if prefix: localname = prefix + ':' + localname localname = str(localname).lower() - if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) + if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, list(attrs.items()), localname)) # qname implementation is horribly broken in Python 2.1 (it # doesn't report any), and slightly broken in Python 2.2 (it @@ -1376,7 +1376,7 @@ def startElementNS(self, name, qname, attrs): # at all). Thanks to MatejC for helping me test this and # tirelessly telling me that it didn't work yet. attrsD = {} - for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): + for (namespace, attrlocalname), attrvalue in list(attrs._attrs.items()): lowernamespace = (namespace or '').lower() prefix = self._matchnamespaces.get(lowernamespace, '') if prefix: @@ -1384,7 +1384,7 @@ def startElementNS(self, name, qname, attrs): attrsD[str(attrlocalname).lower()] = attrvalue for qname in attrs.getQNames(): attrsD[str(qname).lower()] = attrs.getValueByQName(qname) - self.unknown_starttag(localname, attrsD.items()) + self.unknown_starttag(localname, list(attrsD.items())) def characters(self, text): self.handle_data(text) @@ -1436,7 +1436,7 @@ def feed(self, data): data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) data = data.replace(''', "'") data = data.replace('"', '"') - if self.encoding and type(data) == type(u''): + if self.encoding and type(data) == type(''): data = data.encode(self.encoding) sgmllib.SGMLParser.feed(self, data) @@ -1454,10 +1454,10 @@ def unknown_starttag(self, tag, attrs): uattrs = [] # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds for key, value in attrs: - if type(value) != type(u''): - value = unicode(value, self.encoding) - uattrs.append((unicode(key, self.encoding), value)) - strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding) + if type(value) != type(''): + value = str(value, self.encoding) + uattrs.append((str(key, self.encoding), value)) + strattrs = ''.join([' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding) if tag in self.elements_no_end_tag: self.pieces.append('<%(tag)s%(strattrs)s />' % locals()) else: @@ -1541,7 +1541,7 @@ def decodeEntities(self, element, data): data = data.replace('"', '"') data = data.replace(''', ''') data = data.replace(''', ''') - if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + if 'type' in self.contentparams and not self.contentparams.get('type', 'xml').endswith('xml'): data = data.replace('<', '<') data = data.replace('>', '>') data = data.replace('&', '&') @@ -1671,12 +1671,12 @@ def _tidy(data, **kwargs): except: pass if _tidy: - utf8 = type(data) == type(u'') + utf8 = type(data) == type('') if utf8: data = data.encode('utf-8') data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") if utf8: - data = unicode(data, 'utf-8') + data = str(data, 'utf-8') if data.count(''): @@ -1686,7 +1686,7 @@ def _tidy(data, **kwargs): data = data.strip().replace('\r\n', '\n') return data -class _FeedURLHandler(urllib2.HTTPDigestAuthHandler, urllib2.HTTPRedirectHandler, urllib2.HTTPDefaultErrorHandler): +class _FeedURLHandler(urllib.request.HTTPDigestAuthHandler, urllib.request.HTTPRedirectHandler, urllib.request.HTTPDefaultErrorHandler): def http_error_default(self, req, fp, code, msg, headers): if ((code / 100) == 3) and (code != 304): return self.http_error_302(req, fp, code, msg, headers) @@ -1695,8 +1695,8 @@ def http_error_default(self, req, fp, code, msg, headers): return infourl def http_error_302(self, req, fp, code, msg, headers): - if headers.dict.has_key('location'): - infourl = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) + if 'location' in headers.dict: + infourl = urllib.request.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) else: infourl = urllib.addinfourl(fp, headers, req.get_full_url()) if not hasattr(infourl, 'status'): @@ -1704,8 +1704,8 @@ def http_error_302(self, req, fp, code, msg, headers): return infourl def http_error_301(self, req, fp, code, msg, headers): - if headers.dict.has_key('location'): - infourl = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers) + if 'location' in headers.dict: + infourl = urllib.request.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers) else: infourl = urllib.addinfourl(fp, headers, req.get_full_url()) if not hasattr(infourl, 'status'): @@ -1727,7 +1727,7 @@ def http_error_401(self, req, fp, code, msg, headers): # header the server sent back (for the realm) and retry # the request with the appropriate digest auth headers instead. # This evil genius hack has been brought to you by Aaron Swartz. - host = urlparse.urlparse(req.get_full_url())[1] + host = urllib.parse.urlparse(req.get_full_url())[1] try: assert sys.version.split()[0] >= '2.3.3' assert base64 != None @@ -1773,21 +1773,21 @@ def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, h if url_file_stream_or_string == '-': return sys.stdin - if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): + if urllib.parse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): if not agent: agent = USER_AGENT # test for inline user:password for basic auth auth = None if base64: - urltype, rest = urllib.splittype(url_file_stream_or_string) - realhost, rest = urllib.splithost(rest) + urltype, rest = urllib.parse.splittype(url_file_stream_or_string) + realhost, rest = urllib.parse.splithost(rest) if realhost: - user_passwd, realhost = urllib.splituser(realhost) + user_passwd, realhost = urllib.parse.splituser(realhost) if user_passwd: url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) auth = base64.encodestring(user_passwd).strip() # try to open with urllib2 (to use optional headers) - request = urllib2.Request(url_file_stream_or_string) + request = urllib.request.Request(url_file_stream_or_string) request.add_header('User-Agent', agent) if etag: request.add_header('If-None-Match', etag) @@ -1814,7 +1814,7 @@ def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, h if ACCEPT_HEADER: request.add_header('Accept', ACCEPT_HEADER) request.add_header('A-IM', 'feed') # RFC 3229 support - opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) + opener = urllib.request.build_opener(*tuple([_FeedURLHandler()] + handlers)) opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent try: return opener.open(request) @@ -1910,7 +1910,7 @@ def _parse_date_iso8601(dateString): day = int(day) # special case of the century - is the first year of the 21st century # 2000 or 2001 ? The debate goes on... - if 'century' in params.keys(): + if 'century' in list(params.keys()): year = (int(params['century']) - 1) * 100 + 1 # in ISO 8601 most fields are optional for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: @@ -1946,17 +1946,17 @@ def _parse_date_iso8601(dateString): registerDateHandler(_parse_date_iso8601) # 8-bit date handling routines written by ytrewq1. -_korean_year = u'\ub144' # b3e2 in euc-kr -_korean_month = u'\uc6d4' # bff9 in euc-kr -_korean_day = u'\uc77c' # c0cf in euc-kr -_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr -_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr +_korean_year = '\ub144' # b3e2 in euc-kr +_korean_month = '\uc6d4' # bff9 in euc-kr +_korean_day = '\uc77c' # c0cf in euc-kr +_korean_am = '\uc624\uc804' # bfc0 c0fc in euc-kr +_korean_pm = '\uc624\ud6c4' # bfc0 c8c4 in euc-kr _korean_onblog_date_re = \ re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ (_korean_year, _korean_month, _korean_day)) _korean_nate_date_re = \ - re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ + re.compile('(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ (_korean_am, _korean_pm)) def _parse_date_onblog(dateString): '''Parse a string according to the OnBlog 8-bit date format''' @@ -2006,40 +2006,40 @@ def _parse_date_mssql(dateString): # Unicode strings for Greek date strings _greek_months = \ { \ - u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 - u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 - u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 - u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 - u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 - u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 - u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 - u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 - u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 - u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 - u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 - u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 - u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 - u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 - u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 - u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 - u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 + '\u0399\u03b1\u03bd': 'Jan', # c9e1ed in iso-8859-7 + '\u03a6\u03b5\u03b2': 'Feb', # d6e5e2 in iso-8859-7 + '\u039c\u03ac\u03ce': 'Mar', # ccdcfe in iso-8859-7 + '\u039c\u03b1\u03ce': 'Mar', # cce1fe in iso-8859-7 + '\u0391\u03c0\u03c1': 'Apr', # c1f0f1 in iso-8859-7 + '\u039c\u03ac\u03b9': 'May', # ccdce9 in iso-8859-7 + '\u039c\u03b1\u03ca': 'May', # cce1fa in iso-8859-7 + '\u039c\u03b1\u03b9': 'May', # cce1e9 in iso-8859-7 + '\u0399\u03bf\u03cd\u03bd': 'Jun', # c9effded in iso-8859-7 + '\u0399\u03bf\u03bd': 'Jun', # c9efed in iso-8859-7 + '\u0399\u03bf\u03cd\u03bb': 'Jul', # c9effdeb in iso-8859-7 + '\u0399\u03bf\u03bb': 'Jul', # c9f9eb in iso-8859-7 + '\u0391\u03cd\u03b3': 'Aug', # c1fde3 in iso-8859-7 + '\u0391\u03c5\u03b3': 'Aug', # c1f5e3 in iso-8859-7 + '\u03a3\u03b5\u03c0': 'Sep', # d3e5f0 in iso-8859-7 + '\u039f\u03ba\u03c4': 'Oct', # cfeaf4 in iso-8859-7 + '\u039d\u03bf\u03ad': 'Nov', # cdefdd in iso-8859-7 + '\u039d\u03bf\u03b5': 'Nov', # cdefe5 in iso-8859-7 + '\u0394\u03b5\u03ba': 'Dec', # c4e5ea in iso-8859-7 } _greek_wdays = \ { \ - u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 - u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 - u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 - u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 - u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 - u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 - u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 + '\u039a\u03c5\u03c1': 'Sun', # caf5f1 in iso-8859-7 + '\u0394\u03b5\u03c5': 'Mon', # c4e5f5 in iso-8859-7 + '\u03a4\u03c1\u03b9': 'Tue', # d4f1e9 in iso-8859-7 + '\u03a4\u03b5\u03c4': 'Wed', # d4e5f4 in iso-8859-7 + '\u03a0\u03b5\u03bc': 'Thu', # d0e5ec in iso-8859-7 + '\u03a0\u03b1\u03c1': 'Fri', # d0e1f1 in iso-8859-7 + '\u03a3\u03b1\u03b2': 'Sat', # d3e1e2 in iso-8859-7 } _greek_date_format_re = \ - re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') + re.compile('([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') def _parse_date_greek(dateString): '''Parse a string according to a Greek 8-bit date format.''' @@ -2061,22 +2061,22 @@ def _parse_date_greek(dateString): # Unicode strings for Hungarian date strings _hungarian_months = \ { \ - u'janu\u00e1r': u'01', # e1 in iso-8859-2 - u'febru\u00e1ri': u'02', # e1 in iso-8859-2 - u'm\u00e1rcius': u'03', # e1 in iso-8859-2 - u'\u00e1prilis': u'04', # e1 in iso-8859-2 - u'm\u00e1ujus': u'05', # e1 in iso-8859-2 - u'j\u00fanius': u'06', # fa in iso-8859-2 - u'j\u00falius': u'07', # fa in iso-8859-2 - u'augusztus': u'08', - u'szeptember': u'09', - u'okt\u00f3ber': u'10', # f3 in iso-8859-2 - u'november': u'11', - u'december': u'12', + 'janu\u00e1r': '01', # e1 in iso-8859-2 + 'febru\u00e1ri': '02', # e1 in iso-8859-2 + 'm\u00e1rcius': '03', # e1 in iso-8859-2 + '\u00e1prilis': '04', # e1 in iso-8859-2 + 'm\u00e1ujus': '05', # e1 in iso-8859-2 + 'j\u00fanius': '06', # fa in iso-8859-2 + 'j\u00falius': '07', # fa in iso-8859-2 + 'augusztus': '08', + 'szeptember': '09', + 'okt\u00f3ber': '10', # f3 in iso-8859-2 + 'november': '11', + 'december': '12', } _hungarian_date_format_re = \ - re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') + re.compile('(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') def _parse_date_hungarian(dateString): '''Parse a string according to a Hungarian 8-bit date format.''' @@ -2232,9 +2232,9 @@ def _parse_date(dateString): if len(date9tuple) != 9: if _debug: sys.stderr.write('date handler function must return 9-tuple\n') raise ValueError - map(int, date9tuple) + list(map(int, date9tuple)) return date9tuple - except Exception, e: + except Exception as e: if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) pass return None @@ -2313,39 +2313,39 @@ def _parseHTTPContentType(content_type): elif xml_data[:4] == '\x00\x3c\x00\x3f': # UTF-16BE sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') + xml_data = str(xml_data, 'utf-16be').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): # UTF-16BE with BOM sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') + xml_data = str(xml_data[2:], 'utf-16be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x3f\x00': # UTF-16LE sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') + xml_data = str(xml_data, 'utf-16le').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): # UTF-16LE with BOM sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') + xml_data = str(xml_data[2:], 'utf-16le').encode('utf-8') elif xml_data[:4] == '\x00\x00\x00\x3c': # UTF-32BE sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') + xml_data = str(xml_data, 'utf-32be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x00\x00': # UTF-32LE sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') + xml_data = str(xml_data, 'utf-32le').encode('utf-8') elif xml_data[:4] == '\x00\x00\xfe\xff': # UTF-32BE with BOM sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') + xml_data = str(xml_data[4:], 'utf-32be').encode('utf-8') elif xml_data[:4] == '\xff\xfe\x00\x00': # UTF-32LE with BOM sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') + xml_data = str(xml_data[4:], 'utf-32le').encode('utf-8') elif xml_data[:3] == '\xef\xbb\xbf': # UTF-8 with BOM sniffed_xml_encoding = 'utf-8' - xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') + xml_data = str(xml_data[3:], 'utf-8').encode('utf-8') else: # ASCII-compatible pass @@ -2369,7 +2369,7 @@ def _parseHTTPContentType(content_type): true_encoding = http_encoding or 'us-ascii' elif http_content_type.startswith('text/'): true_encoding = http_encoding or 'us-ascii' - elif http_headers and (not http_headers.has_key('content-type')): + elif http_headers and ('content-type' not in http_headers): true_encoding = xml_encoding or 'iso-8859-1' else: true_encoding = xml_encoding or 'utf-8' @@ -2418,14 +2418,14 @@ def _toUTF8(data, encoding): sys.stderr.write('trying utf-32le instead\n') encoding = 'utf-32le' data = data[4:] - newdata = unicode(data, encoding) + newdata = str(data, encoding) if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) declmatch = re.compile('^<\?xml[^>]*?>') newdecl = '''''' if declmatch.search(newdata): newdata = declmatch.sub(newdecl, newdata) else: - newdata = newdecl + u'\n' + newdata + newdata = newdecl + '\n' + newdata return newdata.encode('utf-8') def _stripDoctype(data): @@ -2458,7 +2458,7 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer try: f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) data = f.read() - except Exception, e: + except Exception as e: result['bozo'] = 1 result['bozo_exception'] = e data = '' @@ -2469,7 +2469,7 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer if gzip and f.headers.get('content-encoding', '') == 'gzip': try: data = gzip.GzipFile(fileobj=_StringIO(data)).read() - except Exception, e: + except Exception as e: # Some feeds claim to be gzipped but they're not, so # we get garbage. Ideally, we should re-request the # feed without the 'Accept-encoding: gzip' header, @@ -2480,7 +2480,7 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer elif zlib and f.headers.get('content-encoding', '') == 'deflate': try: data = zlib.decompress(data, -zlib.MAX_WBITS) - except Exception, e: + except Exception as e: result['bozo'] = 1 result['bozo_exception'] = e data = '' @@ -2511,7 +2511,7 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer result['encoding'], http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type = \ _getCharacterEncoding(http_headers, data) if http_headers and (not acceptable_content_type): - if http_headers.has_key('content-type'): + if 'content-type' in http_headers: bozo_message = '%s is not an XML media type' % http_headers['content-type'] else: bozo_message = 'no Content-type specified' @@ -2609,7 +2609,7 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer saxparser._ns_stack.append({'http://www.w3.org/XML/1998/namespace':'xml'}) try: saxparser.parse(source) - except Exception, e: + except Exception as e: if _debug: import traceback traceback.print_stack() @@ -2629,18 +2629,18 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer if __name__ == '__main__': if not sys.argv[1:]: - print __doc__ + print(__doc__) sys.exit(0) else: urls = sys.argv[1:] zopeCompatibilityHack() from pprint import pprint for url in urls: - print url - print + print(url) + print() result = parse(url) pprint(result) - print + print() #REVISION HISTORY #1.0 - 9/27/2002 - MAP - fixed namespace processing on prefixed RSS 2.0 elements, diff --git a/toontown/src/pets/DistributedPet.py b/toontown/src/pets/DistributedPet.py index a9012071..d7d9768d 100644 --- a/toontown/src/pets/DistributedPet.py +++ b/toontown/src/pets/DistributedPet.py @@ -132,7 +132,7 @@ def setSafeZone(self, safeZone): # setXXX func is generated for each trait def __generateDistTraitFuncs(self): # generate a set func for each trait - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] setterName = self.getSetterName(traitName) def traitSetter(value, self=self, i=i): @@ -265,7 +265,7 @@ def announceGenerate(self): self.mood = PetMood.PetMood(self) # pass in the cached required mood component values - for mood, value in self.requiredMoodComponents.items(): + for mood, value in list(self.requiredMoodComponents.items()): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} @@ -641,8 +641,8 @@ def setMovie(self, mode, avId, timestamp): self._getPetMovieCompleteIval(av), ) self.movieTrack.start() - except StandardError, error: - print str(error) + except Exception as error: + print(str(error)) if (mode == PetConstants.PET_MOVIE_SCRATCH): assert(self.notify.debug('PET_MOVIE_SCRATCH')) @@ -658,8 +658,8 @@ def setMovie(self, mode, avId, timestamp): self._getPetMovieCompleteIval(av), ) self.movieTrack.start() - except StandardError, error: - print str(error) + except Exception as error: + print(str(error)) if (mode == PetConstants.PET_MOVIE_FEED): assert(self.notify.debug('PET_MOVIE_FEED')) diff --git a/toontown/src/pets/DistributedPetAI.py b/toontown/src/pets/DistributedPetAI.py index d8f7fb21..95fb5235 100644 --- a/toontown/src/pets/DistributedPetAI.py +++ b/toontown/src/pets/DistributedPetAI.py @@ -4,7 +4,7 @@ from direct.showbase.PythonUtil import weightedChoice, randFloat, lerp from direct.showbase.PythonUtil import contains, list2dict, clampScalar from direct.directnotify import DirectNotifyGlobal -from direct.distributed import DistributedSmoothNodeAI +from toontown.distributed.DistributedSmoothNodeAI import DistributedSmoothNodeAI from direct.distributed import DistributedSmoothNodeBase from direct.distributed import ClockDelta from direct.fsm import ClassicFSM, State @@ -25,10 +25,9 @@ import string import copy from direct.showbase.PythonUtil import StackTrace +from toontown.distributed.DistributedSmoothNodeAI import BroadcastTypes - -class DistributedPetAI(DistributedSmoothNodeAI.DistributedSmoothNodeAI, - PetLookerAI.PetLookerAI, PetBase.PetBase): +class DistributedPetAI(DistributedSmoothNodeAI, PetLookerAI.PetLookerAI, PetBase.PetBase): """AI-side implementation of Toon pet""" notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPetAI") @@ -41,9 +40,9 @@ class DistributedPetAI(DistributedSmoothNodeAI.DistributedSmoothNodeAI, movieDistSwitch = { PetConstants.PET_MOVIE_FEED: PetConstants.FEED_DIST.get, PetConstants.PET_MOVIE_SCRATCH: PetConstants.SCRATCH_DIST.get } - + def __init__(self, air, dna = None): - DistributedSmoothNodeAI.DistributedSmoothNodeAI.__init__(self, air) + DistributedSmoothNodeAI.__init__(self, air) PetLookerAI.PetLookerAI.__init__(self) self.ownerId = 0 self.petName = 'unnamed' @@ -85,7 +84,7 @@ def __init__(self, air, dna = None): # cache required mood components until we have a self.mood to give # them to self.requiredMoodComponents = {} - + # create our distributed trait and mood funcs # Keep track of all the funcs that we stuff into our dict self.__funcsToDelete = [] @@ -145,48 +144,48 @@ def _initFakePet(self, ownerId, name, traitSeed=0, def _setMedianTraits(self, szId): # call this on an existing pet to set all his traits to median # values for a particular safe zone. For gameplay balancing. - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] traitDesc = PetTraits.PetTraits.TraitDescs[i] distrib = traitDesc[1] min, max = distrib.getMinMax(szId) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName]((min + max) / 2.) - + def _setLowTraits(self, szId): # call this on an existing pet to set all his traits to the # lowest values for a particular safe zone. For gameplay balancing. - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] traitDesc = PetTraits.PetTraits.TraitDescs[i] distrib = traitDesc[1] min, max = distrib.getMinMax(szId) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName](min) - + def _setHighTraits(self, szId): # call this on an existing pet to set all his traits to the # highest values for a particular safe zone. For gameplay # balancing. - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] traitDesc = PetTraits.PetTraits.TraitDescs[i] distrib = traitDesc[1] min, max = distrib.getMinMax(szId) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName](max) - + def _setTypicalTraits(self, szId): # call this on an existing pet to set all his traits to typical # random values for a particular safezone. For gameplay balancing. - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] traitDesc = PetTraits.PetTraits.TraitDescs[i] distrib = traitDesc[1] value = distrib.getRandValue(szId) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName](value) - + def _initDBVals(self, ownerId, name=None, traitSeed=0, dna=None, safeZone=ToontownGlobals.ToontownCentral): # Initializes the DB fields for a new, generated pet object to @@ -216,7 +215,7 @@ def _initDBVals(self, ownerId, name=None, traitSeed=0, dna=None, dna = PetDNA.getRandomPetDNA() self.setDNA(dna) - + self.b_setLastSeenTimestamp(self.getCurEpochTimestamp()) for component in PetMood.PetMood.Components: self.setMoodComponent(component, 0.) @@ -236,10 +235,9 @@ def setDNA(self, dna): self.b_setColorScale(colorScale) self.b_setEyeColor(eyes) self.b_setGender(gender) - + def handleZoneChange(self, newZoneId, oldZoneId): - DistributedSmoothNodeAI.DistributedSmoothNodeAI.handleZoneChange( - self, newZoneId, oldZoneId) + DistributedSmoothNodeAI.handleZoneChange(self, newZoneId, oldZoneId) # we want to stop listening to observes as soon as we change to the # quiet zone self.ignore(PetObserve.getEventName(oldZoneId)) @@ -248,8 +246,7 @@ def handleZoneChange(self, newZoneId, oldZoneId): def handleLogicalZoneChange(self, newZoneId, oldZoneId): # we've changed to a non-quiet zone - DistributedSmoothNodeAI.DistributedSmoothNodeAI.handleLogicalZoneChange( - self, newZoneId, oldZoneId) + DistributedSmoothNodeAI.handleLogicalZoneChange(self, newZoneId, oldZoneId) self.announceZoneChange(newZoneId, oldZoneId) # re-create our PetSphere, since it holds a handle to a collision # traverser, which is zone-specific @@ -274,7 +271,7 @@ def announceZoneChange(self, newZoneId, oldZoneId): self.inEstate = 0 self.estateZones = [] - PetObserve.send(broadcastZones.keys(), + PetObserve.send(list(broadcastZones.keys()), PetObserve.PetActionObserve( PetObserve.Actions.CHANGE_ZONE, self.doId, (oldZoneId, newZoneId))) @@ -299,8 +296,7 @@ def d_setPetName(self, petName): def setPetName(self, petName): self.petName = petName # set the nodepath name, for kicks - DistributedSmoothNodeAI.DistributedSmoothNodeAI.setName(self, - self.petName) + DistributedSmoothNodeAI.setName(self, self.petName) def getTraitSeed(self): return self.traitSeed @@ -332,8 +328,7 @@ def d_setPetName(self, petName): def setPetName(self, petName): self.petName = petName # set the nodepath name, for kicks - DistributedSmoothNodeAI.DistributedSmoothNodeAI.setName(self, - self.petName) + DistributedSmoothNodeAI.setName(self, self.petName) """ looks like this is not used def getTraits(self): @@ -346,10 +341,10 @@ def d_setTraits(self, traitList): """ def setTraits(self, traitList): self.traitList = traitList - + # get, b_set, d_set, and set funcs are generated for each trait def __generateDistTraitFuncs(self): - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] getterName = self.getSetterName(traitName, 'get') b_setterName = self.getSetterName(traitName, 'b_set') @@ -479,7 +474,7 @@ def teleportOut(self, timestamp=None): self.notify.debug("DPAI: sending update @ ts = %s" % timestamp) self.sendUpdate("teleportOut", [timestamp]) return None - + def getLastSeenTimestamp(self): return self.lastSeenTimestamp def b_setLastSeenTimestamp(self, timestamp): @@ -554,7 +549,7 @@ def moodSetter(value, compName=compName): self.__funcsToDelete.append('d_%s' % setterName) self.__funcsToDelete.append(setterName) - + def getTrickAptitudes(self): return self.trickAptitudes def b_setTrickAptitudes(self, aptitudes): @@ -608,7 +603,7 @@ def setTrickAptitude(self, trickId, aptitude, send=1): self.setTrickAptitudes(aptitudes, local=1) def generate(self): - DistributedSmoothNodeAI.DistributedSmoothNodeAI.generate(self) + DistributedSmoothNodeAI.generate(self) self._hasCleanedUp = False self.setHasRequestedDelete(False) self.b_setParent(ToontownGlobals.SPHidden) @@ -643,7 +638,7 @@ def generate(self): if not hasattr(self, '_beingCreatedInDB'): # if there are any new traits, we need to set their generated value in # the DB. - for i in xrange(len(self.traitList)): + for i in range(len(self.traitList)): value = self.traitList[i] if value == 0.: traitName = PetTraits.getTraitNames()[i] @@ -685,9 +680,9 @@ def generate(self): # if a dna was passed on instantiation, set it now if self.initialDNA: self.setDNA(self.initialDNA) - + # pass in the cached required mood component values - for mood, value in self.requiredMoodComponents.items(): + for mood, value in list(self.requiredMoodComponents.items()): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} @@ -699,7 +694,7 @@ def generate(self): # The mover that will push us around for the trick self.lockMover = Mover.Mover(self) - + # cache some impulse objects self.createImpulses() @@ -756,7 +751,7 @@ def requestDelete(self, task=None): # record the 'last-seen' timestamp self.b_setLastSeenTimestamp(self.getCurEpochTimestamp()) - DistributedSmoothNodeAI.DistributedSmoothNodeAI.requestDelete(self) + DistributedSmoothNodeAI.requestDelete(self) def _doDeleteCleanup(self): self.trickLogger.destroy() @@ -767,7 +762,7 @@ def _doDeleteCleanup(self): del self.trickFailLogger del self.feedLogger del self.scratchLogger - + # remove any hooks taskMgr.remove(self.uniqueName("clearMovie")) taskMgr.remove(self.uniqueName("PetMovieWait")) @@ -785,19 +780,19 @@ def _doDeleteCleanup(self): myTaskName = "No task name" myStackTrace = StackTrace().trace myOldStackTrace = "No Trace" - + if hasattr(self, "doId"): myDoId = self.doId if task: myTaskName = task.name if hasattr(self, "destroyDoStackTrace"): myOldStackTrace = self.destroyDoStackTrace.trace - + simbase.air.writeServerEvent("Pet RequestDelete duplicate", myDoId, "from task %s" % (myTaskName)) simbase.air.writeServerEvent("Pet RequestDelete duplicate StackTrace", myDoId, "%s" % myStackTrace) simbase.air.writeServerEvent("Pet RequestDelete duplicate OldStackTrace", myDoId, "%s" % myOldStackTrace) - + DistributedPetAI.notify.warning("double requestDelete from task %s" % (myTaskName)) self.setParent(hidden) @@ -822,13 +817,13 @@ def _doDeleteCleanup(self): # DistributedSmoothNodeBase makes sure the task is stopped # on deletion. self.stopPosHprBroadcast() - + if hasattr(self, "mood"): self.mood.destroy() del self.mood if hasattr(self, "traits"): del self.traits - + try: for funcName in self.__funcsToDelete: del self.__dict__[funcName] @@ -865,7 +860,7 @@ def delete(self): self.setHasRequestedDelete(False) - DistributedSmoothNodeAI.DistributedSmoothNodeAI.delete(self) + DistributedSmoothNodeAI.delete(self) def patchDelete(self): # called by the patcher to remove cyclical references and prevent @@ -883,7 +878,7 @@ def patchDelete(self): # prevent a crash; we do not own our doId and do not have a zoneId self.doNotDeallocateChannel = True self.zoneId = None - DistributedSmoothNodeAI.DistributedSmoothNodeAI.delete(self) + DistributedSmoothNodeAI.delete(self) self.ignoreAll() def createImpulses(self): @@ -945,7 +940,7 @@ def getLockMoveTaskName(self): return 'petLockMove-%s' % (self.doId) def move(self, task=None): - + if self.isEmpty(): try: self.air.writeServerEvent("Late Pet Move Call", self.doId, " ") @@ -953,8 +948,8 @@ def move(self, task=None): pass taskMgr.remove(task.name) return Task.done - - + + if not self.isLockMoverEnabled(): self.mover.move() @@ -982,7 +977,7 @@ def move(self, task=None): self.requestDelete() # in this case make sure we don't schedule another run of this task return Task.done - + # schedule the next move if __dev__: self.pscMoveResc.start() @@ -995,11 +990,9 @@ def move(self, task=None): def startPosHprBroadcast(self): if self._outOfBounds: return - # force XYH only - DistributedSmoothNodeAI.DistributedSmoothNodeAI.startPosHprBroadcast( - self, - period=simbase.petPosBroadcastPeriod, - type=DistributedSmoothNodeBase.DistributedSmoothNodeBase.BroadcastTypes.XYH) + self.broadcastType = BroadcastTypes.XYH + self.broadcastTime = PetConstants.PosBroadcastPeriod + DistributedSmoothNodeAI.startPosHprBroadcast(self) # you can call these funcs to influence the pet's mood def setMoodComponent(self, component, value): @@ -1023,10 +1016,10 @@ def lerpMood(self, component, factor): else: self.setMoodComponent(component, lerp(curVal, 1., factor)) def addToMoods(self, mood2delta): - for mood, delta in mood2delta.items(): + for mood, delta in list(mood2delta.items()): self.addToMood(mood, delta) def lerpMoods(self, mood2factor): - for mood, factor in mood2factor.items(): + for mood, factor in list(mood2factor.items()): self.lerpMood(mood, factor) if __debug__: def maxMood(self): @@ -1078,7 +1071,7 @@ def call(self, avatar): self.brain.observe(PetObserve.PetPhraseObserve( PetObserve.Phrases.COME, avatar.doId)) self.__petMovieStart(avatar.doId) - + def feed(self, avatar): if avatar.takeMoney(PetConstants.FEED_AMOUNT): self.startLockPetMove(avatar.doId) @@ -1136,7 +1129,7 @@ def gaitEnterOff(self): pass def gaitExitOff(self): pass - + def gaitEnterNeutral(self): self.mover.setFwdSpeed(PetConstants.FwdSpeed) self.mover.setRotSpeed(PetConstants.RotSpeed) @@ -1227,22 +1220,22 @@ def _getNearbyToon(self): nearbyToonDict = self._getFullNearbyToonDict() if not len(nearbyToonDict): return None - return nearbyToonDict[random.choice(nearbyToonDict.keys())] + return nearbyToonDict[random.choice(list(nearbyToonDict.keys()))] def _getNearbyToonNonOwner(self): nearbyToonDict = self._getNearbyToonDict() if not len(nearbyToonDict): return None - return nearbyToonDict[random.choice(nearbyToonDict.keys())] + return nearbyToonDict[random.choice(list(nearbyToonDict.keys()))] def _getNearbyPet(self): nearbyPetDict = self._getNearbyPetDict() if not len(nearbyPetDict): return None - return nearbyPetDict[random.choice(nearbyPetDict.keys())] + return nearbyPetDict[random.choice(list(nearbyPetDict.keys()))] def _getNearbyAvatar(self): nearbyAvDict = self._getNearbyAvatarDict() if not len(nearbyAvDict): return None - return nearbyAvDict[random.choice(nearbyAvDict.keys())] + return nearbyAvDict[random.choice(list(nearbyAvDict.keys()))] # # pet movie methods @@ -1263,7 +1256,7 @@ def avatarInteract(self, avId): assert(self.notify.debug("avatar enter avId: %s busy: %s " % (avId, self.busy))) av = self.air.doId2do.get(avId) - + if av is None: self.notify.warning("Avatar: %s not found" % (avId)) return 0 @@ -1277,7 +1270,7 @@ def avatarInteract(self, avId): self.notify.debug("sending update") self.sendUpdateToAvatarId(avId, "avatarInteract", [avId]) - + # handle unexpected exit self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId]) @@ -1301,7 +1294,7 @@ def sendClearMovie(self, task=None): self.busy = 0 self.d_setMovie(0, PetConstants.PET_MOVIE_CLEAR) return Task.done - + def __handleUnexpectedExit(self, avId): self.notify.warning('avatar:' + str(avId) + ' has exited unexpectedly') self.notify.warning('not busy with avId: %s, busy: %s ' % (avId, self.busy)) @@ -1394,7 +1387,7 @@ def startLockPetMove(self, avId): dist_Callable = self.movieDistSwitch.get(self.movieMode) dist = dist_Callable( self.air.doId2do.get(avId).getStyle().getLegSize()) - + self.lockChaseImpulse.setMinDist(dist) # Dist list is used to store the last three distance checks. It is @@ -1404,7 +1397,7 @@ def startLockPetMove(self, avId): self.distList = [0,0,0] # Start the movement task - self.__lockPetMoveTask(avId) + self.__lockPetMoveTask(avId) ###################################################################### # Method: getAverageDist @@ -1429,7 +1422,7 @@ def getAverageDist(self): def __lockPetMoveTask(self, avId): # In case the pet or toon has been deleted without cleaning up this # task, we need to do some checking first - if (not hasattr(self, 'air') or not self.air.doId2do.has_key(avId)): + if (not hasattr(self, 'air') or avId not in self.air.doId2do): self.notify.warning("avId: %s gone or self deleted!" % avId) # TODO: do we need to do some cleanup here? return Task.done @@ -1446,7 +1439,7 @@ def __lockPetMoveTask(self, avId): # We need to calculate the distance the pet should come within for # toons of varying size. Shorter toons need the pet to come in closer, # while tall toons need them to stay out a little further. - if self.movieDistSwitch.has_key(self.movieMode): + if self.movieMode in self.movieDistSwitch: dist_Callable = self.movieDistSwitch.get(self.movieMode) movieDist = dist_Callable(av.getStyle().getLegSize()) else: @@ -1466,7 +1459,7 @@ def __lockPetMoveTask(self, avId): self.getLockMoveTaskName(), [avId]) else: # Distance check has been met, thus we continue on with the - # movie. + # movie. self.endLockPetMove(avId) return Task.done @@ -1501,7 +1494,7 @@ def disableLockMover(self): self.lockMoverEnabled -= 1 if self.lockMoverEnabled == 0: self.brain._endMovie() - + # TRICK APTITUDE LOGIC def _willDoTrick(self, trickId): # Use this to determine whether or not the pet will do a particular @@ -1519,7 +1512,7 @@ def _willDoTrick(self, trickId): if self.mood.isComponentActive('fatigue'): cutoff *= .5 # Apply base accuracy for the specific trick - assert(PetTricks.TrickAccuracies.has_key(trickId)) + assert(trickId in PetTricks.TrickAccuracies) cutoff *= PetTricks.TrickAccuracies[trickId] DistributedPetAI.notify.debug('_willDoTrick: %s / %s' % ( randVal, cutoff)) @@ -1548,7 +1541,7 @@ def _handleGotPositiveTrickFeedback(self, trickId, magnitude): trickId, self.getTrickAptitude(trickId) + (PetTricks.MaxAptitudeIncrementGotPraise * magnitude)) - + # LEASH MAGIC WORD def toggleLeash(self, avId): # FOR DEBUGGING @@ -1567,4 +1560,4 @@ def toggleLeash(self, avId): response = 'leash ON' # magic word response return response - + diff --git a/toontown/src/pets/DistributedPetProxy.py b/toontown/src/pets/DistributedPetProxy.py index 3b0bf80a..6de6f4c5 100644 --- a/toontown/src/pets/DistributedPetProxy.py +++ b/toontown/src/pets/DistributedPetProxy.py @@ -53,7 +53,7 @@ def setSafeZone(self, safeZone): # setXXX func is generated for each trait def __generateDistTraitFuncs(self): # generate a set func for each trait - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] setterName = self.getSetterName(traitName) def traitSetter(value, self=self, i=i): @@ -155,7 +155,7 @@ def announceGenerate(self): # the corrupted doodle problem DistributedObject.DistributedObject.announceGenerate(self) self.traits = PetTraits.PetTraits(self.traitSeed, self.safeZone) - print self.traits.traits + print(self.traits.traits) """ self.traits = PetTraits.PetTraits(self.traitSeed, self.safeZone, traitValueList=self.traitList) @@ -166,7 +166,7 @@ def announceGenerate(self): self.lastKnownMood = self.mood.makeCopy() # pass in the cached required mood component values - for mood, value in self.requiredMoodComponents.items(): + for mood, value in list(self.requiredMoodComponents.items()): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} diff --git a/toontown/src/pets/DistributedPetProxyAI.py b/toontown/src/pets/DistributedPetProxyAI.py index b3c7ed43..953c52e4 100644 --- a/toontown/src/pets/DistributedPetProxyAI.py +++ b/toontown/src/pets/DistributedPetProxyAI.py @@ -110,7 +110,7 @@ def setTraits(self, traitList): # get, b_set, d_set, and set funcs are generated for each trait def __generateDistTraitFuncs(self): - for i in xrange(PetTraits.PetTraits.NumTraits): + for i in range(PetTraits.PetTraits.NumTraits): traitName = PetTraits.getTraitNames()[i] getterName = self.getSetterName(traitName, 'get') b_setterName = self.getSetterName(traitName, 'b_set') @@ -347,7 +347,7 @@ def generate(self): # don't use the trait values from the DB, this should circumvent # the corrupted doodle problem self.traits = PetTraits.PetTraits(self.traitSeed, self.safeZone) - print self.traits.traits + print(self.traits.traits) """ self.traits = PetTraits.PetTraits( self.traitSeed, self.safeZone, @@ -357,7 +357,7 @@ def generate(self): # if there are any new traits, we need to set their generated value in # the DB. - for i in xrange(len(self.traitList)): + for i in range(len(self.traitList)): value = self.traitList[i] if value == 0.: traitName = PetTraits.getTraitNames()[i] @@ -372,7 +372,7 @@ def generate(self): self.mood = PetMood.PetMood(self) # pass in the cached required mood component values - for mood, value in self.requiredMoodComponents.items(): + for mood, value in list(self.requiredMoodComponents.items()): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} @@ -416,10 +416,10 @@ def lerpMood(self, component, factor): else: self.setMoodComponent(component, lerp(curVal, 1., factor)) def addToMoods(self, mood2delta): - for mood, delta in mood2delta.items(): + for mood, delta in list(mood2delta.items()): self.addToMood(mood, delta) def lerpMoods(self, mood2factor): - for mood, factor in mood2factor.items(): + for mood, factor in list(mood2factor.items()): self.lerpMood(mood, factor) def isContented(self): @@ -445,7 +445,7 @@ def _willDoTrick(self, trickId): if self.mood.isComponentActive('fatigue'): cutoff *= .5 # Apply base accuracy for the specific trick - assert(PetTricks.TrickAccuracies.has_key(trickId)) + assert(trickId in PetTricks.TrickAccuracies) cutoff *= PetTricks.TrickAccuracies[trickId] DistributedPetProxyAI.notify.debug('_willDoTrick: %s / %s' % ( randVal, cutoff)) diff --git a/toontown/src/pets/Pet.py b/toontown/src/pets/Pet.py index 52b37225..616559e0 100644 --- a/toontown/src/pets/Pet.py +++ b/toontown/src/pets/Pet.py @@ -8,7 +8,7 @@ from direct.actor import Actor from direct.task import Task from toontown.pets import PetDNA -from PetDNA import HeadParts, EarParts, NoseParts, TailParts, BodyTypes, BodyTextures, AllPetColors, getColors, ColorScales, PetEyeColors, EarTextures, TailTextures, getFootTexture, getEarTexture, GiraffeTail, LeopardTail, PetGenders +from .PetDNA import HeadParts, EarParts, NoseParts, TailParts, BodyTypes, BodyTextures, AllPetColors, getColors, ColorScales, PetEyeColors, EarTextures, TailTextures, getFootTexture, getEarTexture, GiraffeTail, LeopardTail, PetGenders from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownGlobals from direct.showbase import PythonUtil @@ -550,7 +550,7 @@ def exitDance(self): def enterNeutral(self): # make the neutral start at a random frame anim = 'neutral' - self.pose(anim, random.choice(range(0, self.getNumFrames(anim)))) + self.pose(anim, random.choice(list(range(0, self.getNumFrames(anim))))) self.loop(anim, restart=0) def exitNeutral(self): @@ -559,7 +559,7 @@ def exitNeutral(self): def enterNeutralHappy(self): # make the happy neutral start at a random frame anim = 'neutralHappy' - self.pose(anim, random.choice(range(0, self.getNumFrames(anim)))) + self.pose(anim, random.choice(list(range(0, self.getNumFrames(anim))))) self.loop(anim, restart=0) def exitNeutralHappy(self): @@ -568,7 +568,7 @@ def exitNeutralHappy(self): def enterNeutralSad(self): # make the sad neutral start at a random frame anim = 'neutralSad' - self.pose(anim, random.choice(range(0, self.getNumFrames(anim)))) + self.pose(anim, random.choice(list(range(0, self.getNumFrames(anim))))) self.loop(anim, restart=0) def exitNeutralSad(self): @@ -820,7 +820,7 @@ def unlockPet(self): def getInteractIval(self, interactId): anims = self.InteractAnims[interactId] #print "getInteractIval: anims = ", anims - if type(anims) == types.StringType: + if type(anims) == bytes: animIval = ActorInterval(self, anims) else: animIval = Sequence() @@ -838,15 +838,15 @@ def gridPets(): colors = getColors(body) for color in colors: p = Pet() - p.setDNA([random.choice(range(-1, len(HeadParts))), - random.choice(range(-1, len(EarParts))), - random.choice(range(-1, len(NoseParts))), - random.choice(range(-1, len(TailParts))), + p.setDNA([random.choice(list(range(-1, len(HeadParts)))), + random.choice(list(range(-1, len(EarParts)))), + random.choice(list(range(-1, len(NoseParts)))), + random.choice(list(range(-1, len(TailParts)))), body, color, - random.choice(range(-1, len(ColorScales))), - random.choice(range(0, len(PetEyeColors))), - random.choice(range(0, len(PetGenders))), + random.choice(list(range(-1, len(ColorScales)))), + random.choice(list(range(0, len(PetEyeColors)))), + random.choice(list(range(0, len(PetGenders)))), ] ) p.setPos(startPos[0] + offsetX, startPos[1] + offsetY, startPos[2]) diff --git a/toontown/src/pets/PetBase.py b/toontown/src/pets/PetBase.py index 0b021f3c..8be789f5 100644 --- a/toontown/src/pets/PetBase.py +++ b/toontown/src/pets/PetBase.py @@ -2,14 +2,13 @@ from toontown.pets.PetConstants import AnimMoods from toontown.pets import PetMood -import string class PetBase: """common code shared by client and AI""" # I am wont to add functions to the pet object to reduce redundant typing. # This is a util func to make names for those getter/setter funcs. def getSetterName(self, valueName, prefix='set'): - return '%s%s%s' % (prefix, string.upper(valueName[0]), valueName[1:]) + return '%s%s%s' % (prefix, valueName[0].upper(), valueName[1:]) # these functions are here so that we are sure to keep all external # indications of mood consistent; we don't want a pet bouncing around diff --git a/toontown/src/pets/PetBrain.py b/toontown/src/pets/PetBrain.py index 9c92edbb..f6596d37 100644 --- a/toontown/src/pets/PetBrain.py +++ b/toontown/src/pets/PetBrain.py @@ -61,8 +61,8 @@ def destroy(self): del self.focus del self.pet if self.doId2goals: - self.notify.warning("destroy(): self.doId2goals is not empty: %s" % self.doId2goals.keys()) - for goalList in self.doId2goals.values(): + self.notify.warning("destroy(): self.doId2goals is not empty: %s" % list(self.doId2goals.keys())) + for goalList in list(self.doId2goals.values()): for goal in goalList: goal.destroy() del self.doId2goals @@ -190,7 +190,7 @@ def _think(self, task=None): if len(self.nearbyAvs) > PetConstants.MaxAvatarAwareness: self.nextAwarenessIndex %= len(self.nearbyAvs) self._considerBecomeAwareOf( - self.nearbyAvs.keys()[self.nextAwarenessIndex]) + list(self.nearbyAvs.keys())[self.nextAwarenessIndex]) self.nextAwarenessIndex += 1 if __dev__: self.pscAware.stop() diff --git a/toontown/src/pets/PetCollider.py b/toontown/src/pets/PetCollider.py index 1aa9f52b..f800d4d9 100644 --- a/toontown/src/pets/PetCollider.py +++ b/toontown/src/pets/PetCollider.py @@ -75,7 +75,7 @@ def _getCollisionEvent(self): return 'petFeeler-%s' % self._getSerialNum() def handleCollision(self, collEntry): - print 'collision!' + print('collision!') #print 'collision: %s' % collEntry #import pdb #pdb.set_trace() diff --git a/toontown/src/pets/PetConstants.py b/toontown/src/pets/PetConstants.py index 957be3d0..a6ab3a88 100644 --- a/toontown/src/pets/PetConstants.py +++ b/toontown/src/pets/PetConstants.py @@ -1,7 +1,8 @@ from pandac.PandaModules import * -from direct.showbase.PythonUtil import Enum, invertDictLossless +from direct.showbase.PythonUtil import invertDictLossless import math from toontown.toonbase import ToontownGlobals +import enum # This is a bboard key for a bool that, if True, indicates that we know # that the mood of localAvatar's pet has changed in the DB. If true, upon @@ -69,7 +70,7 @@ # these are general, high-level moods that directly correspond to the sets # of body animations (walk, neutral) that we have for the pets -AnimMoods = Enum('EXCITED, SAD, NEUTRAL') +AnimMoods = enum.IntEnum('AnimMoods', ('EXCITED', 'SAD', 'NEUTRAL')) # movement speeds FwdSpeed = 12. diff --git a/toontown/src/pets/PetDCImports.py b/toontown/src/pets/PetDCImports.py index d1ccf4b5..bde46717 100644 --- a/toontown/src/pets/PetDCImports.py +++ b/toontown/src/pets/PetDCImports.py @@ -2,4 +2,4 @@ """ if hasattr(base, 'wantPets') and base.wantPets: - import DistributedPet + from . import DistributedPet diff --git a/toontown/src/pets/PetDCImportsAI.py b/toontown/src/pets/PetDCImportsAI.py index f2e07e4c..2c86a5c6 100644 --- a/toontown/src/pets/PetDCImportsAI.py +++ b/toontown/src/pets/PetDCImportsAI.py @@ -2,4 +2,4 @@ """ if simbase.wantPets: - import DistributedPetAI + from . import DistributedPetAI diff --git a/toontown/src/pets/PetDNA.py b/toontown/src/pets/PetDNA.py index d53709d7..7db643b3 100644 --- a/toontown/src/pets/PetDNA.py +++ b/toontown/src/pets/PetDNA.py @@ -172,15 +172,15 @@ def getRandomPetDNA(zoneId=ToontownGlobals.DonaldsDreamland): from random import choice - head = choice(range(-1, len(HeadParts))) - ears = choice(range(-1, len(EarParts))) - nose = choice(range(-1, len(NoseParts))) - tail = choice(range(-1, len(TailParts))) + head = choice(list(range(-1, len(HeadParts)))) + ears = choice(list(range(-1, len(EarParts)))) + nose = choice(list(range(-1, len(NoseParts)))) + tail = choice(list(range(-1, len(TailParts)))) body = getSpecies(zoneId) - color = choice(range(0, len(getColors(body)))) - colorScale = choice(range(0, len(ColorScales))) - eyes = choice(range(0, len(PetEyeColors))) - gender = choice(range(0, len(PetGenders))) + color = choice(list(range(0, len(getColors(body))))) + colorScale = choice(list(range(0, len(ColorScales)))) + eyes = choice(list(range(0, len(PetEyeColors)))) + gender = choice(list(range(0, len(PetGenders)))) return [head, ears, nose, tail, body, color, colorScale, eyes, gender] def getSpecies(zoneId): @@ -224,7 +224,7 @@ def getBodyRarity(bodyIndex): for zoneId in PetRarities['body']: for body in PetRarities['body'][zoneId]: totalWeight += PetRarities['body'][zoneId][body] - if weight.has_key(body): + if body in weight: weight[body] += PetRarities['body'][zoneId][body] else: weight[body] = PetRarities['body'][zoneId][body] diff --git a/toontown/src/pets/PetDetailPanel.py b/toontown/src/pets/PetDetailPanel.py index 59924029..dff35b66 100644 --- a/toontown/src/pets/PetDetailPanel.py +++ b/toontown/src/pets/PetDetailPanel.py @@ -99,7 +99,7 @@ def cleanup(self): def update(self, pet): if not pet: return - for trickId in PetTricks.TrickId2scIds.keys(): + for trickId in list(PetTricks.TrickId2scIds.keys()): trickText = TTLocalizer.PetTrickStrings[trickId] if trickId < len(pet.trickAptitudes): aptitude = pet.trickAptitudes[trickId] diff --git a/toontown/src/pets/PetGoalMgr.py b/toontown/src/pets/PetGoalMgr.py index c37a3839..51cbc348 100644 --- a/toontown/src/pets/PetGoalMgr.py +++ b/toontown/src/pets/PetGoalMgr.py @@ -33,7 +33,7 @@ def destroy(self): del self.pscSetup del self.pscFindPrimary del self.pscSetPrimary - goals = self.goals.keys() + goals = list(self.goals.keys()) for goal in goals: self.removeGoal(goal) goal.destroy() diff --git a/toontown/src/pets/PetLookerAI.py b/toontown/src/pets/PetLookerAI.py index 9216a39e..27ed8556 100644 --- a/toontown/src/pets/PetLookerAI.py +++ b/toontown/src/pets/PetLookerAI.py @@ -48,7 +48,7 @@ def destroy(self): self.exitPetLook() if len(self.others): PetLookerAI.notify.warning('%s: self.others not empty: %s' % - (self.doId, self.others.keys())) + (self.doId, list(self.others.keys()))) self.others = {} def _getPetLookerBodyNode(self): @@ -67,7 +67,7 @@ def enterPetLook(self): return if len(self.others): PetLookerAI.notify.warning("%s: len(self.others) != 0: %s" % - (self.doId, self.others.keys())) + (self.doId, list(self.others.keys()))) self.others = {} self.__active = 1 @@ -85,7 +85,7 @@ def exitPetLook(self): # if we're still showing as looking at someone, force not looking. # this is a hack, we shouldn't have to do this. if len(self.others): - otherIds = self.others.keys() + otherIds = list(self.others.keys()) PetLookerAI.notify.warning('%s: still in otherIds: %s' % ( self.doId, otherIds)) for otherId in otherIds: @@ -94,7 +94,7 @@ def exitPetLook(self): if len(self.others): PetLookerAI.notify.warning( "%s: self.others still not empty: %s" % - (self.doId, self.others.keys())) + (self.doId, list(self.others.keys()))) self.others = {} self._destroyPetLookSphere() diff --git a/toontown/src/pets/PetManagerAI.py b/toontown/src/pets/PetManagerAI.py index 82b4a9d9..3da1b7d0 100644 --- a/toontown/src/pets/PetManagerAI.py +++ b/toontown/src/pets/PetManagerAI.py @@ -12,8 +12,8 @@ class PetManagerAI(DirectObject.DirectObject): notify = DirectNotifyGlobal.directNotify.newCategory("PetManagerAI") - #notify.setDebug(1) - + notify.setDebug(1) + def __init__(self, air): self.air = air self.serialNum = 0 @@ -48,7 +48,7 @@ def handleToonEnterEstate(self, avId, ownerId, zoneId): assert(PetManagerAI.notify.debug('toon going to estate: %s %s %s' % ( avId, ownerId, zoneId))) toon = simbase.air.doId2do[avId] - # is the toon already in the estate zone? + # is the toon already in the estate zone? if toon.zoneId == zoneId: self._onToonArriveInEstate(avId, ownerId, zoneId) else: @@ -173,7 +173,6 @@ def handleGetPet(success, pet, petId=petId, zoneId=zoneId): def doGenPet(pet, petId, zoneId): # create pet in the quiet zone so that it gets a # zone change msg when entering its destination - pet.dbObject = 1 pet.generateWithRequiredAndId(petId, self.air.districtId, zoneId) simbase.air.setAIReceiver(petId) if petId not in simbase.air.doId2do: @@ -200,7 +199,7 @@ def movePetToZone(self, petId, zoneId): - the pet has requested deletion and is awaiting a delete """ def doGenPetInZone(self, petId, zoneId): - self.generatePetInZone(petId, zoneId) + self.generatePetInZone(petId, zoneId) if petId not in simbase.air.doId2do: simbase.air.requestDeleteDoId(petId) doGenPetInZone(self, petId, zoneId) @@ -245,7 +244,7 @@ def __stopGenerateAfterDelete(self): def __doGenerateAfterDelete(self, task): # if a pet has been deleted, generate it in the new zone assert len(self._petsToGenerateAfterDeletion) > 0 - petIds = self._petsToGenerateAfterDeletion.keys() + petIds = list(self._petsToGenerateAfterDeletion.keys()) for petId in petIds: if petId not in simbase.air.doId2do: zoneId = self._petsToGenerateAfterDeletion[petId] @@ -335,8 +334,7 @@ def handleGetPet(success, pet, petId=petId): # DB fields pet.setInactive() pet._beingCreatedInDB = True - pet.dbObject = 1 - pet.generateWithRequiredAndId(petId, + pet.generateWithRequiredAndId(petId, self.air.districtId, ToontownGlobals.QuietZone) simbase.air.setAIReceiver(petId) @@ -371,7 +369,7 @@ def handlePetGenerated(success, pet): else: PetManagerAI.notify.warning('error creating pet for %s' % toonId) self.createNewPetObject(handleCreate) - + def deleteToonsPet(self, toonId): """ delete the toon's current pet. Pet objects (like all DB objects) are written to a separate XML file upon deletion. """ @@ -420,6 +418,6 @@ def getAvailablePets(self, numDaysPetAvailable, numPetsPerDay): seeds.append( random.randrange(seedMax) ) return seeds - + random.setstate(S) - + diff --git a/toontown/src/pets/PetNameGenerator.py b/toontown/src/pets/PetNameGenerator.py index 6b06808e..90c18665 100644 --- a/toontown/src/pets/PetNameGenerator.py +++ b/toontown/src/pets/PetNameGenerator.py @@ -53,6 +53,8 @@ def generateLists(self): currentLine = input.readline() while currentLine: + currentLine = currentLine.decode() + if currentLine.lstrip()[0:1] != '#': a1 = currentLine.find('*') a2 = currentLine.find('*', a1+1) @@ -61,13 +63,13 @@ def generateLists(self): currentLine = input.readline() masterList = [self.boyFirsts, self.girlFirsts, self.neutralFirsts] - for tu in self.nameDictionary.values(): + for tu in list(self.nameDictionary.values()): masterList[tu[0]].append(tu[1]) return 1 def getName(self, uniqueID): return self.nameDictionary[uniqueID][1] - + def returnUniqueID(self, name): """ If successful it returns the uniqueID, if not then -1 @@ -77,7 +79,7 @@ def returnUniqueID(self, name): newtu[1] = (1, name) newtu[2] = (2, name) - for tu in self.nameDictionary.items(): + for tu in list(self.nameDictionary.items()): for g in newtu: if tu[1] == g: return tu[0] diff --git a/toontown/src/pets/PetObserve.py b/toontown/src/pets/PetObserve.py index 1583d9f7..cf3f6990 100644 --- a/toontown/src/pets/PetObserve.py +++ b/toontown/src/pets/PetObserve.py @@ -1,7 +1,8 @@ from direct.directnotify import DirectNotifyGlobal -from direct.showbase.PythonUtil import list2dict, Enum +from direct.showbase.PythonUtil import list2dict from toontown.pets import PetTricks import types +import enum notify = DirectNotifyGlobal.directNotify.newCategory('PetObserve') @@ -21,24 +22,24 @@ def getEventName(zoneId): def send(zoneIds, petObserve): if petObserve.isValid(): #notify.debug('sending pet observe %s to %s' % (petObserve, zoneIds)) - if type(zoneIds) not in (types.ListType, types.TupleType): + if type(zoneIds) not in (list, tuple): zoneIds = [zoneIds] for zoneId in zoneIds: messenger.send(getEventName(zoneId), [petObserve]) # spoken messages that pets understand; speedchat phrases map to one of these -Phrases = Enum('HI, BYE, YES, NO, SOOTHE, PRAISE, CRITICISM, HAPPY,' - 'SAD, ANGRY, HURRY, QUESTION, FRIENDLY, LETS_PLAY,' - 'COME, FOLLOW_ME, STAY, NEED_LAFF, NEED_GAGS, NEED_JB,' - 'GO_AWAY, DO_TRICK,' - ) +Phrases = enum.IntEnum('Phrases', ('HI', 'BYE', 'YES', 'NO', 'SOOTHE', 'PRAISE', 'CRITICISM', 'HAPPY', + 'SAD', 'ANGRY', 'HURRY', 'QUESTION', 'FRIENDLY', 'LETS_PLAY', + 'COME', 'FOLLOW_ME', 'STAY', 'NEED_LAFF', 'NEED_GAGS', 'NEED_JB', + 'GO_AWAY', 'DO_TRICK') +) # actions of other avatars that the pet can observe -Actions = Enum('FEED, SCRATCH,' - 'ATTENDED_START, ATTENDED_STOP,' - 'ATTENDING_START, ATTENDING_STOP,' - 'CHANGE_ZONE, LOGOUT,' - 'GARDEN' - ) +Actions = enum.IntEnum('Actions', ('FEED', 'SCRATCH', + 'ATTENDED_START', 'ATTENDED_STOP', + 'ATTENDING_START', 'ATTENDING_STOP', + 'CHANGE_ZONE', 'LOGOUT', + 'GARDEN') +) class PetObserve: # base class for all pet observes @@ -70,7 +71,7 @@ def getAvId(self): return self.avId def getData(self): return self.data - + def _influence(self, petBrain): petBrain._handleActionObserve(self) def __repr__(self): diff --git a/toontown/src/pets/PetTraits.py b/toontown/src/pets/PetTraits.py index 2dc7c3de..5593e850 100644 --- a/toontown/src/pets/PetTraits.py +++ b/toontown/src/pets/PetTraits.py @@ -1,7 +1,7 @@ -from direct.showbase.PythonUtil import randFloat, normalDistrib, Enum +from direct.showbase.PythonUtil import randFloat, normalDistrib from direct.showbase.PythonUtil import clampScalar from toontown.toonbase import TTLocalizer, ToontownGlobals -import random, copy +import random, copy, enum # this should match the DC TraitDivisor = 10000 @@ -27,9 +27,9 @@ class TraitDistribution: # trait value. Traits are in [0..1] # these are classifications for pet traits - TraitQuality = Enum('VERY_BAD, BAD, AVERAGE, GOOD, VERY_GOOD') + TraitQuality = enum.IntEnum('TraitQuality', ('VERY_BAD', 'BAD', 'AVERAGE', 'GOOD', 'VERY_GOOD')) # INCREASING means higher value is better - TraitTypes = Enum('INCREASING, DECREASING') + TraitTypes = enum.IntEnum('TraitTypes', ('INCREASING', 'DECREASING')) # subclasses should set this to a table of szId: (min, max) Sz2MinMax = None @@ -235,7 +235,7 @@ def __init__(self, index, traitsObj, value=None): def __repr__(self): return ('Trait: %s, %s, %s, %s' % ( self.name, self.value, - TraitDistribution.TraitQuality.getString(self.quality), + TraitDistribution.TraitQuality(self.quality).name, self.howExtreme)) def __init__(self, traitSeed, safeZoneId, traitValueList=[]): @@ -246,10 +246,10 @@ def __init__(self, traitSeed, safeZoneId, traitValueList=[]): self.traitSeed = traitSeed self.safeZoneId = safeZoneId self.rng = random.Random(self.traitSeed) - + # create dictionary of trait name to Trait object self.traits = {} - for i in xrange(len(PetTraits.TraitDescs)): + for i in range(len(PetTraits.TraitDescs)): # if we have a valid value for this trait... if i < len(traitValueList) and traitValueList[i] > 0.: # assign it directly @@ -260,10 +260,10 @@ def __init__(self, traitSeed, safeZoneId, traitValueList=[]): self.traits[trait.name] = trait # add a copy of the trait value on ourselves self.__dict__[trait.name] = trait.value - + # pre-calculate the extreme traits, ordered by... extremity-ness extremeTraits = [] - for trait in self.traits.values(): + for trait in list(self.traits.values()): if not trait.hasWorth: continue if trait.quality == TraitDistribution.TraitQuality.AVERAGE: @@ -276,7 +276,7 @@ def __init__(self, traitSeed, safeZoneId, traitValueList=[]): if __debug__: # make sure it's decreasing if len(extremeTraits) > 1: - for i in xrange(len(extremeTraits)-1): + for i in range(len(extremeTraits)-1): assert (extremeTraits[i].howExtreme >= extremeTraits[i+1].howExtreme) self.extremeTraits = [] @@ -306,7 +306,7 @@ def getOverallValue(self): total = 0 numUsed = 0 - for trait in self.traits.values(): + for trait in list(self.traits.values()): if trait.hasWorth: if trait.higherIsBetter: value = trait.value @@ -315,7 +315,7 @@ def getOverallValue(self): total += value numUsed += 1 - value = total / len(self.traits.values()) + value = total / len(list(self.traits.values())) """ TRAITFIX -- replace value calculation with: value = total / float(numUsed) """ diff --git a/toontown/src/pets/PetTricks.py b/toontown/src/pets/PetTricks.py index e9216785..f190b56c 100644 --- a/toontown/src/pets/PetTricks.py +++ b/toontown/src/pets/PetTricks.py @@ -1,14 +1,15 @@ """PetTricks.py""" -from direct.showbase.PythonUtil import Enum, invertDictLossless +from direct.showbase.PythonUtil import invertDictLossless from direct.interval.IntervalGlobal import * import types import random +import enum # ONLY ADD TRICKS JUST BEFORE 'BALK' # BALK is not really a trick; it's what the pets do if they don't do the trick # correctly. Keep it at the end of the Enum. -Tricks = Enum('JUMP, BEG, PLAYDEAD, ROLLOVER, BACKFLIP, DANCE, SPEAK, BALK,') +Tricks = enum.IntEnum('Tricks', ('JUMP', 'BEG', 'PLAYDEAD', 'ROLLOVER', 'BACKFLIP', 'DANCE', 'SPEAK', 'BALK'), start=0) assert Tricks.BALK == len(Tricks)-1 # these are what aptitude 0. and 1. map to in an actual random range of [0,1] @@ -117,7 +118,7 @@ def getSoundIval(trickId): sounds = TrickSounds.get(trickId, None) if sounds: - if type(sounds) == types.StringType: + if type(sounds) == bytes: sound = loader.loadSfx(sounds) return SoundInterval(sound) else: @@ -137,7 +138,7 @@ def getTrickIval(pet, trickId): animRate = random.uniform(.9, 1.1) waitTime = random.uniform(0.0, 1.0) - if type(anims) == types.StringType: + if type(anims) == bytes: # If-Else statement to construct animation intervals based-on # specific tricks that cannot be generated generically, ie the jump # because the z-offset was left out of the animation. diff --git a/toontown/src/publish/QuickScrubber.py b/toontown/src/publish/QuickScrubber.py index 2f608140..1ccac4e7 100644 --- a/toontown/src/publish/QuickScrubber.py +++ b/toontown/src/publish/QuickScrubber.py @@ -222,10 +222,10 @@ try: opts, pargs = getopt.getopt(sys.argv[1:], 'hRf:p:m:') -except Exception, e: +except Exception as e: # User passed in a bad option, print the error and the help, then exit - print e - print helpString + print(e) + print(helpString) sys.exit(1) platform = 'WIN32' @@ -235,7 +235,7 @@ for opt in opts: flag, value = opt if (flag == '-h'): - print helpString + print(helpString) sys.exit(1) elif (flag == '-R'): cdmode = 1 @@ -246,11 +246,11 @@ elif (flag == '-m'): mode = value else: - print 'illegal option: ' + flag + print('illegal option: ' + flag) sys.exit(1) if (not (len(pargs) == 3)): - print 'Must specify a command, an installDirectory, and a persistDirectory' + print('Must specify a command, an installDirectory, and a persistDirectory') sys.exit(1) else: command = pargs[0] @@ -299,14 +299,14 @@ def __init__(self): self.doCopyCommand() else: - print "Invalid command: %s" % (command) + print("Invalid command: %s" % (command)) sys.exit(1) def doCopyCommand(self): # First, open the existing download database (in two files). if not self.persistServerDbFilename.exists() or \ not self.persistClientDbFilename.exists(): - print "server.ddb or client.ddb not found." + print("server.ddb or client.ddb not found.") sys.exit(1) self.dldb = DownloadDb(self.persistServerDbFilename, self.persistClientDbFilename) @@ -400,7 +400,7 @@ def writeProgressFile(self): progressFilename.unlink() progressFile = open(progressFilename.toOsSpecific(), "w") - items = self.progressMap.items() + items = list(self.progressMap.items()) # Sort it into alphabetical order by filename, for no good reason. items.sort() @@ -418,7 +418,7 @@ def doCDPatch(self): self.currentMfname = Filename(self.lineList[1]) self.currentMfphase = eval(self.lineList[2]) - self.notify.info('doCDPatch: scanning multifile: ' + self.currentMfname.cStr() + ' phase: ' + `self.currentMfphase`) + self.notify.info('doCDPatch: scanning multifile: ' + self.currentMfname.cStr() + ' phase: ' + repr(self.currentMfphase)) # copy in the webmode multifile instead of generating a new one baseName = self.currentMfname.getBasenameWoExtension() @@ -572,8 +572,8 @@ def doScrubCommand(self): else: # error - raise StandardError, ('Unknown directive: ' + `self.lineList[0]` - + ' on line: ' + `self.lineNum+1`) + raise Exception('Unknown directive: ' + repr(self.lineList[0]) + + ' on line: ' + repr(self.lineNum+1)) self.lineList = self.getNextLine() # All done, close the final multifile @@ -644,7 +644,7 @@ def parseMfile(self): self.notify.error("Unable to open multifile %s for writing." % (sourceFilename.cStr())) self.currentMfphase = eval(self.lineList[2]) self.notify.info('parseMfile: creating multifile: ' + self.currentMfname.cStr() - + ' phase: ' + `self.currentMfphase`) + + ' phase: ' + repr(self.currentMfphase)) mfsize = 0 # This will be filled in later mfstatus = DownloadDb.StatusIncomplete self.dldb.serverAddMultifile(self.currentMfname.getFullpath(), @@ -674,7 +674,7 @@ def getHighestVersion(self, persistFilename): def fileVer(self, filename, version): # Return the name of the versioned file - return Filename(filename.cStr() + '.v' + `version`) + return Filename(filename.cStr() + '.v' + repr(version)) def compFile(self, filename): # Return the name of the compressed file @@ -936,7 +936,7 @@ def parseFile(self, lineList): # Now sign the file. command = 'otp-sign1 -n %s' % (sourceFilename) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1113,9 +1113,9 @@ def installMfile(self, mfname): potentialTotal = totalPatchesSize + patchSize if (potentialTotal > actualFileSize): self.notify.debug('parseFile: Truncating patch list at version: ' - + `version` + '\n' - + ' total would have been: ' + `potentialTotal` + '\n' - + ' but entire file is only: ' + `actualFileSize`) + + repr(version) + '\n' + + ' total would have been: ' + repr(potentialTotal) + '\n' + + ' but entire file is only: ' + repr(actualFileSize)) compPatchFilename.unlink() try: del self.progressMap[compPatchFilename.getBasenameWoExtension()] @@ -1134,7 +1134,7 @@ def installMfile(self, mfname): # Remove any versions that we do not need anymore for version in range(lastVersion+1, highVer+1): - self.notify.debug('parseFile: Removing obsolete version: ' + `version`) + self.notify.debug('parseFile: Removing obsolete version: ' + repr(version)) patchFilename = self.patchVer(persistFilename, version) patchFilename.unlink() try: @@ -1157,7 +1157,7 @@ def bunzipToTemporary(self, filename): # temporary filename, and returns the temporary filename. tempFilename = Filename.temporary('', 'Scrub_') command = 'bunzip2 <"%s" >"%s"' % (filename.toOsSpecific(), tempFilename.toOsSpecific()) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1236,7 +1236,7 @@ def compressFile(self, sourceFilename, destFilename, useBzip2 = 0): else: command = 'pzip -o "%s" "%s"' % (destFilename.toOsSpecific(), sourceFilename.toOsSpecific()) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1254,7 +1254,7 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): actualFileSize = fileSize if actualFileSize == None: actualFileSize = contentFilename.getFileSize() - self.notify.info('actualFileSize = ' + `actualFileSize`) + self.notify.info('actualFileSize = ' + repr(actualFileSize)) # Keep a running total of the patch sizes so we do not exceed the # size of the actual file totalPatchesSize = 0 @@ -1283,9 +1283,9 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): potentialTotal = totalPatchesSize + patchSize if (version > 15 or potentialTotal > actualFileSize): self.notify.debug('wiseScrubber: Truncating patch list at version: ' - + `version` + '\n' - + ' total would have been: ' + `potentialTotal` + '\n' - + ' but entire file is only: ' + `actualFileSize`) + + repr(version) + '\n' + + ' total would have been: ' + repr(potentialTotal) + '\n' + + ' but entire file is only: ' + repr(actualFileSize)) copyPatchFilename.unlink() try: del self.progressMap[copyPatchFilename.getBasenameWoExtension()] @@ -1304,7 +1304,7 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): # Remove any versions that we do not need anymore for version in range(lastVersion+1, highVer+1): - self.notify.debug('wiseScrubber: Removing obsolete version: ' + `version`) + self.notify.debug('wiseScrubber: Removing obsolete version: ' + repr(version)) patchFilename = self.patchVer(persistFilename, version) patchFilename.unlink() try: diff --git a/toontown/src/publish/Scrubber.py b/toontown/src/publish/Scrubber.py index d52e0f0f..45a647e2 100644 --- a/toontown/src/publish/Scrubber.py +++ b/toontown/src/publish/Scrubber.py @@ -224,10 +224,10 @@ try: opts, pargs = getopt.getopt(sys.argv[1:], 'hRf:p:m:') -except Exception, e: +except Exception as e: # User passed in a bad option, print the error and the help, then exit - print e - print helpString + print(e) + print(helpString) sys.exit(1) platform = 'WIN32' @@ -239,7 +239,7 @@ for opt in opts: flag, value = opt if (flag == '-h'): - print helpString + print(helpString) sys.exit(1) elif (flag == '-R'): cdmode = 1 @@ -250,15 +250,15 @@ elif (flag == '-m'): mode = value else: - print 'illegal option: ' + flag + print('illegal option: ' + flag) sys.exit(1) if mode != 'local' and mode != 'test' and mode != 'live': - print 'Invalid mode: %s' % (mode) + print('Invalid mode: %s' % (mode)) sys.exit(1) if (not (len(pargs) == 3)): - print 'Must specify a command, an installDirectory, and a persistDirectory' + print('Must specify a command, an installDirectory, and a persistDirectory') sys.exit(1) else: command = pargs[0] @@ -313,7 +313,7 @@ def __init__(self): self.doCopyCommand() else: - print "Invalid command: %s" % (command) + print("Invalid command: %s" % (command)) sys.exit(1) def doWiseCommand(self): @@ -447,7 +447,7 @@ def doCopyCommand(self): # First, open the existing download database (in two files). if not self.persistServerDbFilename.exists() or \ not self.persistClientDbFilename.exists(): - print "server.ddb or client.ddb not found." + print("server.ddb or client.ddb not found.") sys.exit(1) self.dldb = DownloadDb(self.persistServerDbFilename, self.persistClientDbFilename) @@ -541,7 +541,7 @@ def writeProgressFile(self): progressFilename.unlink() progressFile = open(progressFilename.toOsSpecific(), "w") - items = self.progressMap.items() + items = list(self.progressMap.items()) # Sort it into alphabetical order by filename, for no good reason. items.sort() @@ -559,7 +559,7 @@ def doCDPatch(self): self.currentMfname = Filename(self.lineList[1]) self.currentMfphase = eval(self.lineList[2]) - self.notify.info('doCDPatch: scanning multifile: ' + self.currentMfname.cStr() + ' phase: ' + `self.currentMfphase`) + self.notify.info('doCDPatch: scanning multifile: ' + self.currentMfname.cStr() + ' phase: ' + repr(self.currentMfphase)) # copy in the webmode multifile instead of generating a new one baseName = self.currentMfname.getBasenameWoExtension() @@ -713,8 +713,8 @@ def doScrubCommand(self): else: # error - raise StandardError, ('Unknown directive: ' + `self.lineList[0]` - + ' on line: ' + `self.lineNum+1`) + raise Exception('Unknown directive: ' + repr(self.lineList[0]) + + ' on line: ' + repr(self.lineNum+1)) self.lineList = self.getNextLine() # All done, close the final multifile @@ -785,7 +785,7 @@ def parseMfile(self): self.notify.error("Unable to open multifile %s for writing." % (sourceFilename.cStr())) self.currentMfphase = eval(self.lineList[2]) self.notify.info('parseMfile: creating multifile: ' + self.currentMfname.cStr() - + ' phase: ' + `self.currentMfphase`) + + ' phase: ' + repr(self.currentMfphase)) mfsize = 0 # This will be filled in later mfstatus = DownloadDb.StatusIncomplete self.dldb.serverAddMultifile(self.currentMfname.getFullpath(), @@ -815,7 +815,7 @@ def getHighestVersion(self, persistFilename): def fileVer(self, filename, version): # Return the name of the versioned file - return Filename(filename.cStr() + '.v' + `version`) + return Filename(filename.cStr() + '.v' + repr(version)) def compFile(self, filename): # Return the name of the compressed file @@ -1077,7 +1077,7 @@ def parseFile(self, lineList): # Now sign the file. command = 'otp-sign1 -n %s' % (sourceFilename) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1254,9 +1254,9 @@ def installMfile(self, mfname): potentialTotal = totalPatchesSize + patchSize if (potentialTotal > actualFileSize): self.notify.debug('parseFile: Truncating patch list at version: ' - + `version` + '\n' - + ' total would have been: ' + `potentialTotal` + '\n' - + ' but entire file is only: ' + `actualFileSize`) + + repr(version) + '\n' + + ' total would have been: ' + repr(potentialTotal) + '\n' + + ' but entire file is only: ' + repr(actualFileSize)) compPatchFilename.unlink() try: del self.progressMap[compPatchFilename.getBasenameWoExtension()] @@ -1275,7 +1275,7 @@ def installMfile(self, mfname): # Remove any versions that we do not need anymore for version in range(lastVersion+1, highVer+1): - self.notify.debug('parseFile: Removing obsolete version: ' + `version`) + self.notify.debug('parseFile: Removing obsolete version: ' + repr(version)) patchFilename = self.patchVer(persistFilename, version) patchFilename.unlink() try: @@ -1298,7 +1298,7 @@ def bunzipToTemporary(self, filename): # temporary filename, and returns the temporary filename. tempFilename = Filename.temporary('', 'Scrub_') command = 'bunzip2 <"%s" >"%s"' % (filename.toOsSpecific(), tempFilename.toOsSpecific()) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1377,7 +1377,7 @@ def compressFile(self, sourceFilename, destFilename, useBzip2 = 0): else: command = 'pzip -o "%s" "%s"' % (destFilename.toOsSpecific(), sourceFilename.toOsSpecific()) - print command + print(command) exitStatus = os.system(command) if exitStatus != 0: raise 'Command failed: %s' % (command) @@ -1395,7 +1395,7 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): actualFileSize = fileSize if actualFileSize == None: actualFileSize = contentFilename.getFileSize() - self.notify.info('actualFileSize = ' + `actualFileSize`) + self.notify.info('actualFileSize = ' + repr(actualFileSize)) # Keep a running total of the patch sizes so we do not exceed the # size of the actual file totalPatchesSize = 0 @@ -1424,9 +1424,9 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): potentialTotal = totalPatchesSize + patchSize if (version > 15 or potentialTotal > actualFileSize): self.notify.debug('wiseScrubber: Truncating patch list at version: ' - + `version` + '\n' - + ' total would have been: ' + `potentialTotal` + '\n' - + ' but entire file is only: ' + `actualFileSize`) + + repr(version) + '\n' + + ' total would have been: ' + repr(potentialTotal) + '\n' + + ' but entire file is only: ' + repr(actualFileSize)) copyPatchFilename.unlink() try: del self.progressMap[copyPatchFilename.getBasenameWoExtension()] @@ -1445,7 +1445,7 @@ def installerCopy(self, highVer, fname, fileSize = None, useBzip2 = 0): # Remove any versions that we do not need anymore for version in range(lastVersion+1, highVer+1): - self.notify.debug('wiseScrubber: Removing obsolete version: ' + `version`) + self.notify.debug('wiseScrubber: Removing obsolete version: ' + repr(version)) patchFilename = self.patchVer(persistFilename, version) patchFilename.unlink() try: diff --git a/toontown/src/publish/UsageStats.py b/toontown/src/publish/UsageStats.py index 0026cf1b..9745d8e7 100644 --- a/toontown/src/publish/UsageStats.py +++ b/toontown/src/publish/UsageStats.py @@ -7,14 +7,14 @@ import shutil import pprint import math -import stats +from . import stats from direct.showbase.PythonUtil import * filterIps = ['^206\.16', '^206\.18'] -filterIpsCompiled = map(re.compile, filterIps) +filterIpsCompiled = list(map(re.compile, filterIps)) filterAccounts = ['^NeverSet',] -filterAccountsCompiled = map(re.compile, filterAccounts) +filterAccountsCompiled = list(map(re.compile, filterAccounts)) TABLE_ACCOUNT = 0 TABLE_TIME = 1 @@ -38,7 +38,7 @@ fileName = "usage.txt" -print ("Opening %s" % fileName) +print(("Opening %s" % fileName)) file = open(fileName) # lines = file.readlines() # print ("parsing %s lines" % len(lines)) @@ -58,7 +58,7 @@ def addOneInDict(dict, key): """ If dict has key, return the value, otherwise insert the newValue and return it """ - if dict.has_key(key): + if key in dict: dict[key] += 1 else: dict[key] = 1 @@ -117,19 +117,19 @@ def convertTime(s): line = file.readline() lineNum += 1 if (lineNum % 1000) == 0: - print "Line: %s" % lineNum + print("Line: %s" % lineNum) if not line: - print "end of file" + print("end of file") break data = line.split('|') if len(data) < LOG_NUMCOLUMNS: - print ("Bad data, len=%s line=%s" % (len(data), line)) + print(("Bad data, len=%s line=%s" % (len(data), line))) continue elif len(data) > 14: - print ("Bad data, len=%s line=%s" % (len(data), line)) + print(("Bad data, len=%s line=%s" % (len(data), line))) continue filtered = 0 @@ -161,7 +161,7 @@ def convertTime(s): s = s - s % resolution for t in range(s, e, resolution): - if simDict.has_key(t): + if t in simDict: simDict[t] += 1 else: simDict[t] = 1 @@ -197,7 +197,7 @@ def convertTime(s): accounts[accountName] = len(table[TABLE_ACCOUNT]) - 1 -for accountName, startTime in signUps.items(): +for accountName, startTime in list(signUps.items()): year, month, day = getDay(startTime) monthDict = signUpsYearDict.setdefault(year, {}) dayDict = monthDict.setdefault(month, {}) @@ -210,110 +210,110 @@ def convertTime(s): playTime = table[TABLE_TIME][i] onlySessions.append(playTime) -print +print() print ("ACCOUNTS") print ("--------------------------------------------------") -print ("Number of accounts: %s" % (len(accounts))) +print(("Number of accounts: %s" % (len(accounts)))) -print +print() print ("HOURS OF PLAY") print ("--------------------------------------------------") -print ("Total play time: %s" % - getHourString(stats.sum(table[TABLE_TIME]))) -print ("Largest play time for a single account: %s" % - getHourString(max(table[TABLE_TIME]))) -print ("Median total play time for all accounts: %s" % - getHourString(stats.median(table[TABLE_TIME]))) -print ("Macro Histogram play time: \n%s" % - getHistogramString(stats.histogram(table[TABLE_TIME], 10, [0,100*3600]), getHourString)) -print ("Micro Histogram play time: \n%s" % - getHistogramString(stats.histogram(table[TABLE_TIME], 10, [0,10*3600]), getHourString)) -print ("Pico Histogram play time: \n%s" % - getHistogramString(stats.histogram(table[TABLE_TIME], 12, [0,1*3600]), getHourString)) - -print +print(("Total play time: %s" % + getHourString(stats.sum(table[TABLE_TIME])))) +print(("Largest play time for a single account: %s" % + getHourString(max(table[TABLE_TIME])))) +print(("Median total play time for all accounts: %s" % + getHourString(stats.median(table[TABLE_TIME])))) +print(("Macro Histogram play time: \n%s" % + getHistogramString(stats.histogram(table[TABLE_TIME], 10, [0,100*3600]), getHourString))) +print(("Micro Histogram play time: \n%s" % + getHistogramString(stats.histogram(table[TABLE_TIME], 10, [0,10*3600]), getHourString))) +print(("Pico Histogram play time: \n%s" % + getHistogramString(stats.histogram(table[TABLE_TIME], 12, [0,1*3600]), getHourString))) + +print() print ("LOGINS") print ("--------------------------------------------------") -print ("Total logins: %s" % - stats.sum(table[TABLE_LOGINS])) -print ("Largest logins for a single account: %s" % - max(table[TABLE_LOGINS])) -print ("Median number of logins for all accounts: %s" % - stats.median(table[TABLE_LOGINS])) -print ("Macro Histogram logins: \n%s" % - getHistogramString(stats.histogram(table[TABLE_LOGINS], 10, [0,100]))) -print ("Micro Histogram logins: \n%s" % - getHistogramString(stats.histogram(table[TABLE_LOGINS], 10, [0,10]))) - - -print +print(("Total logins: %s" % + stats.sum(table[TABLE_LOGINS]))) +print(("Largest logins for a single account: %s" % + max(table[TABLE_LOGINS]))) +print(("Median number of logins for all accounts: %s" % + stats.median(table[TABLE_LOGINS]))) +print(("Macro Histogram logins: \n%s" % + getHistogramString(stats.histogram(table[TABLE_LOGINS], 10, [0,100])))) +print(("Micro Histogram logins: \n%s" % + getHistogramString(stats.histogram(table[TABLE_LOGINS], 10, [0,10])))) + + +print() print ("SESSIONS") print ("--------------------------------------------------") -print ("Largest session length: %s" % - getHourString(max(sessions))) -print ("Median session length: %s" % - getHourString(stats.median(sessions))) -print ("Macro Histogram session length: \n%s" % - getHistogramString(stats.histogram(sessions, 10, [0,10*3600]), getHourString)) -print ("Micro Histogram session length: \n%s" % - getHistogramString(stats.histogram(sessions, 12, [0,1*3600]), getHourString)) +print(("Largest session length: %s" % + getHourString(max(sessions)))) +print(("Median session length: %s" % + getHourString(stats.median(sessions)))) +print(("Macro Histogram session length: \n%s" % + getHistogramString(stats.histogram(sessions, 10, [0,10*3600]), getHourString))) +print(("Micro Histogram session length: \n%s" % + getHistogramString(stats.histogram(sessions, 12, [0,1*3600]), getHourString))) -print +print() print ("FIRST SESSIONS") print ("--------------------------------------------------") -print ("Largest first session length: %s" % - getHourString(max(firstSessions))) -print ("Median first session length: %s" % - getHourString(stats.median(firstSessions))) -print ("Macro Histogram first session length: \n%s" % - getHistogramString(stats.histogram(firstSessions, 10, [0,10*3600]), getHourString)) -print ("Micro Histogram first session length: \n%s" % - getHistogramString(stats.histogram(firstSessions, 12, [0,1*3600]), getHourString)) +print(("Largest first session length: %s" % + getHourString(max(firstSessions)))) +print(("Median first session length: %s" % + getHourString(stats.median(firstSessions)))) +print(("Macro Histogram first session length: \n%s" % + getHistogramString(stats.histogram(firstSessions, 10, [0,10*3600]), getHourString))) +print(("Micro Histogram first session length: \n%s" % + getHistogramString(stats.histogram(firstSessions, 12, [0,1*3600]), getHourString))) -print +print() print ("FIRST SESSIONS THAT ONLY PLAYED ONCE") print ("--------------------------------------------------") -print ("Largest first session length: %s" % - getHourString(max(onlySessions))) -print ("Median first session length: %s" % - getHourString(stats.median(onlySessions))) -print ("Macro Histogram first session length: \n%s" % - getHistogramString(stats.histogram(onlySessions, 10, [0,10*3600]), getHourString)) -print ("Micro Histogram first session length: \n%s" % - getHistogramString(stats.histogram(onlySessions, 12, [0,1*3600]), getHourString)) +print(("Largest first session length: %s" % + getHourString(max(onlySessions)))) +print(("Median first session length: %s" % + getHourString(stats.median(onlySessions)))) +print(("Macro Histogram first session length: \n%s" % + getHistogramString(stats.histogram(onlySessions, 10, [0,10*3600]), getHourString))) +print(("Micro Histogram first session length: \n%s" % + getHistogramString(stats.histogram(onlySessions, 12, [0,1*3600]), getHourString))) -print +print() print ("Dailies") print ("Sum of play per day: \n") -for year, monthDict in yearDict.items(): - for month, dayDict in monthDict.items(): - for day, dayList in dayDict.items(): - print ("%s-%s-%s, %s" % (year, month, day, getHours(stats.sum(dayList)))) -print +for year, monthDict in list(yearDict.items()): + for month, dayDict in list(monthDict.items()): + for day, dayList in list(dayDict.items()): + print(("%s-%s-%s, %s" % (year, month, day, getHours(stats.sum(dayList))))) +print() print ("Median session length per day: \n") -for year, monthDict in yearDict.items(): - for month, dayDict in monthDict.items(): - for day, dayList in dayDict.items(): - print ("%s-%s-%s, %s" % (year, month, day, getHourString(stats.median(dayList)))) +for year, monthDict in list(yearDict.items()): + for month, dayDict in list(monthDict.items()): + for day, dayList in list(dayDict.items()): + print(("%s-%s-%s, %s" % (year, month, day, getHourString(stats.median(dayList))))) -print +print() print ("Logins per day: \n") -for year, monthDict in yearDict.items(): - for month, dayDict in monthDict.items(): - for day, dayList in dayDict.items(): - print ("%s-%s-%s, %s" % (year, month, day, len(dayList))) +for year, monthDict in list(yearDict.items()): + for month, dayDict in list(monthDict.items()): + for day, dayList in list(dayDict.items()): + print(("%s-%s-%s, %s" % (year, month, day, len(dayList)))) -print +print() print ("Signups per day: \n") -for year, monthDict in signUpsYearDict.items(): - for month, dayDict in monthDict.items(): - for day, dayList in dayDict.items(): - print ("%s-%s-%s, %s" % (year, month, day, len(dayList))) +for year, monthDict in list(signUpsYearDict.items()): + for month, dayDict in list(monthDict.items()): + for day, dayList in list(dayDict.items()): + print(("%s-%s-%s, %s" % (year, month, day, len(dayList)))) -print +print() print ("Simutaneous users\n") -print ("Most simultanous users: %s\n" % (max(simDict.values()))) +print(("Most simultanous users: %s\n" % (max(simDict.values())))) diff --git a/toontown/src/publish/WiseScrubber.py b/toontown/src/publish/WiseScrubber.py index ad419fdf..1566afb5 100644 --- a/toontown/src/publish/WiseScrubber.py +++ b/toontown/src/publish/WiseScrubber.py @@ -22,22 +22,22 @@ try: opts, pargs = getopt.getopt(sys.argv[1:], 'h') -except Exception, e: +except Exception as e: # User passed in a bad option, print the error and the help, then exit - print e - print helpString + print(e) + print(helpString) sys.exit(1) for opt in opts: flag, value = opt if (flag == '-h'): - print helpString + print(helpString) sys.exit(1) else: - print 'illegal option: ' + flag + print('illegal option: ' + flag) if (not (len(pargs) == 1)): - print 'Must specify a persistDirectory' + print('Must specify a persistDirectory') sys.exit(1) else: persistDirectory = pargs[0] @@ -89,7 +89,7 @@ def mainFunc(): """ # Lookup the line about InstallLauncher, prepend the new md5 at the list of md5's - notify.info('number of lines in launcherdb = ' + `len(lines)`) + notify.info('number of lines in launcherdb = ' + repr(len(lines))) for i in range (0, len(lines)): if (lines[i].find('InstallLauncher.exe') > -1): # add the new md5 in there @@ -141,7 +141,7 @@ def getHighestVersion(persistFilename): def fileVer(filename, version): # Return the name of the versioned file - return Filename(filename.cStr() + '.v' + `version`) + return Filename(filename.cStr() + '.v' + repr(version)) def compFile(filename): # Return the name of the compressed file @@ -197,7 +197,7 @@ def generatePatch(persistFilename, newFilename, newHash): def copyFile(fromFilename, toFilename): notify.debug('Copying %s to %s' % (fromFilename.cStr(), toFilename.cStr())) shutil.copy(fromFilename.toOsSpecific(), toFilename.toOsSpecific()) - os.chmod(toFilename.toOsSpecific(), 0666) + os.chmod(toFilename.toOsSpecific(), 0o666) def moveFile(fromFilename, toFilename): notify.debug('Moving %s to %s' % (fromFilename.cStr(), toFilename.cStr())) diff --git a/toontown/src/publish/compare.py b/toontown/src/publish/compare.py index 1e2b3c75..8f608d2d 100644 --- a/toontown/src/publish/compare.py +++ b/toontown/src/publish/compare.py @@ -50,5 +50,5 @@ if file in filelist: continue else: - print file + print(file) diff --git a/toontown/src/publish/pstat.py b/toontown/src/publish/pstat.py index 5d185469..90173812 100644 --- a/toontown/src/publish/pstat.py +++ b/toontown/src/publish/pstat.py @@ -103,7 +103,7 @@ ## ## 11/08/98 ... fixed aput to output large arrays correctly -import stats # required 3rd party module +from . import stats # required 3rd party module import string, copy from types import * @@ -213,16 +213,16 @@ def colex (listoflists,cnums): column = 0 if type(cnums) in [ListType,TupleType]: # if multiple columns to get index = cnums[0] - column = map(lambda x: x[index], listoflists) + column = [x[index] for x in listoflists] for col in cnums[1:]: index = col - column = abut(column,map(lambda x: x[index], listoflists)) + column = abut(column,[x[index] for x in listoflists]) elif type(cnums) == StringType: # if an 'x[3:]' type expr. evalstring = 'map(lambda x: x'+cnums+', listoflists)' column = eval(evalstring) else: # else it's just 1 col to get index = cnums - column = map(lambda x: x[index], listoflists) + column = [x[index] for x in listoflists] return column @@ -288,13 +288,13 @@ def collmean (inlist): for col in collapsecols: avgcol = colex(tmprows,col) item.append(cfcn(avgcol)) - if fcn1 <> None: + if fcn1 != None: try: test = fcn1(avgcol) except: test = 'N/A' item.append(test) - if fcn2 <> None: + if fcn2 != None: try: test = fcn2(avgcol) except: @@ -399,7 +399,7 @@ def linedelimited (inlist,delimiter): """ outstr = '' for item in inlist: - if type(item) <> StringType: + if type(item) != StringType: item = str(item) outstr = outstr + item + delimiter outstr = outstr[0:-1] @@ -415,7 +415,7 @@ def lineincols (inlist,colsize): """ outstr = '' for item in inlist: - if type(item) <> StringType: + if type(item) != StringType: item = str(item) size = len(item) if size <= colsize: @@ -439,7 +439,7 @@ def lineincustcols (inlist,colsizes): """ outstr = '' for i in range(len(inlist)): - if type(inlist[i]) <> StringType: + if type(inlist[i]) != StringType: item = str(inlist[i]) else: item = inlist[i] @@ -461,7 +461,7 @@ def list2string (inlist): Usage: list2string (inlist) Returns: the string created from inlist """ - stringlist = map(makestr,inlist) + stringlist = list(map(makestr,inlist)) return string.join(stringlist) @@ -480,7 +480,7 @@ def makelol(inlist): def makestr (x): - if type(x) <> StringType: + if type(x) != StringType: x = str(x) return x @@ -508,18 +508,18 @@ def printcc (lst,extra=2): maxsize = [0]*len(list2print[0]) for col in range(len(list2print[0])): items = colex(list2print,col) - items = map(makestr,items) - maxsize[col] = max(map(len,items)) + extra + items = list(map(makestr,items)) + maxsize[col] = max(list(map(len,items))) + extra for row in lst: if row == ['\n'] or row == '\n' or row == '' or row == ['']: - print + print() elif row == ['dashes'] or row == 'dashes': dashes = [0]*len(maxsize) for j in range(len(maxsize)): dashes[j] = '-'*(maxsize[j]-2) - print lineincustcols(dashes,maxsize) + print(lineincustcols(dashes,maxsize)) else: - print lineincustcols(row,maxsize) + print(lineincustcols(row,maxsize)) return None @@ -532,7 +532,7 @@ def printincols (listoflists,colsize): Returns: None """ for row in listoflists: - print lineincols(row,colsize) + print(lineincols(row,colsize)) return None @@ -545,9 +545,9 @@ def pl (listoflists): """ for row in listoflists: if row[-1] == '\n': - print row, + print(row, end=' ') else: - print row + print(row) return None @@ -783,13 +783,13 @@ def acollmean (inarray): if keepcols == []: avgcol = acolex(a,collapsecols) means = N.sum(avgcol)/float(len(avgcol)) - if fcn1<>None: + if fcn1!=None: try: test = fcn1(avgcol) except: test = N.array(['N/A']*len(means)) means = aabut(means,test) - if fcn2<>None: + if fcn2!=None: try: test = fcn2(avgcol) except: @@ -810,13 +810,13 @@ def acollmean (inarray): for col in collapsecols: avgcol = acolex(tmprows,col) item.append(acollmean(avgcol)) - if fcn1<>None: + if fcn1!=None: try: test = fcn1(avgcol) except: test = 'N/A' item.append(test) - if fcn2<>None: + if fcn2!=None: try: test = fcn2(avgcol) except: @@ -957,7 +957,7 @@ def arowcompare(row1, row2): identical elements and 0 otherwise """ if row1.typecode()=='O' or row2.typecode=='O': - cmpvect = N.logical_not(abs(N.array(map(cmp,row1,row2)))) # cmp fcn gives -1,0,1 + cmpvect = N.logical_not(abs(N.array(list(map(cmp,row1,row2))))) # cmp fcn gives -1,0,1 else: cmpvect = N.equal(row1,row2) return cmpvect @@ -1024,7 +1024,7 @@ def aunique(inarray): for item in inarray[1:]: newflag = 1 for unq in uniques: # NOTE: cmp --> 0=same, -1=<, 1=> - test = N.sum(abs(N.array(map(cmp,item,unq)))) + test = N.sum(abs(N.array(list(map(cmp,item,unq))))) if test == 0: # if item identical to any 1 row in uniques newflag = 0 # then not a novel item to add break diff --git a/toontown/src/publish/squeezeTool.py b/toontown/src/publish/squeezeTool.py index 82ff3cf3..22026d65 100644 --- a/toontown/src/publish/squeezeTool.py +++ b/toontown/src/publish/squeezeTool.py @@ -56,9 +56,9 @@ # usage def usage(): - print - print "SQUEEZE", VERSION, "(c) 1997-1998 by Secret Labs AB" - print """\ + print() + print("SQUEEZE", VERSION, "(c) 1997-1998 by Secret Labs AB") + print("""\ Convert a Python application to a compressed module package. Usage: squeeze [-1ux] -o app [-b start] modules... [-d files...] @@ -85,7 +85,7 @@ def usage(): The -x option can be used with -d to create a self-extracting archive, instead of a package. When the resulting script is executed, the data files are extracted. Omit the -b option in this case. -""" +""") sys.exit(1) @@ -138,7 +138,7 @@ def addmodule(self, file, moduleName): try: module = compile(codestring, basename, "exec") except: - print ":: There's an error preventing compiling in " + file + print(":: There's an error preventing compiling in " + file) raise #sys.exit(1) @@ -149,7 +149,7 @@ def addmodule(self, file, moduleName): modulePath = moduleName.split('.') for i in range(len(modulePath)): prefix = '.'.join(modulePath[:i + 1]) - if not self.modules.has_key(prefix): + if prefix not in self.modules: self.modules[prefix] = None def adddata(self, file): @@ -321,8 +321,8 @@ def squeeze(app, start, filelist): except IOError: pass except ValueError: - print bootstrap, "was not created by squeeze. You have to manually" - print "remove the file to proceed." + print(bootstrap, "was not created by squeeze. You have to manually") + print("remove the file to proceed.") sys.exit(1) # @@ -400,5 +400,5 @@ def squeeze(app, start, filelist): dummy, rawbytes = sq.getstatus() - print "squeezed", rawbytes, "to", bytes, "bytes", - print "(%d%%)" % (bytes * 100 / rawbytes) + print("squeezed", rawbytes, "to", bytes, "bytes", end=' ') + print("(%d%%)" % (bytes * 100 / rawbytes)) diff --git a/toontown/src/publish/stats.py b/toontown/src/publish/stats.py index 17d9c6ce..d7d170d8 100644 --- a/toontown/src/publish/stats.py +++ b/toontown/src/publish/stats.py @@ -211,7 +211,7 @@ ## changed name of skewness and askewness to skew and askew ## fixed (a)histogram (which sometimes counted points 1: - print "\nDividing percent>1 by 100 in lscoreatpercentile().\n" + print("\nDividing percent>1 by 100 in lscoreatpercentile().\n") percent = percent / 100.0 targetcf = percent*len(inlist) h, lrl, binsize, extras = histogram(inlist) @@ -500,7 +500,7 @@ def lhistogram (inlist,numbins=10,defaultreallimits=None,printextras=0): Usage: lhistogram (inlist, numbins=10, defaultreallimits=None,suppressoutput=0) Returns: list of bin values, lowerreallimit, binsize, extrapoints """ - if (defaultreallimits <> None): + if (defaultreallimits != None): if type(defaultreallimits) not in [ListType,TupleType] or len(defaultreallimits)==1: # only one limit given, assumed to be lower one & upper is calc'd lowerreallimit = defaultreallimits upperreallimit = 1.0001 * max(inlist) @@ -524,7 +524,7 @@ def lhistogram (inlist,numbins=10,defaultreallimits=None,printextras=0): except: extrapoints = extrapoints + 1 if (extrapoints > 0 and printextras == 1): - print '\nPoints outside given histogram range =',extrapoints + print('\nPoints outside given histogram range =',extrapoints) return (bins, lowerreallimit, binsize, extrapoints) @@ -587,8 +587,8 @@ def lobrientransform(*args): for j in range(k): if v[j] - mean(nargs[j]) > TINY: check = 0 - if check <> 1: - raise ValueError, 'Problem in obrientransform.' + if check != 1: + raise ValueError('Problem in obrientransform.') else: return nargs @@ -741,11 +741,11 @@ def lpaired(x,y): """ samples = '' while samples not in ['i','r','I','R','c','C']: - print '\nIndependent or related samples, or correlation (i,r,c): ', - samples = raw_input() + print('\nIndependent or related samples, or correlation (i,r,c): ', end=' ') + samples = input() if samples in ['i','I','r','R']: - print '\nComparing variances ...', + print('\nComparing variances ...', end=' ') # USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112 r = obrientransform(x,y) f,p = F_oneway(pstat.colex(r,0),pstat.colex(r,1)) @@ -753,45 +753,45 @@ def lpaired(x,y): vartype='unequal, p='+str(round(p,4)) else: vartype='equal' - print vartype + print(vartype) if samples in ['i','I']: if vartype[0]=='e': t,p = ttest_ind(x,y,0) - print '\nIndependent samples t-test: ', round(t,4),round(p,4) + print('\nIndependent samples t-test: ', round(t,4),round(p,4)) else: if len(x)>20 or len(y)>20: z,p = ranksums(x,y) - print '\nRank Sums test (NONparametric, n>20): ', round(z,4),round(p,4) + print('\nRank Sums test (NONparametric, n>20): ', round(z,4),round(p,4)) else: u,p = mannwhitneyu(x,y) - print '\nMann-Whitney U-test (NONparametric, ns<20): ', round(u,4),round(p,4) + print('\nMann-Whitney U-test (NONparametric, ns<20): ', round(u,4),round(p,4)) else: # RELATED SAMPLES if vartype[0]=='e': t,p = ttest_rel(x,y,0) - print '\nRelated samples t-test: ', round(t,4),round(p,4) + print('\nRelated samples t-test: ', round(t,4),round(p,4)) else: t,p = ranksums(x,y) - print '\nWilcoxon T-test (NONparametric): ', round(t,4),round(p,4) + print('\nWilcoxon T-test (NONparametric): ', round(t,4),round(p,4)) else: # CORRELATION ANALYSIS corrtype = '' while corrtype not in ['c','C','r','R','d','D']: - print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ', - corrtype = raw_input() + print('\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ', end=' ') + corrtype = input() if corrtype in ['c','C']: m,b,r,p,see = linregress(x,y) - print '\nLinear regression for continuous variables ...' + print('\nLinear regression for continuous variables ...') lol = [['Slope','Intercept','r','Prob','SEestimate'],[round(m,4),round(b,4),round(r,4),round(p,4),round(see,4)]] pstat.printcc(lol) elif corrtype in ['r','R']: r,p = spearmanr(x,y) - print '\nCorrelation for ranked variables ...' - print "Spearman's r: ",round(r,4),round(p,4) + print('\nCorrelation for ranked variables ...') + print("Spearman's r: ",round(r,4),round(p,4)) else: # DICHOTOMOUS r,p = pointbiserialr(x,y) - print '\nAssuming x contains a dichotomous variable ...' - print 'Point Biserial r: ',round(r,4),round(p,4) - print '\n\n' + print('\nAssuming x contains a dichotomous variable ...') + print('Point Biserial r: ',round(r,4),round(p,4)) + print('\n\n') return None @@ -805,11 +805,11 @@ def lpearsonr(x,y): Returns: Pearson's r value, two-tailed p-value """ TINY = 1.0e-30 - if len(x) <> len(y): - raise ValueError, 'Input values not paired in pearsonr. Aborting.' + if len(x) != len(y): + raise ValueError('Input values not paired in pearsonr. Aborting.') n = len(x) - x = map(float,x) - y = map(float,y) + x = list(map(float,x)) + y = list(map(float,y)) xmean = mean(x) ymean = mean(y) r_num = n*(summult(x,y)) - sum(x)*sum(y) @@ -830,8 +830,8 @@ def lspearmanr(x,y): Returns: Spearman's r, two-tailed p-value """ TINY = 1e-30 - if len(x) <> len(y): - raise ValueError, 'Input values not paired in spearmanr. Aborting.' + if len(x) != len(y): + raise ValueError('Input values not paired in spearmanr. Aborting.') n = len(x) rankx = rankdata(x) ranky = rankdata(y) @@ -855,14 +855,14 @@ def lpointbiserialr(x,y): Returns: Point-biserial r, two-tailed p-value """ TINY = 1e-30 - if len(x) <> len(y): - raise ValueError, 'INPUT VALUES NOT PAIRED IN pointbiserialr. ABORTING.' + if len(x) != len(y): + raise ValueError('INPUT VALUES NOT PAIRED IN pointbiserialr. ABORTING.') data = pstat.abut(x,y) categories = pstat.unique(x) - if len(categories) <> 2: - raise ValueError, "Exactly 2 categories required for pointbiserialr()." + if len(categories) != 2: + raise ValueError("Exactly 2 categories required for pointbiserialr().") else: # there are 2 categories, continue - codemap = pstat.abut(categories,range(2)) + codemap = pstat.abut(categories,list(range(2))) recoded = pstat.recode(data,codemap,0) x = pstat.linexand(data,0,categories[0]) y = pstat.linexand(data,0,categories[1]) @@ -920,11 +920,11 @@ def llinregress(x,y): Returns: slope, intercept, r, two-tailed prob, sterr-of-estimate """ TINY = 1.0e-20 - if len(x) <> len(y): - raise ValueError, 'Input values not paired in linregress. Aborting.' + if len(x) != len(y): + raise ValueError('Input values not paired in linregress. Aborting.') n = len(x) - x = map(float,x) - y = map(float,y) + x = list(map(float,x)) + y = list(map(float,y)) xmean = mean(x) ymean = mean(y) r_num = float(n*(summult(x,y)) - sum(x)*sum(y)) @@ -962,7 +962,7 @@ def lttest_1samp(a,popmean,printit=0,name='Sample',writemode='a'): t = (x-popmean)/math.sqrt(svar*(1.0/n)) prob = betai(0.5*df,0.5,float(df)/(df+t*t)) - if printit <> 0: + if printit != 0: statname = 'Single-sample T-test.' outputpairedstats(printit,writemode, 'Population','--',popmean,0,0,0, @@ -993,7 +993,7 @@ def lttest_ind (a, b, printit=0, name1='Samp1', name2='Samp2', writemode='a'): t = (x1-x2)/math.sqrt(svar*(1.0/n1 + 1.0/n2)) prob = betai(0.5*df,0.5,df/(df+t*t)) - if printit <> 0: + if printit != 0: statname = 'Independent samples T-test.' outputpairedstats(printit,writemode, name1,n1,x1,v1,min(a),max(a), @@ -1013,8 +1013,8 @@ def lttest_rel (a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a'): Usage: lttest_rel(a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a') Returns: t-value, two-tailed prob """ - if len(a)<>len(b): - raise ValueError, 'Unequal length lists in ttest_rel.' + if len(a)!=len(b): + raise ValueError('Unequal length lists in ttest_rel.') x1 = mean(a) x2 = mean(b) v1 = var(a) @@ -1029,7 +1029,7 @@ def lttest_rel (a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a'): t = (x1-x2)/sd prob = betai(0.5*df,0.5,df/(df+t*t)) - if printit <> 0: + if printit != 0: statname = 'Related samples T-test.' outputpairedstats(printit,writemode, name1,n,x1,v1,min(a),max(a), @@ -1118,7 +1118,7 @@ def lmannwhitneyu(x,y): smallu = min(u1,u2) T = math.sqrt(tiecorrect(ranked)) # correction factor for tied scores if T == 0: - raise ValueError, 'All numbers are identical in lmannwhitneyu' + raise ValueError('All numbers are identical in lmannwhitneyu') sd = math.sqrt(T*n1*n2*(n1+n2+1)/12.0) z = abs((bigu-n1*n2/2.0) / sd) # normal approximation for prob calc return smallu, 1.0 - zprob(z) @@ -1179,15 +1179,15 @@ def lwilcoxont(x,y): Usage: lwilcoxont(x,y) Returns: a t-statistic, two-tail probability estimate """ - if len(x) <> len(y): - raise ValueError, 'Unequal N in wilcoxont. Aborting.' + if len(x) != len(y): + raise ValueError('Unequal N in wilcoxont. Aborting.') d=[] for i in range(len(x)): diff = x[i] - y[i] - if diff <> 0: + if diff != 0: d.append(diff) count = len(d) - absd = map(abs,d) + absd = list(map(abs,d)) absranked = rankdata(absd) r_plus = 0.0 r_minus = 0.0 @@ -1217,7 +1217,7 @@ def lkruskalwallish(*args): args = list(args) n = [0]*len(args) all = [] - n = map(len,args) + n = list(map(len,args)) for i in range(len(args)): all = all + args[i] ranked = rankdata(all) @@ -1234,7 +1234,7 @@ def lkruskalwallish(*args): h = 12.0 / (totaln*(totaln+1)) * ssbn - 3*(totaln+1) df = len(args) - 1 if T == 0: - raise ValueError, 'All numbers are identical in lkruskalwallish' + raise ValueError('All numbers are identical in lkruskalwallish') h = h / float(T) return h, chisqprob(h,df) @@ -1253,9 +1253,9 @@ def lfriedmanchisquare(*args): """ k = len(args) if k < 3: - raise ValueError, 'Less than 3 levels. Friedman test not appropriate.' + raise ValueError('Less than 3 levels. Friedman test not appropriate.') n = len(args[0]) - data = apply(pstat.abut,tuple(args)) + data = pstat.abut(*tuple(args)) for i in range(len(data)): data[i] = rankdata(data[i]) ssbn = 0 @@ -1451,7 +1451,7 @@ def lbetacf(a,b,x): bz = 1.0 if (abs(az-aold)<(EPS*abs(az))): return az - print 'a or b too big, or ITMAX too small in Betacf.' + print('a or b too big, or ITMAX too small in Betacf.') def lgammln(xx): @@ -1488,7 +1488,7 @@ def lbetai(a,b,x): Usage: lbetai(a,b,x) """ if (x<0.0 or x>1.0): - raise ValueError, 'Bad x in lbetai' + raise ValueError('Bad x in lbetai') if (x==0.0 or x==1.0): bt = 0.0 else: @@ -1518,10 +1518,10 @@ def lF_oneway(*lists): vars = [0]*a ns = [0]*a alldata = [] - tmp = map(N.array,lists) - means = map(amean,tmp) - vars = map(avar,tmp) - ns = map(len,lists) + tmp = list(map(N.array,lists)) + means = list(map(amean,tmp)) + vars = list(map(avar,tmp)) + ns = list(map(len,lists)) for i in range(len(lists)): alldata = alldata + lists[i] alldata = N.array(alldata) @@ -1581,8 +1581,8 @@ def writecc (listoflists,file,writetype='w',extra=2): maxsize = [0]*len(list2print[0]) for col in range(len(list2print[0])): items = pstat.colex(list2print,col) - items = map(pstat.makestr,items) - maxsize[col] = max(map(len,items)) + extra + items = list(map(pstat.makestr,items)) + maxsize[col] = max(list(map(len,items))) + extra for row in listoflists: if row == ['\n'] or row == '\n': outfile.write('\n') @@ -1661,8 +1661,8 @@ def lsummult (list1,list2): Usage: lsummult(list1,list2) """ - if len(list1) <> len(list2): - raise ValueError, "Lists not equal length in summult." + if len(list1) != len(list2): + raise ValueError("Lists not equal length in summult.") s = 0 for item1,item2 in pstat.abut(list1,list2): s = s + item1*item2 @@ -1704,7 +1704,7 @@ def lshellsort(inlist): """ n = len(inlist) svec = copy.deepcopy(inlist) - ivec = range(n) + ivec = list(range(n)) gap = n/2 # integer division needed while gap >0: for i in range(gap,n): @@ -1737,7 +1737,7 @@ def lrankdata(inlist): for i in range(n): sumranks = sumranks + i dupcount = dupcount + 1 - if i==n-1 or svec[i] <> svec[i+1]: + if i==n-1 or svec[i] != svec[i+1]: averank = sumranks / float(dupcount) + 1 for j in range(i-dupcount+1,i+1): newlist[ivec[j]] = averank @@ -1770,12 +1770,12 @@ def outputpairedstats(fname,writemode,name1,n1,m1,se1,min1,max1,name2,n2,m2,se2, title = [['Name','N','Mean','SD','Min','Max']] lofl = title+[[name1,n1,round(m1,3),round(math.sqrt(se1),3),min1,max1], [name2,n2,round(m2,3),round(math.sqrt(se2),3),min2,max2]] - if type(fname)<>StringType or len(fname)==0: - print - print statname - print + if type(fname)!=StringType or len(fname)==0: + print() + print(statname) + print() pstat.printcc(lofl) - print + print() try: if stat.shape == (): stat = stat[0] @@ -1783,8 +1783,8 @@ def outputpairedstats(fname,writemode,name1,n1,m1,se1,min1,max1,name2,n2,m2,se2, prob = prob[0] except: pass - print 'Test statistic = ',round(stat,3),' p = ',round(prob,3),suffix - print + print('Test statistic = ',round(stat,3),' p = ',round(prob,3),suffix) + print() else: file = open(fname,writemode) file.write('\n'+statname+'\n\n') @@ -2037,7 +2037,7 @@ def aharmonicmean (inarray,dimension=None,keepdims=0): idx[0] = -1 loopcap = N.array(tinarray.shape[0:len(nondims)]) -1 s = N.zeros(loopcap+1,N.Float) - while incr(idx,loopcap) <> -1: + while incr(idx,loopcap) != -1: s[idx] = asum(1.0/tinarray[idx]) size = N.multiply.reduce(N.take(inarray.shape,dims)) if keepdims == 1: @@ -2187,12 +2187,12 @@ def atmean(a,limits=None,inclusive=(1,1)): if inclusive[1]: upperfcn = N.less_equal else: upperfcn = N.less if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)): - raise ValueError, "No array values within given limits (atmean)." - elif limits[0]==None and limits[1]<>None: + raise ValueError("No array values within given limits (atmean).") + elif limits[0]==None and limits[1]!=None: mask = upperfcn(a,limits[1]) - elif limits[0]<>None and limits[1]==None: + elif limits[0]!=None and limits[1]==None: mask = lowerfcn(a,limits[0]) - elif limits[0]<>None and limits[1]<>None: + elif limits[0]!=None and limits[1]!=None: mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1]) s = float(N.add.reduce(N.ravel(a*mask))) n = float(N.add.reduce(N.ravel(mask))) @@ -2222,12 +2222,12 @@ def atvar(a,limits=None,inclusive=(1,1)): if inclusive[1]: upperfcn = N.less_equal else: upperfcn = N.less if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)): - raise ValueError, "No array values within given limits (atvar)." - elif limits[0]==None and limits[1]<>None: + raise ValueError("No array values within given limits (atvar).") + elif limits[0]==None and limits[1]!=None: mask = upperfcn(a,limits[1]) - elif limits[0]<>None and limits[1]==None: + elif limits[0]!=None and limits[1]==None: mask = lowerfcn(a,limits[0]) - elif limits[0]<>None and limits[1]<>None: + elif limits[0]!=None and limits[1]!=None: mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1]) term1 = N.add.reduce(N.ravel(a*a*mask)) n = float(N.add.reduce(N.ravel(mask))) - 1 @@ -2308,12 +2308,12 @@ def atsem(a,limits=None,inclusive=(1,1)): if inclusive[1]: upperfcn = N.less_equal else: upperfcn = N.less if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)): - raise ValueError, "No array values within given limits (atsem)." - elif limits[0]==None and limits[1]<>None: + raise ValueError("No array values within given limits (atsem).") + elif limits[0]==None and limits[1]!=None: mask = upperfcn(a,limits[1]) - elif limits[0]<>None and limits[1]==None: + elif limits[0]!=None and limits[1]==None: mask = lowerfcn(a,limits[0]) - elif limits[0]<>None and limits[1]<>None: + elif limits[0]!=None and limits[1]!=None: mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1]) term1 = N.add.reduce(N.ravel(a*a*mask)) n = float(N.add.reduce(N.ravel(mask))) @@ -2371,8 +2371,8 @@ def askew(a,dimension=None): """ denom = N.power(amoment(a,2,dimension),1.5) zero = N.equal(denom,0) - if type(denom) == N.ArrayType and asum(zero) <> 0: - print "Number of zeros in askew: ",asum(zero) + if type(denom) == N.ArrayType and asum(zero) != 0: + print("Number of zeros in askew: ",asum(zero)) denom = denom + zero # prevent divide-by-zero return N.where(zero, 0, amoment(a,3,dimension)/denom) @@ -2390,8 +2390,8 @@ def akurtosis(a,dimension=None): """ denom = N.power(amoment(a,2,dimension),2) zero = N.equal(denom,0) - if type(denom) == N.ArrayType and asum(zero) <> 0: - print "Number of zeros in akurtosis: ",asum(zero) + if type(denom) == N.ArrayType and asum(zero) != 0: + print("Number of zeros in akurtosis: ",asum(zero)) denom = denom + zero # prevent divide-by-zero return N.where(zero,0,amoment(a,4,dimension)/denom) @@ -2461,7 +2461,7 @@ def akurtosistest(a,dimension=None): dimension = 0 n = float(a.shape[dimension]) if n<20: - print "akurtosistest only valid for n>=20 ... continuing anyway, n=",n + print("akurtosistest only valid for n>=20 ... continuing anyway, n=",n) b2 = akurtosis(a,dimension) E = 3.0*(n-1) /(n+1) varb2 = 24.0*n*(n-2)*(n-3) / ((n+1)*(n+1)*(n+3)*(n+5)) @@ -2561,7 +2561,7 @@ def ahistogram (inarray,numbins=10,defaultlimits=None,printextras=1): Returns: (array of bin counts, bin-minimum, min-width, #-points-outside-range) """ inarray = N.ravel(inarray) # flatten any >1D arrays - if (defaultlimits <> None): + if (defaultlimits != None): lowerreallimit = defaultlimits[0] upperreallimit = defaultlimits[1] binsize = (upperreallimit-lowerreallimit) / float(numbins) @@ -2583,7 +2583,7 @@ def ahistogram (inarray,numbins=10,defaultlimits=None,printextras=1): except: # point outside lower/upper limits extrapoints = extrapoints + 1 if (extrapoints > 0 and printextras == 1): - print '\nPoints outside given histogram range =',extrapoints + print('\nPoints outside given histogram range =',extrapoints) return (bins, lowerreallimit, binsize, extrapoints) @@ -2651,8 +2651,8 @@ def aobrientransform(*args): for j in range(k): if v[j] - mean(nargs[j]) > TINY: check = 0 - if check <> 1: - raise ValueError, 'Lack of convergence in obrientransform.' + if check != 1: + raise ValueError('Lack of convergence in obrientransform.') else: return N.array(nargs) @@ -2842,7 +2842,7 @@ def around(a,digits=1): def ar(x,d=digits): return round(x,d) - if type(a) <> N.ArrayType: + if type(a) != N.ArrayType: try: a = N.array(a) except: @@ -2850,7 +2850,7 @@ def ar(x,d=digits): shp = a.shape if a.typecode() in ['f','F','d','D']: b = N.ravel(a) - b = N.array(map(ar,b)) + b = N.array(list(map(ar,b))) b.shape = shp elif a.typecode() in ['o','O']: b = N.ravel(a)*1 @@ -2872,9 +2872,9 @@ def athreshold(a,threshmin=None,threshmax=None,newval=0): Returns: a, with values threshmax replaced with newval """ mask = N.zeros(a.shape) - if threshmin <> None: + if threshmin != None: mask = mask + N.where(N.less(a,threshmin),1,0) - if threshmax <> None: + if threshmax != None: mask = mask + N.where(N.greater(a,threshmax),1,0) mask = N.clip(mask,0,1) return N.where(mask,newval,a) @@ -2927,8 +2927,8 @@ def acovariance(X): Usage: acovariance(X) Returns: covariance matrix of X """ - if len(X.shape) <> 2: - raise TypeError, "acovariance requires 2D matrices" + if len(X.shape) != 2: + raise TypeError("acovariance requires 2D matrices") n = X.shape[0] mX = amean(X,0) return N.dot(N.transpose(X),X) / float(n) - N.multiply.outer(mX,mX) @@ -2956,11 +2956,11 @@ def apaired(x,y): """ samples = '' while samples not in ['i','r','I','R','c','C']: - print '\nIndependent or related samples, or correlation (i,r,c): ', - samples = raw_input() + print('\nIndependent or related samples, or correlation (i,r,c): ', end=' ') + samples = input() if samples in ['i','I','r','R']: - print '\nComparing variances ...', + print('\nComparing variances ...', end=' ') # USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112 r = obrientransform(x,y) f,p = F_oneway(pstat.colex(r,0),pstat.colex(r,1)) @@ -2968,45 +2968,45 @@ def apaired(x,y): vartype='unequal, p='+str(round(p,4)) else: vartype='equal' - print vartype + print(vartype) if samples in ['i','I']: if vartype[0]=='e': t,p = ttest_ind(x,y,None,0) - print '\nIndependent samples t-test: ', round(t,4),round(p,4) + print('\nIndependent samples t-test: ', round(t,4),round(p,4)) else: if len(x)>20 or len(y)>20: z,p = ranksums(x,y) - print '\nRank Sums test (NONparametric, n>20): ', round(z,4),round(p,4) + print('\nRank Sums test (NONparametric, n>20): ', round(z,4),round(p,4)) else: u,p = mannwhitneyu(x,y) - print '\nMann-Whitney U-test (NONparametric, ns<20): ', round(u,4),round(p,4) + print('\nMann-Whitney U-test (NONparametric, ns<20): ', round(u,4),round(p,4)) else: # RELATED SAMPLES if vartype[0]=='e': t,p = ttest_rel(x,y,0) - print '\nRelated samples t-test: ', round(t,4),round(p,4) + print('\nRelated samples t-test: ', round(t,4),round(p,4)) else: t,p = ranksums(x,y) - print '\nWilcoxon T-test (NONparametric): ', round(t,4),round(p,4) + print('\nWilcoxon T-test (NONparametric): ', round(t,4),round(p,4)) else: # CORRELATION ANALYSIS corrtype = '' while corrtype not in ['c','C','r','R','d','D']: - print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ', - corrtype = raw_input() + print('\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ', end=' ') + corrtype = input() if corrtype in ['c','C']: m,b,r,p,see = linregress(x,y) - print '\nLinear regression for continuous variables ...' + print('\nLinear regression for continuous variables ...') lol = [['Slope','Intercept','r','Prob','SEestimate'],[round(m,4),round(b,4),round(r,4),round(p,4),round(see,4)]] pstat.printcc(lol) elif corrtype in ['r','R']: r,p = spearmanr(x,y) - print '\nCorrelation for ranked variables ...' - print "Spearman's r: ",round(r,4),round(p,4) + print('\nCorrelation for ranked variables ...') + print("Spearman's r: ",round(r,4),round(p,4)) else: # DICHOTOMOUS r,p = pointbiserialr(x,y) - print '\nAssuming x contains a dichotomous variable ...' - print 'Point Biserial r: ',round(r,4),round(p,4) - print '\n\n' + print('\nAssuming x contains a dichotomous variable ...') + print('Point Biserial r: ',round(r,4),round(p,4)) + print('\n\n') return None @@ -3065,8 +3065,8 @@ def apointbiserialr(x,y): TINY = 1e-30 categories = pstat.aunique(x) data = pstat.aabut(x,y) - if len(categories) <> 2: - raise ValueError, "Exactly 2 categories required (in x) for pointbiserialr()." + if len(categories) != 2: + raise ValueError("Exactly 2 categories required (in x) for pointbiserialr().") else: # there are 2 categories, continue codemap = pstat.aabut(categories,N.arange(2)) recoded = pstat.arecode(data,codemap,0) @@ -3179,7 +3179,7 @@ def attest_1samp(a,popmean,printit=0,name='Sample',writemode='a'): t = (x-popmean)/math.sqrt(svar*(1.0/n)) prob = abetai(0.5*df,0.5,df/(df+t*t)) - if printit <> 0: + if printit != 0: statname = 'Single-sample T-test.' outputpairedstats(printit,writemode, 'Population','--',popmean,0,0,0, @@ -3224,7 +3224,7 @@ def attest_ind (a, b, dimension=None, printit=0, name1='Samp1', name2='Samp2',wr if len(probs) == 1: probs = probs[0] - if printit <> 0: + if printit != 0: if type(t) == N.ArrayType: t = t[0] if type(probs) == N.ArrayType: @@ -3257,8 +3257,8 @@ def attest_rel (a,b,dimension=None,printit=0,name1='Samp1',name2='Samp2',writemo a = N.ravel(a) b = N.ravel(b) dimension = 0 - if len(a)<>len(b): - raise ValueError, 'Unequal length arrays.' + if len(a)!=len(b): + raise ValueError('Unequal length arrays.') x1 = amean(a,dimension) x2 = amean(b,dimension) v1 = avar(a,dimension) @@ -3278,7 +3278,7 @@ def attest_rel (a,b,dimension=None,printit=0,name1='Samp1',name2='Samp2',writemo if len(probs) == 1: probs = probs[0] - if printit <> 0: + if printit != 0: statname = 'Related samples T-test.' outputpairedstats(printit,writemode, name1,n,x1,v1,N.minimum.reduce(N.ravel(a)), @@ -3370,7 +3370,7 @@ def amannwhitneyu(x,y): smallu = min(u1,u2) T = math.sqrt(tiecorrect(ranked)) # correction factor for tied scores if T == 0: - raise ValueError, 'All numbers are identical in amannwhitneyu' + raise ValueError('All numbers are identical in amannwhitneyu') sd = math.sqrt(T*n1*n2*(n1+n2+1)/12.0) z = abs((bigu-n1*n2/2.0) / sd) # normal approximation for prob calc return smallu, 1.0 - zprob(z) @@ -3431,8 +3431,8 @@ def awilcoxont(x,y): Usage: awilcoxont(x,y) where x,y are equal-length arrays for 2 conditions Returns: t-statistic, two-tailed p-value """ - if len(x) <> len(y): - raise ValueError, 'Unequal N in awilcoxont. Aborting.' + if len(x) != len(y): + raise ValueError('Unequal N in awilcoxont. Aborting.') d = x-y d = N.compress(N.not_equal(d,0),d) # Keep all non-zero differences count = len(d) @@ -3467,7 +3467,7 @@ def akruskalwallish(*args): assert len(args) == 3, "Need at least 3 groups in stats.akruskalwallish()" args = list(args) n = [0]*len(args) - n = map(len,args) + n = list(map(len,args)) all = [] for i in range(len(args)): all = all + args[i].tolist() @@ -3485,7 +3485,7 @@ def akruskalwallish(*args): h = 12.0 / (totaln*(totaln+1)) * ssbn - 3*(totaln+1) df = len(args) - 1 if T == 0: - raise ValueError, 'All numbers are identical in akruskalwallish' + raise ValueError('All numbers are identical in akruskalwallish') h = h / float(T) return h, chisqprob(h,df) @@ -3504,9 +3504,9 @@ def afriedmanchisquare(*args): """ k = len(args) if k < 3: - raise ValueError, '\nLess than 3 levels. Friedman test not appropriate.\n' + raise ValueError('\nLess than 3 levels. Friedman test not appropriate.\n') n = len(args[0]) - data = apply(pstat.aabut,args) + data = pstat.aabut(*args) data = data.astype(N.Float) for i in range(len(data)): data[i] = arankdata(data[i]) @@ -3568,11 +3568,11 @@ def ex(x): a_big = N.greater(a,BIG) a_big_frozen = -1 *N.ones(probs.shape,N.Float) totalelements = N.multiply.reduce(N.array(probs.shape)) - while asum(mask)<>totalelements: + while asum(mask)!=totalelements: e = N.log(z) + e s = s + ex(c*z-a-e) z = z + 1.0 - print z, e, s + print(z, e, s) newmask = N.greater(z,chisq) a_big_frozen = N.where(newmask*N.equal(mask,0)*a_big, s, a_big_frozen) mask = N.clip(newmask+mask,0,1) @@ -3585,11 +3585,11 @@ def ex(x): c = 0.0 mask = N.zeros(probs.shape) a_notbig_frozen = -1 *N.ones(probs.shape,N.Float) - while asum(mask)<>totalelements: + while asum(mask)!=totalelements: e = e * (a/z.astype(N.Float)) c = c + e z = z + 1.0 - print '#2', z, e, c, s, c*y+s2 + print('#2', z, e, c, s, c*y+s2) newmask = N.greater(z,chisq) a_notbig_frozen = N.where(newmask*N.equal(mask,0)*(1-a_big), c*y+s2, a_notbig_frozen) @@ -3753,8 +3753,8 @@ def abetacf(a,b,x,verbose=1): frozen = N.where(newmask*N.equal(mask,0), az, frozen) mask = N.clip(mask+newmask,0,1) noconverge = asum(N.equal(frozen,-1)) - if noconverge <> 0 and verbose: - print 'a or b too big, or ITMAX too small in Betacf for ',noconverge,' elements' + if noconverge != 0 and verbose: + print('a or b too big, or ITMAX too small in Betacf for ',noconverge,' elements') if arrayflag: return frozen else: @@ -3797,8 +3797,8 @@ def abetai(a,b,x,verbose=1): """ TINY = 1e-15 if type(a) == N.ArrayType: - if asum(N.less(x,0)+N.greater(x,1)) <> 0: - raise ValueError, 'Bad x in abetai' + if asum(N.less(x,0)+N.greater(x,1)) != 0: + raise ValueError('Bad x in abetai') x = N.where(N.equal(x,0),TINY,x) x = N.where(N.equal(x,1.0),1-TINY,x) @@ -3838,8 +3838,8 @@ def aglm(data,para): Usage: aglm(data,para) Returns: statistic, p-value ??? """ - if len(para) <> len(data): - print "data and para must be same length in aglm" + if len(para) != len(data): + print("data and para must be same length in aglm") return n = len(para) p = pstat.aunique(para) @@ -3875,10 +3875,10 @@ def aF_oneway(*args): vars = [0]*na ns = [0]*na alldata = [] - tmp = map(N.array,args) - means = map(amean,tmp) - vars = map(avar,tmp) - ns = map(len,args) + tmp = list(map(N.array,args)) + means = list(map(amean,tmp)) + vars = list(map(avar,tmp)) + ns = list(map(len,args)) alldata = N.concatenate(args) bign = len(alldata) sstot = ass(alldata)-(asquare_of_sums(alldata)/float(bign)) @@ -4102,7 +4102,7 @@ def ashellsort(inarray): """ n = len(inarray) svec = inarray *1.0 - ivec = range(n) + ivec = list(range(n)) gap = n/2 # integer division needed while gap >0: for i in range(gap,n): @@ -4135,7 +4135,7 @@ def arankdata(inarray): for i in range(n): sumranks = sumranks + i dupcount = dupcount + 1 - if i==n-1 or svec[i] <> svec[i+1]: + if i==n-1 or svec[i] != svec[i+1]: averank = sumranks / float(dupcount) + 1 for j in range(i-dupcount+1,i+1): newarray[ivec[j]] = averank diff --git a/toontown/src/quest/QuestChoiceGui.py b/toontown/src/quest/QuestChoiceGui.py index e5f1c529..ccbd243c 100644 --- a/toontown/src/quest/QuestChoiceGui.py +++ b/toontown/src/quest/QuestChoiceGui.py @@ -1,6 +1,6 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * -import QuestPoster +from . import QuestPoster from toontown.toonbase import ToontownTimer from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer @@ -70,7 +70,7 @@ def setQuests(self, quests, fromNpcId, timeout): self.timer.setPos(-0.2,0,-0.6) elif len(quests) == 3*3: self['geom_scale'] = (1.85,1,0.9) - map(lambda x: x.setScale(0.95), self.questChoicePosters) + list(map(lambda x: x.setScale(0.95), self.questChoicePosters)) self.questChoicePosters[0].setPos(0,0,-0.4) self.questChoicePosters[1].setPos(0,0,0.125) self.questChoicePosters[2].setPos(0,0,0.65) diff --git a/toontown/src/quest/QuestExplorer.py b/toontown/src/quest/QuestExplorer.py index 14c9e760..5b82629b 100644 --- a/toontown/src/quest/QuestExplorer.py +++ b/toontown/src/quest/QuestExplorer.py @@ -1,4 +1,4 @@ -from Quests import * +from .Quests import * from direct.showbase.TkGlobal import * from direct.showbase.DirectObject import DirectObject from direct.tkwidgets.Tree import * @@ -187,7 +187,7 @@ def IsExpandable(self): def GetSubList(self): if self.quest == -1: - nextQuests = Tier2QuestsDict.keys() + nextQuests = list(Tier2QuestsDict.keys()) elif self.quest <= self.maxTier: nextQuests = getStartingQuests(self.quest) else: @@ -195,11 +195,11 @@ def GetSubList(self): if nextQuests == None: return [] else: - return map(QuestExplorerItem, nextQuests) + return list(map(QuestExplorerItem, nextQuests)) def exploreQuests(quest = -1): # Pop open a hierarchical viewer to explore quest system - import QuestExplorer + from . import QuestExplorer tl = TkGlobal.Toplevel() tl.title('Explore Quests') qe = QuestExplorer.QuestExplorer(parent = tl, quest = quest) diff --git a/toontown/src/quest/QuestManagerAI.py b/toontown/src/quest/QuestManagerAI.py index 78742829..e0e4661d 100644 --- a/toontown/src/quest/QuestManagerAI.py +++ b/toontown/src/quest/QuestManagerAI.py @@ -1,7 +1,7 @@ from otp.ai.AIBaseGlobal import * from direct.task import Task from direct.directnotify import DirectNotifyGlobal -import Quests +from . import Quests from toontown.toon import NPCToons import random from direct.showbase import PythonUtil @@ -71,10 +71,10 @@ def requestInteract(self, avId, npc): self.notify.debug("freeing avatar %s because NPC is busy" % (avId)) npc.freeAvatar(avId) return - + # handle unusual cases such as NPC specific quests # interactionComplete = self.handleSpecialCases(avId, npc) - + # if interactionComplete: # return @@ -89,7 +89,7 @@ def requestInteract(self, avId, npc): av.removeAllTracesOfQuest(questDesc[0], questDesc[3]) self.rejectAvatar(av, npc) return - + if (self.isQuestComplete(av, npc, questDesc) == Quests.COMPLETE): self.completeQuest(av, npc, questDesc[0]) return @@ -109,7 +109,7 @@ def requestInteract(self, avId, npc): npc.assignQuest(av.getDoId(), *quests[0]) else: # if this avatar requested a quest, include it - if self.NextQuestDict.has_key(avId): + if avId in self.NextQuestDict: questId = self.NextQuestDict[avId] # if it's already in the list of quests, # we're all set @@ -170,12 +170,12 @@ def requestInteract(self, avId, npc): # Avatar does not need a quest, goodbye self.rejectAvatar(av, npc) return - + def handleSpecialCases(self, avId, npc): """ handle unusual cases such as NPC specific quests""" - + av = self.air.doId2do.get(avId) - + if npc.getNpcId() == 2018: # See if this npc has the TIP quest for questDesc in av.quests: @@ -185,15 +185,15 @@ def handleSpecialCases(self, avId, npc): completeStatus = self.isQuestComplete(av, npc, questDesc) questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc self.incompleteQuest(av, npc, questId, completeStatus, toNpcId) - return 1 - + return 1 + if self.needsQuest(av): self.assignQuest(avId, npc.npcId, 103, Quests.QuestDict[103][5], Quests.QuestDict[103][4]) npc.assignQuest(avId, 103, Quests.QuestDict[103][5], Quests.QuestDict[103][4]) return 1 - + return 0 - + def rejectAvatar(self, av, npc): self.notify.debug("rejecting avatar: avId: %s" % (av.getDoId())) npc.rejectAvatar(av.getDoId()) @@ -249,7 +249,7 @@ def isQuestComplete(self, av, npc, questDesc): self.notify.debug("isQuestComplete: avId: %s, quest: %s" % (av.getDoId(), quest)) return quest.getCompletionStatus(av, questDesc, npc) - + def completeQuest(self, av, npc, questId): self.notify.info("completeQuest: avId: %s, npcId: %s, questId: %s" % (av.getDoId(), npc.getNpcId(), questId)) @@ -279,7 +279,7 @@ def completeQuest(self, av, npc, questId): for i in range(0, quest.getNumGags()): av.inventory.useItem(track, level) av.d_setInventory(av.inventory.makeNetString()) - + # See if this quest is part of a multiquest. If it is, we assign # the next part of the multiquest. @@ -299,7 +299,7 @@ def completeQuest(self, av, npc, questId): (av.getDoId(), npc.getNpcId(), questId)) npc.freeAvatar(av.getDoId()) return - + # Nope, this is the end, dish out the reward av.removeQuest(questId) # TODO: put this in the movie @@ -314,7 +314,7 @@ def completeQuest(self, av, npc, questId): eventLogMessage += "|%s|%s" % ( reward.__class__.__name__, reward.getAmount()) - + else: # Full heal for completing part of a multistage quest av.toonUp(av.maxHp) @@ -330,7 +330,7 @@ def completeQuest(self, av, npc, questId): eventLogMessage += "|next %s" % (nextQuestId) self.air.writeServerEvent('questComplete', av.getDoId(), eventLogMessage) - + def incompleteQuest(self, av, npc, questId, completeStatus, toNpcId): self.notify.debug("incompleteQuest: avId: %s questId: %s" % (av.getDoId(), questId)) @@ -370,7 +370,7 @@ def incrementReward(self, av): # HQ. Unfortunately we are losing a pretty nice optimization # here. TODO: revisit and optimize. # (len(rewardHistory) >= Quests.getNumRewardsInTier(rewardTier)) and - + # We cannot do this because they might still be working on a few # optional quests from the old tier. # (len(av.quests) == 0) and @@ -386,7 +386,7 @@ def incrementReward(self, av): self.notify.info("incrementReward: avId %s, at end of rewards" % (av.getDoId())) return 0 - + rewardTier += 1 self.notify.info("incrementReward: avId %s, new rewardTier: %s" % (av.getDoId(), rewardTier)) @@ -534,7 +534,7 @@ def toonDefeatedFactory(self, av, location, avList): def toonDefeatedStage(self, av, location, avList): self.notify.debug("toonDefeatedStage: av made NO progress") - + def toonRecoveredCogSuitPart(self, av, location, avList): avQuests = av.quests avId = av.getDoId() @@ -575,7 +575,7 @@ def toonDefeatedMint(self, av, mintId, avList): av.b_setQuests(avQuests) else: self.notify.debug("toonDefeatedMint: av made NO progress") - + def toonDefeatedStage(self, av, stageId, avList): self.notify.debug("toonDefeatedStage") pass @@ -606,7 +606,7 @@ def toonKilledBuilding(self, av, track, difficulty, numFloors, zoneId, avList): else: # Do not care about this quest here continue - + # Now send the quests back to the avatar if the status changed if changed: self.notify.debug("toonKilledBuilding: av made progress") @@ -643,7 +643,7 @@ def toonKilledCogdo(self, av, difficulty, numFloors, zoneId, avList): # Do not care about this quest here continue """ - + # Now send the quests back to the avatar if the status changed if changed: self.notify.debug("toonKilledCogdo: av made progress") @@ -662,7 +662,7 @@ def toonKilledCogs(self, av, cogList, zoneId, avList): self.notify.debug("toonKilledCogs: avId: %s, avQuests: %s, cogList: %s, zoneId: %s" % (avId, avQuests, cogList, zoneId)) - for questDesc in avQuests: + for questDesc in avQuests: quest = Quests.getQuest(questDesc[0]) if quest != None: for cogDict in cogList: @@ -675,7 +675,7 @@ def toonKilledCogs(self, av, cogList, zoneId, avList): if (num > 0): questDesc[4] += num changed = 1 - + # Now send the quests back to the avatar if the status changed if changed: self.notify.debug("toonKilledCogs: av %s made progress" % (avId)) @@ -701,7 +701,7 @@ def toonRodeTrolleyFirstTime(self, av): else: # Do not care about this quest here pass - + # Now send the quests back to the avatar if the status changed if changed: self.notify.debug("toonRodeTrolleyFirstTime: av %s made progress" % (avId)) @@ -728,7 +728,7 @@ def toonPlayedMinigame(self, av, avList): # Set progress questDesc[4] += num changed = 1 - + # Now send the quests back to the avatar if the status changed if changed: self.notify.debug("toonPlayedMinigame: av %s made progress" % (avId)) @@ -797,30 +797,25 @@ def recoverItems(self, av, cogList, zoneId): # on the percent chance of finding it stored in the quest # Only find items if we still need them self.notify.debug("recoverItems: checking against cogDict: %s" % (cogDict)) - if ((questCogType == Quests.Any) or + if ((questCogType == Quests.Any) or (questCogType == cogDict[qualifier]) or # If it is level based, count those higher too ((qualifier == 'level') and (questCogType <= cogDict[qualifier])) ): if avId in cogDict['activeToons']: - if not quest.testDone(questDesc[4]):#if questDesc[4] < quest.getNumItems(): + if questDesc[4] < quest.getNumItems(): if quest.isLocationMatch(zoneId): - #rand = random.random() * 100 - #if rand <= quest.getPercentChance(): - check, count = quest.testRecover(questDesc[4]) - if check: + rand = random.random() * 100 + if rand <= quest.getPercentChance(): # FOUND IT! Increment progress by one item - #questDesc[4] += 1 + questDesc[4] += 1 # Keep track of all the items recovered itemsRecovered.append(quest.getItem()) - #changed = 1 + changed = 1 self.notify.debug("recoverItems: av %s made progress: %s" % (avId, questDesc[4])) else: self.notify.debug("recoverItems: av %s made NO progress (item not found) [%s > %s])" % (avId, check, quest.getPercentChance())) itemsNotRecovered.append(quest.getItem()) - #keeping track of missed items - changed = 1 - questDesc[4] = count else: self.notify.debug("recoverItems: av %s made NO progress (wrong location)" % (avId)) else: @@ -832,7 +827,7 @@ def recoverItems(self, av, cogList, zoneId): else: # Do not care about this quest here continue - + # Now send the quests back to the avatar if the status changed # Note: this means that an avatar will immediately get credit @@ -875,7 +870,7 @@ def findItemInWater(self, av, zoneId): else: # Do not care about this quest here continue - + self.notify.debug("findItemInWater: av %s made NO progress" % (avId)) return None @@ -980,7 +975,7 @@ def removeClothingTicket(self, av, npc): # Not a deliver item quest continue # Did not find it, avId does not have clothing ticket on this tailor - return 0 + return 0 def setNextQuest(self, avId, questId): # for ~nextQuest: queue up a quest for this avatar @@ -992,4 +987,4 @@ def cancelNextQuest(self, avId): if oldQuest: del self.NextQuestDict[avId] return oldQuest - + diff --git a/toontown/src/quest/QuestParser.py b/toontown/src/quest/QuestParser.py index 45eef2c9..35be561c 100644 --- a/toontown/src/quest/QuestParser.py +++ b/toontown/src/quest/QuestParser.py @@ -9,7 +9,7 @@ from direct.showbase import AppRunnerGlobal from pandac.PandaModules import * from direct.showbase import DirectObject -import BlinkingArrows +from . import BlinkingArrows from toontown.toon import ToonHeadFrame from toontown.char import CharDNA from toontown.suit import SuitDNA @@ -247,7 +247,7 @@ def readFile(filename): def getLineOfTokens(gen): tokens = [] nextNeg = 0 - token = gen.next() + token = next(gen) # The end of the file is special if token[0] == tokenize.ENDMARKER: return None @@ -275,7 +275,7 @@ def getLineOfTokens(gen): tokens.append(token[1]) else: notify.warning("Ignored token type: %s on line: %s" % (tokenize.tok_name[token[0]], token[2][0])) - token = gen.next() + token = next(gen) return tokens def parseId(line): @@ -289,7 +289,7 @@ def parseId(line): lineDict[curId] = [] def questDefined(scriptId): - return lineDict.has_key(scriptId) + return scriptId in lineDict class NPCMoviePlayer(DirectObject.DirectObject): @@ -320,9 +320,9 @@ def __init__(self, scriptId, toon, npc): # Look for this var first in the private dict, then in the global dict def getVar(self, varName): - if self.privateVarDict.has_key(varName): + if varName in self.privateVarDict: return self.privateVarDict[varName] - elif globalVarDict.has_key(varName): + elif varName in globalVarDict: return globalVarDict[varName] elif (varName.find('tomDialogue') > -1) or (varName.find('harryDialogue') > -1): notify.warning("%s getting referenced. Tutorial Ack: %d \ @@ -332,9 +332,9 @@ def getVar(self, varName): notify.error("Variable not defined: %s" % (varName)) def delVar(self, varName): - if self.privateVarDict.has_key(varName): + if varName in self.privateVarDict: del self.privateVarDict[varName] - elif globalVarDict.has_key(varName): + elif varName in globalVarDict: del globalVarDict[varName] else: notify.warning("Variable not defined: %s" % (varName)) @@ -349,7 +349,7 @@ def cleanup(self): self.currentTrack = None self.ignoreAll() taskMgr.remove(self.uniqueId) - for toonHeadFrame in self.toonHeads.values(): + for toonHeadFrame in list(self.toonHeads.values()): toonHeadFrame.destroy() while self.chars: self.__unloadChar(self.chars[0]) diff --git a/toontown/src/quest/QuestPoster.py b/toontown/src/quest/QuestPoster.py index d851daa6..6765fad3 100644 --- a/toontown/src/quest/QuestPoster.py +++ b/toontown/src/quest/QuestPoster.py @@ -1,6 +1,6 @@ from direct.gui.DirectGui import * from pandac.PandaModules import * -import Quests +from . import Quests from toontown.toon import NPCToons from toontown.toon import ToonHead from toontown.toon import ToonDNA @@ -434,7 +434,7 @@ def update(self, questDesc): questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc quest = Quests.getQuest(questId) if quest == None: - print "Tried to display poster for unknown quest %s" % (questId) + print("Tried to display poster for unknown quest %s" % (questId)) return # Update reward info if rewardId == Quests.NA: @@ -514,8 +514,8 @@ def update(self, questDesc): auxTextPos = Vec3(0,0,0.12) headlineString = quest.getHeadlineString() objectiveStrings = quest.getObjectiveStrings() - assert type(objectiveStrings) in (types.ListType, types.TupleType) - captions = map(string.capwords,quest.getObjectiveStrings()) + assert type(objectiveStrings) in (list, tuple) + captions = list(map(string.capwords,quest.getObjectiveStrings())) imageColor = Vec4(*self.colors['white']) # Adjust poster for the particular quest type if ((quest.getType() == Quests.DeliverGagQuest) or @@ -702,7 +702,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -739,7 +739,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -776,7 +776,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -813,7 +813,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogPartQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -852,7 +852,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -889,7 +889,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -926,7 +926,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -959,7 +959,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsRescueQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -1022,7 +1022,7 @@ def update(self, questDesc): infoText = TTLocalizer.QuestPosterPlayground if not fComplete: captions = [TTLocalizer.QuestsMinigameNewbieQuestCaption % quest.getNewbieLevel()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsMinigameNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -1086,7 +1086,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) @@ -1135,7 +1135,7 @@ def update(self, questDesc): if not fComplete: headlineString = TTLocalizer.QuestsNewbieQuestHeadline captions = [quest.getCaption()] - captions.append(map(string.capwords, quest.getObjectiveStrings())) + captions.append(list(map(string.capwords, quest.getObjectiveStrings()))) auxText = TTLocalizer.QuestsCogNewbieQuestAux lPos.setX(-0.18) self.laffMeter = self.createLaffMeter(quest.getNewbieLevel()) diff --git a/toontown/src/quest/QuestRewardCounter.py b/toontown/src/quest/QuestRewardCounter.py index a7453c25..ab7dfc74 100644 --- a/toontown/src/quest/QuestRewardCounter.py +++ b/toontown/src/quest/QuestRewardCounter.py @@ -1,6 +1,6 @@ from pandac.PandaModules import * from direct.directnotify import DirectNotifyGlobal -import Quests +from . import Quests from toontown.toonbase import ToontownGlobals from toontown.fishing import FishGlobals from toontown.suit import SuitDNA @@ -18,7 +18,7 @@ class QuestRewardCounter: """ notify = directNotify.newCategory("QuestRewardCounter") - + # TODO: track progress def __init__(self): @@ -68,7 +68,7 @@ def setFromAvatar(self, av): rewardIds.append(rewardId) self.notify.debug("Ignoring rewards: %s" % (rewardIds)) - + self.setRewardIndex(av.rewardTier, rewardIds, av.rewardHistory) # add maxHp for fishCollection @@ -76,17 +76,12 @@ def setFromAvatar(self, av): self.notify.debug("Adding %s hp for fish collection" % (fishHp)) self.maxHp += fishHp - # add maxHp for flowerCollection - flowerHp = int(len(av.flowerCollection) / GardenGlobals.FLOWERS_PER_BONUS) - self.notify.debug("Adding %s hp for fish collection" % (flowerHp)) - self.maxHp += flowerHp - # add maxHp for HQ cog suit HQdepts = ( # add depts as the HQs are released ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.SellbotHQ), #ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.BossbotHQ), - ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.LawbotHQ), + #ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.LawbotHQ), ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.CashbotHQ), ) levels = av.getCogLevels() @@ -105,16 +100,6 @@ def setFromAvatar(self, av): self.notify.debug("Adding %s hp for cog suits" % (suitHp)) self.maxHp += suitHp - # add maxHp for karting trophies - kartingHp = int(av.kartingTrophies.count(1) / RaceGlobals.TrophiesPerCup) - self.notify.debug("Adding %s hp for karting trophies" % (kartingHp)) - self.maxHp += kartingHp - - # add maxHp for golf trophies - golfHp = int (av.golfTrophies.count(True) / GolfGlobals.TrophiesPerCup) - self.notify.debug("Adding %s hp for golf trophies" % (golfHp)) - self.maxHp += golfHp - def setRewardIndex(self, tier, rewardIds, rewardHistory): self.reset() @@ -163,7 +148,7 @@ def assignReward(self, rewardId, rewardIds): reward = Quests.getReward(rewardId) reward.countReward(self) self.notify.debug("Assigning reward %d" % (rewardId)) - + def fixAvatar(self, av): """fixAvatar(self, DistributedAvatarAI av) @@ -185,22 +170,22 @@ def fixAvatar(self, av): self.notify.info("Changed avatar %d to have maxCarry %d instead of %d" % (av.doId, self.maxCarry, av.maxCarry)) av.b_setMaxCarry(self.maxCarry) anyChanged = 1 - + if (self.maxMoney != av.maxMoney): self.notify.info("Changed avatar %d to have maxMoney %d instead of %d" % (av.doId, self.maxMoney, av.maxMoney)) av.b_setMaxMoney(self.maxMoney) anyChanged = 1 - + if (self.questCarryLimit != av.questCarryLimit): self.notify.info("Changed avatar %d to have questCarryLimit %d instead of %d" % (av.doId, self.questCarryLimit, av.questCarryLimit)) av.b_setQuestCarryLimit(self.questCarryLimit) anyChanged = 1 - + if (self.teleportAccess != av.teleportZoneArray): self.notify.info("Changed avatar %d to have teleportAccess %s instead of %s" % (av.doId, self.teleportAccess, av.teleportZoneArray)) av.b_setTeleportAccess(self.teleportAccess) anyChanged = 1 - + if (self.trackAccess != av.trackArray): self.notify.info("Changed avatar %d to have trackAccess %s instead of %s" % (av.doId, self.trackAccess, av.trackArray)) av.b_setTrackAccess(self.trackAccess) diff --git a/toontown/src/quest/Quests.py b/toontown/src/quest/Quests.py index 5cc1919f..d330c7d2 100644 --- a/toontown/src/quest/Quests.py +++ b/toontown/src/quest/Quests.py @@ -1,77 +1,16 @@ -from otp.otpbase import OTPGlobals from toontown.toonbase import ToontownBattleGlobals from toontown.toonbase import ToontownGlobals from toontown.battle import SuitBattleGlobals from toontown.coghq import CogDisguiseGlobals import random from toontown.toon import NPCToons -import copy -import string +import copy, string from toontown.hood import ZoneUtil from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer from direct.showbase import PythonUtil -import time -import types -import random - -# COG TRACKS PER HOOD -# Look in DistributedSuitPlannerAI.py - -# COG LEVELS PER HOOD -# TT LEVELS 1,2,3 -# DD LEVELS 2,3,4,5,6 -# DG LEVELS 2,3,4,5,6 -# MM LEVELS 2,3,4,5,6 -# BR LEVELS 5,6,7 -# DL LEVELS 5,6,7,8,9 -# -# COG LEVELS PER DNA -# -# CORP LEVELS -# f 1,2,3,4,5 -# p 2,3,4,5,6 -# ym 3,4,5,6,7 -# mm 4,5,6,7,8 -# ds 5,6,7,8,9 -# hh 6,7,8,9,10 -# cr 7,8,9,10,11 -# tbc 8,9,10,11,12 -# -# SALES LEVELS -# cc 1,2,3,4,5 -# tm 2,3,4,5,6 -# nd 3,4,5,6,7 -# gh 4,5,6,7,8 -# ms 5,6,7,8,9 -# tf 6,7,8,9,10 -# m 7,8,9,10,11 -# mh 8,9,10,11,12 -# -# MONEY LEVELS -# sc 1,2,3,4,5 -# pp 2,3,4,5,6 -# tw 3,4,5,6,7 -# bc 4,5,6,7,8 -# nc 5,6,7,8,9 -# mb 6,7,8,9,10 -# ls 7,8,9,10,11 -# rb 8,9,10,11,12 -# -# LEGAL LEVELS -# bf 1,2,3,4,5 -# b 2,3,4,5,6 -# dt 3,4,5,6,7 -# ac 4,5,6,7,8 -# bs 5,6,7,8,9 -# sd 6,7,8,9,10 -# le 7,8,9,10,11 -# bw 8,9,10,11,12 - - -notify = DirectNotifyGlobal.directNotify.newCategory("Quests") - -# Pull some strings out of the localizer for easy access +import time, types +notify = DirectNotifyGlobal.directNotify.newCategory('Quests') ItemDict = TTLocalizer.QuestsItemDict CompleteString = TTLocalizer.QuestsCompleteString NotChosenString = TTLocalizer.QuestsNotChosenString @@ -83,12 +22,8 @@ DefaultLeaving = TTLocalizer.QuestsDefaultLeaving DefaultReject = TTLocalizer.QuestsDefaultReject DefaultTierNotDone = TTLocalizer.QuestsDefaultTierNotDone -# The default string gets replaced with the quest getstring DefaultQuest = TTLocalizer.QuestsDefaultQuest DefaultVisitQuestDialog = TTLocalizer.QuestsDefaultVisitQuestDialog - - -# Constants used in the NPC movies centrally defined here GREETING = 0 QUEST = 1 INCOMPLETE = 2 @@ -96,24 +31,15 @@ INCOMPLETE_WRONG_NPC = 4 COMPLETE = 5 LEAVING = 6 - -# Constants used in the QuestDict Any = 1 -OBSOLETE = 'OBSOLETE' # set the reward to this for removed non-multipart quests - -# Are you the start of a multipart quest? +OBSOLETE = 'OBSOLETE' Start = 1 -# Or are you the continuation of a multipart quest? Cont = 0 - Anywhere = 1 NA = 2 Same = 3 AnyFish = 4 AnyCashbotSuitPart = 5 -AnyLawbotSuitPart = 6 -AnyBossbotSuitPart = 7 - ToonTailor = 999 ToonHQ = 1000 QuestDictTierIndex = 0 @@ -124,77 +50,39 @@ QuestDictRewardIndex = 5 QuestDictNextQuestIndex = 6 QuestDictDialogIndex = 7 -# RecoverItem percentage difficulty VeryEasy = 100 Easy = 75 Medium = 50 Hard = 25 VeryHard = 20 - -# Tier constants used in the quest dict TT_TIER = 0 DD_TIER = 4 DG_TIER = 7 MM_TIER = 8 BR_TIER = 11 DL_TIER = 14 -LAWBOT_HQ_TIER = 18 -BOSSBOT_HQ_TIER = 32 -ELDER_TIER = 49 - -# The final tier loops +ELDER_TIER = 18 LOOPING_FINAL_TIER = ELDER_TIER - VISIT_QUEST_ID = 1000 TROLLEY_QUEST_ID = 110 FIRST_COG_QUEST_ID = 145 FRIEND_QUEST_ID = 150 PHONE_QUEST_ID = 175 - -# newbie levels for elder quests NEWBIE_HP = 25 -# Set to 50 HP because that is about what you have at the -# end of Daisy Gardens (45 hp + fishing) SELLBOT_HQ_NEWBIE_HP = 50 -# Set to 85 HP because that is about what you have at the -# end of Donald's Dreamland (81 hp + fishing) -patricia CASHBOT_HQ_NEWBIE_HP = 85 - -# pull in factory types from ToontownGlobals from toontown.toonbase.ToontownGlobals import FT_FullSuit, FT_Leg, FT_Arm, FT_Torso - -# We use our own random generator so we can seed it properly QuestRandGen = random.Random() def seedRandomGen(npcId, avId, tier, rewardHistory): - """ - Seed the quest random generator with an npc, av, tier, and rewardHistory - This guarantees the npc will have consistent behavior when - approached by the same avatar repeatedly. This helps prevent - guests from shopping for quests by approaching the same npc multiple - times in a row. - """ QuestRandGen.seed(npcId * 100 + avId + tier + len(rewardHistory)) + def seededRandomChoice(seq): - """ - Return a random choice from seq. Should be preceded by a call - to seedRandomGen with the relevant parties. - """ return QuestRandGen.choice(seq) + def getCompleteStatusWithNpc(questComplete, toNpcId, npc): - """ - Given the actualy quest complete bool, based on this npc - and toNpcId, determine if the quest is actually complete - with this npc. If npc is passed in as None, just return the - complete status of the quest. - return values are: - COMPLETE : quest is complete (was the right npc as well, or None) - INCOMPLETE_PROGRESS : quest is incomplete because of the progress - INCOMPLETE_WRONG_NPC : quest is incomplete because this is the wrong npc - INCOMPLETE : quest is incomplete - """ if questComplete: if npc: if npcMatches(toNpcId, npc): @@ -203,450 +91,314 @@ def getCompleteStatusWithNpc(questComplete, toNpcId, npc): return INCOMPLETE_WRONG_NPC else: return COMPLETE - else: - if npc: - if npcMatches(toNpcId, npc): - return INCOMPLETE_PROGRESS - else: - return INCOMPLETE + elif npc: + if npcMatches(toNpcId, npc): + return INCOMPLETE_PROGRESS else: return INCOMPLETE + else: + return INCOMPLETE + def npcMatches(toNpcId, npc): - """ - Return true if this npc matches this toNpcId - This also checks for wildcards and ToonHQ ids - """ - return ( - # Exact npc match - (toNpcId == npc.getNpcId()) or - # Quest did not care who it was - (toNpcId == Any) or - # Quest wanted a generic ToonHQ npc and we found one - ((toNpcId == ToonHQ) and (npc.getHq())) or - # Quest wanted a generic Tailor npc and we found one - ((toNpcId == ToonTailor) and (npc.getTailor())) - ) - - -def calcRecoverChance(numberNotDone, baseChance, cap = 1): - chance = baseChance - avgNum2Kill = 1.0 / (chance / 100.0) - if numberNotDone >= (avgNum2Kill * 1.5) and cap: - chance = 1000 - elif numberNotDone > (avgNum2Kill * 0.5): - diff = float(numberNotDone - (avgNum2Kill * 0.5)) - luck = 1.0 + abs(diff / (avgNum2Kill * 0.5)) - chance *= luck - return chance - - -def simulateRecoveryVar(numNeeded, baseChance, list = 0, cap = 1): - numHave = 0 - numTries = 0 - greatestFailChain = 0 - currentFail = 0 - capHits = 0 - attemptList = {} - - while numHave < numNeeded: - numTries += 1 - chance = calcRecoverChance(currentFail, baseChance, cap) - test = random.random() * 100 - if chance == 1000: - capHits += 1 - if test < chance: - numHave += 1 - if currentFail > greatestFailChain: - greatestFailChain = currentFail - if attemptList.get(currentFail): - attemptList[currentFail] += 1 - else: - attemptList[currentFail] = 1 - currentFail = 0 - - else: - currentFail += 1 - - print("Test results: %s tries, %s longest failure chain, %s cap hits" % (numTries, greatestFailChain, capHits)) - if list: - print("failures for each succes %s" % (attemptList)) - -def simulateRecoveryFix(numNeeded, baseChance, list = 0): - numHave = 0 - numTries = 0 - greatestFailChain = 0 - currentFail = 0 - attemptList = {} - - while numHave < numNeeded: - numTries += 1 - chance = baseChance - test = random.random() * 100 - if test < chance: - numHave += 1 - if currentFail > greatestFailChain: - greatestFailChain = currentFail - if attemptList.get(currentFail): - attemptList[currentFail] += 1 - else: - attemptList[currentFail] = 1 - currentFail = 0 - else: - currentFail += 1 + return toNpcId == npc.getNpcId() or toNpcId == Any or toNpcId == ToonHQ and npc.getHq() or toNpcId == ToonTailor and npc.getTailor() - print("Test results: %s tries, %s longest failure chain" % (numTries, greatestFailChain)) - if list: - print("failures for each succes %s" % (attemptList)) class Quest: - """ - Base class for all quest types - """ - - # quest validity checks - # if you know that one of these is wrong, please fix it - _cogTracks = [Any, 'c', 'l', 'm', 's'] + __module__ = __name__ + _cogTracks = [ + Any, 'c', 'l', 'm', 's'] _factoryTypes = [Any, FT_FullSuit, FT_Leg, FT_Arm, FT_Torso] + def check(self, cond, msg): - assert cond, "quest %s: %s" % (self.id, msg) + pass + def checkLocation(self, location): - locations = [ - Anywhere, - ] + TTLocalizer.GlobalStreetNames.keys() - self.check(location in locations, - "invalid location: %s" % location) + locations = [Anywhere] + list(TTLocalizer.GlobalStreetNames.keys()) + self.check(location in locations, 'invalid location: %s' % location) + def checkNumCogs(self, num): - self.check(1, - "invalid number of cogs: %s" % num) + self.check(1, 'invalid number of cogs: %s' % num) + def checkNewbieLevel(self, level): - self.check(1, - "invalid newbie level: %s" % level) + self.check(1, 'invalid newbie level: %s' % level) + def checkCogType(self, type): - types = [Any] + SuitBattleGlobals.SuitAttributes.keys() - self.check(type in types, - "invalid cog type: %s" % type) + types = [Any] + list(SuitBattleGlobals.SuitAttributes.keys()) + self.check(type in types, 'invalid cog type: %s' % type) + def checkCogTrack(self, track): - self.check(track in self._cogTracks, - "invalid cog track: %s" % track) + self.check(track in self._cogTracks, 'invalid cog track: %s' % track) + def checkCogLevel(self, level): - self.check(level >= 1 and level <= 12, - "invalid cog level: %s" % level) + self.check(level >= 1 and level <= 12, 'invalid cog level: %s' % level) + def checkNumSkelecogs(self, num): - self.check(1, - "invalid number of cogs: %s" % num) + self.check(1, 'invalid number of cogs: %s' % num) + def checkSkelecogTrack(self, track): - self.check(track in self._cogTracks, - "invalid cog track: %s" % track) + self.check(track in self._cogTracks, 'invalid cog track: %s' % track) + def checkSkelecogLevel(self, level): - self.check(level >= 1 and level <= 12, - "invalid cog level: %s" % level) - def checkNumSkeleRevives(self, num): - self.check(1, - "invalid number of cogs: %s" % num) + self.check(level >= 1 and level <= 12, 'invalid cog level: %s' % level) + def checkNumForemen(self, num): - self.check(num > 0, - "invalid number of foremen: %s" % num) + self.check(num > 0, 'invalid number of foremen: %s' % num) + def checkNumVPs(self, num): - self.check(num > 0, - "invalid number of VPs: %s" % num) + self.check(num > 0, 'invalid number of VPs: %s' % num) + def checkNumSupervisors(self, num): - self.check(num > 0, - "invalid number of supervisors: %s" % num) + self.check(num > 0, 'invalid number of supervisors: %s' % num) + def checkNumCFOs(self, num): - self.check(num > 0, - "invalid number of CFOs: %s" % num) + self.check(num > 0, 'invalid number of CFOs: %s' % num) + def checkNumBuildings(self, num): - self.check(1, - "invalid num buildings: %s" % num) + self.check(1, 'invalid num buildings: %s' % num) + def checkBuildingTrack(self, track): - self.check(track in self._cogTracks, - "invalid building track: %s" % track) + self.check(track in self._cogTracks, 'invalid building track: %s' % track) + def checkBuildingFloors(self, floors): - self.check(floors >= 1 and floors <= 5, - "invalid num floors: %s" % floors) + self.check(floors >= 1 and floors <= 5, 'invalid num floors: %s' % floors) + def checkNumFactories(self, num): - self.check(1, - "invalid num factories: %s" % num) + self.check(1, 'invalid num factories: %s' % num) + def checkFactoryType(self, type): - self.check(type in self._factoryTypes, - "invalid factory type: %s" % type) + self.check(type in self._factoryTypes, 'invalid factory type: %s' % type) + def checkNumMints(self, num): - self.check(1, - "invalid num mints: %s" % num) + self.check(1, 'invalid num mints: %s' % num) + def checkNumCogParts(self, num): - self.check(1, - "invalid num cog parts: %s" % num) + self.check(1, 'invalid num cog parts: %s' % num) + def checkNumGags(self, num): - self.check(1, - "invalid num gags: %s" % num) + self.check(1, 'invalid num gags: %s' % num) + def checkGagTrack(self, track): - self.check(track >= ToontownBattleGlobals.MIN_TRACK_INDEX and - track <= ToontownBattleGlobals.MAX_TRACK_INDEX, - "invalid gag track: %s" % track) + self.check(track >= ToontownBattleGlobals.MIN_TRACK_INDEX and track <= ToontownBattleGlobals.MAX_TRACK_INDEX, 'invalid gag track: %s' % track) + def checkGagItem(self, item): - self.check(item >= ToontownBattleGlobals.MIN_LEVEL_INDEX and - item <= ToontownBattleGlobals.MAX_LEVEL_INDEX, - "invalid gag item: %s" % item) + self.check(item >= ToontownBattleGlobals.MIN_LEVEL_INDEX and item <= ToontownBattleGlobals.MAX_LEVEL_INDEX, 'invalid gag item: %s' % item) + def checkDeliveryItem(self, item): - self.check(ItemDict.has_key(item), - "invalid delivery item: %s" % item) + self.check(item in ItemDict, 'invalid delivery item: %s' % item) + def checkNumItems(self, num): - self.check(1, - "invalid num items: %s" % num) + self.check(1, 'invalid num items: %s' % num) + def checkRecoveryItem(self, item): - self.check(ItemDict.has_key(item), - "invalid recovery item: %s" % item) + self.check(item in ItemDict, 'invalid recovery item: %s' % item) + def checkPercentChance(self, chance): - self.check(chance > 0 and chance <= 100, - "invalid percent chance: %s" % chance) + self.check(chance > 0 and chance <= 100, 'invalid percent chance: %s' % chance) + def checkRecoveryItemHolderAndType(self, holder, holderType='type'): - holderTypes = [ - 'type', - 'level', - 'track', - ] - self.check(holderType in holderTypes, - "invalid recovery item holderType: %s" % holderType) + holderTypes = ['type', 'level', 'track'] + self.check(holderType in holderTypes, 'invalid recovery item holderType: %s' % holderType) if holderType == 'type': holders = [ - Any, - AnyFish, - ] + SuitBattleGlobals.SuitAttributes.keys() - self.check(holder in holders, - "invalid recovery item holder: %s " - "for holderType: %s" % (holder, holderType)) + Any, AnyFish] + list(SuitBattleGlobals.SuitAttributes.keys()) + self.check(holder in holders, 'invalid recovery item holder: %s for holderType: %s' % (holder, holderType)) elif holderType == 'level': pass elif holderType == 'track': - self.check(holder in self._cogTracks, - "invalid recovery item holder: %s " - "for holderType: %s" % (holder, holderType)) + self.check(holder in self._cogTracks, 'invalid recovery item holder: %s for holderType: %s' % (holder, holderType)) + def checkTrackChoice(self, option): - self.check(option >= ToontownBattleGlobals.MIN_TRACK_INDEX and - option <= ToontownBattleGlobals.MAX_TRACK_INDEX, - "invalid track option: %s" % option) + self.check(option >= ToontownBattleGlobals.MIN_TRACK_INDEX and option <= ToontownBattleGlobals.MAX_TRACK_INDEX, 'invalid track option: %s' % option) + def checkNumFriends(self, num): - self.check(1, - "invalid number of friends: %s" % num) + self.check(1, 'invalid number of friends: %s' % num) + def checkNumMinigames(self, num): - self.check(1, - "invalid number of minigames: %s" % num) + self.check(1, 'invalid number of minigames: %s' % num) def filterFunc(avatar): - # The filter func allows us to filter the quest types that we give - # out to an avatar based on some property of our choosing. This is used - # for instance to see if avatar has any friends before giving out the friend quest - # 1 means give the quest, 0 means do not. By default, you can give all quests return 1 + filterFunc = staticmethod(filterFunc) def __init__(self, id, quest): self.id = id - # The quest is just a list of properties that can be - # interpreted by each subclass differently self.quest = quest + def getId(self): return self.id + def getType(self): return self.__class__ + def getObjectiveStrings(self): - return [""] + return [''] + def getString(self): - # Simplest description of the quest return self.getObjectiveStrings()[0] + def getRewardString(self, progressString): - # How the quest appears in the reward panel - return self.getString() + " : " + progressString + return self.getString() + ' : ' + progressString + def getChooseString(self): - # How the quest appears in the QuestChoiceGui panel return self.getString() + def getPosterString(self): - # How the quest appears on the QuestPoster return self.getString() + def getHeadlineString(self): - # Headline used on the QuestPoster return self.getString() + def getDefaultQuestDialog(self): - # How the NPC describes the quest return self.getString() + TTLocalizer.Period + def getNumQuestItems(self): return -1 + def addArticle(self, num, oString): if len(oString) == 0: return oString if num == 1: - # The singular case now includes the indefinite article (a, an). return oString else: - return "%d %s" % (num, oString) + return '%d %s' % (num, oString) + def __repr__(self): - return ("Quest type: %s id: %s params: %s" % - (self.__class__.__name__, self.id, self.quest[0:])) + return 'Quest type: %s id: %s params: %s' % (self.__class__.__name__, self.id, self.quest[0:]) def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. - # For non-Cog quests this is always false. return 0 + def doesVPCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog VP death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. - # For non-VP quests this is always false. return 0 + def doesCFOCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog CFO death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. - # For non-CFO quests this is always false. return 0 + def doesFactoryCount(self, avId, location, avList): - # If factory counts toward this quest, returns how many times it - # counts (non-zero). Otherwise, returns zero. return 0 + def doesMintCount(self, avId, location, avList): - # If mint counts toward this quest, returns how many times it - # counts (non-zero). Otherwise, returns zero. return 0 + def doesCogPartCount(self, avId, location, avList): - # If cog part counts toward this quest, returns how many times it - # counts (non-zero). Otherwise, returns zero. return 0 + def getCompletionStatus(self, av, questDesc, npc=None): - # Determine if this avatar has completed his quest wrt this npc - notify.error("Pure virtual - please override me") + notify.error('Pure virtual - please override me') return None - + return + + class LocationBasedQuest(Quest): - """ - Virtual Quest Class for quests that are location based. This allows - us to centralize some of the utilities for dealing with hood and branch - zones and determining matches for zoneIds - """ + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) self.checkLocation(self.quest[0]) + def getLocation(self): return self.quest[0] + def getLocationName(self): loc = self.getLocation() if loc == Anywhere: - locName = "" - # Now you can specify cogs in a hood (singular) - # or on a particular street (singular). - # You cannot specify a particular zone that also happens to be - # a hood identifier (N*1000); it will be interpreted as the entire - # hood. + locName = '' elif loc in ToontownGlobals.hoodNameMap: - locName = TTLocalizer.QuestInLocationString % { - 'inPhrase' : ToontownGlobals.hoodNameMap[loc][1], - 'location' : ToontownGlobals.hoodNameMap[loc][-1] + TTLocalizer.QuestsLocationArticle} - + locName = TTLocalizer.QuestInLocationString % {'inPhrase': ToontownGlobals.hoodNameMap[loc][1], 'location': ToontownGlobals.hoodNameMap[loc][(-1)] + TTLocalizer.QuestsLocationArticle} elif loc in ToontownGlobals.StreetBranchZones: - locName = TTLocalizer.QuestInLocationString % { - 'inPhrase' : ToontownGlobals.StreetNames[loc][1], - 'location' : ToontownGlobals.StreetNames[loc][-1] + TTLocalizer.QuestsLocationArticle} + locName = TTLocalizer.QuestInLocationString % {'inPhrase': ToontownGlobals.StreetNames[loc][1], 'location': ToontownGlobals.StreetNames[loc][(-1)] + TTLocalizer.QuestsLocationArticle} return locName + def isLocationMatch(self, zoneId): loc = self.getLocation() - # Easy case, anywhere always matches if loc is Anywhere: return 1 - # If all that is specified is a hood, then just check the hood zone if ZoneUtil.isPlayground(loc): if loc == ZoneUtil.getCanonicalHoodId(zoneId): return 1 else: return 0 - # If a branch is specified, check the branch zone + elif loc == ZoneUtil.getCanonicalBranchZone(zoneId): + return 1 + elif loc == zoneId: + return 1 else: - if loc == ZoneUtil.getCanonicalBranchZone(zoneId): - return 1 - # Is this the *actual* zone? Why would you do that? I'll support it just in case. - elif loc == zoneId: - return 1 - else: - return 0 + return 0 + def getChooseString(self): - # How the quest appears in the QuestChoiceGui panel - return (TTLocalizer.QuestsLocationString % { "string" : self.getString(), - "location" : self.getLocationName()}) + return TTLocalizer.QuestsLocationString % {'string': self.getString(), 'location': self.getLocationName()} + def getPosterString(self): - # How the quest appears on the QuestPoster - return (TTLocalizer.QuestsLocationString % { "string" : self.getString(), - "location" : self.getLocationName()}) + return TTLocalizer.QuestsLocationString % {'string': self.getString(), 'location': self.getLocationName()} + def getDefaultQuestDialog(self): - # How the NPC describes the quest - return ((TTLocalizer.QuestsLocationString + TTLocalizer.Period) % { "string" : self.getString(), - "location" : self.getLocationName()}) + return (TTLocalizer.QuestsLocationString + TTLocalizer.Period) % {'string': self.getString(), 'location': self.getLocationName()} -# TODO: this should be 'ApprenticeQuest' class NewbieQuest: - """Virtual Quest Class for quests that involve 'newbie' toons.""" + __module__ = __name__ + def getNewbieLevel(self): - notify.error("Pure virtual - please override me") - # inheritor must override and call down to this function to avoid - # diamond-of-death ambiguity - def getString(self, - newStr=TTLocalizer.QuestsCogNewNewbieQuestObjective, - oldStr=TTLocalizer.QuestsCogOldNewbieQuestObjective): - # Return the full string + notify.error('Pure virtual - please override me') + + def getString(self, newStr=TTLocalizer.QuestsCogNewNewbieQuestObjective, oldStr=TTLocalizer.QuestsCogOldNewbieQuestObjective): laff = self.getNewbieLevel() if laff <= NEWBIE_HP: - return (newStr % (self.getObjectiveStrings()[0])) + return newStr % self.getObjectiveStrings()[0] else: - return (oldStr % {'laffPoints' : laff, - 'objective' : self.getObjectiveStrings()[0]}) + return oldStr % {'laffPoints': laff, 'objective': self.getObjectiveStrings()[0]} + def getCaption(self): laff = self.getNewbieLevel() if laff <= NEWBIE_HP: return TTLocalizer.QuestsCogNewNewbieQuestCaption % laff else: return TTLocalizer.QuestsCogOldNewbieQuestCaption % laff - + def getNumNewbies(self, avId, avList): - # given an avatar and a list of participants, returns the number - # of 'newbies' among the other participants newbieHp = self.getNewbieLevel() num = 0 for av in avList: - if (av.getDoId() != avId and av.getMaxHp() <= newbieHp): - num += 1 + if av.getDoId() != avId and av.getMaxHp() <= newbieHp: + num += 1 + return num + class CogQuest(LocationBasedQuest): + __module__ = __name__ + def __init__(self, id, quest): LocationBasedQuest.__init__(self, id, quest) - # only validate quest[1] and [2] here for pure CogQuests - # subclasses use them for other things if self.__class__ == CogQuest: self.checkNumCogs(self.quest[1]) self.checkCogType(self.quest[2]) + def getCogType(self): return self.quest[2] + def getNumQuestItems(self): return self.getNumCogs() + def getNumCogs(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumCogs()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumCogs() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) - + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumCogs() == 1: + return '' else: - if self.getNumCogs() == 1: - return "" - else: - return (TTLocalizer.QuestsCogQuestProgress % - {"progress" : questDesc[4], "numCogs" : self.getNumCogs()}) + return TTLocalizer.QuestsCogQuestProgress % {'progress': questDesc[4], 'numCogs': self.getNumCogs()} + def getCogNameString(self): - # Cog, Cogs, Pencil Pusher, Pencil Pushers numCogs = self.getNumCogs() cogType = self.getCogType() if numCogs == 1: @@ -654,24 +406,24 @@ def getCogNameString(self): return TTLocalizer.ACog else: return SuitBattleGlobals.SuitAttributes[cogType]['singularname'] + elif cogType == Any: + return TTLocalizer.Cogs else: - if cogType == Any: - return TTLocalizer.Cogs - else: - return SuitBattleGlobals.SuitAttributes[cogType]['pluralname'] + return SuitBattleGlobals.SuitAttributes[cogType]['pluralname'] + def getObjectiveStrings(self): - # Defeat 3 Pencil Pushers - # Defeat 3 Cogs cogName = self.getCogNameString() numCogs = self.getNumCogs() if numCogs == 1: text = cogName else: - text = TTLocalizer.QuestsCogQuestDefeatDesc % {"numCogs" : numCogs, "cogName" : cogName} - return (text,) + text = TTLocalizer.QuestsCogQuestDefeatDesc % {'numCogs': numCogs, 'cogName': cogName} + return ( + text,) + def getString(self): - # Return the full string - return (TTLocalizer.QuestsCogQuestDefeat % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsCogQuestDefeat % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumCogs(): return getFinishToonTaskSCStrings(toNpcId) @@ -682,34 +434,33 @@ def getSCStrings(self, toNpcId, progress): else: text = TTLocalizer.QuestsCogQuestSCStringP cogLoc = self.getLocationName() - return (text % {"cogName" : cogName, "cogLoc" : cogLoc}) - + return text % {'cogName': cogName, 'cogLoc': cogLoc} + def getHeadlineString(self): return TTLocalizer.QuestsCogQuestHeadline + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. questCogType = self.getCogType() - return ( - ((questCogType is Any) or (questCogType is cogDict['type'])) and - (avId in cogDict['activeToons']) and - self.isLocationMatch(zoneId)) + return (questCogType is Any or questCogType is cogDict['type']) and avId in cogDict['activeToons'] and self.isLocationMatch(zoneId) class CogNewbieQuest(CogQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) if self.__class__ == CogNewbieQuest: self.checkNumCogs(self.quest[1]) self.checkCogType(self.quest[2]) self.checkNewbieLevel(self.quest[3]) + def getNewbieLevel(self): return self.quest[3] + def getString(self): return NewbieQuest.getString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. if CogQuest.doesCogCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: @@ -717,46 +468,44 @@ def doesCogCount(self, avId, cogDict, zoneId, avList): class CogTrackQuest(CogQuest): + __module__ = __name__ trackCodes = ['c', 'l', 'm', 's'] - trackNamesS = [TTLocalizer.BossbotS, TTLocalizer.LawbotS, - TTLocalizer.CashbotS, TTLocalizer.SellbotS] - trackNamesP = [TTLocalizer.BossbotP, TTLocalizer.LawbotP, - TTLocalizer.CashbotP, TTLocalizer.SellbotP] + trackNamesS = [TTLocalizer.BossbotS, TTLocalizer.LawbotS, TTLocalizer.CashbotS, TTLocalizer.SellbotS] + trackNamesP = [ + TTLocalizer.BossbotP, TTLocalizer.LawbotP, TTLocalizer.CashbotP, TTLocalizer.SellbotP] + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) if self.__class__ == CogTrackQuest: self.checkNumCogs(self.quest[1]) self.checkCogTrack(self.quest[2]) + def getCogTrack(self): return self.quest[2] + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumCogs() == 1: + return '' else: - if self.getNumCogs() == 1: - return "" - else: - return (TTLocalizer.QuestsCogTrackQuestProgress % - {"progress" : questDesc[4], "numCogs" : self.getNumCogs()}) + return TTLocalizer.QuestsCogTrackQuestProgress % {'progress': questDesc[4], 'numCogs': self.getNumCogs()} + def getObjectiveStrings(self): - # Defeat 3 Corporate Cogs numCogs = self.getNumCogs() - # Get the cog track name track = self.trackCodes.index(self.getCogTrack()) if numCogs == 1: text = self.trackNamesS[track] else: - text = TTLocalizer.QuestsCogTrackDefeatDesc % {"numCogs" : numCogs, - "trackName" : self.trackNamesP[track]} + text = TTLocalizer.QuestsCogTrackDefeatDesc % {'numCogs': numCogs, 'trackName': self.trackNamesP[track]} return (text,) - + def getString(self): - # Return the full string - return (TTLocalizer.QuestsCogTrackQuestDefeat % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsCogTrackQuestDefeat % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumCogs(): return getFinishToonTaskSCStrings(toNpcId) - numCogs = self.getNumCogs() track = self.trackCodes.index(self.getCogTrack()) if numCogs == 1: @@ -766,40 +515,39 @@ def getSCStrings(self, toNpcId, progress): cogText = self.trackNamesP[track] text = TTLocalizer.QuestsCogTrackQuestSCStringP cogLocName = self.getLocationName() - return (text % {"cogText" : cogText, "cogLoc" : cogLocName}) + return text % {'cogText': cogText, 'cogLoc': cogLocName} + def getHeadlineString(self): return TTLocalizer.QuestsCogTrackQuestHeadline + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. questCogTrack = self.getCogTrack() - return ( - (questCogTrack == cogDict['track']) and - (avId in cogDict['activeToons']) and - self.isLocationMatch(zoneId)) + return questCogTrack == cogDict['track'] and avId in cogDict['activeToons'] and self.isLocationMatch(zoneId) class CogLevelQuest(CogQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumCogs(self.quest[1]) self.checkCogLevel(self.quest[2]) + def getCogType(self): return Any + def getCogLevel(self): return self.quest[2] + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumCogs() == 1: + return '' else: - if self.getNumCogs() == 1: - return "" - else: - return (TTLocalizer.QuestsCogLevelQuestProgress % - {"progress" : questDesc[4], "numCogs" : self.getNumCogs()}) + return TTLocalizer.QuestsCogLevelQuestProgress % {'progress': questDesc[4], 'numCogs': self.getNumCogs()} + def getObjectiveStrings(self): - # Defeat 3 Level 2+ Cogs count = self.getNumCogs() level = self.getCogLevel() name = self.getCogNameString() @@ -807,18 +555,14 @@ def getObjectiveStrings(self): text = TTLocalizer.QuestsCogLevelQuestDesc else: text = TTLocalizer.QuestsCogLevelQuestDescC - - return (text % { "count" : count, - "level" : level, - "name" : name,}, ) + return (text % {'count': count, 'level': level, 'name': name},) def getString(self): - # Return the full string - return (TTLocalizer.QuestsCogLevelQuestDefeat % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsCogLevelQuestDefeat % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumCogs(): return getFinishToonTaskSCStrings(toNpcId) - count = self.getNumCogs() level = self.getCogLevel() name = self.getCogNameString() @@ -826,165 +570,140 @@ def getSCStrings(self, toNpcId, progress): text = TTLocalizer.QuestsCogLevelQuestDesc else: text = TTLocalizer.QuestsCogLevelQuestDescI - - objective = text % { "level" : level, "name" : name } + objective = text % {'level': level, 'name': name} location = self.getLocationName() - return (TTLocalizer.QuestsCogLevelQuestSCString % \ - { "objective" : objective, - "location" : location} ) - + return TTLocalizer.QuestsCogLevelQuestSCString % {'objective': objective, 'location': location} + def getHeadlineString(self): return TTLocalizer.QuestsCogLevelQuestHeadline + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. questCogLevel = self.getCogLevel() - # Go ahead and count cogs that are higher level too - return ((questCogLevel <= cogDict['level']) and - (avId in cogDict['activeToons']) and - self.isLocationMatch(zoneId) - ) + return questCogLevel <= cogDict['level'] and avId in cogDict['activeToons'] and self.isLocationMatch(zoneId) class SkelecogQBase: - # mixin/policy class for skelecog quests + __module__ = __name__ + def getCogNameString(self): numCogs = self.getNumCogs() if numCogs == 1: return TTLocalizer.ASkeleton else: return TTLocalizer.SkeletonP + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return (cogDict['isSkelecog'] and - (avId in cogDict['activeToons']) and - self.isLocationMatch(zoneId)) - + return cogDict['isSkelecog'] and avId in cogDict['activeToons'] and self.isLocationMatch(zoneId) + + class SkelecogQuest(CogQuest, SkelecogQBase): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumSkelecogs(self.quest[1]) + def getCogType(self): return Any + def getCogNameString(self): return SkelecogQBase.getCogNameString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return SkelecogQBase.doesCogCount(self, avId, - cogDict, zoneId, avList) + return SkelecogQBase.doesCogCount(self, avId, cogDict, zoneId, avList) + class SkelecogNewbieQuest(SkelecogQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): SkelecogQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. if SkelecogQuest.doesCogCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: return 0 + class SkelecogTrackQuest(CogTrackQuest, SkelecogQBase): - trackNamesS = [TTLocalizer.BossbotSkelS, TTLocalizer.LawbotSkelS, - TTLocalizer.CashbotSkelS, TTLocalizer.SellbotSkelS] - trackNamesP = [TTLocalizer.BossbotSkelP, TTLocalizer.LawbotSkelP, - TTLocalizer.CashbotSkelP, TTLocalizer.SellbotSkelP] + __module__ = __name__ + trackNamesS = [TTLocalizer.BossbotSkelS, TTLocalizer.LawbotSkelS, TTLocalizer.CashbotSkelS, TTLocalizer.SellbotSkelS] + trackNamesP = [ + TTLocalizer.BossbotSkelP, TTLocalizer.LawbotSkelP, TTLocalizer.CashbotSkelP, TTLocalizer.SellbotSkelP] + def __init__(self, id, quest): CogTrackQuest.__init__(self, id, quest) self.checkNumSkelecogs(self.quest[1]) self.checkSkelecogTrack(self.quest[2]) + def getCogNameString(self): return SkelecogQBase.getCogNameString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return (SkelecogQBase.doesCogCount(self, avId, - cogDict, zoneId, avList) and - self.getCogTrack() == cogDict['track']) + return SkelecogQBase.doesCogCount(self, avId, cogDict, zoneId, avList) and self.getCogTrack() == cogDict['track'] + class SkelecogLevelQuest(CogLevelQuest, SkelecogQBase): + __module__ = __name__ + def __init__(self, id, quest): CogLevelQuest.__init__(self, id, quest) self.checkNumSkelecogs(self.quest[1]) self.checkSkelecogLevel(self.quest[2]) + def getCogType(self): return Any + def getCogNameString(self): return SkelecogQBase.getCogNameString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return (SkelecogQBase.doesCogCount(self, avId, - cogDict, zoneId, avList) and - self.getCogLevel() <= cogDict['level']) - -class SkeleReviveQBase: - # mixin/policy class for skelecog w/revives quests - def getCogNameString(self): - numCogs = self.getNumCogs() - if numCogs == 1: - return TTLocalizer.Av2Cog - else: - return TTLocalizer.v2CogP - def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return (cogDict['hasRevives'] and - (avId in cogDict['activeToons']) and - self.isLocationMatch(zoneId)) - -class SkeleReviveQuest(CogQuest, SkeleReviveQBase): - def __init__(self, id, quest): - CogQuest.__init__(self, id, quest) - self.checkNumSkeleRevives(self.quest[1]) - def getCogType(self): - return Any - def getCogNameString(self): - return SkeleReviveQBase.getCogNameString(self) - def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does not. - return SkeleReviveQBase.doesCogCount(self, avId, - cogDict, zoneId, avList) + return SkelecogQBase.doesCogCount(self, avId, cogDict, zoneId, avList) and self.getCogLevel() <= cogDict['level'] + class ForemanQuest(CogQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumForemen(self.quest[1]) + def getCogType(self): return Any + def getCogNameString(self): numCogs = self.getNumCogs() if numCogs == 1: return TTLocalizer.AForeman else: return TTLocalizer.ForemanP + def doesCogCount(self, avId, cogDict, zoneId, avList): - # bool forces 0 or 1 (there's code that pays attention to the - # numeric value returned to determine how much progress was made) - return bool(CogQuest.doesCogCount(self, avId, - cogDict, zoneId, avList) and - cogDict['isForeman']) + return bool(CogQuest.doesCogCount(self, avId, cogDict, zoneId, avList) and cogDict['isForeman']) + class ForemanNewbieQuest(ForemanQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): ForemanQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # bool forces 0 or 1 (there's code that pays attention to the - # numeric value returned to determine how much progress was made) if ForemanQuest.doesCogCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: @@ -992,35 +711,43 @@ def doesCogCount(self, avId, cogDict, zoneId, avList): class VPQuest(CogQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumVPs(self.quest[1]) + def getCogType(self): return Any + def getCogNameString(self): numCogs = self.getNumCogs() if numCogs == 1: return TTLocalizer.ACogVP else: return TTLocalizer.CogVPs + def doesCogCount(self, avId, cogDict, zoneId, avList): return 0 + def doesVPCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog VP death (as defined by the - # cogDict) applies towards this quest, or false if it does not. return self.isLocationMatch(zoneId) + class VPNewbieQuest(VPQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): VPQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def doesVPCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog VP death (as defined by the - # cogDict) applies towards this quest, or false if it does not. if VPQuest.doesVPCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: @@ -1028,35 +755,40 @@ def doesVPCount(self, avId, cogDict, zoneId, avList): class SupervisorQuest(CogQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumSupervisors(self.quest[1]) + def getCogType(self): return Any + def getCogNameString(self): numCogs = self.getNumCogs() if numCogs == 1: return TTLocalizer.ASupervisor else: return TTLocalizer.SupervisorP + def doesCogCount(self, avId, cogDict, zoneId, avList): - # bool forces 0 or 1 (there's code that pays attention to the - # numeric value returned to determine how much progress was made) - return bool(CogQuest.doesCogCount(self, avId, - cogDict, zoneId, avList) and - cogDict['isSupervisor']) + return bool(CogQuest.doesCogCount(self, avId, cogDict, zoneId, avList) and cogDict['isSupervisor']) + class SupervisorNewbieQuest(SupervisorQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): SupervisorQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def doesCogCount(self, avId, cogDict, zoneId, avList): - # bool forces 0 or 1 (there's code that pays attention to the - # numeric value returned to determine how much progress was made) if SupervisorQuest.doesCogCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: @@ -1064,35 +796,43 @@ def doesCogCount(self, avId, cogDict, zoneId, avList): class CFOQuest(CogQuest): + __module__ = __name__ + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumCFOs(self.quest[1]) + def getCogType(self): return Any + def getCogNameString(self): numCogs = self.getNumCogs() if numCogs == 1: return TTLocalizer.ACogCFO else: return TTLocalizer.CogCFOs + def doesCogCount(self, avId, cogDict, zoneId, avList): return 0 + def doesCFOCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog CFO death (as defined by the - # cogDict) applies towards this quest, or false if it does not. return self.isLocationMatch(zoneId) + class CFONewbieQuest(CFOQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): CFOQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def doesCFOCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog CFO death (as defined by the - # cogDict) applies towards this quest, or false if it does not. if CFOQuest.doesCFOCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: @@ -1100,32 +840,34 @@ def doesCFOCount(self, avId, cogDict, zoneId, avList): class RescueQuest(VPQuest): - """Every time you beat a VP, you rescue an SOS toon.""" + __module__ = __name__ + def __init__(self, id, quest): VPQuest.__init__(self, id, quest) + def getNumToons(self): return self.getNumCogs() + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumToons() == 1: + return '' else: - if self.getNumToons() == 1: - return "" - else: - return (TTLocalizer.QuestsRescueQuestProgress % - {"progress" : questDesc[4], - "numToons" : self.getNumToons()}) + return TTLocalizer.QuestsRescueQuestProgress % {'progress': questDesc[4], 'numToons': self.getNumToons()} + def getObjectiveStrings(self): - # a Toon, 3 Toons numToons = self.getNumCogs() if numToons == 1: text = TTLocalizer.QuestsRescueQuestToonS else: - text = TTLocalizer.QuestsRescueQuestRescueDesc % {"numToons" : numToons} - return (text,) + text = TTLocalizer.QuestsRescueQuestRescueDesc % {'numToons': numToons} + return ( + text,) + def getString(self): - # Return the full string - return (TTLocalizer.QuestsRescueQuestRescue % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsRescueQuestRescue % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumToons(): return getFinishToonTaskSCStrings(toNpcId) @@ -1135,186 +877,177 @@ def getSCStrings(self, toNpcId, progress): else: text = TTLocalizer.QuestsRescueQuestSCStringP toonLoc = self.getLocationName() - return (text % {"toonLoc" : toonLoc}) + return text % {'toonLoc': toonLoc} def getHeadlineString(self): return TTLocalizer.QuestsRescueQuestHeadline + class RescueNewbieQuest(RescueQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): RescueQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): - return NewbieQuest.getString( - self, - newStr=TTLocalizer.QuestsRescueNewNewbieQuestObjective, - oldStr=TTLocalizer.QuestsRescueOldNewbieQuestObjective) + return NewbieQuest.getString(self, newStr=TTLocalizer.QuestsRescueNewNewbieQuestObjective, oldStr=TTLocalizer.QuestsRescueOldNewbieQuestObjective) + def doesVPCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog VP death (as defined by the - # cogDict) applies towards this quest, or false if it does not. if RescueQuest.doesVPCount(self, avId, cogDict, zoneId, avList): return self.getNumNewbies(avId, avList) else: return 0 -# TODO: is there any reason for this to be a CogQuest (and not simply a -# LocationBasedQuest)? class BuildingQuest(CogQuest): + __module__ = __name__ trackCodes = ['c', 'l', 'm', 's'] - trackNames = [TTLocalizer.Bossbot, TTLocalizer.Lawbot, - TTLocalizer.Cashbot, TTLocalizer.Sellbot] + trackNames = [TTLocalizer.Bossbot, TTLocalizer.Lawbot, TTLocalizer.Cashbot, TTLocalizer.Sellbot] + def __init__(self, id, quest): CogQuest.__init__(self, id, quest) self.checkNumBuildings(self.quest[1]) self.checkBuildingTrack(self.quest[2]) self.checkBuildingFloors(self.quest[3]) + def getNumFloors(self): return self.quest[3] + def getBuildingTrack(self): return self.quest[2] + def getNumQuestItems(self): return self.getNumBuildings() + def getNumBuildings(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumBuildings()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumBuildings() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumBuildings() == 1: + return '' else: - if self.getNumBuildings() == 1: - return "" - else: - return (TTLocalizer.QuestsBuildingQuestProgressString % - {"progress" : questDesc[4], - "num" : self.getNumBuildings(), - }) + return TTLocalizer.QuestsBuildingQuestProgressString % {'progress': questDesc[4], 'num': self.getNumBuildings()} + def getObjectiveStrings(self): count = self.getNumBuildings() - floors = TTLocalizer.QuestsBuildingQuestFloorNumbers[self.getNumFloors() - 1] + floors = TTLocalizer.QuestsBuildingQuestFloorNumbers[(self.getNumFloors() - 1)] buildingTrack = self.getBuildingTrack() if buildingTrack == Any: type = TTLocalizer.Cog else: type = self.trackNames[self.trackCodes.index(buildingTrack)] - if count == 1: if floors == '': text = TTLocalizer.QuestsBuildingQuestDesc else: text = TTLocalizer.QuestsBuildingQuestDescF + elif floors == '': + text = TTLocalizer.QuestsBuildingQuestDescC else: - if floors == '': - text = TTLocalizer.QuestsBuildingQuestDescC - else: - text = TTLocalizer.QuestsBuildingQuestDescCF + text = TTLocalizer.QuestsBuildingQuestDescCF + return (text % {'count': count, 'floors': floors, 'type': type},) - return (text % { "count" : count, - "floors" : floors, - "type" : type },) - def getString(self): - # Return the full string - return (TTLocalizer.QuestsBuildingQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsBuildingQuestString % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumBuildings(): return getFinishToonTaskSCStrings(toNpcId) - count = self.getNumBuildings() - floors = TTLocalizer.QuestsBuildingQuestFloorNumbers[self.getNumFloors() - 1] + floors = TTLocalizer.QuestsBuildingQuestFloorNumbers[(self.getNumFloors() - 1)] buildingTrack = self.getBuildingTrack() if buildingTrack == Any: type = TTLocalizer.Cog else: type = self.trackNames[self.trackCodes.index(buildingTrack)] - if count == 1: if floors == '': text = TTLocalizer.QuestsBuildingQuestDesc else: text = TTLocalizer.QuestsBuildingQuestDescF + elif floors == '': + text = TTLocalizer.QuestsBuildingQuestDescI else: - if floors == '': - text = TTLocalizer.QuestsBuildingQuestDescI - else: - text = TTLocalizer.QuestsBuildingQuestDescIF - - objective = text % { "floors" : floors, - "type" : type } + text = TTLocalizer.QuestsBuildingQuestDescIF + objective = text % {'floors': floors, 'type': type} location = self.getLocationName() - - return TTLocalizer.QuestsBuildingQuestSCString % \ - { "objective" : objective, - "location" : location } + return TTLocalizer.QuestsBuildingQuestSCString % {'objective': objective, 'location': location} def getHeadlineString(self): return TTLocalizer.QuestsBuildingQuestHeadline + def doesCogCount(self, avId, cogDict, zoneId, avList): - # Returns true if the indicated cog death (as defined by the - # cogDict) applies towards this quest, or false if it does - # not. - # For non-Cog quests this is always false. return 0 + def doesBuildingCount(self, avId, avList): - # For non-newbie quests, building always counts return 1 class BuildingNewbieQuest(BuildingQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): BuildingQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[4]) + def getNewbieLevel(self): return self.quest[4] + def getString(self): return NewbieQuest.getString(self) + def getHeadlineString(self): return TTLocalizer.QuestsNewbieQuestHeadline + def doesBuildingCount(self, avId, avList): - return self.getNumNewbies(avId, avList) + return self.getNumNewbies(avId, avList) class FactoryQuest(LocationBasedQuest): - factoryTypeNames = { - FT_FullSuit : TTLocalizer.Cog, - FT_Leg : TTLocalizer.FactoryTypeLeg, - FT_Arm : TTLocalizer.FactoryTypeArm, - FT_Torso : TTLocalizer.FactoryTypeTorso, - } + __module__ = __name__ + factoryTypeNames = {FT_FullSuit: TTLocalizer.Cog, FT_Leg: TTLocalizer.FactoryTypeLeg, FT_Arm: TTLocalizer.FactoryTypeArm, FT_Torso: TTLocalizer.FactoryTypeTorso} + def __init__(self, id, quest): LocationBasedQuest.__init__(self, id, quest) self.checkNumFactories(self.quest[1]) + def getNumQuestItems(self): return self.getNumFactories() + def getNumFactories(self): return self.quest[1] + def getFactoryType(self): loc = self.getLocation() type = Any - # is it a specific factory? if loc in ToontownGlobals.factoryId2factoryType: type = ToontownGlobals.factoryId2factoryType[loc] return type + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumFactories()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumFactories() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumFactories() == 1: + return '' else: - if self.getNumFactories() == 1: - return "" - else: - return (TTLocalizer.QuestsFactoryQuestProgressString % - {"progress" : questDesc[4], - "num" : self.getNumFactories(), - }) + return TTLocalizer.QuestsFactoryQuestProgressString % {'progress': questDesc[4], 'num': self.getNumFactories()} + def getObjectiveStrings(self): count = self.getNumFactories() factoryType = self.getFactoryType() @@ -1322,40 +1055,31 @@ def getObjectiveStrings(self): type = TTLocalizer.Cog else: type = FactoryQuest.factoryTypeNames[factoryType] - if count == 1: text = TTLocalizer.QuestsFactoryQuestDesc else: text = TTLocalizer.QuestsFactoryQuestDescC + return (text % {'count': count, 'type': type},) - return (text % { "count" : count, - "type" : type },) - def getString(self): - # Return the full string - return (TTLocalizer.QuestsFactoryQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsFactoryQuestString % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumFactories(): return getFinishToonTaskSCStrings(toNpcId) - factoryType = self.getFactoryType() if factoryType == Any: type = TTLocalizer.Cog else: type = FactoryQuest.factoryTypeNames[factoryType] - count = self.getNumFactories() if count == 1: text = TTLocalizer.QuestsFactoryQuestDesc else: text = TTLocalizer.QuestsFactoryQuestDescI - - objective = text % { "type" : type } + objective = text % {'type': type} location = self.getLocationName() - - return TTLocalizer.QuestsFactoryQuestSCString % \ - { "objective" : objective, - "location" : location } + return TTLocalizer.QuestsFactoryQuestSCString % {'objective': objective, 'location': location} def getHeadlineString(self): return TTLocalizer.QuestsFactoryQuestHeadline @@ -1365,71 +1089,76 @@ def doesFactoryCount(self, avId, location, avList): class FactoryNewbieQuest(FactoryQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): FactoryQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def getHeadlineString(self): return TTLocalizer.QuestsNewbieQuestHeadline + def doesFactoryCount(self, avId, location, avList): if FactoryQuest.doesFactoryCount(self, avId, location, avList): return self.getNumNewbies(avId, avList) else: - return num + return num class MintQuest(LocationBasedQuest): + __module__ = __name__ + def __init__(self, id, quest): LocationBasedQuest.__init__(self, id, quest) self.checkNumMints(self.quest[1]) + def getNumQuestItems(self): return self.getNumMints() + def getNumMints(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumMints()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumMints() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumMints() == 1: + return '' else: - if self.getNumMints() == 1: - return "" - else: - return (TTLocalizer.QuestsMintQuestProgressString % - {"progress" : questDesc[4], - "num" : self.getNumMints(), - }) + return TTLocalizer.QuestsMintQuestProgressString % {'progress': questDesc[4], 'num': self.getNumMints()} + def getObjectiveStrings(self): count = self.getNumMints() if count == 1: text = TTLocalizer.QuestsMintQuestDesc else: - text = TTLocalizer.QuestsMintQuestDescC % {"count" : count} - return (text,) - + text = TTLocalizer.QuestsMintQuestDescC % {'count': count} + return ( + text,) + def getString(self): - # Return the full string - return (TTLocalizer.QuestsMintQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsMintQuestString % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumMints(): return getFinishToonTaskSCStrings(toNpcId) - count = self.getNumMints() if count == 1: objective = TTLocalizer.QuestsMintQuestDesc else: objective = TTLocalizer.QuestsMintQuestDescI - location = self.getLocationName() - - return TTLocalizer.QuestsMintQuestSCString % \ - { "objective" : objective, - "location" : location } + return TTLocalizer.QuestsMintQuestSCString % {'objective': objective, 'location': location} def getHeadlineString(self): return TTLocalizer.QuestsMintQuestHeadline @@ -1439,77 +1168,76 @@ def doesMintCount(self, avId, location, avList): class MintNewbieQuest(MintQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): MintQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): return NewbieQuest.getString(self) + def getHeadlineString(self): return TTLocalizer.QuestsNewbieQuestHeadline + def doesMintCount(self, avId, location, avList): if MintQuest.doesMintCount(self, avId, location, avList): return self.getNumNewbies(avId, avList) else: - return num + return num -# recover a cog-suit part from a factory (for your own Cog suit) -# NOTE: this quest has some issues; what happens if you have a full cog suit -# already? class CogPartQuest(LocationBasedQuest): + __module__ = __name__ + def __init__(self, id, quest): LocationBasedQuest.__init__(self, id, quest) self.checkNumCogParts(self.quest[1]) + def getNumQuestItems(self): return self.getNumParts() + def getNumParts(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumParts()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumParts() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumParts() == 1: + return '' else: - if self.getNumParts() == 1: - return "" - else: - return (TTLocalizer.QuestsCogPartQuestProgressString % - {"progress" : questDesc[4], - "num" : self.getNumParts(), - }) + return TTLocalizer.QuestsCogPartQuestProgressString % {'progress': questDesc[4], 'num': self.getNumParts()} + def getObjectiveStrings(self): count = self.getNumParts() - if count == 1: text = TTLocalizer.QuestsCogPartQuestDesc else: text = TTLocalizer.QuestsCogPartQuestDescC + return (text % {'count': count},) - return (text % { "count" : count },) - def getString(self): - # Return the full string - return (TTLocalizer.QuestsCogPartQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsCogPartQuestString % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumParts(): return getFinishToonTaskSCStrings(toNpcId) - count = self.getNumParts() if count == 1: text = TTLocalizer.QuestsCogPartQuestDesc else: text = TTLocalizer.QuestsCogPartQuestDescI - objective = text location = self.getLocationName() - - return TTLocalizer.QuestsCogPartQuestSCString % \ - { "objective" : objective, - "location" : location } + return TTLocalizer.QuestsCogPartQuestSCString % {'objective': objective, 'location': location} def getHeadlineString(self): return TTLocalizer.QuestsCogPartQuestHeadline @@ -1518,97 +1246,87 @@ def doesCogPartCount(self, avId, location, avList): return self.isLocationMatch(location) -# NOTE: this quest has some issues; what happens if you have a full cog suit -# already? And it currently is more like 'get a cog part and bring a newbie -# along', vs. 'help a new cog recover a cog part'. class CogPartNewbieQuest(CogPartQuest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): CogPartQuest.__init__(self, id, quest) self.checkNewbieLevel(self.quest[2]) + def getNewbieLevel(self): return self.quest[2] + def getString(self): - return NewbieQuest.getString( - self, - newStr=TTLocalizer.QuestsCogPartNewNewbieQuestObjective, - oldStr=TTLocalizer.QuestsCogPartOldNewbieQuestObjective) + return NewbieQuest.getString(self, newStr=TTLocalizer.QuestsCogPartNewNewbieQuestObjective, oldStr=TTLocalizer.QuestsCogPartOldNewbieQuestObjective) + def getHeadlineString(self): return TTLocalizer.QuestsNewbieQuestHeadline + def doesCogPartCount(self, avId, location, avList): if CogPartQuest.doesCogPartCount(self, avId, location, avList): return self.getNumNewbies(avId, avList) else: - return num + return num class DeliverGagQuest(Quest): + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) self.checkNumGags(self.quest[0]) self.checkGagTrack(self.quest[1]) self.checkGagItem(self.quest[2]) + def getGagType(self): return (self.quest[1], self.quest[2]) + def getNumQuestItems(self): return self.getNumGags() + def getNumGags(self): return self.quest[0] + def getCompletionStatus(self, av, questDesc, npc=None): - # Make sure this is the toon we are supposed to deliver to - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc gag = self.getGagType() num = self.getNumGags() track = gag[0] level = gag[1] - # Check to see if avatar has this gag and if we passed in an npc at all - # In a sense, this quest is not complete until we are at the npc, so - # throw that in as a conditional - # NOTE: distributed toons inventory will be None because it is not - # a broadcast field. In a battle play movie, we first need to check - # if the inventory is not None - questComplete = (npc and - av.inventory and - (av.inventory.numItem(track, level) >= num)) + questComplete = npc and av.inventory and av.inventory.numItem(track, level) >= num return getCompleteStatusWithNpc(questComplete, toNpcId, npc) def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumGags() == 1: + return '' else: - if self.getNumGags() == 1: - # Return empty string to be consistent with DeliverItemQuest - return "" - else: - return (TTLocalizer.QuestsDeliverGagQuestProgress % - {"progress" : questDesc[4], - "numGags" : self.getNumGags(), - }) + return TTLocalizer.QuestsDeliverGagQuestProgress % {'progress': questDesc[4], 'numGags': self.getNumGags()} + def getObjectiveStrings(self): - # Deliver 3 Cream Pies - track, item = self.getGagType() + (track, item) = self.getGagType() num = self.getNumGags() if num == 1: text = ToontownBattleGlobals.AvPropStringsSingular[track][item] else: gagName = ToontownBattleGlobals.AvPropStringsPlural[track][item] - text = TTLocalizer.QuestsItemNameAndNum % {"num" : TTLocalizer.getLocalNum(num), - "name" : gagName} + text = TTLocalizer.QuestsItemNameAndNum % {'num': TTLocalizer.getLocalNum(num), 'name': gagName} return (text,) def getString(self): - # Return the full string - return (TTLocalizer.QuestsDeliverGagQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsDeliverGagQuestString % self.getObjectiveStrings()[0] + def getRewardString(self, progress): - return (TTLocalizer.QuestsDeliverGagQuestStringLong % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsDeliverGagQuestStringLong % self.getObjectiveStrings()[0] + def getDefaultQuestDialog(self): - return ((TTLocalizer.QuestsDeliverGagQuestStringLong % self.getObjectiveStrings()[0]) + - "\a" + TTLocalizer.QuestsDeliverGagQuestInstructions) + return TTLocalizer.QuestsDeliverGagQuestStringLong % self.getObjectiveStrings()[0] + '\x07' + TTLocalizer.QuestsDeliverGagQuestInstructions + def getSCStrings(self, toNpcId, progress): if progress >= self.getNumGags(): return getFinishToonTaskSCStrings(toNpcId) - - # Deliver 3 Cream Pies - track, item = self.getGagType() + (track, item) = self.getGagType() num = self.getNumGags() if num == 1: text = TTLocalizer.QuestsDeliverGagQuestToSCStringS @@ -1616,94 +1334,99 @@ def getSCStrings(self, toNpcId, progress): else: text = TTLocalizer.QuestsDeliverGagQuestToSCStringP gagName = ToontownBattleGlobals.AvPropStringsPlural[track][item] - return [(text % { "gagName" : gagName, - }), - TTLocalizer.QuestsDeliverGagQuestSCString, - ] + getVisitSCStrings(toNpcId) + return [ + text % {'gagName': gagName}, TTLocalizer.QuestsDeliverGagQuestSCString] + getVisitSCStrings(toNpcId) + def getHeadlineString(self): return TTLocalizer.QuestsDeliverGagQuestHeadline + class DeliverItemQuest(Quest): + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) self.checkDeliveryItem(self.quest[0]) + def getItem(self): return self.quest[0] + def getCompletionStatus(self, av, questDesc, npc=None): - # Make sure this is the toon we are supposed to deliver to - # Check to see if this is the correct NPC - # You by definition have the item - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - # If you passed in an npc and it matches, quest is complete - # otherwise it is incomplete because it is wrong NPC - if (npc and npcMatches(toNpcId, npc)): + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + if npc and npcMatches(toNpcId, npc): return COMPLETE else: return INCOMPLETE_WRONG_NPC def getProgressString(self, avatar, questDesc): - # I think empty string looks best here return TTLocalizer.QuestsDeliverItemQuestProgress + def getObjectiveStrings(self): - # Deliver Hat iDict = ItemDict[self.getItem()] article = iDict[2] itemName = iDict[0] - return ([article + itemName]) + return [article + itemName] + def getString(self): - # Return the full string - return (TTLocalizer.QuestsDeliverItemQuestString % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsDeliverItemQuestString % self.getObjectiveStrings()[0] + def getRewardString(self, progress): - return (TTLocalizer.QuestsDeliverItemQuestStringLong % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsDeliverItemQuestStringLong % self.getObjectiveStrings()[0] + def getDefaultQuestDialog(self): - return (TTLocalizer.QuestsDeliverItemQuestStringLong % self.getObjectiveStrings()[0]) + return TTLocalizer.QuestsDeliverItemQuestStringLong % self.getObjectiveStrings()[0] + def getSCStrings(self, toNpcId, progress): iDict = ItemDict[self.getItem()] article = iDict[2] itemName = iDict[0] - return [TTLocalizer.QuestsDeliverItemQuestSCString % - {"article" : article, - "itemName" : itemName, - }, - ] + getVisitSCStrings(toNpcId) + return [TTLocalizer.QuestsDeliverItemQuestSCString % {'article': article, 'itemName': itemName}] + getVisitSCStrings(toNpcId) + def getHeadlineString(self): return TTLocalizer.QuestsDeliverItemQuestHeadline + class VisitQuest(Quest): + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - if (npc and npcMatches(toNpcId, npc)): + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + if npc and npcMatches(toNpcId, npc): return COMPLETE else: return INCOMPLETE_WRONG_NPC + def getProgressString(self, avatar, questDesc): - # I think empty string looks best here return TTLocalizer.QuestsVisitQuestProgress + def getObjectiveStrings(self): - return [""] + return [''] + def getString(self): - # Return the full string return TTLocalizer.QuestsVisitQuestStringShort + def getChooseString(self): return TTLocalizer.QuestsVisitQuestStringLong + def getRewardString(self, progress): return TTLocalizer.QuestsVisitQuestStringLong + def getDefaultQuestDialog(self): return random.choice(DefaultVisitQuestDialog) + def getSCStrings(self, toNpcId, progress): return getVisitSCStrings(toNpcId) + def getHeadlineString(self): return TTLocalizer.QuestsVisitQuestHeadline + class RecoverItemQuest(LocationBasedQuest): - # Recovered items need: - # number of items - # item ID - # percent chance of finding item in each battle - # cog type - # flag for holder type if it's cog (type, track, or level) + __module__ = __name__ + def __init__(self, id, quest): LocationBasedQuest.__init__(self, id, quest) self.checkNumItems(self.quest[1]) @@ -1713,168 +1436,92 @@ def __init__(self, id, quest): self.checkRecoveryItemHolderAndType(self.quest[4], self.quest[5]) else: self.checkRecoveryItemHolderAndType(self.quest[4]) - - def testRecover(self, progress): - test = random.random() * 100 - chance = self.getPercentChance() - #chance = 10 - numberDone = progress & (pow(2,16) - 1) - numberNotDone = progress >> 16 - returnTest = None - - avgNum2Kill = 1.0 / (chance / 100.0) - - if numberNotDone >= (avgNum2Kill * 1.5): - chance = 100 - elif numberNotDone > (avgNum2Kill * 0.5): - diff = float(numberNotDone - (avgNum2Kill * 0.5)) - luck = 1.0 + abs(diff / (avgNum2Kill * 0.5)) - chance *= luck - - if test <= chance: - returnTest = 1 - numberNotDone = 0 - numberDone += 1 - #if numberDone == self.getNumItems(): - # numberDone = 1 - #print("got") - else: - returnTest = 0 - numberNotDone += 1 - numberDone += 0 - #print("not got") - - returnCount = numberNotDone << 16 - returnCount += numberDone - #import pdb; pdb.set_trace() - #print("Quest Done %s NotDone %s Value %s Chance %s" % (numberDone, numberNotDone, returnCount, chance)) - return returnTest, returnCount - - def testDone(self, progress): - numberDone = progress & (pow(2,16) - 1) - print("Quest number done %s" % (numberDone)) - if numberDone >= self.getNumItems(): - return 1 - else: - return 0 - + def getNumQuestItems(self): return self.getNumItems() + def getNumItems(self): return self.quest[1] + def getItem(self): return self.quest[2] + def getPercentChance(self): - # Percent chance that localToon will find this item - # each time he encounters the holder return self.quest[3] + def getHolder(self): - # The person or thing that is holding the item return self.quest[4] + def getHolderType(self): - # The holder type if holder is a Cog (type, track, or level) - # Defaults to 'type', which used to be the only option - if (len(self.quest) == 5): - return 'type' + if len(self.quest) == 5: + return 'type' else: return self.quest[5] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - # masking the failures - forwardProgress = toonProgress & (pow(2,16) - 1) - questComplete = (forwardProgress >= self.getNumItems()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumItems() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) - + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumItems() == 1: + return '' else: - if self.getNumItems() == 1: - # Return empty string like DeliverItemQuest - return "" - else: - progress = questDesc[4] & (pow(2,16) - 1) - return (TTLocalizer.QuestsRecoverItemQuestProgress % - {"progress" : progress,#questDesc[4], - "numItems" : self.getNumItems(), - }) + return TTLocalizer.QuestsRecoverItemQuestProgress % {'progress': questDesc[4], 'numItems': self.getNumItems()} + def getObjectiveStrings(self): - # Recover 3 keys from Cogs - # Recover 3 keys from Pencil Pusher - # TODO: Recover 3 keys from fishing hole holder = self.getHolder() holderType = self.getHolderType() if holder == Any: holderName = TTLocalizer.TheCogs elif holder == AnyFish: holderName = TTLocalizer.AFish - elif (holderType == 'type'): + elif holderType == 'type': holderName = SuitBattleGlobals.SuitAttributes[holder]['pluralname'] - elif (holderType == 'level'): - holderName = TTLocalizer.QuestsRecoverItemQuestHolderString % {'level':TTLocalizer.Level, 'holder':holder, 'cogs':TTLocalizer.Cogs} - elif (holderType == 'track'): - if (holder == 'c'): + elif holderType == 'level': + holderName = TTLocalizer.QuestsRecoverItemQuestHolderString % {'level': TTLocalizer.Level, 'holder': holder, 'cogs': TTLocalizer.Cogs} + elif holderType == 'track': + if holder == 'c': holderName = TTLocalizer.BossbotP - elif (holder == 's'): + elif holder == 's': holderName = TTLocalizer.SellbotP - elif (holder == 'm'): + elif holder == 'm': holderName = TTLocalizer.CashbotP - elif (holder == 'l'): + elif holder == 'l': holderName = TTLocalizer.LawbotP item = self.getItem() num = self.getNumItems() if num == 1: itemName = ItemDict[item][2] + ItemDict[item][0] else: - # plural - itemName = TTLocalizer.QuestsItemNameAndNum % { "num" : TTLocalizer.getLocalNum(num), - "name" : ItemDict[item][1] } - return ([itemName, holderName]) + itemName = TTLocalizer.QuestsItemNameAndNum % {'num': TTLocalizer.getLocalNum(num), 'name': ItemDict[item][1]} + return [itemName, holderName] + def getString(self): - return (TTLocalizer.QuestsRecoverItemQuestString % - {"item" : self.getObjectiveStrings()[0], - "holder" : self.getObjectiveStrings()[1], - }) + return TTLocalizer.QuestsRecoverItemQuestString % {'item': self.getObjectiveStrings()[0], 'holder': self.getObjectiveStrings()[1]} + def getSCStrings(self, toNpcId, progress): item = self.getItem() num = self.getNumItems() - - # masking the failures - forwardProgress = progress & (pow(2,16) - 1) - - if forwardProgress >= self.getNumItems(): + if progress >= self.getNumItems(): if num == 1: itemName = ItemDict[item][2] + ItemDict[item][0] else: - itemName = TTLocalizer.QuestsItemNameAndNum % { "num" : TTLocalizer.getLocalNum(num), - "name" : ItemDict[item][1] } - + itemName = TTLocalizer.QuestsItemNameAndNum % {'num': TTLocalizer.getLocalNum(num), 'name': ItemDict[item][1]} if toNpcId == ToonHQ: - strings = [TTLocalizer.QuestsRecoverItemQuestReturnToHQSCString % itemName, - TTLocalizer.QuestsRecoverItemQuestGoToHQSCString, - ] + strings = [ + TTLocalizer.QuestsRecoverItemQuestReturnToHQSCString % itemName, TTLocalizer.QuestsRecoverItemQuestGoToHQSCString] elif toNpcId: - npcName, hoodName, buildingArticle, buildingName, toStreet, streetName, isInPlayground = getNpcInfo(toNpcId) - strings = [TTLocalizer.QuestsRecoverItemQuestReturnToSCString % - {"item" : itemName, - "npcName" : npcName, - }, - ] + (npcName, hoodName, buildingArticle, buildingName, toStreet, streetName, isInPlayground) = getNpcInfo(toNpcId) + strings = [TTLocalizer.QuestsRecoverItemQuestReturnToSCString % {'item': itemName, 'npcName': npcName}] if isInPlayground: - strings.append(TTLocalizer.QuestsRecoverItemQuestGoToPlaygroundSCString % (hoodName)) + strings.append(TTLocalizer.QuestsRecoverItemQuestGoToPlaygroundSCString % hoodName) else: - strings.append(TTLocalizer.QuestsRecoverItemQuestGoToStreetSCString % - {"to": toStreet, - "street" : streetName, - "hood" : hoodName, - }) - strings.extend([ - TTLocalizer.QuestsRecoverItemQuestVisitBuildingSCString % (buildingArticle, buildingName), - TTLocalizer.QuestsRecoverItemQuestWhereIsBuildingSCString % (buildingArticle, buildingName), - ]) - + strings.append(TTLocalizer.QuestsRecoverItemQuestGoToStreetSCString % {'to': toStreet, 'street': streetName, 'hood': hoodName}) + strings.extend([TTLocalizer.QuestsRecoverItemQuestVisitBuildingSCString % (buildingArticle, buildingName), TTLocalizer.QuestsRecoverItemQuestWhereIsBuildingSCString % (buildingArticle, buildingName)]) return strings - holder = self.getHolder() holderType = self.getHolderType() locName = self.getLocationName() @@ -1882,2915 +1529,435 @@ def getSCStrings(self, toNpcId, progress): holderName = TTLocalizer.TheCogs elif holder == AnyFish: holderName = TTLocalizer.TheFish - elif (holderType == 'type'): + elif holderType == 'type': holderName = SuitBattleGlobals.SuitAttributes[holder]['pluralname'] - elif (holderType == 'level'): - holderName = TTLocalizer.QuestsRecoverItemQuestHolderString % {'level':TTLocalizer.Level, 'holder':holder, 'cogs':TTLocalizer.Cogs} - elif (holderType == 'track'): - if (holder == 'c'): + elif holderType == 'level': + holderName = TTLocalizer.QuestsRecoverItemQuestHolderString % {'level': TTLocalizer.Level, 'holder': holder, 'cogs': TTLocalizer.Cogs} + elif holderType == 'track': + if holder == 'c': holderName = TTLocalizer.BossbotP - elif (holder == 's'): + elif holder == 's': holderName = TTLocalizer.SellbotP - elif (holder == 'm'): + elif holder == 'm': holderName = TTLocalizer.CashbotP - elif (holder == 'l'): + elif holder == 'l': holderName = TTLocalizer.LawbotP if num == 1: itemName = ItemDict[item][2] + ItemDict[item][0] else: - # plural - itemName = TTLocalizer.QuestsItemNameAndNum % { "num" : TTLocalizer.getLocalNum(num), - "name" : ItemDict[item][1] } - - return (TTLocalizer.QuestsRecoverItemQuestRecoverFromSCString % - {"item" : itemName, - "holder" : holderName, - "loc" : locName, - }) + itemName = TTLocalizer.QuestsItemNameAndNum % {'num': TTLocalizer.getLocalNum(num), 'name': ItemDict[item][1]} + return TTLocalizer.QuestsRecoverItemQuestRecoverFromSCString % {'item': itemName, 'holder': holderName, 'loc': locName} + def getHeadlineString(self): return TTLocalizer.QuestsRecoverItemQuestHeadline + class TrackChoiceQuest(Quest): - # Note: these are a little complicated - # They popup an interface to choose or cancel, and have no reward + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) self.checkTrackChoice(self.quest[0]) self.checkTrackChoice(self.quest[1]) + def getChoices(self): - return self.quest[0], self.quest[1] + return (self.quest[0], self.quest[1]) + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - if (npc and npcMatches(toNpcId, npc)): + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + if npc and npcMatches(toNpcId, npc): return COMPLETE else: return INCOMPLETE_WRONG_NPC + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString else: return NotChosenString + def getObjectiveStrings(self): - trackA, trackB = self.getChoices() + (trackA, trackB) = self.getChoices() trackAName = ToontownBattleGlobals.Tracks[trackA].capitalize() trackBName = ToontownBattleGlobals.Tracks[trackB].capitalize() - return ([trackAName, trackBName]) + return [trackAName, trackBName] + def getString(self): - return (TTLocalizer.QuestsTrackChoiceQuestString % - {"trackA" : self.getObjectiveStrings()[0], - "trackB" : self.getObjectiveStrings()[1], - }) + return TTLocalizer.QuestsTrackChoiceQuestString % {'trackA': self.getObjectiveStrings()[0], 'trackB': self.getObjectiveStrings()[1]} + def getSCStrings(self, toNpcId, progress): - trackA, trackB = self.getChoices() + (trackA, trackB) = self.getChoices() trackAName = ToontownBattleGlobals.Tracks[trackA].capitalize() trackBName = ToontownBattleGlobals.Tracks[trackB].capitalize() - return [TTLocalizer.QuestsTrackChoiceQuestSCString % - {"trackA" : trackAName, - "trackB" : trackBName, - }, - TTLocalizer.QuestsTrackChoiceQuestMaybeSCString % trackAName, - TTLocalizer.QuestsTrackChoiceQuestMaybeSCString % trackBName, - ] + getVisitSCStrings(toNpcId) + return [TTLocalizer.QuestsTrackChoiceQuestSCString % {'trackA': trackAName, 'trackB': trackBName}, TTLocalizer.QuestsTrackChoiceQuestMaybeSCString % trackAName, TTLocalizer.QuestsTrackChoiceQuestMaybeSCString % trackBName] + getVisitSCStrings(toNpcId) + def getHeadlineString(self): return TTLocalizer.QuestsTrackChoiceQuestHeadline + class FriendQuest(Quest): + __module__ = __name__ def filterFunc(avatar): - # The filter func allows us to filter the quest types that we give - # out to an avatar based on some property of our choosing. This is used - # for instance to see if avatar has any friends before giving out the friend quest - # 1 means give the quest, 0 means do not - if (len(avatar.getFriendsList()) == 0): + if len(avatar.getFriendsList()) == 0: return 1 else: return 0 + filterFunc = staticmethod(filterFunc) - + def __init__(self, id, quest): Quest.__init__(self, id, quest) - # Friend quest progress is special. We do not dynamically update - # the progress because you may not be online when it changes - # (ie in a secret friend exchange) + def getCompletionStatus(self, av, questDesc, npc=None): - # See if your progress is changed, or better yet, check - # to see if you actually have friends - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = ((toonProgress >= 1) or (len(av.getFriendsList()) > 0)) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= 1 or len(av.getFriendsList()) > 0 return getCompleteStatusWithNpc(questComplete, toNpcId, npc) def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString else: - return "" + return '' + def getString(self): return TTLocalizer.QuestsFriendQuestString + def getSCStrings(self, toNpcId, progress): if progress: return getFinishToonTaskSCStrings(toNpcId) return TTLocalizer.QuestsFriendQuestSCString + def getHeadlineString(self): - return TTLocalizer.QuestsFriendQuestHeadline + return TTLocalizer.QuestsFriendQuestHeadline + def getObjectiveStrings(self): return [TTLocalizer.QuestsFriendQuestString] + def doesFriendCount(self, av, otherAv): return 1 + class FriendNewbieQuest(FriendQuest, NewbieQuest): + __module__ = __name__ + def filterFunc(avatar): - # Override the filter func from the parent class return 1 + filterFunc = staticmethod(filterFunc) def __init__(self, id, quest): FriendQuest.__init__(self, id, quest) self.checkNumFriends(self.quest[0]) self.checkNewbieLevel(self.quest[1]) + def getNumQuestItems(self): return self.getNumFriends() + def getNumFriends(self): return self.quest[0] + def getNewbieLevel(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= self.getNumFriends()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumFriends() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumFriends() == 1: + return '' else: - if self.getNumFriends() == 1: - return "" - else: - return (TTLocalizer.QuestsFriendNewbieQuestProgress % - {"progress" : questDesc[4], - "numFriends" : self.getNumFriends()}) + return TTLocalizer.QuestsFriendNewbieQuestProgress % {'progress': questDesc[4], 'numFriends': self.getNumFriends()} + def getString(self): - # Return the full string - return (TTLocalizer.QuestsFriendNewbieQuestObjective % (self.getNumFriends())) + return TTLocalizer.QuestsFriendNewbieQuestObjective % self.getNumFriends() + def getObjectiveStrings(self): return [TTLocalizer.QuestsFriendNewbieQuestString % (self.getNumFriends(), self.getNewbieLevel())] + def doesFriendCount(self, av, otherAv): - if (otherAv != None and (otherAv.getMaxHp() <= self.getNewbieLevel())): + if otherAv != None and otherAv.getMaxHp() <= self.getNewbieLevel(): return 1 return 0 + return + class TrolleyQuest(Quest): + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= 1) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= 1 return getCompleteStatusWithNpc(questComplete, toNpcId, npc) def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString else: - return "" + return '' + def getString(self): return TTLocalizer.QuestsFriendQuestString + def getSCStrings(self, toNpcId, progress): if progress: return getFinishToonTaskSCStrings(toNpcId) return TTLocalizer.QuestsTrolleyQuestSCString + def getHeadlineString(self): return TTLocalizer.QuestsTrolleyQuestHeadline + def getObjectiveStrings(self): return [TTLocalizer.QuestsTrolleyQuestString] -# NOTE: the mailbox quest has not been used in production yet. -# If you decide to add a MailboxQuest, be sure to test it well. -# It was added, then replaced in the same day by the PhoneQuest. -# -- Joe + class MailboxQuest(Quest): - # Perhaps this should have a filterFunc + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= 1) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= 1 return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString else: - return "" + return '' + def getString(self): return TTLocalizer.QuestsMailboxQuestString + def getSCStrings(self, toNpcId, progress): if progress: return getFinishToonTaskSCStrings(toNpcId) return TTLocalizer.QuestsMailboxQuestSCString + def getHeadlineString(self): return TTLocalizer.QuestsMailboxQuestHeadline + def getObjectiveStrings(self): return [TTLocalizer.QuestsMailboxQuestString] + class PhoneQuest(Quest): - # Perhaps this should have a filterFunc + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - questComplete = (toonProgress >= 1) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= 1 return getCompleteStatusWithNpc(questComplete, toNpcId, npc) + def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString else: - return "" + return '' + def getString(self): return TTLocalizer.QuestsPhoneQuestString + def getSCStrings(self, toNpcId, progress): if progress: return getFinishToonTaskSCStrings(toNpcId) return TTLocalizer.QuestsPhoneQuestSCString + def getHeadlineString(self): return TTLocalizer.QuestsPhoneQuestHeadline + def getObjectiveStrings(self): return [TTLocalizer.QuestsPhoneQuestString] class MinigameNewbieQuest(Quest, NewbieQuest): + __module__ = __name__ + def __init__(self, id, quest): Quest.__init__(self, id, quest) self.checkNumMinigames(self.quest[0]) self.checkNewbieLevel(self.quest[1]) + def getNumQuestItems(self): return self.getNumMinigames() + def getNumMinigames(self): return self.quest[0] + def getNewbieLevel(self): return self.quest[1] + def getCompletionStatus(self, av, questDesc, npc=None): - questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc - # See if your progress is changed - questComplete = (toonProgress >= self.getNumMinigames()) + (questId, fromNpcId, toNpcId, rewardId, toonProgress) = questDesc + questComplete = toonProgress >= self.getNumMinigames() return getCompleteStatusWithNpc(questComplete, toNpcId, npc) def getProgressString(self, avatar, questDesc): if self.getCompletionStatus(avatar, questDesc) == COMPLETE: return CompleteString + elif self.getNumMinigames() == 1: + return '' else: - if self.getNumMinigames() == 1: - return "" - else: - return (TTLocalizer.QuestsMinigameNewbieQuestProgress % - {"progress" : questDesc[4], - "numMinigames" : self.getNumMinigames()}) + return TTLocalizer.QuestsMinigameNewbieQuestProgress % {'progress': questDesc[4], 'numMinigames': self.getNumMinigames()} + def getString(self): - # Return the full string - return (TTLocalizer.QuestsMinigameNewbieQuestObjective % (self.getNumMinigames())) + return TTLocalizer.QuestsMinigameNewbieQuestObjective % self.getNumMinigames() + def getObjectiveStrings(self): return [TTLocalizer.QuestsMinigameNewbieQuestString % self.getNumMinigames()] + def getHeadlineString(self): return TTLocalizer.QuestsNewbieQuestHeadline + def getSCStrings(self, toNpcId, progress): if progress: return getFinishToonTaskSCStrings(toNpcId) return TTLocalizer.QuestsTrolleyQuestSCString + def doesMinigameCount(self, av, avList): newbieHp = self.getNewbieLevel() points = 0 for toon in avList: - if ((toon != av) and (toon.getMaxHp() <= newbieHp)): + if toon != av and toon.getMaxHp() <= newbieHp: points += 1 - return points - - -DefaultDialog = {GREETING : DefaultGreeting, - QUEST : DefaultQuest, - INCOMPLETE : DefaultIncomplete, - INCOMPLETE_PROGRESS : DefaultIncompleteProgress, - INCOMPLETE_WRONG_NPC : DefaultIncompleteWrongNPC, - COMPLETE : DefaultComplete, - LEAVING : DefaultLeaving, - } + return points +DefaultDialog = {GREETING: DefaultGreeting, QUEST: DefaultQuest, INCOMPLETE: DefaultIncomplete, INCOMPLETE_PROGRESS: DefaultIncompleteProgress, INCOMPLETE_WRONG_NPC: DefaultIncompleteWrongNPC, COMPLETE: DefaultComplete, LEAVING: DefaultLeaving} def getQuestFromNpcId(id): return QuestDict.get(id)[QuestDictFromNpcIndex] + def getQuestToNpcId(id): return QuestDict.get(id)[QuestDictToNpcIndex] + def getQuestDialog(id): return QuestDict.get(id)[QuestDictDialogIndex] + def getQuestReward(id, av): baseRewardId = QuestDict.get(id)[QuestDictRewardIndex] return transformReward(baseRewardId, av) -NoRewardTierZeroQuests = (101, 110, 121, 131, 141, 145, 150, 160, 161, 162, 163) + +NoRewardTierZeroQuests = ( + 101, 110, 121, 131, 141, 145, 150, 160, 161, 162, 163) RewardTierZeroQuests = () PreClarabelleQuestIds = NoRewardTierZeroQuests + RewardTierZeroQuests - -QuestDict = { - # Quest ID : ( tier, start, (questDesc), fromNpc, toNpc, reward, nextQuest, dialog ) - # some quests have 'OBSOLETE' for their reward; this is for obsolete quests - # that some users might still be working on; the 'OBSOLETE' prevents the - # quest from being assigned to users in the future - - # This is the tutorial quest - 101 : ( TT_TIER, Start, (CogQuest, Anywhere, 1, 'f'), Any, ToonHQ, NA, (110), DefaultDialog), - - # 103 : ( TT_TIER, Start, (DeliverItemQuest, 110), 2018, 2004, 110, NA, DefaultDialog), - - # skip the delivery quest for now... - #110 : ( TT_TIER, Cont, (TrolleyQuest,), Any, ToonHQ, NA, (120, 130, 140), DefaultDialog), - 110 : ( TT_TIER, Cont, (TrolleyQuest,), Any, ToonHQ, NA, (145), DefaultDialog), - - 120 : ( TT_TIER, OBSOLETE, (DeliverItemQuest, 5), ToonHQ, 2002, NA, 121, DefaultDialog), - 121 : ( TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 2, VeryEasy, Any, 'type'), 2002, 2002, NA, 150, DefaultDialog), - - 130 : ( TT_TIER, OBSOLETE, (DeliverItemQuest, 6), ToonHQ, 2003, NA, 131, DefaultDialog), - 131 : ( TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 3, VeryEasy, Any, 'type'), 2003, 2003, NA, 150, DefaultDialog), - - 140 : ( TT_TIER, OBSOLETE, (DeliverItemQuest, 4), ToonHQ, 2005, NA, 141, DefaultDialog), - 141 : ( TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 1, VeryEasy, Any, 'type'), 2005, 2005, NA, 150, DefaultDialog), - - # This quest replaces the deliver item quests - 145 : ( TT_TIER, Cont, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 20, VeryEasy, Any, 'type'), ToonHQ, ToonHQ, NA, 150, DefaultDialog), - - 150 : ( TT_TIER, Cont, (FriendQuest,), Same, Same, NA, 175, DefaultDialog), - - # These are now bypassed, but left in as obsolete - # because some players on the live site might still be working on them - 160 : ( TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'c'), Same, ToonHQ, NA, 175, - TTLocalizer.QuestDialogDict[160]), - 161 : ( TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'l'), Same, ToonHQ, NA, 175, - TTLocalizer.QuestDialogDict[161]), - 162 : ( TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 's'), Same, ToonHQ, NA, 175, - TTLocalizer.QuestDialogDict[162]), - 163 : ( TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'm'), Same, ToonHQ, NA, 175, - TTLocalizer.QuestDialogDict[163]), - - # If you change this questID (175) make sure you change the constant PHONE_QUEST_ID - 175 : ( TT_TIER, Cont, (PhoneQuest,), Same, ToonHQ, 100, NA, - TTLocalizer.QuestDialogDict[175]), - - # First catalog will be delivered here - - # visiting quest 1000 is special - # VISIT_QUEST_ID : ( 1, 1, (VisitQuest,), Any, Any, NA, NA, DefaultDialog), - - 164 : ( TT_TIER+1, Start, (VisitQuest,), Any, 2001, NA, (165), - TTLocalizer.QuestDialogDict[164]), - 165 : ( TT_TIER+1, Start, (CogQuest, Anywhere, 4, Any), 2001, Same, NA, (166, 167, 168, 169), - TTLocalizer.QuestDialogDict[165]), - 166 : ( TT_TIER+1, Cont, (CogTrackQuest, Anywhere, 4, 'c'), Same, Same, NA, (170, 171, 172), - TTLocalizer.QuestDialogDict[166]), - 167 : ( TT_TIER+1, Cont, (CogTrackQuest, Anywhere, 4, 'l'), Same, Same, NA, (170, 171, 172), - TTLocalizer.QuestDialogDict[167]), - 168 : ( TT_TIER+1, Cont, (CogTrackQuest, Anywhere, 4, 's'), Same, Same, NA, (170, 171, 172), - TTLocalizer.QuestDialogDict[168]), - 169 : ( TT_TIER+1, Cont, (CogTrackQuest, Anywhere, 4, 'm'), Same, Same, NA, (170, 171, 172), - TTLocalizer.QuestDialogDict[169]), - 170 : ( TT_TIER+1, Cont, (VisitQuest,), Same, 2005, NA, (400), - TTLocalizer.QuestDialogDict[170]), - 171 : ( TT_TIER+1, Cont, (VisitQuest,), Same, 2311, NA, (400), - TTLocalizer.QuestDialogDict[171]), - 172 : ( TT_TIER+1, Cont, (VisitQuest,), Same, 2119, NA, (400), - TTLocalizer.QuestDialogDict[172]), - 400 : ( TT_TIER+1, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.SOUND_TRACK, - ToontownBattleGlobals.HEAL_TRACK), - Same, Same, 400, NA, - TTLocalizer.QuestDialogDict[400]), - - # Toontown central - 1001 : ( TT_TIER+2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 1002 : ( TT_TIER+2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 1003 : ( TT_TIER+2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 1004 : ( TT_TIER+2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 1005 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 1006 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 1007 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 1008 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 1009 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1010 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 1011 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1012 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - - 1013 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 4, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 1014 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 4, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 1015 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 4, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 1016 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 4, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - - 1017 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 1, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 1018 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 1, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 1019 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 1, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 1020 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 1, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - - 1021 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 2, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 1022 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 1023 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 3, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 1024 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 4, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 1025 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 4, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 1026 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 3), Any, ToonHQ, Any, NA, DefaultDialog), - - 1027 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 1028 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 1029 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 1030 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - 1031 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 1032 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 1033 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 1034 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - 1035 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 1036 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 1037 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 1038 : ( TT_TIER+2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - # More random quests for TT_TIER+2 are found after 1100. - - # Help out Loopy Lane. For a reward, you get teleport access to TTC. - 1039 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2135, NA, (1041, 1042, 1043), - TTLocalizer.QuestDialogDict[1039]), - 1040 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2207, NA, (1041, 1042, 1043), - TTLocalizer.QuestDialogDict[1040]), - 1041 : ( TT_TIER+2, Cont, (VisitQuest,), Same, 2211, NA, (1044), - TTLocalizer.QuestDialogDict[1041]), - 1042 : ( TT_TIER+2, Cont, (VisitQuest,), Same, 2209, NA, (1044), - TTLocalizer.QuestDialogDict[1042]), - 1043 : ( TT_TIER+2, Cont, (VisitQuest,), Same, 2210, NA, (1044), - TTLocalizer.QuestDialogDict[1043]), - 1044 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 4, 7, VeryEasy, Any, 'type'), Same, Same, NA, (1045), - TTLocalizer.QuestDialogDict[1044]), - 1045 : ( TT_TIER+2, Cont, (DeliverItemQuest, 8), Same, ToonHQ, 300, NA, - TTLocalizer.QuestDialogDict[1045]), - - # Funny Money needs to recover their adding machines. Reward is ability - # to carry 50 jellybeans - 1046 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2127, NA, (1047), - TTLocalizer.QuestDialogDict[1046]), - 1047 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 5, 9, VeryEasy, 'm', 'track'), 2127, Same, NA, (1048), - TTLocalizer.QuestDialogDict[1047]), - 1048 : ( TT_TIER+2, Cont, (DeliverItemQuest, 9), Same, 2131, NA, (1049), - TTLocalizer.QuestDialogDict[1048]), - 1049 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 10, 2007, VeryEasy, 3, 'level'), Same, Same, NA, (1053), - TTLocalizer.QuestDialogDict[1049]), - 1053 : ( TT_TIER+2, Cont, (DeliverItemQuest, 9), Same, 2127, 700, NA, - TTLocalizer.QuestDialogDict[1053]), - - # Used Clown Cars needs to recover tires. Your reward is the medium pouch - # so you can now carry 25 gags. - 1054 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2128, NA, (1055), - TTLocalizer.QuestDialogDict[1054]), - 1055 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 4, 10, Easy, AnyFish), 2128, Same, NA, (1056), - TTLocalizer.QuestDialogDict[1055]), - 1056 : ( TT_TIER+2, Cont, (VisitQuest,), Same, 2213, NA, (1057), - TTLocalizer.QuestDialogDict[1056]), - 1057 : ( TT_TIER+2, Cont, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 3), Same, Same, NA, (1058), - TTLocalizer.QuestDialogDict[1057]), - 1058 : ( TT_TIER+2, Cont, (DeliverItemQuest, 11), Same, 2128, 200, NA, - TTLocalizer.QuestDialogDict[1058]), - - # Ink shortage. Reward is +2 HP. - 1059 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2302, NA, (1060), - TTLocalizer.QuestDialogDict[1059]), - 1060 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 1, 12, Medium, AnyFish), 2302, Same, NA, (1062), - TTLocalizer.QuestDialogDict[1060]), - 1061 : ( TT_TIER+2, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 6, 'p'), Same, Same, 101, NA, - TTLocalizer.QuestDialogDict[1061]), - 1062 : ( TT_TIER+2, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 6, 'b'), Same, Same, 101, NA, - TTLocalizer.QuestDialogDict[1062]), - - # Two packages for Dr. ??? Reward is new track. - 900 : ( TT_TIER+3, Start, (VisitQuest,), Any, 2201, NA, (1063), - TTLocalizer.QuestDialogDict[900]), - 1063 : ( TT_TIER+3, Start, (RecoverItemQuest, Anywhere, 1, 13, Medium, 3, 'level'), 2201, Same, NA, (1067), - TTLocalizer.QuestDialogDict[1063]), - 1067 : ( TT_TIER+3, Cont, (DeliverItemQuest, 13), Same, 2112, NA, (1068), - TTLocalizer.QuestDialogDict[1067]), - 1068 : ( TT_TIER+3, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 10, Any), Same, Same, NA, (1069, 1070, 1071), - TTLocalizer.QuestDialogDict[1068]), - 1069 : ( TT_TIER+3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 'm', 'track'), Same, Same, NA, (1072), - TTLocalizer.QuestDialogDict[1069]), - 1070 : ( TT_TIER+3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 's', 'track'), Same, Same, NA, (1072), - TTLocalizer.QuestDialogDict[1070]), - 1071 : ( TT_TIER+3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 'c', 'track'), Same, Same, NA, (1072), - TTLocalizer.QuestDialogDict[1071]), - 1072 : ( TT_TIER+3, Cont, (DeliverItemQuest, 13), Same, 2301, NA, (1073), - TTLocalizer.QuestDialogDict[1072]), - 1073 : ( TT_TIER+3, Cont, (VisitQuest,), Any, 2201, NA, (1074), - TTLocalizer.QuestDialogDict[1073]), - 1074 : ( TT_TIER+3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Hard, Any), Same, Same, NA, (1075), - TTLocalizer.QuestDialogDict[1074]), - 1075 : ( TT_TIER+3, Cont, (DeliverItemQuest, 13), Same, 2301, 900, NA, - TTLocalizer.QuestDialogDict[1075]), - - # 14K Goldfish. Reward is max quest = 2. - 1076 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2217, NA, (1077), - TTLocalizer.QuestDialogDict[1076]), - 1077 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 1, 14, Medium, Any), 2217, Same, NA, (1078), - TTLocalizer.QuestDialogDict[1077]), - 1078 : ( TT_TIER+2, Cont, (DeliverItemQuest, 14), Same, 2302, NA, (1079), - TTLocalizer.QuestDialogDict[1078]), - 1079 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 15, Easy, 'f'), Same, 2217, NA, (1080), - TTLocalizer.QuestDialogDict[1079]), - 1092 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 15, Easy, 'sc'), Same, 2217, NA, (1080), - TTLocalizer.QuestDialogDict[1092]), - 1080 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 4, 15, Easy, AnyFish), Same, Same, 500, NA, - TTLocalizer.QuestDialogDict[1080]), - - # Sticky Lou glued to floor. Reward is +3 HP. - 1081 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2208, NA, (1082), - TTLocalizer.QuestDialogDict[1081]), - 1082 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 1, 16, Medium, 's', 'track'), 2208, Same, NA, (1083), - TTLocalizer.QuestDialogDict[1082]), - 1083 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 17, Medium, 'l', 'track'), Same, Same, NA, (1084), - TTLocalizer.QuestDialogDict[1083]), - 1084 : ( TT_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 18, Medium, 'm', 'track'), Same, Same, 102, NA, - TTLocalizer.QuestDialogDict[1084]), - - # Professor Pete is analyzing Cogs. Get him some gears and your reward - # is +1 HP. - 1085 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2003, NA, (1086), - TTLocalizer.QuestDialogDict[1085]), - 1086 : ( TT_TIER+2, Start, (RecoverItemQuest, Anywhere, 5, 2007, Easy, 2, 'level'), 2003, Same, NA, (1089), - TTLocalizer.QuestDialogDict[1086]), - 1089 : ( TT_TIER+2, Cont, (DeliverItemQuest, 19), Same, ToonHQ, 100, NA, - TTLocalizer.QuestDialogDict[1089]), - - # Learn about Cog Radar. Kill Cogs. Gain +2 HP. - 1090 : ( TT_TIER+2, Start, (VisitQuest,), Any, 2119, NA, (1091), - TTLocalizer.QuestDialogDict[1090]), - 1091 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 8, 2), 2119, ToonHQ, 101, NA, - TTLocalizer.QuestDialogDict[1091]), - - # Next TT_TIER+2 id: 1093 - - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 1100 : ( TT_TIER+2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 10, Any), Any, ToonHQ, NA, (1101), DefaultDialog), - 1101 : ( TT_TIER+2, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 1102 : ( TT_TIER+2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 8, 3), Any, ToonHQ, NA, (1103), DefaultDialog), - 1103 : ( TT_TIER+2, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), - - - # More random quests for TT_TIER+2 - 1105 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 1106 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 1107 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 1108 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 1109 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1110 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 1111 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1112 : ( TT_TIER+2, Start, (CogQuest, Anywhere, 2, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - - # More random quests for TT_TIER+3 # for traliers stuck on last gag track quest - 1205 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 1206 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 1207 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 1208 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 1209 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1210 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 1211 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 1212 : ( TT_TIER+3, Start, (CogQuest, Anywhere, 4, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - - # Donald's Dock - 401 : ( DD_TIER, Start, (TrackChoiceQuest, - ToontownBattleGlobals.DROP_TRACK, - ToontownBattleGlobals.LURE_TRACK), - Any, ToonHQ, 400, NA, - TTLocalizer.QuestDialogDict[401]), - - # Optional quests to do while working on the bottleneck quest - 2001 : ( DD_TIER, Start, (CogQuest, Anywhere, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2002 : ( DD_TIER, Start, (CogQuest, Anywhere, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2003 : ( DD_TIER, Start, (CogQuest, Anywhere, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2004 : ( DD_TIER, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2005 : ( DD_TIER, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2006 : ( DD_TIER, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2007 : ( DD_TIER, Start, (CogQuest, Anywhere, 9, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2008 : ( DD_TIER, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2009 : ( DD_TIER, Start, (CogQuest, Anywhere, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2010 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2011 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2012 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2013 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2014 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2015 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2816 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2817 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 5, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2818 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2819 : ( DD_TIER, Start, (CogLevelQuest, Anywhere, 7, 6), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 2020 : ( DD_TIER, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, NA, (2021), DefaultDialog), - 2021 : ( DD_TIER, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), - - - # DD is heavy on low-level corporate (bossbot) cogs (levels 2-4) - # and also medium-level money (cashbot) cogs (levels 3-6). It's - # light on legal and sales cogs. - - 2101 : ( DD_TIER+1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2102 : ( DD_TIER+1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2103 : ( DD_TIER+1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2104 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2105 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2106 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 2107 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 6, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 2108 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 2109 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 2110 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 3, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 2111 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 2, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 2112 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 1, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2113 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 6, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 2114 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - 2115 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 2116 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 3, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 2117 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 2, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 2118 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 1, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2119 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 6, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), - 2120 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 2121 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 2122 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 3, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 2123 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 2, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 2124 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 1, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2125 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 6, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 2126 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 2127 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 4, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 2128 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 3, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 2129 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 2, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 2130 : ( DD_TIER+1, Start, (CogQuest, Anywhere, 1, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2131 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2132 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2133 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2134 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2135 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2136 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2137 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2138 : ( DD_TIER+1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), - - 2139 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 2140 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 2141 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 2142 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2143 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 2144 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 2145 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 2146 : ( DD_TIER+1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2147 : ( DD_TIER+1, Start, (CogTrackQuest, Anywhere, 7, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 2148 : ( DD_TIER+1, Start, (CogTrackQuest, Anywhere, 7, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 2149 : ( DD_TIER+1, Start, (CogTrackQuest, Anywhere, 7, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 2150 : ( DD_TIER+1, Start, (CogTrackQuest, Anywhere, 7, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 2151 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, Any, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 2152 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 2153 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 2, Any, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 2154 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 2, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 2155 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, 'm', 1), Any, ToonHQ, Any, NA, DefaultDialog), - 2156 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, 's', 1), Any, ToonHQ, Any, NA, DefaultDialog), - 2157 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, 'c', 1), Any, ToonHQ, Any, NA, DefaultDialog), - 2158 : ( DD_TIER+1, Start, (BuildingQuest, Anywhere, 1, 'l', 1), Any, ToonHQ, Any, NA, DefaultDialog), - - 2159 : ( DD_TIER+1, Start, (DeliverGagQuest, 2, ToontownBattleGlobals.THROW_TRACK, 1), - Any, Any, Any, NA, DefaultDialog), - 2160 : ( DD_TIER+1, Start, (DeliverGagQuest, 1, ToontownBattleGlobals.SQUIRT_TRACK, 1), - Any, Any, Any, NA, DefaultDialog), - 2161 : ( DD_TIER+1, Start, (DeliverGagQuest, 1, ToontownBattleGlobals.SQUIRT_TRACK, 2), - Any, Any, Any, NA, DefaultDialog), - 2162 : ( DD_TIER+1, Start, (DeliverGagQuest, 2, ToontownBattleGlobals.THROW_TRACK, 2), - Any, Any, Any, NA, DefaultDialog), - - - # Billy Budd at the Barnacle Barn has lost an inner tube. He - # thinks a Penny Pincher stole it. Reward: +2 Laff. - 2201 : ( DD_TIER+1, Start, (VisitQuest,), Any, 1101, NA, 2202, - TTLocalizer.QuestDialogDict[2201]), - 2202 : ( DD_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 2001, Medium, 'pp'), 1101, Same, 101, NA, - TTLocalizer.QuestDialogDict[2202]), - - - # Captain Carl needs you to take his eyeglass prescription to the Doctor Queequeg. - # Doctor Queequeg in turn needs you to recover eyeglass frames from a flunky. - # When you deliver the frames to Dr. Q he will fill the prescription and give - # the toon the glasses to return to Captain Carl. Reward: Large Pouch - 2203 : ( DD_TIER+1, Start, (VisitQuest,), Any, 1102, NA, 2204, - TTLocalizer.QuestDialogDict[2203]), - 2204 : ( DD_TIER+1, Start, (DeliverItemQuest, 2002), 1102, 1104, NA, 2205, - TTLocalizer.QuestDialogDict[2204]), - 2205 : ( DD_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 2003, Medium, 'f'), Same, Same, NA, 2206, - TTLocalizer.QuestDialogDict[2205]), - 2206 : (DD_TIER+1, Cont, (DeliverItemQuest, 2004), Same, 1102, 201, NA, - TTLocalizer.QuestDialogDict[2206]), - - - # Barnacle Barbara at the Barnacle Barn has lost her big white wig. She - # says a back stabber stole it. Reward: Max Money = 60. - 2207 : ( DD_TIER+1, Start, (VisitQuest,), Any, 1201, NA, 2208, - TTLocalizer.QuestDialogDict[2207]), - 2208 : ( DD_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 2005, Easy, 'bs'), 1201, Same, 701, NA, - TTLocalizer.QuestDialogDict[2208]), - - - # Melville needs some things for his cog fighting sailing voyage. First go see Alice and - # do what she asks to get some ballast. Then go see Art and do what he asks to get a - # sailing chart. Reward: teleport access - 2209 : ( DD_TIER+1, Start, (VisitQuest,), Any, 1302, NA, 2210, - TTLocalizer.QuestDialogDict[2209]), - 2210 : ( DD_TIER+1, Start, (VisitQuest,), 1302, 1301, NA, 2211, - TTLocalizer.QuestDialogDict[2210]), - 2211 : ( DD_TIER+1, Cont, (CogQuest, ToontownGlobals.DonaldsDock, 5, 'mm'), Same, Same, NA, 2212, - TTLocalizer.QuestDialogDict[2211]), - 2212 : ( DD_TIER+1, Cont, (DeliverItemQuest, 2006), Same, 1302, NA, 2213, - TTLocalizer.QuestDialogDict[2212]), - 2213 : ( DD_TIER+1, Cont, (VisitQuest,), Same, 1202, NA, 2214, - TTLocalizer.QuestDialogDict[2213]), - 2214 : ( DD_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDock, 3, 2007, Hard, Any), Same, Same, NA, 2215, - TTLocalizer.QuestDialogDict[2214]), - 2215 : ( DD_TIER+1, Cont, (DeliverItemQuest, 2008), Same, 1302, 301, NA, - TTLocalizer.QuestDialogDict[2215]), - - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 2500 : ( DD_TIER+1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 15, Any), Any, ToonHQ, NA, (2501), DefaultDialog), - 2501 : ( DD_TIER+1, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), - - - # Optional quests to do while working on the bottleneck quest - 2801 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2802 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2803 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2804 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2805 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2806 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2807 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 9, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2808 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2809 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 2810 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2811 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 2812 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2813 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 2814 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2815 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 2816 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2817 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 5, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2818 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 2819 : ( DD_TIER+2, Start, (CogLevelQuest, Anywhere, 7, 6), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 2820 : ( DD_TIER+2, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, NA, (2821), DefaultDialog), - 2821 : ( DD_TIER+2, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), - - - - - # Ahab is building a giant prefab crab to confuse the cogs. He will need several cog - # parts for it. Go see Claggart to get a clovis. Go see Hook to get a clock spring. Get a - # counter weight from Rocky Shores (or Svetlana, or Cal). Then remove a cog building - # that's blocking the solar panel on the crab. - 901 : ( DD_TIER+2, Start, (VisitQuest,), Any, 1203, NA, 2902, - TTLocalizer.QuestDialogDict[901]), - 2902 : (DD_TIER+2, Start, (VisitQuest,), 1203, 1303, NA, 2903, - TTLocalizer.QuestDialogDict[2902]), - 2903 : (DD_TIER+2, Cont, (DeliverItemQuest, 2009), Same, 1106, NA, 2904, - TTLocalizer.QuestDialogDict[2903]), - 2904 : (DD_TIER+2, Cont, (DeliverItemQuest, 2010), Same, 1203, NA, 2905, - TTLocalizer.QuestDialogDict[2904]), - 2905 : (DD_TIER+2, Cont, (VisitQuest, 2009), Same, 1105, NA, 2906, - TTLocalizer.QuestDialogDict[2905]), - 2906 : (DD_TIER+2, Cont, (DeliverGagQuest, 3, ToontownBattleGlobals.SQUIRT_TRACK, 2), Same, Same, NA, 2907, - TTLocalizer.QuestDialogDict[2906]), - 2907 : (DD_TIER+2, Cont, (DeliverItemQuest,2011), Same, 1203, NA, (2910, 2915, 2920), - TTLocalizer.QuestDialogDict[2907]), - 2910 : (DD_TIER+2, Cont, (VisitQuest,), Same, 1107, NA, 2911, TTLocalizer.QuestDialog_2910), - 2911 : (DD_TIER+2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 4, 'm'), Same, Same, NA, 2925, - TTLocalizer.QuestDialogDict[2911]), - 2915 : (DD_TIER+2, Cont, (VisitQuest,), Same, 1204, NA, 2916, TTLocalizer.QuestDialog_2910), - 2916 : (DD_TIER+2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 2, 's'), Same, Same, NA, 2925, - TTLocalizer.QuestDialogDict[2916]), - 2920 : (DD_TIER+2, Cont, (VisitQuest,), Same, 1204, NA, 2921, TTLocalizer.QuestDialog_2910), - 2921 : (DD_TIER+2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 6, 'c'), Same, Same, NA, 2925, - TTLocalizer.QuestDialogDict[2921]), - 2925 : (DD_TIER+2, Cont, (DeliverItemQuest, 2012), Same, 1203, NA, 2926, - TTLocalizer.QuestDialogDict[2925]), - 2926 : (DD_TIER+2, Cont, (BuildingQuest, ToontownGlobals.DonaldsDock, 1, Any, 2), Same, Same, 900, NA, - TTLocalizer.QuestDialogDict[2926]), - - - - # Daisy Garden - 3101 : ( DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 3102 : ( DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 3103 : ( DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 3104 : ( DG_TIER, Start, (CogQuest, Anywhere, 14, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 3105 : ( DG_TIER, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 3106 : ( DG_TIER, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - # DG is heavy on sellbots and lawbots; few bossbots or cashbots here. - 3107 : ( DG_TIER, Start, (CogQuest, Anywhere, 10, 'f'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3108 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'p'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3109 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'ym'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3110 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'mm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3111 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'ds'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3112 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'hh'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - - 3113 : ( DG_TIER, Start, (CogQuest, Anywhere, 10, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 3114 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - 3115 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 3116 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 3117 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 3118 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - - 3119 : ( DG_TIER, Start, (CogQuest, Anywhere, 10, 'sc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3120 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'pp'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3121 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'tw'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3122 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'bc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3123 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'nc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3124 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'mb'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - - 3125 : ( DG_TIER, Start, (CogQuest, Anywhere, 10, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 3126 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 3127 : ( DG_TIER, Start, (CogQuest, Anywhere, 8, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 3128 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 3129 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 3130 : ( DG_TIER, Start, (CogQuest, Anywhere, 6, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - - 3131 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 10, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 3132 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 15, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 3133 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 8, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 3134 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 12, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 3135 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 3136 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 3137 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 3138 : ( DG_TIER, Start, (CogLevelQuest, Anywhere, 12, 6), Any, ToonHQ, Any, NA, DefaultDialog), - - 3139 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3140 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 3141 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3142 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 3143 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3144 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 3145 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3146 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 3147 : ( DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3148 : ( DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 3149 : ( DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3150 : ( DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 3151 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 1, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 3152 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 3153 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 3, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 3154 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 4, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 3155 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'm', 2), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3156 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, 's', 2), Any, ToonHQ, Any, NA, DefaultDialog), - 3157 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'c', 2), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), - 3158 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'l', 2), Any, ToonHQ, Any, NA, DefaultDialog), - - # Artie of Artie Choke's Neckties wants you to take a silk necktie - # to Vine and Dandy menswear. The shopkeeper at Vine and Dandy - # complains that the matching suit was stolen last week, and sends - # you out to recover that. Reward: +1 Laff. - 3200 : ( DG_TIER, Start, (VisitQuest,), Any, 5101, NA, (3201), - TTLocalizer.QuestDialogDict[3200]), - 3201 : ( DG_TIER, Start, (DeliverItemQuest, 5001), 5101, 5206, NA, (3203), - TTLocalizer.QuestDialogDict[3201]), - 3203 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5002, VeryHard, Any), Same, Same, 100, NA, - TTLocalizer.QuestDialogDict[3203]), - - # The barber at Crop Top Barbers has lost a pair of scissors. He - # thinks a Bloodsucker stole it. Reward: +1 Laff. - 3204 : ( DG_TIER, Start, (VisitQuest,), Any, 5106, NA, (3205), - TTLocalizer.QuestDialogDict[3204]), - 3205 : ( DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5003, Medium, 'b'), 5106, Same, 100, NA, - TTLocalizer.QuestDialogDict[3205]), - - # The post officer in Compost Office complains that a bunch of - # Double Talkers broke in and stole a stack of postcards from his - # mailbox. Recover all ten postcards. Reward: +2 Laff. - 3206 : ( DG_TIER, Start, (VisitQuest,), Any, 5107, NA, (3207), - TTLocalizer.QuestDialogDict[3206]), - 3207 : ( DG_TIER, Start, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 10, 5004, VeryEasy, 'dt'), 5107, Same, 101, NA, - TTLocalizer.QuestDialogDict[3207]), - - # OBSOLETE: This quest has been made obsolete to make room for the Sellbot Cog HQ Quest - # We've been getting complaints from the residents about all the - # cold callers. Thin these out a bit. Then go after the - # telemarketers too. Reward: small bag (35 carry). - 3208 : ( DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 10, 'cc'), Any, ToonHQ, NA, (3209), - TTLocalizer.QuestDialogDict[3208]), - 3209 : ( DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 10, 'tm'), Same, Same, 202, NA, - TTLocalizer.QuestDialogDict[3209]), - - # OBSOLETE: This quest has been made obsolete to make room for the - # Sellbot Cog HQ Quest. We've been getting complaints from the residents - # about all the blood suckers. Thin these out a bunch. Reward: small - # bag (35 carry). - 3247 : ( DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 20, 'b'), Any, ToonHQ, 202, NA, - TTLocalizer.QuestDialogDict[3247]), - - # Oh no, The Squirting Flower is out of flowers! Bring them ten - # of yours. Then clear the street of cogs. Reward: +1 Laff. - 3210 : ( DG_TIER, Start, (DeliverGagQuest, 10, ToontownBattleGlobals.SQUIRT_TRACK, 0), Any, 5207, NA, (3211), - TTLocalizer.QuestDialogDict[3210]), - 3211 : ( DG_TIER, Cont, (CogQuest, 5200, 20, Any), Same, Same, 100, NA, - TTLocalizer.QuestDialogDict[3211]), - - # OBSOLETE: This quest has been made obsolete to make room for the - # Sellbot Cog HQ Quest Trellis the Truth has lost a lot of office - # supplies. Reward: small bag (35 carry). - 3212 : ( DG_TIER, OBSOLETE, (VisitQuest,), Any, 5208, NA, (3213), - TTLocalizer.QuestDialogDict[3212]), - 3213 : ( DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5005, VeryHard, Any), 5208, Same, NA, (3214), - TTLocalizer.QuestDialogDict[3213]), - 3214 : ( DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5006, VeryHard, Any), Same, Same, NA, (3215), - TTLocalizer.QuestDialogDict[3214]), - 3215 : ( DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5007, VeryHard, Any), Same, Same, NA, (3216), - TTLocalizer.QuestDialogDict[3215]), - 3216 : ( DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5008, VeryHard, Any), Same, Same, 202, NA, - TTLocalizer.QuestDialogDict[3216]), - - # We're studying sprockets from Sellbots. Get us a sprocket from a - # Name Dropper. Then get one from a Glad Hander. Finally, get one - # from a Mover & Shaker. Reward: +2 Laff. - 3217 : ( DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5010, VeryEasy, 'nd'), ToonHQ, ToonHQ, NA, (3218), - TTLocalizer.QuestDialogDict[3217]), - 3218 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'gh'), Same, Same, NA, (3219), - TTLocalizer.QuestDialogDict[3218]), - 3219 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, Easy, 'ms'), Same, Same, 101, NA, - TTLocalizer.QuestDialogDict[3219]), - - # We're studying sprockets from Lawbots. Get us a sprocket from an - # Ambulance Chaser. Then get one from a Back Stabber. Finally, get one - # from a Spin Doctor. Reward: +2 Laff. - 3244 : ( DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5010, VeryEasy, 'ac'), ToonHQ, ToonHQ, NA, (3245), - TTLocalizer.QuestDialogDict[3244]), - 3245 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'bs'), Same, Same, NA, (3246), - TTLocalizer.QuestDialogDict[3245]), - 3246 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'sd'), Same, Same, 101, NA, - TTLocalizer.QuestDialogDict[3246]), - - # The Squirting Flower wants you to set a good example for your - # fellow toons with your squirt attacks. Go clobber a bunch of - # cogs. Reward: +1 Laff. - 3220 : ( DG_TIER, Start, (VisitQuest,), Any, 5207, NA, (3221), - TTLocalizer.QuestDialogDict[3220]), - 3221 : ( DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 20, Any), 5207, Same, 100, NA, - TTLocalizer.QuestDialogDict[3221]), - - # Demonstrate your skills. First, take back two one-story - # buildings; then two two-story buildings; then two three-story - # buildings. Reward: carry three quests. - 3222 : ( DG_TIER, Start, (BuildingQuest, Anywhere, 2, Any, 1), ToonHQ, ToonHQ, NA, (3223), - TTLocalizer.QuestDialogDict[3222]), - 3223 : ( DG_TIER, Cont, (BuildingQuest, Anywhere, 2, Any, 2), Same, Same, NA, (3224), - TTLocalizer.QuestDialogDict[3223]), - 3224 : ( DG_TIER, Cont, (BuildingQuest, Anywhere, 2, Any, 3), Same, Same, 501, NA, - TTLocalizer.QuestDialogDict[3224]), - - # The cogs have frightened away The Dew Drop Inn's delivery - # person. They need someone to deliver a salad to one of several - # possible neighborhood persons who ordered one. Then defeat some - # cogs. Reward: +1 Laff. - 3225 : ( DG_TIER, Start, (VisitQuest,), Any, 5108, NA, (3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234), - TTLocalizer.QuestDialogDict[3225]), - 3226 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5201, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3227 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5203, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3228 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5204, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3229 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5205, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3230 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5102, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3231 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5103, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3232 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5104, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3233 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5105, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3234 : ( DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5207, NA, (3235), - TTLocalizer.QuestDialog_3225), - 3235 : ( DG_TIER, Cont, (CogQuest, ToontownGlobals.DaisyGardens, 10, Any), Same, 5108, 100, NA, - TTLocalizer.QuestDialogDict[3235]), - - # OBSOLETE: This quest has been made obsolete to make room for the Sellbot Cog HQ Quest - # Too many Lawbots! Reclaim 3 lawbot buildings. Oops, now too - # many Sellbots! Reclaim 3 sellbot buildings. Reward: 80 max jellybeans. - 3236 : ( DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 3, 'l', 2), Any, ToonHQ, NA, (3237), - TTLocalizer.QuestDialogDict[3236]), - 3237 : ( DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 3, 's', 2), Same, Same, 702, NA, - TTLocalizer.QuestDialogDict[3237]), - - # The Mingler has stolen the Key to Daisy Gardens. Reclaim it - # from him. Oops, not that key, some other one! Reward: teleport - # access to Daisy Gardens. - 3238 : ( DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 2, VeryEasy, 'm'), Any, ToonHQ, NA, (3239), - TTLocalizer.QuestDialogDict[3238]), - 3239 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5012, Hard, 'm'), Same, Same, 302, NA, - TTLocalizer.QuestDialogDict[3239]), - - # A Legal Eagle has stolen the Key to Daisy Gardens. Reclaim it - # from him. Oops, not that key, some other one! Reward: teleport - # access to Daisy Gardens. - 3242 : ( DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 2, VeryEasy, 'le'), Any, ToonHQ, NA, (3243), - TTLocalizer.QuestDialogDict[3242]), - 3243 : ( DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5012, Hard, 'le'), Same, Same, 302, NA, - TTLocalizer.QuestDialogDict[3243]), - - # OBSOLETE: These two quests have been removed to make way for the Cog HQ quests - # A Legal Eagle stole a bag of bird seed from Bud's Bird Seed. - # Reward: +3 Laff. - 3240 : ( DG_TIER, OBSOLETE, (RecoverItemQuest, Anywhere, 1, 5009, Hard, 'le'), Any, 5103, 102, NA, - TTLocalizer.QuestDialogDict[3240]), - - # Recover 5 3+-story buildings. Reward: +3 Laff. - 3241 : ( DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 5, Any, 3), Any, ToonHQ, 102, NA, - TTLocalizer.QuestDialogDict[3241]), - - # Visit Detective Lima, defeat 5 Sellbots in Sellbot HQ, visit Judge - # McIntosh, recover Sellbot HQ blueprints, deliver blueprints to - # Detective Lima. Reward: 35 carry - 3250 : ( DG_TIER, Start, (VisitQuest,), Any, 5317, NA, 3251, - TTLocalizer.QuestDialogDict[3250]), - 3251 : ( DG_TIER, Start, (CogTrackQuest, ToontownGlobals.SellbotHQ, 5, 's'), 5317, Same, NA, 3252, - TTLocalizer.QuestDialogDict[3251]), - 3252 : ( DG_TIER, Cont, (VisitQuest,), Same, 5311, NA, 3253, - TTLocalizer.QuestDialogDict[3252]), - 3253 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5013, Medium, 's', 'track'), - Same, Same, NA, 3254, TTLocalizer.QuestDialogDict[3253]), - 3254 : ( DG_TIER, Cont, (DeliverItemQuest, 5013), Same, 5317, 202, NA, - TTLocalizer.QuestDialogDict[3254]), - - # Quest: Sellbot HQ Memos - # Reward: +3 laff points (102) - # Splits into 3 separate NPCs to avoid crowding - 3255 : ( DG_TIER, Start, (VisitQuest,), Any, 5314, NA, 3258, - TTLocalizer.QuestDialogDict[3255]), - 3256 : ( DG_TIER, Start, (VisitQuest,), Any, 5315, NA, 3258, - TTLocalizer.QuestDialogDict[3256]), - 3257 : ( DG_TIER, Start, (VisitQuest,), Any, 5316, NA, 3258, - TTLocalizer.QuestDialogDict[3257]), - 3258 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5014, VeryEasy, 's', 'track'), - Same, Same, NA, 3259, TTLocalizer.QuestDialogDict[3258]), - 3259 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5015, Easy, 's', 'track'), - Same, Same, NA, 3260, TTLocalizer.QuestDialogDict[3259]), - 3260 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5016, Easy, 's', 'track'), - Same, Same, NA, 3261, TTLocalizer.QuestDialogDict[3260]), - 3261 : ( DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5017, Medium, 's', 'track'), - Same, Same, 102, NA, TTLocalizer.QuestDialogDict[3261]), - - # Visit Coach Zucchini, Then defeat the Sellbot HQ Factory. - # Reward: 80 max jellybeans (702) - 3262 : ( DG_TIER, Start, (VisitQuest,), Any, 5313, NA, 3263, - TTLocalizer.QuestDialogDict[3262]), - 3263 : ( DG_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), 5313, 5313, 702, NA, - TTLocalizer.QuestDialogDict[3263]), - - # Next DG_TIER id: 3264 - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 3500 : ( DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 25, Any), Any, ToonHQ, NA, (3501), DefaultDialog), - 3501 : ( DG_TIER, Cont, (DeliverItemQuest, 1000), Any, 5007, 1000, NA, DefaultDialog), - - # Minnies melodyland - # We will pick one of these quests depending on what the avatar chose previously - # DO NOT change these quest indexes, as they are keys used in chooseQuest() - 4001 : ( MM_TIER, Start, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.HEAL_TRACK,), - Any, ToonHQ, 400, NA, - TTLocalizer.QuestDialogDict[4001]), - - 4002 : ( MM_TIER, Start, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.SOUND_TRACK,), - Any, ToonHQ, 400, NA, - TTLocalizer.QuestDialogDict[4002]), - - - # Optional quests to do while working on the bottleneck quest - 4010 : ( MM_TIER, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4011 : ( MM_TIER, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4012 : ( MM_TIER, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4013 : ( MM_TIER, Start, (CogQuest, Anywhere, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4014 : ( MM_TIER, Start, (CogQuest, Anywhere, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4015 : ( MM_TIER, Start, (CogQuest, Anywhere, 26, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4016 : ( MM_TIER, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4017 : ( MM_TIER, Start, (CogQuest, Anywhere, 30, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4018 : ( MM_TIER, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4019 : ( MM_TIER, Start, (CogQuest, Anywhere, 34, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4020 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4021 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4022 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4023 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4024 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4025 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4026 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4027 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 18, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4028 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4029 : ( MM_TIER, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 4030 : ( MM_TIER, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, NA, (4031), DefaultDialog), - 4031 : ( MM_TIER, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), - # Sellbot HQ quests - 4040 : ( MM_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4041 : ( MM_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4042 : ( MM_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 3, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4043 : ( MM_TIER, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 3), Any, ToonHQ, Any, NA, DefaultDialog), - - - # MM is a little heavy on money (cashbot) cogs, but has a fairly - # good cog distribution otherwise. The sellbots in MM are - # mostly level 2..4, while other type cogs are level 3..6. - - 4101 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4102 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4103 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4104 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4105 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4106 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 4107 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 20, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), - 4108 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 4109 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 4110 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 4111 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 4112 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4113 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 20, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), - 4114 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - 4115 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 4116 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 4117 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'ms'), None, ToonHQ, Any, NA, DefaultDialog), # don't use - 4118 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'tf'), None, ToonHQ, Any, NA, DefaultDialog), # don't use - - 4119 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 20, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), - 4120 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 4121 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 4122 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 4123 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 4124 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4125 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 20, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), - 4126 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 4127 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 16, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 4128 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 4129 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 4130 : ( MM_TIER+1, Start, (CogQuest, Anywhere, 12, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4131 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4132 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4133 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4134 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4135 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4136 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4137 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4138 : ( MM_TIER+1, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), - - 4139 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 4140 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 4141 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 4142 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4143 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 4144 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 4145 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 4146 : ( MM_TIER+1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4147 : ( MM_TIER+1, Start, (CogTrackQuest, Anywhere, 30, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 4148 : ( MM_TIER+1, Start, (CogTrackQuest, Anywhere, 30, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 4149 : ( MM_TIER+1, Start, (CogTrackQuest, Anywhere, 30, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 4150 : ( MM_TIER+1, Start, (CogTrackQuest, Anywhere, 30, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 4151 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 1, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4152 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 2, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4153 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 3, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4154 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 4, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4155 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 3, 'm', 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4156 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 3, 's', 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4157 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 3, 'c', 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4158 : ( MM_TIER+1, Start, (BuildingQuest, Anywhere, 3, 'l', 3), Any, ToonHQ, Any, NA, DefaultDialog), - - # Sellbot HQ quests - 4160 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4161 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4162 : ( MM_TIER+1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 6, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4163 : ( MM_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 4164 : ( MM_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 4165 : ( MM_TIER+1, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4166 : ( MM_TIER+1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - - # 203: Medium bag - # Tom's collecting info on how many musical instruments have gone missing since the - # cog invasion. Run around to the following vendors and get inventory sheets: - # Tina's Concertina Concerts, Yuki's Ukelele's, Fifi's Fiddles - 4200 : ( MM_TIER+1, Start, (VisitQuest,), Any, 4101, NA, 4201, - TTLocalizer.QuestDialogDict[4200]), - 4201 : ( MM_TIER+1, Start, (VisitQuest,), 4101, 4201, NA, 4202, - TTLocalizer.QuestDialogDict[4201]), - 4202 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4001), Same, 4101, NA, 4203, - TTLocalizer.QuestDialogDict[4202]), - 4203 : ( MM_TIER+1, Cont, (VisitQuest,), Same, 4301, NA, 4204, - TTLocalizer.QuestDialogDict[4203]), - 4204 : ( MM_TIER+1, Cont, (CogQuest, ToontownGlobals.MinniesMelodyland, 10, Any), Same, Same, NA, 4205, - TTLocalizer.QuestDialogDict[4204]), - 4205 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4002), Same, 4101, NA, 4206, - TTLocalizer.QuestDialogDict[4205]), - 4206 : ( MM_TIER+1, Cont, (VisitQuest,), Same, 4102, NA, 4207, - TTLocalizer.QuestDialogDict[4206]), - 4207 : ( MM_TIER+1, Cont, (VisitQuest,), Same, 4108, NA, 4208, - TTLocalizer.QuestDialogDict[4207]), - 4208 : ( MM_TIER+1, Cont, (DeliverGagQuest, 1, ToontownBattleGlobals.THROW_TRACK, 4), Same, Same, NA, 4209, - TTLocalizer.QuestDialogDict[4208]), - 4209 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4003), Same, 4102, NA, 4210, - TTLocalizer.QuestDialogDict[4209]), - 4210 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4004), Same, 4101, 203, NA, - TTLocalizer.QuestDialogDict[4210]), - - # 303: MM teleport access - # Dr. Fret is having trouble getting customers. First he thinks its the Number Crunchers - # that are scaring everyone away. Then he think its cashbots in general. Finally he asks - # you take over a cog building before he remembers that he never really had any customers - # to speak of... - 4211 : ( MM_TIER+1, Start, (VisitQuest,), ToonHQ, 4103, NA, 4212, - TTLocalizer.QuestDialogDict[4211]), - 4212 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 10, 'nc'), 4103, Same, NA, 4213, - TTLocalizer.QuestDialogDict[4212]), - 4213 : ( MM_TIER+1, Cont, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 20, 'm'), Same, Same, NA, 4214, - TTLocalizer.QuestDialogDict[4213]), - 4214 : ( MM_TIER+1, Cont, (BuildingQuest, Anywhere, 1, 'm', Any), Same, Same, 303, NA, - TTLocalizer.QuestDialogDict[4214]), - - # 703: max money = 100 - # Gladhanders' have made off with Anna's customers' travel tickets. Retrieve them and - # then deliver them to the following people: - # Lumber Jack, Tabitha, Barry - 4215 : ( MM_TIER+1, Start, (VisitQuest,), Any, 4302, NA, 4216, - TTLocalizer.QuestDialogDict[4215]), - 4216 : ( MM_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 4005, VeryHard, 'gh'), 4302, Same, NA, 4217, - TTLocalizer.QuestDialogDict[4216]), - 4217 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4005), Same, 4203, NA, 4218, - TTLocalizer.QuestDialogDict[4217]), - 4218 : ( MM_TIER+1, Cont, (VisitQuest,), Any, 4302, NA, 4219, - TTLocalizer.QuestDialogDict[4218]), - 4219 : ( MM_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 4006, VeryHard, 'gh'), Same, Same, NA, 4220, - TTLocalizer.QuestDialogDict[4219]), - 4220 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4006), Same, 4308, NA, 4221, - TTLocalizer.QuestDialogDict[4220]), - 4221 : (MM_TIER+1, Cont, (VisitQuest,), Any, 4302, NA, 4222, - TTLocalizer.QuestDialogDict[4221]), - 4222 : ( MM_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 4007, VeryHard, 'gh'), Same, Same, NA, 4223, - TTLocalizer.QuestDialogDict[4222]), - 4223 : ( MM_TIER+1, Cont, (DeliverItemQuest, 4007), Same, 4202, NA, 4224, - TTLocalizer.QuestDialogDict[4223]), - 4224 : (MM_TIER+1, Cont, (VisitQuest,), Any, 4302, 703, NA, - TTLocalizer.QuestDialogDict[4224]), - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 4500 : ( MM_TIER+1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 40, Any), Any, ToonHQ, NA, (4501), DefaultDialog), - 4501 : ( MM_TIER+1, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), - - # 902: track completion - # Visit Leo at Leo's Fenders. He's going to give a concert tonight and needs his castanets - # polished. Bring them to Carlos who says he can do it, but needs some squid ink to make - # them nice and black. After you return with the squid ink he will polish them but it will - # take some time. Go reclaim a one story building in the mean time. Once you return the - # polished castanets to Leo he asks you to go pick up the lyrics to "A Beatnik Christmas" - # from Hedy at Lousy Lyrics. Hedy doesn't have a copy, but offers to transcribe it from - # memory if you will reclaim a two story building on her street. Turns out it is taking - # longer than she thought to remember the lyrics. Go reclaim a three story building. After - # this she gives you the lyrics to take to Leo. Leo is overjoyed and finishes your track. - #902 : ( MM_TIER+2, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 10, Any), Any, ToonHQ, 900, NA, DefaultDialog), - 902 : ( MM_TIER+2, Start, (VisitQuest,), Any, 4303, NA, 4903, - TTLocalizer.QuestDialogDict[902]), - 4903 : ( MM_TIER+2, Start, (DeliverItemQuest, 4008), 4303, 4109, NA, 4904, - TTLocalizer.QuestDialogDict[4903]), - 4904 : ( MM_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 4009, VeryHard, AnyFish), Same, Same, NA, 4905, - TTLocalizer.QuestDialogDict[4904]), - 4905 : ( MM_TIER+2, Cont, (BuildingQuest, Anywhere, 1, Any, 1), Same, Same, NA, 4906, - TTLocalizer.QuestDialogDict[4905]), - 4906 : ( MM_TIER+2, Cont, (DeliverItemQuest, 4010), Same, 4303, NA, 4907, - TTLocalizer.QuestDialogDict[4906]), - 4907 : ( MM_TIER+2, Cont, (VisitQuest,), Same, 4208, NA, 4908, - TTLocalizer.QuestDialogDict[4907]), - 4908 : ( MM_TIER+2, Cont, (BuildingQuest, Anywhere, 1, Any, 2), Same, Same, NA, 4909, - TTLocalizer.QuestDialogDict[4908]), - 4909 : ( MM_TIER+2, Cont, (BuildingQuest, Anywhere, 1, Any, 3), Same, Same, NA, 4910, - TTLocalizer.QuestDialogDict[4909]), - 4910 : ( MM_TIER+2, Cont, (DeliverItemQuest, 4011), Same, 4303, 900, NA, - TTLocalizer.QuestDialogDict[4910]), - - - # Optional quests to do while working on the bottleneck quest - 4810 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4811 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4812 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4813 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4814 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4815 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 26, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4816 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4817 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 30, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4818 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4819 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 34, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4820 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4821 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 4822 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4823 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4824 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4825 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4826 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4827 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 18, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4828 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 4829 : ( MM_TIER+2, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 4830 : ( MM_TIER+2, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, NA, (4831), DefaultDialog), - 4831 : ( MM_TIER+2, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), - # Sellbot HQ quests - 4840 : ( MM_TIER+2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4841 : ( MM_TIER+2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 15, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 4842 : ( MM_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 4843 : ( MM_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4844 : ( MM_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 4845 : ( MM_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 4846 : ( MM_TIER+2, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4847 : ( MM_TIER+2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 4848 : ( MM_TIER+2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - - # The Brrrgh - # We will pick one of these quests depending on what the avatar chose previously - 5247 : ( BR_TIER, Start, (VisitQuest,), Any, 3112, NA, (5248), - TTLocalizer.QuestDialogDict[5247]), - 5248 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 8), 3112, Same, NA, (5249), - TTLocalizer.QuestDialogDict[5248]), - 5249 : ( BR_TIER, Cont, (RecoverItemQuest, Anywhere, 3, 3018, VeryHard, AnyFish), Same, Same, NA, (5250, 5258, 5259, 5260), - TTLocalizer.QuestDialogDict[5249]), - 5250 : ( BR_TIER, Cont, (BuildingQuest, Anywhere, 2, "l", 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), - TTLocalizer.QuestDialogDict[5250]), - 5258 : ( BR_TIER, Cont, (BuildingQuest, Anywhere, 2, "c", 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), - TTLocalizer.QuestDialogDict[5258]), - 5259 : ( BR_TIER, Cont, (BuildingQuest, Anywhere, 2, "m", 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), - TTLocalizer.QuestDialogDict[5259]), - 5260 : ( BR_TIER, Cont, (BuildingQuest, Anywhere, 2, "s", 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), - TTLocalizer.QuestDialogDict[5260]), - 5001 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.SOUND_TRACK, - ToontownBattleGlobals.DROP_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5002 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.SOUND_TRACK, - ToontownBattleGlobals.LURE_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5003 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.HEAL_TRACK, - ToontownBattleGlobals.DROP_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5004 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.HEAL_TRACK, - ToontownBattleGlobals.LURE_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5005 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.SOUND_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5006 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.HEAL_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5007 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.DROP_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - 5008 : ( BR_TIER, Cont, (TrackChoiceQuest, - ToontownBattleGlobals.TRAP_TRACK, - ToontownBattleGlobals.LURE_TRACK,), - Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), - - # Optional quests to do while working on the bottleneck quest - 5020 : ( BR_TIER, Start, (CogQuest, Anywhere, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5021 : ( BR_TIER, Start, (CogQuest, Anywhere, 38, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5022 : ( BR_TIER, Start, (CogQuest, Anywhere, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5023 : ( BR_TIER, Start, (CogQuest, Anywhere, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5024 : ( BR_TIER, Start, (CogQuest, Anywhere, 44, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5025 : ( BR_TIER, Start, (CogQuest, Anywhere, 46, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5026 : ( BR_TIER, Start, (CogQuest, Anywhere, 48, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5027 : ( BR_TIER, Start, (CogQuest, Anywhere, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5028 : ( BR_TIER, Start, (CogQuest, Anywhere, 52, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5029 : ( BR_TIER, Start, (CogQuest, Anywhere, 54, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5030 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5031 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5032 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5033 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5034 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5035 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5036 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5037 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5038 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5039 : ( BR_TIER, Start, (CogLevelQuest, Anywhere, 12, 8), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 5040 : ( BR_TIER, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, (5041), DefaultDialog), - 5041 : ( BR_TIER, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), - # Elder quests - 5060 : ( BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5061 : ( BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5062 : ( BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5063 : ( BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5064 : ( BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5065 : ( BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5066 : ( BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5067 : ( BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - # Sellbot HQ quests - 5070 : ( BR_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5071 : ( BR_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5072 : ( BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 15, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5073 : ( BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5074 : ( BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5075 : ( BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5076 : ( BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5077 : ( BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5078 : ( BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5079 : ( BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5080 : ( BR_TIER, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 5081 : ( BR_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5082 : ( BR_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 2, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5083 : ( BR_TIER, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5084 : ( BR_TIER, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - - - # The Brrgh is heavy on corporate (bossbot) cogs, light on legal. - # All cogs are level 5..7. - 5101 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5102 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5103 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5104 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5105 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5106 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 55, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 5107 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 25, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), - 5108 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 5109 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 5110 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 5111 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - 5112 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 8, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5113 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 25, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), - 5114 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 5115 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 5116 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 5117 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - 5118 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 8, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5119 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 25, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), - 5120 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 5121 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 5122 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 5123 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - 5124 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 8, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5125 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 25, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), - 5126 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 5127 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 20, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 5128 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 5129 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 15, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - 5130 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 8, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5131 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5132 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5133 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5134 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5135 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5136 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5137 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5138 : ( BR_TIER+1, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), - - 5139 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 5140 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 5141 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 5142 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5143 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 5144 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 5145 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 5146 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5147 : ( BR_TIER+1, Start, (CogTrackQuest, Anywhere, 45, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 5148 : ( BR_TIER+1, Start, (CogTrackQuest, Anywhere, 45, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 5149 : ( BR_TIER+1, Start, (CogTrackQuest, Anywhere, 45, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 5150 : ( BR_TIER+1, Start, (CogTrackQuest, Anywhere, 45, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 5151 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 8, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 5152 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 2, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5153 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 5, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5154 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 6, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5155 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 2, 'm', 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5156 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 2, 's', 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5157 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 2, 'c', 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5158 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 2, 'l', 4), Any, ToonHQ, Any, NA, DefaultDialog), - - # Sellbot HQ quests - 5160 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5161 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 25, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5162 : ( BR_TIER+1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5163 : ( BR_TIER+1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5164 : ( BR_TIER+1, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 14, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5165 : ( BR_TIER+1, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5166 : ( BR_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5167 : ( BR_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5168 : ( BR_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5169 : ( BR_TIER+1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5170 : ( BR_TIER+1, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 5171 : ( BR_TIER+1, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5172 : ( BR_TIER+1, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5173 : ( BR_TIER+1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5174 : ( BR_TIER+1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - - # A Downsizer stole Chicken Boy's soccer ball. If you get it back to him - # your reward is +1 HP. - 5200 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3110, NA, (5201, 5261, 5262, 5263), - TTLocalizer.QuestDialogDict[5200]), - 5201 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'hh'), 3110, Same, 100, NA, - TTLocalizer.QuestDialogDict[5201]), - 5261 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'tf'), 3110, Same, 100, NA, - TTLocalizer.QuestDialogDict[5261]), - 5262 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'mb'), 3110, Same, 100, NA, - TTLocalizer.QuestDialogDict[5262]), - 5263 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'sd'), 3110, Same, 100, NA, - TTLocalizer.QuestDialogDict[5263]), - - # Toboggan Ted and his toboggan team crashed while racing and now - # are a bunch of absent-minded knuckleheads. Ted sends you to each - # team member looking for his large bag. Each guy has misplaced something - # that might remind him where the bag is or who another team member is. - # Your eventual reward is the large bag (max gag = 50). - 5202 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3108, NA, (5203), - TTLocalizer.QuestDialogDict[5202]), - 5203 : ( BR_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3002, VeryHard, Any), 3108, Same, NA, (5204), - TTLocalizer.QuestDialogDict[5203]), - 5204 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3205, NA, (5205), - TTLocalizer.QuestDialogDict[5204]), - 5205 : ( BR_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 3, 3003, Hard, AnyFish), Same, Same, NA, (5206), - TTLocalizer.QuestDialogDict[5205]), - 5206 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3210, NA, (5207), - TTLocalizer.QuestDialogDict[5206]), - 5207 : ( BR_TIER+1, Cont, (BuildingQuest, Anywhere, 5, Any, 4), Same, Same, NA, (5208), - TTLocalizer.QuestDialogDict[5207]), - 5208 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3114, NA, (5209), - TTLocalizer.QuestDialogDict[5208]), - 5209 : ( BR_TIER+1, Cont, (CogLevelQuest, Anywhere, 20, 7), Same, Same, 204, NA, - TTLocalizer.QuestDialogDict[5209]), - - # Vidalia Va Voom is in love with Snooty Sinjin. She writes him a love - # letter, which gets stolen by the Cogs. Return the letter to Vidalia - # who will then ask to deliver it to Sinjin. Sinjin can't be bothered - # because 10 wiener dogs have gone missing from his kennel. Once his dogs - # are returned, he hands over an IOU for an engagement ring. Deliver the - # IOU to Creepy Carl, who wants some fish in exchange for producing the - # ring. Deliver the ring to Vidalia to get max money = 120. - 5210 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3206, NA, (5211, 5264, 5265, 5266), - TTLocalizer.QuestDialogDict[5210]), - 5211 : ( BR_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Medium, 'le'), 3206, Same, NA, (5212), - TTLocalizer.QuestDialogDict[5211]), - 5264 : ( BR_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'ls'), 3206, Same, NA, (5212), - TTLocalizer.QuestDialogDict[5264]), - 5265 : ( BR_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'm'), 3206, Same, NA, (5212), - TTLocalizer.QuestDialogDict[5265]), - 5266 : ( BR_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'cr'), 3206, Same, NA, (5212), - TTLocalizer.QuestDialogDict[5266]), - 5212 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3004), Same, 3111, NA, (5213), - TTLocalizer.QuestDialogDict[5212]), - 5213 : ( BR_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 10, 3005, Hard, Any), Same, Same, NA, (5214), - TTLocalizer.QuestDialogDict[5213]), - 5214 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3119, NA, (5215), - TTLocalizer.QuestDialogDict[5214]), - 5215 : ( BR_TIER+1, Cont, (CogLevelQuest, Anywhere, 10, 8), Same, Same, NA, (5216), - TTLocalizer.QuestDialogDict[5215]), - 5216 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3006), Same, 3206, 704, NA, - TTLocalizer.QuestDialogDict[5216]), - - # Hysterical Harry is flipping out. He asks to help clear out all the - # Micromanagers, then all the x's, then all the x's, but nothing seems - # to calm him. Maybe Fanny Freezes can cook him up a potion to calm him - # down. Fanny asks for a series of ingredients and then gives you - # the concoction to take to Harry. Harry drinks it and gives you the - # max quest = 4. - 5217 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3113, NA, (5218), - TTLocalizer.QuestDialogDict[5217]), - 5218 : ( BR_TIER+1, Start, (CogQuest, Anywhere, 10, 'm'), 3113, Same, NA, (5219), - TTLocalizer.QuestDialogDict[5218]), - 5219 : ( BR_TIER+1, Cont, (CogQuest, Anywhere, 10, 'cr'), Same, Same, NA, (5220), - TTLocalizer.QuestDialogDict[5219]), - 5220 : ( BR_TIER+1, Cont, (CogQuest, Anywhere, 10, 'ls'), Same, Same, NA, (5221), - TTLocalizer.QuestDialogDict[5220]), - 5221 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3211, NA, (5222), - TTLocalizer.QuestDialogDict[5221]), - 5222 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 2, 3007, Hard, AnyFish), Same, Same, NA, (5223), - TTLocalizer.QuestDialogDict[5222]), - 5223 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3008), Same, 3113, NA, (5224), - TTLocalizer.QuestDialogDict[5223]), - 5224 : ( BR_TIER+1, Cont, (CogQuest, Anywhere, 5, 'le'), Same, Same, 502, NA, - TTLocalizer.QuestDialogDict[5224]), - - # Gus Gooseburger wants to reconcile with Grumpy Phil, with your help. - # You see, Gus baked him some turnip bread which caused Grumpy Phil to - # break a tooth. Phil has kept the tooth, but if you delivered it to - # Dr. Mumbleface he might be able to repair it. Wacky comedy ensues when - # Dr. Mumbleface loses the repaired tooth. Finally, Phil gets his tooth - # and lightens up on poor Gus. Gus responds by baking a loaf of pine cone - # bread, which breaks another one of Phil's teeth. You reward is - # teleport to the Brrrgh. - 5225 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3106, NA, (5226), - TTLocalizer.QuestDialogDict[5225]), - 5226 : ( BR_TIER+1, Start, (BuildingQuest, Anywhere, 3, 'm', 4), 3106, Same, NA, (5227), - TTLocalizer.QuestDialogDict[5226]), - 5227 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3208, NA, (5228), - TTLocalizer.QuestDialogDict[5227]), - 5228 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3009), Same, 3207, NA, (5229, 5267, 5268, 5269), - TTLocalizer.QuestDialogDict[5228]), - 5229 : ( BR_TIER+1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'm'), Same, Same, NA, (5230), - TTLocalizer.QuestDialogDict[5229]), - 5267 : ( BR_TIER+1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 's'), Same, Same, NA, (5230), - TTLocalizer.QuestDialogDict[5267]), - 5268 : ( BR_TIER+1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'l'), Same, Same, NA, (5230), - TTLocalizer.QuestDialogDict[5268]), - 5269 : ( BR_TIER+1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'c'), Same, Same, NA, (5230, 5270, 5271, 5272), - TTLocalizer.QuestDialogDict[5269]), - 5230 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'rb'), Same, Same, NA, (5231), - TTLocalizer.QuestDialogDict[5230]), - 5270 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'tbc'), Same, Same, NA, (5231), - TTLocalizer.QuestDialogDict[5270]), - 5271 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'mh'), Same, Same, NA, (5231), - TTLocalizer.QuestDialogDict[5271]), - 5272 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Medium, 'bw'), Same, Same, NA, (5231), - TTLocalizer.QuestDialogDict[5272]), - 5231 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3010), Same, 3208, NA, (5232), - TTLocalizer.QuestDialogDict[5231]), - 5232 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3106, NA, (5233), - TTLocalizer.QuestDialogDict[5232]), - 5233 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3011), Same, 3208, 304, NA, - TTLocalizer.QuestDialogDict[5233]), - - # Sweaty Pete needs a shower. First, he needs a gear from a Micromanager - # to fix a leaky pipe. Then he needs the companionship of a rubber ducky, - # which can be caught in the pond. Finally, he thinks Cogs are spying - # on him from nearby buildings while he showers. The reward for solving his - # problems is a measly +2 HP. - 5243 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3217, NA, (5244), - TTLocalizer.QuestDialogDict[5243]), - 5244 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 2007, VeryHard, 'mm'), 3217, Same, NA, (5245), - TTLocalizer.QuestDialogDict[5244]), - 5245 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3017, Hard, AnyFish), Same, Same, NA, (5246), - TTLocalizer.QuestDialogDict[5245]), - 5246 : ( BR_TIER+1, Cont, (BuildingQuest, ToontownGlobals.TheBrrrgh, 5, Any, 1), Same, Same, 101, NA, # limited to this hood, so no need restricting the number of floors. - TTLocalizer.QuestDialogDict[5246]), - - # Lounge Lassard was setting up for a gig and the Cogs came in a took - # his microphone, electronic keyboard, toupee, and platform shoes. Help - # him recover these items and he'll reward you with +3 HP - 5251 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3134, NA, (5252), - TTLocalizer.QuestDialogDict[5251]), - 5252 : ( BR_TIER+1, Start, (RecoverItemQuest, Anywhere, 1, 3019, VeryHard, Any), 3134, Same, NA, (5253, 5273, 5274, 5275), - TTLocalizer.QuestDialogDict[5252]), - 5253 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, "cr"), Same, Same, NA, (5254, 5282, 5283, 5284), - TTLocalizer.QuestDialogDict[5253]), - 5273 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, "m"), Same, Same, NA, (5254, 5282, 5283, 5284), - TTLocalizer.QuestDialogDict[5273]), - 5274 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, "ls"), Same, Same, NA, (5254, 5282, 5283, 5284), - TTLocalizer.QuestDialogDict[5274]), - 5275 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, Hard, "le"), Same, Same, NA, (5254, 5282, 5283, 5284), - TTLocalizer.QuestDialogDict[5275]), - 5254 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, "mh"), Same, Same, 102, NA, - TTLocalizer.QuestDialogDict[5254]), - 5282 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, "tbc"), Same, Same, 102, NA, - TTLocalizer.QuestDialogDict[5282]), - 5283 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, "rb"), Same, Same, 102, NA, - TTLocalizer.QuestDialogDict[5283]), - 5284 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, Hard, "bw"), Same, Same, 102, NA, - TTLocalizer.QuestDialogDict[5284]), - - # Wynne Chill wants to trade. If you wipe out cogs for her, she'll - # give you +1 HP. - 5255 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3228, NA, (5256, 5276), - TTLocalizer.QuestDialogDict[5255]), - 5256 : ( BR_TIER+1, Cont, (CogTrackQuest, Anywhere, 45, 'c'), 3228, Same, NA, (5257, 5277), - TTLocalizer.QuestDialogDict[5256]), - 5276 : ( BR_TIER+1, Cont, (CogTrackQuest, Anywhere, 40, 'l'), 3228, Same, NA, (5257, 5277), - TTLocalizer.QuestDialogDict[5276]), - 5257 : ( BR_TIER+1, Cont, (CogTrackQuest, Anywhere, 45, 's'), Same, Same, 100, NA, - TTLocalizer.QuestDialogDict[5257]), - 5277 : ( BR_TIER+1, Cont, (CogTrackQuest, Anywhere, 45, 'm'), Same, Same, 100, NA, - TTLocalizer.QuestDialogDict[5277]), - - # Go see Eddie the Yeti. If you kill some lawbots he'll give you +1 laff. - 5301 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3304, NA, (5302), - TTLocalizer.QuestDialogDict[5301]), - 5302 : ( BR_TIER+1, Cont, (CogTrackQuest, Anywhere, 90, 'l'), Same, Same, 100, NA, - TTLocalizer.QuestDialogDict[5302]), - - # Johnny Cashmere is missing several knitting supplies for making sweaters. Help him recover them all - # and he will knit you a large bag (max gag = 50). - 5303 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3318, NA, (5304), - TTLocalizer.QuestDialogDict[5303]), - 5304 : ( BR_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3024, VeryHard, 'l', 'track'), Same, Same, NA, (5305), - TTLocalizer.QuestDialogDict[5304]), - 5305 : ( BR_TIER+1, Cont, (CogLevelQuest, Anywhere, 20, 7), Same, Same, NA, (5306), - TTLocalizer.QuestDialogDict[5305]), - 5306 : ( BR_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 2, 3025, Hard, AnyFish), Same, Same, NA, (5307), - TTLocalizer.QuestDialogDict[5306]), - 5307 : ( BR_TIER+1, Cont, (BuildingQuest, Anywhere, 5, Any, 4), Same, Same, 204, NA, - TTLocalizer.QuestDialogDict[5307]), - - # March Harry is scared the Lawbots are going to sue him. He asks you to take out several - # of them on his street. When this doesn't appease him he sends you too Hysterical Harry - # to get an alibi for him. When you return with it, he rewards you with max quest = 4. - 5308 : ( BR_TIER+1, Start, (VisitQuest,), Any, 3312, NA, (5309), - TTLocalizer.QuestDialogDict[5308]), - 5309 : ( BR_TIER+1, Start, (CogTrackQuest, ToontownGlobals.PolarPlace, 30, 'l'), Same, Same, NA, (5310), - TTLocalizer.QuestDialogDict[5309]), - 5310 : ( BR_TIER+1, Cont, (VisitQuest,), Same, 3113, NA, (5311), - TTLocalizer.QuestDialogDict[5310]), - 5311 : ( BR_TIER+1, Cont, (RecoverItemQuest, Anywhere, 2, 3026, Medium, 'le'), Same, Same, NA, (5312), - TTLocalizer.QuestDialogDict[5311]), - 5312 : ( BR_TIER+1, Cont, (DeliverItemQuest, 3026), Same, 3312, 502, NA, - TTLocalizer.QuestDialogDict[5312]), - - # Elder quests - 5290 : ( BR_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5291 : ( BR_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5292 : ( BR_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5293 : ( BR_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5294 : ( BR_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5295 : ( BR_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5296 : ( BR_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5297 : ( BR_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 5500 : ( BR_TIER+1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, (5501), DefaultDialog), - 5501 : ( BR_TIER+1, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), - - - # It's time for the final challenge. Return to Lil Oldman for him to - # review your progress. Before you can begin, you must eat, Oldman asks - # for lumpy cheese from Big Cheeses to put in your broth. Then he discovers - # his spoon is missing - maybe a Robber Baron took it? Next, Oldman - # sends you to catch a talking toad from the pond. The toad whispers - # something you can't catch, which prompts Oldman to send you out for - # dessert, maybe popsicles? It turns out the popsicles were carted off - # by a bunch of high level corporate Cogs, so you've got to track them - # down. Finally, Oldman and his toad get their popsicles, and you get - # your new track. - 903 : ( BR_TIER+2, Start, (VisitQuest,), Any, 3112, NA, (5234, 5278), - TTLocalizer.QuestDialogDict[903]), - 5234 : ( BR_TIER+2, Start, (RecoverItemQuest, Anywhere, 6, 3012, Medium, 'tbc'), 3112, Same, NA, (5235, 5279), - TTLocalizer.QuestDialogDict[5234]), - 5278 : ( BR_TIER+2, Start, (RecoverItemQuest, Anywhere, 6, 3022, Medium, 'mh'), 3112, Same, NA, (5235, 5279), - TTLocalizer.QuestDialogDict[5278]), - 5235 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3013, Hard, 'rb'), Same, Same, NA, (5236), - TTLocalizer.QuestDialogDict[5235]), - 5279 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3013, Medium, 'bw'), Same, Same, NA, (5236), # lawbots are a little uncommon in BR - TTLocalizer.QuestDialogDict[5279]), - 5236 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3014, VeryHard, AnyFish), Same, Same, NA, (5237), - TTLocalizer.QuestDialogDict[5236]), - - 5237 : ( BR_TIER+2, Cont, (VisitQuest,), Same, 3128, NA, (5238, 5280), - TTLocalizer.QuestDialogDict[5237]), - 5238 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 10, 3015, VeryEasy, 'mh'), Same, Same, NA, (5239), - TTLocalizer.QuestDialogDict[5238]), - 5280 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 10, 3015, VeryEasy, 'tbc'), Same, Same, NA, (5239), - TTLocalizer.QuestDialogDict[5280]), - 5239 : ( BR_TIER+2, Cont, (DeliverItemQuest, 3015), Same, 3112, NA, (5240, 5281), - TTLocalizer.QuestDialogDict[5239]), - 5240 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3016, Hard, 'bw'), Same, Same, NA, (5241), - TTLocalizer.QuestDialogDict[5240]), - 5281 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3023, Hard, 'mh'), Same, Same, NA, (5241), - TTLocalizer.QuestDialogDict[5281]), - 5241 : ( BR_TIER+2, Cont, (BuildingQuest, Anywhere, 20, Any, 4), Same, Same, NA, (5242), - TTLocalizer.QuestDialogDict[5241]), - 5242 : ( BR_TIER+2, Cont, (RecoverItemQuest, Anywhere, 1, 3014, VeryHard, AnyFish), Same, Same, 900, NA, - TTLocalizer.QuestDialogDict[5242]), - - # Optional quests to do while working on the bottleneck quest - 5320 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5321 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 38, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5322 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5323 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5324 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 44, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5325 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 46, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5326 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 48, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5327 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 53, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5328 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 52, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5329 : ( BR_TIER+2, Start, (CogQuest, Anywhere, 54, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5330 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5331 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5332 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5333 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5334 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5335 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 5336 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5337 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5338 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 10, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 5339 : ( BR_TIER+2, Start, (CogLevelQuest, Anywhere, 12, 8), Any, ToonHQ, Any, NA, DefaultDialog), - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 5340 : ( BR_TIER+2, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, (5341), DefaultDialog), - 5341 : ( BR_TIER+2, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), - # Elder quests - 5360 : ( BR_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5361 : ( BR_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5362 : ( BR_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5363 : ( BR_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), - 5364 : ( BR_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5365 : ( BR_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5366 : ( BR_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 5367 : ( BR_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - # Sellbot HQ quests - 5370 : ( BR_TIER+2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5371 : ( BR_TIER+2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 25, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 5372 : ( BR_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 5373 : ( BR_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5374 : ( BR_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 14, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5375 : ( BR_TIER+2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5376 : ( BR_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5377 : ( BR_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5378 : ( BR_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5379 : ( BR_TIER+2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 5380 : ( BR_TIER+2, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 5381 : ( BR_TIER+2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 5382 : ( BR_TIER+2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 5383 : ( BR_TIER+2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), - 5384 : ( BR_TIER+2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - - - # Dreamland - # Cogs in DL are well-balanced. Levels are 5..9. - 6101 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6102 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 65, Any), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete to make room for the - # DL & Cashbot Cog HQ Quests -patricia - 6103 : ( DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DonaldsDreamland, 70, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6104 : ( DL_TIER, Start, (CogQuest, Anywhere, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6105 : ( DL_TIER, Start, (CogQuest, Anywhere, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6106 : ( DL_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 6107 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 6108 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 6109 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 6110 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - 6111 : ( DL_TIER, Start, (CogQuest, Anywhere, 15, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), - 6112 : ( DL_TIER, Start, (CogQuest, Anywhere, 8, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), - - 6113 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 6114 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 6115 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 6116 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - 6117 : ( DL_TIER, Start, (CogQuest, Anywhere, 15, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 6118 : ( DL_TIER, Start, (CogQuest, Anywhere, 8, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 6119 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 6120 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 6121 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 6122 : ( DL_TIER, OBSOLETE, (CogQuest, Anywhere, 25, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - 6123 : ( DL_TIER, Start, (CogQuest, Anywhere, 15, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), - 6124 : ( DL_TIER, Start, (CogQuest, Anywhere, 8, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 6125 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 6126 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 6127 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 6128 : ( DL_TIER, Start, (CogQuest, Anywhere, 25, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - 6129 : ( DL_TIER, Start, (CogQuest, Anywhere, 15, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), - 6130 : ( DL_TIER, Start, (CogQuest, Anywhere, 8, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), - - 6131 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 50, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6132 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 6133 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 35, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 6134 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 30, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 6135 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 25, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 6136 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 20, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 6137 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 15, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 6138 : ( DL_TIER, Start, (CogLevelQuest, Anywhere, 10,10), Any, ToonHQ, Any, NA, DefaultDialog), - - 6139 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 6140 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 6141 : ( DL_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 6142 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 6143 : ( DL_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 6144 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 6145 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 6146 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 6147 : ( DL_TIER, OBSOLETE, (CogTrackQuest, Anywhere, 70, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 6148 : ( DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 6149 : ( DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 6150 : ( DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 6151 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 10, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 6152 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 6, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 6153 : ( DL_TIER, OBSOLETE, (BuildingQuest, Anywhere, 8, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6154 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 6, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6155 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6156 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 2, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6157 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6158 : ( DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), - # Elder quests - 6160 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 6161 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 6162 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 6163 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 6164 : ( DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 6165 : ( DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 6166 : ( DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 6167 : ( DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - # Sellbot HQ quests - # HQ/Exterior: Cogs level 4-6 - # Factory: Cogs level 4-9, Skelecogs level 5-7, Skelecog Foreman level 11 - # OBSOLETE: These quests have been made obsolete - # by the Cashbot Cog HQ Quests -patricia - 6170 : ( DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6171 : ( DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6172 : ( DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6173 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 30, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6174 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6175 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6176 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 15, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6177 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 6178 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 6179 : ( DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 6180 : ( DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6181 : ( DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 6182 : ( DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6183 : ( DL_TIER, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 20), Any, ToonHQ, Any, NA, DefaultDialog), - 6184 : ( DL_TIER, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 6185 : ( DL_TIER, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 6186 : ( DL_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 6187 : ( DL_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), - # Sellbot HQ Elder quests - 6190 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6191 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6192 : ( DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6193 : ( DL_TIER, Start, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6194 : ( DL_TIER, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6195 : ( DL_TIER, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 6196 : ( DL_TIER, Start, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - - # Added quests for new Dreamland Street & Cog HQ - # Powers Erge, though forgetful, will give you an LP boost - # if you'll defeat some Cogs for him - 6201 : ( DL_TIER, Start, (VisitQuest,), Any, 9111, NA, 6202, TTLocalizer.QuestDialogDict[6201]), - 6202 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 70, Any), 9111, Same, 100, NA, TTLocalizer.QuestDialogDict[6202]), - - # Susan Siesta wants to get rich but the Cogs are interfering. - # Take out some Cog buildings and she'll give you the small backpack - 6206 : ( DL_TIER, Start, (VisitQuest,), Any, 9131, NA, 6207, TTLocalizer.QuestDialogDict[6206]), - 6207 : ( DL_TIER, Start, (BuildingQuest, ToontownGlobals.DonaldsDreamland, 8, Any, 4), 9131, Same, 205, NA, TTLocalizer.QuestDialogDict[6207]), - - # Lawful Linda is fixing her answering machine. - # Help her & she'll give you a 2LP reward. - 6211 : ( DL_TIER, Start, (VisitQuest,), Any, 9217, NA, 6212, TTLocalizer.QuestDialogDict[6211]), - 6212 : ( DL_TIER, Start, (RecoverItemQuest, Anywhere, 3, 6002, Medium, 'bc'), 9217, Same, NA, 6213, TTLocalizer.QuestDialogDict[6212]), - 6213 : ( DL_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 6003, Hard, 'mb'), Same, Same, NA, 6214, TTLocalizer.QuestDialogDict[6213]), - 6214 : ( DL_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 6004, VeryHard, 'pp'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[6214]), - - # Scratch Rocco's back and he'll scratch yours. - # In fact, he'll give you a 3 LP bonus. - 6221 : ( DL_TIER, Start, (VisitQuest,), Any, 9119, NA, 6222, TTLocalizer.QuestDialogDict[6221]), - 6222 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'c'), 9119, Same, 102, NA, TTLocalizer.QuestDialogDict[6222]), - - # Nat & PJ will get you acquainted with the new - # HQ. And they'll give you your first suit part - 6231 : ( DL_TIER, Start, (VisitQuest,), Any, 9203, NA, 6232, TTLocalizer.QuestDialogDict[6231]), - 6232 : ( DL_TIER, Start, (VisitQuest,), 9203, 9103, NA, 6233, TTLocalizer.QuestDialogDict[6232]), - 6233 : ( DL_TIER, Cont, (CogTrackQuest, ToontownGlobals.CashbotHQ, 10, 'm'), Same, Same, NA, 6234, TTLocalizer.QuestDialogDict[6233]), - 6234 : ( DL_TIER, Cont, (VisitQuest,), Same, 9203, NA, 6235, TTLocalizer.QuestDialogDict[6234]), - 6235 : ( DL_TIER, Cont, (RecoverItemQuest, ToontownGlobals.CashbotHQ, 1, 6001, VeryHard, 'm', 'track'), Same, Same, 4000, NA, TTLocalizer.QuestDialogDict[6235]), - - # The Countess can't concentrate on counting her sheep with all - # these Cogs around. Clean up a bit and she'll reward you handsomely. - # Reward: MaxMoneyReward 705 - 150 jellybeans - 6241 : ( DL_TIER, Start, (VisitQuest,), Any, 9219, NA, 6242, TTLocalizer.QuestDialogDict[6241]), - 6242 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 25, 'nc'), 9219, Same, 705, NA, TTLocalizer.QuestDialogDict[6242]), - - # Zari needs you to run some errands for her and maybe - # wipe out some Cogs along the way. She'll make it worthwhile - # though, she'll give you 4 LP if you run the gauntlet. - 6251 : ( DL_TIER, Start, (VisitQuest,), Any, 9221, NA, 6252, TTLocalizer.QuestDialogDict[6251]), - 6252 : ( DL_TIER, Start, (DeliverItemQuest, 6006), 9221, 9222, NA, 6253, TTLocalizer.QuestDialogDict[6252]), - 6253 : ( DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6254, TTLocalizer.QuestDialogDict[6253]), - 6254 : ( DL_TIER, Cont, (DeliverItemQuest, 6007), Same, 9210, NA, 6255, TTLocalizer.QuestDialogDict[6254]), - 6255 : ( DL_TIER, Cont, (CogTrackQuest, Anywhere, 70, 'm'), Same, Same, NA, 6256, TTLocalizer.QuestDialogDict[6255]), - 6256 : ( DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6257, TTLocalizer.QuestDialogDict[6256]), - 6257 : ( DL_TIER, Cont, (DeliverItemQuest, 6008), Same, 9205, NA, 6258, TTLocalizer.QuestDialogDict[6257]), - 6258 : ( DL_TIER, Cont, (CogQuest, Anywhere, 25, 'ms'), Same, Same, NA, 6259, TTLocalizer.QuestDialogDict[6258]), - 6259 : ( DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6260, TTLocalizer.QuestDialogDict[6259]), - 6260 : ( DL_TIER, Cont, (DeliverItemQuest, 6009), Same, 9229, NA, 6261, TTLocalizer.QuestDialogDict[6260]), - 6261 : ( DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6262, TTLocalizer.QuestDialogDict[6261]), - 6262 : ( DL_TIER, Cont, (DeliverItemQuest, 6010), Same, 9126, NA, 6263, TTLocalizer.QuestDialogDict[6262]), - 6263 : ( DL_TIER, Cont, (DeliverItemQuest, 6010), Same, 9112, NA, 6264, TTLocalizer.QuestDialogDict[6263]), - 6264 : ( DL_TIER, Cont, (DeliverItemQuest, 6011), Same, 9221, NA, 6265, TTLocalizer.QuestDialogDict[6264]), - 6265 : ( DL_TIER, Cont, (DeliverItemQuest, 6012), Same, 9115, NA, 6266, TTLocalizer.QuestDialogDict[6265]), - 6266 : ( DL_TIER, Cont, (VisitQuest,), Same, 9221, 103, NA, TTLocalizer.QuestDialogDict[6266]), - - # Drowsy Dave will give you teleport access to DL - # if he can stay awake long enough for you to finish. - 6271 : ( DL_TIER, Start, (VisitQuest,), Any, 9208, NA, 6272, TTLocalizer.QuestDialogDict[6271]), - 6272 : ( DL_TIER, Start, (BuildingQuest, ToontownGlobals.DonaldsDreamland, 2, 'm', 5), 9208, Same, 305, NA, TTLocalizer.QuestDialogDict[6272]), - - # Teddy Blair has a piece of a cog suit to give you if you will - # clear out some cogs. Of course, his ear plugs make it tough. - 6281 : ( DL_TIER, Start, (VisitQuest,), Any, 9123, NA, 6282, TTLocalizer.QuestDialogDict[6281]), - 6282 : ( DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'm'), 9123, Same, 4001, NA, TTLocalizer.QuestDialogDict[6282]), - - # William Teller needs help! Those darn Cashbots swiped his 3 - # reading lamps! Retrieve them and he'll give you - # another cog Suit piece. - 6291 : ( DL_TIER, Start, (VisitQuest,), Any, 9226, NA, 6292, TTLocalizer.QuestDialogDict[6291]), - 6292 : ( DL_TIER, Start, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 6005, VeryHard, 'm', 'track'), 9226, Same, 4002, NA, TTLocalizer.QuestDialogDict[6292]), - - # Cashbot HQ quests - # HQ/Exterior - 7, 8, 9 - # Mints 10-11, Supervisors - 12 - 6301 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6302 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6303 : ( DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 6304 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 30, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 6305 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 20, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 6306 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 15, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 6307 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 12, 10), Any, ToonHQ, Any, NA, DefaultDialog), - # these quest don't work so well now that we have laff limits on HQ elevators - 6308 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 10, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 6309 : ( DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 8, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 6310 : ( DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 5), Any, ToonHQ, Any, NA, DefaultDialog), - # these quest don't work so well now that we have laff limits on HQ elevators - 6311 : ( DL_TIER, OBSOLETE, (MintQuest, ToontownGlobals.CashbotMintIntB, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6312 : ( DL_TIER, OBSOLETE, (MintQuest, ToontownGlobals.CashbotMintIntC, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 6313 : ( DL_TIER, Start, (SkelecogQuest, ToontownGlobals.CashbotHQ, 20), Any, ToonHQ, Any, NA, DefaultDialog), - 6314 : ( DL_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 10, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 6315 : ( DL_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 6, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 6318 : ( DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 5), Any, ToonHQ, Any, NA, DefaultDialog), - # these quest don't work so well now that we have laff limits on HQ elevators - 6319 : ( DL_TIER, OBSOLETE, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6320 : ( DL_TIER, OBSOLETE, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 3), Any, ToonHQ, Any, NA, DefaultDialog), - # replacements for obsolete quests above - 6321 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 10, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 6322 : ( DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 8, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 6323 : ( DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6324 : ( DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 6325 : ( DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 6326 : ( DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 3), Any, ToonHQ, Any, NA, DefaultDialog), - - - # Post Dreamland 1 - 7101 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 120, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7102 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 130, Any), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 7103 : ( DL_TIER+1, OBSOLETE, (CogQuest, Anywhere, 140, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7104 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7105 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7106 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 7107 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 70, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 7108 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 60, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 7109 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 7110 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - 7111 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 30, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), - 7112 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 20, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7113 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 70, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 7114 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 60, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 7115 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 7116 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - 7117 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 30, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 7118 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 20, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7119 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 70, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 7120 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 60, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 7121 : ( DL_TIER+1, OBSOLETE, (CogQuest, Anywhere, 50, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 7122 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - 7123 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 30, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), - 7124 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 20, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7125 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 70, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 7126 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 60, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 7127 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 7128 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 50, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - 7129 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 30, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), - 7130 : ( DL_TIER+1, Start, (CogQuest, Anywhere, 20, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7131 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 100, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 7132 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 80, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 7133 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 60, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 7134 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 70, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 7135 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 40, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 7136 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 50, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 7137 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 7138 : ( DL_TIER+1, Start, (CogLevelQuest, Anywhere, 30, 11), Any, ToonHQ, Any, NA, DefaultDialog), - - 7139 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 100, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 7140 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 100, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 7141 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 100, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 7142 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 100, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 7143 : ( DL_TIER+1, OBSOLETE, (CogTrackQuest, Anywhere, 120, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 7144 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 120, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 7145 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 120, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 7146 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 120, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7147 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 140, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 7148 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 140, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 7149 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 140, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 7150 : ( DL_TIER+1, Start, (CogTrackQuest, Anywhere, 140, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 7151 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 20, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 7152 : ( DL_TIER+1, OBSOLETE, (BuildingQuest, Anywhere, 10, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 7153 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 10, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 7154 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 10, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - # OBSOLETE: This quest has been made obsolete by the - # DL & Cashbot Cog HQ Quests -patricia - 7155 : ( DL_TIER+1, OBSOLETE, (BuildingQuest, Anywhere, 5, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7156 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 5, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7157 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 5, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7158 : ( DL_TIER+1, Start, (BuildingQuest, Anywhere, 5, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), - # Elder quests - 7160 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 7161 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 7162 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 7163 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), - 7164 : ( DL_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 7165 : ( DL_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 7166 : ( DL_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 7167 : ( DL_TIER+1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - - # OBSOLETE: These quests have been made obsolete - # by the Cashbot Cog HQ Quests -patricia - # Sellbot HQ quests - 7170 : ( DL_TIER+1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7171 : ( DL_TIER+1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7172 : ( DL_TIER+1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7173 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 50, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 7174 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 35, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7175 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 35, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7176 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7177 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7178 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7179 : ( DL_TIER+1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7180 : ( DL_TIER+1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 7181 : ( DL_TIER+1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7182 : ( DL_TIER+1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 7183 : ( DL_TIER+1, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 40), Any, ToonHQ, Any, NA, DefaultDialog), - 7184 : ( DL_TIER+1, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 7185 : ( DL_TIER+1, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7186 : ( DL_TIER+1, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7187 : ( DL_TIER+1, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), - # Sellbot HQ Elder quests - 7190 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7191 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7192 : ( DL_TIER+1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7193 : ( DL_TIER+1, Start, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 6, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7194 : ( DL_TIER+1, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7195 : ( DL_TIER+1, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 7196 : ( DL_TIER+1, Start, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - - # New DL+1 Tier Quests for Suit parts - # Get Nina Nightlight another bed for her stock - # and she'll give you a suit part - 7201 : ( DL_TIER+1, Start, (VisitQuest,), Any, 9124, NA, 7202, TTLocalizer.QuestDialogDict[7201]), - 7202 : ( DL_TIER+1, Start, (VisitQuest,), 9124, 9128, NA, 7203, TTLocalizer.QuestDialogDict[7202]), - 7203 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7001), Same, 9124, NA, 7204, TTLocalizer.QuestDialogDict[7203]), - 7204 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9128, NA, 7205, TTLocalizer.QuestDialogDict[7204]), - 7205 : ( DL_TIER+1, Cont, (CogQuest, ToontownGlobals.DonaldsDreamland, 140, Any), Same, Same, NA, 7206, TTLocalizer.QuestDialogDict[7205]), - 7206 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7002), Same, 9124, 4003, NA, TTLocalizer.QuestDialogDict[7206]), - - # Here's a quest to pick up a Cog Suit part. - # Help Honey Moon get a new bedspread from Ed - 7209 : ( DL_TIER+1, Start, (VisitQuest,), Any, 9232, NA, 7210, TTLocalizer.QuestDialogDict[7209]), - 7210 : ( DL_TIER+1, Start, (VisitQuest,), 9232, 9101, NA, 7211, TTLocalizer.QuestDialogDict[7210]), - 7211 : ( DL_TIER+1, Cont, (CogQuest, Anywhere, 30, 'nc'), Same, Same, NA, 7212, TTLocalizer.QuestDialogDict[7211]), - 7212 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7003), Same, 9232, NA, 7213, TTLocalizer.QuestDialogDict[7212]), - 7213 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9101, NA, 7214, TTLocalizer.QuestDialogDict[7213]), - 7214 : ( DL_TIER+1, Cont, (CogTrackQuest, Anywhere, 65, 'm'), Same, Same, NA, 7215, TTLocalizer.QuestDialogDict[7214]), - 7215 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7004), Same, 9232, 4004, NA, TTLocalizer.QuestDialogDict[7215]), - - # Dreamy Daphne had her pillows stolen but Tex - # can help her out. You'll get another Cog Suit part. - 7218 : ( DL_TIER+1, Start, (VisitQuest,), Any, 9109, NA, 7219, TTLocalizer.QuestDialogDict[7218]), - 7219 : ( DL_TIER+1, Start, (VisitQuest,), 9109, 9230, NA, 7220, TTLocalizer.QuestDialogDict[7219]), - 7220 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7005), Same, 9109, NA, 7221, TTLocalizer.QuestDialogDict[7220]), - 7221 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9230, NA, 7222, TTLocalizer.QuestDialogDict[7221]), - 7222 : ( DL_TIER+1, Cont, (BuildingQuest, Anywhere, 10, Any, 3), Same, Same, NA, 7223, TTLocalizer.QuestDialogDict[7222]), - 7223 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7006), Same, 9109, 4005, NA, TTLocalizer.QuestDialogDict[7223]), - - # Sandy Sandman lost her pajamas but Big Mama - # and Cat can help her out. If you hang in there, - # you'll get another Cog Suit part. - 7226 : ( DL_TIER+1, Start, (VisitQuest,), Any, 9224, NA, 7227, TTLocalizer.QuestDialogDict[7226]), - 7227 : ( DL_TIER+1, Start, (VisitQuest,), 9224, 9102, NA, 7228, TTLocalizer.QuestDialogDict[7227]), - 7228 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7007), Same, 9224, NA, 7229, TTLocalizer.QuestDialogDict[7228]), - 7229 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9102, NA, 7230, TTLocalizer.QuestDialogDict[7229]), - 7230 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7008), Same, 9224, NA, 7231, TTLocalizer.QuestDialogDict[7230]), - 7231 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9102, NA, 7232, TTLocalizer.QuestDialogDict[7231]), - 7232 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9216, NA, 7233, TTLocalizer.QuestDialogDict[7232]), - 7233 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7009), Same, 9224, NA, 7234, TTLocalizer.QuestDialogDict[7233]), - 7234 : ( DL_TIER+1, Cont, (VisitQuest,), Same, 9216, NA, 7235, TTLocalizer.QuestDialogDict[7234]), - 7235 : ( DL_TIER+1, Cont, (BuildingQuest, Anywhere, 5, 'm', 5), Same, Same, NA, 7236, TTLocalizer.QuestDialogDict[7235]), - 7236 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7010), Same, 9224, 4006, NA, TTLocalizer.QuestDialogDict[7236]), - - # Smudgy Mascara needs Wrinkle Cream but - # 39's missing ingredients. Help them out - # and get a piece of Cog suit - 7239 : ( DL_TIER+1, Start, (VisitQuest,), Any, 9114, NA, 7240, TTLocalizer.QuestDialogDict[7239]), - 7240 : ( DL_TIER+1, Start, (VisitQuest,), 9114, 9215, NA, 7241, TTLocalizer.QuestDialogDict[7240]), - 7241 : ( DL_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 7011, Hard, AnyFish), Same, Same, NA, 7242, TTLocalizer.QuestDialogDict[7241]), - 7242 : ( DL_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 7012, VeryHard, AnyFish), Same, Same, NA, 7243, TTLocalizer.QuestDialogDict[7242]), - 7243 : ( DL_TIER+1, Cont, (RecoverItemQuest, ToontownGlobals.CashbotHQ, 1, 7013, Hard, 'ls'), Same, Same, NA, 7244, TTLocalizer.QuestDialogDict[7243]), - 7244 : ( DL_TIER+1, Cont, (DeliverItemQuest, 7014), Same, 9114, 4007, NA, TTLocalizer.QuestDialogDict[7244]), - - # Cashbot HQ quests - 7250 : ( DL_TIER+1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7251 : ( DL_TIER+1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7252 : ( DL_TIER+1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 7253 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 50, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 7254 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 35, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 7255 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 35, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 7256 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 30, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 7257 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 25, 11), Any, ToonHQ, Any, NA, DefaultDialog), - # this quest doesn't work so well now that we have laff limits on HQ elevators - 7258 : ( DL_TIER+1, OBSOLETE, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 7259 : ( DL_TIER+1, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 7260 : ( DL_TIER+1, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 7), Any, ToonHQ, Any, NA, DefaultDialog), - # this quest doesn't work so well now that we have laff limits on HQ elevators - 7261 : ( DL_TIER+1, OBSOLETE, (MintQuest, ToontownGlobals.CashbotMintIntC, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7262 : ( DL_TIER+1, Start, (SkelecogQuest, ToontownGlobals.CashbotHQ, 30), Any, ToonHQ, Any, NA, DefaultDialog), - 7263 : ( DL_TIER+1, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 7264 : ( DL_TIER+1, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 10, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 7265 : ( DL_TIER+1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 7266 : ( DL_TIER+1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 8), Any, ToonHQ, Any, NA, DefaultDialog), - # this quest doesn't work so well now that we have laff limits on HQ elevators - 7267 : ( DL_TIER+1, OBSOLETE, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 6), Any, ToonHQ, Any, NA, DefaultDialog), - # replacements for obsolete quests above - 7268 : ( DL_TIER+1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 7269 : ( DL_TIER+1, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 7270 : ( DL_TIER+1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 6), Any, ToonHQ, Any, NA, DefaultDialog), - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 7500 : ( DL_TIER+1, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 100, Any), Any, ToonHQ, NA, (7501), DefaultDialog), - 7501 : ( DL_TIER+1, Cont, (DeliverItemQuest, 1000), Any, 9010, 1000, NA, DefaultDialog), - - - # Post Dreamland 2 - 8101 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 240, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8102 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 260, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8103 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 280, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8104 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 320, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8105 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 360, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8106 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 8107 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 140, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 8108 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 120, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 8109 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 8110 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - 8111 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 60, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), - 8112 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 40, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8113 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 140, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 8114 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 120, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 8115 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 8116 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - 8117 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 60, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 8118 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 40, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8119 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 140, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 8120 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 120, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 8121 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 8122 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - 8123 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 60, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), - 8124 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 40, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8125 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 140, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 8126 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 120, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 8127 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 8128 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 100, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - 8129 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 60, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), - 8130 : ( DL_TIER+2, Start, (CogQuest, Anywhere, 40, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8131 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 160, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 8132 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 200, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 8133 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 120, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 8134 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 140, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 8135 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 80, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 8136 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 100, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 8137 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 40, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8138 : ( DL_TIER+2, Start, (CogLevelQuest, Anywhere, 60, 12), Any, ToonHQ, Any, NA, DefaultDialog), - - 8139 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 200, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 8140 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 200, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 8141 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 200, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 8142 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 200, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8143 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 250, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 8144 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 250, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 8145 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 250, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 8146 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 250, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8147 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 300, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 8148 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 300, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 8149 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 300, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 8150 : ( DL_TIER+2, Start, (CogTrackQuest, Anywhere, 300, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 8151 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 40, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 8152 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 20, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 8153 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 20, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 8154 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 20, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8155 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 10, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8156 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 10, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8157 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 10, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8158 : ( DL_TIER+2, Start, (BuildingQuest, Anywhere, 10, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), - - # Elder quests - 8160 : ( DL_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 8161 : ( DL_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 8162 : ( DL_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 8163 : ( DL_TIER+2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), - 8164 : ( DL_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 8165 : ( DL_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 8166 : ( DL_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 8167 : ( DL_TIER+2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - - # OBSOLETE: These quests have been made obsolete - # by the Cashbot Cog HQ Quests -patricia - # Sellbot HQ quests - 8170 : ( DL_TIER+2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8171 : ( DL_TIER+2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8172 : ( DL_TIER+2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8173 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 100, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 8174 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 70, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8175 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 70, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8176 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 60, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8177 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 8178 : ( DL_TIER+2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 8179 : ( DL_TIER+2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8180 : ( DL_TIER+2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), - 8181 : ( DL_TIER+2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8182 : ( DL_TIER+2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), - 8183 : ( DL_TIER+2, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 80), Any, ToonHQ, Any, NA, DefaultDialog), - 8184 : ( DL_TIER+2, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 40, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 8185 : ( DL_TIER+2, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 8186 : ( DL_TIER+2, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8187 : ( DL_TIER+2, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), - 8188 : ( DL_TIER+2, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 8189 : ( DL_TIER+2, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - # Sellbot HQ Elder quests - 8190 : ( DL_TIER+2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8191 : ( DL_TIER+2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8192 : ( DL_TIER+2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8193 : ( DL_TIER+2, OBSOLETE, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 8, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8194 : ( DL_TIER+2, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8195 : ( DL_TIER+2, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8196 : ( DL_TIER+2, OBSOLETE, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8197 : ( DL_TIER+2, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - 8198 : ( DL_TIER+2, OBSOLETE, (RescueNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), - - # Cashbot HQ quests - 8201 : ( DL_TIER+2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8202 : ( DL_TIER+2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8203 : ( DL_TIER+2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 8204 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 100, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 8205 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 90, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 8206 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 80, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 8207 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 60, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 8208 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 50, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 8209 : ( DL_TIER+2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 40, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 8210 : ( DL_TIER+2, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 16), Any, ToonHQ, Any, NA, DefaultDialog), - 8211 : ( DL_TIER+2, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 14), Any, ToonHQ, Any, NA, DefaultDialog), - 8212 : ( DL_TIER+2, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8213 : ( DL_TIER+2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntA, 80), Any, ToonHQ, Any, NA, DefaultDialog), - 8214 : ( DL_TIER+2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntB, 60), Any, ToonHQ, Any, NA, DefaultDialog), - 8215 : ( DL_TIER+2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntC, 40), Any, ToonHQ, Any, NA, DefaultDialog), - 8216 : ( DL_TIER+2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 16), Any, ToonHQ, Any, NA, DefaultDialog), - 8217 : ( DL_TIER+2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 14), Any, ToonHQ, Any, NA, DefaultDialog), - 8218 : ( DL_TIER+2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 8219 : ( DL_TIER+2, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 2), Any, ToonHQ, 621, NA, DefaultDialog), - - # Post Dreamland 3 - 9101 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 500, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9102 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 600, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9103 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 700, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9104 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 800, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9105 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 900, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9106 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 1000, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - 9107 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 300, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), - 9108 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 250, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), - 9109 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), - 9110 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), - 9111 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 120, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), - 9112 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 80, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9113 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 280, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), - 9114 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 240, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), - 9115 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), - 9116 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), - 9117 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 120, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 9118 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 80, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9119 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 280, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), - 9120 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 240, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), - 9121 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), - 9122 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), - 9123 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 120, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), - 9124 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 80, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9125 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 280, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), - 9126 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 240, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), - 9127 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), - 9128 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 200, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), - 9129 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 120, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), - 9130 : ( DL_TIER+3, Start, (CogQuest, Anywhere, 80, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9131 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 320, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 9132 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 400, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 9133 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 240, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 9134 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 280, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 9135 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 160, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 9136 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 200, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 9137 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 80, 12), Any, ToonHQ, Any, NA, DefaultDialog), - 9138 : ( DL_TIER+3, Start, (CogLevelQuest, Anywhere, 120, 12), Any, ToonHQ, Any, NA, DefaultDialog), - - 9139 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 400, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 9140 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 400, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 9141 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 400, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 9142 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 400, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9143 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 500, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 9144 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 500, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 9145 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 500, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 9146 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 500, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9147 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 600, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), - 9148 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 600, 's'), Any, ToonHQ, Any, NA, DefaultDialog), - 9149 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 600, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), - 9150 : ( DL_TIER+3, Start, (CogTrackQuest, Anywhere, 600, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), - - 9151 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 400, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 9152 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 200, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 9153 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 200, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 9154 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 200, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - # nerfed these to make it easier to find the buildings - grw - #9155 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), - #9156 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), - #9157 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), - #9158 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9155 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9156 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9157 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9158 : ( DL_TIER+3, Start, (BuildingQuest, Anywhere, 100, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - # Elder quests - 9160 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9161 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9162 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9163 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9164 : ( DL_TIER+3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9165 : ( DL_TIER+3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9166 : ( DL_TIER+3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - 9167 : ( DL_TIER+3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), - # OBSOLETE: These quests have been made obsolete - # by the Cashbot Cog HQ Quests -patricia - # Sellbot HQ quests - 9170 : ( DL_TIER+3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 350, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9171 : ( DL_TIER+3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9172 : ( DL_TIER+3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 500, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9173 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 200, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 9174 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9175 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9176 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9177 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 100, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 9178 : ( DL_TIER+3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 100, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 9179 : ( DL_TIER+3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), - 9180 : ( DL_TIER+3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), - 9181 : ( DL_TIER+3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), - 9182 : ( DL_TIER+3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), - 9183 : ( DL_TIER+3, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 150), Any, ToonHQ, Any, NA, DefaultDialog), - 9184 : ( DL_TIER+3, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 80, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 9185 : ( DL_TIER+3, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 32, 6), Any, ToonHQ, Any, NA, DefaultDialog), - 9186 : ( DL_TIER+3, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), - 9187 : ( DL_TIER+3, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), - 9188 : ( DL_TIER+3, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 9189 : ( DL_TIER+3, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), - # Sellbot HQ Elder quests - 9190 : ( DL_TIER+3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9191 : ( DL_TIER+3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9192 : ( DL_TIER+3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9193 : ( DL_TIER+3, OBSOLETE, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 10, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9194 : ( DL_TIER+3, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9195 : ( DL_TIER+3, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9196 : ( DL_TIER+3, OBSOLETE, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9197 : ( DL_TIER+3, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9198 : ( DL_TIER+3, OBSOLETE, (RescueNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - # Cashbot HQ quests - 9201 : ( DL_TIER+3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 350, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9202 : ( DL_TIER+3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9203 : ( DL_TIER+3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 450, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 9204 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 200, 7), Any, ToonHQ, Any, NA, DefaultDialog), - 9205 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 150, 8), Any, ToonHQ, Any, NA, DefaultDialog), - 9206 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 100, 9), Any, ToonHQ, Any, NA, DefaultDialog), - 9207 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 200, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 9208 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 150, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 9209 : ( DL_TIER+3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 100, 11), Any, ToonHQ, Any, NA, DefaultDialog), - 9210 : ( DL_TIER+3, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 35), Any, ToonHQ, Any, NA, DefaultDialog), - 9211 : ( DL_TIER+3, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 30), Any, ToonHQ, Any, NA, DefaultDialog), - 9212 : ( DL_TIER+3, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 25), Any, ToonHQ, Any, NA, DefaultDialog), - 9213 : ( DL_TIER+3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntA, 150), Any, ToonHQ, Any, NA, DefaultDialog), - 9214 : ( DL_TIER+3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntB, 100), Any, ToonHQ, Any, NA, DefaultDialog), - 9215 : ( DL_TIER+3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntC, 50), Any, ToonHQ, Any, NA, DefaultDialog), - 9216 : ( DL_TIER+3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 35), Any, ToonHQ, Any, NA, DefaultDialog), - 9217 : ( DL_TIER+3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 30), Any, ToonHQ, Any, NA, DefaultDialog), - 9218 : ( DL_TIER+3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 25), Any, ToonHQ, Any, NA, DefaultDialog), - 9219 : ( DL_TIER+3, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 3), Any, ToonHQ, 622, NA, DefaultDialog), - # Cashbot HQ Elder quests - 9220 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntA, 35, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9221 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntB, 30, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9222 : ( DL_TIER+3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntC, 25, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9223 : ( DL_TIER+3, Start, (SkelecogNewbieQuest, ToontownGlobals.CashbotHQ, 10, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9224 : ( DL_TIER+3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntA, 6, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9225 : ( DL_TIER+3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntB, 4, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9226 : ( DL_TIER+3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntC, 2, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9227 : ( DL_TIER+3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntA, 6, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9228 : ( DL_TIER+3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntB, 4, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - 9229 : ( DL_TIER+3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntC, 2, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - # Commented out as there will be far too few players who will fall into this category. Perhaps another time.... - #9230 : ( DL_TIER+3, Start, (CFONewbieQuest, ToontownGlobals.CashbotHQ, 2, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 620, NA, DefaultDialog), - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 9500 : ( DL_TIER+3, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 1000, Any), Any, ToonHQ, NA, (9501), DefaultDialog), - 9501 : ( DL_TIER+3, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), - - - # Elder quests - 10001 : ( ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 50, Any, NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - 10002 : ( ELDER_TIER, Start, (BuildingNewbieQuest, Anywhere, 4, Any, 1, NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - - # These have issues - #10003 : ( ELDER_TIER, Start, (FriendNewbieQuest, 2, 20), Any, ToonHQ, Any, NA, DefaultDialog), - #10004 : ( ELDER_TIER, Start, (MinigameNewbieQuest, 2, 20), Any, ToonHQ, Any, NA, DefaultDialog), - - # Defeat cogs - bread and butter stuff - 10100 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 10101 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 10102 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 120, Any), Any, ToonHQ, Any, NA, DefaultDialog), - - # Defeat lots of Cogs for lots of jellybeans - 10103 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 200, Any), Any, ToonHQ, 613, NA, DefaultDialog), - 10104 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 250, Any), Any, ToonHQ, 615, NA, DefaultDialog), - 10105 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 300, Any), Any, ToonHQ, 616, NA, DefaultDialog), - 10106 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 400, Any), Any, ToonHQ, 618, NA, DefaultDialog), - - # Defeat buildings for random rewards - 10110 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 40, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 10111 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 30, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), - 10112 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 25, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), - 10113 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), - 10114 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 10115 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 10116 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), - 10117 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), - - # Defeat buildings for lots of beans - 10118 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 50, Any, 1), Any, ToonHQ, 620, NA, DefaultDialog), - - # OBSOLETE: These quests have been made obsolete - # by the Cashbot Cog HQ Quests -patricia - # Sellbot HQ quests - 10120 : ( ELDER_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 10121 : ( ELDER_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 10122 : ( ELDER_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 10123 : ( ELDER_TIER, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - 10124 : ( ELDER_TIER, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), - # Sellbot HQ Elder/noob quests - 10130 : ( ELDER_TIER, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 40, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - 10131 : ( ELDER_TIER, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - 10132 : ( ELDER_TIER, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - - # Cashbot HQ quests - 10140 : ( ELDER_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), - 10141 : ( ELDER_TIER, Start, (MintQuest, ToontownGlobals.CashbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 10142 : ( ELDER_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), - 10143 : ( ELDER_TIER, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 2), Any, ToonHQ, 623, NA, DefaultDialog), - # Cashbot HQ Elder/noob quests - 10145 : ( ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.CashbotHQ, 40, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - 10146 : ( ELDER_TIER, Start, (MintNewbieQuest, ToontownGlobals.CashbotHQ, 3, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), - 10147 : ( ELDER_TIER, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotHQ, 3, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), - # Commented out as there will be far too few players who will fall into this category. Perhaps another time.... - #10148 : ( ELDER_TIER, Start, (CFONewbieQuest, ToontownGlobals.CashbotHQ, 1, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 622, NA, DefaultDialog), - - # Clothing quest: defeat some cogs then deliver clothing ticket to NPCTailor - 10200 : ( ELDER_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, NA, (10201), DefaultDialog), - 10201 : ( ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), - - # Clothing quest: defeat some buildings then deliver clothing ticket to NPCTailor - 10202 : ( ELDER_TIER, Start, (BuildingQuest, Anywhere, 25, Any, 1), Any, ToonHQ, NA, (10203), DefaultDialog), - 10203 : ( ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), - - # Clothing quest: help a newbie then deliver clothing ticket to NPCTailor - 10204 : ( ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 60, Any, NEWBIE_HP), Any, ToonHQ, NA, (10205), DefaultDialog), - 10205 : ( ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), - - # Clothing quest: help a newbie then deliver clothing ticket to NPCTailor - 10206 : ( ELDER_TIER, Start, (BuildingNewbieQuest, Anywhere, 4, Any, 1, NEWBIE_HP), Any, ToonHQ, NA, (10207), DefaultDialog), - 10207 : ( ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), - - # Lawbot HQ suit part quests - - # Professor Flake needs you run all over Toontown to get weather readings to support his Global Climate Change theory. - 11000 : ( LAWBOT_HQ_TIER, Start, (VisitQuest,), Any, 3310, NA, (11001), - TTLocalizer.QuestDialogDict[11000]), - 11001 : ( LAWBOT_HQ_TIER, Start, (RecoverItemQuest, ToontownGlobals.SillyStreet, 1, 3027, Hard, Any), Same, Same, 4100, NA, - TTLocalizer.QuestDialogDict[11001]), - 11002 : ( LAWBOT_HQ_TIER+1, Start, (VisitQuest,), Any, 3310, NA, (11003), - TTLocalizer.QuestDialogDict[11002]), - 11003 : ( LAWBOT_HQ_TIER+1, Start, (RecoverItemQuest, ToontownGlobals.LoopyLane, 1, 3027, Hard, Any), Same, Same, 4101, NA, - TTLocalizer.QuestDialogDict[11003]), - 11004 : ( LAWBOT_HQ_TIER+2, Start, (VisitQuest,), Any, 3310, NA, (11005), - TTLocalizer.QuestDialogDict[11004]), - 11005 : ( LAWBOT_HQ_TIER+2, Start, (RecoverItemQuest, ToontownGlobals.PunchlinePlace, 1, 3027, Hard, Any), Same, Same, 4102, NA, - TTLocalizer.QuestDialogDict[11005]), - 11006 : ( LAWBOT_HQ_TIER+3, Start, (VisitQuest,), Any, 3310, NA, (11007), - TTLocalizer.QuestDialogDict[11006]), - 11007 : ( LAWBOT_HQ_TIER+3, Start, (RecoverItemQuest, ToontownGlobals.BarnacleBoulevard, 1, 3027, Hard, Any), Same, Same, 4103, NA, - TTLocalizer.QuestDialogDict[11007]), - 11008 : ( LAWBOT_HQ_TIER+4, Start, (VisitQuest,), Any, 3310, NA, (11009), - TTLocalizer.QuestDialogDict[11008]), - 11009 : ( LAWBOT_HQ_TIER+4, Start, (RecoverItemQuest, ToontownGlobals.SeaweedStreet, 1, 3027, Hard, Any), Same, Same, 4104, NA, - TTLocalizer.QuestDialogDict[11009]), - 11010 : ( LAWBOT_HQ_TIER+5, Start, (VisitQuest,), Any, 3310, NA, (11011), - TTLocalizer.QuestDialogDict[11010]), - 11011 : ( LAWBOT_HQ_TIER+5, Start, (RecoverItemQuest, ToontownGlobals.LighthouseLane, 1, 3027, Hard, Any), Same, Same, 4105, NA, - TTLocalizer.QuestDialogDict[11011]), - 11012 : ( LAWBOT_HQ_TIER+6, Start, (VisitQuest,), Any, 3310, NA, (11013), - TTLocalizer.QuestDialogDict[11012]), - 11013 : ( LAWBOT_HQ_TIER+6, Start, (RecoverItemQuest, ToontownGlobals.ElmStreet, 1, 3027, Hard, Any), Same, Same, 4106, NA, - TTLocalizer.QuestDialogDict[11013]), - 11014 : ( LAWBOT_HQ_TIER+7, Start, (VisitQuest,), Any, 3310, NA, (11015), - TTLocalizer.QuestDialogDict[11014]), - 11015 : ( LAWBOT_HQ_TIER+7, Start, (RecoverItemQuest, ToontownGlobals.MapleStreet, 1, 3027, Hard, Any), Same, Same, 4107, NA, - TTLocalizer.QuestDialogDict[11015]), - 11016 : ( LAWBOT_HQ_TIER+8, Start, (VisitQuest,), Any, 3310, NA, (11017), - TTLocalizer.QuestDialogDict[11016]), - 11017 : ( LAWBOT_HQ_TIER+8, Start, (RecoverItemQuest, ToontownGlobals.OakStreet, 1, 3027, Hard, Any), Same, Same, 4108, NA, - TTLocalizer.QuestDialogDict[11017]), - 11018 : ( LAWBOT_HQ_TIER+9, Start, (VisitQuest,), Any, 3310, NA, (11019), - TTLocalizer.QuestDialogDict[11018]), - 11019 : ( LAWBOT_HQ_TIER+9, Start, (RecoverItemQuest, ToontownGlobals.AltoAvenue, 1, 3027, Hard, Any), Same, Same, 4109, NA, - TTLocalizer.QuestDialogDict[11019]), - 11020 : ( LAWBOT_HQ_TIER+10, Start, (VisitQuest,), Any, 3310, NA, (11021), - TTLocalizer.QuestDialogDict[11020]), - 11021 : ( LAWBOT_HQ_TIER+10, Start, (RecoverItemQuest, ToontownGlobals.BaritoneBoulevard, 1, 3027, Hard, Any), Same, Same, 4110, NA, - TTLocalizer.QuestDialogDict[11021]), - 11022 : ( LAWBOT_HQ_TIER+11, Start, (VisitQuest,), Any, 3310, NA, (11023), - TTLocalizer.QuestDialogDict[11022]), - 11023 : ( LAWBOT_HQ_TIER+11, Start, (RecoverItemQuest, ToontownGlobals.TenorTerrace, 1, 3027, Hard, Any), Same, Same, 4111, NA, - TTLocalizer.QuestDialogDict[11023]), - 11024 : ( LAWBOT_HQ_TIER+12, Start, (VisitQuest,), Any, 3310, NA, (11025), - TTLocalizer.QuestDialogDict[11024]), - 11025 : ( LAWBOT_HQ_TIER+12, Start, (RecoverItemQuest, ToontownGlobals.LullabyLane, 1, 3027, Hard, Any), Same, Same, 4112, NA, - TTLocalizer.QuestDialogDict[11025]), - 11026 : ( LAWBOT_HQ_TIER+13, Start, (VisitQuest,), Any, 3310, NA, (11027), - TTLocalizer.QuestDialogDict[11026]), - 11027 : ( LAWBOT_HQ_TIER+13, Start, (RecoverItemQuest, ToontownGlobals.PajamaPlace, 1, 3027, Hard, Any), Same, Same, 4113, NA, - TTLocalizer.QuestDialogDict[11027]), - - # Bossbot HQ suit part quests - - # Quest ID : ( tier, start, (questDesc), fromNpc, toNpc, reward, nextQuest, dialog ) - - # Shep Ahoy needs you to really take a bite out of the Bossbots to earn your bossbot suit - 12000 : ( BOSSBOT_HQ_TIER, Start, (VisitQuest,), Any, 1222, NA, (12001), - TTLocalizer.QuestDialogDict[12000]), - 12001 : ( BOSSBOT_HQ_TIER, Start, (CogQuest, Anywhere, 1, 'f'), Same, Same, 4200, NA, - TTLocalizer.QuestDialogDict[12001]), - 12002 : ( BOSSBOT_HQ_TIER+1, Start, (VisitQuest,), Any, 1222, NA, (12003), - TTLocalizer.QuestDialogDict[12002]), - 12003 : ( BOSSBOT_HQ_TIER+1, Start, (CogQuest, Anywhere, 1, 'p'), Same, Same, 4201, NA, - TTLocalizer.QuestDialogDict[12003]), - 12004 : ( BOSSBOT_HQ_TIER+2, Start, (VisitQuest,), Any, 1222, NA, (12005), - TTLocalizer.QuestDialogDict[12004]), - 12005 : ( BOSSBOT_HQ_TIER+2, Start, (CogQuest, Anywhere, 1, 'ym'), Same, Same, 4202, NA, - TTLocalizer.QuestDialogDict[12005]), - 12006 : ( BOSSBOT_HQ_TIER+3, Start, (VisitQuest,), Any, 1222, NA, (12007), - TTLocalizer.QuestDialogDict[12006]), - 12007 : ( BOSSBOT_HQ_TIER+3, Start, (CogQuest, Anywhere, 1, 'mm'), Same, Same, 4203, NA, - TTLocalizer.QuestDialogDict[12007]), - 12008 : ( BOSSBOT_HQ_TIER+4, Start, (VisitQuest,), Any, 1222, NA, (12009), - TTLocalizer.QuestDialogDict[12008]), - 12009 : ( BOSSBOT_HQ_TIER+4, Start, (CogQuest, Anywhere, 1, 'ds'), Same, Same, 4204, NA, - TTLocalizer.QuestDialogDict[12009]), - 12010 : ( BOSSBOT_HQ_TIER+5, Start, (VisitQuest,), Any, 1222, NA, (12011), - TTLocalizer.QuestDialogDict[12010]), - 12011 : ( BOSSBOT_HQ_TIER+5, Start, (CogQuest, Anywhere, 1, 'hh'), Same, Same, 4205, NA, - TTLocalizer.QuestDialogDict[12011]), - 12012 : ( BOSSBOT_HQ_TIER+6, Start, (VisitQuest,), Any, 1222, NA, (12013), - TTLocalizer.QuestDialogDict[12012]), - 12013 : ( BOSSBOT_HQ_TIER+6, Start, (CogQuest, Anywhere, 1, 'cr'), Same, Same, 4206, NA, - TTLocalizer.QuestDialogDict[12013]), - 12014 : ( BOSSBOT_HQ_TIER+7, Start, (VisitQuest,), Any, 1222, NA, (12015), - TTLocalizer.QuestDialogDict[12014]), - 12015 : ( BOSSBOT_HQ_TIER+7, Start, (CogQuest, Anywhere, 1, 'tbc'), Same, Same, 4207, NA, - TTLocalizer.QuestDialogDict[12015]), - 12016 : ( BOSSBOT_HQ_TIER+8, Start, (VisitQuest,), Any, 1222, NA, (12017), - TTLocalizer.QuestDialogDict[12016]), - 12017 : ( BOSSBOT_HQ_TIER+8, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4208, NA, - TTLocalizer.QuestDialogDict[12017]), - 12018 : ( BOSSBOT_HQ_TIER+9, Start, (VisitQuest,), Any, 1222, NA, (12019), - TTLocalizer.QuestDialogDict[12018]), - 12019 : ( BOSSBOT_HQ_TIER+9, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4209, NA, - TTLocalizer.QuestDialogDict[12019]), - 12020 : ( BOSSBOT_HQ_TIER+10, Start, (VisitQuest,), Any, 1222, NA, (12021), - TTLocalizer.QuestDialogDict[12020]), - 12021 : ( BOSSBOT_HQ_TIER+10, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4210, NA, - TTLocalizer.QuestDialogDict[12021]), - 12022 : ( BOSSBOT_HQ_TIER+11, Start, (VisitQuest,), Any, 1222, NA, (12023), - TTLocalizer.QuestDialogDict[12022]), - 12023 : ( BOSSBOT_HQ_TIER+11, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4211, NA, - TTLocalizer.QuestDialogDict[12023]), - 12024 : ( BOSSBOT_HQ_TIER+12, Start, (VisitQuest,), Any, 1222, NA, (12025), - TTLocalizer.QuestDialogDict[12024]), - 12025 : ( BOSSBOT_HQ_TIER+12, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4212, NA, - TTLocalizer.QuestDialogDict[12025]), - 12026 : ( BOSSBOT_HQ_TIER+13, Start, (VisitQuest,), Any, 1222, NA, (12027), - TTLocalizer.QuestDialogDict[12026]), - 12027 : ( BOSSBOT_HQ_TIER+13, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4213, NA, - TTLocalizer.QuestDialogDict[12027]), - 12028 : ( BOSSBOT_HQ_TIER+14, Start, (VisitQuest,), Any, 1222, NA, (12029), - TTLocalizer.QuestDialogDict[12028]), - 12029 : ( BOSSBOT_HQ_TIER+14, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4214, NA, - TTLocalizer.QuestDialogDict[12029]), - 12030 : ( BOSSBOT_HQ_TIER+15, Start, (VisitQuest,), Any, 1222, NA, (12031), - TTLocalizer.QuestDialogDict[12030]), - 12031 : ( BOSSBOT_HQ_TIER+15, Start, (SkeleReviveQuest, Anywhere, 1), Same, Same, 4215, NA, - TTLocalizer.QuestDialogDict[12031]), - 12032 : ( BOSSBOT_HQ_TIER+16, Start, (VisitQuest,), Any, 2001, 4216, NA, - TTLocalizer.QuestDialogDict[12032]), - } -# End QuestDict - - -# Create the quest tier dict so we can more efficiently -# access quests based on their tier -# This is a dict of {tier : [questId, questId, ...]} +QuestDict = {101: (TT_TIER, Start, (CogQuest, Anywhere, 1, 'f'), Any, ToonHQ, NA, 110, DefaultDialog), 110: (TT_TIER, Cont, (TrolleyQuest,), Any, ToonHQ, NA, 145, DefaultDialog), 120: (TT_TIER, OBSOLETE, (DeliverItemQuest, 5), ToonHQ, 2002, NA, 121, DefaultDialog), 121: (TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 2, VeryEasy, Any, 'type'), 2002, 2002, NA, 150, DefaultDialog), 130: (TT_TIER, OBSOLETE, (DeliverItemQuest, 6), ToonHQ, 2003, NA, 131, DefaultDialog), 131: (TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 3, VeryEasy, Any, 'type'), 2003, 2003, NA, 150, DefaultDialog), 140: (TT_TIER, OBSOLETE, (DeliverItemQuest, 4), ToonHQ, 2005, NA, 141, DefaultDialog), 141: (TT_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 1, VeryEasy, Any, 'type'), 2005, 2005, NA, 150, DefaultDialog), 145: (TT_TIER, Cont, (RecoverItemQuest, ToontownGlobals.ToontownCentral, 1, 20, VeryEasy, Any, 'type'), ToonHQ, ToonHQ, NA, 150, DefaultDialog), 150: (TT_TIER, Cont, (FriendQuest,), Same, Same, NA, 175, DefaultDialog), 160: (TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'c'), Same, ToonHQ, NA, 175, TTLocalizer.QuestDialogDict[160]), 161: (TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'l'), Same, ToonHQ, NA, 175, TTLocalizer.QuestDialogDict[161]), 162: (TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 's'), Same, ToonHQ, NA, 175, TTLocalizer.QuestDialogDict[162]), 163: (TT_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'm'), Same, ToonHQ, NA, 175, TTLocalizer.QuestDialogDict[163]), 175: (TT_TIER, Cont, (PhoneQuest,), Same, ToonHQ, 100, NA, TTLocalizer.QuestDialogDict[175]), 164: (TT_TIER + 1, Start, (VisitQuest,), Any, 2001, NA, 165, TTLocalizer.QuestDialogDict[164]), 165: (TT_TIER + 1, Start, (CogQuest, Anywhere, 4, Any), 2001, Same, NA, (166, 167, 168, 169), TTLocalizer.QuestDialogDict[165]), 166: (TT_TIER + 1, Cont, (CogTrackQuest, Anywhere, 4, 'c'), Same, Same, NA, (170, 171, 172), TTLocalizer.QuestDialogDict[166]), 167: (TT_TIER + 1, Cont, (CogTrackQuest, Anywhere, 4, 'l'), Same, Same, NA, (170, 171, 172), TTLocalizer.QuestDialogDict[167]), 168: (TT_TIER + 1, Cont, (CogTrackQuest, Anywhere, 4, 's'), Same, Same, NA, (170, 171, 172), TTLocalizer.QuestDialogDict[168]), 169: (TT_TIER + 1, Cont, (CogTrackQuest, Anywhere, 4, 'm'), Same, Same, NA, (170, 171, 172), TTLocalizer.QuestDialogDict[169]), 170: (TT_TIER + 1, Cont, (VisitQuest,), Same, 2005, NA, 400, TTLocalizer.QuestDialogDict[170]), 171: (TT_TIER + 1, Cont, (VisitQuest,), Same, 2311, NA, 400, TTLocalizer.QuestDialogDict[171]), 172: (TT_TIER + 1, Cont, (VisitQuest,), Same, 2119, NA, 400, TTLocalizer.QuestDialogDict[172]), 400: (TT_TIER + 1, Cont, (TrackChoiceQuest, ToontownBattleGlobals.SOUND_TRACK, ToontownBattleGlobals.HEAL_TRACK), Same, Same, 400, NA, TTLocalizer.QuestDialogDict[400]), 1001: (TT_TIER + 2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), 1002: (TT_TIER + 2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), 1003: (TT_TIER + 2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), 1004: (TT_TIER + 2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 1005: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), 1006: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 1007: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 1008: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 1009: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), 1010: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), 1011: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), 1012: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 1013: (TT_TIER + 2, Start, (CogQuest, Anywhere, 4, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), 1014: (TT_TIER + 2, Start, (CogQuest, Anywhere, 4, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 1015: (TT_TIER + 2, Start, (CogQuest, Anywhere, 4, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 1016: (TT_TIER + 2, Start, (CogQuest, Anywhere, 4, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 1017: (TT_TIER + 2, Start, (CogQuest, Anywhere, 1, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 1018: (TT_TIER + 2, Start, (CogQuest, Anywhere, 1, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 1019: (TT_TIER + 2, Start, (CogQuest, Anywhere, 1, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 1020: (TT_TIER + 2, Start, (CogQuest, Anywhere, 1, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 1021: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 2, 2), Any, ToonHQ, Any, NA, DefaultDialog), 1022: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 2), Any, ToonHQ, Any, NA, DefaultDialog), 1023: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 3, 2), Any, ToonHQ, Any, NA, DefaultDialog), 1024: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 4, 2), Any, ToonHQ, Any, NA, DefaultDialog), 1025: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 4, 3), Any, ToonHQ, Any, NA, DefaultDialog), 1026: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 3), Any, ToonHQ, Any, NA, DefaultDialog), 1027: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 1028: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 1029: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 1030: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 2, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 1031: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 1032: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 1033: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 1034: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 3, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 1035: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 1036: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 1037: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 1038: (TT_TIER + 2, Start, (CogTrackQuest, ToontownGlobals.ToontownCentral, 5, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 1039: (TT_TIER + 2, Start, (VisitQuest,), Any, 2135, NA, (1041, 1042, 1043), TTLocalizer.QuestDialogDict[1039]), 1040: (TT_TIER + 2, Start, (VisitQuest,), Any, 2207, NA, (1041, 1042, 1043), TTLocalizer.QuestDialogDict[1040]), 1041: (TT_TIER + 2, Cont, (VisitQuest,), Same, 2211, NA, 1044, TTLocalizer.QuestDialogDict[1041]), 1042: (TT_TIER + 2, Cont, (VisitQuest,), Same, 2209, NA, 1044, TTLocalizer.QuestDialogDict[1042]), 1043: (TT_TIER + 2, Cont, (VisitQuest,), Same, 2210, NA, 1044, TTLocalizer.QuestDialogDict[1043]), 1044: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 4, 7, VeryEasy, Any, 'type'), Same, Same, NA, 1045, TTLocalizer.QuestDialogDict[1044]), 1045: (TT_TIER + 2, Cont, (DeliverItemQuest, 8), Same, ToonHQ, 300, NA, TTLocalizer.QuestDialogDict[1045]), 1046: (TT_TIER + 2, Start, (VisitQuest,), Any, 2127, NA, 1047, TTLocalizer.QuestDialogDict[1046]), 1047: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 5, 9, VeryEasy, 'm', 'track'), 2127, Same, NA, 1048, TTLocalizer.QuestDialogDict[1047]), 1048: (TT_TIER + 2, Cont, (DeliverItemQuest, 9), Same, 2131, NA, 1049, TTLocalizer.QuestDialogDict[1048]), 1049: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 10, 2007, VeryEasy, 3, 'level'), Same, Same, NA, 1053, TTLocalizer.QuestDialogDict[1049]), 1053: (TT_TIER + 2, Cont, (DeliverItemQuest, 9), Same, 2127, 700, NA, TTLocalizer.QuestDialogDict[1053]), 1054: (TT_TIER + 2, Start, (VisitQuest,), Any, 2128, NA, 1055, TTLocalizer.QuestDialogDict[1054]), 1055: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 4, 10, Easy, AnyFish), 2128, Same, NA, 1056, TTLocalizer.QuestDialogDict[1055]), 1056: (TT_TIER + 2, Cont, (VisitQuest,), Same, 2213, NA, 1057, TTLocalizer.QuestDialogDict[1056]), 1057: (TT_TIER + 2, Cont, (CogLevelQuest, ToontownGlobals.ToontownCentral, 6, 3), Same, Same, NA, 1058, TTLocalizer.QuestDialogDict[1057]), 1058: (TT_TIER + 2, Cont, (DeliverItemQuest, 11), Same, 2128, 200, NA, TTLocalizer.QuestDialogDict[1058]), 1059: (TT_TIER + 2, Start, (VisitQuest,), Any, 2302, NA, 1060, TTLocalizer.QuestDialogDict[1059]), 1060: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 1, 12, Medium, AnyFish), 2302, Same, NA, 1062, TTLocalizer.QuestDialogDict[1060]), 1061: (TT_TIER + 2, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 6, 'p'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[1061]), 1062: (TT_TIER + 2, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 6, 'b'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[1062]), 900: (TT_TIER + 3, Start, (VisitQuest,), Any, 2201, NA, 1063, TTLocalizer.QuestDialogDict[900]), 1063: (TT_TIER + 3, Start, (RecoverItemQuest, Anywhere, 1, 13, Medium, 3, 'level'), 2201, Same, NA, 1067, TTLocalizer.QuestDialogDict[1063]), 1067: (TT_TIER + 3, Cont, (DeliverItemQuest, 13), Same, 2112, NA, 1068, TTLocalizer.QuestDialogDict[1067]), 1068: (TT_TIER + 3, Cont, (CogQuest, ToontownGlobals.ToontownCentral, 10, Any), Same, Same, NA, (1069, 1070, 1071), TTLocalizer.QuestDialogDict[1068]), 1069: (TT_TIER + 3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 'm', 'track'), Same, Same, NA, 1072, TTLocalizer.QuestDialogDict[1069]), 1070: (TT_TIER + 3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 's', 'track'), Same, Same, NA, 1072, TTLocalizer.QuestDialogDict[1070]), 1071: (TT_TIER + 3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Medium, 'c', 'track'), Same, Same, NA, 1072, TTLocalizer.QuestDialogDict[1071]), 1072: (TT_TIER + 3, Cont, (DeliverItemQuest, 13), Same, 2301, NA, 1073, TTLocalizer.QuestDialogDict[1072]), 1073: (TT_TIER + 3, Cont, (VisitQuest,), Any, 2201, NA, 1074, TTLocalizer.QuestDialogDict[1073]), 1074: (TT_TIER + 3, Cont, (RecoverItemQuest, Anywhere, 1, 13, Hard, Any), Same, Same, NA, 1075, TTLocalizer.QuestDialogDict[1074]), 1075: (TT_TIER + 3, Cont, (DeliverItemQuest, 13), Same, 2301, 900, NA, TTLocalizer.QuestDialogDict[1075]), 1076: (TT_TIER + 2, Start, (VisitQuest,), Any, 2217, NA, 1077, TTLocalizer.QuestDialogDict[1076]), 1077: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 1, 14, Medium, Any), 2217, Same, NA, 1078, TTLocalizer.QuestDialogDict[1077]), 1078: (TT_TIER + 2, Cont, (DeliverItemQuest, 14), Same, 2302, NA, 1079, TTLocalizer.QuestDialogDict[1078]), 1079: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 15, Easy, 'f'), Same, 2217, NA, 1080, TTLocalizer.QuestDialogDict[1079]), 1092: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 15, Easy, 'sc'), Same, 2217, NA, 1080, TTLocalizer.QuestDialogDict[1092]), 1080: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 4, 15, Easy, AnyFish), Same, Same, 500, NA, TTLocalizer.QuestDialogDict[1080]), 1081: (TT_TIER + 2, Start, (VisitQuest,), Any, 2208, NA, 1082, TTLocalizer.QuestDialogDict[1081]), 1082: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 1, 16, Medium, 's', 'track'), 2208, Same, NA, 1083, TTLocalizer.QuestDialogDict[1082]), 1083: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 17, Medium, 'l', 'track'), Same, Same, NA, 1084, TTLocalizer.QuestDialogDict[1083]), 1084: (TT_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 18, Medium, 'm', 'track'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[1084]), 1085: (TT_TIER + 2, Start, (VisitQuest,), Any, 2003, NA, 1086, TTLocalizer.QuestDialogDict[1085]), 1086: (TT_TIER + 2, Start, (RecoverItemQuest, Anywhere, 5, 2007, Easy, 2, 'level'), 2003, Same, NA, 1089, TTLocalizer.QuestDialogDict[1086]), 1089: (TT_TIER + 2, Cont, (DeliverItemQuest, 19), Same, ToonHQ, 100, NA, TTLocalizer.QuestDialogDict[1089]), 1090: (TT_TIER + 2, Start, (VisitQuest,), Any, 2119, NA, 1091, TTLocalizer.QuestDialogDict[1090]), 1091: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 8, 2), 2119, ToonHQ, 101, NA, TTLocalizer.QuestDialogDict[1091]), 1100: (TT_TIER + 2, Start, (CogQuest, ToontownGlobals.ToontownCentral, 10, Any), Any, ToonHQ, NA, 1101, DefaultDialog), 1101: (TT_TIER + 2, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), 1102: (TT_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.ToontownCentral, 8, 3), Any, ToonHQ, NA, 1103, DefaultDialog), 1103: (TT_TIER + 2, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), 1105: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), 1106: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 1107: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 1108: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 1109: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), 1110: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), 1111: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), 1112: (TT_TIER + 2, Start, (CogQuest, Anywhere, 2, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 401: (DD_TIER, Start, (TrackChoiceQuest, ToontownBattleGlobals.DROP_TRACK, ToontownBattleGlobals.LURE_TRACK), Any, ToonHQ, 400, NA, TTLocalizer.QuestDialogDict[401]), 2001: (DD_TIER, Start, (CogQuest, Anywhere, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2002: (DD_TIER, Start, (CogQuest, Anywhere, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2003: (DD_TIER, Start, (CogQuest, Anywhere, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2004: (DD_TIER, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2005: (DD_TIER, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2006: (DD_TIER, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2007: (DD_TIER, Start, (CogQuest, Anywhere, 9, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2008: (DD_TIER, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2009: (DD_TIER, Start, (CogQuest, Anywhere, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2010: (DD_TIER, Start, (CogLevelQuest, Anywhere, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2011: (DD_TIER, Start, (CogLevelQuest, Anywhere, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2012: (DD_TIER, Start, (CogLevelQuest, Anywhere, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2013: (DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2014: (DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2015: (DD_TIER, Start, (CogLevelQuest, Anywhere, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2816: (DD_TIER, Start, (CogLevelQuest, Anywhere, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2817: (DD_TIER, Start, (CogLevelQuest, Anywhere, 5, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2818: (DD_TIER, Start, (CogLevelQuest, Anywhere, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2819: (DD_TIER, Start, (CogLevelQuest, Anywhere, 7, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2020: (DD_TIER, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, NA, 2021, DefaultDialog), 2021: (DD_TIER, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), 2101: (DD_TIER + 1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2102: (DD_TIER + 1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2103: (DD_TIER + 1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2104: (DD_TIER + 1, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2105: (DD_TIER + 1, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2106: (DD_TIER + 1, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2107: (DD_TIER + 1, Start, (CogQuest, Anywhere, 6, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), 2108: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 2109: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 2110: (DD_TIER + 1, Start, (CogQuest, Anywhere, 3, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 2111: (DD_TIER + 1, Start, (CogQuest, Anywhere, 2, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 2112: (DD_TIER + 1, Start, (CogQuest, Anywhere, 1, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 2113: (DD_TIER + 1, Start, (CogQuest, Anywhere, 6, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), 2114: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 2115: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 2116: (DD_TIER + 1, Start, (CogQuest, Anywhere, 3, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 2117: (DD_TIER + 1, Start, (CogQuest, Anywhere, 2, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 2118: (DD_TIER + 1, Start, (CogQuest, Anywhere, 1, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 2119: (DD_TIER + 1, Start, (CogQuest, Anywhere, 6, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), 2120: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), 2121: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 2122: (DD_TIER + 1, Start, (CogQuest, Anywhere, 3, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 2123: (DD_TIER + 1, Start, (CogQuest, Anywhere, 2, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 2124: (DD_TIER + 1, Start, (CogQuest, Anywhere, 1, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 2125: (DD_TIER + 1, Start, (CogQuest, Anywhere, 6, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 2126: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 2127: (DD_TIER + 1, Start, (CogQuest, Anywhere, 4, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 2128: (DD_TIER + 1, Start, (CogQuest, Anywhere, 3, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 2129: (DD_TIER + 1, Start, (CogQuest, Anywhere, 2, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 2130: (DD_TIER + 1, Start, (CogQuest, Anywhere, 1, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 2131: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2132: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2133: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2134: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2135: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2136: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2137: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2138: (DD_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.DonaldsDock, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2139: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 2140: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 2141: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 2142: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 3, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 2143: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 2144: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 2145: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 2146: (DD_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.DonaldsDock, 5, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 2147: (DD_TIER + 1, Start, (CogTrackQuest, Anywhere, 7, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 2148: (DD_TIER + 1, Start, (CogTrackQuest, Anywhere, 7, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 2149: (DD_TIER + 1, Start, (CogTrackQuest, Anywhere, 7, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 2150: (DD_TIER + 1, Start, (CogTrackQuest, Anywhere, 7, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 2151: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, Any, 1), Any, ToonHQ, Any, NA, DefaultDialog), 2152: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 2153: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 2, Any, 1), Any, ToonHQ, Any, NA, DefaultDialog), 2154: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 2, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 2155: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, 'm', 1), Any, ToonHQ, Any, NA, DefaultDialog), 2156: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, 's', 1), Any, ToonHQ, Any, NA, DefaultDialog), 2157: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, 'c', 1), Any, ToonHQ, Any, NA, DefaultDialog), 2158: (DD_TIER + 1, Start, (BuildingQuest, Anywhere, 1, 'l', 1), Any, ToonHQ, Any, NA, DefaultDialog), 2159: (DD_TIER + 1, Start, (DeliverGagQuest, 2, ToontownBattleGlobals.THROW_TRACK, 1), Any, Any, Any, NA, DefaultDialog), 2160: (DD_TIER + 1, Start, (DeliverGagQuest, 1, ToontownBattleGlobals.SQUIRT_TRACK, 1), Any, Any, Any, NA, DefaultDialog), 2161: (DD_TIER + 1, Start, (DeliverGagQuest, 1, ToontownBattleGlobals.SQUIRT_TRACK, 2), Any, Any, Any, NA, DefaultDialog), 2162: (DD_TIER + 1, Start, (DeliverGagQuest, 2, ToontownBattleGlobals.THROW_TRACK, 2), Any, Any, Any, NA, DefaultDialog), 2201: (DD_TIER + 1, Start, (VisitQuest,), Any, 1101, NA, 2202, TTLocalizer.QuestDialogDict[2201]), 2202: (DD_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 2001, Medium, 'pp'), 1101, Same, 101, NA, TTLocalizer.QuestDialogDict[2202]), 2203: (DD_TIER + 1, Start, (VisitQuest,), Any, 1102, NA, 2204, TTLocalizer.QuestDialogDict[2203]), 2204: (DD_TIER + 1, Start, (DeliverItemQuest, 2002), 1102, 1104, NA, 2205, TTLocalizer.QuestDialogDict[2204]), 2205: (DD_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 2003, Medium, 'f'), Same, Same, NA, 2206, TTLocalizer.QuestDialogDict[2205]), 2206: (DD_TIER + 1, Cont, (DeliverItemQuest, 2004), Same, 1102, 201, NA, TTLocalizer.QuestDialogDict[2206]), 2207: (DD_TIER + 1, Start, (VisitQuest,), Any, 1201, NA, 2208, TTLocalizer.QuestDialogDict[2207]), 2208: (DD_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 2005, Easy, 'bs'), 1201, Same, 701, NA, TTLocalizer.QuestDialogDict[2208]), 2209: (DD_TIER + 1, Start, (VisitQuest,), Any, 1302, NA, 2210, TTLocalizer.QuestDialogDict[2209]), 2210: (DD_TIER + 1, Start, (VisitQuest,), 1302, 1301, NA, 2211, TTLocalizer.QuestDialogDict[2210]), 2211: (DD_TIER + 1, Cont, (CogQuest, ToontownGlobals.DonaldsDock, 5, 'mm'), Same, Same, NA, 2212, TTLocalizer.QuestDialogDict[2211]), 2212: (DD_TIER + 1, Cont, (DeliverItemQuest, 2006), Same, 1302, NA, 2213, TTLocalizer.QuestDialogDict[2212]), 2213: (DD_TIER + 1, Cont, (VisitQuest,), Same, 1202, NA, 2214, TTLocalizer.QuestDialogDict[2213]), 2214: (DD_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDock, 3, 2007, Hard, Any), Same, Same, NA, 2215, TTLocalizer.QuestDialogDict[2214]), 2215: (DD_TIER + 1, Cont, (DeliverItemQuest, 2008), Same, 1302, 301, NA, TTLocalizer.QuestDialogDict[2215]), 2500: (DD_TIER + 1, Start, (CogQuest, ToontownGlobals.DonaldsDock, 15, Any), Any, ToonHQ, NA, 2501, DefaultDialog), 2501: (DD_TIER + 1, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), 2801: (DD_TIER + 2, Start, (CogQuest, Anywhere, 3, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2802: (DD_TIER + 2, Start, (CogQuest, Anywhere, 4, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2803: (DD_TIER + 2, Start, (CogQuest, Anywhere, 5, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2804: (DD_TIER + 2, Start, (CogQuest, Anywhere, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2805: (DD_TIER + 2, Start, (CogQuest, Anywhere, 7, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2806: (DD_TIER + 2, Start, (CogQuest, Anywhere, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2807: (DD_TIER + 2, Start, (CogQuest, Anywhere, 9, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2808: (DD_TIER + 2, Start, (CogQuest, Anywhere, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2809: (DD_TIER + 2, Start, (CogQuest, Anywhere, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), 2810: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 2, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2811: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 3, 3), Any, ToonHQ, Any, NA, DefaultDialog), 2812: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 2, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2813: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 4, 4), Any, ToonHQ, Any, NA, DefaultDialog), 2814: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2815: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), 2816: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2817: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 5, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2818: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 6, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2819: (DD_TIER + 2, Start, (CogLevelQuest, Anywhere, 7, 6), Any, ToonHQ, Any, NA, DefaultDialog), 2820: (DD_TIER + 2, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, NA, 2821, DefaultDialog), 2821: (DD_TIER + 2, Cont, (DeliverItemQuest, 1000), Any, 1007, 1000, NA, DefaultDialog), 901: (DD_TIER + 2, Start, (VisitQuest,), Any, 1203, NA, 2902, TTLocalizer.QuestDialogDict[901]), 2902: (DD_TIER + 2, Start, (VisitQuest,), 1203, 1303, NA, 2903, TTLocalizer.QuestDialogDict[2902]), 2903: (DD_TIER + 2, Cont, (DeliverItemQuest, 2009), Same, 1106, NA, 2904, TTLocalizer.QuestDialogDict[2903]), 2904: (DD_TIER + 2, Cont, (DeliverItemQuest, 2010), Same, 1203, NA, 2905, TTLocalizer.QuestDialogDict[2904]), 2905: (DD_TIER + 2, Cont, (VisitQuest, 2009), Same, 1105, NA, 2906, TTLocalizer.QuestDialogDict[2905]), 2906: (DD_TIER + 2, Cont, (DeliverGagQuest, 3, ToontownBattleGlobals.SQUIRT_TRACK, 2), Same, Same, NA, 2907, TTLocalizer.QuestDialogDict[2906]), 2907: (DD_TIER + 2, Cont, (DeliverItemQuest, 2011), Same, 1203, NA, (2910, 2915, 2920), TTLocalizer.QuestDialogDict[2907]), 2910: (DD_TIER + 2, Cont, (VisitQuest,), Same, 1107, NA, 2911, TTLocalizer.QuestDialog_2910), 2911: (DD_TIER + 2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 4, 'm'), Same, Same, NA, 2925, TTLocalizer.QuestDialogDict[2911]), 2915: (DD_TIER + 2, Cont, (VisitQuest,), Same, 1204, NA, 2916, TTLocalizer.QuestDialog_2910), 2916: (DD_TIER + 2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 2, 's'), Same, Same, NA, 2925, TTLocalizer.QuestDialogDict[2916]), 2920: (DD_TIER + 2, Cont, (VisitQuest,), Same, 1204, NA, 2921, TTLocalizer.QuestDialog_2910), 2921: (DD_TIER + 2, Cont, (CogTrackQuest, ToontownGlobals.DonaldsDock, 6, 'c'), Same, Same, NA, 2925, TTLocalizer.QuestDialogDict[2921]), 2925: (DD_TIER + 2, Cont, (DeliverItemQuest, 2012), Same, 1203, NA, 2926, TTLocalizer.QuestDialogDict[2925]), 2926: (DD_TIER + 2, Cont, (BuildingQuest, ToontownGlobals.DonaldsDock, 1, Any, 2), Same, Same, 900, NA, TTLocalizer.QuestDialogDict[2926]), 3101: (DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 8, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3102: (DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3103: (DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3104: (DG_TIER, Start, (CogQuest, Anywhere, 14, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3105: (DG_TIER, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3106: (DG_TIER, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), 3107: (DG_TIER, Start, (CogQuest, Anywhere, 10, 'f'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3108: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'p'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3109: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'ym'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3110: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'mm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3111: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'ds'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3112: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'hh'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3113: (DG_TIER, Start, (CogQuest, Anywhere, 10, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), 3114: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 3115: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 3116: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 3117: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 3118: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 3119: (DG_TIER, Start, (CogQuest, Anywhere, 10, 'sc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3120: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'pp'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3121: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'tw'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3122: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'bc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3123: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'nc'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3124: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'mb'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3125: (DG_TIER, Start, (CogQuest, Anywhere, 10, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 3126: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 3127: (DG_TIER, Start, (CogQuest, Anywhere, 8, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 3128: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 3129: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 3130: (DG_TIER, Start, (CogQuest, Anywhere, 6, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 3131: (DG_TIER, Start, (CogLevelQuest, Anywhere, 10, 3), Any, ToonHQ, Any, NA, DefaultDialog), 3132: (DG_TIER, Start, (CogLevelQuest, Anywhere, 15, 3), Any, ToonHQ, Any, NA, DefaultDialog), 3133: (DG_TIER, Start, (CogLevelQuest, Anywhere, 8, 4), Any, ToonHQ, Any, NA, DefaultDialog), 3134: (DG_TIER, Start, (CogLevelQuest, Anywhere, 12, 4), Any, ToonHQ, Any, NA, DefaultDialog), 3135: (DG_TIER, Start, (CogLevelQuest, Anywhere, 4, 5), Any, ToonHQ, Any, NA, DefaultDialog), 3136: (DG_TIER, Start, (CogLevelQuest, Anywhere, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), 3137: (DG_TIER, Start, (CogLevelQuest, Anywhere, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), 3138: (DG_TIER, Start, (CogLevelQuest, Anywhere, 12, 6), Any, ToonHQ, Any, NA, DefaultDialog), 3139: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3140: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 3141: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3142: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 6, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 3143: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3144: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 3145: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3146: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.DaisyGardens, 10, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 3147: (DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'm'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3148: (DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 3149: (DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'c'), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3150: (DG_TIER, Start, (CogTrackQuest, Anywhere, 14, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 3151: (DG_TIER, Start, (BuildingQuest, Anywhere, 1, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 3152: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 3153: (DG_TIER, Start, (BuildingQuest, Anywhere, 3, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 3154: (DG_TIER, Start, (BuildingQuest, Anywhere, 4, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 3155: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'm', 2), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3156: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, 's', 2), Any, ToonHQ, Any, NA, DefaultDialog), 3157: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'c', 2), Any, ToonHQ, OBSOLETE, NA, DefaultDialog), 3158: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, 'l', 2), Any, ToonHQ, Any, NA, DefaultDialog), 3200: (DG_TIER, Start, (VisitQuest,), Any, 5101, NA, 3201, TTLocalizer.QuestDialogDict[3200]), 3201: (DG_TIER, Start, (DeliverItemQuest, 5001), 5101, 5206, NA, 3203, TTLocalizer.QuestDialogDict[3201]), 3203: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5002, VeryHard, Any), Same, Same, 100, NA, TTLocalizer.QuestDialogDict[3203]), 3204: (DG_TIER, Start, (VisitQuest,), Any, 5106, NA, 3205, TTLocalizer.QuestDialogDict[3204]), 3205: (DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5003, Medium, 'b'), 5106, Same, 100, NA, TTLocalizer.QuestDialogDict[3205]), 3206: (DG_TIER, Start, (VisitQuest,), Any, 5107, NA, 3207, TTLocalizer.QuestDialogDict[3206]), 3207: (DG_TIER, Start, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 10, 5004, VeryEasy, 'dt'), 5107, Same, 101, NA, TTLocalizer.QuestDialogDict[3207]), 3208: (DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 10, 'cc'), Any, ToonHQ, NA, 3209, TTLocalizer.QuestDialogDict[3208]), 3209: (DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 10, 'tm'), Same, Same, 202, NA, TTLocalizer.QuestDialogDict[3209]), 3247: (DG_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DaisyGardens, 20, 'b'), Any, ToonHQ, 202, NA, TTLocalizer.QuestDialogDict[3247]), 3210: (DG_TIER, Start, (DeliverGagQuest, 10, ToontownBattleGlobals.SQUIRT_TRACK, 0), Any, 5207, NA, 3211, TTLocalizer.QuestDialogDict[3210]), 3211: (DG_TIER, Cont, (CogQuest, 5200, 20, Any), Same, Same, 100, NA, TTLocalizer.QuestDialogDict[3211]), 3212: (DG_TIER, OBSOLETE, (VisitQuest,), Any, 5208, NA, 3213, TTLocalizer.QuestDialogDict[3212]), 3213: (DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5005, VeryHard, Any), 5208, Same, NA, 3214, TTLocalizer.QuestDialogDict[3213]), 3214: (DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5006, VeryHard, Any), Same, Same, NA, 3215, TTLocalizer.QuestDialogDict[3214]), 3215: (DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5007, VeryHard, Any), Same, Same, NA, 3216, TTLocalizer.QuestDialogDict[3215]), 3216: (DG_TIER, OBSOLETE, (RecoverItemQuest, ToontownGlobals.DaisyGardens, 1, 5008, VeryHard, Any), Same, Same, 202, NA, TTLocalizer.QuestDialogDict[3216]), 3217: (DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5010, VeryEasy, 'nd'), ToonHQ, ToonHQ, NA, 3218, TTLocalizer.QuestDialogDict[3217]), 3218: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'gh'), Same, Same, NA, 3219, TTLocalizer.QuestDialogDict[3218]), 3219: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, Easy, 'ms'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[3219]), 3244: (DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 5010, VeryEasy, 'ac'), ToonHQ, ToonHQ, NA, 3245, TTLocalizer.QuestDialogDict[3244]), 3245: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'bs'), Same, Same, NA, 3246, TTLocalizer.QuestDialogDict[3245]), 3246: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5010, VeryHard, 'sd'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[3246]), 3220: (DG_TIER, Start, (VisitQuest,), Any, 5207, NA, 3221, TTLocalizer.QuestDialogDict[3220]), 3221: (DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 20, Any), 5207, Same, 100, NA, TTLocalizer.QuestDialogDict[3221]), 3222: (DG_TIER, Start, (BuildingQuest, Anywhere, 2, Any, 1), ToonHQ, ToonHQ, NA, 3223, TTLocalizer.QuestDialogDict[3222]), 3223: (DG_TIER, Cont, (BuildingQuest, Anywhere, 2, Any, 2), Same, Same, NA, 3224, TTLocalizer.QuestDialogDict[3223]), 3224: (DG_TIER, Cont, (BuildingQuest, Anywhere, 2, Any, 3), Same, Same, 501, NA, TTLocalizer.QuestDialogDict[3224]), 3225: (DG_TIER, Start, (VisitQuest,), Any, 5108, NA, (3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234), TTLocalizer.QuestDialogDict[3225]), 3226: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5201, NA, 3235, TTLocalizer.QuestDialog_3225), 3227: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5203, NA, 3235, TTLocalizer.QuestDialog_3225), 3228: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5204, NA, 3235, TTLocalizer.QuestDialog_3225), 3229: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5205, NA, 3235, TTLocalizer.QuestDialog_3225), 3230: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5102, NA, 3235, TTLocalizer.QuestDialog_3225), 3231: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5103, NA, 3235, TTLocalizer.QuestDialog_3225), 3232: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5104, NA, 3235, TTLocalizer.QuestDialog_3225), 3233: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5105, NA, 3235, TTLocalizer.QuestDialog_3225), 3234: (DG_TIER, Start, (DeliverItemQuest, 5011), 5108, 5207, NA, 3235, TTLocalizer.QuestDialog_3225), 3235: (DG_TIER, Cont, (CogQuest, ToontownGlobals.DaisyGardens, 10, Any), Same, 5108, 100, NA, TTLocalizer.QuestDialogDict[3235]), 3236: (DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 3, 'l', 2), Any, ToonHQ, NA, 3237, TTLocalizer.QuestDialogDict[3236]), 3237: (DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 3, 's', 2), Same, Same, 702, NA, TTLocalizer.QuestDialogDict[3237]), 3238: (DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 2, VeryEasy, 'm'), Any, ToonHQ, NA, 3239, TTLocalizer.QuestDialogDict[3238]), 3239: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5012, Hard, 'm'), Same, Same, 302, NA, TTLocalizer.QuestDialogDict[3239]), 3242: (DG_TIER, Start, (RecoverItemQuest, Anywhere, 1, 2, VeryEasy, 'le'), Any, ToonHQ, NA, 3243, TTLocalizer.QuestDialogDict[3242]), 3243: (DG_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 5012, Hard, 'le'), Same, Same, 302, NA, TTLocalizer.QuestDialogDict[3243]), 3240: (DG_TIER, OBSOLETE, (RecoverItemQuest, Anywhere, 1, 5009, Hard, 'le'), Any, 5103, 102, NA, TTLocalizer.QuestDialogDict[3240]), 3241: (DG_TIER, OBSOLETE, (BuildingQuest, Anywhere, 5, Any, 3), Any, ToonHQ, 102, NA, TTLocalizer.QuestDialogDict[3241]), 3250: (DG_TIER, Start, (VisitQuest,), Any, 5317, NA, 3251, TTLocalizer.QuestDialogDict[3250]), 3251: (DG_TIER, Start, (CogTrackQuest, ToontownGlobals.SellbotHQ, 5, 's'), 5317, Same, NA, 3252, TTLocalizer.QuestDialogDict[3251]), 3252: (DG_TIER, Cont, (VisitQuest,), Same, 5311, NA, 3253, TTLocalizer.QuestDialogDict[3252]), 3253: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5013, Medium, 's', 'track'), Same, Same, NA, 3254, TTLocalizer.QuestDialogDict[3253]), 3254: (DG_TIER, Cont, (DeliverItemQuest, 5013), Same, 5317, 202, NA, TTLocalizer.QuestDialogDict[3254]), 3255: (DG_TIER, Start, (VisitQuest,), Any, 5314, NA, 3258, TTLocalizer.QuestDialogDict[3255]), 3256: (DG_TIER, Start, (VisitQuest,), Any, 5315, NA, 3258, TTLocalizer.QuestDialogDict[3256]), 3257: (DG_TIER, Start, (VisitQuest,), Any, 5316, NA, 3258, TTLocalizer.QuestDialogDict[3257]), 3258: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5014, VeryEasy, 's', 'track'), Same, Same, NA, 3259, TTLocalizer.QuestDialogDict[3258]), 3259: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5015, Easy, 's', 'track'), Same, Same, NA, 3260, TTLocalizer.QuestDialogDict[3259]), 3260: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5016, Easy, 's', 'track'), Same, Same, NA, 3261, TTLocalizer.QuestDialogDict[3260]), 3261: (DG_TIER, Cont, (RecoverItemQuest, ToontownGlobals.SellbotHQ, 1, 5017, Medium, 's', 'track'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[3261]), 3262: (DG_TIER, Start, (VisitQuest,), Any, 5313, NA, 3263, TTLocalizer.QuestDialogDict[3262]), 3263: (DG_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), 5313, 5313, 702, NA, TTLocalizer.QuestDialogDict[3263]), 3500: (DG_TIER, Start, (CogQuest, ToontownGlobals.DaisyGardens, 25, Any), Any, ToonHQ, NA, 3501, DefaultDialog), 3501: (DG_TIER, Cont, (DeliverItemQuest, 1000), Any, 5007, 1000, NA, DefaultDialog), 4001: (MM_TIER, Start, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.HEAL_TRACK), Any, ToonHQ, 400, NA, TTLocalizer.QuestDialogDict[4001]), 4002: (MM_TIER, Start, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.SOUND_TRACK), Any, ToonHQ, 400, NA, TTLocalizer.QuestDialogDict[4002]), 4010: (MM_TIER, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4011: (MM_TIER, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4012: (MM_TIER, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4013: (MM_TIER, Start, (CogQuest, Anywhere, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4014: (MM_TIER, Start, (CogQuest, Anywhere, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4015: (MM_TIER, Start, (CogQuest, Anywhere, 26, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4016: (MM_TIER, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4017: (MM_TIER, Start, (CogQuest, Anywhere, 30, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4018: (MM_TIER, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4019: (MM_TIER, Start, (CogQuest, Anywhere, 34, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4020: (MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4021: (MM_TIER, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4022: (MM_TIER, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4023: (MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4024: (MM_TIER, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4025: (MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4026: (MM_TIER, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4027: (MM_TIER, Start, (CogLevelQuest, Anywhere, 18, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4028: (MM_TIER, Start, (CogLevelQuest, Anywhere, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4029: (MM_TIER, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4030: (MM_TIER, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, NA, 4031, DefaultDialog), 4031: (MM_TIER, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), 4040: (MM_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4041: (MM_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 6, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4042: (MM_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 3, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4043: (MM_TIER, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4101: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4102: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4103: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4104: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4105: (MM_TIER + 1, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4106: (MM_TIER + 1, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4107: (MM_TIER + 1, Start, (CogQuest, Anywhere, 20, 'f'), Any, ToonHQ, Any, NA, DefaultDialog), 4108: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 4109: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 4110: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 4111: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 4112: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 4113: (MM_TIER + 1, Start, (CogQuest, Anywhere, 20, 'cc'), Any, ToonHQ, Any, NA, DefaultDialog), 4114: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 4115: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 4116: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 4117: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'ms'), None, ToonHQ, Any, NA, DefaultDialog), 4118: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'tf'), None, ToonHQ, Any, NA, DefaultDialog), 4119: (MM_TIER + 1, Start, (CogQuest, Anywhere, 20, 'sc'), Any, ToonHQ, Any, NA, DefaultDialog), 4120: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), 4121: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 4122: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 4123: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 4124: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 4125: (MM_TIER + 1, Start, (CogQuest, Anywhere, 20, 'bf'), Any, ToonHQ, Any, NA, DefaultDialog), 4126: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 4127: (MM_TIER + 1, Start, (CogQuest, Anywhere, 16, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 4128: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 4129: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 4130: (MM_TIER + 1, Start, (CogQuest, Anywhere, 12, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 4131: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4132: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4133: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4134: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4135: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4136: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4137: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4138: (MM_TIER + 1, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4139: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 4140: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 4141: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 4142: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 15, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 4143: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 4144: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 4145: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 4146: (MM_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 24, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 4147: (MM_TIER + 1, Start, (CogTrackQuest, Anywhere, 30, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 4148: (MM_TIER + 1, Start, (CogTrackQuest, Anywhere, 30, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 4149: (MM_TIER + 1, Start, (CogTrackQuest, Anywhere, 30, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 4150: (MM_TIER + 1, Start, (CogTrackQuest, Anywhere, 30, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 4151: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 1, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4152: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 2, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4153: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 3, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4154: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 4, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4155: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 3, 'm', 3), Any, ToonHQ, Any, NA, DefaultDialog), 4156: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 3, 's', 3), Any, ToonHQ, Any, NA, DefaultDialog), 4157: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 3, 'c', 3), Any, ToonHQ, Any, NA, DefaultDialog), 4158: (MM_TIER + 1, Start, (BuildingQuest, Anywhere, 3, 'l', 3), Any, ToonHQ, Any, NA, DefaultDialog), 4160: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 10, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4161: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4162: (MM_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 6, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4163: (MM_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 4164: (MM_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 4165: (MM_TIER + 1, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4166: (MM_TIER + 1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 4200: (MM_TIER + 1, Start, (VisitQuest,), Any, 4101, NA, 4201, TTLocalizer.QuestDialogDict[4200]), 4201: (MM_TIER + 1, Start, (VisitQuest,), 4101, 4201, NA, 4202, TTLocalizer.QuestDialogDict[4201]), 4202: (MM_TIER + 1, Cont, (DeliverItemQuest, 4001), Same, 4101, NA, 4203, TTLocalizer.QuestDialogDict[4202]), 4203: (MM_TIER + 1, Cont, (VisitQuest,), Same, 4301, NA, 4204, TTLocalizer.QuestDialogDict[4203]), 4204: (MM_TIER + 1, Cont, (CogQuest, ToontownGlobals.MinniesMelodyland, 10, Any), Same, Same, NA, 4205, TTLocalizer.QuestDialogDict[4204]), 4205: (MM_TIER + 1, Cont, (DeliverItemQuest, 4002), Same, 4101, NA, 4206, TTLocalizer.QuestDialogDict[4205]), 4206: (MM_TIER + 1, Cont, (VisitQuest,), Same, 4102, NA, 4207, TTLocalizer.QuestDialogDict[4206]), 4207: (MM_TIER + 1, Cont, (VisitQuest,), Same, 4108, NA, 4208, TTLocalizer.QuestDialogDict[4207]), 4208: (MM_TIER + 1, Cont, (DeliverGagQuest, 1, ToontownBattleGlobals.THROW_TRACK, 4), Same, Same, NA, 4209, TTLocalizer.QuestDialogDict[4208]), 4209: (MM_TIER + 1, Cont, (DeliverItemQuest, 4003), Same, 4102, NA, 4210, TTLocalizer.QuestDialogDict[4209]), 4210: (MM_TIER + 1, Cont, (DeliverItemQuest, 4004), Same, 4101, 203, NA, TTLocalizer.QuestDialogDict[4210]), 4211: (MM_TIER + 1, Start, (VisitQuest,), ToonHQ, 4103, NA, 4212, TTLocalizer.QuestDialogDict[4211]), 4212: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 10, 'nc'), 4103, Same, NA, 4213, TTLocalizer.QuestDialogDict[4212]), 4213: (MM_TIER + 1, Cont, (CogTrackQuest, ToontownGlobals.MinniesMelodyland, 20, 'm'), Same, Same, NA, 4214, TTLocalizer.QuestDialogDict[4213]), 4214: (MM_TIER + 1, Cont, (BuildingQuest, Anywhere, 1, 'm', Any), Same, Same, 303, NA, TTLocalizer.QuestDialogDict[4214]), 4215: (MM_TIER + 1, Start, (VisitQuest,), Any, 4302, NA, 4216, TTLocalizer.QuestDialogDict[4215]), 4216: (MM_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 4005, VeryHard, 'gh'), 4302, Same, NA, 4217, TTLocalizer.QuestDialogDict[4216]), 4217: (MM_TIER + 1, Cont, (DeliverItemQuest, 4005), Same, 4203, NA, 4218, TTLocalizer.QuestDialogDict[4217]), 4218: (MM_TIER + 1, Cont, (VisitQuest,), Any, 4302, NA, 4219, TTLocalizer.QuestDialogDict[4218]), 4219: (MM_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 4006, VeryHard, 'gh'), Same, Same, NA, 4220, TTLocalizer.QuestDialogDict[4219]), 4220: (MM_TIER + 1, Cont, (DeliverItemQuest, 4006), Same, 4308, NA, 4221, TTLocalizer.QuestDialogDict[4220]), 4221: (MM_TIER + 1, Cont, (VisitQuest,), Any, 4302, NA, 4222, TTLocalizer.QuestDialogDict[4221]), 4222: (MM_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 4007, VeryHard, 'gh'), Same, Same, NA, 4223, TTLocalizer.QuestDialogDict[4222]), 4223: (MM_TIER + 1, Cont, (DeliverItemQuest, 4007), Same, 4202, NA, 4224, TTLocalizer.QuestDialogDict[4223]), 4224: (MM_TIER + 1, Cont, (VisitQuest,), Any, 4302, 703, NA, TTLocalizer.QuestDialogDict[4224]), 4500: (MM_TIER + 1, Start, (CogQuest, ToontownGlobals.MinniesMelodyland, 40, Any), Any, ToonHQ, NA, 4501, DefaultDialog), 4501: (MM_TIER + 1, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), 902: (MM_TIER + 2, Start, (VisitQuest,), Any, 4303, NA, 4903, TTLocalizer.QuestDialogDict[902]), 4903: (MM_TIER + 2, Start, (DeliverItemQuest, 4008), 4303, 4109, NA, 4904, TTLocalizer.QuestDialogDict[4903]), 4904: (MM_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 4009, VeryHard, AnyFish), Same, Same, NA, 4905, TTLocalizer.QuestDialogDict[4904]), 4905: (MM_TIER + 2, Cont, (BuildingQuest, Anywhere, 1, Any, 1), Same, Same, NA, 4906, TTLocalizer.QuestDialogDict[4905]), 4906: (MM_TIER + 2, Cont, (DeliverItemQuest, 4010), Same, 4303, NA, 4907, TTLocalizer.QuestDialogDict[4906]), 4907: (MM_TIER + 2, Cont, (VisitQuest,), Same, 4208, NA, 4908, TTLocalizer.QuestDialogDict[4907]), 4908: (MM_TIER + 2, Cont, (BuildingQuest, Anywhere, 1, Any, 2), Same, Same, NA, 4909, TTLocalizer.QuestDialogDict[4908]), 4909: (MM_TIER + 2, Cont, (BuildingQuest, Anywhere, 1, Any, 3), Same, Same, NA, 4910, TTLocalizer.QuestDialogDict[4909]), 4910: (MM_TIER + 2, Cont, (DeliverItemQuest, 4011), Same, 4303, 900, NA, TTLocalizer.QuestDialogDict[4910]), 4810: (MM_TIER + 2, Start, (CogQuest, Anywhere, 16, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4811: (MM_TIER + 2, Start, (CogQuest, Anywhere, 18, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4812: (MM_TIER + 2, Start, (CogQuest, Anywhere, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4813: (MM_TIER + 2, Start, (CogQuest, Anywhere, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4814: (MM_TIER + 2, Start, (CogQuest, Anywhere, 24, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4815: (MM_TIER + 2, Start, (CogQuest, Anywhere, 26, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4816: (MM_TIER + 2, Start, (CogQuest, Anywhere, 28, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4817: (MM_TIER + 2, Start, (CogQuest, Anywhere, 30, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4818: (MM_TIER + 2, Start, (CogQuest, Anywhere, 32, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4819: (MM_TIER + 2, Start, (CogQuest, Anywhere, 34, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4820: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 20, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4821: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 25, 3), Any, ToonHQ, Any, NA, DefaultDialog), 4822: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4823: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 20, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4824: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4825: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4826: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4827: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 18, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4828: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4829: (MM_TIER + 2, Start, (CogLevelQuest, Anywhere, 24, 6), Any, ToonHQ, Any, NA, DefaultDialog), 4830: (MM_TIER + 2, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, NA, 4831, DefaultDialog), 4831: (MM_TIER + 2, Cont, (DeliverItemQuest, 1000), Any, 4008, 1000, NA, DefaultDialog), 4840: (MM_TIER + 2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 12, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4841: (MM_TIER + 2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 15, Any), Any, ToonHQ, Any, NA, DefaultDialog), 4842: (MM_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 4), Any, ToonHQ, Any, NA, DefaultDialog), 4843: (MM_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4844: (MM_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 4845: (MM_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 4846: (MM_TIER + 2, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4847: (MM_TIER + 2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 5), Any, ToonHQ, Any, NA, DefaultDialog), 4848: (MM_TIER + 2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5247: (BR_TIER, Start, (VisitQuest,), Any, 3112, NA, 5248, TTLocalizer.QuestDialogDict[5247]), 5248: (BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 8), 3112, Same, NA, 5249, TTLocalizer.QuestDialogDict[5248]), 5249: (BR_TIER, Cont, (RecoverItemQuest, Anywhere, 3, 3018, VeryHard, AnyFish), Same, Same, NA, (5250, 5258, 5259, 5260), TTLocalizer.QuestDialogDict[5249]), 5250: (BR_TIER, Cont, (BuildingQuest, Anywhere, 2, 'l', 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), TTLocalizer.QuestDialogDict[5250]), 5258: (BR_TIER, Cont, (BuildingQuest, Anywhere, 2, 'c', 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), TTLocalizer.QuestDialogDict[5258]), 5259: (BR_TIER, Cont, (BuildingQuest, Anywhere, 2, 'm', 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), TTLocalizer.QuestDialogDict[5259]), 5260: (BR_TIER, Cont, (BuildingQuest, Anywhere, 2, 's', 4), Same, Same, NA, (5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008), TTLocalizer.QuestDialogDict[5260]), 5001: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.SOUND_TRACK, ToontownBattleGlobals.DROP_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5002: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.SOUND_TRACK, ToontownBattleGlobals.LURE_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5003: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.HEAL_TRACK, ToontownBattleGlobals.DROP_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5004: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.HEAL_TRACK, ToontownBattleGlobals.LURE_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5005: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.SOUND_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5006: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.HEAL_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5007: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.DROP_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5008: (BR_TIER, Cont, (TrackChoiceQuest, ToontownBattleGlobals.TRAP_TRACK, ToontownBattleGlobals.LURE_TRACK), Same, Same, 400, NA, TTLocalizer.TheBrrrghTrackQuestDict), 5020: (BR_TIER, Start, (CogQuest, Anywhere, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5021: (BR_TIER, Start, (CogQuest, Anywhere, 38, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5022: (BR_TIER, Start, (CogQuest, Anywhere, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5023: (BR_TIER, Start, (CogQuest, Anywhere, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5024: (BR_TIER, Start, (CogQuest, Anywhere, 44, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5025: (BR_TIER, Start, (CogQuest, Anywhere, 46, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5026: (BR_TIER, Start, (CogQuest, Anywhere, 48, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5027: (BR_TIER, Start, (CogQuest, Anywhere, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5028: (BR_TIER, Start, (CogQuest, Anywhere, 52, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5029: (BR_TIER, Start, (CogQuest, Anywhere, 54, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5030: (BR_TIER, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5031: (BR_TIER, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5032: (BR_TIER, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5033: (BR_TIER, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5034: (BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5035: (BR_TIER, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5036: (BR_TIER, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5037: (BR_TIER, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5038: (BR_TIER, Start, (CogLevelQuest, Anywhere, 10, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5039: (BR_TIER, Start, (CogLevelQuest, Anywhere, 12, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5040: (BR_TIER, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, 5041, DefaultDialog), 5041: (BR_TIER, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), 5060: (BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5061: (BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5062: (BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5063: (BR_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 5, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5064: (BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5065: (BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5066: (BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5067: (BR_TIER, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5070: (BR_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 20, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5071: (BR_TIER, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5072: (BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 15, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5073: (BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5074: (BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5075: (BR_TIER, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5076: (BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5077: (BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5078: (BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5079: (BR_TIER, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5080: (BR_TIER, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 10), Any, ToonHQ, Any, NA, DefaultDialog), 5081: (BR_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 5, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5082: (BR_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 2, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5083: (BR_TIER, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5084: (BR_TIER, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5101: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5102: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5103: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5104: (BR_TIER + 1, Start, (CogQuest, Anywhere, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5105: (BR_TIER + 1, Start, (CogQuest, Anywhere, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5106: (BR_TIER + 1, Start, (CogQuest, Anywhere, 55, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5107: (BR_TIER + 1, Start, (CogQuest, Anywhere, 25, 'p'), Any, ToonHQ, Any, NA, DefaultDialog), 5108: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 5109: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 5110: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 5111: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 5112: (BR_TIER + 1, Start, (CogQuest, Anywhere, 8, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), 5113: (BR_TIER + 1, Start, (CogQuest, Anywhere, 25, 'tm'), Any, ToonHQ, Any, NA, DefaultDialog), 5114: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 5115: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 5116: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 5117: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 5118: (BR_TIER + 1, Start, (CogQuest, Anywhere, 8, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 5119: (BR_TIER + 1, Start, (CogQuest, Anywhere, 25, 'pp'), Any, ToonHQ, Any, NA, DefaultDialog), 5120: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 5121: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 5122: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 5123: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 5124: (BR_TIER + 1, Start, (CogQuest, Anywhere, 8, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), 5125: (BR_TIER + 1, Start, (CogQuest, Anywhere, 25, 'b'), Any, ToonHQ, Any, NA, DefaultDialog), 5126: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 5127: (BR_TIER + 1, Start, (CogQuest, Anywhere, 20, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 5128: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 5129: (BR_TIER + 1, Start, (CogQuest, Anywhere, 15, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 5130: (BR_TIER + 1, Start, (CogQuest, Anywhere, 8, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), 5131: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5132: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5133: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5134: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5135: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5136: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5137: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5138: (BR_TIER + 1, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5139: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 5140: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 5141: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 5142: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 32, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 5143: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 5144: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 5145: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 5146: (BR_TIER + 1, Start, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 40, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 5147: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 45, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 5148: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 45, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 5149: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 45, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 5150: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 45, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 5151: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 8, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 5152: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 2, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5153: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 5, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5154: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 6, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5155: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 2, 'm', 4), Any, ToonHQ, Any, NA, DefaultDialog), 5156: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 2, 's', 4), Any, ToonHQ, Any, NA, DefaultDialog), 5157: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 2, 'c', 4), Any, ToonHQ, Any, NA, DefaultDialog), 5158: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 2, 'l', 4), Any, ToonHQ, Any, NA, DefaultDialog), 5160: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5161: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.SellbotHQ, 25, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5162: (BR_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5163: (BR_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5164: (BR_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 14, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5165: (BR_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5166: (BR_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5167: (BR_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5168: (BR_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5169: (BR_TIER + 1, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5170: (BR_TIER + 1, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 12), Any, ToonHQ, Any, NA, DefaultDialog), 5171: (BR_TIER + 1, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5172: (BR_TIER + 1, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5173: (BR_TIER + 1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5174: (BR_TIER + 1, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5200: (BR_TIER + 1, Start, (VisitQuest,), Any, 3110, NA, (5201, 5261, 5262, 5263), TTLocalizer.QuestDialogDict[5200]), 5201: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'hh'), 3110, Same, 100, NA, TTLocalizer.QuestDialogDict[5201]), 5261: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'tf'), 3110, Same, 100, NA, TTLocalizer.QuestDialogDict[5261]), 5262: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'mb'), 3110, Same, 100, NA, TTLocalizer.QuestDialogDict[5262]), 5263: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 3001, VeryHard, 'sd'), 3110, Same, 100, NA, TTLocalizer.QuestDialogDict[5263]), 5202: (BR_TIER + 1, Start, (VisitQuest,), Any, 3108, NA, 5203, TTLocalizer.QuestDialogDict[5202]), 5203: (BR_TIER + 1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3002, VeryHard, Any), 3108, Same, NA, 5204, TTLocalizer.QuestDialogDict[5203]), 5204: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3205, NA, 5205, TTLocalizer.QuestDialogDict[5204]), 5205: (BR_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 3, 3003, Hard, AnyFish), Same, Same, NA, 5206, TTLocalizer.QuestDialogDict[5205]), 5206: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3210, NA, 5207, TTLocalizer.QuestDialogDict[5206]), 5207: (BR_TIER + 1, Cont, (BuildingQuest, Anywhere, 5, Any, 4), Same, Same, NA, 5208, TTLocalizer.QuestDialogDict[5207]), 5208: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3114, NA, 5209, TTLocalizer.QuestDialogDict[5208]), 5209: (BR_TIER + 1, Cont, (CogLevelQuest, Anywhere, 20, 7), Same, Same, 204, NA, TTLocalizer.QuestDialogDict[5209]), 5210: (BR_TIER + 1, Start, (VisitQuest,), Any, 3206, NA, (5211, 5264, 5265, 5266), TTLocalizer.QuestDialogDict[5210]), 5211: (BR_TIER + 1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Medium, 'le'), 3206, Same, NA, 5212, TTLocalizer.QuestDialogDict[5211]), 5264: (BR_TIER + 1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'ls'), 3206, Same, NA, 5212, TTLocalizer.QuestDialogDict[5264]), 5265: (BR_TIER + 1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'm'), 3206, Same, NA, 5212, TTLocalizer.QuestDialogDict[5265]), 5266: (BR_TIER + 1, Start, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 1, 3004, Hard, 'cr'), 3206, Same, NA, 5212, TTLocalizer.QuestDialogDict[5266]), 5212: (BR_TIER + 1, Cont, (DeliverItemQuest, 3004), Same, 3111, NA, 5213, TTLocalizer.QuestDialogDict[5212]), 5213: (BR_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.TheBrrrgh, 10, 3005, Hard, Any), Same, Same, NA, 5214, TTLocalizer.QuestDialogDict[5213]), 5214: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3119, NA, 5215, TTLocalizer.QuestDialogDict[5214]), 5215: (BR_TIER + 1, Cont, (CogLevelQuest, Anywhere, 10, 8), Same, Same, NA, 5216, TTLocalizer.QuestDialogDict[5215]), 5216: (BR_TIER + 1, Cont, (DeliverItemQuest, 3006), Same, 3206, 704, NA, TTLocalizer.QuestDialogDict[5216]), 5217: (BR_TIER + 1, Start, (VisitQuest,), Any, 3113, NA, 5218, TTLocalizer.QuestDialogDict[5217]), 5218: (BR_TIER + 1, Start, (CogQuest, Anywhere, 10, 'm'), 3113, Same, NA, 5219, TTLocalizer.QuestDialogDict[5218]), 5219: (BR_TIER + 1, Cont, (CogQuest, Anywhere, 10, 'cr'), Same, Same, NA, 5220, TTLocalizer.QuestDialogDict[5219]), 5220: (BR_TIER + 1, Cont, (CogQuest, Anywhere, 10, 'ls'), Same, Same, NA, 5221, TTLocalizer.QuestDialogDict[5220]), 5221: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3211, NA, 5222, TTLocalizer.QuestDialogDict[5221]), 5222: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 2, 3007, Hard, AnyFish), Same, Same, NA, 5223, TTLocalizer.QuestDialogDict[5222]), 5223: (BR_TIER + 1, Cont, (DeliverItemQuest, 3008), Same, 3113, NA, 5224, TTLocalizer.QuestDialogDict[5223]), 5224: (BR_TIER + 1, Cont, (CogQuest, Anywhere, 5, 'le'), Same, Same, 502, NA, TTLocalizer.QuestDialogDict[5224]), 5225: (BR_TIER + 1, Start, (VisitQuest,), Any, 3106, NA, 5226, TTLocalizer.QuestDialogDict[5225]), 5226: (BR_TIER + 1, Start, (BuildingQuest, Anywhere, 3, 'm', 4), 3106, Same, NA, 5227, TTLocalizer.QuestDialogDict[5226]), 5227: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3208, NA, 5228, TTLocalizer.QuestDialogDict[5227]), 5228: (BR_TIER + 1, Cont, (DeliverItemQuest, 3009), Same, 3207, NA, (5229, 5267, 5268, 5269), TTLocalizer.QuestDialogDict[5228]), 5229: (BR_TIER + 1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'm'), Same, Same, NA, 5230, TTLocalizer.QuestDialogDict[5229]), 5267: (BR_TIER + 1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 's'), Same, Same, NA, 5230, TTLocalizer.QuestDialogDict[5267]), 5268: (BR_TIER + 1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'l'), Same, Same, NA, 5230, TTLocalizer.QuestDialogDict[5268]), 5269: (BR_TIER + 1, Cont, (CogTrackQuest, ToontownGlobals.TheBrrrgh, 8, 'c'), Same, Same, NA, (5230, 5270, 5271, 5272), TTLocalizer.QuestDialogDict[5269]), 5230: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'rb'), Same, Same, NA, 5231, TTLocalizer.QuestDialogDict[5230]), 5270: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'tbc'), Same, Same, NA, 5231, TTLocalizer.QuestDialogDict[5270]), 5271: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Hard, 'mh'), Same, Same, NA, 5231, TTLocalizer.QuestDialogDict[5271]), 5272: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3010, Medium, 'bw'), Same, Same, NA, 5231, TTLocalizer.QuestDialogDict[5272]), 5231: (BR_TIER + 1, Cont, (DeliverItemQuest, 3010), Same, 3208, NA, 5232, TTLocalizer.QuestDialogDict[5231]), 5232: (BR_TIER + 1, Cont, (VisitQuest,), Same, 3106, NA, 5233, TTLocalizer.QuestDialogDict[5232]), 5233: (BR_TIER + 1, Cont, (DeliverItemQuest, 3011), Same, 3208, 304, NA, TTLocalizer.QuestDialogDict[5233]), 5243: (BR_TIER + 1, Start, (VisitQuest,), Any, 3217, NA, 5244, TTLocalizer.QuestDialogDict[5243]), 5244: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 2007, VeryHard, 'mm'), 3217, Same, NA, 5245, TTLocalizer.QuestDialogDict[5244]), 5245: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3017, Hard, AnyFish), Same, Same, NA, 5246, TTLocalizer.QuestDialogDict[5245]), 5246: (BR_TIER + 1, Cont, (BuildingQuest, ToontownGlobals.TheBrrrgh, 5, Any, 1), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[5246]), 5251: (BR_TIER + 1, Start, (VisitQuest,), Any, 3134, NA, 5252, TTLocalizer.QuestDialogDict[5251]), 5252: (BR_TIER + 1, Start, (RecoverItemQuest, Anywhere, 1, 3019, VeryHard, Any), 3134, Same, NA, (5253, 5273, 5274, 5275), TTLocalizer.QuestDialogDict[5252]), 5253: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, 'cr'), Same, Same, NA, (5254, 5282, 5283, 5284), TTLocalizer.QuestDialogDict[5253]), 5273: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, 'm'), Same, Same, NA, (5254, 5282, 5283, 5284), TTLocalizer.QuestDialogDict[5273]), 5274: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, VeryHard, 'ls'), Same, Same, NA, (5254, 5282, 5283, 5284), TTLocalizer.QuestDialogDict[5274]), 5275: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3020, Hard, 'le'), Same, Same, NA, (5254, 5282, 5283, 5284), TTLocalizer.QuestDialogDict[5275]), 5254: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, 'mh'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[5254]), 5282: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, 'tbc'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[5282]), 5283: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, VeryHard, 'rb'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[5283]), 5284: (BR_TIER + 1, Cont, (RecoverItemQuest, Anywhere, 1, 3021, Hard, 'bw'), Same, Same, 102, NA, TTLocalizer.QuestDialogDict[5284]), 5255: (BR_TIER + 1, Start, (VisitQuest,), Any, 3228, NA, (5256, 5276), TTLocalizer.QuestDialogDict[5255]), 5256: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 45, 'c'), 3228, Same, NA, (5257, 5277), TTLocalizer.QuestDialogDict[5256]), 5276: (BR_TIER + 1, Start, (CogTrackQuest, Anywhere, 40, 'l'), 3228, Same, NA, (5257, 5277), TTLocalizer.QuestDialogDict[5276]), 5257: (BR_TIER + 1, Cont, (CogTrackQuest, Anywhere, 45, 's'), Same, Same, 100, NA, TTLocalizer.QuestDialogDict[5257]), 5277: (BR_TIER + 1, Cont, (CogTrackQuest, Anywhere, 45, 'm'), Same, Same, 100, NA, TTLocalizer.QuestDialogDict[5277]), 5290: (BR_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5291: (BR_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5292: (BR_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5293: (BR_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 12, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5294: (BR_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5295: (BR_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5296: (BR_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5297: (BR_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5500: (BR_TIER + 1, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, 5501, DefaultDialog), 5501: (BR_TIER + 1, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), 903: (BR_TIER + 2, Start, (VisitQuest,), Any, 3112, NA, (5234, 5278), TTLocalizer.QuestDialogDict[903]), 5234: (BR_TIER + 2, Start, (RecoverItemQuest, Anywhere, 6, 3012, Medium, 'tbc'), 3112, Same, NA, (5235, 5279), TTLocalizer.QuestDialogDict[5234]), 5278: (BR_TIER + 2, Start, (RecoverItemQuest, Anywhere, 6, 3022, Medium, 'mh'), 3112, Same, NA, (5235, 5279), TTLocalizer.QuestDialogDict[5278]), 5235: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3013, Hard, 'rb'), Same, Same, NA, 5236, TTLocalizer.QuestDialogDict[5235]), 5279: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3013, Medium, 'bw'), Same, Same, NA, 5236, TTLocalizer.QuestDialogDict[5279]), 5236: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3014, VeryHard, AnyFish), Same, Same, NA, 5237, TTLocalizer.QuestDialogDict[5236]), 5237: (BR_TIER + 2, Cont, (VisitQuest,), Same, 3128, NA, (5238, 5280), TTLocalizer.QuestDialogDict[5237]), 5238: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 10, 3015, VeryEasy, 'mh'), Same, Same, NA, 5239, TTLocalizer.QuestDialogDict[5238]), 5280: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 10, 3015, VeryEasy, 'tbc'), Same, Same, NA, 5239, TTLocalizer.QuestDialogDict[5280]), 5239: (BR_TIER + 2, Cont, (DeliverItemQuest, 3015), Same, 3112, NA, (5240, 5281), TTLocalizer.QuestDialogDict[5239]), 5240: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3016, Hard, 'bw'), Same, Same, NA, 5241, TTLocalizer.QuestDialogDict[5240]), 5281: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3023, Hard, 'mh'), Same, Same, NA, 5241, TTLocalizer.QuestDialogDict[5281]), 5241: (BR_TIER + 2, Cont, (BuildingQuest, Anywhere, 20, Any, 4), Same, Same, NA, 5242, TTLocalizer.QuestDialogDict[5241]), 5242: (BR_TIER + 2, Cont, (RecoverItemQuest, Anywhere, 1, 3014, VeryHard, AnyFish), Same, Same, 900, NA, TTLocalizer.QuestDialogDict[5242]), 5320: (BR_TIER + 2, Start, (CogQuest, Anywhere, 36, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5321: (BR_TIER + 2, Start, (CogQuest, Anywhere, 38, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5322: (BR_TIER + 2, Start, (CogQuest, Anywhere, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5323: (BR_TIER + 2, Start, (CogQuest, Anywhere, 42, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5324: (BR_TIER + 2, Start, (CogQuest, Anywhere, 44, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5325: (BR_TIER + 2, Start, (CogQuest, Anywhere, 46, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5326: (BR_TIER + 2, Start, (CogQuest, Anywhere, 48, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5327: (BR_TIER + 2, Start, (CogQuest, Anywhere, 53, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5328: (BR_TIER + 2, Start, (CogQuest, Anywhere, 52, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5329: (BR_TIER + 2, Start, (CogQuest, Anywhere, 54, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5330: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 25, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5331: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5332: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 35, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5333: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 6, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5334: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 10, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5335: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 20, 7), Any, ToonHQ, Any, NA, DefaultDialog), 5336: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 2, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5337: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 8, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5338: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 10, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5339: (BR_TIER + 2, Start, (CogLevelQuest, Anywhere, 12, 8), Any, ToonHQ, Any, NA, DefaultDialog), 5340: (BR_TIER + 2, Start, (CogQuest, ToontownGlobals.TheBrrrgh, 75, Any), Any, ToonHQ, NA, 5341, DefaultDialog), 5341: (BR_TIER + 2, Cont, (DeliverItemQuest, 1000), Any, 3008, 1000, NA, DefaultDialog), 5360: (BR_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5361: (BR_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5362: (BR_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5363: (BR_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 20, Any, NEWBIE_HP), Any, ToonHQ, 606, NA, DefaultDialog), 5364: (BR_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5365: (BR_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5366: (BR_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5367: (BR_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 1, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 5370: (BR_TIER + 2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 22, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5371: (BR_TIER + 2, Start, (CogQuest, ToontownGlobals.SellbotHQ, 25, Any), Any, ToonHQ, Any, NA, DefaultDialog), 5372: (BR_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 16, 4), Any, ToonHQ, Any, NA, DefaultDialog), 5373: (BR_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotHQ, 12, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5374: (BR_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 14, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5375: (BR_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5376: (BR_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5377: (BR_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5378: (BR_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5379: (BR_TIER + 2, Start, (FactoryQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 5380: (BR_TIER + 2, Start, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 12), Any, ToonHQ, Any, NA, DefaultDialog), 5381: (BR_TIER + 2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 6, 5), Any, ToonHQ, Any, NA, DefaultDialog), 5382: (BR_TIER + 2, Start, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 3, 6), Any, ToonHQ, Any, NA, DefaultDialog), 5383: (BR_TIER + 2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 1), Any, ToonHQ, Any, NA, DefaultDialog), 5384: (BR_TIER + 2, Start, (ForemanQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 6101: (DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6102: (DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 65, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6103: (DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.DonaldsDreamland, 70, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6104: (DL_TIER, Start, (CogQuest, Anywhere, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6105: (DL_TIER, Start, (CogQuest, Anywhere, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6106: (DL_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6107: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 6108: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 6109: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 6110: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 6111: (DL_TIER, Start, (CogQuest, Anywhere, 15, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), 6112: (DL_TIER, Start, (CogQuest, Anywhere, 8, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), 6113: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 6114: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 6115: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 6116: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 6117: (DL_TIER, Start, (CogQuest, Anywhere, 15, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 6118: (DL_TIER, Start, (CogQuest, Anywhere, 8, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), 6119: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 6120: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 6121: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 6122: (DL_TIER, OBSOLETE, (CogQuest, Anywhere, 25, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 6123: (DL_TIER, Start, (CogQuest, Anywhere, 15, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), 6124: (DL_TIER, Start, (CogQuest, Anywhere, 8, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), 6125: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 6126: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 6127: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 6128: (DL_TIER, Start, (CogQuest, Anywhere, 25, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 6129: (DL_TIER, Start, (CogQuest, Anywhere, 15, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), 6130: (DL_TIER, Start, (CogQuest, Anywhere, 8, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), 6131: (DL_TIER, Start, (CogLevelQuest, Anywhere, 50, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6132: (DL_TIER, Start, (CogLevelQuest, Anywhere, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), 6133: (DL_TIER, Start, (CogLevelQuest, Anywhere, 35, 7), Any, ToonHQ, Any, NA, DefaultDialog), 6134: (DL_TIER, Start, (CogLevelQuest, Anywhere, 30, 8), Any, ToonHQ, Any, NA, DefaultDialog), 6135: (DL_TIER, Start, (CogLevelQuest, Anywhere, 25, 9), Any, ToonHQ, Any, NA, DefaultDialog), 6136: (DL_TIER, Start, (CogLevelQuest, Anywhere, 20, 9), Any, ToonHQ, Any, NA, DefaultDialog), 6137: (DL_TIER, Start, (CogLevelQuest, Anywhere, 15, 9), Any, ToonHQ, Any, NA, DefaultDialog), 6138: (DL_TIER, Start, (CogLevelQuest, Anywhere, 10, 10), Any, ToonHQ, Any, NA, DefaultDialog), 6139: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 6140: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 6141: (DL_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 6142: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 6143: (DL_TIER, OBSOLETE, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 6144: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 6145: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 6146: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 6147: (DL_TIER, OBSOLETE, (CogTrackQuest, Anywhere, 70, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 6148: (DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 6149: (DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 6150: (DL_TIER, Start, (CogTrackQuest, Anywhere, 70, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 6151: (DL_TIER, Start, (BuildingQuest, Anywhere, 10, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 6152: (DL_TIER, Start, (BuildingQuest, Anywhere, 6, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6153: (DL_TIER, OBSOLETE, (BuildingQuest, Anywhere, 8, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6154: (DL_TIER, Start, (BuildingQuest, Anywhere, 6, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6155: (DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), 6156: (DL_TIER, Start, (BuildingQuest, Anywhere, 2, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), 6157: (DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), 6158: (DL_TIER, Start, (BuildingQuest, Anywhere, 2, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), 6160: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 6161: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 6162: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 6163: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 25, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 6164: (DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 6165: (DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 6166: (DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 6167: (DL_TIER, Start, (BuildingNewbieQuest, Anywhere, 2, Any, 1, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 6170: (DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6171: (DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6172: (DL_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6173: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 30, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6174: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6175: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6176: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 15, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6177: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), 6178: (DL_TIER, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 10, 6), Any, ToonHQ, Any, NA, DefaultDialog), 6179: (DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), 6180: (DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6181: (DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), 6182: (DL_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6183: (DL_TIER, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 20), Any, ToonHQ, Any, NA, DefaultDialog), 6184: (DL_TIER, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 10, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6185: (DL_TIER, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 4, 6), Any, ToonHQ, Any, NA, DefaultDialog), 6186: (DL_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), 6187: (DL_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6190: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6191: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6192: (DL_TIER, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 15, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6193: (DL_TIER, Start, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6194: (DL_TIER, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6195: (DL_TIER, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6196: (DL_TIER, Start, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 6201: (DL_TIER, Start, (VisitQuest,), Any, 9111, NA, 6202, TTLocalizer.QuestDialogDict[6201]), 6202: (DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 70, Any), 9111, Same, 100, NA, TTLocalizer.QuestDialogDict[6202]), 6206: (DL_TIER, Start, (VisitQuest,), Any, 9131, NA, 6207, TTLocalizer.QuestDialogDict[6206]), 6207: (DL_TIER, Start, (BuildingQuest, ToontownGlobals.DonaldsDreamland, 8, Any, 4), 9131, Same, 205, NA, TTLocalizer.QuestDialogDict[6207]), 6211: (DL_TIER, Start, (VisitQuest,), Any, 9217, NA, 6212, TTLocalizer.QuestDialogDict[6211]), 6212: (DL_TIER, Start, (RecoverItemQuest, Anywhere, 3, 6002, Medium, 'bc'), 9217, Same, NA, 6213, TTLocalizer.QuestDialogDict[6212]), 6213: (DL_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 6003, Hard, 'mb'), Same, Same, NA, 6214, TTLocalizer.QuestDialogDict[6213]), 6214: (DL_TIER, Cont, (RecoverItemQuest, Anywhere, 1, 6004, VeryHard, 'pp'), Same, Same, 101, NA, TTLocalizer.QuestDialogDict[6214]), 6221: (DL_TIER, Start, (VisitQuest,), Any, 9119, NA, 6222, TTLocalizer.QuestDialogDict[6221]), 6222: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 50, 'c'), 9119, Same, 102, NA, TTLocalizer.QuestDialogDict[6222]), 6231: (DL_TIER, Start, (VisitQuest,), Any, 9203, NA, 6232, TTLocalizer.QuestDialogDict[6231]), 6232: (DL_TIER, Start, (VisitQuest,), 9203, 9103, NA, 6233, TTLocalizer.QuestDialogDict[6232]), 6233: (DL_TIER, Cont, (CogTrackQuest, ToontownGlobals.CashbotHQ, 10, 'm'), Same, Same, NA, 6234, TTLocalizer.QuestDialogDict[6233]), 6234: (DL_TIER, Cont, (VisitQuest,), Same, 9203, NA, 6235, TTLocalizer.QuestDialogDict[6234]), 6235: (DL_TIER, Cont, (RecoverItemQuest, ToontownGlobals.CashbotHQ, 1, 6001, VeryHard, 'm', 'track'), Same, Same, 4000, NA, TTLocalizer.QuestDialogDict[6235]), 6241: (DL_TIER, Start, (VisitQuest,), Any, 9219, NA, 6242, TTLocalizer.QuestDialogDict[6241]), 6242: (DL_TIER, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 25, 'nc'), 9219, Same, 705, NA, TTLocalizer.QuestDialogDict[6242]), 6251: (DL_TIER, Start, (VisitQuest,), Any, 9221, NA, 6252, TTLocalizer.QuestDialogDict[6251]), 6252: (DL_TIER, Start, (DeliverItemQuest, 6006), 9221, 9222, NA, 6253, TTLocalizer.QuestDialogDict[6252]), 6253: (DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6254, TTLocalizer.QuestDialogDict[6253]), 6254: (DL_TIER, Cont, (DeliverItemQuest, 6007), Same, 9210, NA, 6255, TTLocalizer.QuestDialogDict[6254]), 6255: (DL_TIER, Cont, (CogTrackQuest, Anywhere, 70, 'm'), Same, Same, NA, 6256, TTLocalizer.QuestDialogDict[6255]), 6256: (DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6257, TTLocalizer.QuestDialogDict[6256]), 6257: (DL_TIER, Cont, (DeliverItemQuest, 6008), Same, 9205, NA, 6258, TTLocalizer.QuestDialogDict[6257]), 6258: (DL_TIER, Cont, (CogQuest, Anywhere, 25, 'ms'), Same, Same, NA, 6259, TTLocalizer.QuestDialogDict[6258]), 6259: (DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6260, TTLocalizer.QuestDialogDict[6259]), 6260: (DL_TIER, Cont, (DeliverItemQuest, 6009), Same, 9229, NA, 6261, TTLocalizer.QuestDialogDict[6260]), 6261: (DL_TIER, Cont, (VisitQuest,), Same, 9221, NA, 6262, TTLocalizer.QuestDialogDict[6261]), 6262: (DL_TIER, Cont, (DeliverItemQuest, 6010), Same, 9126, NA, 6263, TTLocalizer.QuestDialogDict[6262]), 6263: (DL_TIER, Cont, (DeliverItemQuest, 6010), Same, 9112, NA, 6264, TTLocalizer.QuestDialogDict[6263]), 6264: (DL_TIER, Cont, (DeliverItemQuest, 6011), Same, 9221, NA, 6265, TTLocalizer.QuestDialogDict[6264]), 6265: (DL_TIER, Cont, (DeliverItemQuest, 6012), Same, 9115, NA, 6266, TTLocalizer.QuestDialogDict[6265]), 6266: (DL_TIER, Cont, (VisitQuest,), Same, 9221, 103, NA, TTLocalizer.QuestDialogDict[6266]), 6271: (DL_TIER, Start, (VisitQuest,), Any, 9208, NA, 6272, TTLocalizer.QuestDialogDict[6271]), 6272: (DL_TIER, Start, (BuildingQuest, ToontownGlobals.DonaldsDreamland, 2, 'm', 5), 9208, Same, 305, NA, TTLocalizer.QuestDialogDict[6272]), 6281: (DL_TIER, Start, (VisitQuest,), Any, 9123, NA, 6282, TTLocalizer.QuestDialogDict[6281]), 6282: (DL_TIER, Start, (CogTrackQuest, ToontownGlobals.DonaldsDreamland, 55, 'm'), 9123, Same, 4001, NA, TTLocalizer.QuestDialogDict[6282]), 6291: (DL_TIER, Start, (VisitQuest,), Any, 9226, NA, 6292, TTLocalizer.QuestDialogDict[6291]), 6292: (DL_TIER, Start, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 6005, VeryHard, 'm', 'track'), 9226, Same, 4002, NA, TTLocalizer.QuestDialogDict[6292]), 6301: (DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 40, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6302: (DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 45, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6303: (DL_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 50, Any), Any, ToonHQ, Any, NA, DefaultDialog), 6304: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 30, 7), Any, ToonHQ, Any, NA, DefaultDialog), 6305: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 20, 8), Any, ToonHQ, Any, NA, DefaultDialog), 6306: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 15, 9), Any, ToonHQ, Any, NA, DefaultDialog), 6307: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 12, 10), Any, ToonHQ, Any, NA, DefaultDialog), 6308: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 10, 10), Any, ToonHQ, Any, NA, DefaultDialog), 6309: (DL_TIER, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 8, 10), Any, ToonHQ, Any, NA, DefaultDialog), 6310: (DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6311: (DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6312: (DL_TIER, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 3), Any, ToonHQ, Any, NA, DefaultDialog), 6313: (DL_TIER, Start, (SkelecogQuest, ToontownGlobals.CashbotHQ, 20), Any, ToonHQ, Any, NA, DefaultDialog), 6314: (DL_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 10, 11), Any, ToonHQ, Any, NA, DefaultDialog), 6315: (DL_TIER, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 6, 12), Any, ToonHQ, Any, NA, DefaultDialog), 6318: (DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 5), Any, ToonHQ, Any, NA, DefaultDialog), 6319: (DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 4), Any, ToonHQ, Any, NA, DefaultDialog), 6320: (DL_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 3), Any, ToonHQ, Any, NA, DefaultDialog), 7101: (DL_TIER + 1, Start, (CogQuest, Anywhere, 120, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7102: (DL_TIER + 1, Start, (CogQuest, Anywhere, 130, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7103: (DL_TIER + 1, OBSOLETE, (CogQuest, Anywhere, 140, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7104: (DL_TIER + 1, Start, (CogQuest, Anywhere, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7105: (DL_TIER + 1, Start, (CogQuest, Anywhere, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7106: (DL_TIER + 1, Start, (CogQuest, Anywhere, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7107: (DL_TIER + 1, Start, (CogQuest, Anywhere, 70, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 7108: (DL_TIER + 1, Start, (CogQuest, Anywhere, 60, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 7109: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 7110: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 7111: (DL_TIER + 1, Start, (CogQuest, Anywhere, 30, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), 7112: (DL_TIER + 1, Start, (CogQuest, Anywhere, 20, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), 7113: (DL_TIER + 1, Start, (CogQuest, Anywhere, 70, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 7114: (DL_TIER + 1, Start, (CogQuest, Anywhere, 60, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 7115: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 7116: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 7117: (DL_TIER + 1, Start, (CogQuest, Anywhere, 30, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 7118: (DL_TIER + 1, Start, (CogQuest, Anywhere, 20, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), 7119: (DL_TIER + 1, Start, (CogQuest, Anywhere, 70, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 7120: (DL_TIER + 1, Start, (CogQuest, Anywhere, 60, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 7121: (DL_TIER + 1, OBSOLETE, (CogQuest, Anywhere, 50, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 7122: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 7123: (DL_TIER + 1, Start, (CogQuest, Anywhere, 30, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), 7124: (DL_TIER + 1, Start, (CogQuest, Anywhere, 20, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), 7125: (DL_TIER + 1, Start, (CogQuest, Anywhere, 70, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 7126: (DL_TIER + 1, Start, (CogQuest, Anywhere, 60, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 7127: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 7128: (DL_TIER + 1, Start, (CogQuest, Anywhere, 50, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 7129: (DL_TIER + 1, Start, (CogQuest, Anywhere, 30, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), 7130: (DL_TIER + 1, Start, (CogQuest, Anywhere, 20, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), 7131: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 100, 7), Any, ToonHQ, Any, NA, DefaultDialog), 7132: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 80, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7133: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 60, 9), Any, ToonHQ, Any, NA, DefaultDialog), 7134: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 70, 9), Any, ToonHQ, Any, NA, DefaultDialog), 7135: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 40, 10), Any, ToonHQ, Any, NA, DefaultDialog), 7136: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 50, 10), Any, ToonHQ, Any, NA, DefaultDialog), 7137: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), 7138: (DL_TIER + 1, Start, (CogLevelQuest, Anywhere, 30, 11), Any, ToonHQ, Any, NA, DefaultDialog), 7139: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 100, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 7140: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 100, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 7141: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 100, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 7142: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 100, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 7143: (DL_TIER + 1, OBSOLETE, (CogTrackQuest, Anywhere, 120, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 7144: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 120, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 7145: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 120, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 7146: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 120, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 7147: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 140, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 7148: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 140, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 7149: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 140, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 7150: (DL_TIER + 1, Start, (CogTrackQuest, Anywhere, 140, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 7151: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 20, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 7152: (DL_TIER + 1, OBSOLETE, (BuildingQuest, Anywhere, 10, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 7153: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 10, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 7154: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 10, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), 7155: (DL_TIER + 1, OBSOLETE, (BuildingQuest, Anywhere, 5, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), 7156: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 5, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), 7157: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 5, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), 7158: (DL_TIER + 1, Start, (BuildingQuest, Anywhere, 5, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), 7160: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 7161: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 7162: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 7163: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 35, Any, NEWBIE_HP), Any, ToonHQ, 607, NA, DefaultDialog), 7164: (DL_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 7165: (DL_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 7166: (DL_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 7167: (DL_TIER + 1, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 2, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 7170: (DL_TIER + 1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7171: (DL_TIER + 1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7172: (DL_TIER + 1, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7173: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 50, 4), Any, ToonHQ, Any, NA, DefaultDialog), 7174: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 35, 5), Any, ToonHQ, Any, NA, DefaultDialog), 7175: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 35, 5), Any, ToonHQ, Any, NA, DefaultDialog), 7176: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 30, 5), Any, ToonHQ, Any, NA, DefaultDialog), 7177: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7178: (DL_TIER + 1, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 20, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7179: (DL_TIER + 1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7180: (DL_TIER + 1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7181: (DL_TIER + 1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7182: (DL_TIER + 1, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7183: (DL_TIER + 1, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 40), Any, ToonHQ, Any, NA, DefaultDialog), 7184: (DL_TIER + 1, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 20, 5), Any, ToonHQ, Any, NA, DefaultDialog), 7185: (DL_TIER + 1, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 8, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7186: (DL_TIER + 1, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7187: (DL_TIER + 1, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7190: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7191: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7192: (DL_TIER + 1, Start, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 25, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7193: (DL_TIER + 1, Start, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 6, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7194: (DL_TIER + 1, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7195: (DL_TIER + 1, Start, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7196: (DL_TIER + 1, Start, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 7201: (DL_TIER + 1, Start, (VisitQuest,), Any, 9124, NA, 7202, TTLocalizer.QuestDialogDict[7201]), 7202: (DL_TIER + 1, Start, (VisitQuest,), 9124, 9128, NA, 7203, TTLocalizer.QuestDialogDict[7202]), 7203: (DL_TIER + 1, Cont, (DeliverItemQuest, 7001), Same, 9124, NA, 7204, TTLocalizer.QuestDialogDict[7203]), 7204: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9128, NA, 7205, TTLocalizer.QuestDialogDict[7204]), 7205: (DL_TIER + 1, Cont, (CogQuest, ToontownGlobals.DonaldsDreamland, 140, Any), Same, Same, NA, 7206, TTLocalizer.QuestDialogDict[7205]), 7206: (DL_TIER + 1, Cont, (DeliverItemQuest, 7002), Same, 9124, 4003, NA, TTLocalizer.QuestDialogDict[7206]), 7209: (DL_TIER + 1, Start, (VisitQuest,), Any, 9232, NA, 7210, TTLocalizer.QuestDialogDict[7209]), 7210: (DL_TIER + 1, Start, (VisitQuest,), 9232, 9101, NA, 7211, TTLocalizer.QuestDialogDict[7210]), 7211: (DL_TIER + 1, Cont, (CogQuest, Anywhere, 30, 'nc'), Same, Same, NA, 7212, TTLocalizer.QuestDialogDict[7211]), 7212: (DL_TIER + 1, Cont, (DeliverItemQuest, 7003), Same, 9232, NA, 7213, TTLocalizer.QuestDialogDict[7212]), 7213: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9101, NA, 7214, TTLocalizer.QuestDialogDict[7213]), 7214: (DL_TIER + 1, Cont, (CogTrackQuest, Anywhere, 65, 'm'), Same, Same, NA, 7215, TTLocalizer.QuestDialogDict[7214]), 7215: (DL_TIER + 1, Cont, (DeliverItemQuest, 7004), Same, 9232, 4004, NA, TTLocalizer.QuestDialogDict[7215]), 7218: (DL_TIER + 1, Start, (VisitQuest,), Any, 9109, NA, 7219, TTLocalizer.QuestDialogDict[7218]), 7219: (DL_TIER + 1, Start, (VisitQuest,), 9109, 9230, NA, 7220, TTLocalizer.QuestDialogDict[7219]), 7220: (DL_TIER + 1, Cont, (DeliverItemQuest, 7005), Same, 9109, NA, 7221, TTLocalizer.QuestDialogDict[7220]), 7221: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9230, NA, 7222, TTLocalizer.QuestDialogDict[7221]), 7222: (DL_TIER + 1, Cont, (BuildingQuest, Anywhere, 10, Any, 3), Same, Same, NA, 7223, TTLocalizer.QuestDialogDict[7222]), 7223: (DL_TIER + 1, Cont, (DeliverItemQuest, 7006), Same, 9109, 4005, NA, TTLocalizer.QuestDialogDict[7223]), 7226: (DL_TIER + 1, Start, (VisitQuest,), Any, 9224, NA, 7227, TTLocalizer.QuestDialogDict[7226]), 7227: (DL_TIER + 1, Start, (VisitQuest,), 9224, 9102, NA, 7228, TTLocalizer.QuestDialogDict[7227]), 7228: (DL_TIER + 1, Cont, (DeliverItemQuest, 7007), Same, 9224, NA, 7229, TTLocalizer.QuestDialogDict[7228]), 7229: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9102, NA, 7230, TTLocalizer.QuestDialogDict[7229]), 7230: (DL_TIER + 1, Cont, (DeliverItemQuest, 7008), Same, 9224, NA, 7231, TTLocalizer.QuestDialogDict[7230]), 7231: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9102, NA, 7232, TTLocalizer.QuestDialogDict[7231]), 7232: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9216, NA, 7233, TTLocalizer.QuestDialogDict[7232]), 7233: (DL_TIER + 1, Cont, (DeliverItemQuest, 7009), Same, 9224, NA, 7234, TTLocalizer.QuestDialogDict[7233]), 7234: (DL_TIER + 1, Cont, (VisitQuest,), Same, 9216, NA, 7235, TTLocalizer.QuestDialogDict[7234]), 7235: (DL_TIER + 1, Cont, (BuildingQuest, Anywhere, 5, 'm', 5), Same, Same, NA, 7236, TTLocalizer.QuestDialogDict[7235]), 7236: (DL_TIER + 1, Cont, (DeliverItemQuest, 7010), Same, 9224, 4006, NA, TTLocalizer.QuestDialogDict[7236]), 7239: (DL_TIER + 1, Start, (VisitQuest,), Any, 9114, NA, 7240, TTLocalizer.QuestDialogDict[7239]), 7240: (DL_TIER + 1, Start, (VisitQuest,), 9114, 9215, NA, 7241, TTLocalizer.QuestDialogDict[7240]), 7241: (DL_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 7011, Hard, AnyFish), Same, Same, NA, 7242, TTLocalizer.QuestDialogDict[7241]), 7242: (DL_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.DonaldsDreamland, 1, 7012, VeryHard, AnyFish), Same, Same, NA, 7243, TTLocalizer.QuestDialogDict[7242]), 7243: (DL_TIER + 1, Cont, (RecoverItemQuest, ToontownGlobals.CashbotHQ, 1, 7013, Hard, 'ls'), Same, Same, NA, 7244, TTLocalizer.QuestDialogDict[7243]), 7244: (DL_TIER + 1, Cont, (DeliverItemQuest, 7014), Same, 9114, 4007, NA, TTLocalizer.QuestDialogDict[7244]), 7250: (DL_TIER + 1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7251: (DL_TIER + 1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 90, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7252: (DL_TIER + 1, Start, (CogQuest, ToontownGlobals.CashbotHQ, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), 7253: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 50, 7), Any, ToonHQ, Any, NA, DefaultDialog), 7254: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 35, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7255: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 35, 9), Any, ToonHQ, Any, NA, DefaultDialog), 7256: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 30, 10), Any, ToonHQ, Any, NA, DefaultDialog), 7257: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 25, 11), Any, ToonHQ, Any, NA, DefaultDialog), 7258: (DL_TIER + 1, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), 7259: (DL_TIER + 1, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7260: (DL_TIER + 1, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 7), Any, ToonHQ, Any, NA, DefaultDialog), 7261: (DL_TIER + 1, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7262: (DL_TIER + 1, Start, (SkelecogQuest, ToontownGlobals.CashbotHQ, 30), Any, ToonHQ, Any, NA, DefaultDialog), 7263: (DL_TIER + 1, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 20, 11), Any, ToonHQ, Any, NA, DefaultDialog), 7264: (DL_TIER + 1, Start, (SkelecogLevelQuest, ToontownGlobals.CashbotHQ, 10, 12), Any, ToonHQ, Any, NA, DefaultDialog), 7265: (DL_TIER + 1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 10), Any, ToonHQ, Any, NA, DefaultDialog), 7266: (DL_TIER + 1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 8), Any, ToonHQ, Any, NA, DefaultDialog), 7267: (DL_TIER + 1, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 6), Any, ToonHQ, Any, NA, DefaultDialog), 7500: (DL_TIER + 1, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 100, Any), Any, ToonHQ, NA, 7501, DefaultDialog), 7501: (DL_TIER + 1, Cont, (DeliverItemQuest, 1000), Any, 9010, 1000, NA, DefaultDialog), 8101: (DL_TIER + 2, Start, (CogQuest, Anywhere, 240, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8102: (DL_TIER + 2, Start, (CogQuest, Anywhere, 260, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8103: (DL_TIER + 2, Start, (CogQuest, Anywhere, 280, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8104: (DL_TIER + 2, Start, (CogQuest, Anywhere, 320, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8105: (DL_TIER + 2, Start, (CogQuest, Anywhere, 360, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8106: (DL_TIER + 2, Start, (CogQuest, Anywhere, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8107: (DL_TIER + 2, Start, (CogQuest, Anywhere, 140, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 8108: (DL_TIER + 2, Start, (CogQuest, Anywhere, 120, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 8109: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 8110: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 8111: (DL_TIER + 2, Start, (CogQuest, Anywhere, 60, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), 8112: (DL_TIER + 2, Start, (CogQuest, Anywhere, 40, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), 8113: (DL_TIER + 2, Start, (CogQuest, Anywhere, 140, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 8114: (DL_TIER + 2, Start, (CogQuest, Anywhere, 120, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 8115: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 8116: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 8117: (DL_TIER + 2, Start, (CogQuest, Anywhere, 60, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 8118: (DL_TIER + 2, Start, (CogQuest, Anywhere, 40, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), 8119: (DL_TIER + 2, Start, (CogQuest, Anywhere, 140, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 8120: (DL_TIER + 2, Start, (CogQuest, Anywhere, 120, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 8121: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 8122: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 8123: (DL_TIER + 2, Start, (CogQuest, Anywhere, 60, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), 8124: (DL_TIER + 2, Start, (CogQuest, Anywhere, 40, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), 8125: (DL_TIER + 2, Start, (CogQuest, Anywhere, 140, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 8126: (DL_TIER + 2, Start, (CogQuest, Anywhere, 120, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 8127: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 8128: (DL_TIER + 2, Start, (CogQuest, Anywhere, 100, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 8129: (DL_TIER + 2, Start, (CogQuest, Anywhere, 60, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), 8130: (DL_TIER + 2, Start, (CogQuest, Anywhere, 40, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), 8131: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 160, 9), Any, ToonHQ, Any, NA, DefaultDialog), 8132: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 200, 9), Any, ToonHQ, Any, NA, DefaultDialog), 8133: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 120, 10), Any, ToonHQ, Any, NA, DefaultDialog), 8134: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 140, 10), Any, ToonHQ, Any, NA, DefaultDialog), 8135: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 80, 11), Any, ToonHQ, Any, NA, DefaultDialog), 8136: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 100, 11), Any, ToonHQ, Any, NA, DefaultDialog), 8137: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 40, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8138: (DL_TIER + 2, Start, (CogLevelQuest, Anywhere, 60, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8139: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 200, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 8140: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 200, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 8141: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 200, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 8142: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 200, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 8143: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 250, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 8144: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 250, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 8145: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 250, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 8146: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 250, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 8147: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 300, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 8148: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 300, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 8149: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 300, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 8150: (DL_TIER + 2, Start, (CogTrackQuest, Anywhere, 300, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 8151: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 40, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 8152: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 20, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 8153: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 20, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 8154: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 20, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), 8155: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 10, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), 8156: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 10, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), 8157: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 10, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), 8158: (DL_TIER + 2, Start, (BuildingQuest, Anywhere, 10, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), 8160: (DL_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 8161: (DL_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 8162: (DL_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 8163: (DL_TIER + 2, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 40, Any, NEWBIE_HP), Any, ToonHQ, 608, NA, DefaultDialog), 8164: (DL_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 8165: (DL_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 8166: (DL_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 8167: (DL_TIER + 2, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 8170: (DL_TIER + 2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8171: (DL_TIER + 2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8172: (DL_TIER + 2, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8173: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 100, 4), Any, ToonHQ, Any, NA, DefaultDialog), 8174: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 70, 5), Any, ToonHQ, Any, NA, DefaultDialog), 8175: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 70, 5), Any, ToonHQ, Any, NA, DefaultDialog), 8176: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 60, 5), Any, ToonHQ, Any, NA, DefaultDialog), 8177: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), 8178: (DL_TIER + 2, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 40, 6), Any, ToonHQ, Any, NA, DefaultDialog), 8179: (DL_TIER + 2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8180: (DL_TIER + 2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), 8181: (DL_TIER + 2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8182: (DL_TIER + 2, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), 8183: (DL_TIER + 2, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 80), Any, ToonHQ, Any, NA, DefaultDialog), 8184: (DL_TIER + 2, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 40, 5), Any, ToonHQ, Any, NA, DefaultDialog), 8185: (DL_TIER + 2, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 16, 6), Any, ToonHQ, Any, NA, DefaultDialog), 8186: (DL_TIER + 2, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8187: (DL_TIER + 2, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 16), Any, ToonHQ, Any, NA, DefaultDialog), 8188: (DL_TIER + 2, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 8189: (DL_TIER + 2, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 8190: (DL_TIER + 2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8191: (DL_TIER + 2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8192: (DL_TIER + 2, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 30, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8193: (DL_TIER + 2, OBSOLETE, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 8, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8194: (DL_TIER + 2, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8195: (DL_TIER + 2, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8196: (DL_TIER + 2, OBSOLETE, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8197: (DL_TIER + 2, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8198: (DL_TIER + 2, OBSOLETE, (RescueNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 610, NA, DefaultDialog), 8201: (DL_TIER + 2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 160, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8202: (DL_TIER + 2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 180, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8203: (DL_TIER + 2, Start, (CogQuest, ToontownGlobals.CashbotHQ, 200, Any), Any, ToonHQ, Any, NA, DefaultDialog), 8204: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 100, 7), Any, ToonHQ, Any, NA, DefaultDialog), 8205: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 90, 8), Any, ToonHQ, Any, NA, DefaultDialog), 8206: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 80, 9), Any, ToonHQ, Any, NA, DefaultDialog), 8207: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 60, 10), Any, ToonHQ, Any, NA, DefaultDialog), 8208: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 50, 11), Any, ToonHQ, Any, NA, DefaultDialog), 8209: (DL_TIER + 2, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 40, 11), Any, ToonHQ, Any, NA, DefaultDialog), 8210: (DL_TIER + 2, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 16), Any, ToonHQ, Any, NA, DefaultDialog), 8211: (DL_TIER + 2, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 14), Any, ToonHQ, Any, NA, DefaultDialog), 8212: (DL_TIER + 2, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8213: (DL_TIER + 2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntA, 80), Any, ToonHQ, Any, NA, DefaultDialog), 8214: (DL_TIER + 2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntB, 60), Any, ToonHQ, Any, NA, DefaultDialog), 8215: (DL_TIER + 2, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntC, 40), Any, ToonHQ, Any, NA, DefaultDialog), 8216: (DL_TIER + 2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 16), Any, ToonHQ, Any, NA, DefaultDialog), 8217: (DL_TIER + 2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 14), Any, ToonHQ, Any, NA, DefaultDialog), 8218: (DL_TIER + 2, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 12), Any, ToonHQ, Any, NA, DefaultDialog), 8219: (DL_TIER + 2, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 2), Any, ToonHQ, 621, NA, DefaultDialog), 9101: (DL_TIER + 3, Start, (CogQuest, Anywhere, 500, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9102: (DL_TIER + 3, Start, (CogQuest, Anywhere, 600, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9103: (DL_TIER + 3, Start, (CogQuest, Anywhere, 700, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9104: (DL_TIER + 3, Start, (CogQuest, Anywhere, 800, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9105: (DL_TIER + 3, Start, (CogQuest, Anywhere, 900, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9106: (DL_TIER + 3, Start, (CogQuest, Anywhere, 1000, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9107: (DL_TIER + 3, Start, (CogQuest, Anywhere, 300, 'ym'), Any, ToonHQ, Any, NA, DefaultDialog), 9108: (DL_TIER + 3, Start, (CogQuest, Anywhere, 250, 'mm'), Any, ToonHQ, Any, NA, DefaultDialog), 9109: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'ds'), Any, ToonHQ, Any, NA, DefaultDialog), 9110: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'hh'), Any, ToonHQ, Any, NA, DefaultDialog), 9111: (DL_TIER + 3, Start, (CogQuest, Anywhere, 120, 'cr'), Any, ToonHQ, Any, NA, DefaultDialog), 9112: (DL_TIER + 3, Start, (CogQuest, Anywhere, 80, 'tbc'), Any, ToonHQ, Any, NA, DefaultDialog), 9113: (DL_TIER + 3, Start, (CogQuest, Anywhere, 280, 'nd'), Any, ToonHQ, Any, NA, DefaultDialog), 9114: (DL_TIER + 3, Start, (CogQuest, Anywhere, 240, 'gh'), Any, ToonHQ, Any, NA, DefaultDialog), 9115: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'ms'), Any, ToonHQ, Any, NA, DefaultDialog), 9116: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'tf'), Any, ToonHQ, Any, NA, DefaultDialog), 9117: (DL_TIER + 3, Start, (CogQuest, Anywhere, 120, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 9118: (DL_TIER + 3, Start, (CogQuest, Anywhere, 80, 'mh'), Any, ToonHQ, Any, NA, DefaultDialog), 9119: (DL_TIER + 3, Start, (CogQuest, Anywhere, 280, 'tw'), Any, ToonHQ, Any, NA, DefaultDialog), 9120: (DL_TIER + 3, Start, (CogQuest, Anywhere, 240, 'bc'), Any, ToonHQ, Any, NA, DefaultDialog), 9121: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'nc'), Any, ToonHQ, Any, NA, DefaultDialog), 9122: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'mb'), Any, ToonHQ, Any, NA, DefaultDialog), 9123: (DL_TIER + 3, Start, (CogQuest, Anywhere, 120, 'ls'), Any, ToonHQ, Any, NA, DefaultDialog), 9124: (DL_TIER + 3, Start, (CogQuest, Anywhere, 80, 'rb'), Any, ToonHQ, Any, NA, DefaultDialog), 9125: (DL_TIER + 3, Start, (CogQuest, Anywhere, 280, 'dt'), Any, ToonHQ, Any, NA, DefaultDialog), 9126: (DL_TIER + 3, Start, (CogQuest, Anywhere, 240, 'ac'), Any, ToonHQ, Any, NA, DefaultDialog), 9127: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'bs'), Any, ToonHQ, Any, NA, DefaultDialog), 9128: (DL_TIER + 3, Start, (CogQuest, Anywhere, 200, 'sd'), Any, ToonHQ, Any, NA, DefaultDialog), 9129: (DL_TIER + 3, Start, (CogQuest, Anywhere, 120, 'le'), Any, ToonHQ, Any, NA, DefaultDialog), 9130: (DL_TIER + 3, Start, (CogQuest, Anywhere, 80, 'bw'), Any, ToonHQ, Any, NA, DefaultDialog), 9131: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 320, 9), Any, ToonHQ, Any, NA, DefaultDialog), 9132: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 400, 9), Any, ToonHQ, Any, NA, DefaultDialog), 9133: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 240, 10), Any, ToonHQ, Any, NA, DefaultDialog), 9134: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 280, 10), Any, ToonHQ, Any, NA, DefaultDialog), 9135: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 160, 11), Any, ToonHQ, Any, NA, DefaultDialog), 9136: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 200, 11), Any, ToonHQ, Any, NA, DefaultDialog), 9137: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 80, 12), Any, ToonHQ, Any, NA, DefaultDialog), 9138: (DL_TIER + 3, Start, (CogLevelQuest, Anywhere, 120, 12), Any, ToonHQ, Any, NA, DefaultDialog), 9139: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 400, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 9140: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 400, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 9141: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 400, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 9142: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 400, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 9143: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 500, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 9144: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 500, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 9145: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 500, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 9146: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 500, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 9147: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 600, 'm'), Any, ToonHQ, Any, NA, DefaultDialog), 9148: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 600, 's'), Any, ToonHQ, Any, NA, DefaultDialog), 9149: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 600, 'c'), Any, ToonHQ, Any, NA, DefaultDialog), 9150: (DL_TIER + 3, Start, (CogTrackQuest, Anywhere, 600, 'l'), Any, ToonHQ, Any, NA, DefaultDialog), 9151: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 400, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 9152: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 200, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 9153: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 200, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 9154: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 200, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), 9155: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 100, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), 9156: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 100, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), 9157: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 100, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), 9158: (DL_TIER + 3, Start, (BuildingQuest, Anywhere, 100, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), 9160: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9161: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9162: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9163: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 45, Any, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9164: (DL_TIER + 3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9165: (DL_TIER + 3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9166: (DL_TIER + 3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9167: (DL_TIER + 3, Start, (BuildingNewbieQuest, Anywhere, 1, Any, 3, NEWBIE_HP), Any, ToonHQ, 609, NA, DefaultDialog), 9170: (DL_TIER + 3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 350, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9171: (DL_TIER + 3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9172: (DL_TIER + 3, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 500, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9173: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 200, 4), Any, ToonHQ, Any, NA, DefaultDialog), 9174: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), 9175: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotHQ, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), 9176: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 150, 5), Any, ToonHQ, Any, NA, DefaultDialog), 9177: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 100, 6), Any, ToonHQ, Any, NA, DefaultDialog), 9178: (DL_TIER + 3, OBSOLETE, (CogLevelQuest, ToontownGlobals.SellbotFactoryInt, 100, 6), Any, ToonHQ, Any, NA, DefaultDialog), 9179: (DL_TIER + 3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), 9180: (DL_TIER + 3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), 9181: (DL_TIER + 3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), 9182: (DL_TIER + 3, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), 9183: (DL_TIER + 3, OBSOLETE, (SkelecogQuest, ToontownGlobals.SellbotFactoryInt, 150), Any, ToonHQ, Any, NA, DefaultDialog), 9184: (DL_TIER + 3, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 80, 5), Any, ToonHQ, Any, NA, DefaultDialog), 9185: (DL_TIER + 3, OBSOLETE, (SkelecogLevelQuest, ToontownGlobals.SellbotHQ, 32, 6), Any, ToonHQ, Any, NA, DefaultDialog), 9186: (DL_TIER + 3, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 25), Any, ToonHQ, Any, NA, DefaultDialog), 9187: (DL_TIER + 3, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 35), Any, ToonHQ, Any, NA, DefaultDialog), 9188: (DL_TIER + 3, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), 9189: (DL_TIER + 3, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 3), Any, ToonHQ, Any, NA, DefaultDialog), 9190: (DL_TIER + 3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9191: (DL_TIER + 3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9192: (DL_TIER + 3, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 35, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9193: (DL_TIER + 3, OBSOLETE, (SkelecogNewbieQuest, ToontownGlobals.SellbotHQ, 10, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9194: (DL_TIER + 3, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9195: (DL_TIER + 3, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9196: (DL_TIER + 3, OBSOLETE, (ForemanNewbieQuest, ToontownGlobals.SellbotFactoryInt, 4, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9197: (DL_TIER + 3, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9198: (DL_TIER + 3, OBSOLETE, (RescueNewbieQuest, ToontownGlobals.SellbotHQ, 2, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9201: (DL_TIER + 3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 350, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9202: (DL_TIER + 3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 400, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9203: (DL_TIER + 3, Start, (CogQuest, ToontownGlobals.CashbotHQ, 450, Any), Any, ToonHQ, Any, NA, DefaultDialog), 9204: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 200, 7), Any, ToonHQ, Any, NA, DefaultDialog), 9205: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 150, 8), Any, ToonHQ, Any, NA, DefaultDialog), 9206: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotHQ, 100, 9), Any, ToonHQ, Any, NA, DefaultDialog), 9207: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntA, 200, 10), Any, ToonHQ, Any, NA, DefaultDialog), 9208: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntB, 150, 10), Any, ToonHQ, Any, NA, DefaultDialog), 9209: (DL_TIER + 3, Start, (CogLevelQuest, ToontownGlobals.CashbotMintIntC, 100, 11), Any, ToonHQ, Any, NA, DefaultDialog), 9210: (DL_TIER + 3, Start, (MintQuest, ToontownGlobals.CashbotMintIntA, 35), Any, ToonHQ, Any, NA, DefaultDialog), 9211: (DL_TIER + 3, Start, (MintQuest, ToontownGlobals.CashbotMintIntB, 30), Any, ToonHQ, Any, NA, DefaultDialog), 9212: (DL_TIER + 3, Start, (MintQuest, ToontownGlobals.CashbotMintIntC, 25), Any, ToonHQ, Any, NA, DefaultDialog), 9213: (DL_TIER + 3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntA, 150), Any, ToonHQ, Any, NA, DefaultDialog), 9214: (DL_TIER + 3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntB, 100), Any, ToonHQ, Any, NA, DefaultDialog), 9215: (DL_TIER + 3, Start, (SkelecogQuest, ToontownGlobals.CashbotMintIntC, 50), Any, ToonHQ, Any, NA, DefaultDialog), 9216: (DL_TIER + 3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntA, 35), Any, ToonHQ, Any, NA, DefaultDialog), 9217: (DL_TIER + 3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntB, 30), Any, ToonHQ, Any, NA, DefaultDialog), 9218: (DL_TIER + 3, Start, (SupervisorQuest, ToontownGlobals.CashbotMintIntC, 25), Any, ToonHQ, Any, NA, DefaultDialog), 9219: (DL_TIER + 3, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 3), Any, ToonHQ, 622, NA, DefaultDialog), 9220: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntA, 35, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9221: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntB, 30, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9222: (DL_TIER + 3, Start, (CogNewbieQuest, ToontownGlobals.CashbotMintIntC, 25, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9223: (DL_TIER + 3, Start, (SkelecogNewbieQuest, ToontownGlobals.CashbotHQ, 10, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9224: (DL_TIER + 3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntA, 6, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9225: (DL_TIER + 3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntB, 4, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9226: (DL_TIER + 3, Start, (MintNewbieQuest, ToontownGlobals.CashbotMintIntC, 2, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9227: (DL_TIER + 3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntA, 6, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9228: (DL_TIER + 3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntB, 4, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9229: (DL_TIER + 3, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotMintIntC, 2, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 9500: (DL_TIER + 3, Start, (CogQuest, ToontownGlobals.DonaldsDreamland, 1000, Any), Any, ToonHQ, NA, 9501, DefaultDialog), 9501: (DL_TIER + 3, Cont, (DeliverItemQuest, 1000), Any, 2004, 1000, NA, DefaultDialog), 10001: (ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 50, Any, NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10002: (ELDER_TIER, Start, (BuildingNewbieQuest, Anywhere, 4, Any, 1, NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10100: (ELDER_TIER, Start, (CogQuest, Anywhere, 80, Any), Any, ToonHQ, Any, NA, DefaultDialog), 10101: (ELDER_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, Any, NA, DefaultDialog), 10102: (ELDER_TIER, Start, (CogQuest, Anywhere, 120, Any), Any, ToonHQ, Any, NA, DefaultDialog), 10103: (ELDER_TIER, Start, (CogQuest, Anywhere, 200, Any), Any, ToonHQ, 613, NA, DefaultDialog), 10104: (ELDER_TIER, Start, (CogQuest, Anywhere, 250, Any), Any, ToonHQ, 615, NA, DefaultDialog), 10105: (ELDER_TIER, Start, (CogQuest, Anywhere, 300, Any), Any, ToonHQ, 616, NA, DefaultDialog), 10106: (ELDER_TIER, Start, (CogQuest, Anywhere, 400, Any), Any, ToonHQ, 618, NA, DefaultDialog), 10110: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 40, Any, 2), Any, ToonHQ, Any, NA, DefaultDialog), 10111: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 30, Any, 3), Any, ToonHQ, Any, NA, DefaultDialog), 10112: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 25, Any, 4), Any, ToonHQ, Any, NA, DefaultDialog), 10113: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, Any, 5), Any, ToonHQ, Any, NA, DefaultDialog), 10114: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'm', 5), Any, ToonHQ, Any, NA, DefaultDialog), 10115: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 's', 5), Any, ToonHQ, Any, NA, DefaultDialog), 10116: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'c', 5), Any, ToonHQ, Any, NA, DefaultDialog), 10117: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 20, 'l', 5), Any, ToonHQ, Any, NA, DefaultDialog), 10118: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 50, Any, 1), Any, ToonHQ, 620, NA, DefaultDialog), 10120: (ELDER_TIER, OBSOLETE, (CogQuest, ToontownGlobals.SellbotHQ, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), 10121: (ELDER_TIER, OBSOLETE, (FactoryQuest, ToontownGlobals.SellbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), 10122: (ELDER_TIER, OBSOLETE, (ForemanQuest, ToontownGlobals.SellbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), 10123: (ELDER_TIER, OBSOLETE, (VPQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 10124: (ELDER_TIER, OBSOLETE, (RescueQuest, ToontownGlobals.SellbotHQ, 2), Any, ToonHQ, Any, NA, DefaultDialog), 10130: (ELDER_TIER, OBSOLETE, (CogNewbieQuest, ToontownGlobals.SellbotHQ, 40, Any, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10131: (ELDER_TIER, OBSOLETE, (FactoryNewbieQuest, ToontownGlobals.SellbotHQ, 3, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10132: (ELDER_TIER, OBSOLETE, (VPNewbieQuest, ToontownGlobals.SellbotHQ, 1, SELLBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10140: (ELDER_TIER, Start, (CogQuest, ToontownGlobals.CashbotHQ, 60, Any), Any, ToonHQ, Any, NA, DefaultDialog), 10141: (ELDER_TIER, Start, (MintQuest, ToontownGlobals.CashbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), 10142: (ELDER_TIER, Start, (SupervisorQuest, ToontownGlobals.CashbotHQ, 10), Any, ToonHQ, Any, NA, DefaultDialog), 10143: (ELDER_TIER, Start, (CFOQuest, ToontownGlobals.CashbotHQ, 2), Any, ToonHQ, 623, NA, DefaultDialog), 10145: (ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.CashbotHQ, 40, Any, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10146: (ELDER_TIER, Start, (MintNewbieQuest, ToontownGlobals.CashbotHQ, 3, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, Any, NA, DefaultDialog), 10147: (ELDER_TIER, Start, (SupervisorNewbieQuest, ToontownGlobals.CashbotHQ, 3, CASHBOT_HQ_NEWBIE_HP), Any, ToonHQ, 611, NA, DefaultDialog), 10200: (ELDER_TIER, Start, (CogQuest, Anywhere, 100, Any), Any, ToonHQ, NA, 10201, DefaultDialog), 10201: (ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), 10202: (ELDER_TIER, Start, (BuildingQuest, Anywhere, 25, Any, 1), Any, ToonHQ, NA, 10203, DefaultDialog), 10203: (ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), 10204: (ELDER_TIER, Start, (CogNewbieQuest, ToontownGlobals.ToontownCentral, 60, Any, NEWBIE_HP), Any, ToonHQ, NA, 10205, DefaultDialog), 10205: (ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog), 10206: (ELDER_TIER, Start, (BuildingNewbieQuest, Anywhere, 4, Any, 1, NEWBIE_HP), Any, ToonHQ, NA, 10207, DefaultDialog), 10207: (ELDER_TIER, Cont, (DeliverItemQuest, 1000), Any, ToonTailor, 1000, NA, DefaultDialog)} Tier2QuestsDict = {} -for questId, questDesc in QuestDict.items(): - # Only put quests that are singletons or the start of multiquests - if (questDesc[QuestDictStartIndex] == Start): +for (questId, questDesc) in list(QuestDict.items()): + if questDesc[QuestDictStartIndex] == Start: tier = questDesc[QuestDictTierIndex] - if Tier2QuestsDict.has_key(tier): + if tier in Tier2QuestsDict: Tier2QuestsDict[tier].append(questId) else: - Tier2QuestsDict[tier] = [questId] + Tier2QuestsDict[tier] = [ + questId] -# Quest2RewardDict is a dict of {questId : rewardId}, chasing down multipart quests -# Contains final rewards for all quests Quest2RewardDict = {} -# Tier2Reward2QuestsDict is a two-level dict of {tier : {reward : [questId, questId...]}} Tier2Reward2QuestsDict = {} -# Quest2RemainingStepsDict is a dictionary which records the number of steps until quest completion Quest2RemainingStepsDict = {} def getAllRewardIdsForReward(rewardId): - # maps a rewardId to a list of rewardIds for the purposes of filling - # in Tier2Reward2QuestsDict; allows 'AnyCashbotSuitPart' quests to be - # listed under all cashbot suit part rewards if rewardId is AnyCashbotSuitPart: - return range(4000,4011+1) - if rewardId is AnyLawbotSuitPart: - return range(4100,4113+1) - if rewardId is AnyBossbotSuitPart: - return range(4200,4216+1) - return (rewardId,) + return list(range(4000, 4011 + 1)) + return ( + rewardId,) + def findFinalRewardId(questId): - # A recursive function used to determine the final reward id associated with any quest id - # Used to initialize Quest2RewardDict, Tier2Reward2QuestsDict, Quest2RemainingStepsDict finalRewardId = Quest2RewardDict.get(questId) if finalRewardId: - # Already got it remainingSteps = Quest2RemainingStepsDict.get(questId) else: - # New quest id, get description try: questDesc = QuestDict[questId] except KeyError: - # Hmmm, no description found - print 'findFinalRewardId: Quest ID: %d not found' % questId + print('findFinalRewardId: Quest ID: %d not found' % questId) return -1 - # Is the end of the chain? + nextQuestId = questDesc[QuestDictNextQuestIndex] if nextQuestId == NA: - # Yes, get reward and record it finalRewardId = questDesc[QuestDictRewardIndex] remainingSteps = 1 else: - # Recurse down chain if type(nextQuestId) == type(()): - # Multiple next links, use first one for ultimate answer - finalRewardId, remainingSteps = findFinalRewardId(nextQuestId[0]) - # And recurse down the others to initialize them too + (finalRewardId, remainingSteps) = findFinalRewardId(nextQuestId[0]) for id in nextQuestId[1:]: - # And traverse other paths too findFinalRewardId(id) + else: - finalRewardId, remainingSteps = findFinalRewardId(nextQuestId) - # Increment step counter + (finalRewardId, remainingSteps) = findFinalRewardId(nextQuestId) remainingSteps += 1 - # Record final reward for this quest Id and return value - assert(finalRewardId != NA) if finalRewardId != OBSOLETE: - # Only put quests that are singletons or the start of multiquests into Tier2Reward2QuestsDict - if (questDesc[QuestDictStartIndex] == Start): + if questDesc[QuestDictStartIndex] == Start: tier = questDesc[QuestDictTierIndex] tier2RewardDict = Tier2Reward2QuestsDict.setdefault(tier, {}) - # list this quest under all applicable reward IDs; for - # instance, list 'AnyCashbotSuitPart' quests under each - # cashbot suit part reward rewardIds = getAllRewardIdsForReward(finalRewardId) for rewardId in rewardIds: questList = tier2RewardDict.setdefault(rewardId, []) questList.append(questId) + else: finalRewardId = None Quest2RewardDict[questId] = finalRewardId Quest2RemainingStepsDict[questId] = remainingSteps - return finalRewardId, remainingSteps + return ( + finalRewardId, remainingSteps) + return + -# Initialize dictionary -for questId in QuestDict.keys(): +for questId in list(QuestDict.keys()): findFinalRewardId(questId) -def getStartingQuests(tier = None): +def getStartingQuests(tier=None): startingQuests = [] - for questId in QuestDict.keys(): + for questId in list(QuestDict.keys()): if isStartingQuest(questId): if tier is None: startingQuests.append(questId) elif questId in Tier2QuestsDict[tier]: startingQuests.append(questId) + startingQuests.sort() return startingQuests - -def getFinalRewardId(questId, fAll = 0): - """ - Returns the final rewardId if fAll is set, - If fAll flag is not set, returns None if questId is not first part of mulitpart quest or singleton - so that quest isn't added to avatars reward history in DistributedToonAI.py - """ + return + + +def getFinalRewardId(questId, fAll=0): if fAll or isStartingQuest(questId): return Quest2RewardDict.get(questId) else: return None + return + def isStartingQuest(questId): - """ - Returns true is this quest is the start of a multipart quest or a singleton quest - Returns None for invalid QuestIds - """ try: - return (QuestDict[questId][QuestDictStartIndex] == Start) + return QuestDict[questId][QuestDictStartIndex] == Start except KeyError: return None + return + + def getNumChoices(tier): - """ - Determine how many quest choices are presented to the user in each tier - The idea is to slowly reveal more choices, starting from 1 or no choice - """ if tier in (0,): return 0 if tier in (1,): @@ -4798,358 +1965,225 @@ def getNumChoices(tier): else: return 3 + def getAvatarRewardId(av, questId): for quest in av.quests: - if (questId == quest[0]): + if questId == quest[0]: return quest[3] + notify.warning('getAvatarRewardId(): quest not found on avatar') return None + return + def getNextQuest(id, currentNpc, av): - """ - Given this quest id, see if there is another quest in the multipart - quest. If so, return it. We need the currentNpc so we can decide who - the next npc is and return that as well - """ nextQuest = QuestDict[id][QuestDictNextQuestIndex] if nextQuest == NA: - return NA, NA + return ( + NA, NA) elif type(nextQuest) == type(()): nextReward = QuestDict[nextQuest[0]][QuestDictRewardIndex] - nextNextQuest, nextNextToNpcId = getNextQuest(nextQuest[0], currentNpc, av) - if (nextReward == 400 and nextNextQuest == NA): + (nextNextQuest, nextNextToNpcId) = getNextQuest(nextQuest[0], currentNpc, av) + if nextReward == 400 and nextNextQuest == NA: nextQuest = chooseTrackChoiceQuest(av.getRewardTier(), av) else: nextQuest = random.choice(nextQuest) - - # If this quest is filtered for this avatar, skip it and - # go to the next one after that. Oooh, recursion if not getQuestClass(nextQuest).filterFunc(av): return getNextQuest(nextQuest, currentNpc, av) - nextToNpcId = getQuestToNpcId(nextQuest) if nextToNpcId == Any: - # TODO: Choose one that is nearby, for now use Mary nextToNpcId = 2004 elif nextToNpcId == Same: - # If you were an HQ officer, keep it an HQ officer if currentNpc.getHq(): nextToNpcId = ToonHQ else: nextToNpcId = currentNpc.getNpcId() elif nextToNpcId == ToonHQ: - # TODO nextToNpcId = ToonHQ - return nextQuest, nextToNpcId + return ( + nextQuest, nextToNpcId) def filterQuests(entireQuestPool, currentNpc, av): - """ - Given this quest pool, this npc and this av, filter out the quests - that are not allowed for various reasons and return a list of - the good ones left over. - Do not choose a quest: - - this av has already done - - that involves an avatar already on our quest list - """ if notify.getDebug(): - notify.debug('filterQuests: entireQuestPool: %s' % (entireQuestPool)) - # Start with the full list, then remove quests that are invalid - validQuestPool = dict([(questId, 1) for questId in entireQuestPool]) - + notify.debug('filterQuests: entireQuestPool: %s' % entireQuestPool) + validQuestPool = dict([ (questId, 1) for questId in entireQuestPool ]) if isLoopingFinalTier(av.getRewardTier()): - # If we are in the looping tier, we do not maintain the quest - # history, but we still do not want to offer quests the avatar is - # currently working on. So build the av quest history out of the - # quest ids he is currently working on. - history = map(lambda questDesc: questDesc[0], av.quests) + history = [questDesc[0] for questDesc in av.quests] else: - # Note: history includes current quests history = av.getQuestHistory() if notify.getDebug(): - notify.debug('filterQuests: av quest history: %s' % (history)) - + notify.debug('filterQuests: av quest history: %s' % history) currentQuests = av.quests for questId in entireQuestPool: - # If we have had this quest before (or have it now), - # remove it from the validQuestPool if questId in history: if notify.getDebug(): - notify.debug("filterQuests: Removed %s because in history" % (questId)) + notify.debug('filterQuests: Removed %s because in history' % questId) validQuestPool[questId] = 0 continue - - # If the quest has defined a fromNpcId, check it - # Throw this quest out if it does not match. - # Most quests start with Any, so they almost all match. potentialFromNpc = getQuestFromNpcId(questId) - - # if ((potentialFromNpc != Any) and - # (currentNpc.getNpcId() != potentialFromNpc)): if not npcMatches(potentialFromNpc, currentNpc): if notify.getDebug(): - notify.debug("filterQuests: Removed %s: potentialFromNpc does not match currentNpc" % (questId)) + notify.debug('filterQuests: Removed %s: potentialFromNpc does not match currentNpc' % questId) validQuestPool[questId] = 0 - # Move on to the next quest continue - - # If this potential npc is involved in the current quest in question, - # do not consider this quest. This will prevent npcs from telling you - # to visit themselves, for instance. potentialToNpc = getQuestToNpcId(questId) - if (currentNpc.getNpcId() == potentialToNpc): + if currentNpc.getNpcId() == potentialToNpc: if notify.getDebug(): - notify.debug("filterQuests: Removed %s because potentialToNpc is currentNpc" % (questId)) + notify.debug('filterQuests: Removed %s because potentialToNpc is currentNpc' % questId) validQuestPool[questId] = 0 - # Move on to the next quest continue - - # See if this quest is filtered for this av if not getQuestClass(questId).filterFunc(av): if notify.getDebug(): - notify.debug("filterQuests: Removed %s because of filterFunc" % (questId)) + notify.debug('filterQuests: Removed %s because of filterFunc' % questId) validQuestPool[questId] = 0 continue - - # If this potentialToNpc from this quest is already involved - # in a quest on our currentQuest list, remove it for quest in currentQuests: fromNpcId = quest[1] toNpcId = quest[2] - # Do we really need to check the fromNpcId? - #if ( - # ((potentialToNpc == fromNpcId) and (fromNpcId != ToonHQ)) or - # Does the quest we are thinking about taking have the same toNpc - # as a quest we already have? - # ((potentialToNpc == toNpcId) and (toNpcId != ToonHQ)) or - # Are any of the quests we have from this npc - # (currentNpc.getNpcId() == fromNpcId)): - if ((potentialToNpc == toNpcId) and (toNpcId != ToonHQ)): + if potentialToNpc == toNpcId and toNpcId != ToonHQ: validQuestPool[questId] = 0 if notify.getDebug(): - notify.debug("filterQuests: Removed %s because npc involved" % (questId)) + notify.debug('filterQuests: Removed %s because npc involved' % questId) break - finalQuestPool = filter(lambda key : validQuestPool[key], validQuestPool.keys()) + finalQuestPool = [key for key in list(validQuestPool.keys()) if validQuestPool[key]] if notify.getDebug(): - notify.debug("filterQuests: finalQuestPool: %s" % (finalQuestPool)) + notify.debug('filterQuests: finalQuestPool: %s' % finalQuestPool) return finalQuestPool + def chooseTrackChoiceQuest(tier, av, fixed=0): - # If we detect that the track array is bad for some reason, let's - # try to fix it then choose the track again. def fixAndCallAgain(): - if ((not fixed) and av.fixTrackAccess()): - notify.info(("av %s trackAccess fixed: %s" - % (av.getDoId(), trackAccess))) - # Now try choosing the quest again, setting the fixed flag - # to prevent an infinite loop + if not fixed and av.fixTrackAccess(): + notify.info('av %s trackAccess fixed: %s' % (av.getDoId(), trackAccess)) return chooseTrackChoiceQuest(tier, av, fixed=1) else: - # Already tried to fix this once, just return None - return None - + return None + return + bestQuest = None trackAccess = av.getTrackAccess() - if (tier == MM_TIER): - # We need to pick between these two quests based on the trackAccess - # this av already has - # 4001 chooses between TRAP and HEAL - # 4002 chooses between TRAP and SOUND - if (trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 1): - # av already has HEAL, give him 4002 + if tier == MM_TIER: + if trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 1: bestQuest = 4002 - elif (trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 1): - # av already has SOUND, give him 4001 + elif trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 1: bestQuest = 4001 else: - notify.warning(("av %s has bogus trackAccess: %s" - % (av.getDoId(), trackAccess))) + notify.warning('av %s has bogus trackAccess: %s' % (av.getDoId(), trackAccess)) return fixAndCallAgain() - - elif (tier == BR_TIER): - # We need to pick between these two quests based on the trackAccess - # this av already has - if (trackAccess[ToontownBattleGlobals.TRAP_TRACK] == 1): - if (trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 1): - if (trackAccess[ToontownBattleGlobals.DROP_TRACK] == 1): + elif tier == BR_TIER: + if trackAccess[ToontownBattleGlobals.TRAP_TRACK] == 1: + if trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 1: + if trackAccess[ToontownBattleGlobals.DROP_TRACK] == 1: bestQuest = 5004 - elif (trackAccess[ToontownBattleGlobals.LURE_TRACK] == 1): + elif trackAccess[ToontownBattleGlobals.LURE_TRACK] == 1: bestQuest = 5003 else: - notify.warning(("av %s has bogus trackAccess: %s" - % (av.getDoId(), trackAccess))) + notify.warning('av %s has bogus trackAccess: %s' % (av.getDoId(), trackAccess)) return fixAndCallAgain() - elif (trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 1): - if (trackAccess[ToontownBattleGlobals.DROP_TRACK] == 1): + elif trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 1: + if trackAccess[ToontownBattleGlobals.DROP_TRACK] == 1: bestQuest = 5002 - elif (trackAccess[ToontownBattleGlobals.LURE_TRACK] == 1): + elif trackAccess[ToontownBattleGlobals.LURE_TRACK] == 1: bestQuest = 5001 else: - notify.warning(("av %s has bogus trackAccess: %s" - % (av.getDoId(), trackAccess))) + notify.warning('av %s has bogus trackAccess: %s' % (av.getDoId(), trackAccess)) return fixAndCallAgain() - else: - # If you do not have TRAP, then see the other track you do - # not have and pick that choice quest - if (trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 0): - bestQuest = 5005 - elif (trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 0): - bestQuest = 5006 - elif (trackAccess[ToontownBattleGlobals.DROP_TRACK] == 0): - bestQuest = 5007 - elif (trackAccess[ToontownBattleGlobals.LURE_TRACK] == 0): - bestQuest = 5008 - else: - notify.warning(("av %s has bogus trackAccess: %s" - % (av.getDoId(), trackAccess))) - return fixAndCallAgain() + elif trackAccess[ToontownBattleGlobals.SOUND_TRACK] == 0: + bestQuest = 5005 + elif trackAccess[ToontownBattleGlobals.HEAL_TRACK] == 0: + bestQuest = 5006 + elif trackAccess[ToontownBattleGlobals.DROP_TRACK] == 0: + bestQuest = 5007 + elif trackAccess[ToontownBattleGlobals.LURE_TRACK] == 0: + bestQuest = 5008 + else: + notify.warning('av %s has bogus trackAccess: %s' % (av.getDoId(), trackAccess)) + return fixAndCallAgain() else: if notify.getDebug(): - notify.debug(("questPool for reward 400 had no dynamic choice, tier: %s") % (tier)) + notify.debug('questPool for reward 400 had no dynamic choice, tier: %s' % tier) bestQuest = seededRandomChoice(Tier2Reward2QuestsDict[tier][400]) if notify.getDebug(): - notify.debug("chooseTrackChoiceQuest: avId: %s trackAccess: %s tier: %s bestQuest: %s" % - (av.getDoId(), trackAccess, tier, bestQuest)) + notify.debug('chooseTrackChoiceQuest: avId: %s trackAccess: %s tier: %s bestQuest: %s' % (av.getDoId(), trackAccess, tier, bestQuest)) return bestQuest - + return + def chooseMatchingQuest(tier, validQuestPool, rewardId, npc, av): - """ - Choose a quest from quest pool that matches a reward and this npc - Only choose quests that are in the validQuestPool - TODO: match NPC - """ - # If this is a single part trackChoiceQuest, we need to pick the - # correct choice based on what the avatar has chosen. If this is - # a multipart, this will be called on the final quest questsMatchingReward = Tier2Reward2QuestsDict[tier].get(rewardId, []) if notify.getDebug(): - notify.debug("questsMatchingReward: %s tier: %s = %s" % - (rewardId, tier, questsMatchingReward)) - if ((rewardId == 400) and (QuestDict[questsMatchingReward[0]][QuestDictNextQuestIndex] == NA)): - # Ok, it is not multipart, just pick the track choice + notify.debug('questsMatchingReward: %s tier: %s = %s' % (rewardId, tier, questsMatchingReward)) + if rewardId == 400 and QuestDict[questsMatchingReward[0]][QuestDictNextQuestIndex] == NA: bestQuest = chooseTrackChoiceQuest(tier, av) if notify.getDebug(): - notify.debug("single part track choice quest: %s tier: %s avId: %s trackAccess: %s bestQuest: %s" % - (rewardId, tier, av.getDoId(), av.getTrackAccess(), bestQuest)) + notify.debug('single part track choice quest: %s tier: %s avId: %s trackAccess: %s bestQuest: %s' % (rewardId, tier, av.getDoId(), av.getTrackAccess(), bestQuest)) else: validQuestsMatchingReward = PythonUtil.intersection(questsMatchingReward, validQuestPool) if notify.getDebug(): - notify.debug("validQuestsMatchingReward: %s tier: %s = %s" % - (rewardId, tier, validQuestsMatchingReward)) + notify.debug('validQuestsMatchingReward: %s tier: %s = %s' % (rewardId, tier, validQuestsMatchingReward)) if validQuestsMatchingReward: bestQuest = seededRandomChoice(validQuestsMatchingReward) else: - # there were no exact matches - # check for AnyCashbotSuitPart matches questsMatchingReward = Tier2Reward2QuestsDict[tier].get(AnyCashbotSuitPart, []) if notify.getDebug(): - notify.debug("questsMatchingReward: AnyCashbotSuitPart tier: %s = %s" % - (tier, questsMatchingReward)) + notify.debug('questsMatchingReward: AnyCashbotSuitPart tier: %s = %s' % (tier, questsMatchingReward)) validQuestsMatchingReward = PythonUtil.intersection(questsMatchingReward, validQuestPool) if validQuestsMatchingReward: if notify.getDebug(): - notify.debug("validQuestsMatchingReward: AnyCashbotSuitPart tier: %s = %s" % - (tier, validQuestsMatchingReward)) + notify.debug('validQuestsMatchingReward: AnyCashbotSuitPart tier: %s = %s' % (tier, validQuestsMatchingReward)) bestQuest = seededRandomChoice(validQuestsMatchingReward) else: - # still no matches - # check for AnyLawbotSuitPart matches - questsMatchingReward = Tier2Reward2QuestsDict[tier].get(AnyLawbotSuitPart, []) + questsMatchingReward = Tier2Reward2QuestsDict[tier].get(Any, []) if notify.getDebug(): - notify.debug("questsMatchingReward: AnyLawbotSuitPart tier: %s = %s" % - (tier, questsMatchingReward)) + notify.debug('questsMatchingReward: Any tier: %s = %s' % (tier, questsMatchingReward)) + if not questsMatchingReward: + notify.warning('chooseMatchingQuests, no questsMatchingReward') + return None validQuestsMatchingReward = PythonUtil.intersection(questsMatchingReward, validQuestPool) - if validQuestsMatchingReward: - if notify.getDebug(): - notify.debug("validQuestsMatchingReward: AnyLawbotSuitPart tier: %s = %s" % - (tier, validQuestsMatchingReward)) - bestQuest = seededRandomChoice(validQuestsMatchingReward) - else: - # OK, just pick randomly from the Any pool - questsMatchingReward = Tier2Reward2QuestsDict[tier].get(Any, []) - if notify.getDebug(): - notify.debug("questsMatchingReward: Any tier: %s = %s" % - (tier, questsMatchingReward)) - # There better be some of these or it is an error - if not questsMatchingReward: - notify.warning("chooseMatchingQuests, no questsMatchingReward") - return None - validQuestsMatchingReward = PythonUtil.intersection(questsMatchingReward, validQuestPool) - if not validQuestsMatchingReward: - notify.warning("chooseMatchingQuests, no validQuestsMatchingReward") - return None - if notify.getDebug(): - notify.debug("validQuestsMatchingReward: Any tier: %s = %s" % - (tier, validQuestsMatchingReward)) - bestQuest = seededRandomChoice(validQuestsMatchingReward) + if not validQuestsMatchingReward: + notify.warning('chooseMatchingQuests, no validQuestsMatchingReward') + return None + if notify.getDebug(): + notify.debug('validQuestsMatchingReward: Any tier: %s = %s' % (tier, validQuestsMatchingReward)) + bestQuest = seededRandomChoice(validQuestsMatchingReward) return bestQuest + return + def transformReward(baseRewardId, av): - # We need to replace rewardId 900 with the actual rewardId of the - # TrackCompleteReward that this av is training for. - # Same with the 800 quests - if (baseRewardId == 900): - trackId, progress = av.getTrackProgress() + if baseRewardId == 900: + (trackId, progress) = av.getTrackProgress() if trackId == -1: - notify.warning("transformReward: asked to transform 900 but av is not training") - # Just return the original + notify.warning('transformReward: asked to transform 900 but av is not training') actualRewardId = baseRewardId else: actualRewardId = 900 + 1 + trackId return actualRewardId - elif ((baseRewardId > 800) and (baseRewardId < 900)): - trackId, progress = av.getTrackProgress() - # So for drop trackId = 6, do some offsets to get the real reward - # Each track is in a space of 100 quests - # Quests start at 1000, so add 200 to get to 1000 - # 801 becomes 801 + 200 + (6 * 100) = 1601 + elif baseRewardId > 800 and baseRewardId < 900: + (trackId, progress) = av.getTrackProgress() if trackId < 0: - # Somehow you are training quests, but did not pick one. This happens - # when you setQuestTier for instance - notify.warning("transformReward: av: %s is training a track with none chosen!" % - (av.getDoId())) - # In that case, just switch with a jellybean quest I guess - # This should not happen in production + notify.warning('transformReward: av: %s is training a track with none chosen!' % av.getDoId()) return 601 else: - actualRewardId = baseRewardId + 200 + (trackId * 100) + actualRewardId = baseRewardId + 200 + trackId * 100 return actualRewardId else: - # Return the reward unchanged return baseRewardId - -def chooseBestQuests(tier, currentNpc, av): - """ - Returns a list of questIds from this tier - """ - # We seed the random number generator so this npc will present the same - # quests to this avatar if the avatar thinks he's clever and repeatedly - # approaches the NPC "shopping" for different quests +def chooseBestQuests(tier, currentNpc, av): if isLoopingFinalTier(tier): - # If we are in the looping final tier, we do not maintain any - # reward history. Instead, just look at what the av is currently - # working on so we do not offer those at the same time. - rewardHistory = map(lambda questDesc: questDesc[3], av.quests) + rewardHistory = [questDesc[3] for questDesc in av.quests] else: rewardHistory = av.getRewardHistory()[1] - seedRandomGen(currentNpc.getNpcId(), av.getDoId(), tier, rewardHistory) - - # See how many choices of quests we are allowed to have numChoices = getNumChoices(tier) - # Now choose some rewards to help us pick the quests rewards = getNextRewards(numChoices, tier, av) - # If we are out of rewards, return empty if not rewards: return [] - - # Figure out the set of possible quests you could have - # This will make filtering them faster possibleQuests = [] possibleRewards = list(rewards) if Any not in possibleRewards: @@ -5157,116 +2191,87 @@ def chooseBestQuests(tier, currentNpc, av): for rewardId in possibleRewards: possibleQuests.extend(Tier2Reward2QuestsDict[tier].get(rewardId, [])) - # Filter the quest pool down to the ones we have not done, - # that this npc is not involved in, etc. validQuestPool = filterQuests(possibleQuests, currentNpc, av) - # If we are out of quests, return empty if not validQuestPool: return [] - - # This means you get no choice, but you still get a quest if numChoices == 0: numChoices = 1 - - # Now generate the list of quests we will return bestQuests = [] for i in range(numChoices): - # If we are out of quests, break if len(validQuestPool) == 0: break - # If we are out of rewards, break if len(rewards) == 0: break - - # Choose one that matches this npc, reward, etc rewardId = rewards.pop(0) bestQuestId = chooseMatchingQuest(tier, validQuestPool, rewardId, currentNpc, av) - # If that came back None for some reason, just continue to the next choice if bestQuestId is None: continue - # Remove it from consideration in the next pick validQuestPool.remove(bestQuestId) - - # Now choose a toNpc for each quest - # The quest may specify one, if it does return that one bestQuestToNpcId = getQuestToNpcId(bestQuestId) if bestQuestToNpcId == Any: - # TODO: choose one that is nearby, for now use Prof Pete bestQuestToNpcId = 2003 elif bestQuestToNpcId == Same: - # If you were an HQ officer, keep it an HQ officer if currentNpc.getHq(): bestQuestToNpcId = ToonHQ else: bestQuestToNpcId = currentNpc.getNpcId() elif bestQuestToNpcId == ToonHQ: - # flag as a toon hq npc bestQuestToNpcId = ToonHQ - - # Append it to the list we are making bestQuests.append([bestQuestId, rewardId, bestQuestToNpcId]) for quest in bestQuests: quest[1] = transformReward(quest[1], av) + return bestQuests + return def questExists(id): - return QuestDict.has_key(id) + return id in QuestDict + def getQuest(id): - """ - Returns an actual Quest object with properties from this id. - """ questEntry = QuestDict.get(id) if questEntry: questDesc = questEntry[QuestDictDescIndex] questClass = questDesc[0] - # Instantiate a quest object from this class return questClass(id, questDesc[1:]) else: - # Did not find it return None + return + def getQuestClass(id): - """ - Sometimes all you need is the quest class, so call this. - It is more efficient than creating a quest object and asking getType. - """ questEntry = QuestDict.get(id) if questEntry: return questEntry[QuestDictDescIndex][0] else: - # Did not find it - return None + return None + return + def getVisitSCStrings(npcId): if npcId == ToonHQ: - strings = [TTLocalizer.QuestsRecoverItemQuestSeeHQSCString, - TTLocalizer.QuestsRecoverItemQuestGoToHQSCString, - ] + strings = [ + TTLocalizer.QuestsRecoverItemQuestSeeHQSCString, TTLocalizer.QuestsRecoverItemQuestGoToHQSCString] elif npcId == ToonTailor: - strings = [TTLocalizer.QuestsTailorQuestSCString, - ] + strings = [ + TTLocalizer.QuestsTailorQuestSCString] elif npcId: - npcName, hoodName, buildingArticle, buildingName, toStreet, streetName, isInPlayground = getNpcInfo(npcId) - strings = [TTLocalizer.QuestsVisitQuestSeeSCString % (npcName), - ] + (npcName, hoodName, buildingArticle, buildingName, toStreet, streetName, isInPlayground) = getNpcInfo(npcId) + strings = [TTLocalizer.QuestsVisitQuestSeeSCString % npcName] if isInPlayground: - strings.append(TTLocalizer.QuestsRecoverItemQuestGoToPlaygroundSCString % (hoodName)) + strings.append(TTLocalizer.QuestsRecoverItemQuestGoToPlaygroundSCString % hoodName) else: - strings.append(TTLocalizer.QuestsRecoverItemQuestGoToStreetSCString % {'to':toStreet, 'street':streetName, 'hood':hoodName}) - strings.extend([ - TTLocalizer.QuestsRecoverItemQuestVisitBuildingSCString % (buildingArticle, buildingName), - TTLocalizer.QuestsRecoverItemQuestWhereIsBuildingSCString % (buildingArticle, buildingName), - ]) - + strings.append(TTLocalizer.QuestsRecoverItemQuestGoToStreetSCString % {'to': toStreet, 'street': streetName, 'hood': hoodName}) + strings.extend([TTLocalizer.QuestsRecoverItemQuestVisitBuildingSCString % (buildingArticle, buildingName), TTLocalizer.QuestsRecoverItemQuestWhereIsBuildingSCString % (buildingArticle, buildingName)]) return strings + def getFinishToonTaskSCStrings(npcId): return [ - TTLocalizer.QuestsGenericFinishSCString, - ] + getVisitSCStrings(npcId) + TTLocalizer.QuestsGenericFinishSCString] + getVisitSCStrings(npcId) + def chooseQuestDialog(id, status): questDialog = getQuestDialog(id).get(status) @@ -5280,566 +2285,564 @@ def chooseQuestDialog(id, status): return random.choice(questDialog) else: return questDialog + return + -# No quest id is needed for rejection since you will not have been -# assigned one. Just use the default rejection list def chooseQuestDialogReject(): return random.choice(DefaultReject) -# No quest id is needed for rejection since you will not have been -# assigned one. Just use the default rejection list + def chooseQuestDialogTierNotDone(): return random.choice(DefaultTierNotDone) + def getNpcInfo(npcId): npcName = NPCToons.getNPCName(npcId) npcZone = NPCToons.getNPCZone(npcId) hoodId = ZoneUtil.getCanonicalHoodId(npcZone) hoodName = base.cr.hoodMgr.getFullnameFromId(hoodId) - buildingArticle = NPCToons.getBuildingArticle(npcZone) + buildingArticle = NPCToons.getBuildingArticle(npcZone) buildingName = NPCToons.getBuildingTitle(npcZone) branchId = ZoneUtil.getCanonicalBranchZone(npcZone) - toStreet = ToontownGlobals.StreetNames[branchId][0] - streetName = ToontownGlobals.StreetNames[branchId][-1] + toStreet = ToontownGlobals.StreetNames[branchId][0] + streetName = ToontownGlobals.StreetNames[branchId][(-1)] isInPlayground = ZoneUtil.isPlayground(branchId) return (npcName, hoodName, buildingArticle, buildingName, toStreet, streetName, isInPlayground) + def getNpcLocationDialog(fromNpcId, toNpcId): - # Returns (paragraph, buildingName, streetDesc) - if not toNpcId: - return (None, None, None) - + return ( + None, None, None) fromNpcZone = None fromBranchId = None if fromNpcId: fromNpcZone = NPCToons.getNPCZone(fromNpcId) fromBranchId = ZoneUtil.getCanonicalBranchZone(fromNpcZone) - toNpcZone = NPCToons.getNPCZone(toNpcId) toBranchId = ZoneUtil.getCanonicalBranchZone(toNpcZone) - - toNpcName, toHoodName, toBuildingArticle, toBuildingName, toStreetTo, toStreetName, isInPlayground = getNpcInfo(toNpcId) - - if (fromBranchId == toBranchId): - # If you are in the same branch zone, simplify the text to make - # it sound more natural + (toNpcName, toHoodName, toBuildingArticle, toBuildingName, toStreetTo, toStreetName, isInPlayground) = getNpcInfo(toNpcId) + if fromBranchId == toBranchId: if isInPlayground: streetDesc = TTLocalizer.QuestsStreetLocationThisPlayground else: streetDesc = TTLocalizer.QuestsStreetLocationThisStreet + elif isInPlayground: + streetDesc = TTLocalizer.QuestsStreetLocationNamedPlayground % toHoodName else: - if isInPlayground: - streetDesc = TTLocalizer.QuestsStreetLocationNamedPlayground % (toHoodName) - else: - streetDesc = TTLocalizer.QuestsStreetLocationNamedStreet % {'toStreetName':toStreetName, 'toHoodName':toHoodName} - - paragraph = TTLocalizer.QuestsLocationParagraph % {'building' : TTLocalizer.QuestsLocationBuilding % (toNpcName), - 'buildingName' : toBuildingName, - 'buildingVerb' : TTLocalizer.QuestsLocationBuildingVerb, - 'street' : streetDesc} + streetDesc = TTLocalizer.QuestsStreetLocationNamedStreet % (toStreetName, toHoodName) + paragraph = TTLocalizer.QuestsLocationParagraph % {'building': TTLocalizer.QuestsLocationBuilding % toNpcName, 'buildingName': toBuildingName, 'buildingVerb': TTLocalizer.QuestsLocationBuildingVerb, 'street': streetDesc} + return ( + paragraph, toBuildingName, streetDesc) + return - return (paragraph, toBuildingName, streetDesc) -def fillInQuestNames(text, avName = None, fromNpcId = None, toNpcId = None): +def fillInQuestNames(text, avName=None, fromNpcId=None, toNpcId=None): text = copy.deepcopy(text) - if avName != None: text = string.replace(text, '_avName_', avName) - if toNpcId: if toNpcId == ToonHQ: toNpcName = TTLocalizer.QuestsHQOfficerFillin where = TTLocalizer.QuestsHQWhereFillin buildingName = TTLocalizer.QuestsHQBuildingNameFillin streetDesc = TTLocalizer.QuestsHQLocationNameFillin - elif toNpcId == ToonTailor: toNpcName = TTLocalizer.QuestsTailorFillin where = TTLocalizer.QuestsTailorWhereFillin buildingName = TTLocalizer.QuestsTailorBuildingNameFillin streetDesc = TTLocalizer.QuestsTailorLocationNameFillin - else: toNpcName = str(NPCToons.getNPCName(toNpcId)) - where, buildingName, streetDesc = getNpcLocationDialog(fromNpcId, toNpcId) - + (where, buildingName, streetDesc) = getNpcLocationDialog(fromNpcId, toNpcId) text = string.replace(text, '_toNpcName_', toNpcName) text = string.replace(text, '_where_', where) text = string.replace(text, '_buildingName_', buildingName) text = string.replace(text, '_streetDesc_', streetDesc) - return text - + return + def getVisitingQuest(): - """ - Returns a visiting Quest object - """ return VisitQuest(VISIT_QUEST_ID) + class Reward: + __module__ = __name__ + def __init__(self, id, reward): self.id = id self.reward = reward + def getId(self): return self.id + def getType(self): return self.__class__ + def getAmount(self): return None + return + def sendRewardAI(self, av): - raise "not implemented" + raise 'not implemented' + def countReward(self, qrc): - raise "not implemented" + raise 'not implemented' + def getString(self): - return "undefined" + return 'undefined' + def getPosterString(self): - return "base class" + return 'base class' + class MaxHpReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getAmount(self): return self.reward[0] + def sendRewardAI(self, av): maxHp = av.getMaxHp() - # Add the amount, but make sure it is not over the global max maxHp = min(ToontownGlobals.MaxHpLimit, maxHp + self.getAmount()) av.b_setMaxHp(maxHp) - # Also, give them a full heal av.toonUp(maxHp) + def countReward(self, qrc): qrc.maxHp += self.getAmount() + def getString(self): - return (TTLocalizer.QuestsMaxHpReward % (self.getAmount())) + return TTLocalizer.QuestsMaxHpReward % self.getAmount() + def getPosterString(self): - return (TTLocalizer.QuestsMaxHpRewardPoster % self.getAmount()) + return TTLocalizer.QuestsMaxHpRewardPoster % self.getAmount() + class MoneyReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getAmount(self): return self.reward[0] + def sendRewardAI(self, av): money = av.getMoney() maxMoney = av.getMaxMoney() - # With banking system, excess money gets put in - # the bank automatically, without having to check maxMoney av.addMoney(self.getAmount()) + def countReward(self, qrc): qrc.money += self.getAmount() + def getString(self): amt = self.getAmount() if amt == 1: - return (TTLocalizer.QuestsMoneyRewardSingular) + return TTLocalizer.QuestsMoneyRewardSingular else: - return (TTLocalizer.QuestsMoneyRewardPlural % (amt)) + return TTLocalizer.QuestsMoneyRewardPlural % amt + def getPosterString(self): amt = self.getAmount() if amt == 1: - return (TTLocalizer.QuestsMoneyRewardPosterSingular) + return TTLocalizer.QuestsMoneyRewardPosterSingular else: - return (TTLocalizer.QuestsMoneyRewardPosterPlural % (amt)) + return TTLocalizer.QuestsMoneyRewardPosterPlural % amt + class MaxMoneyReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getAmount(self): return self.reward[0] + def sendRewardAI(self, av): av.b_setMaxMoney(self.getAmount()) + def countReward(self, qrc): qrc.maxMoney = self.getAmount() + def getString(self): amt = self.getAmount() if amt == 1: return TTLocalizer.QuestsMaxMoneyRewardSingular else: - return (TTLocalizer.QuestsMaxMoneyRewardPlural % (amt)) + return TTLocalizer.QuestsMaxMoneyRewardPlural % amt + def getPosterString(self): amt = self.getAmount() if amt == 1: return TTLocalizer.QuestsMaxMoneyRewardPosterSingular else: - return (TTLocalizer.QuestsMaxMoneyRewardPosterPlural % (amt)) + return TTLocalizer.QuestsMaxMoneyRewardPosterPlural % amt + class MaxGagCarryReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getAmount(self): return self.reward[0] + def getName(self): return self.reward[1] + def sendRewardAI(self, av): av.b_setMaxCarry(self.getAmount()) + def countReward(self, qrc): qrc.maxCarry = self.getAmount() + def getString(self): name = self.getName() amt = self.getAmount() - return (TTLocalizer.QuestsMaxGagCarryReward % {"name" : name, "num" : amt}) + return TTLocalizer.QuestsMaxGagCarryReward % {'name': name, 'num': amt} + def getPosterString(self): name = self.getName() amt = self.getAmount() - return (TTLocalizer.QuestsMaxGagCarryRewardPoster % {"name" : name, "num" : amt}) + return TTLocalizer.QuestsMaxGagCarryRewardPoster % {'name': name, 'num': amt} + class MaxQuestCarryReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getAmount(self): return self.reward[0] + def sendRewardAI(self, av): av.b_setQuestCarryLimit(self.getAmount()) + def countReward(self, qrc): qrc.questCarryLimit = self.getAmount() + def getString(self): amt = self.getAmount() - return (TTLocalizer.QuestsMaxQuestCarryReward % (amt)) + return TTLocalizer.QuestsMaxQuestCarryReward % amt + def getPosterString(self): amt = self.getAmount() - return (TTLocalizer.QuestsMaxQuestCarryRewardPoster % (amt)) + return TTLocalizer.QuestsMaxQuestCarryRewardPoster % amt + class TeleportReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getZone(self): return self.reward[0] + def sendRewardAI(self, av): av.addTeleportAccess(self.getZone()) + def countReward(self, qrc): qrc.addTeleportAccess(self.getZone()) + def getString(self): - hoodName = ToontownGlobals.hoodNameMap[self.getZone()][-1] - return (TTLocalizer.QuestsTeleportReward % (hoodName)) + hoodName = ToontownGlobals.hoodNameMap[self.getZone()][(-1)] + return TTLocalizer.QuestsTeleportReward % hoodName + def getPosterString(self): - hoodName = ToontownGlobals.hoodNameMap[self.getZone()][-1] - return (TTLocalizer.QuestsTeleportRewardPoster % (hoodName)) - -# How much training do you need to learn each track? -TrackTrainingQuotas = { - ToontownBattleGlobals.HEAL_TRACK : 15, - ToontownBattleGlobals.TRAP_TRACK : 15, - ToontownBattleGlobals.LURE_TRACK : 15, - ToontownBattleGlobals.SOUND_TRACK: 15, - ToontownBattleGlobals.THROW_TRACK : 15, - ToontownBattleGlobals.SQUIRT_TRACK : 15, - ToontownBattleGlobals.DROP_TRACK : 15, - } - + hoodName = ToontownGlobals.hoodNameMap[self.getZone()][(-1)] + return TTLocalizer.QuestsTeleportRewardPoster % hoodName + + +TrackTrainingQuotas = {ToontownBattleGlobals.HEAL_TRACK: 15, ToontownBattleGlobals.TRAP_TRACK: 15, ToontownBattleGlobals.LURE_TRACK: 15, ToontownBattleGlobals.SOUND_TRACK: 15, ToontownBattleGlobals.THROW_TRACK: 15, ToontownBattleGlobals.SQUIRT_TRACK: 15, ToontownBattleGlobals.DROP_TRACK: 15} + class TrackTrainingReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getTrack(self): track = self.reward[0] if track == None: track = 0 return track + return + def sendRewardAI(self, av): - # Start out with 0 progress av.b_setTrackProgress(self.getTrack(), 0) + def countReward(self, qrc): - # TODO: how will this trackId get filled in? - # Start out with 0 progress qrc.trackProgressId = self.getTrack() qrc.trackProgress = 0 + def getString(self): trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackTrainingReward % (trackName)) + return TTLocalizer.QuestsTrackTrainingReward % trackName + def getPosterString(self): - # We do not know which track the user will pick yet, so we do not - # know the trackName to fill in - # trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackTrainingRewardPoster) + return TTLocalizer.QuestsTrackTrainingRewardPoster + class TrackProgressReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getTrack(self): track = self.reward[0] if track == None: track = 0 return track + return + def getProgressIndex(self): return self.reward[1] + def sendRewardAI(self, av): av.addTrackProgress(self.getTrack(), self.getProgressIndex()) + def countReward(self, qrc): qrc.addTrackProgress(self.getTrack(), self.getProgressIndex()) + def getString(self): trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackProgressReward % - {"frameNum" : self.getProgressIndex(), "trackName" : trackName}) + return TTLocalizer.QuestsTrackProgressReward % {'frameNum': self.getProgressIndex(), 'trackName': trackName} + def getPosterString(self): trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackProgressRewardPoster % - {"trackName" : trackName, "frameNum" : self.getProgressIndex()}) + return TTLocalizer.QuestsTrackProgressRewardPoster % {'trackName': trackName, 'frameNum': self.getProgressIndex()} + class TrackCompleteReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getTrack(self): track = self.reward[0] if track == None: track = 0 return track + return + def sendRewardAI(self, av): av.addTrackAccess(self.getTrack()) av.clearTrackProgress() + def countReward(self, qrc): - # TODO: how will this trackId get filled in? qrc.addTrackAccess(self.getTrack()) qrc.clearTrackProgress() + def getString(self): trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackCompleteReward % (trackName)) + return TTLocalizer.QuestsTrackCompleteReward % trackName + def getPosterString(self): trackName = ToontownBattleGlobals.Tracks[self.getTrack()].capitalize() - return (TTLocalizer.QuestsTrackCompleteRewardPoster % (trackName)) + return TTLocalizer.QuestsTrackCompleteRewardPoster % trackName + class ClothingTicketReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def sendRewardAI(self, av): return + def countReward(self, qrc): return + def getString(self): - return (TTLocalizer.QuestsClothingTicketReward) - def getPosterString(self): - return (TTLocalizer.QuestsClothingTicketRewardPoster) - -class TIPClothingTicketReward(ClothingTicketReward): - def __init__(self, id, reward): - ClothingTicketReward.__init__(self, id, reward) - def getString(self): - return (TTLocalizer.TIPQuestsClothingTicketReward) + return TTLocalizer.QuestsClothingTicketReward + def getPosterString(self): - return (TTLocalizer.TIPQuestsClothingTicketRewardPoster) + return TTLocalizer.QuestsClothingTicketRewardPoster + class CheesyEffectReward(Reward): + __module__ = __name__ + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getEffect(self): return self.reward[0] + def getHoodId(self): return self.reward[1] + def getDurationMinutes(self): return self.reward[2] + def sendRewardAI(self, av): - expireTime = (int)(time.time() / 60 + 0.5) + self.getDurationMinutes() + expireTime = int(time.time() / 60 + 0.5) + self.getDurationMinutes() av.b_setCheesyEffect(self.getEffect(), self.getHoodId(), expireTime) + def countReward(self, qrc): pass + def getString(self): effect = self.getEffect() hoodId = self.getHoodId() duration = self.getDurationMinutes() string = TTLocalizer.CheesyEffectMinutes if duration > 90: - duration = (int)((duration + 30) / 60) + duration = int((duration + 30) / 60) string = TTLocalizer.CheesyEffectHours if duration > 36: - duration = (int)((duration + 12) / 24) + duration = int((duration + 12) / 24) string = TTLocalizer.CheesyEffectDays desc = TTLocalizer.CheesyEffectDescriptions[effect][1] - if (hoodId == 0): - whileStr = "" - elif (hoodId == 1): - whileStr = (TTLocalizer.CheesyEffectExceptIn % (TTLocalizer.ToontownCentral[-1])) + if hoodId == 0: + whileStr = '' + elif hoodId == 1: + whileStr = TTLocalizer.CheesyEffectExceptIn % TTLocalizer.ToontownCentral[(-1)] else: hoodName = base.cr.hoodMgr.getFullnameFromId(hoodId) - whileStr = (TTLocalizer.CheesyEffectWhileYouAreIn % (hoodName)) + whileStr = TTLocalizer.CheesyEffectWhileYouAreIn % hoodName if duration: - return (string % {"time" : duration, - "effectName" : desc, - "whileIn" : whileStr,}) + return string % {'time': duration, 'effectName': desc, 'whileIn': whileStr} else: - return TTLocalizer.CheesyEffectIndefinite % {"effectName" : desc, - "whileIn" : whileStr, } - + return TTLocalizer.CheesyEffectIndefinite % {'effectName': desc, 'whileIn': whileStr} + def getPosterString(self): effect = self.getEffect() desc = TTLocalizer.CheesyEffectDescriptions[effect][0] - return (TTLocalizer.QuestsCheesyEffectRewardPoster % (desc)) + return TTLocalizer.QuestsCheesyEffectRewardPoster % desc + class CogSuitPartReward(Reward): - trackNames = [TTLocalizer.Bossbot, TTLocalizer.Lawbot, - TTLocalizer.Cashbot, TTLocalizer.Sellbot] + __module__ = __name__ + trackNames = [TTLocalizer.Bossbot, TTLocalizer.Lawbot, TTLocalizer.Cashbot, TTLocalizer.Sellbot] + def __init__(self, id, reward): Reward.__init__(self, id, reward) + def getCogTrack(self): return self.reward[0] + def getCogPart(self): return self.reward[1] + def sendRewardAI(self, av): dept = self.getCogTrack() part = self.getCogPart() av.giveCogPart(part, dept) + def countReward(self, qrc): - # TODO! return + def getCogTrackName(self): index = ToontownGlobals.cogDept2index[self.getCogTrack()] return CogSuitPartReward.trackNames[index] + def getCogPartName(self): index = ToontownGlobals.cogDept2index[self.getCogTrack()] return CogDisguiseGlobals.PartsQueryNames[index][self.getCogPart()] + def getString(self): - return (TTLocalizer.QuestsCogSuitPartReward % - {'cogTrack':self.getCogTrackName(), - 'part':self.getCogPartName()}) + return TTLocalizer.QuestsCogSuitPartReward % {'cogTrack': self.getCogTrackName(), 'part': self.getCogPartName()} + def getPosterString(self): - return (TTLocalizer.QuestsCogSuitPartRewardPoster % - {'cogTrack':self.getCogTrackName(), - 'part':self.getCogPartName()}) + return TTLocalizer.QuestsCogSuitPartRewardPoster % {'cogTrack': self.getCogTrackName(), 'part': self.getCogPartName()} - def getRewardClass(id): - """ - Sometimes all you need is the reward class, so call this. - It is more efficient than creating a reward object and asking it. - """ reward = RewardDict.get(id) if reward: return reward[0] else: return None + return + def getReward(id): - """ - Create and return an actual reward object from this id - """ reward = RewardDict.get(id) if reward: rewardClass = reward[0] return rewardClass(id, reward[1:]) else: - notify.warning('getReward(): id %s not found.' % (id)) + notify.warning('getReward(): id %s not found.' % id) return None + return + def getNextRewards(numChoices, tier, av): - """ - Generate a list containing the next few required rewards with - some optional rewards mixed in at random. Then choose randomly - from this list to return the next rewards. - - If we are at or near the end of the tier, fill in the list - with optional rewards. - """ - # list gives us a copy rewardTier = list(getRewardsInTier(tier)) optRewards = list(getOptionalRewardsInTier(tier)) - - # give trialers something to do since we won't let them fininsh their last gag track task - if av.getGameAccess() == OTPGlobals.AccessFull and \ - tier == TT_TIER +3: - # force paid players to pickup the quest to finish their gag track - optRewards = [] - if isLoopingFinalTier(tier): - # If we are in the looping final tier, we do not maintain any - # reward history. Instead, just look at what the av is currently - # working on so we do not offer those at the same time. - rewardHistory = map(lambda questDesc: questDesc[3], av.quests) + rewardHistory = [questDesc[3] for questDesc in av.quests] if notify.getDebug(): - notify.debug('getNextRewards: current rewards (history): %s' % (rewardHistory)) + notify.debug('getNextRewards: current rewards (history): %s' % rewardHistory) else: rewardHistory = av.getRewardHistory()[1] if notify.getDebug(): - notify.debug('getNextRewards: rewardHistory: %s' % (rewardHistory)) - + notify.debug('getNextRewards: rewardHistory: %s' % rewardHistory) if notify.getDebug(): - notify.debug('getNextRewards: rewardTier: %s' % (rewardTier)) - notify.debug('getNextRewards: numChoices: %s' % (numChoices)) - - # Iterate over the original rewards from the tier, not the rewardTier list - # because we are going to be modifying rewardTier (removing rewards) + notify.debug('getNextRewards: rewardTier: %s' % rewardTier) + notify.debug('getNextRewards: numChoices: %s' % numChoices) for rewardId in getRewardsInTier(tier): - # See if this is a CogSuitPartReward - # If it is, we do not want to offer a reward for a part the toon already has if getRewardClass(rewardId) == CogSuitPartReward: - # Make sure we do not already have this reward deptStr = RewardDict.get(rewardId)[1] cogPart = RewardDict.get(rewardId)[2] dept = ToontownGlobals.cogDept2index[deptStr] if av.hasCogPart(cogPart, dept): notify.debug('getNextRewards: already has cog part: %s dept: %s' % (cogPart, dept)) - # The avatar already has this cog part - do not offer the reward rewardTier.remove(rewardId) else: notify.debug('getNextRewards: keeping quest for cog part: %s dept: %s' % (cogPart, dept)) - # Remove the rewards that are in our history for rewardId in rewardHistory: if rewardId in rewardTier: rewardTier.remove(rewardId) elif rewardId in optRewards: optRewards.remove(rewardId) - # See if this is the TrackCompleteReward - elif (rewardId in (901,902,903,904,905,906,907)): + elif rewardId in (901, 902, 903, 904, 905, 906, 907): genericRewardId = 900 if genericRewardId in rewardTier: rewardTier.remove(genericRewardId) - # See if this is a track progress reward. If so, it will be stored - # as the actual reward number, like 1301 instead of the generic - # reward number like 801. To prevent duplicate rewards from being - # shown, if we see 1301 here, we need to remove 801 from the running - elif (rewardId > 1000 and rewardId < 1699): + elif rewardId > 1000 and rewardId < 1699: index = rewardId % 100 genericRewardId = 800 + index if genericRewardId in rewardTier: rewardTier.remove(genericRewardId) - - # If you have no choice, just return the first one in the list - # Make sure there are any on the list if numChoices == 0: - if (len(rewardTier) == 0): + if len(rewardTier) == 0: return [] - else: - return [rewardTier[0]] - - # If there are none in the tier, make the player complete the ones he has and - # do not offer optional rewards - # Maybe we do not want to do this. Why not let them work on some optional ones? - # The only downside is people may keep doing optional quests not knowing they - # are blocking their own progress to the next tier. This is probably the lesser - # of two evils. - # if (len(rewardTier) == 0): - # notify.debug('getNextRewards: no rewards in tier: %s' % (rewardTier)) - # return [] - - # Since the rewardTier is in order, just grab the first ones - # remaining in the list, up to numChoices of them + else: + return [ + rewardTier[0]] rewardPool = rewardTier[:numChoices] - - # Fill in the space remaining in reward pool with optional rewards - # Fill in up to 2 times numChoices options to pick from - for i in range(len(rewardPool), numChoices*2): + for i in range(len(rewardPool), numChoices * 2): if optRewards: optionalReward = seededRandomChoice(optRewards) optRewards.remove(optionalReward) rewardPool.append(optionalReward) else: break - if notify.getDebug(): - notify.debug('getNextRewards: starting reward pool: %s' % (rewardPool)) - # Any left? + if notify.getDebug(): + notify.debug('getNextRewards: starting reward pool: %s' % rewardPool) if len(rewardPool) == 0: if notify.getDebug(): notify.debug('getNextRewards: no rewards left at all') return [] - - # Automatically pick the first one so you will always be presented - # with a required reward, plus some optional - finalRewardPool = [rewardPool.pop(0)] - - # Then randomly pick the rest - for i in range(numChoices-1): - # Out of rewards + finalRewardPool = [ + rewardPool.pop(0)] + for i in range(numChoices - 1): if len(rewardPool) == 0: break selectedReward = seededRandomChoice(rewardPool) @@ -5847,786 +2850,199 @@ def getNextRewards(numChoices, tier, av): finalRewardPool.append(selectedReward) if notify.getDebug(): - notify.debug('getNextRewards: final reward pool: %s' % (finalRewardPool)) + notify.debug('getNextRewards: final reward pool: %s' % finalRewardPool) return finalRewardPool - - - -RewardDict = { - # Careful: some rewards are deltas, others are absolute - - # HP rewards are deltas from your current max hp - # in other words if you have 15hp, and you get a +1 MaxHPReward - # you will now have 15+1=16hp. - 100 : (MaxHpReward, 1), - 101 : (MaxHpReward, 2), - 102 : (MaxHpReward, 3), - 103 : (MaxHpReward, 4), - 104 : (MaxHpReward, 5), - 105 : (MaxHpReward, 6), - 106 : (MaxHpReward, 7), - 107 : (MaxHpReward, 8), - 108 : (MaxHpReward, 9), - 109 : (MaxHpReward, 10), - - # MaxGagCarryRewards are absolute values - # If you currently carry 20 items, and you get a CarryReward of 25, - # now you can carry 25, not 20+25. - 200 : (MaxGagCarryReward, 25, TTLocalizer.QuestsMediumPouch), - 201 : (MaxGagCarryReward, 30, TTLocalizer.QuestsLargePouch), - 202 : (MaxGagCarryReward, 35, TTLocalizer.QuestsSmallBag), - 203 : (MaxGagCarryReward, 40, TTLocalizer.QuestsMediumBag), - 204 : (MaxGagCarryReward, 50, TTLocalizer.QuestsLargeBag), - 205 : (MaxGagCarryReward, 60, TTLocalizer.QuestsSmallBackpack), - 206 : (MaxGagCarryReward, 70, TTLocalizer.QuestsMediumBackpack), - 207 : (MaxGagCarryReward, 80, TTLocalizer.QuestsLargeBackpack), - - 300 : (TeleportReward, ToontownGlobals.ToontownCentral), - 301 : (TeleportReward, ToontownGlobals.DonaldsDock), - 302 : (TeleportReward, ToontownGlobals.DaisyGardens), - 303 : (TeleportReward, ToontownGlobals.MinniesMelodyland), - 304 : (TeleportReward, ToontownGlobals.TheBrrrgh), - 305 : (TeleportReward, ToontownGlobals.DonaldsDreamland), - - # Dummy stand in reward - 400 : (TrackTrainingReward, None), - # Real track access rewards - these are used by the QuestManagerAI - # to assign the track training reward once the track has been chosen - # by the player. They are not listed in the RewardDict. - 401 : (TrackTrainingReward, ToontownBattleGlobals.HEAL_TRACK), - 402 : (TrackTrainingReward, ToontownBattleGlobals.TRAP_TRACK), - 403 : (TrackTrainingReward, ToontownBattleGlobals.LURE_TRACK), - 404 : (TrackTrainingReward, ToontownBattleGlobals.SOUND_TRACK), - 405 : (TrackTrainingReward, ToontownBattleGlobals.THROW_TRACK), - 406 : (TrackTrainingReward, ToontownBattleGlobals.SQUIRT_TRACK), - 407 : (TrackTrainingReward, ToontownBattleGlobals.DROP_TRACK), - - # These are absolute values - 500 : (MaxQuestCarryReward, 2), - 501 : (MaxQuestCarryReward, 3), - 502 : (MaxQuestCarryReward, 4), - - # These are deltas - 600 : (MoneyReward, 10), - 601 : (MoneyReward, 20), - 602 : (MoneyReward, 40), - 603 : (MoneyReward, 60), - 604 : (MoneyReward, 100), - 605 : (MoneyReward, 150), - 606 : (MoneyReward, 200), - 607 : (MoneyReward, 250), - 608 : (MoneyReward, 300), - 609 : (MoneyReward, 400), - 610 : (MoneyReward, 500), - 611 : (MoneyReward, 600), - 612 : (MoneyReward, 700), - 613 : (MoneyReward, 800), - 614 : (MoneyReward, 900), - 615 : (MoneyReward, 1000), - 616 : (MoneyReward, 1100), - 617 : (MoneyReward, 1200), - 618 : (MoneyReward, 1300), - 619 : (MoneyReward, 1400), - 620 : (MoneyReward, 1500), - # Following added to accommodate CFO quests - 621 : (MoneyReward, 1750), - 622 : (MoneyReward, 2000), - 623 : (MoneyReward, 2500), - - # These are absolute values - 700 : (MaxMoneyReward, 50), - 701 : (MaxMoneyReward, 60), - 702 : (MaxMoneyReward, 80), - 703 : (MaxMoneyReward, 100), - 704 : (MaxMoneyReward, 120), - 705 : (MaxMoneyReward, 150), - 706 : (MaxMoneyReward, 200), - 707 : (MaxMoneyReward, 250), - - 801 : (TrackProgressReward, None, 1), - 802 : (TrackProgressReward, None, 2), - 803 : (TrackProgressReward, None, 3), - 804 : (TrackProgressReward, None, 4), - 805 : (TrackProgressReward, None, 5), - 806 : (TrackProgressReward, None, 6), - 807 : (TrackProgressReward, None, 7), - 808 : (TrackProgressReward, None, 8), - 809 : (TrackProgressReward, None, 9), - 810 : (TrackProgressReward, None, 10), - 811 : (TrackProgressReward, None, 11), - 812 : (TrackProgressReward, None, 12), - 813 : (TrackProgressReward, None, 13), - 814 : (TrackProgressReward, None, 14), - 815 : (TrackProgressReward, None, 15), - - 110: (TIPClothingTicketReward,), - 1000: (ClothingTicketReward,), - - 1001 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 1), - 1002 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 2), - 1003 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 3), - 1004 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 4), - 1005 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 5), - 1006 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 6), - 1007 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 7), - 1008 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 8), - 1009 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 9), - 1010 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 10), - 1011 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 11), - 1012 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 12), - 1013 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 13), - 1014 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 14), - 1015 : (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 15), - - 1101 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 1), - 1102 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 2), - 1103 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 3), - 1104 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 4), - 1105 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 5), - 1106 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 6), - 1107 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 7), - 1108 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 8), - 1109 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 9), - 1110 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 10), - 1111 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 11), - 1112 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 12), - 1113 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 13), - 1114 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 14), - 1115 : (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 15), - - 1201 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 1), - 1202 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 2), - 1203 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 3), - 1204 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 4), - 1205 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 5), - 1206 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 6), - 1207 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 7), - 1208 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 8), - 1209 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 9), - 1210 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 10), - 1211 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 11), - 1212 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 12), - 1213 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 13), - 1214 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 14), - 1215 : (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 15), - - 1301 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 1), - 1302 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 2), - 1303 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 3), - 1304 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 4), - 1305 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 5), - 1306 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 6), - 1307 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 7), - 1308 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 8), - 1309 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 9), - 1310 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 10), - 1311 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 11), - 1312 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 12), - 1313 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 13), - 1314 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 14), - 1315 : (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 15), - - # No throw or squirt since everybody starts with those - - 1601 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 1), - 1602 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 2), - 1603 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 3), - 1604 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 4), - 1605 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 5), - 1606 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 6), - 1607 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 7), - 1608 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 8), - 1609 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 9), - 1610 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 10), - 1611 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 11), - 1612 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 12), - 1613 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 13), - 1614 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 14), - 1615 : (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 15), - - # This completes the training for a track and assigns access to this track - 900 : (TrackCompleteReward, None), - # Real track complete rewards - these are used by the QuestManagerAI - # to assign the track access once the track has been trained completely. - # They are not listed in the RewardDict. - 901 : (TrackCompleteReward, ToontownBattleGlobals.HEAL_TRACK), - 902 : (TrackCompleteReward, ToontownBattleGlobals.TRAP_TRACK), - 903 : (TrackCompleteReward, ToontownBattleGlobals.LURE_TRACK), - 904 : (TrackCompleteReward, ToontownBattleGlobals.SOUND_TRACK), - 905 : (TrackCompleteReward, ToontownBattleGlobals.THROW_TRACK), - 906 : (TrackCompleteReward, ToontownBattleGlobals.SQUIRT_TRACK), - 907 : (TrackCompleteReward, ToontownBattleGlobals.DROP_TRACK), - - # Cheesy effect reward ID's are in the 2000 range. The ID's are - # based on 2000 + hoodId / 10 + effect. Most cheesy effects are - # not allowed in ToontownCentral, which is a generally sane land - # and safe for newbies. A particular HoodId means the effect will - # only be observed while in that hood; a HoodId of 1 means any - # hood except TTC, and a HoodId of 0 means any hood including TTC. - - # TT - 2205 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 2000, 10), - 2206 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 2000, 10), - - # DD - 2101 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1000, 10), - 2102 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1000, 10), - 2105 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 20), - 2106 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 20), - - # DG - 2501 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 5000, 60), - 2502 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 5000, 60), - 2503 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 5000, 20), - 2504 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 5000, 20), - 2505 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 60), - 2506 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 60), - - # MM - 2401 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 120), - 2402 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 120), - 2403 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 4000, 60), - 2404 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 4000, 60), - 2405 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 120), - 2406 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 120), - 2407 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 4000, 30), - 2408 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 4000, 30), - 2409 : (CheesyEffectReward, ToontownGlobals.CETransparent, 4000, 30), - 2410 : (CheesyEffectReward, ToontownGlobals.CENoColor, 4000, 30), - - # BR - 2301 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 360), - 2302 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 360), - 2303 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 360), - 2304 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 360), - 2305 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 1440), - 2306 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 1440), - 2307 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 3000, 240), - 2308 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 3000, 240), - 2309 : (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 120), - 2310 : (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 120), - 2311 : (CheesyEffectReward, ToontownGlobals.CEInvisible, 3000, 120), - - # DL, 24 hrs - 2900 : (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), - 2901 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 1440), - 2902 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 1440), - 2903 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 1440), - 2904 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 1440), - 2905 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 1440), - 2906 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 1440), - 2907 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 1440), - 2908 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 1440), - 2909 : (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 1440), - 2910 : (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 1440), - 2911 : (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 1440), - - # DL+1, 2 days - 2920 : (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), - 2921 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 2880), - 2922 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 2880), - 2923 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 2880), - 2924 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 2880), - 2925 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 2880), - 2926 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 2880), - 2927 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 2880), - 2928 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 2880), - 2929 : (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 2880), - 2930 : (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 2880), - 2931 : (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 2880), - - # DL+2, 7 days - 2940 : (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), - 2941 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 10080), - 2942 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 10080), - 2943 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 10080), - 2944 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 10080), - 2945 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 10080), - 2946 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 10080), - 2947 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 10080), - 2948 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 10080), - 2949 : (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 10080), - 2950 : (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 10080), - 2951 : (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 10080), - - # DL+3, 30 days - 2960 : (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), - 2961 : (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 43200), - 2962 : (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 43200), - 2963 : (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 43200), - 2964 : (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 43200), - 2965 : (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 43200), - 2966 : (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 43200), - 2967 : (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 43200), - 2968 : (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 43200), - 2969 : (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 43200), - 2970 : (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 43200), - 2971 : (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 43200), - - # suit part rewards - 4000 : (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegUpper), - 4001 : (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegLower), - 4002 : (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegFoot), - 4003 : (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegUpper), - 4004 : (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegLower), - 4005 : (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegFoot), - 4006 : (CogSuitPartReward, 'm', CogDisguiseGlobals.upperTorso), - 4007 : (CogSuitPartReward, 'm', CogDisguiseGlobals.torsoPelvis), - 4008 : (CogSuitPartReward, 'm', CogDisguiseGlobals.leftArmUpper), - 4009 : (CogSuitPartReward, 'm', CogDisguiseGlobals.leftArmLower), - 4010 : (CogSuitPartReward, 'm', CogDisguiseGlobals.rightArmUpper), - 4011 : (CogSuitPartReward, 'm', CogDisguiseGlobals.rightArmLower), - - 4100 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftLegUpper), - 4101 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftLegLower), - 4102 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftLegFoot), - 4103 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightLegUpper), - 4104 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightLegLower), - 4105 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightLegFoot), - 4106 : (CogSuitPartReward, 'l', CogDisguiseGlobals.upperTorso), - 4107 : (CogSuitPartReward, 'l', CogDisguiseGlobals.torsoPelvis), - 4108 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftArmUpper), - 4109 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftArmLower), - 4110 : (CogSuitPartReward, 'l', CogDisguiseGlobals.leftArmHand), - 4111 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightArmUpper), - 4112 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightArmLower), - 4113 : (CogSuitPartReward, 'l', CogDisguiseGlobals.rightArmHand), - - 4200 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftLegUpper), - 4201 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftLegLower), - 4202 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftLegFoot), - 4203 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightLegUpper), - 4204 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightLegLower), - 4205 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightLegFoot), - 4206 : (CogSuitPartReward, 'c', CogDisguiseGlobals.torsoLeftShoulder), - 4207 : (CogSuitPartReward, 'c', CogDisguiseGlobals.torsoRightShoulder), - 4208 : (CogSuitPartReward, 'c', CogDisguiseGlobals.torsoChest), - 4209 : (CogSuitPartReward, 'c', CogDisguiseGlobals.torsoHealthMeter), - 4210 : (CogSuitPartReward, 'c', CogDisguiseGlobals.torsoPelvis), - 4211 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftArmUpper), - 4212 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftArmLower), - 4213 : (CogSuitPartReward, 'c', CogDisguiseGlobals.leftArmHand), - 4214 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightArmUpper), - 4215 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightArmLower), - 4216 : (CogSuitPartReward, 'c', CogDisguiseGlobals.rightArmHand), - - # if you add or remove any suit part rewards, update the ranges in - # getAllRewardIdsForReward() - - } + +RewardDict = {100: (MaxHpReward, 1), 101: (MaxHpReward, 2), 102: (MaxHpReward, 3), 103: (MaxHpReward, 4), 104: (MaxHpReward, 5), 105: (MaxHpReward, 6), 106: (MaxHpReward, 7), 107: (MaxHpReward, 8), 108: (MaxHpReward, 9), 109: (MaxHpReward, 10), 200: (MaxGagCarryReward, 25, TTLocalizer.QuestsMediumPouch), 201: (MaxGagCarryReward, 30, TTLocalizer.QuestsLargePouch), 202: (MaxGagCarryReward, 35, TTLocalizer.QuestsSmallBag), 203: (MaxGagCarryReward, 40, TTLocalizer.QuestsMediumBag), 204: (MaxGagCarryReward, 50, TTLocalizer.QuestsLargeBag), 205: (MaxGagCarryReward, 60, TTLocalizer.QuestsSmallBackpack), 206: (MaxGagCarryReward, 70, TTLocalizer.QuestsMediumBackpack), 207: (MaxGagCarryReward, 80, TTLocalizer.QuestsLargeBackpack), 300: (TeleportReward, ToontownGlobals.ToontownCentral), 301: (TeleportReward, ToontownGlobals.DonaldsDock), 302: (TeleportReward, ToontownGlobals.DaisyGardens), 303: (TeleportReward, ToontownGlobals.MinniesMelodyland), 304: (TeleportReward, ToontownGlobals.TheBrrrgh), 305: (TeleportReward, ToontownGlobals.DonaldsDreamland), 400: (TrackTrainingReward, None), 401: (TrackTrainingReward, ToontownBattleGlobals.HEAL_TRACK), 402: (TrackTrainingReward, ToontownBattleGlobals.TRAP_TRACK), 403: (TrackTrainingReward, ToontownBattleGlobals.LURE_TRACK), 404: (TrackTrainingReward, ToontownBattleGlobals.SOUND_TRACK), 405: (TrackTrainingReward, ToontownBattleGlobals.THROW_TRACK), 406: (TrackTrainingReward, ToontownBattleGlobals.SQUIRT_TRACK), 407: (TrackTrainingReward, ToontownBattleGlobals.DROP_TRACK), 500: (MaxQuestCarryReward, 2), 501: (MaxQuestCarryReward, 3), 502: (MaxQuestCarryReward, 4), 600: (MoneyReward, 10), 601: (MoneyReward, 20), 602: (MoneyReward, 40), 603: (MoneyReward, 60), 604: (MoneyReward, 100), 605: (MoneyReward, 150), 606: (MoneyReward, 200), 607: (MoneyReward, 250), 608: (MoneyReward, 300), 609: (MoneyReward, 400), 610: (MoneyReward, 500), 611: (MoneyReward, 600), 612: (MoneyReward, 700), 613: (MoneyReward, 800), 614: (MoneyReward, 900), 615: (MoneyReward, 1000), 616: (MoneyReward, 1100), 617: (MoneyReward, 1200), 618: (MoneyReward, 1300), 619: (MoneyReward, 1400), 620: (MoneyReward, 1500), 621: (MoneyReward, 1750), 622: (MoneyReward, 2000), 623: (MoneyReward, 2500), 700: (MaxMoneyReward, 50), 701: (MaxMoneyReward, 60), 702: (MaxMoneyReward, 80), 703: (MaxMoneyReward, 100), 704: (MaxMoneyReward, 120), 705: (MaxMoneyReward, 150), 706: (MaxMoneyReward, 200), 707: (MaxMoneyReward, 250), 801: (TrackProgressReward, None, 1), 802: (TrackProgressReward, None, 2), 803: (TrackProgressReward, None, 3), 804: (TrackProgressReward, None, 4), 805: (TrackProgressReward, None, 5), 806: (TrackProgressReward, None, 6), 807: (TrackProgressReward, None, 7), 808: (TrackProgressReward, None, 8), 809: (TrackProgressReward, None, 9), 810: (TrackProgressReward, None, 10), 811: (TrackProgressReward, None, 11), 812: (TrackProgressReward, None, 12), 813: (TrackProgressReward, None, 13), 814: (TrackProgressReward, None, 14), 815: (TrackProgressReward, None, 15), 1000: (ClothingTicketReward,), 1001: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 1), 1002: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 2), 1003: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 3), 1004: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 4), 1005: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 5), 1006: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 6), 1007: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 7), 1008: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 8), 1009: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 9), 1010: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 10), 1011: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 11), 1012: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 12), 1013: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 13), 1014: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 14), 1015: (TrackProgressReward, ToontownBattleGlobals.HEAL_TRACK, 15), 1101: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 1), 1102: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 2), 1103: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 3), 1104: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 4), 1105: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 5), 1106: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 6), 1107: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 7), 1108: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 8), 1109: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 9), 1110: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 10), 1111: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 11), 1112: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 12), 1113: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 13), 1114: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 14), 1115: (TrackProgressReward, ToontownBattleGlobals.TRAP_TRACK, 15), 1201: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 1), 1202: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 2), 1203: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 3), 1204: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 4), 1205: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 5), 1206: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 6), 1207: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 7), 1208: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 8), 1209: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 9), 1210: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 10), 1211: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 11), 1212: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 12), 1213: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 13), 1214: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 14), 1215: (TrackProgressReward, ToontownBattleGlobals.LURE_TRACK, 15), 1301: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 1), 1302: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 2), 1303: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 3), 1304: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 4), 1305: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 5), 1306: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 6), 1307: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 7), 1308: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 8), 1309: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 9), 1310: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 10), 1311: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 11), 1312: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 12), 1313: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 13), 1314: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 14), 1315: (TrackProgressReward, ToontownBattleGlobals.SOUND_TRACK, 15), 1601: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 1), 1602: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 2), 1603: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 3), 1604: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 4), 1605: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 5), 1606: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 6), 1607: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 7), 1608: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 8), 1609: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 9), 1610: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 10), 1611: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 11), 1612: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 12), 1613: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 13), 1614: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 14), 1615: (TrackProgressReward, ToontownBattleGlobals.DROP_TRACK, 15), 900: (TrackCompleteReward, None), 901: (TrackCompleteReward, ToontownBattleGlobals.HEAL_TRACK), 902: (TrackCompleteReward, ToontownBattleGlobals.TRAP_TRACK), 903: (TrackCompleteReward, ToontownBattleGlobals.LURE_TRACK), 904: (TrackCompleteReward, ToontownBattleGlobals.SOUND_TRACK), 905: (TrackCompleteReward, ToontownBattleGlobals.THROW_TRACK), 906: (TrackCompleteReward, ToontownBattleGlobals.SQUIRT_TRACK), 907: (TrackCompleteReward, ToontownBattleGlobals.DROP_TRACK), 2205: (CheesyEffectReward, ToontownGlobals.CEBigToon, 2000, 10), 2206: (CheesyEffectReward, ToontownGlobals.CESmallToon, 2000, 10), 2101: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1000, 10), 2102: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1000, 10), 2105: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 20), 2106: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 20), 2501: (CheesyEffectReward, ToontownGlobals.CEBigHead, 5000, 60), 2502: (CheesyEffectReward, ToontownGlobals.CESmallHead, 5000, 60), 2503: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 5000, 20), 2504: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 5000, 20), 2505: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 60), 2506: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 60), 2401: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 120), 2402: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 120), 2403: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 4000, 60), 2404: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 4000, 60), 2405: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 120), 2406: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 120), 2407: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 4000, 30), 2408: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 4000, 30), 2409: (CheesyEffectReward, ToontownGlobals.CETransparent, 4000, 30), 2410: (CheesyEffectReward, ToontownGlobals.CENoColor, 4000, 30), 2301: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 360), 2302: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 360), 2303: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 360), 2304: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 360), 2305: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 1440), 2306: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 1440), 2307: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 3000, 240), 2308: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 3000, 240), 2309: (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 120), 2310: (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 120), 2311: (CheesyEffectReward, ToontownGlobals.CEInvisible, 3000, 120), 2900: (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), 2901: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 1440), 2902: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 1440), 2903: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 1440), 2904: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 1440), 2905: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 1440), 2906: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 1440), 2907: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 1440), 2908: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 1440), 2909: (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 1440), 2910: (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 1440), 2911: (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 1440), 2920: (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), 2921: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 2880), 2922: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 2880), 2923: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 2880), 2924: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 2880), 2925: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 2880), 2926: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 2880), 2927: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 2880), 2928: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 2880), 2929: (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 2880), 2930: (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 2880), 2931: (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 2880), 2940: (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), 2941: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 10080), 2942: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 10080), 2943: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 10080), 2944: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 10080), 2945: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 10080), 2946: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 10080), 2947: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 10080), 2948: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 10080), 2949: (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 10080), 2950: (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 10080), 2951: (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 10080), 2960: (CheesyEffectReward, ToontownGlobals.CENormal, 0, 0), 2961: (CheesyEffectReward, ToontownGlobals.CEBigHead, 1, 43200), 2962: (CheesyEffectReward, ToontownGlobals.CESmallHead, 1, 43200), 2963: (CheesyEffectReward, ToontownGlobals.CEBigLegs, 1, 43200), 2964: (CheesyEffectReward, ToontownGlobals.CESmallLegs, 1, 43200), 2965: (CheesyEffectReward, ToontownGlobals.CEBigToon, 0, 43200), 2966: (CheesyEffectReward, ToontownGlobals.CESmallToon, 0, 43200), 2967: (CheesyEffectReward, ToontownGlobals.CEFlatPortrait, 1, 43200), 2968: (CheesyEffectReward, ToontownGlobals.CEFlatProfile, 1, 43200), 2969: (CheesyEffectReward, ToontownGlobals.CETransparent, 1, 43200), 2970: (CheesyEffectReward, ToontownGlobals.CENoColor, 1, 43200), 2971: (CheesyEffectReward, ToontownGlobals.CEInvisible, 1, 43200), 4000: (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegUpper), 4001: (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegLower), 4002: (CogSuitPartReward, 'm', CogDisguiseGlobals.leftLegFoot), 4003: (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegUpper), 4004: (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegLower), 4005: (CogSuitPartReward, 'm', CogDisguiseGlobals.rightLegFoot), 4006: (CogSuitPartReward, 'm', CogDisguiseGlobals.upperTorso), 4007: (CogSuitPartReward, 'm', CogDisguiseGlobals.torsoPelvis), 4008: (CogSuitPartReward, 'm', CogDisguiseGlobals.leftArmUpper), 4009: (CogSuitPartReward, 'm', CogDisguiseGlobals.leftArmLower), 4010: (CogSuitPartReward, 'm', CogDisguiseGlobals.rightArmUpper), 4011: (CogSuitPartReward, 'm', CogDisguiseGlobals.rightArmLower)} def getNumTiers(): return len(RequiredRewardTrackDict) - 1 + def isLoopingFinalTier(tier): - return (tier == LOOPING_FINAL_TIER) + return tier == LOOPING_FINAL_TIER + def getRewardsInTier(tier): return RequiredRewardTrackDict.get(tier, []) + def getNumRewardsInTier(tier): return len(RequiredRewardTrackDict.get(tier, [])) + def rewardTierExists(tier): - return RequiredRewardTrackDict.has_key(tier) + return tier in RequiredRewardTrackDict + def getOptionalRewardsInTier(tier): return OptionalRewardTrackDict.get(tier, []) def getRewardIdFromTrackId(trackId): - # Given this trackId, return the rewardId for this TrackTrainingReward - # Since the TrackTrainingRewards start at 401, just add the trackId to it return 401 + trackId -# This is the list of required rewards -RequiredRewardTrackDict = { - # Tier: [reward list in order] - # Note: We need enough maxHp reward to get from 15 to 100 exactly - # Fishing adds an additional 5 HP outside of the quest system - # Note: Track choices go in their own tier so that the track progress rewards - # on the subsequent tier go towards a track we have chosen - # Note: Because fishing gives out 5 HP, the numbers below are minimums, - # the actual Toon's HP could be up to 5 HP more - - # 15 HP - TT_TIER : (100,), - # 16 HP - TT_TIER+1 : (400,), - # 16 HP - TT_TIER+2 : (100,801,200,802,803,101,804,805,102,806,807,100,808,809,101,810,811,500,812,813,700,814,815,300), - # 25 HP - TT_TIER+3 : (900,), - # 25 HP - - DD_TIER : (400,), - # 25 HP - DD_TIER+1 : (100,801,802,201,803,804,101,805,806,102,807,808,100,809,810,101,811,812,701,813,814,815,301), - # 34 HP - DD_TIER+2 : (900,), - # 34 HP - - DG_TIER : (100,202,101,102,100,101,501,702,302), - # 43 HP - - MM_TIER : (400,), - # 43 HP - MM_TIER+1 : (100,801,802,203,803,804,101,805,806,102,807,808,100,809,810,101,811,812,703,813,814,815,303), - # 52 HP - MM_TIER+2 : (900,), - # 52 HP - - BR_TIER : (400,), - # 52 HP - BR_TIER+1 : (100,801,802,704,803,804,101,805,806,502,807,808,102,809,810,204,811,812,100,813,814,101,815,304), - # 61 HP - BR_TIER+2 : (900,), - # 61 HP - - # Note: Added first few pieces of Cashbot Cog Suit to DL Tier - # Note: Added remainder of Cashbot Cog Suit to DL+1-+3, - # redistributed some of the others to even out the tiers a bit - DL_TIER : (4000,100,205,101,102,705,103,305,4001,4002), - # 71 HP - DL_TIER+1 : (100,206,101,4003,4004,4005,102,4006,4007,4008,706,103,4009,4010,4011,4000,4001,4002), - # 81 HP - DL_TIER+2 : (4006,4007,4008,100,4000,4001,4002,4003,101,4004,4005,4009,102,103,4010,4011), - # 91 HP - DL_TIER+3 : (4009,4010,4011,100,4000,4001,101,4002,4003,102,4004,4005,102,4006,4007,707,207,4008), - # 100 HP - - # I'm not sure why these were done as separate teirs - so the rewards could be strictly sequential? - - # Lawbot cog suit parts - LAWBOT_HQ_TIER : (4100,), - LAWBOT_HQ_TIER+1 : (4101,), - LAWBOT_HQ_TIER+2 : (4102,), - LAWBOT_HQ_TIER+3 : (4103,), - LAWBOT_HQ_TIER+4 : (4104,), - LAWBOT_HQ_TIER+5 : (4105,), - LAWBOT_HQ_TIER+6 : (4106,), - LAWBOT_HQ_TIER+7 : (4107,), - LAWBOT_HQ_TIER+8 : (4108,), - LAWBOT_HQ_TIER+9 : (4109,), - LAWBOT_HQ_TIER+10 : (4110,), - LAWBOT_HQ_TIER+11 : (4111,), - LAWBOT_HQ_TIER+12 : (4112,), - LAWBOT_HQ_TIER+13 : (4113,), - - # Bossbot cog suit parts - BOSSBOT_HQ_TIER : (4200,), - BOSSBOT_HQ_TIER+1 : (4201,), - BOSSBOT_HQ_TIER+2 : (4202,), - BOSSBOT_HQ_TIER+3 : (4203,), - BOSSBOT_HQ_TIER+4 : (4204,), - BOSSBOT_HQ_TIER+5 : (4205,), - BOSSBOT_HQ_TIER+6 : (4206,), - BOSSBOT_HQ_TIER+7 : (4207,), - BOSSBOT_HQ_TIER+8 : (4208,), - BOSSBOT_HQ_TIER+9 : (4209,), - BOSSBOT_HQ_TIER+10 : (4210,), - BOSSBOT_HQ_TIER+11 : (4211,), - BOSSBOT_HQ_TIER+12 : (4212,), - BOSSBOT_HQ_TIER+13 : (4213,), - BOSSBOT_HQ_TIER+14 : (4214,), - BOSSBOT_HQ_TIER+15 : (4215,), - BOSSBOT_HQ_TIER+16 : (4216,), - - # Note: Added all Cashbot Cog Suit parts to Elder Tier to ensure - # players past DL & DL+1 get the suit. - ELDER_TIER : (4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011, - ), - } - -# This is the list of optional rewards -OptionalRewardTrackDict = { - # Tier: [reward list in order] - TT_TIER : (), - TT_TIER+1 : (), - TT_TIER+2 : (1000, 601, 601, 602, 602, 2205, 2206, 2205, 2206), - - # we changed TT_TIER+3 to have optional rewards for trialers - TT_TIER+3 : (601, 601, 602, 602, 2205, 2206, 2205, 2206), - - DD_TIER : (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), - DD_TIER+1 : (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), - DD_TIER+2 : (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), - - DG_TIER : (1000, 603, 603, 604, 604, 2501, 2502, 2503, 2504, 2505, 2506), - - MM_TIER : (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), - MM_TIER+1 : (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), - MM_TIER+2 : (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), - - BR_TIER : (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, - 2305, 2306, 2307, 2308, 2309, 2310, 2311), - BR_TIER+1 : (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, - 2305, 2306, 2307, 2308, 2309, 2310, 2311), - BR_TIER+2 : (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, - 2305, 2306, 2307, 2308, 2309, 2310, 2311), - - DL_TIER : (607, 607, 607, 607, 608, 608, 608, 608, - 2901, 2902, 2907, 2908, 2909, 2910, 2911), - DL_TIER+1 : (1000, 607, 607, 607, 607, 608, 608, 608, 608, - 2923, 2924, 2927, 2928, 2929, 2930, 2931), - DL_TIER+2 : (608, 608, 608, 608, 609, 609, 609, 609, - 2941, 2942, 2943, 2944, 2947, 2948, 2949, 2950, 2951), - DL_TIER+3 : (1000, 609, 609, 609, 609, 609, 609, - 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971), - - # Heavier on clothing quests and jellybeans - ELDER_TIER : (1000, 1000, - 610, 611, 612, 613, 614, 615, 616, 617, 618, - 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971), - } + +RequiredRewardTrackDict = {TT_TIER: (100,), TT_TIER + 1: (400,), TT_TIER + 2: (100, 801, 200, 802, 803, 101, 804, 805, 102, 806, 807, 100, 808, 809, 101, 810, 811, 500, 812, 813, 700, 814, 815, 300), TT_TIER + 3: (900,), DD_TIER: (400,), DD_TIER + 1: (100, 801, 802, 201, 803, 804, 101, 805, 806, 102, 807, 808, 100, 809, 810, 101, 811, 812, 701, 813, 814, 815, 301), DD_TIER + 2: (900,), DG_TIER: (100, 202, 101, 102, 100, 101, 501, 702, 302), MM_TIER: (400,), MM_TIER + 1: (100, 801, 802, 203, 803, 804, 101, 805, 806, 102, 807, 808, 100, 809, 810, 101, 811, 812, 703, 813, 814, 815, 303), MM_TIER + 2: (900,), BR_TIER: (400,), BR_TIER + 1: (100, 801, 802, 704, 803, 804, 101, 805, 806, 502, 807, 808, 102, 809, 810, 204, 811, 812, 100, 813, 814, 101, 815, 304), BR_TIER + 2: (900,), DL_TIER: (4000, 100, 205, 101, 102, 705, 103, 305, 4001, 4002), DL_TIER + 1: (100, 206, 101, 4003, 4004, 4005, 102, 4006, 4007, 4008, 706, 103, 4009, 4010, 4011, 4000, 4001, 4002), DL_TIER + 2: (4006, 4007, 4008, 100, 4000, 4001, 4002, 4003, 101, 4004, 4005, 4009, 102, 103, 4010, 4011), DL_TIER + 3: (4009, 4010, 4011, 100, 4000, 4001, 101, 4002, 4003, 102, 4004, 4005, 102, 4006, 4007, 707, 207, 4008), ELDER_TIER: (4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011)} +OptionalRewardTrackDict = {TT_TIER: (), TT_TIER + 1: (), TT_TIER + 2: (1000, 601, 601, 602, 602, 2205, 2206, 2205, 2206), TT_TIER + 3: (), DD_TIER: (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), DD_TIER + 1: (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), DD_TIER + 2: (1000, 602, 602, 603, 603, 2101, 2102, 2105, 2106), DG_TIER: (1000, 603, 603, 604, 604, 2501, 2502, 2503, 2504, 2505, 2506), MM_TIER: (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), MM_TIER + 1: (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), MM_TIER + 2: (1000, 604, 604, 605, 605, 2403, 2404, 2405, 2406, 2407, 2408, 2409), BR_TIER: (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, 2305, 2306, 2307, 2308, 2309, 2310, 2311), BR_TIER + 1: (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, 2305, 2306, 2307, 2308, 2309, 2310, 2311), BR_TIER + 2: (1000, 606, 606, 606, 606, 606, 607, 607, 607, 607, 607, 2305, 2306, 2307, 2308, 2309, 2310, 2311), DL_TIER: (607, 607, 607, 607, 608, 608, 608, 608, 2901, 2902, 2907, 2908, 2909, 2910, 2911), DL_TIER + 1: (1000, 607, 607, 607, 607, 608, 608, 608, 608, 2923, 2924, 2927, 2928, 2929, 2930, 2931), DL_TIER + 2: (608, 608, 608, 608, 609, 609, 609, 609, 2941, 2942, 2943, 2944, 2947, 2948, 2949, 2950, 2951), DL_TIER + 3: (1000, 609, 609, 609, 609, 609, 609, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971), ELDER_TIER: (1000, 1000, 610, 611, 612, 613, 614, 615, 616, 617, 618, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971)} def isRewardOptional(tier, rewardId): - return ((OptionalRewardTrackDict.has_key(tier)) and - (rewardId in OptionalRewardTrackDict[tier])) + return tier in OptionalRewardTrackDict and rewardId in OptionalRewardTrackDict[tier] + def getItemName(itemId): - """ - Return the singular name of this itemId - """ return ItemDict[itemId][0] + def getPluralItemName(itemId): - """ - Return the plural name of this itemId - """ return ItemDict[itemId][1] + def avatarHasTrolleyQuest(av): - """return true if avatar has trolley quest""" - return ((len(av.quests) == 1) and - (av.quests[0][0] == TROLLEY_QUEST_ID)) + return len(av.quests) == 1 and av.quests[0][0] == TROLLEY_QUEST_ID + def avatarHasCompletedTrolleyQuest(av): - """return true if avatar has completed trolley quest; - only call if avatar has the trolley quest""" - assert avatarHasTrolleyQuest(av) return av.quests[0][4] > 0 + def avatarHasFirstCogQuest(av): - """return true if avatar has first cog defeat quest""" - return ((len(av.quests) == 1) and - (av.quests[0][0] == FIRST_COG_QUEST_ID)) + return len(av.quests) == 1 and av.quests[0][0] == FIRST_COG_QUEST_ID + def avatarHasCompletedFirstCogQuest(av): - """return true if avatar has completed first cog defeat quest; - only call if avatar has the first cog quest""" - assert avatarHasFirstCogQuest(av) return av.quests[0][4] > 0 + def avatarHasFriendQuest(av): - """return true if avatar has make a friend quest""" - return ((len(av.quests) == 1) and - (av.quests[0][0] == FRIEND_QUEST_ID)) + return len(av.quests) == 1 and av.quests[0][0] == FRIEND_QUEST_ID + def avatarHasCompletedFriendQuest(av): - """return true if avatar has completed make a friend quest; - only call if avatar has the friend quest""" - assert avatarHasFriendQuest(av) return av.quests[0][4] > 0 + def avatarHasPhoneQuest(av): - """return true if avatar has trolley quest""" - return ((len(av.quests) == 1) and - (av.quests[0][0] == PHONE_QUEST_ID)) + return len(av.quests) == 1 and av.quests[0][0] == PHONE_QUEST_ID + def avatarHasCompletedPhoneQuest(av): - """return true if avatar has completed trolley quest; - only call if avatar has the trolley quest""" - assert avatarHasPhoneQuest(av) return av.quests[0][4] > 0 + def avatarWorkingOnRequiredRewards(av): - """ - Return 1 is this avatar is working on any required rewards - for this tier. 0 otherwise. - """ tier = av.getRewardTier() - # Get a copy of the rewards in this tier rewardList = list(getRewardsInTier(tier)) - - # Transform rewards for i in range(len(rewardList)): actualRewardId = transformReward(rewardList[i], av) rewardList[i] = actualRewardId - # Now see if we are working on any - # Iterate though our rewards and see if they are in the rewardList for questDesc in av.quests: questId = questDesc[0] rewardId = questDesc[3] if rewardId in rewardList: return 1 - # If this is part of a multipart, our rewardId might be NA - # If it is, get the final reward id and check that elif rewardId == NA: rewardId = transformReward(getFinalRewardId(questId, fAll=1), av) if rewardId in rewardList: return 1 + return 0 + def avatarHasAllRequiredRewards(av, tier): - """ - Return 1 is this avatar has all the required rewards in his history - for this tier. 0 otherwise. - """ - - # See what rewards we have worked on. - # NOTE: list() gives us a copy of the reward history so - # we can play with it without damaging the original. rewardHistory = list(av.getRewardHistory()[1]) - # See what rewards we should have for this tier rewardList = getRewardsInTier(tier) - notify.debug("checking avatarHasAllRequiredRewards: history: %s, tier: %s" % - (rewardHistory, rewardList)) + notify.debug('checking avatarHasAllRequiredRewards: history: %s, tier: %s' % (rewardHistory, rewardList)) for rewardId in rewardList: - if (rewardId == 900): - # The 900 reward is changed to one of 901-907 when we know what track they choose - # Make sure they have one of the following rewards: + if rewardId == 900: found = 0 - for actualRewardId in (901,902,903,904,905,906,907): + for actualRewardId in (901, 902, 903, 904, 905, 906, 907): if actualRewardId in rewardHistory: found = 1 rewardHistory.remove(actualRewardId) if notify.getDebug(): - notify.debug("avatarHasAllRequiredRewards: rewardId 900 found as: %s" % - (actualRewardId)) + notify.debug('avatarHasAllRequiredRewards: rewardId 900 found as: %s' % actualRewardId) break + if not found: if notify.getDebug(): - notify.debug("avatarHasAllRequiredRewards: rewardId 900 not found") + notify.debug('avatarHasAllRequiredRewards: rewardId 900 not found') return 0 else: - # Track training rewards are replaced, so check the replacement values actualRewardId = transformReward(rewardId, av) - # Now see if the avatar has this reward if actualRewardId in rewardHistory: - # Take it out so we do not count it twice rewardHistory.remove(actualRewardId) - # If this reward is a CogSuitPart, see if the avatar already has - # the reward and if so, count it as done. - elif (getRewardClass(rewardId) == CogSuitPartReward): + elif getRewardClass(rewardId) == CogSuitPartReward: deptStr = RewardDict.get(rewardId)[1] cogPart = RewardDict.get(rewardId)[2] dept = ToontownGlobals.cogDept2index[deptStr] if av.hasCogPart(cogPart, dept): if notify.getDebug(): - notify.debug("avatarHasAllRequiredRewards: rewardId: %s counts, avatar has cog part: %s dept: %s" % - (actualRewardId, cogPart, dept)) - # Count this as done, since the avatar already has the reward - # We do not remove it from the rewardHistory because it is not there - # This avatar skipped this quest altogether because they already had - # the cog part. + notify.debug('avatarHasAllRequiredRewards: rewardId: %s counts, avatar has cog part: %s dept: %s' % (actualRewardId, cogPart, dept)) else: - # We can safely bail out here because if you are missing - # any single required reward, the answer is 0 - no you are not done if notify.getDebug(): - notify.debug("avatarHasAllRequiredRewards: CogSuitPartReward: %s not found" % - (actualRewardId)) + notify.debug('avatarHasAllRequiredRewards: CogSuitPartReward: %s not found' % actualRewardId) return 0 else: - # We can safely bail out here because if you are missing - # any single required reward, the answer is 0 - no you are not done if notify.getDebug(): - notify.debug("avatarHasAllRequiredRewards: rewardId %s not found" % - (actualRewardId)) + notify.debug('avatarHasAllRequiredRewards: rewardId %s not found' % actualRewardId) return 0 if notify.getDebug(): - # All remaining rewards in the list should be optional, let's check. - # Only do this in debug mode - notify.debug("avatarHasAllRequiredRewards: remaining rewards: %s" % - (rewardHistory)) + notify.debug('avatarHasAllRequiredRewards: remaining rewards: %s' % rewardHistory) for rewardId in rewardHistory: if not isRewardOptional(tier, rewardId): - notify.warning("required reward found, expected only optional: %s" % - (rewardId)) - - # If you made it here, you must have all rewards in your history. + notify.warning('required reward found, expected only optional: %s' % rewardId) + return 1 + def nextQuestList(nextQuest): - """ given a 'nextQuest' field from a quest, - returns None or a list of quest ids """ if nextQuest == NA: return None - seqTypes = (types.ListType, types.TupleType) + seqTypes = ( + list, tuple) if type(nextQuest) in seqTypes: return nextQuest else: - return (nextQuest,) + return ( + nextQuest,) + return + def checkReward(questId, forked=0): - """ - for a given quest, check that all paths lead to a reward, and - that it's the same reward - 'forked' is for internal use, do not override - """ - #print "checkReward: %s" % questId quest = QuestDict[questId] reward = quest[5] nextQuests = nextQuestList(quest[6]) if nextQuests is None: - # this is the end of a quest chain - assert reward != NA, "end-of-chain quest %s ends with no reward" % questId - validRewards = RewardDict.keys() + [Any,AnyCashbotSuitPart,AnyLawbotSuitPart,OBSOLETE] - assert reward in validRewards, "quest %s: unknown reward %s" % (questId, reward) + validRewards = list(RewardDict.keys()) + [Any, AnyCashbotSuitPart, OBSOLETE] if reward is OBSOLETE: - # this quest is obsolete; notify - print "warning: quest %s is obsolete" % questId + print('warning: quest %s is obsolete' % questId) return reward else: - # internal quests currently cannot give out rewards - assert reward is NA, "internal chain quest %s has a reward (%s)" % (questId, reward) forked = forked or len(nextQuests) > 1 firstReward = checkReward(nextQuests[0], forked) - #print "firstReward: %s" % firstReward for qId in nextQuests[1:]: thisReward = checkReward(qId, forked) - #print "thisReward: %s (%s)" % (thisReward, firstReward) - assert thisReward == firstReward, "quest %s leads to different rewards through chained quests %s(%s) and %s(%s)" % (questId, nextQuests[0], firstReward, qId, thisReward) + return firstReward + return + def assertAllQuestsValid(): - print "checking quests..." - # create one of each quest, to give the assertions a chance - # to complain - for questId in QuestDict.keys(): + print('checking quests...') + for questId in list(QuestDict.keys()): try: quest = getQuest(questId) - except AssertionError, e: - err = "invalid quest: %s" % questId - print err; raise - # this hides the stack trace - #raise AssertionError, err - - # check multi-part quests - for questId in QuestDict.keys(): + except AssertionError as e: + err = 'invalid quest: %s' % questId + print(err) + raise + + for questId in list(QuestDict.keys()): quest = QuestDict[questId] - (tier, start, questDesc, fromNpc, - toNpc, reward, nextQuest, dialog) = quest - - # NOTE: this rule was bent to fix the problem where - # you could just sidestep a long difficult quest chain by - # going to the NPC you were supposed to visit to be offered - # a different quest. Now the first visit quest and the next - # are both starting quests so when you walk up to the NPC - # you are supposed to visit, he will just pick up with the - # second quest in the chain. - # -- Joe - # nextQuests = nextQuestList(nextQuest) - # if nextQuests is not None: - # for qId in nextQuests: - # qStart = QuestDict[qId][1] - # assert not qStart, 'quest %s chained to start quest %s' % (questId, qId) - - # is this the start of a quest chain? + (tier, start, questDesc, fromNpc, toNpc, reward, nextQuest, dialog) = quest if start: - # check the end reward(s) - checkReward(questId) - + checkReward(questId) \ No newline at end of file diff --git a/toontown/src/racing/DistributedGag.py b/toontown/src/racing/DistributedGag.py index 79861b7c..60366cae 100644 --- a/toontown/src/racing/DistributedGag.py +++ b/toontown/src/racing/DistributedGag.py @@ -3,7 +3,7 @@ from direct.interval.ProjectileInterval import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * -from DroppedGag import * +from .DroppedGag import * #This class is primarily for any gags whose target is not deterministically #know. diff --git a/toontown/src/racing/DistributedGagAI.py b/toontown/src/racing/DistributedGagAI.py index 09349a49..a3160874 100644 --- a/toontown/src/racing/DistributedGagAI.py +++ b/toontown/src/racing/DistributedGagAI.py @@ -18,7 +18,7 @@ def generate(self): def announceGenerate(self): DistributedObjectAI.DistributedObjectAI.announceGenerate(self) - print "I'm Here!!!!" + print("I'm Here!!!!") def delete(self): DistributedObjectAI.DistributedObjectAI.delete(self) diff --git a/toontown/src/racing/DistributedLeaderBoard.py b/toontown/src/racing/DistributedLeaderBoard.py index 139f52b0..8758cf5e 100644 --- a/toontown/src/racing/DistributedLeaderBoard.py +++ b/toontown/src/racing/DistributedLeaderBoard.py @@ -16,7 +16,7 @@ from pandac.PandaModules import * from toontown.toonbase.ToontownGlobals import * import random -import cPickle +import pickle @@ -87,7 +87,7 @@ def setDisplay(self, pData): # This message is sent from the AI when the leaderboard data should change # so the assumption is we should update the display afterwards self.notify.debug("setDisplay: changing leaderboard text on local side") - trackName, recordTitle, scores = cPickle.loads(pData) + trackName, recordTitle, scores = pickle.loads(pData) self.display(trackName, recordTitle, scores) def buildListParts(self): diff --git a/toontown/src/racing/DistributedLeaderBoardAI.py b/toontown/src/racing/DistributedLeaderBoardAI.py index 9e81c800..0e67dca5 100644 --- a/toontown/src/racing/DistributedLeaderBoardAI.py +++ b/toontown/src/racing/DistributedLeaderBoardAI.py @@ -12,7 +12,7 @@ from direct.directnotify import DirectNotifyGlobal from toontown.racing.RaceGlobals import * from toontown.toonbase.TTLocalizer import * -import cPickle +import pickle class DistributedLeaderBoardAI(DistributedObjectAI.DistributedObjectAI): """ @@ -77,12 +77,12 @@ def getPosHpr(self): def getDisplay(self): ''' ''' - return cPickle.dumps(self.subscriptionDict[self.curIndex], 1) + return pickle.dumps(self.subscriptionDict[self.curIndex], 1) def sendNewDisplay(self): self.notify.debug("sendNewDisplay: sending updated lb info to client") - self.sendUpdate("setDisplay", [cPickle.dumps(self.subscriptionDict[self.subscriptionList[self.curIndex]], 1)]) + self.sendUpdate("setDisplay", [pickle.dumps(self.subscriptionDict[self.subscriptionList[self.curIndex]], 1)]) def start(self): ''' diff --git a/toontown/src/racing/DistributedRace.py b/toontown/src/racing/DistributedRace.py index c6c9bb5d..9c2b3ac8 100644 --- a/toontown/src/racing/DistributedRace.py +++ b/toontown/src/racing/DistributedRace.py @@ -8,7 +8,7 @@ from direct.interval.IntervalGlobal import * from otp.otpbase import OTPGlobals from direct.interval.IntervalGlobal import * -from RaceGag import RaceGag +from .RaceGag import RaceGag from toontown.toonbase import ToontownGlobals, TTLocalizer from toontown.toon import ToonHeadFrame from toontown.racing.KartDNA import InvalidEntry, getAccessory, getDefaultColor @@ -16,8 +16,8 @@ from direct.distributed import DistributedSmoothNode from math import fmod from math import sqrt -from RaceGUI import RaceGUI -import RaceGlobals +from .RaceGUI import RaceGUI +from . import RaceGlobals from direct.task.Task import Task from toontown.hood import SkyUtil from direct.fsm import ClassicFSM, State @@ -352,13 +352,13 @@ def setCircuitPlace(self, avId, place, entryFee, winnings, bonus,trophies): avatar=base.cr.doId2do.get(avId,None) if(avatar): - print ("circuit trophies %s" % (trophies)) - print ("winnings %s" % (winnings)) + print(("circuit trophies %s" % (trophies))) + print(("winnings %s" % (winnings))) #self.gui.racerFinishedCircuit(avId, place, winnings, trophies) self.gui.racerFinishedCircuit(avId, oldPlace, entryFee, winnings, bonus,trophies) def endCircuitRace(self): - print self.placeFixup + print(self.placeFixup) self.gui.circuitFinished(self.placeFixup) def prepForRace(self): @@ -1289,7 +1289,7 @@ def showBuildings(self, t, forceRecompute = False): elif side == 'outersidest': dict = self.outerBarricadeDict - if dict.has_key(segmentInd): + if segmentInd in dict: self.currBldgGroups[side] = dict[segmentInd] #we should have the correct value in currBldgGroups at this point @@ -1406,7 +1406,7 @@ def precomputeSideStreets(self): else: self.notify.error("unhandled side") - if dict.has_key(i): + if i in dict: if not bldgGroupIndex in dict[i]: dict[i].append(bldgGroupIndex) #self.notify.debug("%s BarrierDict[%d] = %s" % (side, i, dict[i])) @@ -1432,7 +1432,7 @@ def precomputeSideStreets(self): else: self.notify.error("unhandled side") - if dict.has_key(i): + if i in dict: if not bldgGroupIndex in dict[i]: dict[i].append(bldgGroupIndex) #self.notify.debug("%s BarrierDict[%d] = %s" % (side, i, dict[i])) @@ -1699,7 +1699,7 @@ def hitBoostArrow(self, cevent): idStr = into.getTag('boostId') arrowVec = self.boostDir.get(idStr) if arrowVec == None: - print "Unknown boost arrow %s" % (idStr) + print("Unknown boost arrow %s" % (idStr)) return # Get the forward direction of the kart diff --git a/toontown/src/racing/DistributedRaceAI.py b/toontown/src/racing/DistributedRaceAI.py index b9fa58aa..757cadbc 100644 --- a/toontown/src/racing/DistributedRaceAI.py +++ b/toontown/src/racing/DistributedRaceAI.py @@ -2,13 +2,13 @@ from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from direct.showbase.PythonUtil import nonRepeatingRandomList -import DistributedGagAI -import DistributedProjectileAI +from . import DistributedGagAI +from . import DistributedProjectileAI from direct.task import Task import random import time -import Racer -import RaceGlobals +from . import Racer +from . import RaceGlobals from direct.distributed.ClockDelta import * from toontown.toonbase import TTLocalizer @@ -356,7 +356,7 @@ def kickSlowRacers(self, task): if self.isDeleted(): return - for racer in self.racers.values(): + for racer in list(self.racers.values()): avId = racer.avId # racers can be tagged to 'not allow timeout' @@ -495,7 +495,7 @@ def endRace(self, avIds): def racerLeft(self, avIdFromClient): avId=self.air.getAvatarIdFromSender() - if(self.racers.has_key(avId) and avId==avIdFromClient): + if(avId in self.racers and avId==avIdFromClient): self.notify.debug("Removing %d from race %d" % (avId, self.doId)) #Clear out the players kart racer=self.racers[avId] @@ -526,7 +526,7 @@ def racerLeft(self, avIdFromClient): def hasGag(self, slot, type, index): avId=self.air.getAvatarIdFromSender() - print "has gag" + print("has gag") if index < 0 or index > (len(self.gagList) - 1): #check for cheaters self.air.writeServerEvent('suspicious', avId, 'Player checking for non-existant karting gag index %s type %s index %s' % (slot, type, index)) self.notify.warning("somebody is trying to check for a non-existant karting gag %s %s %s! avId: %s" % (slot, type, index, avId)) @@ -588,7 +588,7 @@ def heresMyT(self, inputAvId, numLaps, t, timestamp): # see if anyone's close someoneIsClose = False - for racer in self.racers.values(): + for racer in list(self.racers.values()): if (not racer.exited) and (not racer.finished): if (me.lapT - racer.lapT) < 0.15: someoneIsClose = True @@ -687,7 +687,7 @@ def isFirstRace(self): def everyoneDone(self): done = True - for racer in self.racers.values(): + for racer in list(self.racers.values()): if (not racer.exited and (not racer.avId in self.playersFinished) and (not racer.avId in self.kickedAvIds)): # there is a racer who hasn't exited and who hasn't finished diff --git a/toontown/src/racing/DistributedRacePadAI.py b/toontown/src/racing/DistributedRacePadAI.py index b0196ac3..5e853db7 100644 --- a/toontown/src/racing/DistributedRacePadAI.py +++ b/toontown/src/racing/DistributedRacePadAI.py @@ -1,6 +1,6 @@ ########################################################################## # Module: DistributedRacePadAI.py -# Purpose: This class provides the necessary functionality for +# Purpose: This class provides the necessary functionality for # Date: 6/28/05 # Author: jjtaylor ########################################################################## @@ -116,7 +116,7 @@ def addAvBlock( self, avId, block, paid ): grandPrixWeekendRunning = self.air.holidayManager.isHolidayRunning( ToontownGlobals.CIRCUIT_RACING_EVENT) - + # trialer restriction - only Speedway Practice races if not paid and not grandPrixWeekendRunning: genre = RaceGlobals.getTrackGenre(self.trackId) @@ -125,16 +125,16 @@ def addAvBlock( self, avId, block, paid ): if not(self.state == 'WaitEmpty' or self.state == 'WaitCountdown'): #you can only join a racepad in one of these states - return KartGlobals.ERROR_CODE.eTooLate - + return KartGlobals.ERROR_CODE.eTooLate + # Only check for non-practice races if( av.hasKart() and (not self.trackType == RaceGlobals.Practice) ): # Check if the toon owns enough tickets for the race raceFee = RaceGlobals.getEntryFee(self.trackId, self.trackType) avTickets = av.getTickets() - + if( avTickets < raceFee ): - self.notify.debug( "addAvBlock: Avatar %s does not own enough tickets for the race!" ) + self.notify.debug( "addAvBlock: Avatar %s does not own enough tickets for the race!" ) return KartGlobals.ERROR_CODE.eTickets # Call the Super Class Method @@ -171,7 +171,7 @@ def removeAvBlock( self, avId, block ): self.timerTask = None self.request( 'WaitEmpty' ) - + def __startCountdown( self, name, callback, time, params = [] ): """ Purpose: The __startCountdown Method generates a task that acts as @@ -207,7 +207,7 @@ def __handleSetRaceCountdownTimeout( self, params = [] ): # set the timer task to off, because raceExit calls removeAvBlock and # shouldn't call. SHOULD BREAK UP THOSE CALLS. self.timerTask = None - players = self.avId2BlockDict.keys() + players = list(self.avId2BlockDict.keys()) circuitLoop = [] if self.trackType == RaceGlobals.Circuit: circuitLoop = RaceGlobals.getCircuitLoop(self.trackId) @@ -219,7 +219,7 @@ def __handleSetRaceCountdownTimeout( self, params = [] ): circuitLoop[1:], {},{}, [], {}, circuitTotalBonusTickets = {}) - for avId in self.avId2BlockDict.keys(): + for avId in list(self.avId2BlockDict.keys()): if( avId ): self.notify.debug( "Handling Race Launch Countdown for avatar %s" % ( avId ) ) # Tell each player that they should enter @@ -228,14 +228,14 @@ def __handleSetRaceCountdownTimeout( self, params = [] ): self.avId2BlockDict[ avId ].raceExit() # Let's now restart for a new race. - self.request( 'WaitEmpty' ) + self.request( 'WaitEmpty' ) return Task.done def isOccupied( self ): """ Commnet: """ - return ( self.avId2BlockDict.keys() != [] ) + return ( list(self.avId2BlockDict.keys()) != [] ) def enableStartingBlocks( self ): """ @@ -243,7 +243,7 @@ def enableStartingBlocks( self ): """ for block in self.startingBlocks: block.setActive( True ) - + def disableStartingBlocks( self ): """ Comment: @@ -256,7 +256,7 @@ def getState( self ): Comment: """ return self.state, globalClockDelta.getRealNetworkTime() - + ###################################################################### # Distributed Methods ###################################################################### @@ -302,17 +302,17 @@ def enterWaitEmpty( self ): # - Enable Accepting of Toons for the next race. # - Signal to the client that we are in wait empty state. - self.d_setState( 'WaitEmpty' ) + self.d_setState( 'WaitEmpty' ) self.enableStartingBlocks() self.cycleTrack() - + def exitWaitEmpty( self ): """ Comment """ self.notify.debug( "exitWaitEmpty: Exiting WaitEmpty State for RacePad %s" % ( self.id ) ) taskMgr.remove(self.cycleTrackTask) - + def enterWaitCountdown( self ): """ Comment @@ -328,7 +328,7 @@ def enterWaitCountdown( self ): self.handleWaitTimeout, KartGlobals.COUNTDOWN_TIME, [ 'WaitBoarding' ] ) - + def filterWaitCountdown( self, request, args ): """ Comment @@ -336,8 +336,8 @@ def filterWaitCountdown( self, request, args ): if request == 'WaitBoarding' and self.allMoviesDone(): return 'AllAboard' elif( request in DistributedRacePadAI.defaultTransitions.get( 'WaitCountdown' ) ): - return request - elif( request is 'WaitCountdown' ): + return request + elif( request == 'WaitCountdown' ): # If in the WaitCountdown state, no need to loop back into # itself since it is already counting down to the race. return None @@ -368,7 +368,7 @@ def enterWaitBoarding( self ): self.handleWaitTimeout, KartGlobals.BOARDING_TIME, [ 'AllAboard' ] ) - + def exitWaitBoarding( self ): """ Comment @@ -387,7 +387,7 @@ def enterAllAboard( self ): # Make certain that there are toons onboard, they might have # left the district. - players = self.avId2BlockDict.keys() + players = list(self.avId2BlockDict.keys()) # check to see if we need to kick a solo racer kickSoloRacer = False @@ -410,7 +410,7 @@ def enterAllAboard( self ): self.__startCountdown( "setRaceZoneTask", self.__handleSetRaceCountdownTimeout, KartGlobals.ENTER_RACE_TIME, - [] ) + [] ) else: self.notify.warning( "The RacePad was empty, so no one entered a race. Returning to WaitEmpty State." ) self.d_setState( 'WaitEmpty' ) diff --git a/toontown/src/racing/DistributedVehicle.py b/toontown/src/racing/DistributedVehicle.py index cea456a1..bece50db 100644 --- a/toontown/src/racing/DistributedVehicle.py +++ b/toontown/src/racing/DistributedVehicle.py @@ -574,7 +574,7 @@ def fireSparkParticles(self,side): def stopSparkParticles(self,side = None): sides = {0:'right',1:'left'} if side == None: - for x in sides.keys(): + for x in list(sides.keys()): self.sparks[x].effect.getParticlesNamed('particles-1').setBirthRate(1000) taskMgr.doMethodLater(0.75,self.sparks[x].stop,'stopSparks-'+sides[x],extraArgs = []) else: @@ -1740,7 +1740,7 @@ def hitBanana(self): def hitPie(self): - print "yar, got Me with pi!" + print("yar, got Me with pi!") self.splatPie() if(self.wipeOut): self.wipeOut.pause() diff --git a/toontown/src/racing/DistributedViewPadAI.py b/toontown/src/racing/DistributedViewPadAI.py index 0fab85f8..784017ce 100644 --- a/toontown/src/racing/DistributedViewPadAI.py +++ b/toontown/src/racing/DistributedViewPadAI.py @@ -51,7 +51,7 @@ def __init__( self, air, area ): def delete( self ): # Remove any outstanding tasks - for avId in self.kickAvDict.keys(): + for avId in list(self.kickAvDict.keys()): self.stopTimeout( self.kickAvDict.get( avId ) ) del self.kickAvDict[ avId ] del self.kickAvDict @@ -102,7 +102,7 @@ def removeAvBlock( self, avId, block ): # Remove the avatar from the kick dictionary and update the # local client dictionary as well. - if( self.kickAvDict.has_key( avId ) ): + if( avId in self.kickAvDict ): self.stopCountdown(self.kickAvDict[avId]) del self.kickAvDict[ avId ] #self.d_setAvExitPad( avId ) diff --git a/toontown/src/racing/Kart.py b/toontown/src/racing/Kart.py index fa3fa58c..3a194894 100644 --- a/toontown/src/racing/Kart.py +++ b/toontown/src/racing/Kart.py @@ -227,7 +227,7 @@ def __createLODKart( self, level ): self.toonNode[level].setPos(pos) def resetGeomPos( self ): - for level in self.geom.keys(): + for level in list(self.geom.keys()): self.geom[ level ].setPos( 0, 0, 0.025 ) def __update( self ): @@ -254,7 +254,7 @@ def __update( self ): self.__applyDecals() self.__applyAccessoryColor() else: - raise StandardError, "Kart::__update - Has this method been called before generateKart?" + raise Exception("Kart::__update - Has this method been called before generateKart?") elif( field == KartDNA.bodyColor ): self.__applyBodyColor() @@ -263,7 +263,7 @@ def __update( self ): elif( field == KartDNA.ebType ): if( self.kartAccessories[ KartDNA.ebType ] != None ): name = self.kartAccessories[ KartDNA.ebType ].getName() - for key in self.geom.keys(): + for key in list(self.geom.keys()): # Remove node found in geom lod self.geom[ key ].find( "**/%s" % ( name ) ).removeNode() @@ -273,7 +273,7 @@ def __update( self ): elif( field == KartDNA.spType ): if( self.kartAccessories[ KartDNA.spType ] != None ): name = self.kartAccessories[ KartDNA.spType ].getName() - for key in self.geom.keys(): + for key in list(self.geom.keys()): # Remove node found in geom lod self.geom[ key ].find( "**/%s" % ( name ) ).removeNode() @@ -283,7 +283,7 @@ def __update( self ): elif( field == KartDNA.fwwType ): if( self.kartAccessories[ KartDNA.fwwType ] != (None,None) ): left, right = self.kartAccessories[ KartDNA.fwwType ] - for key in self.geom.keys(): + for key in list(self.geom.keys()): # Remove node found in geom lod self.geom[ key ].find( "**/%s" % ( left.getName() ) ).removeNode() self.geom[ key ].find( "**/%s" % ( right.getName() ) ).removeNode() @@ -295,7 +295,7 @@ def __update( self ): elif( field == KartDNA.bwwType ): if( self.kartAccessories[ KartDNA.bwwType ] != (None,None) ): left, right = self.kartAccessories[ KartDNA.bwwType ] - for key in self.geom.keys(): + for key in list(self.geom.keys()): # Remove node found in geom lod self.geom[ key ].find( "**/%s" % ( left.getName() ) ).removeNode() self.geom[ key ].find( "**/%s" % ( right.getName() ) ).removeNode() @@ -703,7 +703,7 @@ def setDNA( self, dna ): assert checkKartDNAValidity(dna), "Kart::setDNA - INVALID DNA %s" % (dna,) if( self.kartDNA != [ -1 ] * getNumFields() ): - for field in xrange( len( self.kartDNA ) ): + for field in range( len( self.kartDNA ) ): if( dna[ field ] != self.kartDNA[ field ] ): self.updateDNAField( field, dna[ field ] ) return @@ -931,7 +931,7 @@ def turnWheels(self, amount): def generateEngineStartTrack(self): length = self.kartStartSfx.length() def printVol(): - print self.kartLoopSfx.getVolume() + print(self.kartLoopSfx.getVolume()) track = Parallel( SoundInterval(self.kartStartSfx), diff --git a/toontown/src/racing/KartDNA.py b/toontown/src/racing/KartDNA.py index c2cacacf..14b4611c 100644 --- a/toontown/src/racing/KartDNA.py +++ b/toontown/src/racing/KartDNA.py @@ -1,6 +1,6 @@ ########################################################################## # Module: KartDNA.py -# Purpose: The KartDNA Module provides the +# Purpose: The KartDNA Module provides the # # # @@ -11,11 +11,11 @@ ########################################################################## #from direct.directbase import DirectStart from direct.directnotify import DirectNotifyGlobal -from direct.showbase import PythonUtil from toontown.toonbase import TTLocalizer from pandac.PandaModules import * -from KartShopGlobals import * +from .KartShopGlobals import * import types +import enum ########################################################################## # Python Import Modules @@ -38,12 +38,22 @@ ########################################################################## # KartDNA Globals and Enumerations ########################################################################## -KartDNA = PythonUtil.Enum( "bodyType, bodyColor, accColor, \ - ebType, spType, fwwType, \ - bwwType, rimsType, decalType" ) +KartDNA = enum.IntEnum("KartDNA", ( + "bodyType", + "bodyColor", + "accColor", + "ebType", + "spType", + "fwwType", + "bwwType", + "rimsType", + "decalType" +), + start=0 +) InvalidEntry = -1 -KartInfo = PythonUtil.Enum("name, model, cost, viewDist, decalId, LODmodel1, LODmodel2") -AccInfo = PythonUtil.Enum("name, model, cost, texCard, attach") +KartInfo = enum.IntEnum("KartInfo", ("name", "model", "cost", "viewDist", "decalId", "LODmodel1", "LODmodel2"), start=0) +AccInfo = enum.IntEnum("AccInfo", ("name", "model", "cost", "texCard," "attach"), start=0) ########################################################################## # Global Accessory Dictionaries ########################################################################## @@ -97,7 +107,7 @@ 26 : (aNames[3007], "phase_6/models/karting/accessory_front_ww_7", 450, "accessory_front_ww_7_gui", "%sFWWNode_2"), # Wood Running Boards # 28 : (aNames[3008], "phase_6/models/karting/accessory_front_ww_1", 28, "", "%sFWWNode_1"), # 29 : (aNames[3009], "phase_6/models/karting/accessory_front_ww_1", 29, "", "%sFWWNode_1"), - + # Initial 10 Back Wheel Well Accessories 27 : (aNames[4000], "phase_6/models/karting/accessory_rear_ww_0", 800, "accessory_rear_ww_0_gui", "%sBWWNode_0"), # Curly Tailpipes 28 : (aNames[4001], "phase_6/models/karting/accessory_rear_ww_1", 200, "accessory_rear_ww_1_gui", "%sBWWNode_1"), # Splash Fenders @@ -129,7 +139,7 @@ 52 : (aNames[5012], "phase_6/maps/kart_Rim_13", 450, "kart_Rim_13", ), # gem 53 : (aNames[5013], "phase_6/maps/kart_Rim_14", 1250, "kart_Rim_14", ), # 6 spoke 54 : (aNames[5014], "phase_6/maps/kart_Rim_15", 5000, "kart_Rim_15", ), # wire - + # Initial 10 Decal IDs - textures are not # generic like rims, thus the need for # the texture ids which are found in the @@ -187,7 +197,7 @@ KartDNA.bodyColor : [ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 ], } - + #these are the localizer variable namess for these accessory types AccessoryTypeNameDict = [None,"KartShtikerBodyColor", "KartShtikerAccColor", "KartShtikerEngineBlock","KartShtikerSpoiler", @@ -254,9 +264,9 @@ def checkKartDNAValidity( dna ): return 0 #print str(AccessoryTypeDict) # Provide Range checking for each dna field - for field in xrange( len( dna ) ): - if( field == KartDNA.bodyType ): - if( not dna[ field ] in KartDict.keys() ): + for field in range( len( dna ) ): + if( field == KartDNA.bodyType ): + if( not dna[ field ] in list(KartDict.keys()) ): return 0 elif( field == KartDNA.bodyColor or field == KartDNA.accColor ): # TEMPORARY @@ -272,7 +282,7 @@ def checkKartDNAValidity( dna ): #print accList return 0 - return 1 + return 1 def getDefaultColor(): """ @@ -309,7 +319,7 @@ def getAccessoryItemList( accessoryType ): Params: accessoryType - The Type of Accessory List to build. Return: [] - A list of accessory items. """ - assert AccessoryTypeDict.has_key(accessoryType), "KartDNA.py - accessoryType %s is invalid!!!" % (accessoryType,) + assert accessoryType in AccessoryTypeDict, "KartDNA.py - accessoryType %s is invalid!!!" % (accessoryType,) return [ AccessoryDict[ itemId ] for itemId in AccessoryTypeDict[ accessoryType ] ] @@ -319,10 +329,10 @@ def getKartTypeInfo( type ): returns the appropriate information about the kart. Params: type - The numerical index representing the kart type. - + Return: (name, dna, cost ) - The name, model file, and cost of this kart. """ - if( type in KartDict.keys() ): + if( type in list(KartDict.keys()) ): return KartDict[type] return InvalidEntry @@ -333,14 +343,14 @@ def getAccessoryInfo( index ): returns the appropriate information about that accessory. Params: type - The numerical index representing the kaccessory. - + Return: (name, model, cost ) - The name, model file, and cost of this accessory. """ - if( index in AccessoryDict.keys() ): + if( index in list(AccessoryDict.keys()) ): return AccessoryDict[index] return InvalidEntry - + def getAccessoryType( accessoryId ): """ Purpose: The getAccessoryType Method accepts an accessory id, and @@ -350,7 +360,7 @@ def getAccessoryType( accessoryId ): the appropriate accessory type. Return: Int - The appropriate accessory type. """ - for key in AccessoryTypeDict.keys(): + for key in list(AccessoryTypeDict.keys()): if( accessoryId in AccessoryTypeDict[ key ] ): return key @@ -371,7 +381,7 @@ def getAccessoryDictFromOwned( accessoryOwnedList, pType=-1 ): #remove default rim #this is the simpliest, chepest way to do this, not the most elegant! accessDict[KartDNA.rimsType].remove(getDefaultRim()) - + # Determine the accessory type for each accessory owned, then remove # it from the corresponding type list in the accessDict. for accOwnedId in accessoryOwnedList: @@ -381,7 +391,7 @@ def getAccessoryDictFromOwned( accessoryOwnedList, pType=-1 ): if pType != -1: #request for specific type only return accessDict[pType] - else: + else: return accessDict def getAccessDictByType( accessoryOwnedList ): @@ -394,44 +404,44 @@ def getAccessDictByType( accessoryOwnedList ): Return: {} - accessories owned by type. """ accessDict = {} - if (type(accessoryOwnedList) == types.ListType): + if (type(accessoryOwnedList) == list): for accOwnedId in accessoryOwnedList: accType = getAccessoryType( accOwnedId ) if( accType != InvalidEntry ): - if( not accessDict.has_key( accType ) ): + if( accType not in accessDict ): accessDict[ accType ] = [] accessDict[ accType ].append( accOwnedId ) else: - print "KartDNA: getAccessDictByType: bad accessory list: ", accessoryOwnedList + print("KartDNA: getAccessDictByType: bad accessory list: ", accessoryOwnedList) return accessDict def getKartCost( kartID): """ Purpose: Calculates and returns the cost of a particular Kart. - + Params: kartID - the id of the kart in question Return: cost - the cost of the Kart """ - if KartDict.has_key(kartID): + if kartID in KartDict: return KartDict[kartID][KartInfo.cost] else: return "key error" - - + + def getAccCost( accID): """ Purpose: Calculates and returns the cost of a particular Kart accessory. - + Params: accID - the id of the kart accessory in question Return: cost - the cost of the Kart accessory """ return AccessoryDict[accID][AccInfo.cost] - + def getAccName( accID): """ Purpose: Returns this accessories name from the current localizer - + Params: accID - the id of the kart accessory in question Return: name - the name of the Kart accessory """ diff --git a/toontown/src/racing/KartShopGlobals.py b/toontown/src/racing/KartShopGlobals.py index 476c3dd2..1b133bad 100644 --- a/toontown/src/racing/KartShopGlobals.py +++ b/toontown/src/racing/KartShopGlobals.py @@ -6,9 +6,10 @@ ########################################################################## from direct.showbase import PythonUtil +import enum -class KartShopGlobals: - EVENTDICT = { 'guiDone' : 'guiDone', +class KartShopGlobals: + EVENTDICT = { 'guiDone' : 'guiDone', 'returnKart' : 'returnKart', 'buyKart' : 'buyAKart', 'buyAccessory' : 'buyAccessory' @@ -25,7 +26,7 @@ class KartGlobals: BOARDING_TIME = 10.0 ENTER_RACE_TIME = 6.0 - ERROR_CODE = PythonUtil.Enum( 'success, eGeneric, eTickets, eBoardOver, eNoKart, eOccupied, eTrackClosed, eTooLate, eUnpaid' ) + ERROR_CODE = enum.IntEnum('ERROR_CODE', ('success', 'eGeneric', 'eTickets', 'eBoardOver', 'eNoKart', 'eOccupied', 'eTrackClosed', 'eTooLate', 'eUnpaid')) # Kart Pad Locations FRONT_LEFT_SPOT = 0 diff --git a/toontown/src/racing/KartShopGui.py b/toontown/src/racing/KartShopGui.py index 690e1374..fe94ee4e 100644 --- a/toontown/src/racing/KartShopGui.py +++ b/toontown/src/racing/KartShopGui.py @@ -25,10 +25,10 @@ from toontown.toonbase import ToontownGlobals, TTLocalizer from toontown.toonbase import TTLocalizer from toontown.toonbase import ToontownTimer -from KartShopGlobals import * +from .KartShopGlobals import * from toontown.racing.Kart import Kart from toontown.shtiker.KartPage import KartViewer -from KartDNA import * +from .KartDNA import * from toontown.toontowngui.TeaserPanel import TeaserPanel ########################################################################## @@ -206,7 +206,7 @@ def __init__( self, doneEvent ): model = loader.loadModel( 'phase_6/models/gui/BuyKartPanel' ) #create list of karts not owned by player - self.unownedKartList = KartDict.keys() + self.unownedKartList = list(KartDict.keys()) if base.localAvatar.hasKart(): k = base.localAvatar.getKartBodyType() if k in self.unownedKartList: @@ -1505,7 +1505,7 @@ def destroy( self ): del self.timer # Ignore all events - for event in self.dialogEventDict.values(): + for event in list(self.dialogEventDict.values()): self.ignore( event ) self.dialogEventDict = None diff --git a/toontown/src/racing/Piejectile.py b/toontown/src/racing/Piejectile.py index b84984a9..57c43fd6 100644 --- a/toontown/src/racing/Piejectile.py +++ b/toontown/src/racing/Piejectile.py @@ -56,7 +56,7 @@ def __init__(self, sourceId, targetId, type, name): self.rotP = randFloat(-90,90) self.rotR = randFloat(-90,90) - print("generating Pie %s" % (self.name)) + print(("generating Pie %s" % (self.name))) self.ownerKart = base.cr.doId2do.get(base.race.kartMap.get(sourceId,None),None) if(targetId != 0): @@ -89,7 +89,7 @@ def __init__(self, sourceId, targetId, type, name): self.reparentTo(render) def delete(self): - print "removing piejectile" + print("removing piejectile") taskMgr.remove(self.taskName) self.__undoCollisions() diff --git a/toontown/src/racing/RaceEndPanels.py b/toontown/src/racing/RaceEndPanels.py index 9f76e7e8..e69f99cb 100644 --- a/toontown/src/racing/RaceEndPanels.py +++ b/toontown/src/racing/RaceEndPanels.py @@ -58,7 +58,7 @@ def __init__(self,numRacers,race, raceEndPanel, *args,**kwargs): parent = frame, relief = None, pos = (0.0,0.0,-0.01), - text = `x+1`+' -', + text = repr(x+1)+' -', text_fg = (0.5, 0.5, 0.5, 1.0), text_scale = TTLocalizer.REPraceEnd, text_align = TextNode.ARight, @@ -586,7 +586,7 @@ def wrapStr(str = '',maxWidth = 10,font = DGG.getDefaultFont()): if ticBonus > 0: if (not endOfCircuitRace): # tasty reverse lookup! - bonusType = RaceGlobals.PeriodDict.values().index(ticBonus) + bonusType = list(RaceGlobals.PeriodDict.values()).index(ticBonus) else: #do not generate a bonus ticket sequence since we've done that when the last race ended ticBonus = 0 diff --git a/toontown/src/racing/RaceGUI.py b/toontown/src/racing/RaceGUI.py index 69bc0ea8..8faf4044 100644 --- a/toontown/src/racing/RaceGUI.py +++ b/toontown/src/racing/RaceGUI.py @@ -383,7 +383,7 @@ def updateGag(self,gagIndex): def waitingOnGag(self, cycleTime): if(self.gag): numTextures = len(self.gagTextures) - startOffset = random.choice(range(0,numTextures)) + startOffset = random.choice(list(range(0,numTextures))) self.gag.show() self.gagCycleInterval = Parallel( LerpFunc(self.showNextGag, @@ -516,7 +516,7 @@ def update(self, time): placeCount = 0 # begin updates for all racers - for key in self.racerDict.keys(): + for key in list(self.racerDict.keys()): racer = self.racerDict[key] curvetime = racer.curvetime face = racer.face @@ -578,7 +578,7 @@ def update(self, time): 4 : TTLocalizer.KartRace_FourthSuffix, } placeSorter.sort() - for x,p in zip(placeSorter,xrange(len(placeSorter),0,-1)): + for x,p in zip(placeSorter,range(len(placeSorter),0,-1)): self.racerDict[x[1]].update(place = (p+placeCount-len(placeSorter))) # if we are close to the finish line, and so is someone else, @@ -586,7 +586,7 @@ def update(self, time): localRacer = self.racerDict[localAvatar.doId] (nearDiff, farDiff) = RaceGlobals.TrackDict[self.race.trackId][8] if (not localRacer.finished) and (self.faceEndPos[0] - localRacer.face.getX() < nearDiff): - for racerId in self.racerDict.keys(): + for racerId in list(self.racerDict.keys()): racer = self.racerDict[racerId] if (not racer.enabled or (racerId == localAvatar.doId) or (racer.face.getX() >= self.faceEndPos[0])): @@ -625,7 +625,7 @@ def update(self, time): def updateRacerInfo(self,avId,curvetime = None, maxlaphit = None): - if ( avId in self.racerDict.keys() ): + if ( avId in list(self.racerDict.keys()) ): self.racerDict[avId].update(curvetime=curvetime,maxlaphit=maxlaphit) ##################################################### @@ -699,7 +699,7 @@ def racerEntered(self,avId): mapspot.setHpr(self.mapScene,0,0,0) self.racerDict[avId] = self.RacerInfo(headframe,mapspot) - for key,i in zip(self.racerDict.keys(),range(len(self.racerDict.keys()))): + for key,i in zip(list(self.racerDict.keys()),list(range(len(list(self.racerDict.keys()))))): face = self.racerDict[key].face mapspot = self.racerDict[key].mapspot diff --git a/toontown/src/racing/RaceGag.py b/toontown/src/racing/RaceGag.py index 409d9202..e6792523 100644 --- a/toontown/src/racing/RaceGag.py +++ b/toontown/src/racing/RaceGag.py @@ -1,7 +1,7 @@ from pandac.PandaModules import * from direct.interval.IntervalGlobal import * from direct.showbase import DirectObject -from DroppedGag import * +from .DroppedGag import * types=["","Pie","Banana","Anvil"] diff --git a/toontown/src/racing/RaceGlobals.py b/toontown/src/racing/RaceGlobals.py index 65e9872b..d9536278 100644 --- a/toontown/src/racing/RaceGlobals.py +++ b/toontown/src/racing/RaceGlobals.py @@ -388,7 +388,7 @@ def getNextRaceInfo( prevTrackId, genreString, padId ): } -TrackIds = TrackDict.keys() +TrackIds = list(TrackDict.keys()) # hmmm, this was non-determistic before TrackIds.sort() @@ -424,7 +424,7 @@ def getDefaultRecordTime(trackId): AllTime : 1000, } -PeriodIds = PeriodDict.keys() +PeriodIds = list(PeriodDict.keys()) NumRecordPeriods = len(PeriodIds) NumRecordsPerPeriod = 10 @@ -564,7 +564,7 @@ def getCircuitLoop(startingTrack): circuitLoop = [startingTrack] for loop in CircuitLoops: if startingTrack in loop: - print loop + print(loop) numTracks = len(loop) tempLoop = loop * 2 startingIndex = tempLoop.index(startingTrack) diff --git a/toontown/src/racing/RaceHeadFrame.py b/toontown/src/racing/RaceHeadFrame.py index 63333ea8..afbde4bf 100644 --- a/toontown/src/racing/RaceHeadFrame.py +++ b/toontown/src/racing/RaceHeadFrame.py @@ -15,7 +15,7 @@ def __init__(self, av = None, color = Vec4(1,1,1,1), *args, **kwargs): 'pos':(0,0,0), } opts.update(kwargs) - apply(DirectFrame.__init__,(self,)+args,opts) + DirectFrame.__init__(*(self,)+args, **opts) self.initialiseoptions(RaceHeadFrame) if (av): diff --git a/toontown/src/racing/RaceManagerAI.py b/toontown/src/racing/RaceManagerAI.py index c905efe0..36a6040b 100644 --- a/toontown/src/racing/RaceManagerAI.py +++ b/toontown/src/racing/RaceManagerAI.py @@ -1,13 +1,13 @@ from direct.directnotify import DirectNotifyGlobal -import DistributedRaceAI +from . import DistributedRaceAI from toontown.toonbase import ToontownGlobals, TTLocalizer from toontown.coghq import MintLayout from toontown.ai import HolidayBaseAI from direct.showbase import DirectObject -import RaceGlobals +from . import RaceGlobals import random import os -import cPickle +import pickle def getDefaultRecord(trackId): """ @@ -158,7 +158,7 @@ def exitedRace(self, race, playerInfo): # see if they broke a server record if not suspicious: bonus = self.checkTimeRecord(race.trackId, totalTime, race.raceType, race.toonCount, playerInfo.avId) - if (race.circuitTotalBonusTickets.has_key(playerInfo.avId)): + if (playerInfo.avId in race.circuitTotalBonusTickets): race.circuitTotalBonusTickets[playerInfo.avId] += bonus else: race.circuitTotalBonusTickets[playerInfo.avId] = bonus @@ -272,7 +272,7 @@ def swap(x, y): if av and (avId in race.playersFinished): # keep track of placement for contests self.air.writeServerEvent("kartingCircuitFinished", avId, "%s|%s|%s|%s" % (place, places, race.circuitTimes[avId], race.trackId)) - print "kartingCircuitFinished", avId, "%s|%s|%s|%s" % (place, places, race.circuitTimes[avId], race.trackId) + print("kartingCircuitFinished", avId, "%s|%s|%s|%s" % (place, places, race.circuitTimes[avId], race.trackId)) # calculate their winnings entryFee = RaceGlobals.getEntryFee(race.trackId, race.raceType) @@ -309,7 +309,7 @@ def swap(x, y): av.b_setTickets(newTickets) finalBonus = 0 - if (race.circuitTotalBonusTickets.has_key(avId)): + if (avId in race.circuitTotalBonusTickets): finalBonus = race.circuitTotalBonusTickets[avId] #race.d_setCircuitPlace(avId, place, entryFee, winnings, bonus, trophies) @@ -927,7 +927,7 @@ def updateRecordFile(self): os.rename(self.filename, backup) file = open(self.filename, 'w') file.seek(0) - cPickle.dump(self.trackRecords, file) + pickle.dump(self.trackRecords, file) file.close() if os.path.exists(backup): os.remove(backup) @@ -960,7 +960,7 @@ def loadRecords(self): #check for new tracks for trackId in RaceGlobals.TrackIds: - if not records.has_key(trackId): + if trackId not in records: records[trackId] = {} # for each recording period (daily, etc.) for i in RaceGlobals.PeriodIds: @@ -978,7 +978,7 @@ def loadFrom(self, file): records = {} try: while 1: - records = cPickle.load(file) + records = pickle.load(file) except EOFError: pass return records @@ -1094,7 +1094,6 @@ def start(self): if bboard.get(CircuitRaceHolidayMgr.PostName) == 1: # tell everyone race night is starting - simbase.air.newsManager.circuitRaceStart() messenger.send(CircuitRaceHolidayMgr.StartStopMsg) def stop(self): diff --git a/toontown/src/rpc/AwardManagerConsts.py b/toontown/src/rpc/AwardManagerConsts.py index 33bc5ca4..f73f36b2 100644 --- a/toontown/src/rpc/AwardManagerConsts.py +++ b/toontown/src/rpc/AwardManagerConsts.py @@ -1,8 +1,24 @@ -GiveAwardErrors = Enum('Success, WrongGender, NotGiftable, FullMailbox, FullAwardMailbox, AlreadyInMailbox, AlreadyInGiftQueue, ' - 'AlreadyInOrderedQueue, AlreadyInCloset, AlreadyBeingWorn, AlreadyInAwardMailbox, ' - 'AlreadyInThirtyMinuteQueue, AlreadyInMyPhrases, AlreadyKnowDoodleTraining, ' - 'GenericAlreadyHaveError, UnknownError, UnknownToon, ' - ) +import enum + +GiveAwardErrors = enum.IntEnum('GiveAwardErrors', ( + 'Success', + 'WrongGender', + 'NotGiftable', + 'FullMailbox', + 'FullAwardMailbox', + 'AlreadyInMailbox', + 'AlreadyInGiftQueue', + 'AlreadyInOrderedQueue', + 'AlreadyInCloset', + 'AlreadyBeingWorn', + 'AlreadyInAwardMailbox', + 'AlreadyInThirtyMinuteQueue', + 'AlreadyInMyPhrases', + 'AlreadyKnowDoodleTraining', + 'GenericAlreadyHaveError', + 'UnknownError', + 'UnknownToon' +)) GiveAwardErrorStrings = { GiveAwardErrors.Success: "success", diff --git a/toontown/src/rpc/AwardManagerUD.py b/toontown/src/rpc/AwardManagerUD.py index 1baf3dbc..404bc6eb 100644 --- a/toontown/src/rpc/AwardManagerUD.py +++ b/toontown/src/rpc/AwardManagerUD.py @@ -84,16 +84,16 @@ def timeout(self, task): if self.numRetries > 0: assert AsyncRequest.notify.debug( 'Timed out. Trying %d more time(s) : %s' % - (self.numRetries + 1, `self.neededObjects`)) + (self.numRetries + 1, repr(self.neededObjects))) self.numRetries -= 1 return Task.again else: if __debug__: if False: # True: if hasattr(self, "avatarId"): - print "\n\nself.avatarId =", self.avatarId - print "\nself.neededObjects =", self.neededObjects - print "\ntimed out after %s seconds.\n\n"%(task.delayTime,) + print("\n\nself.avatarId =", self.avatarId) + print("\nself.neededObjects =", self.neededObjects) + print("\ntimed out after %s seconds.\n\n"%(task.delayTime,)) import pdb; pdb.set_trace() replyString = '"some toonIds invalid %s"' % str(self.neededObjects) replyString = replyString.replace('<','_') @@ -149,7 +149,7 @@ def giveAward(self, replyTo, **kw): """Give the award in a try block, so as not to crash uberdog if all else fails.""" try: self.giveAwardActual(replyTo, **kw) - except Exception,e: + except Exception as e: replyTo.respondXML(AwardResponses.awardGiveFailureXML % ("Catastrophic failure giving the award %s" % str(e))) def _getCatalogItemObj(self, itemType, itemIndex): @@ -237,7 +237,7 @@ def giveAwardActual(self, replyTo, **kw): testItem = self._getCatalogItemObj(itemType, secondChoice) - except Exception, e: + except Exception as e: replyTo.respondXML(AwardResponses.awardGiveFailureXML % ("Couldn't create catalog item itemType=%s secondChoice%s %s" % (itemType, secondChoice, str(e)))) return @@ -264,7 +264,7 @@ def giveAwardActual(self, replyTo, **kw): echoBack += "
    Special Commands = %s" % SpecialCommandStrs[specialCommands] self.air.writeServerEvent('giveAwardWebRequest', 0, '%s|%s|%s' % (replyTo.getSourceAddress(), echoBack, toonIds)) - print echoBack + print(echoBack) replyToChannel = self.air.getSenderReturnChannel() isDcRequest = False @@ -484,9 +484,9 @@ def gotTheToons(self, isDcRequest, dcId, toonObjDict, catalogItem, specialEventI self.sendResultsBack(giveAwardErrors, catalogErrors, tableValues, toonObjDict, catalogItem, specialEventId, browserReplyTo, wrongGenderToonIds, echoBack) else: assert len(giveAwardErrors) == 1 - errorCode = giveAwardErrors[giveAwardErrors.keys()[0]] + errorCode = giveAwardErrors[list(giveAwardErrors.keys())[0]] self.sendGiveAwardToToonReply(dcId, errorCode) - except Exception,e: + except Exception as e: if not isDcRequest: browserReplyTo.respondXML(AwardResponses.awardGiveFailureXML % ("Catastrophic failure in gotTheToons %s" % str(e))) else: @@ -532,7 +532,7 @@ def sendResultsBack(self, giveAwardErrors, catalogErrors, tableValues, toonObjDi def giveAwardToToon(self, context, replyToDoId, replyToClass, avId, awardType, awardItemId): self.air.writeServerEvent('giveAwardCodeRequest', avId, '%s|%s' %(str(awardType), str(awardItemId))) - dcId = self._dcRequestSerialGen.next() + dcId = next(self._dcRequestSerialGen) self._dcId2info[dcId] = ScratchPad(replyToClass=replyToClass, replyToDoId=replyToDoId, context=context) @@ -584,7 +584,7 @@ def getMainMenu(self): def getClothingChoices(cls): """Return a dictionary of clothing choices. Key is the description, clothingtype are values.""" values = {} - for key in CatalogClothingItem.ClothingTypes.keys(): + for key in list(CatalogClothingItem.ClothingTypes.keys()): clothingItem = CatalogClothingItem.ClothingTypes[key] typeOfClothes = clothingItem[0] styleString = clothingItem[1] @@ -604,7 +604,7 @@ def getClothingChoices(cls): values[textString] = key # do a 2nd for loop to ensure bottoms always goes last - for key in CatalogClothingItem.ClothingTypes.keys(): + for key in list(CatalogClothingItem.ClothingTypes.keys()): clothingItem = CatalogClothingItem.ClothingTypes[key] typeOfClothes = clothingItem[0] styleString = clothingItem[1] @@ -632,7 +632,7 @@ def getClothingChoices(cls): def getFurnitureChoices(cls): """Return a dictionary of furniture choices. Key is the description , values is the furniture type key""" values = {} - for key in CatalogFurnitureItem.FurnitureTypes.keys(): + for key in list(CatalogFurnitureItem.FurnitureTypes.keys()): furnitureItem = CatalogFurnitureItem.FurnitureTypes[key] typeOfFurniture = key # we must not give animted furniture choices, the item type is wrong for it @@ -666,7 +666,7 @@ def getSpeedChatChoices(cls): def getEmoteChoices(cls): """Return a dictionary of emote choices. Key is the description , values is the emote id""" values = {} - for key in OTPLocalizer.EmoteFuncDict.keys(): + for key in list(OTPLocalizer.EmoteFuncDict.keys()): descString = key emoteIndex = OTPLocalizer.EmoteFuncDict[key] if descString in values: @@ -689,7 +689,7 @@ def getBeanChoices(cls): def getWallpaperChoices(cls): """Return a dictionary of wallpaper choices. Key is the description , values is the wallpaper id""" values = {} - for key in CatalogWallpaperItem.WallpaperTypes.keys(): + for key in list(CatalogWallpaperItem.WallpaperTypes.keys()): # the comments on CatalogWallpaperItem say 2920 to 2980 are problematic, so don't include them if key in (2920, 2930, 2940, 2950, 2960, 2970, 2980): continue @@ -708,7 +708,7 @@ def getWallpaperChoices(cls): def getWindowViewChoices(cls): """Return a dictionary of window choices. Key is the description , values is the wallpaper id""" values = {} - for key in CatalogWindowItem.WindowViewTypes.keys(): + for key in list(CatalogWindowItem.WindowViewTypes.keys()): descString = "" descString += TTLocalizer.WindowViewNames[key] if descString in values: @@ -720,7 +720,7 @@ def getWindowViewChoices(cls): def getFlooringChoices(cls): """Return a dictionary of flooring choices. Key is the description , values is the wallpaper id""" values = {} - for key in CatalogFlooringItem.FlooringTypes.keys(): + for key in list(CatalogFlooringItem.FlooringTypes.keys()): descString = "%5d " % key # add key to make it unique descString += TTLocalizer.FlooringNames[key] if descString in values: @@ -732,7 +732,7 @@ def getFlooringChoices(cls): def getMouldingChoices(cls): """Return a dictionary of moulding choices. Key is the description , values is the wallpaper id""" values = {} - for key in CatalogMouldingItem.MouldingTypes.keys(): + for key in list(CatalogMouldingItem.MouldingTypes.keys()): descString = "%5d " % key # add key to make it unique descString += TTLocalizer.MouldingNames[key] if descString in values: @@ -744,7 +744,7 @@ def getMouldingChoices(cls): def getWainscotingChoices(cls): """Return a dictionary of wainscotting choices. Key is the description , values is the wallpaper id""" values = {} - for key in CatalogWainscotingItem.WainscotingTypes.keys(): + for key in list(CatalogWainscotingItem.WainscotingTypes.keys()): descString = "" #%5d " % key # add key to make it unique descString += TTLocalizer.WainscotingNames[key] if descString in values: @@ -819,7 +819,7 @@ def getAwardChoices(cls): if hasattr(cls, '_awardChoices'): return cls._awardChoices result = {} - for itemType in CatalogItemTypes.CatalogItemTypes.values(): + for itemType in list(CatalogItemTypes.CatalogItemTypes.values()): if itemType in (CatalogItemTypes.INVALID_ITEM, CatalogItemTypes.GARDENSTARTER_ITEM, CatalogItemTypes.POLE_ITEM, CatalogItemTypes.GARDEN_ITEM, CatalogItemTypes.NAMETAG_ITEM, CatalogItemTypes.TOON_STATUE_ITEM): @@ -904,7 +904,7 @@ def getExperimentalMenu(self): for itemType in self.awardChoices: header += '\tif (chosen == "%s") {\n' % itemType secondChoices = self.awardChoices[itemType] - sortedKeys = secondChoices.keys() + sortedKeys = list(secondChoices.keys()) sortedKeys.sort() for key in sortedKeys: header += "\t\tselbox.options[selbox.options.length] = new " @@ -952,7 +952,7 @@ def getExperimentalMenu(self):
    """ replyTo.respond(header +body+ help+footer) - except Exception, e: + except Exception as e: replyTo.respondXML(self.securityBanMgrFailureXML % ("Catastrophic failure listing fingerprints %s" % str(e))) self.notify.warning("Got exception %s" % str(e)) diff --git a/toontown/src/uberdog/DistributedDataStoreManagerUD.py b/toontown/src/uberdog/DistributedDataStoreManagerUD.py index 3b920602..4084fd6c 100644 --- a/toontown/src/uberdog/DistributedDataStoreManagerUD.py +++ b/toontown/src/uberdog/DistributedDataStoreManagerUD.py @@ -37,13 +37,13 @@ def __init__(self,air): def __getFilePath(self,storeId): #import pdb; pdb.set_trace() return '%s/TUDS-%s'%(self.serverDataFolder, - `storeId`) + repr(storeId)) def __str__(self): - outStr = self.__class__.__name__ + ' - ' + `len(self.stores)` + ' Stores\n' + outStr = self.__class__.__name__ + ' - ' + repr(len(self.stores)) + ' Stores\n' outStr += '-'*40 + '\n' - for id in self.stores.keys(): - outStr += `id` + '\t: ' + self.stores[id].className + '\n' + for id in list(self.stores.keys()): + outStr += repr(id) + '\t: ' + self.stores[id].className + '\n' return outStr # From AI @@ -81,13 +81,13 @@ def stopStore(self,storeId): store = self.stores.pop(storeId,None) if store: if self.enableDestroyStore: - self.notify.debug('Destroying %s.' % `DataStoreGlobals.getStoreClass(storeId)`) + self.notify.debug('Destroying %s.' % repr(DataStoreGlobals.getStoreClass(storeId))) store.destroy() else: - self.notify.debug('Closing %s.' % `DataStoreGlobals.getStoreClass(storeId)`) + self.notify.debug('Closing %s.' % repr(DataStoreGlobals.getStoreClass(storeId))) store.close() else: - self.notify.debug('%s not present on uberdog.' % `DataStoreGlobals.getStoreClass(storeId)`) + self.notify.debug('%s not present on uberdog.' % repr(DataStoreGlobals.getStoreClass(storeId))) def queryStore(self,storeId,query,retry = False): """ diff --git a/toontown/src/uberdog/DistributedDeliveryManager.py b/toontown/src/uberdog/DistributedDeliveryManager.py index e5d6b236..615edf19 100644 --- a/toontown/src/uberdog/DistributedDeliveryManager.py +++ b/toontown/src/uberdog/DistributedDeliveryManager.py @@ -9,10 +9,10 @@ def sendHello(self, message): self.sendUpdate("hello", [message]) def rejectHello(self, message): - print "rejected", message + print("rejected", message) def helloResponse(self, message): - print "accepted", message + print("accepted", message) def sendAck(self): self.sendUpdate("requestAck", []) @@ -21,7 +21,7 @@ def returnAck(self): messenger.send("DeliveryManagerAck") def test(self): - print "Distributed Delviery Manager Stub Test" + print("Distributed Delviery Manager Stub Test") """ def sendRequestPurchaseGift(self, item, receiverId, callback): print "sent request for gift" diff --git a/toontown/src/uberdog/DistributedDeliveryManagerAI.py b/toontown/src/uberdog/DistributedDeliveryManagerAI.py index 1f28f29d..d3f0f510 100644 --- a/toontown/src/uberdog/DistributedDeliveryManagerAI.py +++ b/toontown/src/uberdog/DistributedDeliveryManagerAI.py @@ -14,18 +14,18 @@ def __init__(self, air): self.senderIdContexttoPhone = {} def hello(self, message): - print message + print(message) replyToChannel = self.air.getSenderReturnChannel() - print "This is the AI getting the hello message" , message + print("This is the AI getting the hello message" , message) def sendHello(self, message): self.sendUpdate("hello", [message]) def rejectHello(self, message): - print "rejected", message + print("rejected", message) def helloResponse(self, message): - print "accepted", message + print("accepted", message) #NON Test functions begin here diff --git a/toontown/src/uberdog/DistributedDeliveryManagerUD.py b/toontown/src/uberdog/DistributedDeliveryManagerUD.py index c3005ac7..04ea18a5 100644 --- a/toontown/src/uberdog/DistributedDeliveryManagerUD.py +++ b/toontown/src/uberdog/DistributedDeliveryManagerUD.py @@ -3,7 +3,7 @@ districts. """ -from cPickle import loads, dumps +from pickle import loads, dumps from otp.ai.AIBaseGlobal import * from pandac.PandaModules import * @@ -19,7 +19,7 @@ from toontown.catalog import CatalogItem from toontown.catalog import CatalogPoleItem from toontown.catalog import CatalogBeanItem -from LRUlist import LRUlist +from .LRUlist import LRUlist if __debug__: @@ -493,10 +493,10 @@ def writeGiftField(self, avatarId, giftBlob, replyToChannelId): #return a Reject message to the AI caller def hello(self, message): - print message + print(message) replyToChannel = self.air.getSenderReturnChannel() if message == "boo boo stinks": - print "no he doesn't you fool" + print("no he doesn't you fool") self.sendUpdateToChannel( replyToChannel, "rejectHello", ["no he doesn't you fool"]) else: diff --git a/toontown/src/uberdog/DistributedInGameNewsMgrUD.py b/toontown/src/uberdog/DistributedInGameNewsMgrUD.py index 7a8333f7..44bd34df 100644 --- a/toontown/src/uberdog/DistributedInGameNewsMgrUD.py +++ b/toontown/src/uberdog/DistributedInGameNewsMgrUD.py @@ -92,7 +92,7 @@ def inGameNewsNewIssue(self, replyTo, **kw): replyTo.respondXML(InGameNewsResponses.setLatestIssueSuccessXML % (self.getLatestIssueStr())) pass - except Exception,e: + except Exception as e: replyTo.respondXML(InGameNewsResponses.setLatestIssueFailureXML % ("Catastrophic failure setting latest issue %s" % str(e))) pass diff --git a/toontown/src/uberdog/DistributedPartyManagerAI.py b/toontown/src/uberdog/DistributedPartyManagerAI.py index ca54c297..ccb30c71 100644 --- a/toontown/src/uberdog/DistributedPartyManagerAI.py +++ b/toontown/src/uberdog/DistributedPartyManagerAI.py @@ -1,7 +1,6 @@ import random import sys import time -from sets import Set from direct.showbase.PythonUtil import Functor from direct.distributed.DistributedObjectAI import DistributedObjectAI @@ -15,13 +14,13 @@ class DistributedPartyManagerAI(DistributedObjectAI): """AI side class for the party manager.""" - + notify = directNotify.newCategory("DistributedPartyManagerAI") - + def __init__(self, air): - DistributedObjectAI.__init__(self, air) - self.accept("avatarEntered", self.handleAvatarEntered) - + DistributedObjectAI.__init__(self, air) + self.accept("avatarEntered", self.handleAvatarEntered) + self.allowUnreleased= False self.canBuy = True # change this to True when boarding has had time on test self.avIdToPartyZoneId = {} @@ -60,7 +59,7 @@ def announceGenerate(self): if goingDownDg: self.air.addPostSocketClose(goingDownDg) - + def handleAvatarEntered(self, avatar): """A toon just logged in, check his party information.""" @@ -88,8 +87,8 @@ def sendAddParty(self, hostId, startTime, endTime, isPrivate, inviteTheme, activ self.addPartyResponseUdToAi, "NoResponseFromUberdog_%d_%d"%(self.doId,hostId), [hostId,PartyGlobals.AddPartyErrorCode.DatabaseError,0] - ) - + ) + def addPartyRequest(self, hostId, startTime, endTime, isPrivate, inviteTheme, activities, decorations, inviteeIds): """Add a new party.""" DistributedPartyManagerAI.notify.debug( "addPartyRequest" ) @@ -100,7 +99,7 @@ def addPartyRequest(self, hostId, startTime, endTime, isPrivate, inviteTheme, ac # the toon is not on our district, let the party manager on that district handle it DistributedPartyManagerAI.notify.debug('addPartyRequest toon %d is not in our district' % senderId) return - + if hostId != senderId: # really bad, potential hacker self.air.writeServerEvent('suspicious', senderId, @@ -130,8 +129,8 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi # finished. host = simbase.air.doId2do[hostId] if not host.canPlanParty(): - return (False,"Other Parties") - + return (False,"Other Parties") + # TODO-parties : We need to validate startTime and endTime to make sure # they are valid strings, or will sql do that? try: @@ -150,30 +149,30 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi elif endTm.tm_year < PartyGlobals.MinPlannedYear: return (False,"End time too far in the future") except ValueError: - return (False, "Can't parse endTime") - + return (False, "Can't parse endTime") + if isPrivate not in (0,1): return (False,"Invalid isPrivate %s" % isPrivate) - + if inviteTheme not in PartyGlobals.InviteTheme: return (False,"Invalid inviteTheme %s" % inviteTheme) - + if hasattr(simbase.air, "holidayManager"): - if ToontownGlobals.VALENTINES_DAY not in simbase.air.holidayManager.currentHolidays: + if ToontownGlobals.VALENTINES_DAY not in simbase.air.holidayManager.currentHolidays: if inviteTheme == PartyGlobals.InviteTheme.Valentoons: return (False,"Invalid inviteTheme %s" % inviteTheme) - if ToontownGlobals.VICTORY_PARTY_HOLIDAY not in simbase.air.holidayManager.currentHolidays: + if ToontownGlobals.VICTORY_PARTY_HOLIDAY not in simbase.air.holidayManager.currentHolidays: if inviteTheme == PartyGlobals.InviteTheme.VictoryParty: return (False,"Invalid inviteTheme %s" % inviteTheme) costOfParty = 0 activitiesUsedDict = {} usedGridSquares = {} # key is a tuple (x,y), value isn't that important - actSet = Set([]) + actSet = set([]) for activityTuple in activities: if activityTuple[0] not in PartyGlobals.ActivityIds: return (False,"Invalid activity id %s"%activityTuple[0]) - + activityId = activityTuple[0] # Check for holiday restrictions. @@ -183,9 +182,9 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi if activityId in PartyGlobals.VictoryPartyReplacementActivityIds: if simbase.air.holidayManager.isHolidayRunning(ToontownGlobals.VICTORY_PARTY_HOLIDAY): return (False, "Can't add activity %s during Victory Party " %activityId) - + actSet.add(activityTuple[0]) - if activitiesUsedDict.has_key(activityTuple[0]): + if activityTuple[0] in activitiesUsedDict: activitiesUsedDict[activityTuple[0]] += 1 else: activitiesUsedDict[activityTuple[0]] = 1 @@ -205,7 +204,7 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi if not self.allowUnreleasedServer(): return (False, "Activity %s is not released" % PartyGlobals.ActivityIds.getString(activityTuple[0])) - + # check if the grid squares are valid gridSize = PartyGlobals.ActivityInformationDict[activityId]["gridsize"] centerGridX = activityTuple[1] @@ -227,16 +226,16 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi str(usedGridSquares[squareToTest]))) else: usedGridSquares[squareToTest]="activity-%d"%activityId - + # Check to see if an activity is used too many times for id in PartyGlobals.ActivityIds: - if activitiesUsedDict.has_key(id): + if id in activitiesUsedDict: if activitiesUsedDict[id] > PartyGlobals.ActivityInformationDict[id]["limitPerParty"]: return (False,"Too many of activity %s"%id) # Check for mutually exclusive activities for mutuallyExclusiveTuples in PartyGlobals.MutuallyExclusiveActivities: - mutSet = Set(mutuallyExclusiveTuples) + mutSet = set(mutuallyExclusiveTuples) inter = mutSet.intersection(actSet) if len(inter) > 1: return (False, "Mutuallly exclusive activites %s" % str(inter)) @@ -259,8 +258,8 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi elif decorId in PartyGlobals.VictoryPartyReplacementDecorationIds: if simbase.air.holidayManager.isHolidayRunning(ToontownGlobals.VICTORY_PARTY_HOLIDAY): return (False, "Can't add decoration during Victory Party %s" % decorId) - - if decorationsUsedDict.has_key(decorationTuple[0]): + + if decorationTuple[0] in decorationsUsedDict: decorationsUsedDict[decorationTuple[0]] += 1 else: decorationsUsedDict[decorationTuple[0]] = 1 @@ -298,27 +297,27 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi return (False, "decor Grid Square %s is used twice" % str(squareToTest)) else: usedGridSquares[squareToTest]="decor-%d"%decorId - + # Check to see if a decoration is used too many times for id in PartyGlobals.DecorationIds: - if decorationsUsedDict.has_key(id): + if id in decorationsUsedDict: if decorationsUsedDict[id] > PartyGlobals.DecorationInformationDict[id]["limitPerParty"]: return (False,"Decoration %s used too many times." % id) # Can I afford this party, really? if costOfParty > host.getTotalMoney(): return (False,"Party too expensive, cost = %d"%costOfParty) - + # Can't have parties that have 0 empty grid squares. if len(usedGridSquares) >= PartyGlobals.AvailableGridSquares: return (False,"Party uses %s grid squares." % len(usedGridSquares)) - + # Wow, you passed all the tests I can think of, ship it! return (True, costOfParty) - + #### ## Grid range computation note: - ## We must round with negative values otherwise for center=0, size=3, the + ## We must round with negative values otherwise for center=0, size=3, the ## result will be [1, 0] when we expect [1, 0, -1]. ## The range without rounding: range(int(1.5), int(-1.5), -1) ## The range with rounding: range(int(1.5), int(-2), -1) @@ -326,19 +325,19 @@ def validatePartyAndReturnCost(self, hostId, startTime, endTime, isPrivate, invi ## The range without rounding: range(int(3.5), int(0.5), -1) ## The range with rounding: range(int(3.5), int(0), -1) #### - + def computeGridYRange(self, centerGridY, size): result = [] if size == 1: result = [centerGridY] else: - result = range(int(centerGridY + size/2.0), + result = list(range(int(centerGridY + size/2.0), int(centerGridY - round(size/2.0)), - -1) + -1)) # The result list should be the same size as given. assert len(result) == size, "Bad result range: c=%s s=%s result=%s" % (centerGridY, size, result) - + return result def computeGridXRange(self, centerGridX, size): @@ -346,16 +345,15 @@ def computeGridXRange(self, centerGridX, size): if size == 1: result = [centerGridX] else: - result = range(int(centerGridX + size/2.0), + result = list(range(int(centerGridX + size/2.0), int(centerGridX - round(size/2.0)), - -1 - ) - + -1)) + # The result list should be the same size as given. assert len(result) == size, "Bad result range: c=%s s=%s result=%s" % (centerGridX, size, result) - + return result - + def sendAddPartyResponse(self, hostId, errorCode): """Tell the client if he's add party request got accepted.""" @@ -367,7 +365,7 @@ def markInviteReadButNotReplied(self, inviteKey): 'markInviteAsReadButNotReplied', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [self.doId, inviteKey] - ) + ) def respondToInviteFromMailbox(self, context, inviteKey, newStatus, mailboxDoId): """Send invite response to uberdog.""" @@ -382,7 +380,7 @@ def respondToInviteFromMailbox(self, context, inviteKey, newStatus, mailboxDoId) 'respondToInvite', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [self.doId, mailboxDoId, context, inviteKey, newStatus] - ) + ) def respondToInviteResponse(self, mailboxDoId, context, inviteKey, retcode, newStatus): """UD responding to our invite change.""" @@ -408,7 +406,7 @@ def addPartyResponseUdToAi(self, hostId, errorCode, costOfParty): # database, they logged out... how can we make sure the money # gets taken out? self.deductMoneyFromOfflineToon(hostId, costOfParty) - + self.sendAddPartyResponse(hostId, errorCode) def changePrivateRequest(self, partyId, newPrivateStatus): @@ -419,7 +417,7 @@ def changePrivateRequest(self, partyId, newPrivateStatus): # the toon is not on our district, let the party manager on that district handle it DistributedPartyManagerAI.notify.debug('changePrivateRequest toon %d is not in our district' % senderId) return - + errorCode = self.partyFieldChangeValidate(partyId) if errorCode != PartyGlobals.ChangePartyFieldErrorCode.AllOk: # immediately say we have an error then return @@ -427,7 +425,7 @@ def changePrivateRequest(self, partyId, newPrivateStatus): [partyId, newPrivateStatus, errorCode]) return - # do whatever other sanity checks is necessary here + # do whatever other sanity checks is necessary here self.air.sendUpdateToDoId("DistributedPartyManager", 'changePrivateRequestAiToUd', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, @@ -449,12 +447,12 @@ def partyFieldChangeValidate(self, partyId): if partyId == party.partyId: hostingThisParty = True break - + if not hostingThisParty: # the toon is not hosting this partyId # really bad, potential hacker self.air.writeServerEvent('suspicious', senderId, - 'trying to change field of party %s but not the host' % partyId) + 'trying to change field of party %s but not the host' % partyId) errorCode = PartyGlobals.ChangePartyFieldErrorCode.ValidationError return errorCode @@ -470,16 +468,16 @@ def partyFieldChangeValidate(self, partyId): def changePrivateResponseUdToAi(self, hostId, partyId, newPrivateStatus, errorCode): """Handle the Uberdog telling us if the change private succeeded or not.""" if errorCode == PartyGlobals.ChangePartyFieldErrorCode.AllOk: - if self.air.doId2do.has_key(hostId): + if hostId in self.air.doId2do: av = self.air.doId2do[hostId] for partyInfo in av.hostedParties: if partyInfo.partyId == partyId: partyInfo.isPrivate = newPrivateStatus - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: self.hostAvIdToAllPartiesInfo[hostId][3] = newPrivateStatus - + self.sendUpdateToAvatarId(hostId, "changePrivateResponse", [partyId, newPrivateStatus, errorCode]) - + def changePartyStatusRequest(self, partyId, newPartyStatus): """Handle the client requesting to change the party status.""" senderId = self.air.getAvatarIdFromSender() @@ -487,7 +485,7 @@ def changePartyStatusRequest(self, partyId, newPartyStatus): if not toonSender: # the toon is not on our district, let the party manager on that district handle it DistributedPartyManagerAI.notify.debug('changePartyStatusRequest toon %d not in our district' % senderId) - return + return errorCode = self.partyFieldChangeValidate(partyId) if errorCode != PartyGlobals.ChangePartyFieldErrorCode.AllOk: # immediately say we have an error then return @@ -495,17 +493,17 @@ def changePartyStatusRequest(self, partyId, newPartyStatus): [partyId, newPartyStatus, errorCode, 0]) return - # do whatever other sanity checks is necessary here + # do whatever other sanity checks is necessary here self.air.sendUpdateToDoId("DistributedPartyManager", 'changePartyStatusRequestAiToUd', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [self.doId, partyId, newPartyStatus] - ) - + ) + def changePartyStatusResponseUdToAi(self, hostId, partyId, newPartyStatus, errorCode): """Handle the Uberdog telling us if the change partyStatus succeeded or not.""" beansRefunded = 0 - if self.air.doId2do.has_key(hostId): + if hostId in self.air.doId2do: av = self.air.doId2do[hostId] for partyInfo in av.hostedParties: if partyInfo.partyId == partyId: @@ -526,7 +524,7 @@ def getCostOfParty(self, partyInfo): return newCost def getAllPublicParties(self): - allParties = self.hostAvIdToAllPartiesInfo.values() + allParties = list(self.hostAvIdToAllPartiesInfo.values()) allParties.sort() returnParties = [] curGmTime = time.time() @@ -538,24 +536,24 @@ def getAllPublicParties(self): minLeft = int( (PartyGlobals.DefaultPartyDuration *60) - ( curGmTime - partyInfo[0]) / 60.0) if minLeft <= 0: continue - returnParties.append(partyInfo[1:3] + partyInfo[4:7] + [minLeft]) + returnParties.append(partyInfo[1:3] + partyInfo[4:7] + [minLeft]) DistributedPartyManagerAI.notify.debug("getAllPublicParties : %s" % returnParties) return returnParties - + def updateToPublicPartyCountUdToAllAi(self, hostId, newCount): """ The count has changed on a public party. """ DistributedPartyManagerAI.notify.debug("updateToPublicPartyCountUdToAllAi : hostId=%s newCount=%s"%(hostId, newCount)) - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: self.hostAvIdToAllPartiesInfo[hostId][4] = newCount - + def partyHasFinishedUdToAllAi(self, hostId): """ This party has finished, it may not have been mine, so just update my public party information. """ - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: del self.hostAvIdToAllPartiesInfo[hostId] def updateToPublicPartyInfoUdToAllAi(self, hostId, time, shardId, zoneId, isPrivate, numberOfGuests, hostName, activityIds, partyId): @@ -570,7 +568,7 @@ def delete(self): DistributedPartyManagerAI.notify.debug("BASE: delete: deleting DistributedPartyManagerAI object") self.ignoreAll() DistributedObjectGlobalAI.DistributedObjectGlobalAI.delete(self) - for party in self.hostAvIdToPartiesRunning.values(): + for party in list(self.hostAvIdToPartiesRunning.values()): party.requestDelete() del self.avIdToPartyZoneId del self.hostAvIdToPartiesRunning @@ -597,7 +595,7 @@ def getPartyZone(self, hostId, zoneId, planningParty): # If he's not the owner, maybe he's got a valid zone already and he's # looking to join a party coming from a public party gate # Otherwise fail - + senderId = self.air.getAvatarIdFromSender() # If we're planning a party, we need to give them a zone to plan in, but @@ -616,7 +614,7 @@ def getPartyZone(self, hostId, zoneId, planningParty): DistributedPartyManagerAI.notify.debug("getPartyZone : Avatar %s is planning party in zone %s" % (senderId, zoneId)) self.sendUpdateToAvatarId(senderId, "receivePartyZone", [senderId, 0, zoneId]) return - + # If they have a zoneId, that means they came from a public party gate # or they are teleporting directly to a toon in a party or they are the # host returning to their own party. @@ -626,14 +624,14 @@ def getPartyZone(self, hostId, zoneId, planningParty): self.notify.warning("Trying to go to a party that is gone. zoneId=%s" % zoneId) self.__sendNoPartyZoneToClient(senderId) return - + partyHostId = self.zoneIdToHostAvId[zoneId] - if self.hostAvIdToClosingPartyZoneId.has_key(partyHostId): + if partyHostId in self.hostAvIdToClosingPartyZoneId: # This party is closing, you can't go to it. self.notify.warning("Trying to go to a party that is closing. hostId=%s" % partyHostId) self.__sendNoPartyZoneToClient(senderId) return - + if partyHostId != senderId: # If I'm not the host, check to see if the party is private if self.hostAvIdToPartiesRunning[partyHostId].partyInfo.isPrivate: @@ -647,15 +645,15 @@ def getPartyZone(self, hostId, zoneId, planningParty): self.__waitForToonToEnterParty(senderId, partyHostId, zoneId) self.__sendPartyZoneToClient(senderId, partyHostId) return - + self.__enterParty(senderId, hostId) - + avPartyZoneId = self.avIdToPartyZoneId.get(hostId) senderPartyZoneId = self.avIdToPartyZoneId.get(senderId) - + isSenderHost = False isHostStartingParty = False - + # Else if sender is host, then toon might be starting a party if senderId == hostId: isSenderHost = True @@ -663,8 +661,8 @@ def getPartyZone(self, hostId, zoneId, planningParty): # If the host got here and there's no party for him, then start a party. # TODO-parties: Double check on the party shard dict to make sure that toon's party is not happening somewhere else. if ( - (not self.hostAvIdToPartiesRunning.has_key(senderId)) and - (not self.hostAvIdToClosingPartyZoneId.has_key(senderId)) + (senderId not in self.hostAvIdToPartiesRunning) and + (senderId not in self.hostAvIdToClosingPartyZoneId) ): # The host is starting a party, let's clear him out of the avIdToPartyZoneId #self.clearPartyZoneId(senderId) # this doesn't clear him out of guests @@ -685,7 +683,7 @@ def getPartyZone(self, hostId, zoneId, planningParty): DistributedPartyManagerAI.notify.debug("couldn't stop toonUpTask for av %s" % self.air.getAvatarIdFromSender()) self.__sendNoPartyZoneToClient(senderId) return - + # If sender was at a party: if senderPartyZoneId is not None: # Check if toon is teleporting somewhere else in the same party: @@ -699,10 +697,10 @@ def getPartyZone(self, hostId, zoneId, planningParty): DistributedPartyManagerAI.notify.debug("Sender is goint to a different party. Party av zone = %s, sender zone = %s." % (avPartyZoneId, senderPartyZoneId)) except: DistributedPartyManagerAI.notify.debug("Sender is not teleporting to the same party.") - + # At this point, toon is at a party and is going/creating a different party if senderPartyZoneId != avPartyZoneId: - if self.hostAvIdToClosingPartyZoneId.has_key(hostId): + if hostId in self.hostAvIdToClosingPartyZoneId: # This party is closing, you can't go to it. self.notify.warning("Trying to go to a party that is closing. hostId=%s" % hostId) self.__sendNoPartyZoneToClient(senderId) @@ -742,7 +740,7 @@ def getPartyZone(self, hostId, zoneId, planningParty): # already started party, update dicts else: # Note: hostId is host of the party sender is trying to go to - if self.hostAvIdToClosingPartyZoneId.has_key(hostId): + if hostId in self.hostAvIdToClosingPartyZoneId: # This party is closing, you can't go to it. self.notify.warning("Trying to go to a party that is closing. hostId=%s" % hostId) self.__sendNoPartyZoneToClient(senderId) @@ -777,11 +775,11 @@ def checkHostHasPartiesThatCanStart(self, hostId): result = True self.notify.warning("checkHostedParties could not find toon %d " % hostId) return result - + def getAvEnterEvent(self): return 'avatarEnterParty' - + def getAvExitEvent(self, avId=None): # listen for all exits or a particular exit # event args: @@ -836,7 +834,7 @@ def __toonChangedZone(self, avId, newZoneId, oldZoneId): del self.avIdEnteringPartyToHostIdZoneId[avId] self.ignore(DistributedObjectAI.staticGetLogicalZoneChangeEvent(avId)) self.announceToonEnterPartyZone(avId, hostId, zoneId) - + def announceToonEnterPartyZone(self, avId, hostId, zoneId): """ announce to the rest of the system that a toon is entering a party @@ -850,19 +848,19 @@ def announceToonEnterPartyZone(self, avId, hostId, zoneId): if avId == hostId: # We have to tell the uberdog that we've started a new party so it can - # update all the other AIs with public party info (but only host does this) - if not self.hostAvIdToAllPartiesInfo.has_key(avId): + # update all the other AIs with public party info (but only host does this) + if avId not in self.hostAvIdToAllPartiesInfo: self.air.sendUpdateToDoId( "DistributedPartyManager", 'partyHasStartedAiToUd', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [self.doId, self.hostAvIdToPartiesRunning[hostId].partyInfo.partyId, self.air.districtId, zoneId, av.getName()] ) - + # tell host to whisper all his guests that the party has started. # We have the host do this as host already has access to guest list. av.sendUpdate( "announcePartyStarted", [self.hostAvIdToPartiesRunning[hostId].partyInfo.partyId] ) - + messenger.send(self.getAvEnterEvent(), [avId, hostId, zoneId]) # Tell the uberdog about the new count self.air.sendUpdateToDoId( @@ -892,18 +890,18 @@ def __sendPartyZoneToClient(self, avId, hostId): self.notify.warning("__sendPartyZoneToClient called with avId=%d, hostId=%d" % (avId, hostId)) try: zoneId = self.avIdToPartyZoneId[avId] - partyId = self.hostAvIdToPartiesRunning[hostId].partyInfo.partyId + partyId = self.hostAvIdToPartiesRunning[hostId].partyInfo.partyId self.sendUpdateToAvatarId(avId, "receivePartyZone", [hostId, partyId, zoneId]) except: - self.notify.warning("__sendPartyZoneToClient : zone did not exist for party host %d, and visitor %d" % (hostId, avId)) + self.notify.warning("__sendPartyZoneToClient : zone did not exist for party host %d, and visitor %d" % (hostId, avId)) self.sendUpdateToAvatarId(avId, "receivePartyZone", [0, 0, 0]) - + # Send empty Party Zone information back to the client # This is called, for example, in case a toon teleports to a party not # running on this shard or if the uberdog doesn't think this party can be # created. def __sendNoPartyZoneToClient(self, avId): - self.notify.warning("__sendNoPartyZoneToClient : not sending avId %d to a party." % avId) + self.notify.warning("__sendNoPartyZoneToClient : not sending avId %d to a party." % avId) self.sendUpdateToAvatarId(avId, "receivePartyZone", [0, 0, 0]) def partyInfoOfHostFailedResponseUdToAi(self, hostId): @@ -918,13 +916,13 @@ def partyInfoOfHostFailedResponseUdToAi(self, hostId): self.__sendNoPartyZoneToClient(hostId) def partyInfoOfHostResponseUdToAi(self, partyInfoTuple, inviteeIds): - """ + """ Called by UD after it has gathered the relevant information for this - party. + party. """ assert self.notify.debugStateCall(self) taskMgr.remove("UberdogTimedOut_%d"%partyInfoTuple[1]) - # Note this method will send the zone info back to the client + # Note this method will send the zone info back to the client # after it creates the party partyInfo = PartyInfoAI(*partyInfoTuple) # request an available zone to have this party in @@ -933,10 +931,10 @@ def partyInfoOfHostResponseUdToAi(self, partyInfoTuple, inviteeIds): # remove any references to host in parties he's currently attending # in case he start a party within another party self.__exitParty(partyInfo.hostId) - + # Host is attending the party, too self.setPartyZoneId(partyInfo.hostId, zoneId) - + # start a ref count for this zone id self.zoneIdToGuestAvIds[zoneId] = [] self.zoneIdToHostAvId[zoneId] = partyInfo.hostId @@ -953,7 +951,7 @@ def __addReferences(self, senderId, hostId): ref.append(senderId) else: self.zoneIdToGuestAvIds[party.zoneId] = [senderId] - + def __removeReferences(self, avId, zoneId): try: self.clearPartyZoneId(avId) @@ -968,10 +966,10 @@ def setPartyZoneId(self, avId, zoneId): lineno = frame.f_lineno defName = frame.f_code.co_name DistributedPartyManagerAI.notify.debug("%s(%s):Added %s:%s" % (defName, lineno, avId, zoneId)) - + def clearPartyZoneId(self, avId, zoneIdFromClient = None): """Clear avId to partyzoneId dict, if zoneIdFromClient is not none, do it only if they match.""" - if not self.avIdToPartyZoneId.has_key(avId): + if avId not in self.avIdToPartyZoneId: return zoneId = self.avIdToPartyZoneId[avId] frame = sys._getframe(1) @@ -990,7 +988,7 @@ def clearPartyZoneId(self, avId, zoneIdFromClient = None): if removeFromDict: DistributedPartyManagerAI.notify.debug("%s(%s):Removed %s:%s" % (defName, lineno, avId, self.avIdToPartyZoneId[avId])) del self.avIdToPartyZoneId[avId] - + def handleGetPartyInfo(self, partyInfo, inviteeIds): DistributedPartyManagerAI.notify.debug("handleGetPartyInfo for host %s" % partyInfo.hostId) # this function is called after the party data is pulled @@ -1001,20 +999,20 @@ def handleGetPartyInfo(self, partyInfo, inviteeIds): # there is a chance that the owner will already have left (by # closing the window). We need to handle that gracefully. - if not self.avIdToPartyZoneId.has_key(partyInfo.hostId): + if partyInfo.hostId not in self.avIdToPartyZoneId: self.notify.warning("Party Zone info was requested, but the guest left before it could be recived: %d" % estateId) return # create the DistributedPartyAI object for this hostId - if self.hostAvIdToPartiesRunning.has_key(partyInfo.hostId): + if partyInfo.hostId in self.hostAvIdToPartiesRunning: self.notify.warning("Already have distobj %s, not generating again" % (partyInfo.partyId)) else: self.notify.info('start party %s init, owner=%s, frame=%s' % (partyInfo.partyId, partyInfo.hostId, globalClock.getFrameCount())) - - partyZoneId = self.avIdToPartyZoneId[partyInfo.hostId] + + partyZoneId = self.avIdToPartyZoneId[partyInfo.hostId] partyAI = DistributedPartyAI(self.air, partyInfo.hostId, partyZoneId, partyInfo, inviteeIds) - + partyAI.generateOtpObject( parentId=self.air.districtId, zoneId=partyZoneId, @@ -1023,7 +1021,7 @@ def handleGetPartyInfo(self, partyInfo, inviteeIds): self.hostAvIdToPartiesRunning[partyInfo.hostId] = partyAI self.__addReferences(partyInfo.hostId, partyInfo.hostId) - + # We need to kick guests out when the party is closing and not allow # anyone else in. Send a message to guests to leave # Also, alert uberdog. @@ -1049,7 +1047,7 @@ def handleGetPartyInfo(self, partyInfo, inviteeIds): "DistributedPartyManagerAI_CleanUpPartyZone_%d" % partyZoneId, [partyInfo.hostId,partyZoneId] ) - + self.notify.info('Finished creating party : partyId %s init, host = %s' % (partyInfo.partyId, partyInfo.hostId)) # Now that the zone is set up, send the notification back to @@ -1064,7 +1062,7 @@ def requestShardIdZoneIdForHostId(self, hostId): a party for the shardId and zoneId of that host's party. """ senderId = self.air.getAvatarIdFromSender() - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: shardId = self.hostAvIdToAllPartiesInfo[hostId][1] zoneId = self.hostAvIdToAllPartiesInfo[hostId][2] self.sendUpdateToAvatarId(senderId, 'sendShardIdZoneIdToAvatar', [shardId, zoneId]) @@ -1083,13 +1081,13 @@ def exitParty(self, zoneId): # This function is called from client in the normal case, # such as teleporting out, door out, exiting the game, etc self.__exitParty(senderId, zoneId) - + def __handleUnexpectedExit(self, avId): DistributedPartyManagerAI.notify.debug("we got an unexpected exit on av: %s: deleting." % avId) taskMgr.remove("estateToonUp-" + str(avId)) if avId in self.avIdEnteringPartyToHostIdZoneId: self.__toonLeftBeforeArrival(avId) - if self.avIdToPartyZoneId.has_key(avId): + if avId in self.avIdToPartyZoneId: self.__exitParty(avId) else: DistributedPartyManagerAI.notify.debug("unexpected exit and %s is not in avIdToPartyZoneId" % avId) @@ -1106,13 +1104,13 @@ def __exitParty(self, avId, zoneIdFromClient = None): if avZoneId != zoneIdFromClient: self.notify.debug("overriding avZoneId to %s" % zoneIdFromClient) avZoneId = zoneIdFromClient - + partyId = -1 isPlanning = True if avZoneId is not None: isPlanning = False self.clearPartyZoneId(avId, zoneIdFromClient) - if self.zoneIdToGuestAvIds.has_key(avZoneId): + if avZoneId in self.zoneIdToGuestAvIds: if avId in self.zoneIdToGuestAvIds[avZoneId]: self.notify.debug("removing guest %d from zone %d" % (avId, avZoneId)) self.zoneIdToGuestAvIds[avZoneId].remove(avId) @@ -1132,16 +1130,16 @@ def __exitParty(self, avId, zoneIdFromClient = None): info = self.hostAvIdToAllPartiesInfo.get(hostAvId) if info: partyId = info[7] - + else: self.notify.warning("__exitParty() avZoneId=%d not in self.zoneIdToHostAvId" % avZoneId) - + else: DistributedPartyManagerAI.notify.debug("__exitParty can't find zone for %d" % avId) totalMoney = -1 # stop the healing - if self.air.doId2do.has_key(avId): + if avId in self.air.doId2do: # Find the avatar av = self.air.doId2do[avId] # Stop healing them @@ -1157,7 +1155,7 @@ def freeZoneIdFromPlannedParty(self, hostId, zoneId): if senderId != hostId: self.air.writeServerEvent('suspicious', senderId, 'someone else trying to free a zone for this avatar: hostId = %d' % hostId) return - if self.hostIdToPlanningPartyZoneId.has_key(hostId): + if hostId in self.hostIdToPlanningPartyZoneId: DistributedPartyManagerAI.notify.debug("freeZoneIdFromPlannedParty : freeing zone : hostId = %d, zoneId = %d" % (hostId, zoneId)) self.air.deallocateZone(self.hostIdToPlanningPartyZoneId[hostId]) del self.hostIdToPlanningPartyZoneId[hostId] @@ -1166,14 +1164,14 @@ def freeZoneIdFromPlannedParty(self, hostId, zoneId): self.notify.warning('suspicious senderId=%d trying to free a zone that this avatar did not allocate: hostId = %d' % (senderId,hostId)) self.air.writeServerEvent('suspicious', senderId, 'trying to free a zone that this avatar did not allocate: hostId = %d' % hostId) return - + def __cleanupParty(self, hostId, zoneId): DistributedPartyManagerAI.notify.debug("__cleanupParty hostId = %d, zoneId = %d" % (hostId, zoneId)) - + self.clearPartyZoneId(hostId) - if self.hostAvIdToClosingPartyZoneId.has_key(hostId): + if hostId in self.hostAvIdToClosingPartyZoneId: del self.hostAvIdToClosingPartyZoneId[hostId] - if self.zoneIdToHostAvId.has_key(zoneId): + if zoneId in self.zoneIdToHostAvId: del self.zoneIdToHostAvId[zoneId] # give our zoneId back to the air @@ -1185,7 +1183,7 @@ def __cleanupParty(self, hostId, zoneId): # stop listening for unexpectedExit self.ignore(self.air.getAvatarExitEvent(hostId)) - if self.zoneIdToGuestAvIds.has_key(zoneId): + if zoneId in self.zoneIdToGuestAvIds: del self.zoneIdToGuestAvIds[zoneId] def __deleteParty(self, hostId): @@ -1193,7 +1191,7 @@ def __deleteParty(self, hostId): DistributedPartyManagerAI.notify.debug("__deleteParty(hostId=%s)" % hostId) # delete from state server - if self.hostAvIdToPartiesRunning.has_key(hostId): + if hostId in self.hostAvIdToPartiesRunning: if self.hostAvIdToPartiesRunning[hostId] != None: self.hostAvIdToPartiesRunning[hostId].destroyPartyData() DistributedPartyManagerAI.notify.debug('DistributedPartyAI requestDelete, doId=%d' % getattr(self.hostAvIdToPartiesRunning[hostId], 'doId')) @@ -1217,7 +1215,7 @@ def __bootGuests(self, hostId, zoneId): except: # refCount might have already gotten deleted pass - + def __bootAv(self, avId, zoneId, hostId): # Let anyone who might be doing something with this avatar in the party assert self.notify.debugStateCall(self) @@ -1242,19 +1240,19 @@ def __setPartyEnded(self, hostId, zoneId): OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [self.doId, self.hostAvIdToPartiesRunning[hostId].partyInfo.partyId, PartyGlobals.PartyStatus.Finished] ) - + self.hostAvIdToClosingPartyZoneId[hostId] = zoneId messenger.send(self.getPartyEndedEvent(hostId)) - + # Warn guests they have to leave guests = self.zoneIdToGuestAvIds.get(zoneId) if guests: for avId in guests: # Pass the message to the client, who will pass it to the PartyHood - self.sendUpdateToAvatarId(avId, "sendAvToPlayground", [avId, 0]) # 0 is a warning, 1 is final + self.sendUpdateToAvatarId(avId, "sendAvToPlayground", [avId, 0]) # 0 is a warning, 1 is final - self.hostAvIdToPartiesRunning[hostId].b_setPartyState(True) + self.hostAvIdToPartiesRunning[hostId].b_setPartyState(True) def testMsgUdToAllAi(self): """Try receiving a UD to all AI msg.""" @@ -1268,12 +1266,12 @@ def forceCheckStart(self): 'forceCheckStart', OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, [] - ) + ) def allowUnreleasedServer(self): """Return do we allow player to buy unreleased activities and decorations on the client.""" return self.allowUnreleased - + def setAllowUnreleaseServer(self, newValue): """Set if we allow player to buy unreleased activities and decorations on the client.""" self.allowUnreleased = newValue @@ -1286,7 +1284,7 @@ def toggleAllowUnreleasedServer(self): def canBuyParties(self): """Return do we allow player to buy parties.""" return self.canBuy - + def setCanBuyParties(self, newValue): """Set if we allow player to buy unreleased activities and decorations on the client.""" self.canBuy= newValue @@ -1295,7 +1293,7 @@ def toggleCanBuyParties(self): """Toggle allow unreleased on the client, then return the new value.""" self.canBuy= not self.canBuy return self.canBuy - + def partyManagerUdStartingUp(self): """The uberdog is restarting, tell it about parties running on this district.""" for hostId in self.hostAvIdToAllPartiesInfo: @@ -1313,7 +1311,7 @@ def partyManagerUdStartingUp(self): hostName = partyInfo[5] activityIds = partyInfo[6] partyId = partyInfo[7] - + self.air.sendUpdateToDoId( "DistributedPartyManager", 'updateAllPartyInfoToUd', @@ -1321,7 +1319,7 @@ def partyManagerUdStartingUp(self): [hostId, startTime, shardId, zoneId, isPrivate, numberOfGuests, hostName, activityIds, partyId] ) - + def magicWordEnd(self, senderId): """End the party prematurely as the sender said a magic word.""" @@ -1329,7 +1327,7 @@ def magicWordEnd(self, senderId): partyZoneId = self.avIdToPartyZoneId.get(senderId) if not partyZoneId: return "%d not in self.avIdToPartyZoneId" % senderId - + hostId = self.zoneIdToHostAvId.get(partyZoneId) if hostId != senderId: return "sender %d is not host (%d is)" % (senderId, hostId) @@ -1344,9 +1342,9 @@ def magicWordEnd(self, senderId): kickDelay = simbase.config.GetInt("party-kick-delay",PartyGlobals.DelayBeforeAutoKick) taskMgr.doMethodLater(0.1 + kickDelay, self.__bootGuests, "DistributedPartyManagerAI_BootGuests_%d"%partyZoneId, [hostId,partyZoneId]) taskMgr.doMethodLater(0.1 + kickDelay + 10.0, self.__cleanupParty, "DistributedPartyManagerAI_CleanUpPartyZone_%d"%partyZoneId, [hostId,partyZoneId]) - + return ("Party Zone %d Ending Soon" % partyZoneId) - + def deductMoneyFromOfflineToon(self, toonId, cost): """Deduct the cost of the party from an offline toon.""" @@ -1360,8 +1358,8 @@ def deductMoneyFromOfflineToon(self, toonId, cost): 'setMoney', 'setBankMoney'], event = event) - self.acceptOnce(event, Functor(self.gotOfflineToon, cost = cost, toonId = toonId)) - + self.acceptOnce(event, Functor(self.gotOfflineToon, cost = cost, toonId = toonId)) + def gotOfflineToon(self, toon, cost, toonId): """Handle a response to our request to get an offline toon, deduct the money from him.""" if toon is None: @@ -1390,7 +1388,7 @@ def gotOfflineToon(self, toon, cost, toonId): # takeMoney is doing a b_setMoney, so that gets written into the otp database # db = DatabaseObject.DatabaseObject(self.air, toon.doId) # db.storeObject(toon, ["setMoney", "setBankMoney"]) - + # prevent mem leak # as far as I can tell we don't need this, ~aigarbage reports 0 cycles # toon.patchDelete() diff --git a/toontown/src/uberdog/DistributedPartyManagerUD.py b/toontown/src/uberdog/DistributedPartyManagerUD.py index 5173180e..c9142228 100644 --- a/toontown/src/uberdog/DistributedPartyManagerUD.py +++ b/toontown/src/uberdog/DistributedPartyManagerUD.py @@ -13,7 +13,7 @@ from toontown.parties import PartyUtils from toontown.uberdog.ttPartyDb import ttPartyDb from toontown.uberdog.ttInviteDb import ttInviteDb -from toontown.ai.ToontownAIMsgTypes import PARTY_MANAGER_UD_TO_ALL_AI +from toontown.ai.ToontownAIMsgTypes import PARTY_MANAGER_UD_TO_ALL_AI from datetime import timedelta # Used for testing, to create random test party from datetime import datetime # Used for testing, to create random test party @@ -23,31 +23,31 @@ class DistributedPartyManagerUD(DistributedObjectGlobalUD): # WARNING this is a global OTP object # DistributedPartyManagerAI is NOT! # Hence the use of sendUpdateToDoId when sending back to AI - + notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPartyManagerUD") - + def __init__(self, air): DistributedObjectGlobalUD.__init__(self, air) - self.printlog = partiesUdLog("PartiesUdMonitor","localhost",12346) + self.printlog = partiesUdLog("PartiesUdMonitor","localhost",12346) user = uber.config.GetString("mysql-user", '') passwd = uber.config.GetString("mysql-passwd",'') # avId is key, if present, avatar is online self.isAvatarOnline = {} - + self.hostAvIdToAllPartiesInfo = {} # 0 1 2 3 # hostAvId to ( shardId, zoneId, isPrivate, number of toons there, # 4 5 6 7 # hostName,activityIds, actualStartTime, partyId) - + # The uberdog has the database, and knows when every party in every shard # is allowed to start, or rather, when the 'go' button is activated. So, # every 15 minutes (parties can only start on increments of 15 minutes) # we'll check and see what parties are allowed to start and make the calls # to enable their go buttons. We'll do the 1st check a minute in... taskMgr.doMethodLater(60, self._checkForPartiesStarting, "DistributedPartyManagerUD_checkForPartiesStarting" ) - + if not user: user = PartiesUdConfig.ttDbUser if not passwd: @@ -56,24 +56,24 @@ def __init__(self, air): self.partyDb = ttPartyDb(host=uber.mysqlhost, port=PartiesUdConfig.ttDbPort, user = user, - passwd = passwd, + passwd = passwd, db=PartiesUdConfig.ttDbName) self.inviteDb = ttInviteDb(host=uber.mysqlhost, port=PartiesUdConfig.ttDbPort, user = user, - passwd = passwd, + passwd = passwd, db=PartiesUdConfig.ttDbName) - + # in minutes, how often do we check if a party can start self.startPartyFrequency = uber.config.GetFloat('start-party-frequency', PartyGlobals.UberdogCheckPartyStartFrequency) # The uberdog has the database, we need to check if party has been started but never finished - # We'll do the 1st check a 1 second in... + # We'll do the 1st check a 1 second in... self.partiesSanityCheckFrequency = uber.config.GetInt('parties-sanity-check-frequency', PartyGlobals.UberdogPartiesSanityCheckFrequency) taskMgr.doMethodLater(1, self._sanityCheckParties, "DistributedPartyManagerUD_sanityCheckParties") - + def announceGenerate(self): DistributedObjectGlobalUD.announceGenerate(self) self.accept("avatarOnlinePlusAccountInfo", self.avatarOnlinePlusAccountInfo, []) @@ -81,8 +81,8 @@ def announceGenerate(self): # assuming we are restarting, tell all the AIs so they can reply back with their # currently running parties self.sendUpdateToAllAis("partyManagerUdStartingUp", []) - - + + def avatarLoggedIn(self, avatarId): """Handle an avatar just logging in.""" # Note this is no longer sent by the AI but is instead in response to @@ -94,7 +94,7 @@ def avatarLoggedIn(self, avatarId): # we've sent invites, send party details related to those invites self._updateInvitedToParties( avatarId, partyIds, partyInfo ) - + # send out the details of the parties he's hosting hostedPartyIds, hostedPartyInfo = self._updateHostedParties( avatarId ) @@ -119,7 +119,7 @@ def addParty(self, pmDoId, hostId, startTime, endTime, isPrivate, inviteTheme, a partyId = partiesTuple[-1]['partyId'] # TODO-parties: is getting the -1 index guranteed to get the party we just pushed to the database? # send out the details of the parties he's hosting hostedPartyIds, hostedPartyInfo = self._updateHostedParties(hostId) - + # Send out updates to invitees for inviteeId in inviteeIds: self.inviteDb.putInvite(partyId, inviteeId) @@ -140,7 +140,7 @@ def markInviteAsReadButNotReplied( self, partyManagerDoId, inviteKey): """Just mark the invite as read in the database.""" invite = self.inviteDb.getOneInvite(inviteKey) if not invite: - # how the heck did this happen, inviteKey isn't there + # how the heck did this happen, inviteKey isn't there DistributedPartyManagerUD.notify.warning('markInviteAsReadButNotReplied inviteKey=%s not found in inviteDb' % inviteKey) return @@ -149,15 +149,15 @@ def markInviteAsReadButNotReplied( self, partyManagerDoId, inviteKey): party = self.partyDb.getParty(partyId) if not party: return - + updateResult = self.inviteDb.updateInvite(inviteKey, PartyGlobals.InviteStatus.ReadButNotReplied) self.updateHostAndInviteeStatus(inviteKey, partyId, invite, party, PartyGlobals.InviteStatus.ReadButNotReplied ) - + def updateHostAndInviteeStatus(self, inviteKey, partyId, invite, party, newStatus): """Tell the invitee and host toons of the change in inviteStatus.""" # tell the Invitee DistributedToon inviteeId = invite[0]['guestId'] - + DistributedPartyManagerUD.notify.debug( "Calling DistributedToon::updateInvite( inviteKey=%s, newStatus=%s ) across the network with inviteeId %d." %(inviteKey, PartyGlobals.InviteStatus.getString(newStatus), inviteeId ) ) self.air.sendUpdateToDoId( "DistributedToon", @@ -176,15 +176,15 @@ def updateHostAndInviteeStatus(self, inviteKey, partyId, invite, party, newStatu hostId, [partyId, inviteeId, newStatus], ) - + def respondToInvite(self, partyManagerDoId, mailboxDoId, context, inviteKey, newStatus): """Handle accepting/rejecting an invite.""" DistributedPartyManagerUD.notify.debug( "respondToInvite( partyManagerDoId=%d, mailboxDoId=%d, ..., inviteKey=%d, newStatus=%s )" %(partyManagerDoId, mailboxDoId, inviteKey, PartyGlobals.InviteStatus.getString(newStatus) ) ) - replyToChannelAI = self.air.getSenderReturnChannel() + replyToChannelAI = self.air.getSenderReturnChannel() retcode = ToontownGlobals.P_InvalidIndex invite = self.inviteDb.getOneInvite(inviteKey) if not invite: - # how the heck did this happen, inviteKey isn't there + # how the heck did this happen, inviteKey isn't there DistributedPartyManagerUD.notify.warning('inviteKey=%s not found in inviteDb' % inviteKey) self.air.sendUpdateToDoId( "DistributedPartyManager", @@ -232,11 +232,11 @@ def sendAddPartyResponse(self, pmDoId, hostId, errorCode, costOfParty=0): def _updateInvites(self, avatarId): """ Push invites and setInviteMailNotify across to the DistributedToon. - + Returns a list of prioritized partyIds and the partyInfo that avatarId is invited to. """ DistributedPartyManagerUD.notify.debug( "_updateInvites( avatarId=%d )" % avatarId ) - + invitesTuple = self.inviteDb.getInvites(avatarId) DistributedPartyManagerUD.notify.debug( "Found %d invites for avatarId %d in the invite database." % (len(invitesTuple), avatarId) ) @@ -256,9 +256,9 @@ def _updateInvites(self, avatarId): # mailbox, but since it's so far in the future the partyInvitedTo is not sent # we get the case of a mailbox being flagged but having nothing in it! partyIds = [inviteInfo['partyId'] for inviteInfo in invitesTuple] - + prioritizedPartyIds, prioritizedPartyInfo = self.reprioritizeParties(partyIds, PartyGlobals.MaxSetPartiesInvitedTo) - + formattedInvites = [] partyIds = [] numOld = 0 @@ -268,7 +268,7 @@ def _updateInvites(self, avatarId): if partyId not in prioritizedPartyIds: # skip this invite, too far in the past or in the future continue - inviteKey = item['inviteId'] + inviteKey = item['inviteId'] status = item['statusId'] if status == PartyGlobals.InviteStatus.NotRead: numNew += 1 @@ -288,7 +288,7 @@ def _updateInvites(self, avatarId): # we let DistributedToon.updateInviteMailNotify() properly # set the right value for inviteMailNotify now instead of uberdog doing it here - + return prioritizedPartyIds, prioritizedPartyInfo def reprioritizeParties(self, partyIds, limit): @@ -314,29 +314,29 @@ def reprioritizeParties(self, partyIds, limit): if slotsLeft > 0: futureCancelledParties = self.partyDb.getPrioritizedParties(\ - partyIds, + partyIds, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = True, cancelled = True) #self.notify.debug('futureCancelledParties = %s' % str(futureCancelledParties)) prioritizedPartyIds += [partyInfo['partyId'] for partyInfo in futureCancelledParties] - prioritizedPartyInfo += futureCancelledParties + prioritizedPartyInfo += futureCancelledParties slotsLeft -= len(futureCancelledParties) if slotsLeft > 0: pastFinishedParties = self.partyDb.getPrioritizedParties(\ - partyIds, + partyIds, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = False, cancelled = False) #self.notify.debug('pastFinishedParties = %s' % str(pastFinishedParties)) prioritizedPartyIds += [partyInfo['partyId'] for partyInfo in pastFinishedParties] - prioritizedPartyInfo += pastFinishedParties + prioritizedPartyInfo += pastFinishedParties slotsLeft -= len(pastFinishedParties) if slotsLeft > 0: pastCancelledParties = self.partyDb.getPrioritizedParties(\ - partyIds, + partyIds, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = False, @@ -348,13 +348,13 @@ def reprioritizeParties(self, partyIds, limit): # prioritizedPartyIds should have everything, prioritizing pending parties in the future # then cancelled parties in the future, then started parties in the past # then cancelled parties in the past - + return prioritizedPartyIds, prioritizedPartyInfo - + def _updateInvitedToParties(self, avatarId, passedPartyIds, passedPartyInfo): """ Push information about parties that avatarId is invited to across to the DistributedToon. - + partyIds: list of partyIds that avatarId is invited to """ partyIds = passedPartyIds @@ -362,7 +362,7 @@ def _updateInvitedToParties(self, avatarId, passedPartyIds, passedPartyInfo): DistributedPartyManagerUD.notify.debug( "_updateInvitedToParties( avatarId=%d, partyIds=%s )" %(avatarId, partyIds) ) if partyInfo == None: partyIds, partyInfo = self.reprioritizeParties(passedPartyIds, PartyGlobals.MaxSetPartiesInvitedTo) - + formattedPartiesInvitedTo = [] formattedPartiesSize = 0 for partyInfoDict in partyInfo: @@ -375,7 +375,7 @@ def _updateInvitedToParties(self, avatarId, passedPartyIds, passedPartyInfo): formattedPartiesInvitedTo.append(formattedPartyInfo) else: break - + DistributedPartyManagerUD.notify.debug( "Calling DistributedToon::setPartiesInvitedTo across the network with avatarId %d. Sending %d formatted parties." %(avatarId, len(formattedPartiesInvitedTo) ) ) self.air.sendUpdateToDoId( "DistributedToon", @@ -392,14 +392,14 @@ def getThresholdTime(self): thresholdTime = self.air.toontownTimeManager.getCurServerDateTime() thresholdTime += timedelta(hours = -(2*PartyGlobals.DefaultPartyDuration )) - return thresholdTime - + return thresholdTime + def getFormattedPartyInfo(self, partyInfoDict): startTime = partyInfoDict['startTime'] endTime = partyInfoDict['endTime'] activitiesStr = partyInfoDict['activities'] formattedActivities = [] - for i in xrange (len(activitiesStr) /4): + for i in range (len(activitiesStr) /4): oneActivity = (ord(activitiesStr[i*4]), ord(activitiesStr[i*4 + 1]), ord(activitiesStr[i*4 + 2]), @@ -408,7 +408,7 @@ def getFormattedPartyInfo(self, partyInfoDict): formattedActivities.append(oneActivity) decorStr = partyInfoDict['decorations'] formattedDecors = [] - for i in xrange( len(decorStr) / 4): + for i in range( len(decorStr) / 4): oneDecor = (ord(decorStr[i*4]), ord(decorStr[i*4 + 1]), ord(decorStr[i*4 + 2]), @@ -417,7 +417,7 @@ def getFormattedPartyInfo(self, partyInfoDict): formattedDecors.append(oneDecor) isPrivate = partyInfoDict['isPrivate'] inviteTheme = partyInfoDict['inviteTheme'] - + return( partyInfoDict['partyId'], partyInfoDict['hostId'], @@ -461,29 +461,29 @@ def reprioritizeHostedParties(self, hostId, limit): if slotsLeft > 0: futureCancelledParties = self.partyDb.getHostPrioritizedParties(\ - hostId, + hostId, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = True, cancelled = True) self.notify.debug('futureCancelledParties = %s' % str(futureCancelledParties)) prioritizedPartyIds += [partyInfo['partyId'] for partyInfo in futureCancelledParties] - prioritizedPartyInfo += futureCancelledParties + prioritizedPartyInfo += futureCancelledParties slotsLeft -= len(futureCancelledParties) if slotsLeft > 0: pastFinishedParties = self.partyDb.getHostPrioritizedParties(\ - hostId, + hostId, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = False, cancelled = False) self.notify.debug('pastFinishedParties = %s' % str(pastFinishedParties)) prioritizedPartyIds += [partyInfo['partyId'] for partyInfo in pastFinishedParties] - prioritizedPartyInfo += pastFinishedParties + prioritizedPartyInfo += pastFinishedParties slotsLeft -= len(pastFinishedParties) if slotsLeft > 0: pastCancelledParties = self.partyDb.getHostPrioritizedParties(\ - hostId, + hostId, thresholdTime.strftime("%Y-%m-%d %H:%M:%S"), slotsLeft, future = False, @@ -494,15 +494,15 @@ def reprioritizeHostedParties(self, hostId, limit): # prioritizedPartyIds should have everything, prioritizing pending parties in the future # then cancelled parties in the future, then started parties in the past - # then cancelled parties in the past - - return prioritizedPartyIds, prioritizedPartyInfo + # then cancelled parties in the past + + return prioritizedPartyIds, prioritizedPartyInfo def _updateHostedParties(self, avatarId): """ Push information about parties that avatarId is hosting across to the DistributedToon. - + Returns a list of hostedPartyIds """ DistributedPartyManagerUD.notify.debug( "_updateHostedParties( avatarId=%d )" % avatarId ) @@ -512,7 +512,7 @@ def _updateHostedParties(self, avatarId): formattedPartiesSize = 0 for partyInfoDict in hostedParties: if partyInfoDict['startTime'] and partyInfoDict['endTime']: - + formattedPartyInfo = self.getFormattedPartyInfo(partyInfoDict) partyInfoSize = self._getPartyInfoSize(formattedPartyInfo) formattedPartiesSize += partyInfoSize @@ -528,7 +528,7 @@ def _updateHostedParties(self, avatarId): str(partyInfoDict['startTime']), str(partyInfoDict['endTime']) )) - + DistributedPartyManagerUD.notify.debug( "Calling DistributedToon::setHostedParties across the network with avatarId %d. Sending %d formatted parties." %(avatarId, len(formattedHostedParties) ) ) self.air.sendUpdateToDoId( "DistributedToon", @@ -536,7 +536,7 @@ def _updateHostedParties(self, avatarId): avatarId, [formattedHostedParties], ) - + return hostedPartyIds, hostedParties def _updatePartyReplies(self, avatarId, hostedPartyIds, hostedParties): @@ -545,7 +545,7 @@ def _updatePartyReplies(self, avatarId, hostedPartyIds, hostedParties): and push them across to DistributedToon. """ DistributedPartyManagerUD.notify.debug( "_updatePartyReplies( avatarId=%d, hostedPartyIds=%s )" %(avatarId, hostedPartyIds) ) - thresholdTime = self.getThresholdTime() + thresholdTime = self.getThresholdTime() formattedRepliesForAllParties = [] for index, partyId in enumerate( hostedPartyIds): if index >= len(hostedParties): @@ -564,15 +564,15 @@ def _updatePartyReplies(self, avatarId, hostedPartyIds, hostedParties): if not gotCorrectPartyInfo: self.notify.warning('partyId =%d not in hostedPartyIds' % partyId) continue - + getRepliesForThisParty = True # we only need replies for parties in the future that are not cancelled # temporarily turned off as shticker book is not happy #if partyInfoDict['statusId'] != PartyGlobals.PartyStatus.Cancelled and \ # thresholdTime < partyInfoDict['startTime']: # getRepliesForThisParty = True - - if getRepliesForThisParty: + + if getRepliesForThisParty: formattedReplies = [] replies = self.inviteDb.getReplies(partyId) for oneReply in replies: @@ -592,7 +592,7 @@ def _updatePartyReplies(self, avatarId, hostedPartyIds, hostedParties): def changePrivateRequestAiToUd(self, pmDoId, partyId, newPrivateStatus): """Handle AI requesting to change a party to public or private.""" errorCode = PartyGlobals.ChangePartyFieldErrorCode.AllOk - + # verify the party is still there party = self.partyDb.getParty(partyId) if not party: @@ -614,25 +614,25 @@ def changePrivateRequestAiToUd(self, pmDoId, partyId, newPrivateStatus): [party[0]['hostId'], partyId, newPrivateStatus, errorCode ], ) return - - # TODO updateResult is always empty, do we need to verify the update took? + + # TODO updateResult is always empty, do we need to verify the update took? updateResult = self.partyDb.changePrivate(partyId, newPrivateStatus) - + self.air.sendUpdateToDoId( "DistributedPartyManager", 'changePrivateResponseUdToAi', pmDoId, [ party[0]['hostId'], partyId, newPrivateStatus, errorCode ], ) - + # TODO do we need to send out partiesInvitedTo again? def changePartyStatusRequestAiToUd(self, pmDoId, partyId, newPartyStatus): """Handle AI requesting to change the party status.""" DistributedPartyManagerUD.notify.debug("changePartyStatusRequestAiToUd partyId = %s, newPartyStatus = %s" % (partyId, newPartyStatus)) errorCode = PartyGlobals.ChangePartyFieldErrorCode.AllOk - + # verify the party is still there party = self.partyDb.getParty(partyId) if not party: @@ -643,17 +643,17 @@ def changePartyStatusRequestAiToUd(self, pmDoId, partyId, newPartyStatus): pmDoId, [0, partyId, newPartyStatus, errorCode ], ) - + return errorCode partyDict = party[0] # Check to see if this is a party that has finished if partyDict["statusId"] == PartyGlobals.PartyStatus.Started and newPartyStatus == PartyGlobals.PartyStatus.Finished: # It's over, send word to all the AIs so they can update for their public party gates - if self.hostAvIdToAllPartiesInfo.has_key(partyDict["hostId"]): + if partyDict["hostId"] in self.hostAvIdToAllPartiesInfo: self.sendUpdateToAllAis("partyHasFinishedUdToAllAi", [partyDict["hostId"]]) del self.hostAvIdToAllPartiesInfo[partyDict["hostId"]] - - # TODO updateResult is always empty, do we need to verify the update took? + + # TODO updateResult is always empty, do we need to verify the update took? updateResult = self.partyDb.changePartyStatus(partyId, newPartyStatus) self.air.sendUpdateToDoId( "DistributedPartyManager", @@ -661,7 +661,7 @@ def changePartyStatusRequestAiToUd(self, pmDoId, partyId, newPartyStatus): pmDoId, [ partyDict['hostId'], partyId, newPartyStatus, errorCode ], ) - + return errorCode # TODO do we need to send out partiesInvitedTo again? @@ -674,7 +674,7 @@ def partyInfoOfHostRequestAiToUd(self, pmDoId, hostId): # Query the database, get the info! hostedParties = self.partyDb.getPartiesOfHostThatCanStart(hostId) - + partyFail = False partyInfo = None if len(hostedParties) == 0: @@ -685,7 +685,7 @@ def partyInfoOfHostRequestAiToUd(self, pmDoId, hostId): partyInfoDict = hostedParties[0] # Check to see if this party's startTime is before the current time # Note: Must make partyInfoDict["startTime"]'s time aware of any - # time offsets by creating a new datetime based on it but + # time offsets by creating a new datetime based on it but # using the ToontownTimeManager's serverTimeZone info partyStartTime = partyInfoDict["startTime"] partyStartTime = datetime( @@ -794,7 +794,7 @@ def _checkForPartiesStarting(self, task): self.forceFinishedForStarted() # first mark as never started parties who went past the end time self.forceNeverStartedForCanStart() - + partiesStartingTuples = self.partyDb.getPartiesAvailableToStart(curServerDateTime.strftime("%Y-%m-%d %H:%M:%S")) # Now we know the partyIds and hostIds of parties that can start, let's # send those directly out to the DistributedToons who can use them! @@ -814,7 +814,7 @@ def _checkForPartiesStarting(self, task): # if we got here through ~party checkStart, don't schedule another check self.notify.debug("not rescheduling self._checkForPartiesStarting") - def _sanityCheckParties(self, task): + def _sanityCheckParties(self, task): """ Called every 60 minutes to check the database for started but never finished parties """ self.notify.debug( "_sanityCheckParties :..." ) self.forceFinishedForStarted() @@ -841,7 +841,7 @@ def forceNeverStartedForCanStart(self): hostId = info['hostId'] if self.isOnline(hostId): status = PartyGlobals.PartyStatus.NeverStarted - self.sendNewPartyStatus(hostId, partyId, status) + self.sendNewPartyStatus(hostId, partyId, status) def sendNewPartyStatus(self, avatarId, partyId, newStatus): """Tell a toon a party status has changed.""" @@ -852,11 +852,11 @@ def sendNewPartyStatus(self, avatarId, partyId, newStatus): avatarId, [partyId, newStatus], ) - + def toonHasEnteredPartyAiToUd(self, hostId): """ This gets called when a toon enters a party. """ DistributedPartyManagerUD.notify.debug("toonHasEnteredPartyAiToUd : someone entered hostIds %s party"%hostId) - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: self.hostAvIdToAllPartiesInfo[hostId][3] += 1 if self.hostAvIdToAllPartiesInfo[hostId][3] >= 0: self.sendUpdateToAllAis("updateToPublicPartyCountUdToAllAi", [hostId, self.hostAvIdToAllPartiesInfo[hostId][3]]) @@ -864,14 +864,14 @@ def toonHasEnteredPartyAiToUd(self, hostId): def toonHasExitedPartyAiToUd(self, hostId): """ This gets called when a toon exits a party. """ DistributedPartyManagerUD.notify.debug("toonHasExitedPartyAiToUd : someone exited hostIds %s party"%hostId) - if self.hostAvIdToAllPartiesInfo.has_key(hostId): + if hostId in self.hostAvIdToAllPartiesInfo: self.hostAvIdToAllPartiesInfo[hostId][3] -= 1 if self.hostAvIdToAllPartiesInfo[hostId][3] >= 0: self.sendUpdateToAllAis("updateToPublicPartyCountUdToAllAi", [hostId, self.hostAvIdToAllPartiesInfo[hostId][3]]) - + def partyHasStartedAiToUd(self, pmDoId, partyId, shardId, zoneId, hostName): """ - This gets called by an AI when a party is started, updates + This gets called by an AI when a party is started, updates hostAvIdToAllPartiesInfo for use by other AIs and their public party gates. """ @@ -887,7 +887,7 @@ def partyHasStartedAiToUd(self, pmDoId, partyId, shardId, zoneId, hostName): activityIds.append(partyInfo["activities"][i]) # we can not rely on globalClock.getRealTime() as that depends on when the process is started # and will definitely be different between the uberdog and AI - actualStartTime = long(time.time()) + actualStartTime = int(time.time()) self.hostAvIdToAllPartiesInfo[partyInfo["hostId"]] = [shardId, zoneId, partyInfo["isPrivate"], 0, hostName, activityIds,actualStartTime, partyId] self.sendUpdateToAllAis("updateToPublicPartyInfoUdToAllAi", [partyInfo["hostId"], actualStartTime, shardId, zoneId, partyInfo["isPrivate"], 0, hostName, activityIds, partyId]) self.informInviteesPartyHasStarted(partyId) @@ -898,7 +898,7 @@ def sendUpdateToAllAis(self, message, args): self.air.send(dg) def sendTestMsg(self): - """Send a test msg to all AIs to prove it can be done.""" + """Send a test msg to all AIs to prove it can be done.""" fieldName = 'testMsgUdToAllAi' args = [] dg = self.dclass.aiFormatUpdateMsgType( @@ -924,15 +924,15 @@ def avatarOnlinePlusAccountInfo(self,avatarId,accountId,playerName, def avatarOffline(self, avatarId): """Handle otp_server telling us an avatar is offline.""" self.markAvatarOffline(avatarId) - + def markAvatarOnline(self, avatarId): """Mark an avatar as online.""" - if self.isAvatarOnline.has_key(avatarId): + if avatarId in self.isAvatarOnline: assert self.notify.debug( "\n\nWe got a duplicate avatar online notice %s"%(avatarId,)) - if avatarId and not self.isAvatarOnline.has_key(avatarId): + if avatarId and avatarId not in self.isAvatarOnline: self.isAvatarOnline[avatarId]=True def markAvatarOffline(self, avatarId): @@ -1000,8 +1000,8 @@ def handleInterruptedPartiesOnShard(self, shardId): # tell all AI servers the party has finished since it was interrupted for hostId in interruptedHostIds: self.sendUpdateToAllAis("partyHasFinishedUdToAllAi", [hostId]) - del self.hostAvIdToAllPartiesInfo[hostId] - + del self.hostAvIdToAllPartiesInfo[hostId] + def partyManagerAIStartingUp(self, pmDoId, shardId): """An AI server is starting up (or restarting) , send him all public parties running.""" @@ -1011,7 +1011,7 @@ def partyManagerAIStartingUp(self, pmDoId, shardId): # we still need this check just in case uberdog was accidentally shut down # before the AI servers self.handleInterruptedPartiesOnShard(shardId) - + for hostId in self.hostAvIdToAllPartiesInfo: publicInfo = self.hostAvIdToAllPartiesInfo[hostId] numToons = publicInfo[3] @@ -1031,19 +1031,19 @@ def partyManagerAIGoingDown(self, pmDoId, shardId): # shard have been interrupted assert self.notify.debugStateCall(self) self.handleInterruptedPartiesOnShard(shardId) - - + + def updateAllPartyInfoToUd(self, hostId, startTime, shardId, zoneId, isPrivate, numberOfGuests, \ hostName, activityIds, partyId): """Handle an AI server telling us all the information about a party running on him.""" if hostId in self.hostAvIdToAllPartiesInfo: self.notify.warning("hostId %s already in self.hostAvIdToAllPartiesInfo %s" % ( hostId, self.hostAvIdToAllPartiesInfo[hostId])) - + self.hostAvIdToAllPartiesInfo[hostId] = [ shardId, zoneId, isPrivate, numberOfGuests, hostName, activityIds, startTime, partyId] - + def informInviteesPartyHasStarted(self, partyId): """The host has started his party, tell the invitees.""" # WARNING since this is not sent through a ram field, if the toon switches @@ -1055,7 +1055,7 @@ def informInviteesPartyHasStarted(self, partyId): avId = info['guestId'] if self.isOnline(avId): self.sendNewPartyStatus( avId, partyId, PartyGlobals.PartyStatus.Started) - + def _getPartyInfoSize(self, partyInfo): """ Calculate the size of the party info and return the value in bytes. @@ -1081,26 +1081,25 @@ def _getPartyInfoSize(self, partyInfo): }; So the basic party info size is: partyInfoSize = (27 + 4*numberOfActivities + 4*numberOfDecors) bytes - + Note: We assume that the party info format in toon.dc won't change. - Please change this method and calculation if the format changes. + Please change this method and calculation if the format changes. """ activities = partyInfo[14] decors = partyInfo[15] basePartySize = 27 numActivities = 0 numDecors = 0 - + if (type(activities) == type([])): numActivities = len(activities) else: self.notify.warning("partyId=%s has an incorrect partyInfo format for activities" %str(partyInfo[0])) - + if (type(decors) == type([])): numDecors = len(decors) else: self.notify.warning("partyId=%s has an incorrect partyInfo format for decors" %str(partyInfo[0])) - + partyInfoSize = basePartySize + (4 * numActivities) + (4 * numDecors) return partyInfoSize - \ No newline at end of file diff --git a/toontown/src/uberdog/LRUlist.py b/toontown/src/uberdog/LRUlist.py index d9fd5b5c..c956c0f1 100644 --- a/toontown/src/uberdog/LRUlist.py +++ b/toontown/src/uberdog/LRUlist.py @@ -43,7 +43,7 @@ def removeData(self, indexKey): def getData(self, indexKey): - if self.dataDictionary.has_key(indexKey): + if indexKey in self.dataDictionary: #if a datum exists _returnData = self.dataDictionary[indexKey] self.removeData(indexKey) diff --git a/toontown/src/uberdog/PartiesUdLog.py b/toontown/src/uberdog/PartiesUdLog.py index c49a51e2..59ddc2ea 100644 --- a/toontown/src/uberdog/PartiesUdLog.py +++ b/toontown/src/uberdog/PartiesUdLog.py @@ -1,7 +1,7 @@ import sys import time import socket -import Queue +import queue from toontown.uberdog import PartiesUdConfig class partiesUdLog: @@ -10,7 +10,7 @@ def __init__(self,name,clHost=None,clPort=6060): self.clHost = clHost self.clPort = clPort - self.inMemLog = Queue.Queue() + self.inMemLog = queue.Queue() if clHost: # init UDP stuff @@ -22,13 +22,13 @@ def timeString(self): def output(self,level,msg): str = "%s %s(%s): %s"%(self.timeString(),self.name,level,msg) - print str + print(str) self.memLog(str) sys.stdout.flush() def chatoutput(self,msg): str = "%s %s(chat): %s"%(self.timeString(),self.name,msg) - print str + print(str) self.memLog(str) sys.stdout.flush() @@ -39,7 +39,7 @@ def memLog(self,str): def getMemLog(self): res = "" - for i in xrange(self.inMemLog.qsize()): + for i in range(self.inMemLog.qsize()): s = self.inMemLog.get() res += s + "\n" self.inMemLog.put(s) diff --git a/toontown/src/uberdog/ServiceStart.py b/toontown/src/uberdog/ServiceStart.py index 6731b80a..e09ed8ac 100644 --- a/toontown/src/uberdog/ServiceStart.py +++ b/toontown/src/uberdog/ServiceStart.py @@ -1,13 +1,13 @@ """ Start the Toontown UberDog (Uber Distributed Object Globals server). """ -import __builtin__ +import builtins from direct.task.Task import Task class game: name = "uberDog" process = "server" -__builtin__.game = game() +builtins.game = game() import time import os @@ -51,14 +51,14 @@ class game: 'mysqlhost=', 'crDbName=', ]) -except Exception, e: - print e - print helpString +except Exception as e: + print(e) + print(helpString) sys.exit(1) # Only four of the items are required if len(opts) < 4: - print helpString + print(helpString) sys.exit(1) # Default values @@ -129,8 +129,8 @@ class game: elif (flag == '--crDbName'): crDbName = value else: - print "Error: Illegal option: " + flag - print helpString + print("Error: Illegal option: " + flag) + print(helpString) sys.exit(1) # date_hour_sequence.log will be added to the logfile name by RotatingLog(): @@ -168,10 +168,10 @@ def flush(self): # We prefer writing the date on the same line as the starting message, # so we can more easily grep for a restart on a particular date in the # log files. -print "\n\nStarting Uberdog on %s port %s. %s %s" % \ - (uber.mdip, uber.mdport, time.asctime(time.localtime(time.time())), time.tzname[0]) +print("\n\nStarting Uberdog on %s port %s. %s %s" % \ + (uber.mdip, uber.mdport, time.asctime(time.localtime(time.time())), time.tzname[0])) -print "Initializing the Toontown UberDog (Uber Distributed Object Globals server)..." +print("Initializing the Toontown UberDog (Uber Distributed Object Globals server)...") from toontown.uberdog.ToontownUberDog import ToontownUberDog from direct.showbase.PythonUtil import * diff --git a/toontown/src/uberdog/Start.py b/toontown/src/uberdog/Start.py index 5141f84c..90690c44 100644 --- a/toontown/src/uberdog/Start.py +++ b/toontown/src/uberdog/Start.py @@ -2,24 +2,18 @@ Start the Toontown UberDog (Uber Distributed Object Globals server). """ -import __builtin__ +import builtins from direct.task.Task import Task class game: name = "uberDog" process = "server" -__builtin__.game = game() +builtins.game = game() import time import os import sys -# Initialize ihooks importer On the production servers, we run genPyCode -n -# meaning no squeeze, so nobody else does this. When we squeeze, the -# unpacker does this for us and it does not hurt to do in either case. -import ihooks -ihooks.install() - if os.getenv('TTMODELS'): from pandac.PandaModules import getModelPath, Filename # In the publish environment, TTMODELS won't be on the model @@ -34,12 +28,12 @@ class game: from toontown.uberdog.ToontownUberDog import ToontownUberDog from toontown.uberdog import PartiesUdConfig -print "Initializing the Toontown UberDog (Uber Distributed Object Globals server)..." +print("Initializing the Toontown UberDog (Uber Distributed Object Globals server)...") -uber.mdip = uber.config.GetString("msg-director-ip", "localhost") +uber.mdip = uber.config.GetString("msg-director-ip", "127.0.0.1") uber.mdport = uber.config.GetInt("msg-director-port", 6666) -uber.esip = uber.config.GetString("event-server-ip", "localhost") +uber.esip = uber.config.GetString("event-server-ip", "127.0.0.1") uber.esport = uber.config.GetInt("event-server-port", 4343) stateServerId = uber.config.GetInt("state-server-id", 20100000) @@ -52,7 +46,7 @@ class game: uber.sbNSHost = uber.config.GetString("sb-host","") uber.sbNSPort = uber.config.GetInt("sb-port",6053) uber.sbListenPort = 6060 -uber.clHost = "localhost" +uber.clHost = "127.0.0.1" uber.clPort = 9090 uber.allowUnfilteredChat = uber.config.GetInt("allow-unfiltered-chat",0) uber.bwDictPath = "" diff --git a/toontown/src/uberdog/ToontownUberDog.py b/toontown/src/uberdog/ToontownUberDog.py index e9507a0a..13b286e3 100644 --- a/toontown/src/uberdog/ToontownUberDog.py +++ b/toontown/src/uberdog/ToontownUberDog.py @@ -23,7 +23,7 @@ from toontown.uberdog import TTSpeedchatRelayUD from toontown.uberdog import DistributedInGameNewsMgrUD from toontown.uberdog import DistributedCpuInfoMgrUD - + from otp.uberdog.RejectCode import RejectCode class ToontownUberDog(UberDog): @@ -36,7 +36,7 @@ def __init__( # TODO: The UD needs to know server time, but perhaps this isn't # the place to do this? -SG-SLWP self.toontownTimeManager = ToontownTimeManager.ToontownTimeManager() - self.toontownTimeManager.updateLoginTimes(time.time(), time.time(), globalClock.getRealTime()) + self.toontownTimeManager.updateLoginTimes(time.time(), time.time(), globalClock.getRealTime()) def isManagerFor(name): return len(uber.objectNames) == 0 or name in uber.objectNames @@ -59,65 +59,24 @@ def isManagerFor(name): def createObjects(self): UberDog.createObjects(self) - # Ask for the ObjectServer so we can check the dc hash value + # Ask for the ObjectServer so we can check the dc hash value self.queryObjectAll(self.serverId) if self.isFriendsManager: self.playerFriendsManager = self.generateGlobalObject( OtpDoGlobals.OTP_DO_ID_PLAYER_FRIENDS_MANAGER, "TTPlayerFriendsManager") - - if self.isSpeedchatRelay: - self.speedchatRelay = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_SPEEDCHAT_RELAY, - "TTSpeedchatRelay") - - if self.isGiftingManager: - self.deliveryManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_DELIVERY_MANAGER, - "DistributedDeliveryManager") - + if self.isMailManager: self.mailManager = self.generateGlobalObject( OtpDoGlobals.OTP_DO_ID_TOONTOWN_MAIL_MANAGER, "DistributedMailManager") - if self.isPartyManager: - self.partyManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER, - "DistributedPartyManager") - - if simbase.config.GetBool('want-ddsm', 1): - self.dataStoreManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_TEMP_STORE_MANAGER, - "DistributedDataStoreManager") - if self.isRATManager: self.RATManager = self.generateGlobalObject( OtpDoGlobals.OTP_DO_ID_TOONTOWN_RAT_MANAGER, "RATManager") - if self.isAwardManager: - self.awardManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_AWARD_MANAGER, - "AwardManager") - - if config.GetBool('want-code-redemption', 1): - if self.isCodeRedemptionManager: - self.codeRedemptionManager = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_CODE_REDEMPTION_MANAGER, - "TTCodeRedemptionMgr") - - if self.isInGameNewsMgr: - self.inGameNewsMgr = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_IN_GAME_NEWS_MANAGER, - "DistributedInGameNewsMgr") - - if self.isCpuInfoMgr: - self.cpuInfoMgr = self.generateGlobalObject( - OtpDoGlobals.OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER, - "DistributedCpuInfoMgr") - if self.isRandomSourceManager: self.randomSourceManager = self.generateGlobalObject( OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE, @@ -126,11 +85,11 @@ def createObjects(self): def getDatabaseIdForClassName(self, className): return DatabaseIdFromClassName.get( className, DefaultDatabaseChannelId) - + if __debug__: def status(self): if self.isGiftingManager: - print "deliveryManager is", self.deliveryManager + print("deliveryManager is", self.deliveryManager) if self.isFriendsManager: - print "playerFriendsManager is ",self.playerFriendsManager - + print("playerFriendsManager is ",self.playerFriendsManager) + diff --git a/toontown/src/uberdog/WipeTtDbs.py b/toontown/src/uberdog/WipeTtDbs.py index 87044cf7..395cd6af 100644 --- a/toontown/src/uberdog/WipeTtDbs.py +++ b/toontown/src/uberdog/WipeTtDbs.py @@ -16,7 +16,7 @@ password = config.GetString("mysql-passwd") if username == "" or password == "": - print "Username or password not found, check your config.prc!" + print("Username or password not found, check your config.prc!") sys.exit(2) @@ -25,17 +25,17 @@ user=username, passwd=password) -print "Connected to MySQL at localhost." +print("Connected to MySQL at localhost.") cursor = db.cursor() def dropdb(dbname): try: - print "Dropping database %s:" % dbname + print("Dropping database %s:" % dbname) cursor.execute("DROP DATABASE %s"%dbname) - print " Success!" - except Exception,e: - print " Failed: %s" % e + print(" Success!") + except Exception as e: + print(" Failed: %s" % e) if language == 'castillian': ttDbName = "es_toontownTopDb" diff --git a/toontown/src/uberdog/ttInviteDb.py b/toontown/src/uberdog/ttInviteDb.py index 297d68f2..23542170 100644 --- a/toontown/src/uberdog/ttInviteDb.py +++ b/toontown/src/uberdog/ttInviteDb.py @@ -5,7 +5,6 @@ import datetime import MySQLdb import MySQLdb.constants.CR -import _mysql_exceptions from direct.directnotify import DirectNotifyGlobal from toontown.uberdog import ttSQL from toontown.parties import PartyGlobals @@ -17,7 +16,7 @@ class ttInviteDb: """Based on sbMaildb.py in $OTP/src/switchboard.""" notify = DirectNotifyGlobal.directNotify.newCategory("ttInviteDb") - + def __init__(self,host,port,user,passwd,db): self.sqlAvailable = True self.host = host @@ -32,7 +31,7 @@ def __init__(self,host,port,user,passwd,db): user=user, passwd=passwd, ) - except _mysql_exceptions.OperationalError,e: + except MySQLdb.OperationalError as e: self.notify.warning("Failed to connect to MySQL db=%s at %s:%d. ttInvitedb DB is disabled."%(db,host,port)) self.notify.warning("Error detail: %s"%str(e)) self.sqlAvailable = False @@ -46,11 +45,11 @@ def __init__(self,host,port,user,passwd,db): cursor.execute("CREATE DATABASE `%s`"%self.dbname) if __debug__: self.notify.info("Database '%s' did not exist, created a new one!"%self.dbname) - except _mysql_exceptions.ProgrammingError, e: + except MySQLdb.ProgrammingError as e: # self.notify.info('%s' % str(e)) pass - except _mysql_exceptions.OperationalError, e: - self.notify.info('%s' % str(e)) + except MySQLdb.OperationalError as e: + self.notify.info('%s' % str(e)) pass cursor.execute("USE `%s`"%self.dbname) @@ -70,7 +69,7 @@ def __init__(self,host,port,user,passwd,db): CREATE TABLE ttInviteStatus( statusId TINYINT NOT NULL, description VARCHAR(20) NOT NULL, - lastupdate TIMESTAMP NOT NULL + lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (statusId), @@ -80,19 +79,19 @@ def __init__(self,host,port,user,passwd,db): DEFAULT CHARSET=utf8; """) # this ensure that the table values come directly from PartyGlobals.InviteStatus - for index in xrange(len(PartyGlobals.InviteStatus)): + for index in range(len(PartyGlobals.InviteStatus)): cursor.execute(\ "INSERT INTO ttInviteStatus(statusId, description) VALUES (%d, '%s')" % (index, PartyGlobals.InviteStatus.getString(index))) - - # TODO is it better to do a show tables than to do a try create Table except block? + + # TODO is it better to do a show tables than to do a try create Table except block? cursor.execute(""" CREATE TABLE ttInvite ( - inviteId BIGINT NOT NULL AUTO_INCREMENT, + inviteId BIGINT NOT NULL AUTO_INCREMENT, partyId BIGINT NOT NULL, guestId BIGINT NOT NULL, statusId TINYINT NOT NULL DEFAULT 0, - lastupdate TIMESTAMP NOT NULL + lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -100,14 +99,14 @@ def __init__(self,host,port,user,passwd,db): INDEX idx_guestId (guestId), INDEX idx_partyId(partyId), FOREIGN KEY (partyId) REFERENCES ttParty(partyId) ON DELETE CASCADE - ) - ENGINE=InnoDB - DEFAULT CHARSET=utf8; + ) + ENGINE=InnoDB + DEFAULT CHARSET=utf8; """) if __debug__: self.notify.info("Table ttInvite did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: - pass + except MySQLdb.OperationalError as e: + pass try: cursor = self.db.cursor() @@ -143,7 +142,7 @@ def getInvites(self, avatarId,isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getInvites") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -151,8 +150,8 @@ def getInvites(self, avatarId,isRetry=False): res = cursor.fetchall() self.notify.debug("Select was successful in ttInvitedb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on getInvites retry, giving up:\n%s" % str(e)) return () @@ -163,7 +162,7 @@ def getInvites(self, avatarId,isRetry=False): self.notify.warning("Unknown error in getInvites, retrying:\n%s" % str(e)) self.reconnect() return self.getInvites(avatarId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getInvites, giving up:\n%s" % str(e)) return () @@ -179,9 +178,9 @@ def putInvite(self, partyId, inviteeId,isRetry=False): cursor.execute(ttSQL.putInviteINSERT, (partyId, inviteeId)) - self.db.commit() + self.db.commit() - except _mysql_exceptions.OperationalError,e: + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on putInvite retry, giving up:\n%s" % str(e)) return @@ -192,7 +191,7 @@ def putInvite(self, partyId, inviteeId,isRetry=False): self.notify.warning("Unknown error in putInvite, retrying:\n%s" % str(e)) self.reconnect() self.putInvite(partyId, inviteeId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in putInvite, giving up:\n%s" % str(e)) return @@ -211,8 +210,8 @@ def deleteInviteByParty(self,partyId,isRetry=False): self.notify.warning("%d tried to delete party %d which didn't exist or wasn't his!" % (accountId,messageId)) self.db.commit() - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error in deleteInviteByParty retry, giving up:\n%s" % str(e)) return @@ -223,15 +222,15 @@ def deleteInviteByParty(self,partyId,isRetry=False): self.notify.warning("Unnown error in deleteInviteByParty, retrying:\n%s" % str(e)) self.reconnect() self.deleteMail(accountId,messageId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in deleteInviteByParty, giving up:\n%s" % str(e)) - return + return def getReplies(self,partyId,isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getParty") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -239,8 +238,8 @@ def getReplies(self,partyId,isRetry=False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttInvitedb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on getReplies retry, giving up:\n%s" % str(e)) return () @@ -251,7 +250,7 @@ def getReplies(self,partyId,isRetry=False): self.notify.warning("Unknown error in getReplies, retrying:\n%s" % str(e)) self.reconnect() return self.getReplies(partyId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getReplies, giving up:\n%s" % str(e)) return () @@ -267,7 +266,7 @@ def getOneInvite(self, inviteKey, isRetry = False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getParty") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -275,8 +274,8 @@ def getOneInvite(self, inviteKey, isRetry = False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttInvitedb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on getOneInvite retry, giving up:\n%s" % str(e)) return () @@ -287,7 +286,7 @@ def getOneInvite(self, inviteKey, isRetry = False): self.notify.warning("Unknown error in getOneInvite, retrying:\n%s" % str(e)) self.reconnect() return self.getOneInvite(partyId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getOneInvite, giving up:\n%s" % str(e)) return () @@ -295,7 +294,7 @@ def updateInvite(self, inviteKey, newStatus, isRetry = False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getParty") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -304,8 +303,8 @@ def updateInvite(self, inviteKey, newStatus, isRetry = False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttInvitedb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on updateInvite retry, giving up:\n%s" % str(e)) return () @@ -316,16 +315,16 @@ def updateInvite(self, inviteKey, newStatus, isRetry = False): self.notify.warning("Unknown error in updateInvite, retrying:\n%s" % str(e)) self.reconnect() return self.updateInvite( newStatus, inviteKey, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in updateInvite, giving up:\n%s" % str(e)) - return () - + return () + def getInviteesOfParty(self, inviteKey, isRetry = False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getParty") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -333,8 +332,8 @@ def getInviteesOfParty(self, inviteKey, isRetry = False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttInvitedb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on getInviteesOfParty retry, giving up:\n%s" % str(e)) return () @@ -345,6 +344,6 @@ def getInviteesOfParty(self, inviteKey, isRetry = False): self.notify.warning("Unknown error in getInviteesOfParty, retrying:\n%s" % str(e)) self.reconnect() return self.getInviteesOfParty(partyId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getInviteesOfParty, giving up:\n%s" % str(e)) return () diff --git a/toontown/src/uberdog/ttMaildb.py b/toontown/src/uberdog/ttMaildb.py index 9dabad60..411e9fdf 100644 --- a/toontown/src/uberdog/ttMaildb.py +++ b/toontown/src/uberdog/ttMaildb.py @@ -5,7 +5,6 @@ import datetime import MySQLdb import MySQLdb.constants.CR -import _mysql_exceptions from direct.directnotify import DirectNotifyGlobal from toontown.uberdog import ttSQL @@ -18,7 +17,7 @@ class ttMaildb: """Based on sbMaildb.py in $OTP/src/switchboard.""" notify = DirectNotifyGlobal.directNotify.newCategory("ttMaildb") - + def __init__(self,host,port,user,passwd,db): self.sqlAvailable = True self.host = host @@ -33,7 +32,7 @@ def __init__(self,host,port,user,passwd,db): user=user, passwd=passwd, ) - except _mysql_exceptions.OperationalError,e: + except MySQLdb.OperationalError as e: self.notify.warning("Failed to connect to MySQL db=%s at %s:%d. ttMaildb DB is disabled."%(db,host,port)) self.notify.warning("Error detail: %s"%str(e)) self.sqlAvailable = False @@ -47,11 +46,11 @@ def __init__(self,host,port,user,passwd,db): cursor.execute("CREATE DATABASE `%s`"%self.dbname) if __debug__: self.notify.info("Database '%s' did not exist, created a new one!"%self.dbname) - except _mysql_exceptions.ProgrammingError, e: + except MySQLdb.ProgrammingError as e: # self.notify.info('%s' % str(e)) pass - except _mysql_exceptions.OperationalError, e: - self.notify.info('%s' % str(e)) + except MySQLdb.OperationalError as e: + self.notify.info('%s' % str(e)) pass cursor.execute("USE `%s`"%self.dbname) @@ -64,22 +63,22 @@ def __init__(self,host,port,user,passwd,db): recipientId BIGINT NOT NULL, senderId BIGINT NOT NULL, message TEXT NOT NULL, - lastupdate TIMESTAMP NOT NULL + lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dateSent TIMESTAMP NOT NULL default '0000-00-00 00:00:00', readFlag BOOLEAN DEFAULT FALSE, PRIMARY KEY (messageId), INDEX idx_recipientId (recipientId) - ) - ENGINE=InnoDB - DEFAULT CHARSET=utf8; + ) + ENGINE=InnoDB + DEFAULT CHARSET=utf8; """) if __debug__: self.notify.info("Table ttrecipientmail did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: - pass + except MySQLdb.OperationalError as e: + pass try: cursor = self.db.cursor() @@ -112,7 +111,7 @@ def getMail(self,recipientId,isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getMail") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -120,8 +119,8 @@ def getMail(self,recipientId,isRetry=False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on getMail retry, giving up:\n%s" % str(e)) return () @@ -132,7 +131,7 @@ def getMail(self,recipientId,isRetry=False): self.notify.warning("Unknown error in getMail, retrying:\n%s" % str(e)) self.reconnect() return self.getMail(recipientId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getMail, giving up:\n%s" % str(e)) return () @@ -148,7 +147,7 @@ def putMail(self,recipientId,senderId,message,isRetry=False): countcursor.execute(ttSQL.getMailSELECT,(recipientId,)) if countcursor.rowcount >= sbConfig.mailStoreMessageLimit: self.notify.debug("%d's mailbox is full! Can't fit message from %d." %(recipientId,senderId)) - return + return cursor = MySQLdb.cursors.DictCursor(self.db) @@ -156,7 +155,7 @@ def putMail(self,recipientId,senderId,message,isRetry=False): (recipientId,senderId,message)) self.db.commit() - except _mysql_exceptions.OperationalError,e: + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error on putMail retry, giving up:\n%s" % str(e)) return @@ -167,7 +166,7 @@ def putMail(self,recipientId,senderId,message,isRetry=False): self.notify.warning("Unknown error in putMail, retrying:\n%s" % str(e)) self.reconnect() self.putMail(recipientId,senderId,message,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in putMail, giving up:\n%s" % str(e)) return @@ -186,8 +185,8 @@ def deleteMail(self,accountId,messageId,isRetry=False): self.notify.warning("%d tried to delete message %d which didn't exist or wasn't his!" % (accountId,messageId)) self.db.commit() - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry == True: self.notify.warning("Error in deleteMail retry, giving up:\n%s" % str(e)) return @@ -198,9 +197,9 @@ def deleteMail(self,accountId,messageId,isRetry=False): self.notify.warning("Unnown error in deleteMail, retrying:\n%s" % str(e)) self.reconnect() self.deleteMail(accountId,messageId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in deleteMail, giving up:\n%s" % str(e)) - return + return def dumpMailTable(self): @@ -210,4 +209,4 @@ def dumpMailTable(self): return cursor.fetchall() - + diff --git a/toontown/src/uberdog/ttPartyDb.py b/toontown/src/uberdog/ttPartyDb.py index da6e135f..f1abc6e8 100644 --- a/toontown/src/uberdog/ttPartyDb.py +++ b/toontown/src/uberdog/ttPartyDb.py @@ -5,7 +5,6 @@ import datetime import MySQLdb import MySQLdb.constants.CR -import _mysql_exceptions from direct.directnotify import DirectNotifyGlobal from toontown.uberdog import ttSQL from toontown.parties import PartyGlobals @@ -18,7 +17,7 @@ class ttPartyDb: """Based on sbMaildb.py in $OTP/src/switchboard.""" notify = DirectNotifyGlobal.directNotify.newCategory("ttPartyDb") - + def __init__(self,host,port,user,passwd,db): self.sqlAvailable = True self.host = host @@ -33,7 +32,7 @@ def __init__(self,host,port,user,passwd,db): user=user, passwd=passwd, ) - except _mysql_exceptions.OperationalError,e: + except MySQLdb.OperationalError as e: self.notify.warning("Failed to connect to MySQL db=%s at %s:%d. ttMaildb DB is disabled."%(db,host,port)) self.notify.warning("Error detail: %s"%str(e)) self.sqlAvailable = False @@ -47,11 +46,11 @@ def __init__(self,host,port,user,passwd,db): cursor.execute("CREATE DATABASE `%s`"%self.dbname) if __debug__: ttPartyDb.notify.info("Database '%s' did not exist, created a new one!"%self.dbname) - except _mysql_exceptions.ProgrammingError, e: + except MySQLdb.ProgrammingError as e: # ttPartyDb.notify.info('%s' % str(e)) pass - except _mysql_exceptions.OperationalError, e: - ttPartyDb.notify.info('%s' % str(e)) + except MySQLdb.OperationalError as e: + ttPartyDb.notify.info('%s' % str(e)) pass cursor.execute("USE `%s`"%self.dbname) @@ -71,7 +70,7 @@ def __init__(self,host,port,user,passwd,db): CREATE TABLE ttPartyStatus( statusId TINYINT NOT NULL, description VARCHAR(20) NOT NULL, - lastupdate TIMESTAMP NOT NULL + lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (statusId), @@ -81,7 +80,7 @@ def __init__(self,host,port,user,passwd,db): DEFAULT CHARSET=utf8; """) # this ensure that the table values come directly from PartyGlobals.PartyStatus - for index in xrange(len(PartyGlobals.PartyStatus)): + for index in range(len(PartyGlobals.PartyStatus)): cursor.execute(\ "INSERT INTO ttPartyStatus(statusId, description) VALUES (%d, '%s')" % (index, PartyGlobals.PartyStatus.getString(index))) @@ -99,16 +98,16 @@ def __init__(self,host,port,user,passwd,db): decorations VARBINARY(252), statusId TINYINT default 0, creationTime TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', - lastupdate TIMESTAMP NOT NULL + lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (partyId), INDEX idx_hostId (hostId), INDEX idx_statusId(statusId) - ) - ENGINE=InnoDB - DEFAULT CHARSET=utf8; + ) + ENGINE=InnoDB + DEFAULT CHARSET=utf8; """) @@ -127,8 +126,8 @@ def __init__(self,host,port,user,passwd,db): # TOTAL = 539 bytes if __debug__: ttPartyDb.notify.info("Table ttParty did not exist, created a new one!") - except _mysql_exceptions.OperationalError,e: - pass + except MySQLdb.OperationalError as e: + pass try: cursor = self.db.cursor() @@ -164,7 +163,7 @@ def getParty(self, partyId, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getParty") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -172,8 +171,8 @@ def getParty(self, partyId, isRetry=False): res = cursor.fetchall() self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getParty retry. Giving up:\n%s" % str(e)) return () @@ -184,7 +183,7 @@ def getParty(self, partyId, isRetry=False): self.notify.warning("Unknown error in getParty, retrying:\n%s" % str(e)) self.reconnect() return self.getParty(partyId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getParty, giving up:\n%s" % str(e)) return () @@ -192,7 +191,7 @@ def getParty(self, partyId, isRetry=False): def putParty(self, hostId, startTime, endTime, isPrivate, inviteTheme, activities, decorations, status, isRetry=False): """ Returns False if the operation failed for any reason. - + isRetry indicates whether this attempt is a retry or not. """ self.notify.debug("putParty( hostId=%s, startTime=%s, endTime=%s, isPrivate=%s, inviteTheme=%s, ... status=%s, isRetry=%s )" %(hostId, startTime, endTime, isPrivate, InviteTheme.getString(inviteTheme), PartyStatus.getString(status), isRetry) ) @@ -224,8 +223,8 @@ def putParty(self, hostId, startTime, endTime, isPrivate, inviteTheme, activitie cursor.execute(ttSQL.putPartyINSERT, (hostId, startTime, endTime, isPrivate, inviteTheme, activityStr, decorStr, status)) - self.db.commit() - except _mysql_exceptions.OperationalError,e: + self.db.commit() + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("putParty failed with error '%s' on retry. Giving up." % str(e)) return False @@ -236,7 +235,7 @@ def putParty(self, hostId, startTime, endTime, isPrivate, inviteTheme, activitie self.notify.warning("putParty failed with error '%s'. Retrying." % str(e)) self.reconnect() return self.putParty(hostId, startTime, endTime, isPrivate, inviteTheme, activityStr, decorStr, status, True) - except Exception,e: + except Exception as e: self.notify.warning("putParty failed with error '%s'. Giving up." % str(e)) return False else: @@ -259,8 +258,8 @@ def deleteParty(self,partyId,isRetry=False): self.notify.warning("%d tried to delete party %d which didn't exist or wasn't his!" % (accountId,messageId)) self.db.commit() - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error in deleteParty retry, giving up:\n%s" % str(e)) return @@ -271,9 +270,9 @@ def deleteParty(self,partyId,isRetry=False): self.notify.warning("Unnown error in deleteParty, retrying:\n%s" % str(e)) self.reconnect() self.deleteParty(partyId,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in deleteParty, giving up:\n%s" % str(e)) - return + return def dumpPartyTable(self): @@ -300,8 +299,8 @@ def getPartiesAvailableToStart(self, currentTime, isRetry=False): # Ok, these parties can start, go ahead and set their status to CanStart self._setPartyStatusToCanStart(res) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getPartiesAvailableToStart retry, giving up:\n%s" % str(e)) return () @@ -312,7 +311,7 @@ def getPartiesAvailableToStart(self, currentTime, isRetry=False): self.notify.warning("Unknown error in getPartiesAvailableToStart, retrying:\n%s" % str(e)) self.reconnect() return self.getPartiesAvailableToStart(currentTime,True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getPartiesAvailableToStart, giving up:\n%s" % str(e)) return () @@ -325,25 +324,25 @@ def _setPartyStatusToCanStart(self, tupleOfResultDictionaries): def getPartiesOfHost(self, hostId, sortedByStartTime = False, isRetry=False): """ Returns a tuple, which could be empty. - + isRetry indicates whether this attempt is a retry or not. """ if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getPartiesOfHost") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: - cursor.execute("USE `%s`"%self.dbname) + cursor.execute("USE `%s`"%self.dbname) if sortedByStartTime: - cursor.execute(ttSQL.getPartyOfHostSortedSELECT,(hostId,)) + cursor.execute(ttSQL.getPartyOfHostSortedSELECT,(hostId,)) else: cursor.execute(ttSQL.getPartyOfHostSELECT,(hostId,)) res = cursor.fetchall() #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getPartiesOfHost retry, giving up:\n%s" % str(e)) return () @@ -354,7 +353,7 @@ def getPartiesOfHost(self, hostId, sortedByStartTime = False, isRetry=False): self.notify.warning("Unknown error in getPartiesOfHost, retrying:\n%s" % str(e)) self.reconnect() return self.getPartiesOfHost(hostId, sortedByStartTime, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getPartiesOfHost, giving up:\n%s" % str(e)) return () @@ -366,15 +365,15 @@ def getPartiesOfHostThatCanStart(self, hostId, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling getPartiesOfHostThatCanStart") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: - cursor.execute("USE `%s`"%self.dbname) + cursor.execute("USE `%s`"%self.dbname) cursor.execute(ttSQL.getPartyOfHostMatchingStatusSELECT,(hostId,PartyGlobals.PartyStatus.CanStart)) res = cursor.fetchall() return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getPartiesOfHostThatCanStart retry, giving up:\n%s" % str(e)) return () @@ -385,7 +384,7 @@ def getPartiesOfHostThatCanStart(self, hostId, isRetry=False): self.notify.warning("Unknown error in getPartiesOfHostThatCanStart, retrying:\n%s" % str(e)) self.reconnect() return self.getPartiesOfHostThatCanStart(hostId, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getPartiesOfHostThatCanStart, giving up:\n%s" % str(e)) return () @@ -396,7 +395,7 @@ def changePrivate(self, partyId, newPrivateStatus, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling changePrivate") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -405,8 +404,8 @@ def changePrivate(self, partyId, newPrivateStatus, isRetry=False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on changePrivate retry, giving up:\n%s" % str(e)) return () @@ -417,9 +416,9 @@ def changePrivate(self, partyId, newPrivateStatus, isRetry=False): self.notify.warning("Unknown error in changePrivate, retrying:\n%s" % str(e)) self.reconnect() return self.changePrivate( newPrivateStatus, partyId, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in changePrivate, giving up:\n%s" % str(e)) - return () + return () def changePartyStatus(self, partyId, newPartyStatus, isRetry=False): @@ -429,7 +428,7 @@ def changePartyStatus(self, partyId, newPartyStatus, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling changePartyStatus") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -438,8 +437,8 @@ def changePartyStatus(self, partyId, newPartyStatus, isRetry=False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on changePartyStatus retry, giving up:\n%s" % str(e)) return () @@ -450,7 +449,7 @@ def changePartyStatus(self, partyId, newPartyStatus, isRetry=False): self.notify.warning("Unknown error in changePartyStatus, retrying:\n%s" % str(e)) self.reconnect() return self.changePartyStatus( newPartyStatus, partyId, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in changePartyStatus, giving up:\n%s" % str(e)) return () @@ -458,7 +457,7 @@ def convertListToSQLString(self, partyIds): """Convert a list of integers to a string sql recognizes.""" # string version of partyIds is so close to what we need, but it adds the L inClause = "(" - for index in xrange(len(partyIds)): + for index in range(len(partyIds)): inClause += "%d" % partyIds[index] if index < len(partyIds) - 1: inClause += "," @@ -478,12 +477,12 @@ def getMultipleParties(self, partyIds, sortByStartTime = False, isRetry=False): if not partyIds: self.notify.debug("empty list in partyIds for getMultipleParties") return() - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) inClause = self.convertListToSQLString(partyIds) - + if sortByStartTime: cursor.execute(ttSQL.getMultiplePartiesSortedSELECT % inClause) else: @@ -491,8 +490,8 @@ def getMultipleParties(self, partyIds, sortByStartTime = False, isRetry=False): res = cursor.fetchall() self.notify.debug("Select was successful in getMultipleParties, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getMultipleParties retry. Giving up:\n%s" % str(e)) return () @@ -503,7 +502,7 @@ def getMultipleParties(self, partyIds, sortByStartTime = False, isRetry=False): self.notify.warning("Unknown error in getMultipleParties, retrying:\n%s" % str(e)) self.reconnect() return self.getMultipleParties(partyIds,sortByStartTime, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getMultipleParties, giving up:\n%s" % str(e)) return () @@ -518,7 +517,7 @@ def getPrioritizedParties(self, partyIds, thresholdTime, limit, future, cancelle if not partyIds: self.notify.debug("empty list in partyIds for getCancelledFutureParties") return() - + sqlString = "" if future and cancelled: sqlString = ttSQL.getCancelledFuturePartiesSELECT @@ -528,22 +527,22 @@ def getPrioritizedParties(self, partyIds, thresholdTime, limit, future, cancelle sqlString = ttSQL.getCancelledPastPartiesSELECT else: sqlString = ttSQL.getNonCancelledPastPartiesSELECT - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) inClause = self.convertListToSQLString(partyIds) - + parameters = (inClause, thresholdTime, str(limit)) execStr = sqlString % parameters cursor.execute(execStr) - + res = cursor.fetchall() self.notify.debug("Select was successful in getPrioritizedParties, returning %s" % str(res)) - return res - - except _mysql_exceptions.OperationalError,e: + return res + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getPrioritizedParties retry. Giving up:\n%s" % str(e)) return () @@ -554,10 +553,10 @@ def getPrioritizedParties(self, partyIds, thresholdTime, limit, future, cancelle self.notify.warning("Unknown error in getPrioritizedParties getCancelledFutureParties, retrying:\n%s" % str(e)) self.reconnect() return self.getPrioritizedParties( partyIds, thresholdTime, limit, future, cancelled, isRetry=True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getPrioritizedParties getCancelledFutureParties, giving up:\n%s" % str(e)) return () - + def getHostPrioritizedParties(self, hostId, thresholdTime, limit, future, cancelled, isRetry=False): """Return parties from the database using the criteria specified in future and cancelled.""" @@ -568,7 +567,7 @@ def getHostPrioritizedParties(self, hostId, thresholdTime, limit, future, cancel if not hostId: self.notify.debug("empty list in hostId for getCancelledFutureParties") return() - + sqlString = "" if future and cancelled: sqlString = ttSQL.getHostCancelledFuturePartiesSELECT @@ -578,7 +577,7 @@ def getHostPrioritizedParties(self, hostId, thresholdTime, limit, future, cancel sqlString = ttSQL.getHostCancelledPastPartiesSELECT else: sqlString = ttSQL.getHostNonCancelledPastPartiesSELECT - + cursor = MySQLdb.cursors.DictCursor(self.db) try: @@ -586,12 +585,12 @@ def getHostPrioritizedParties(self, hostId, thresholdTime, limit, future, cancel parameters = (hostId, thresholdTime, str(limit)) execStr = sqlString % parameters cursor.execute(execStr) - + res = cursor.fetchall() self.notify.debug("Select was successful in getHostPrioritizedParties, returning %s" % str(res)) - return res - - except _mysql_exceptions.OperationalError,e: + return res + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on getHostPrioritizedParties retry. Giving up:\n%s" % str(e)) return () @@ -602,10 +601,10 @@ def getHostPrioritizedParties(self, hostId, thresholdTime, limit, future, cancel self.notify.warning("Unknown error in getHostPrioritizedParties getCancelledFutureParties, retrying:\n%s" % str(e)) self.reconnect() return self.getHostPrioritizedParties( hostId, thresholdTime, limit, future, cancelled, isRetry=True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in getHostPrioritizedParties getCancelledFutureParties, giving up:\n%s" % str(e)) return () - + def forceFinishForStarted(self, thresholdTime, isRetry=False): """ isRetry indicates whether this attempt is a retry or not. @@ -614,7 +613,7 @@ def forceFinishForStarted(self, thresholdTime, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling forceFinishForStarted") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -622,11 +621,11 @@ def forceFinishForStarted(self, thresholdTime, isRetry=False): res = cursor.fetchall() cursor.execute(ttSQL.partyForceFinishForStartedUPDATE,(thresholdTime,)) self.db.commit() - + #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on forceFinishForStarted retry, giving up:\n%s" % str(e)) return () @@ -637,7 +636,7 @@ def forceFinishForStarted(self, thresholdTime, isRetry=False): self.notify.warning("Unknown error in forceFinishForStarted, retrying:\n%s" % str(e)) self.reconnect() return self.forceFinishForStarted( thresholdTime, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in forceFinishForStarted, giving up:\n%s" % str(e)) return () @@ -648,7 +647,7 @@ def forceNeverStartedForCanStart(self, thresholdTime, isRetry=False): if not self.sqlAvailable: self.notify.debug("sqlAvailable was false when calling forceNeverStartedForCanStart") return () - + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -656,11 +655,11 @@ def forceNeverStartedForCanStart(self, thresholdTime, isRetry=False): res = cursor.fetchall() cursor.execute(ttSQL.partyForceNeverStartedForCanStartUPDATE ,(thresholdTime,)) self.db.commit() - + #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on forceNeverStartedForCanStart retry, giving up:\n%s" % str(e)) return () @@ -671,7 +670,7 @@ def forceNeverStartedForCanStart(self, thresholdTime, isRetry=False): self.notify.warning("Unknown error in forceNeverStartedForCanStart, retrying:\n%s" % str(e)) self.reconnect() return self.forceNeverStartedForCanStart( thresholdTime, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in forceNeverStartedForCanStart, giving up:\n%s" % str(e)) return () @@ -686,8 +685,8 @@ def changeMultiplePartiesStatus(self, partyIds, newPartyStatus, isRetry=False): if not partyIds: self.notify.debug("empty list in partyIds for changeMultiplePartiesStatus") - return() - + return() + cursor = MySQLdb.cursors.DictCursor(self.db) try: cursor.execute("USE `%s`"%self.dbname) @@ -700,8 +699,8 @@ def changeMultiplePartiesStatus(self, partyIds, newPartyStatus, isRetry=False): res = cursor.fetchall() #self.notify.debug("Select was successful in ttMaildb, returning %s" % str(res)) return res - - except _mysql_exceptions.OperationalError,e: + + except MySQLdb.OperationalError as e: if isRetry: self.notify.warning("Error on changeMultiplePartiesStatus retry, giving up:\n%s" % str(e)) return () @@ -712,6 +711,6 @@ def changeMultiplePartiesStatus(self, partyIds, newPartyStatus, isRetry=False): self.notify.warning("Unknown error in changeMultiplePartiesStatus, retrying:\n%s" % str(e)) self.reconnect() return self.changeMultiplePartiesStatus( partyIds, newPartyStatus, True) - except Exception,e: + except Exception as e: self.notify.warning("Unknown error in changeMultiplePartiesStatus, giving up:\n%s" % str(e)) return () diff --git a/ttlauncher.py b/ttlauncher.py index 23692b5e..e2a498ed 100644 --- a/ttlauncher.py +++ b/ttlauncher.py @@ -8,7 +8,7 @@ from pandac.PandaModules import loadPrcFileData, VirtualFileSystem, Filename loadPrcFileData("", "color-bits 8 8 8\nalpha-bits 8"); -loadPrcFileData("", "default-server-constants 1\nfake-playtoken test\ngame-server 34.136.173.79\nverify-ssl 0\ntt-specific-login 1\nserver-version dev"); +loadPrcFileData("", "default-server-constants 1\nfake-playtoken Rocketman\ngame-server 127.0.0.1\nverify-ssl 0\ntt-specific-login 1\nserver-version dev"); loadPrcFileData("", "want-magic-words 1") vfs = VirtualFileSystem.getGlobalPtr() diff --git a/ttmodels/src/dna/cog_hq_cashbot_sz.dna b/ttmodels/src/dna/cog_hq_cashbot_sz.dna new file mode 100644 index 00000000..95f29503 --- /dev/null +++ b/ttmodels/src/dna/cog_hq_cashbot_sz.dna @@ -0,0 +1,372 @@ +store_suit_point [ 1, STREET_POINT, 161 -460 -23.3 ] +store_suit_point [ 2, STREET_POINT, 216 -451 -24.2 ] +store_suit_point [ 3, STREET_POINT, 282 -450 -24.2 ] +store_suit_point [ 4, STREET_POINT, 341 -438 -24.2 ] +store_suit_point [ 5, STREET_POINT, 291 -400 -24.2 ] +store_suit_point [ 6, STREET_POINT, 212 -411 -24.2 ] +store_suit_point [ 7, STREET_POINT, 170 -440 -23.3 ] +store_suit_point [ 8, STREET_POINT, 167 -428 -23.3 ] +store_suit_point [ 9, STREET_POINT, 158 -386 -63.2 ] +store_suit_point [ 10, STREET_POINT, 140 -358 -63.2 ] +store_suit_point [ 11, STREET_POINT, 140 -321 -63.2] +store_suit_point [ 12, STREET_POINT, 196 -326 -63.2] +store_suit_point [ 13, STREET_POINT, 227 -327 -63.2] +store_suit_point [ 14, STREET_POINT, 239 -353 -63.2] +store_suit_point [ 15, STREET_POINT, 300 -350 -63.2] +store_suit_point [ 16, STREET_POINT, 311 -319 -63.2] +store_suit_point [ 17, STREET_POINT, 251 -314 -63.2] +store_suit_point [ 18, STREET_POINT, 186 -312 -63.2] +store_suit_point [ 19, STREET_POINT, 130 -313 -63.2] +store_suit_point [ 20, STREET_POINT, 58 -314 -63.2] +store_suit_point [ 21, STREET_POINT, -5 -336 -63.2] +store_suit_point [ 22, STREET_POINT, -16 -316 -63.2] +store_suit_point [ 23, STREET_POINT, 69 -387 -63.2] +store_suit_point [ 24, STREET_POINT, 64 -428 -23.3] +store_suit_point [ 25, STREET_POINT, 43 -431 -23.3] +store_suit_point [ 26, STREET_POINT, -38 -453 -23.3] +store_suit_point [ 27, STREET_POINT, -21 -398 -23.3] +store_suit_point [ 28, STREET_POINT, 56 -434 -23.3] +store_suit_point [ 29, STREET_POINT, 107 -446 -23.3] + +// Second section +store_suit_point [ 50, STREET_POINT, 144 -269 -63.2] +store_suit_point [ 51, STREET_POINT, 330 -272 -63.2] +store_suit_point [ 52, STREET_POINT, 340 -234 -63.2] +store_suit_point [ 53, STREET_POINT, 255 -238 -63.2] +store_suit_point [ 54, STREET_POINT, 228 -255 -63.2] +store_suit_point [ 55, STREET_POINT, 196 -253 -63.2] +store_suit_point [ 56, STREET_POINT, 167 -234 -63.2] +store_suit_point [ 57, STREET_POINT, 89 -235 -63.2] +store_suit_point [ 58, STREET_POINT, 50 -270 -63.2] +store_suit_point [ 59, STREET_POINT, 234 -269 -63.2] // in between 50 and 51 + +// Third Section +store_suit_point [ 70, STREET_POINT, -106 -191 -63.2] +store_suit_point [ 71, STREET_POINT, -3 -192 -63.2] +store_suit_point [ 72, STREET_POINT, 90 -189 -63.2] +store_suit_point [ 73, STREET_POINT, 93 -155 -63.2] +store_suit_point [ 74, STREET_POINT, 44 -154 -63.2] +store_suit_point [ 75, STREET_POINT, -96 -155 -63.2] + +//Fourth Section +store_suit_point [ 90, STREET_POINT, 297 -108 -63.2] +store_suit_point [ 91, STREET_POINT, 247 -108 -63.2] +store_suit_point [ 92, STREET_POINT, 228 -88 -63.2] +store_suit_point [ 93, STREET_POINT, 145 -94 -63.2] +store_suit_point [ 94, STREET_POINT, 83 -111 -63.2] +store_suit_point [ 95, STREET_POINT, 47 -94 -63.2] +store_suit_point [ 96, STREET_POINT, 122 -80 -63.2] +store_suit_point [ 97, STREET_POINT, 206 -77 -63.2] +store_suit_point [ 98, STREET_POINT, 267 -84 -63.2] + +//Fifth Section (second set of stairs) +store_suit_point [ 110, STREET_POINT, 153 -20 -63.2] +store_suit_point [ 111, STREET_POINT, 157 27 -63.2] +store_suit_point [ 112, STREET_POINT, 163 70 -23.4] +store_suit_point [ 113, STREET_POINT, 178 71 -23.4] +store_suit_point [ 114, STREET_POINT, 223 37 -23.4] +store_suit_point [ 115, STREET_POINT, 291 36 -23.4] +store_suit_point [ 116, STREET_POINT, 345 58 -23.4] +store_suit_point [ 117, STREET_POINT, 307 84 -23.4] +store_suit_point [ 118, STREET_POINT, 210 93 -23.4] +store_suit_point [ 119, STREET_POINT, 158 94 -23.4] +store_suit_point [ 120, STREET_POINT, 123 128 -23.4] +store_suit_point [ 121, STREET_POINT, 67 102 -23.4] +store_suit_point [ 122, STREET_POINT, 24 89 -23.4] +store_suit_point [ 123, STREET_POINT, -25 50 -23.4] +store_suit_point [ 124, STREET_POINT, 41 69 -23.4] +store_suit_point [ 125, STREET_POINT, 66.4 69.5 -23.4] +store_suit_point [ 126, STREET_POINT, 63.4 41.8 -48.9] +store_suit_point [ 127, STREET_POINT, 60.3 28 -63.2] +store_suit_point [ 128, STREET_POINT, 68 3 -63.2] +store_suit_point [ 129, STREET_POINT, 35 -3 -63.2] +store_suit_point [ 130, STREET_POINT, 46 -34 -63.2] +store_suit_point [ 131, STREET_POINT, 121 -32 -63.2] + +//Courtyard +store_suit_point [ 150, STREET_POINT, 162 183 -23.5] +store_suit_point [ 151, STREET_POINT, 253 200 -23.5] +store_suit_point [ 152, STREET_POINT, 308 227 -23.5] +store_suit_point [ 153, STREET_POINT, 351 290 -23.5] +store_suit_point [ 154, STREET_POINT, 358 363 -23.5] +store_suit_point [ 155, STREET_POINT, 319 392 -23.5] +store_suit_point [ 156, STREET_POINT, 255 332 -23.5] +store_suit_point [ 157, STREET_POINT, 221 263 -23.5] +store_suit_point [ 158, STREET_POINT, 231 218 -23.5] +store_suit_point [ 159, STREET_POINT, 151 213 -23.5] +store_suit_point [ 160, STREET_POINT, 182 305 -23.5] +store_suit_point [ 161, STREET_POINT, 144 380 -23.5] +store_suit_point [ 162, STREET_POINT, 133 274 -23.5] +store_suit_point [ 163, STREET_POINT, 65 328 -23.5] +store_suit_point [ 164, STREET_POINT, 4 377 -23.5] +store_suit_point [ 165, STREET_POINT, -49 416 -23.5] +store_suit_point [ 166, STREET_POINT, -101 373 -23.5] +store_suit_point [ 167, STREET_POINT, -43 331 -23.5] +store_suit_point [ 168, STREET_POINT, 14 268 -23.5] +store_suit_point [ 169, STREET_POINT, -19 256 -23.5] +store_suit_point [ 170, STREET_POINT, -74 259 -23.5] +store_suit_point [ 171, STREET_POINT, -88 215 -23.5] +store_suit_point [ 172, STREET_POINT, -22 195 -23.5] +store_suit_point [ 173, STREET_POINT, 30 189 -23.5] +store_suit_point [ 174, STREET_POINT, 22 229 -23.5] +store_suit_point [ 175, STREET_POINT, 50 252 -23.5] +store_suit_point [ 176, STREET_POINT, 93 186 -23.5] +store_suit_point [ 177, STREET_POINT, 78 165 -23.5] +store_suit_point [ 178, STREET_POINT, 121 156 -23.5] + +//store_suit_point [ 50, STREET_POINT, 15 -84 0.3 ] +//store_suit_point [ 51, STREET_POINT, 15 -66 10.05 ] +//store_suit_point [ 52, COGHQ_IN_POINT, 15 -42.5 10.05, 3 ] +//store_suit_point [ 53, STREET_POINT, 0 0 10.05 ] +//store_suit_point [ 54, COGHQ_OUT_POINT, -15 -42.5 10.05, 0 ] +//store_suit_point [ 55, STREET_POINT, -15 -66 10.05 ] +//store_suit_point [ 56, STREET_POINT, -15 -84 0.3 ] + +//store_suit_point [ 60, STREET_POINT, 5 -84 0.3 ] +//store_suit_point [ 61, STREET_POINT, 5 -66 10.05 ] +//store_suit_point [ 62, COGHQ_OUT_POINT, 5 -42.5 10.05, 2] +//store_suit_point [ 63, STREET_POINT, 0 -5 10.05 ] +//store_suit_point [ 64, COGHQ_IN_POINT, -5 -42.5 10.05, 1 ] +//store_suit_point [ 65, STREET_POINT, -5 -66 10.05 ] +//store_suit_point [ 66, STREET_POINT, -5 -84 0.3 ] + +group "cashbotHQExterior" [ + visgroup "12000" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 20 21 ] + suit_edge [ 21 22 ] + suit_edge [ 22 23 ] + battle_cell [ 20 20 40 -339 -63.2 ] + ] + visgroup "12001" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 18 19 ] + suit_edge [ 19 20 ] + suit_edge [ 9 10 ] + suit_edge [ 10 11 ] + suit_edge [ 11 12 ] + battle_cell [ 20 20 102 -346 -63.2 ] + ] + visgroup "12002" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 3 4 ] + suit_edge [ 4 5 ] + suit_edge [ 5 6 ] + battle_cell [ 20 20 279 -431 -23.3 ] + ] + visgroup "12003" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 24 25 ] + suit_edge [ 25 26 ] + suit_edge [ 26 27 ] + suit_edge [ 27 28 ] + suit_edge [ 28 29 ] + battle_cell [ 20 20 8 -420 -23.3 ] + ] + visgroup "12004" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 12 13 ] + suit_edge [ 13 14 ] + suit_edge [ 17 18 ] + battle_cell [ 20 20 224 -321 -63.2 ] + ] + visgroup "12005" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 14 15 ] + suit_edge [ 15 16 ] + suit_edge [ 16 17 ] + battle_cell [ 20 20 283 -333 -63.2 ] + ] + visgroup "12006" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 1 2 ] + suit_edge [ 2 3 ] + suit_edge [ 6 7 ] + suit_edge [ 7 8 ] + suit_edge [ 29 1 ] + battle_cell [ 20 20 182 -438 -23.3 ] + ] + // stairs... no battle cell + visgroup "12007" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 8 9 ] + suit_edge [ 23 24 ] + ] + visgroup "12010" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 51 52 ] + suit_edge [ 52 53 ] + suit_edge [ 53 54 ] + suit_edge [ 59 51 ] + battle_cell [ 20 20 271 -258 -63.2 ] + ] + visgroup "12011" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 56 57 ] + suit_edge [ 57 58 ] + suit_edge [ 58 50 ] + battle_cell [ 20 20 115 -252 -63.2 ] + ] + visgroup "12012" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 50 59 ] + suit_edge [ 54 55 ] + suit_edge [ 55 56 ] + battle_cell [ 20 20 193 -257 -63.2 ] + ] + visgroup "12020" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 70 71 ] + suit_edge [ 71 72 ] + suit_edge [ 72 73 ] + battle_cell [ 20 20 -32 -157 -63.2 ] + ] + visgroup "12021" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 73 74 ] + suit_edge [ 74 75 ] + suit_edge [ 75 70 ] + battle_cell [ 20 20 75 -189 -63.2 ] + ] + visgroup "12030" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 93 94 ] + suit_edge [ 94 95 ] + suit_edge [ 95 96 ] + battle_cell [ 20 20 121 -95 -63.2 ] + ] + visgroup "12031" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 92 93 ] + suit_edge [ 96 97 ] + battle_cell [ 20 20 183 -83 -63.2 ] + ] + visgroup "12032" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 90 91 ] + suit_edge [ 91 92 ] + suit_edge [ 97 98 ] + suit_edge [ 98 90 ] + battle_cell [ 20 20 267 -89 -63.2 ] + ] + visgroup "12040" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 110 111 ] + suit_edge [ 130 131 ] + suit_edge [ 131 110 ] + battle_cell [ 20 20 130 -3 -63.2 ] + ] + visgroup "12041" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 127 128 ] + suit_edge [ 128 129 ] + suit_edge [ 129 130 ] + battle_cell [ 20 20 51 -22 -63.2 ] + ] + visgroup "12042" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 121 122 ] + suit_edge [ 122 123 ] + suit_edge [ 123 124 ] + suit_edge [ 124 125 ] + battle_cell [ 20 20 -3 76 -23.4 ] + ] + visgroup "12043" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 112 113 ] + suit_edge [ 119 120 ] + suit_edge [ 120 121 ] + battle_cell [ 20 20 135 87 -23.4 ] + ] + visgroup "12044" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 113 114 ] + suit_edge [ 114 115 ] + suit_edge [ 115 116 ] + suit_edge [ 116 117 ] + suit_edge [ 117 118 ] + suit_edge [ 118 119 ] + battle_cell [ 20 20 234 70 -23.4 ] + ] + // stairs... no battle cell + visgroup "12045" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 111 112 ] + suit_edge [ 125 126 ] + suit_edge [ 126 127 ] + ] + visgroup "12050" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 159 160 ] + suit_edge [ 160 161 ] + suit_edge [ 161 162 ] + battle_cell [ 20 20 165 296 -23.5 ] + ] + visgroup "12051" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 156 157 ] + suit_edge [ 157 158 ] + battle_cell [ 20 20 218 255 -23.5 ] + ] + visgroup "12052" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 153 154 ] + suit_edge [ 154 155 ] + suit_edge [ 155 156 ] + battle_cell [ 20 20 337 374 -23.5 ] + ] + visgroup "12053" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 151 152 ] + suit_edge [ 152 153 ] + battle_cell [ 20 20 317 238 -23.5 ] + ] + visgroup "12054" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 169 170 ] + suit_edge [ 170 171 ] + suit_edge [ 171 172 ] + battle_cell [ 20 20 -47 225 -23.5 ] + ] + visgroup "12055" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 168 169 ] + suit_edge [ 172 173 ] + suit_edge [ 173 174 ] + suit_edge [ 174 175 ] + battle_cell [ 20 20 10 236 -23.5 ] + ] + visgroup "12056" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 164 165 ] + suit_edge [ 165 166 ] + suit_edge [ 166 167 ] + battle_cell [ 20 20 -54 379 -23.5 ] + ] + visgroup "12057" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 162 163 ] + suit_edge [ 163 164 ] + battle_cell [ 20 20 67 313 -23.5 ] + ] + visgroup "12058" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 167 168 ] + battle_cell [ 20 20 -27 289 -23.5 ] + ] + visgroup "12059" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 175 176 ] + suit_edge [ 176 177 ] + suit_edge [ 177 178 ] + suit_edge [ 178 150 ] + battle_cell [ 20 20 106 193 -23.5 ] + ] + visgroup "12060" [ + vis [ "12000" "12001" "12002" "12003" "12004" "12005" "12006" "12007" "12010" "12011" "12012" "12020" "12021" "12030" "12031" "12032" "12040" "12041" "12042" "12043" "12044" "12045" "12050" "12051" "12052" "12053" "12054" "12055" "12056" "12057" "12058" "12059" "12060"] + suit_edge [ 150 151 ] + suit_edge [ 158 159 ] + battle_cell [ 20 20 203 212 -23.5 ] + ] +] + diff --git a/ttmodels/src/dna/cog_hq_lawbot_sz.dna b/ttmodels/src/dna/cog_hq_lawbot_sz.dna new file mode 100644 index 00000000..81c2de08 --- /dev/null +++ b/ttmodels/src/dna/cog_hq_lawbot_sz.dna @@ -0,0 +1,159 @@ +store_suit_point [ 1, STREET_POINT, 251 106 -68.4 ] +store_suit_point [ 2, STREET_POINT, 170 81 -68.4 ] +store_suit_point [ 3, STREET_POINT, 107 39 -68.4 ] +store_suit_point [ 4, STREET_POINT, 24 78 -68.4 ] +store_suit_point [ 5, STREET_POINT, -55 103 -68.4 ] +store_suit_point [ 6, STREET_POINT, -32 17 -68.4 ] +store_suit_point [ 7, STREET_POINT, 41 -9 -68.4 ] +store_suit_point [ 8, STREET_POINT, 135 6 -68.4 ] +store_suit_point [ 9, STREET_POINT, 222 44 -68.4 ] + +store_suit_point [ 10, STREET_POINT, -10 -26 -68.4 ] +store_suit_point [ 11, STREET_POINT, -16 -76 -68.4 ] +store_suit_point [ 12, STREET_POINT, 23 -122 -68.4 ] +store_suit_point [ 13, STREET_POINT, -26 -163 -68.4 ] +store_suit_point [ 14, STREET_POINT, 20 -180 -68.4 ] +store_suit_point [ 15, STREET_POINT, 75 -151 -68.4 ] +store_suit_point [ 16, STREET_POINT, 74 -83 -68.4 ] +store_suit_point [ 17, STREET_POINT, 148 -82 -68.4 ] +store_suit_point [ 18, STREET_POINT, 206 -67 -68.4 ] +store_suit_point [ 19, STREET_POINT, 257 -14 -68.4 ] +store_suit_point [ 20, STREET_POINT, 232 24 -68.4 ] +store_suit_point [ 21, STREET_POINT, 155 -8 -68.4 ] +store_suit_point [ 22, STREET_POINT, 96 -39 -68.4 ] +store_suit_point [ 23, STREET_POINT, 29 -37 -68.4 ] + +store_suit_point [ 24, STREET_POINT, 188 -100 -68.4 ] +store_suit_point [ 25, STREET_POINT, 207 -173 -68.4 ] +store_suit_point [ 26, STREET_POINT, 137 -243 -68.4 ] +store_suit_point [ 27, STREET_POINT, 87 -179 -68.4 ] +store_suit_point [ 28, STREET_POINT, 115 -101 -68.4 ] + +store_suit_point [ 29, STREET_POINT, 71 -180 -68.4 ] +store_suit_point [ 30, STREET_POINT, 22 -197 -68.4 ] +store_suit_point [ 31, STREET_POINT, -11 -219 -68.4 ] +store_suit_point [ 32, STREET_POINT, 13 -262 -68.4 ] +store_suit_point [ 33, STREET_POINT, -16 -306 -68.4 ] +store_suit_point [ 34, STREET_POINT, -30 -345 -68.4 ] +store_suit_point [ 35, STREET_POINT, -56 -378 -68.4 ] +store_suit_point [ 36, STREET_POINT, -68 -435 -68.4 ] +store_suit_point [ 37, STREET_POINT, -21 -474 -68.4 ] +store_suit_point [ 38, STREET_POINT, 15 -448 -68.4 ] +store_suit_point [ 39, STREET_POINT, 23 -371 -68.4 ] +store_suit_point [ 40, STREET_POINT, 41 -280 -68.4 ] +store_suit_point [ 41, STREET_POINT, 61 -219 -68.4 ] + +store_suit_point [ 43, STREET_POINT, 172 -247 -68.4 ] +store_suit_point [ 44, STREET_POINT, 241 -315 -68.4 ] +store_suit_point [ 45, STREET_POINT, 264 -398 -68.4 ] +store_suit_point [ 46, STREET_POINT, 222 -452 -68.4 ] +store_suit_point [ 47, STREET_POINT, 159 -362 -68.4 ] +store_suit_point [ 48, STREET_POINT, 88 -314 -68.4 ] +store_suit_point [ 49, STREET_POINT, 85 -247 -68.4 ] +store_suit_point [ 50, STREET_POINT, 150 -258 -68.4 ] + +group "lawbotHQExterior" [ + visgroup "13000" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 1 2 ] + suit_edge [ 9 1 ] + suit_edge [ 19 20 ] + battle_cell [ 20 20 228 44 -68.4 ] + ] + + visgroup "13001" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 7 8 ] + suit_edge [ 8 9 ] + suit_edge [ 20 21 ] + suit_edge [ 21 22 ] + battle_cell [ 20 20 143 -2 -68.4 ] + ] + visgroup "13002" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 2 3 ] + suit_edge [ 3 4 ] + battle_cell [ 20 20 99 49 -68.4 ] + ] + visgroup "13003" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 4 5 ] + suit_edge [ 5 6 ] + suit_edge [ 6 7 ] + battle_cell [ 20 20 -35 47 -68.4 ] + ] + visgroup "13004" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 10 11 ] + suit_edge [ 11 12 ] + suit_edge [ 15 16 ] + suit_edge [ 16 17 ] + suit_edge [ 22 23 ] + suit_edge [ 23 10 ] + suit_edge [ 27 28 ] + battle_cell [ 20 20 71 -78 -68.4 ] + ] + visgroup "13005" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 17 18 ] + suit_edge [ 18 19 ] + suit_edge [ 24 25 ] + suit_edge [ 28 24 ] + battle_cell [ 20 20 181 -103 -68.4 ] + ] + visgroup "13006" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 12 13 ] + suit_edge [ 13 14 ] + suit_edge [ 14 15 ] + suit_edge [ 29 30 ] + suit_edge [ 30 31 ] + suit_edge [ 31 32 ] + suit_edge [ 41 29 ] + battle_cell [ 20 20 24 -191 -68.4 ] + ] + visgroup "13007" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 25 26 ] + suit_edge [ 26 27 ] + suit_edge [ 40 41 ] + suit_edge [ 49 50 ] + suit_edge [ 50 43 ] + battle_cell [ 20 20 138 -237 -68.4 ] + ] + visgroup "13008" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 32 33 ] + suit_edge [ 33 34 ] + suit_edge [ 39 40 ] + battle_cell [ 20 20 33 -326 -68.4 ] + ] + visgroup "13009" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 34 35 ] + suit_edge [ 35 36 ] + suit_edge [ 36 37 ] + suit_edge [ 37 38 ] + suit_edge [ 38 39 ] + battle_cell [ 20 20 -21 -413 -68.4 ] + ] + visgroup "13010" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 43 44 ] + suit_edge [ 44 45 ] + battle_cell [ 20 20 235 -319 -68.4 ] + ] + visgroup "13011" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 45 46 ] + suit_edge [ 46 47 ] + battle_cell [ 20 20 212 -427 -68.4 ] + ] + visgroup "13012" [ + vis [ "13000" "13001" "13002" "13003" "13004" "13005" "13006" "13007" "13008" "13009" "13010" "13011" "13012" ] + suit_edge [ 47 48 ] + suit_edge [ 48 49 ] + battle_cell [ 20 20 90 -309 -68.4 ] + ] +] + diff --git a/ttmodels/src/dna/cog_hq_sellbot_11200.dna b/ttmodels/src/dna/cog_hq_sellbot_11200.dna new file mode 100644 index 00000000..abef1101 --- /dev/null +++ b/ttmodels/src/dna/cog_hq_sellbot_11200.dna @@ -0,0 +1,247 @@ +store_suit_point [ 1, STREET_POINT, 27 -341 0.05 ] +store_suit_point [ 2, STREET_POINT, 0 -341 0.05 ] +store_suit_point [ 3, STREET_POINT, -27 -341 0.05 ] +store_suit_point [ 4, STREET_POINT, -27 -300 0.05 ] +store_suit_point [ 5, STREET_POINT, 13 -300 0.05 ] +store_suit_point [ 6, STREET_POINT, 13 -278 0.05 ] +store_suit_point [ 7, STREET_POINT, -27 -278 0.05 ] +store_suit_point [ 8, STREET_POINT, -27 -260 0.05 ] +store_suit_point [ 9, STREET_POINT, -27 -236 0.05 ] +store_suit_point [ 10, STREET_POINT, -27 -212 0.05 ] +store_suit_point [ 11, STREET_POINT, -34 -204 0.05 ] +store_suit_point [ 12, STREET_POINT, -60 -200 0.05 ] +store_suit_point [ 13, STREET_POINT, -90 -200 0.05 ] +store_suit_point [ 14, STREET_POINT, -145 -200 0.05 ] +store_suit_point [ 15, STREET_POINT, -188 -200 0.05 ] +store_suit_point [ 16, STREET_POINT, -188 -167 0.05 ] +store_suit_point [ 17, STREET_POINT, -137 -167 0.05 ] +store_suit_point [ 18, STREET_POINT, -41 -167 0.05 ] +store_suit_point [ 19, STREET_POINT, -37 -191 0.05 ] +store_suit_point [ 20, STREET_POINT, -31 -200 0.05 ] +store_suit_point [ 21, STREET_POINT, -13 -212 0.05 ] +store_suit_point [ 22, STREET_POINT, 13 -212 0.05 ] +store_suit_point [ 23, STREET_POINT, 31 -200 0.05 ] +store_suit_point [ 24, STREET_POINT, 55 -182 0.05 ] +store_suit_point [ 25, STREET_POINT, 112 -182 0.05 ] +store_suit_point [ 26, STREET_POINT, 165 -182 0.05 ] +store_suit_point [ 27, STREET_POINT, 165 -200 0.05 ] +store_suit_point [ 28, STREET_POINT, 112 -200 0.05 ] +store_suit_point [ 29, STREET_POINT, 55 -200 0.05 ] +store_suit_point [ 30, STREET_POINT, 34 -206 0.05 ] +store_suit_point [ 31, STREET_POINT, 27 -212 0.05 ] +store_suit_point [ 32, STREET_POINT, 27 -236 0.05 ] +store_suit_point [ 33, STREET_POINT, -13 -236 0.05 ] +store_suit_point [ 34, STREET_POINT, -13 -260 0.05 ] +store_suit_point [ 35, STREET_POINT, 27 -260 0.05 ] +store_suit_point [ 36, STREET_POINT, 27 -278 0.05 ] +store_suit_point [ 37, STREET_POINT, 27 -300 0.05 ] + +store_suit_point [ 101, STREET_POINT, 0 -143 0.05 ] +store_suit_point [ 102, STREET_POINT, 96 -143 0.05 ] +store_suit_point [ 103, STREET_POINT, 96 -120 0.05 ] +store_suit_point [ 104, STREET_POINT, 159 -120 0.05 ] +store_suit_point [ 105, STREET_POINT, 159 18 0.05 ] +store_suit_point [ 106, STREET_POINT, 159 120 0.05 ] +store_suit_point [ 107, STREET_POINT, 0 111 0.05 ] +store_suit_point [ 108, STREET_POINT, -193 103 0.05 ] +store_suit_point [ 109, STREET_POINT, -187 0 0.05 ] +store_suit_point [ 110, STREET_POINT, -182 -144 0.05 ] +store_suit_point [ 111, STREET_POINT, -110 -144 0.05 ] +store_suit_point [ 112, STREET_POINT, -110 -80 0.05 ] +store_suit_point [ 113, STREET_POINT, -170 -80 0.05 ] +store_suit_point [ 114, STREET_POINT, -170 -24 0.05 ] +store_suit_point [ 115, STREET_POINT, -73 -24 0.05 ] +store_suit_point [ 116, STREET_POINT, -73 5 0.05 ] +store_suit_point [ 117, STREET_POINT, -23 5 0.05 ] +store_suit_point [ 118, STREET_POINT, -23 -24 0.05 ] +store_suit_point [ 119, STREET_POINT, -23 -120 0.05 ] +store_suit_point [ 120, STREET_POINT, -80 -120 0.05 ] +store_suit_point [ 121, STREET_POINT, -80 -143 0.05 ] + +store_suit_point [ 122, STREET_POINT, -23 18 0.05 ] +store_suit_point [ 123, STREET_POINT, 63 18 0.05 ] +store_suit_point [ 124, STREET_POINT, 147 18 0.05 ] +store_suit_point [ 125, STREET_POINT, 147 -96 0.05 ] +store_suit_point [ 126, STREET_POINT, -23 -96 0.05 ] + + +group "sellbotHQFactoryExterior" [ + visgroup "11200" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + ] + + visgroup "11201" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 2 3 ] + suit_edge [ 3 4 ] + battle_cell [ 20 20 -27 -320 0.05 ] + ] + visgroup "11202" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 1 2 ] + suit_edge [ 37 1 ] + battle_cell [ 20 20 27 -320 0.05 ] + ] + visgroup "11203" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 4 5 ] + suit_edge [ 5 6 ] + battle_cell [ 20 20 0 -289 0.05 ] + ] + visgroup "11204" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 6 7 ] + suit_edge [ 7 8 ] + suit_edge [ 8 9 ] + battle_cell [ 20 20 -27 -268 0.05 ] + ] + visgroup "11205" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 34 35 ] + suit_edge [ 35 36 ] + suit_edge [ 36 37 ] + battle_cell [ 20 20 27 -268 0.05 ] + ] + visgroup "11206" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 32 33 ] + suit_edge [ 33 34 ] + battle_cell [ 20 20 0 -248 0.05 ] + ] + visgroup "11207" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 9 10 ] + suit_edge [ 10 11 ] + suit_edge [ 20 21 ] + battle_cell [ 20 20 -23 -214 0.05 ] + ] + visgroup "11208" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 21 22 ] + suit_edge [ 22 23 ] + suit_edge [ 30 31 ] + suit_edge [ 31 32 ] + battle_cell [ 20 20 23 -214 0.05 ] + ] + visgroup "11209" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 11 12 ] + suit_edge [ 12 13 ] + suit_edge [ 18 19 ] + suit_edge [ 19 20 ] + battle_cell [ 20 20 -47 -193 0.05 ] + ] + visgroup "11210" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 23 24 ] + suit_edge [ 24 25 ] + suit_edge [ 28 29 ] + suit_edge [ 29 30 ] + battle_cell [ 20 20 47 -193 0.05 ] + ] + visgroup "11211" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 14 15 ] + suit_edge [ 15 16 ] + suit_edge [ 16 17 ] + battle_cell [ 20 20 -164 -173 0.05 ] + ] + visgroup "11212" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 17 18 ] + battle_cell [ 20 20 -105 -173 0.05 ] + ] + visgroup "11213" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 25 26 ] + suit_edge [ 26 27 ] + suit_edge [ 27 28 ] + battle_cell [ 20 20 120 -191 0.05 ] + ] + visgroup "11214" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 13 14 ] + battle_cell [ 20 20 -124 -200 0.05 ] + ] + + visgroup "11251" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 101 102 ] + suit_edge [ 121 101 ] + battle_cell [ 20 20 31 -141 0.05 ] + ] + visgroup "11252" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 102 103 ] + suit_edge [ 103 104 ] + suit_edge [ 125 126 ] + battle_cell [ 20 20 96 -120 0.05 ] + ] + visgroup "11253" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 104 105 ] + suit_edge [ 124 125 ] + battle_cell [ 20 20 147 -96 0.05 ] + ] + visgroup "11254" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 105 106 ] + suit_edge [ 123 124 ] + battle_cell [ 20 20 147 18 0.05 ] + ] + visgroup "11255" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 106 107 ] + battle_cell [ 20 20 101 116 0.05 ] + ] + visgroup "11256" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 107 108 ] + battle_cell [ 20 20 -59 109 0.05 ] + ] + visgroup "11257" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 108 109 ] + battle_cell [ 20 20 -191 65 0.05 ] + ] + visgroup "11258" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 109 110 ] + suit_edge [ 113 114 ] + suit_edge [ 114 115 ] + battle_cell [ 20 20 -170 -24 0.05 ] + ] + visgroup "11259" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 112 113 ] + battle_cell [ 20 20 -143 -73 0.05 ] + ] + visgroup "11260" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 110 111 ] + suit_edge [ 111 112 ] + suit_edge [ 115 116 ] + suit_edge [ 116 117 ] + suit_edge [ 120 121 ] + battle_cell [ 20 20 -109 -138 0.05 ] + ] + visgroup "11261" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 115 118 ] + battle_cell [ 20 20 -53 -10 0.05 ] + ] + visgroup "11262" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 117 122 ] + suit_edge [ 122 123 ] + battle_cell [ 20 20 -18 18 0.05 ] + ] + visgroup "11263" [ + vis [ "11201" "11202" "11203" "11204" "11205" "11206" "11207" "11208" "11209" "11210" "11211" "11212" "11213" "11214" "11251" "11252" "11253" "11254" "11255" "11256" "11257" "11258" "11259" "11260" "11261" "11262" "11263" ] + suit_edge [ 126 119 ] + suit_edge [ 119 120 ] + suit_edge [ 118 126 ] + battle_cell [ 20 20 -28 -108 0.05 ] + ] + +] diff --git a/ttmodels/src/dna/cog_hq_sellbot_sz.dna b/ttmodels/src/dna/cog_hq_sellbot_sz.dna new file mode 100644 index 00000000..85661933 --- /dev/null +++ b/ttmodels/src/dna/cog_hq_sellbot_sz.dna @@ -0,0 +1,183 @@ +store_suit_point [ 1, STREET_POINT, 91 -203 0.3 ] +store_suit_point [ 2, STREET_POINT, 89 -157 0.3 ] +store_suit_point [ 3, STREET_POINT, 62 -96 0.3 ] +store_suit_point [ 4, STREET_POINT, 39 -87 0.3 ] +store_suit_point [ 5, STREET_POINT, 15 -88 0.3 ] +store_suit_point [ 6, STREET_POINT, 5 -88 0.3 ] +store_suit_point [ 7, STREET_POINT, -5 -88 0.3 ] +store_suit_point [ 8, STREET_POINT, -15 -88 0.3 ] +store_suit_point [ 9, STREET_POINT, -48 -93 0.3 ] +store_suit_point [ 10, STREET_POINT, -88 -107 0.3 ] +store_suit_point [ 11, STREET_POINT, -94 -127 0.3 ] +store_suit_point [ 12, STREET_POINT, -77 -138 0.3 ] +store_suit_point [ 13, STREET_POINT, -15 -119 0.3 ] +store_suit_point [ 14, STREET_POINT, 28 -111 0.3 ] +store_suit_point [ 15, STREET_POINT, 61 -122 0.3 ] +store_suit_point [ 16, STREET_POINT, 74 -146 0.3 ] +store_suit_point [ 17, STREET_POINT, 82 -182 0.3 ] +store_suit_point [ 18, STREET_POINT, 81 -203 0.3 ] +store_suit_point [ 19, STREET_POINT, 71 -215 0.3 ] +store_suit_point [ 20, STREET_POINT, 51 -230 0.3 ] +store_suit_point [ 21, STREET_POINT, 25 -241 0.3 ] +store_suit_point [ 22, STREET_POINT, 2 -245 0.3 ] +store_suit_point [ 23, STREET_POINT, -35 -238 0.3 ] +store_suit_point [ 24, STREET_POINT, -66 -218 0.3 ] +store_suit_point [ 25, STREET_POINT, -73 -203 0.3 ] +store_suit_point [ 26, STREET_POINT, -78 -178 0.3 ] +store_suit_point [ 27, STREET_POINT, -64 -161 0.3 ] +store_suit_point [ 28, STREET_POINT, -38 -147 0.3 ] +store_suit_point [ 29, STREET_POINT, -17 -140 0.3 ] +store_suit_point [ 30, STREET_POINT, 39 -133 0.3 ] +store_suit_point [ 31, STREET_POINT, 43 -125 0.3 ] +store_suit_point [ 32, STREET_POINT, 25 -117 0.3 ] +store_suit_point [ 33, STREET_POINT, -45 -138 0.3 ] +store_suit_point [ 34, STREET_POINT, -84 -170 0.3 ] +store_suit_point [ 35, STREET_POINT, -80 -220 0.3 ] +store_suit_point [ 36, STREET_POINT, -48 -241 0.3 ] +store_suit_point [ 37, STREET_POINT, -29 -245 0.3 ] +store_suit_point [ 38, STREET_POINT, -3 -256 0.3 ] +store_suit_point [ 39, STREET_POINT, 24 -248 0.3 ] +store_suit_point [ 40, STREET_POINT, 54 -236 0.3 ] +store_suit_point [ 41, STREET_POINT, 70 -225 0.3 ] +store_suit_point [ 42, STREET_POINT, -5 -119 0.3 ] +store_suit_point [ 43, STREET_POINT, 5 -110 0.3 ] + +store_suit_point [ 50, STREET_POINT, 15 -84 0.3 ] +store_suit_point [ 51, STREET_POINT, 15 -66 10.05 ] +store_suit_point [ 52, COGHQ_IN_POINT, 15 -42.5 10.05, 3 ] +store_suit_point [ 53, STREET_POINT, 0 0 10.05 ] +store_suit_point [ 54, COGHQ_OUT_POINT, -15 -42.5 10.05, 0 ] +store_suit_point [ 55, STREET_POINT, -15 -66 10.05 ] +store_suit_point [ 56, STREET_POINT, -15 -84 0.3 ] + +store_suit_point [ 60, STREET_POINT, 5 -84 0.3 ] +store_suit_point [ 61, STREET_POINT, 5 -66 10.05 ] +store_suit_point [ 62, COGHQ_OUT_POINT, 5 -42.5 10.05, 2] +store_suit_point [ 63, STREET_POINT, 0 -5 10.05 ] +store_suit_point [ 64, COGHQ_IN_POINT, -5 -42.5 10.05, 1 ] +store_suit_point [ 65, STREET_POINT, -5 -66 10.05 ] +store_suit_point [ 66, STREET_POINT, -5 -84 0.3 ] + +group "sellbotHQExterior" [ + visgroup "11000" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 2 3 ] + suit_edge [ 15 16 ] + suit_edge [ 16 17 ] + battle_cell [ 20 20 82 -154 0.3 ] + ] + visgroup "11002" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 3 4 ] + suit_edge [ 4 5 ] + suit_edge [ 5 50 ] + battle_cell [ 20 20 54 -100 0.3 ] + ] + visgroup "11003" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 56 8 ] + suit_edge [ 8 9 ] + suit_edge [ 9 10 ] + battle_cell [ 20 20 -48 -93 0.3 ] + ] + visgroup "11004" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 10 11 ] + suit_edge [ 11 12 ] + suit_edge [ 12 13 ] + battle_cell [ 20 20 -91 -126 0.3 ] + ] + visgroup "11005" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 13 42 ] + suit_edge [ 42 7 ] + suit_edge [ 7 66 ] + suit_edge [ 32 33 ] + battle_cell [ 20 20 -11 -122 0.3 ] + ] + visgroup "11006" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 60 6 ] + suit_edge [ 6 43 ] + suit_edge [ 43 14 ] + suit_edge [ 14 15 ] + battle_cell [ 20 20 61 -122 0.3 ] + ] + visgroup "11007" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 20 21 ] + suit_edge [ 21 22 ] + suit_edge [ 22 23 ] + suit_edge [ 37 38 ] + suit_edge [ 38 39 ] + suit_edge [ 39 40 ] + battle_cell [ 20 20 4 -249 0.3 ] + ] + visgroup "11008" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 23 24 ] + suit_edge [ 24 25 ] + suit_edge [ 35 36 ] + suit_edge [ 36 37 ] + battle_cell [ 20 20 -69 -223 0.3 ] + ] + visgroup "11009" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 25 26 ] + suit_edge [ 26 27 ] + suit_edge [ 33 34 ] + suit_edge [ 34 35 ] + battle_cell [ 20 20 -79 -166 0.3 ] + ] + visgroup "11010" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 27 28 ] + suit_edge [ 28 29 ] + battle_cell [ 20 20 -37 -144 0.3 ] + ] + visgroup "11011" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 29 30 ] + suit_edge [ 30 31 ] + suit_edge [ 31 32 ] + battle_cell [ 20 20 39 -131 0.3 ] + ] + visgroup "11012" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 1 2 ] + suit_edge [ 17 18 ] + suit_edge [ 18 19 ] + suit_edge [ 19 20 ] + suit_edge [ 40 41 ] + suit_edge [ 41 1 ] + battle_cell [ 20 20 86 -200 0.3 ] + ] + visgroup "11050" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 50 51 ] + suit_edge [ 55 56 ] + suit_edge [ 61 60 ] + suit_edge [ 66 65 ] + ] + visgroup "11051" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 51 52 ] + suit_edge [ 62 61 ] + battle_cell [ 20 20 39 -53 10.05 ] + ] + visgroup "11052" [ + vis [ "11000" "11002" "11003" "11004" "11005" "11006" "11007" "11008" "11009" "11010" "11011" "11012" "11050" "11051" "11052" ] + suit_edge [ 54 55 ] + suit_edge [ 65 64 ] + battle_cell [ 20 20 -39 -53 10.05 ] + ] + visgroup "11099" [ + // This visgroup is behind the lobby doors, not visible to anyone. + vis [ "11099" ] + suit_edge [ 52 53 ] + suit_edge [ 53 54 ] + suit_edge [ 63 62 ] + suit_edge [ 64 63 ] + ] +] + diff --git a/ttmodels/src/dna/daisys_garden_5100.dna b/ttmodels/src/dna/daisys_garden_5100.dna new file mode 100644 index 00000000..b2c6ed1e --- /dev/null +++ b/ttmodels/src/dna/daisys_garden_5100.dna @@ -0,0 +1,11368 @@ +store_suit_point [ 5, STREET_POINT, -20.8649 23.2527 -0.5 ] +store_suit_point [ 7, STREET_POINT, -20.8645 33.253 -0.5 ] +store_suit_point [ 8, STREET_POINT, -4.86492 23.2527 -0.5 ] +store_suit_point [ 9, STREET_POINT, 19.1351 23.2527 -0.5 ] +store_suit_point [ 10, STREET_POINT, 19.1351 33.2527 -0.5 ] +store_suit_point [ 11, STREET_POINT, -4.86492 33.2527 -0.5 ] +store_suit_point [ 12, FRONT_DOOR_POINT, -6.86492 7.25268 0, 2 ] +store_suit_point [ 13, FRONT_DOOR_POINT, -4.86492 51.2527 0, 1 ] +store_suit_point [ 14, STREET_POINT, 40.1351 31.2527 -0.5 ] +store_suit_point [ 15, STREET_POINT, 49.1351 53.2527 -0.5 ] +store_suit_point [ 16, STREET_POINT, 32.1351 39.2527 -0.5 ] +store_suit_point [ 17, STREET_POINT, 39.1351 53.2527 -0.5 ] +store_suit_point [ 18, FRONT_DOOR_POINT, 65.1351 21.2527 0, 3 ] +store_suit_point [ 19, STREET_POINT, 49.1351 73.2527 -0.5 ] +store_suit_point [ 20, STREET_POINT, 39.1351 73.2527 -0.5 ] +store_suit_point [ 21, STREET_POINT, 49.1351 113.253 -0.5 ] +store_suit_point [ 22, STREET_POINT, 39.1351 113.253 -0.5 ] +store_suit_point [ 23, STREET_POINT, 49.1351 125.253 -0.5 ] +store_suit_point [ 24, STREET_POINT, 49.1351 153.253 -0.5 ] +store_suit_point [ 25, STREET_POINT, 39.1351 153.253 -0.5 ] +store_suit_point [ 26, STREET_POINT, 39.1351 125.253 -0.5 ] +store_suit_point [ 27, FRONT_DOOR_POINT, 80.1351 125.253 0, 5 ] +store_suit_point [ 28, FRONT_DOOR_POINT, 7.13507 125.253 0, 4 ] +store_suit_point [ 29, STREET_POINT, 49.1351 173.253 -0.5 ] +store_suit_point [ 30, STREET_POINT, 39.1351 173.253 -0.5 ] +store_suit_point [ 31, STREET_POINT, 54.1351 187.253 -0.5 ] +store_suit_point [ 32, STREET_POINT, 69.1355 193.253 -0.5 ] +store_suit_point [ 33, STREET_POINT, 69.1355 203.253 -0.5 ] +store_suit_point [ 34, STREET_POINT, 47.1351 194.253 -0.5 ] +store_suit_point [ 35, FRONT_DOOR_POINT, 23.1351 185.253 0, 6 ] +store_suit_point [ 39, STREET_POINT, 123.135 193.253 -0.5 ] +store_suit_point [ 40, STREET_POINT, 123.135 208.253 -0.5 ] +store_suit_point [ 41, STREET_POINT, 129.135 208.253 -0.5 ] +store_suit_point [ 42, STREET_POINT, 129.135 218.253 -0.5 ] +store_suit_point [ 43, STREET_POINT, 113.135 218.253 -0.5 ] +store_suit_point [ 44, STREET_POINT, 113.135 203.253 -0.5 ] +store_suit_point [ 46, STREET_POINT, 141.135 208.253 -0.5 ] +store_suit_point [ 47, STREET_POINT, 169.135 208.253 -0.5 ] +store_suit_point [ 48, STREET_POINT, 169.135 218.253 -0.5 ] +store_suit_point [ 49, STREET_POINT, 141.135 218.253 -0.5 ] +store_suit_point [ 50, FRONT_DOOR_POINT, 141.135 234.253 0, 7 ] +store_suit_point [ 51, STREET_POINT, 174.135 208.253 -0.5 ] +store_suit_point [ 52, STREET_POINT, 174.135 193.253 -0.5 ] +store_suit_point [ 53, STREET_POINT, 184.135 218.253 -0.5 ] +store_suit_point [ 54, STREET_POINT, 184.135 203.253 -0.5 ] +store_suit_point [ 57, FRONT_DOOR_POINT, 178.135 162.253 0, 8 ] +store_suit_point [ 58, STREET_POINT, 89.1355 203.253 -0.5 ] +store_suit_point [ 61, STREET_POINT, 209 193 -0.5 ] +store_suit_point [ 62, STREET_POINT, 229.135 193.253 -0.5 ] +store_suit_point [ 63, STREET_POINT, 229.135 203.253 -0.5 ] +store_suit_point [ 65, STREET_POINT, 243.135 188.253 -0.5 ] +store_suit_point [ 66, STREET_POINT, 248.135 173.253 -0.5 ] +store_suit_point [ 67, STREET_POINT, 258.135 173.253 -0.5 ] +store_suit_point [ 68, STREET_POINT, 250.135 194.253 -0.5 ] +store_suit_point [ 69, FRONT_DOOR_POINT, 235.135 219.253 0, 9 ] +store_suit_point [ 70, STREET_POINT, 248.135 153.253 -0.5 ] +store_suit_point [ 71, STREET_POINT, 258.135 153.253 -0.5 ] +store_suit_point [ 72, STREET_POINT, 248.135 132.253 -0.5 ] +store_suit_point [ 73, STREET_POINT, 258.135 132.253 -0.5 ] +store_suit_point [ 74, FRONT_DOOR_POINT, 217.135 132.253 0, 11 ] +store_suit_point [ 75, FRONT_DOOR_POINT, 289.135 132.253 0, 10 ] +store_suit_point [ 76, STREET_POINT, 248.135 113.253 -0.5 ] +store_suit_point [ 77, STREET_POINT, 258.135 113.253 -0.5 ] +store_suit_point [ 78, STREET_POINT, 248.135 73.253 -0.5 ] +store_suit_point [ 79, STREET_POINT, 258.135 73.253 -0.5 ] +store_suit_point [ 80, STREET_POINT, 248.135 53.253 -0.5 ] +store_suit_point [ 81, STREET_POINT, 258.135 53.253 -0.5 ] +store_suit_point [ 82, STREET_POINT, 257.135 32.253 -0.5 ] +store_suit_point [ 84, STREET_POINT, 265.135 40.253 -0.5 ] +store_suit_point [ 85, STREET_POINT, 278.135 33.253 -0.5 ] +store_suit_point [ 86, STREET_POINT, 278.135 23.253 -0.5 ] +store_suit_point [ 87, STREET_POINT, 298.135 33.253 -0.5 ] +store_suit_point [ 88, STREET_POINT, 298.135 23.253 -0.5 ] +store_suit_point [ 89, STREET_POINT, 316 23 -0.5 ] +store_suit_point [ 90, STREET_POINT, 319 -2 -0.5 ] +store_suit_point [ 95, STREET_POINT, 338 -15 -0.5 ] +store_suit_point [ 97, STREET_POINT, 378 -15 -0.5 ] +store_suit_point [ 98, STREET_POINT, 378 70 -0.5 ] +store_suit_point [ 99, FRONT_DOOR_POINT, 335 -26 0, 13 ] +store_suit_point [ 100, STREET_POINT, 398 -1 -0.5 ] +store_suit_point [ 101, STREET_POINT, 396 61 -0.5 ] +store_suit_point [ 102, STREET_POINT, 401 33 -0.5 ] +store_suit_point [ 103, STREET_POINT, 401 23 -0.5 ] +store_suit_point [ 104, STREET_POINT, 418.135 23.253 -0.5 ] +store_suit_point [ 105, STREET_POINT, 418.135 33.253 -0.5 ] +store_suit_point [ 106, STREET_POINT, 438.135 23.253 -0.5 ] +store_suit_point [ 107, STREET_POINT, 438.135 33.253 -0.5 ] +store_suit_point [ 108, STREET_POINT, 459.135 32.253 -0.5 ] +store_suit_point [ 109, STREET_POINT, 468.135 53.253 -0.5 ] +store_suit_point [ 110, STREET_POINT, 453.135 39.253 -0.5 ] +store_suit_point [ 111, STREET_POINT, 458.135 53.253 -0.5 ] +store_suit_point [ 112, FRONT_DOOR_POINT, 451.135 7.253 0, 15 ] +store_suit_point [ 113, FRONT_DOOR_POINT, 485.135 25.253 0, 25 ] +store_suit_point [ 114, FRONT_DOOR_POINT, 231.135 36.253 0, 26 ] +store_suit_point [ 115, STREET_POINT, 468.135 73.253 -0.5 ] +store_suit_point [ 116, STREET_POINT, 458.135 73.253 -0.5 ] +store_suit_point [ 117, STREET_POINT, 468.135 93.253 -0.5 ] +store_suit_point [ 118, STREET_POINT, 468.135 113.253 -0.5 ] +store_suit_point [ 119, STREET_POINT, 458.135 113.253 -0.5 ] +store_suit_point [ 120, STREET_POINT, 458.135 93.253 -0.5 ] +store_suit_point [ 121, FRONT_DOOR_POINT, 427.49 105.111 0, 16 ] +store_suit_point [ 122, STREET_POINT, 468.135 130.253 -0.5 ] +store_suit_point [ 123, STREET_POINT, 458.135 130.253 -0.5 ] +store_suit_point [ 124, FRONT_DOOR_POINT, 499 131 0, 17 ] +store_suit_point [ 125, STREET_POINT, 468.135 153.253 -0.5 ] +store_suit_point [ 126, STREET_POINT, 458.135 153.253 -0.5 ] +store_suit_point [ 127, STREET_POINT, 468.135 173.253 -0.5 ] +store_suit_point [ 128, STREET_POINT, 458.135 173.253 -0.5 ] +store_suit_point [ 133, STREET_POINT, 474.135 187.253 -0.5 ] +store_suit_point [ 134, STREET_POINT, 488.135 193.253 -0.5 ] +store_suit_point [ 135, STREET_POINT, 488.135 203.253 -0.5 ] +store_suit_point [ 136, STREET_POINT, 468.135 195.253 -0.5 ] +store_suit_point [ 137, FRONT_DOOR_POINT, 442.135 186.253 0, 18 ] +store_suit_point [ 138, STREET_POINT, 495.135 193.253 -0.5 ] +store_suit_point [ 139, STREET_POINT, 528.135 193.253 -0.5 ] +store_suit_point [ 140, STREET_POINT, 528.135 203.253 -0.5 ] +store_suit_point [ 141, STREET_POINT, 495.135 203.253 -0.5 ] +store_suit_point [ 142, FRONT_DOOR_POINT, 495.135 219.253 0, 19 ] +store_suit_point [ 143, STREET_POINT, 542.135 193.253 -0.5 ] +store_suit_point [ 144, STREET_POINT, 568.135 193.253 -0.5 ] +store_suit_point [ 145, STREET_POINT, 568.135 203.253 -0.5 ] +store_suit_point [ 146, STREET_POINT, 542.135 203.253 -0.5 ] +store_suit_point [ 147, FRONT_DOOR_POINT, 542.135 177.253 0, 20 ] +store_suit_point [ 148, STREET_POINT, 583.135 187.253 -0.5 ] +store_suit_point [ 149, STREET_POINT, 588.135 173.253 -0.5 ] +store_suit_point [ 150, STREET_POINT, 598.135 173.253 -0.5 ] +store_suit_point [ 151, STREET_POINT, 589.135 194.253 -0.5 ] +store_suit_point [ 152, FRONT_DOOR_POINT, 572 219 0, 21 ] +store_suit_point [ 153, STREET_POINT, 588.135 161.253 -0.5 ] +store_suit_point [ 154, STREET_POINT, 588.135 133.253 -0.5 ] +store_suit_point [ 155, STREET_POINT, 598.135 133.253 -0.5 ] +store_suit_point [ 156, STREET_POINT, 598.135 161.253 -0.5 ] +store_suit_point [ 157, FRONT_DOOR_POINT, 614.135 161.253 0, 22 ] +store_suit_point [ 158, STREET_POINT, 588.135 113.253 -0.5 ] +store_suit_point [ 159, STREET_POINT, 578.135 113.253 -0.5 ] +store_suit_point [ 160, STREET_POINT, 578 104 -0.5 ] +store_suit_point [ 162, STREET_POINT, 586 104 -0.5 ] +store_suit_point [ 163, STREET_POINT, 618 104 -0.5 ] +store_suit_point [ 164, STREET_POINT, 618.135 113.253 -0.5 ] +store_suit_point [ 165, STREET_POINT, 598.135 113.253 -0.5 ] +store_suit_point [ 166, FRONT_DOOR_POINT, 562.135 101.253 0, 24 ] +store_suit_point [ 167, FRONT_DOOR_POINT, 586.135 57.253 0, 23 ] +store_suit_point [ 170, STREET_POINT, 89.1355 193.253 -0.5 ] +store_suit_point [ 172, STREET_POINT, -30.8645 33.253 -0.5 ] +store_suit_point [ 173, STREET_POINT, -30.8645 23.253 -0.5 ] +store_suit_point [ 174, STREET_POINT, 209.135 203.253 -0.5 ] +store_suit_point [ 175, SIDE_DOOR_POINT, -28 3 0, 2 ] +store_suit_point [ 176, SIDE_DOOR_POINT, -25.8645 73.253 0, 1 ] +store_suit_point [ 177, SIDE_DOOR_POINT, 46.1355 3.25299 0, 3 ] +store_suit_point [ 178, SIDE_DOOR_POINT, 4.13549 103.253 0, 4 ] +store_suit_point [ 179, SIDE_DOOR_POINT, 83.8825 90.3885 0, 5 ] +store_suit_point [ 180, SIDE_DOOR_POINT, 29 223 0, 6 ] +store_suit_point [ 181, SIDE_DOOR_POINT, 182 238 0, 7 ] +store_suit_point [ 182, SIDE_DOOR_POINT, 122.135 158.253 0, 8 ] +store_suit_point [ 183, SIDE_DOOR_POINT, 218.999 223 0, 9 ] +store_suit_point [ 184, SIDE_DOOR_POINT, 213.135 103.253 0, 11 ] +store_suit_point [ 185, SIDE_DOOR_POINT, 278.135 183.253 0, 10 ] +store_suit_point [ 186, SIDE_DOOR_POINT, 268.135 3.2527 0, 26 ] +store_suit_point [ 187, SIDE_DOOR_POINT, 306 -30 0, 13 ] +store_suit_point [ 188, SIDE_DOOR_POINT, 428.435 3.25271 0, 15 ] +store_suit_point [ 189, SIDE_DOOR_POINT, 488.135 43.2527 0, 25 ] +store_suit_point [ 190, SIDE_DOOR_POINT, 423.135 146.253 0, 16 ] +store_suit_point [ 191, SIDE_DOOR_POINT, 503.135 103.253 0, 17 ] +store_suit_point [ 192, SIDE_DOOR_POINT, 438.135 163.253 0, 18 ] +store_suit_point [ 193, SIDE_DOOR_POINT, 510.135 223.253 0, 19 ] +store_suit_point [ 194, SIDE_DOOR_POINT, 495.135 173.253 0, 20 ] +store_suit_point [ 195, SIDE_DOOR_POINT, 535.135 223.253 0, 21 ] +store_suit_point [ 196, SIDE_DOOR_POINT, 618.135 195.253 0, 22 ] +store_suit_point [ 197, SIDE_DOOR_POINT, 568.135 140.253 0, 24 ] +store_suit_point [ 198, SIDE_DOOR_POINT, 558.135 85.2527 0, 23 ] +store_suit_point [ 199, STREET_POINT, 338 70 -0.5 ] +store_suit_point [ 200, STREET_POINT, 319 59 -0.5 ] +store_suit_point [ 201, STREET_POINT, 316 33 -0.5 ] +group "daisysGarden" [ + visgroup "5102" [ + vis [ "5102" "5103" "5104" "5105" "5106" ] + suit_edge [ 7 172 ] + suit_edge [ 172 173 ] + suit_edge [ 173 5 ] + suit_edge [ 175 173 ] + suit_edge [ 173 175 ] + suit_edge [ 176 172 ] + suit_edge [ 172 176 ] + battle_cell [ 20 20 -30.865 28.253 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ -60.86 3.25 7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -60.86 53.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -40.86 53.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -60.86 73.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -50.86 73.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 12.86 -1.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 11.86 -18.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 6.86 -31.25 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -20.86 73.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.5 -0.25 8.25 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 12 -0.25 8 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ -45.86 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ -60.86 3.25 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.92 0.56 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -60.86 8.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.92 0.56 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -80.86 48.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ -20.86 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.14 0.25 0 ] + nhpr [ -0 0 -0 ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ -35.86 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 7.14 -13.75 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -30.86 73.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -1.14 -0.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -60.86 48.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.92 0.56 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.92 0.56 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 8.75 -0.86 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + ] + group "props" [ + prop "linktunnel_dg_5000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -60.8 8.2 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 -2.25 ] + scale [ 1.6 1 1.6 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.94 ] + scale [ 1.5 1 1.5 ] + width [ 40.9216 ] + height [ 40.9216 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.8 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "daisySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.85 ] + scale [ 0.8 1 0.8 ] + width [ 33.5514 ] + height [ 33.5514 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -55.0779 36.6589 -0.5 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "5103" [ + vis [ "5103" "5102" "5104" "5105" "5106" "5107" "5108" "5109" "5110" ] + suit_edge [ 5 8 ] + suit_edge [ 8 9 ] + suit_edge [ 10 11 ] + suit_edge [ 11 7 ] + suit_edge [ 8 12 ] + suit_edge [ 12 8 ] + suit_edge [ 11 12 ] + suit_edge [ 12 11 ] + suit_edge [ 11 13 ] + suit_edge [ 13 11 ] + suit_edge [ 8 13 ] + suit_edge [ 13 8 ] + battle_cell [ 20 20 0.135086 28.2527 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 19.14 53.25 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random25_DNARoot" [ + pos [ 19.14 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 4.14 -12.75 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ -20.86 53.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.86 -1.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.75 -0.21 8 ] + nhpr [ -0 -1 -0 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ 4.14 53.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.53 -0.09 17.72 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.49 -0.15 17.7 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb2:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Artie Choke's Neckties" ] + pos [ 7.14 3.25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.14978 1.14978 1.14978 ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -1.49 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.4 1 1.4 ] + kern [ 0.04974 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.733333 0 0.368627 1 ] + pos [ 0 0 -1.58 ] + scale [ 1.3 1 1.3 ] + kern [ 0.076609 ] + width [ 26.9702 ] + height [ 26.9702 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb1:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Eye of the Potato Optometry" ] + pos [ -10.86 55.25 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.513455 -3.23956 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.38222 1.38222 1.38222 ] + color [ 0.48 1 0.7 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0.06 0 0.33 ] + nhpr [ -0 0 -2 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.22 0 0.72 ] + scale [ 1.1 1 1 ] + kern [ 0.024784 ] + width [ 23.8629 ] + height [ 23.8629 ] + flags [ "bd" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.06 ] + scale [ 1 1 0.8 ] + width [ 16.0133 ] + height [ 16.0133 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5104" [ + vis [ "5104" "5102" "5103" "5105" "5106" "5107" "5108" "5109" "5110" ] + suit_edge [ 9 14 ] + suit_edge [ 14 15 ] + suit_edge [ 16 10 ] + suit_edge [ 17 16 ] + suit_edge [ 14 18 ] + suit_edge [ 18 14 ] + suit_edge [ 16 18 ] + suit_edge [ 18 16 ] + suit_edge [ 177 14 ] + suit_edge [ 14 177 ] + suit_edge [ 177 16 ] + suit_edge [ 16 177 ] + battle_cell [ 20 20 40 40 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 59.14 53.25 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random25_DNARoot" [ + pos [ 39.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 8.88 -1.9 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 69.14 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 4.14 -1.75 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 69.14 53.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 5.23 -44.79 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 69.14 43.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 1.34 -11.94 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 9.81 -1.28 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 54.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 1 -12 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.72232 0.250004 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.763914 0.763914 0.763914 ] + color [ 0.78 0.55 0.65 1 ] + ] + ] + landmark_building "tb3:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Lettuce Alone" ] + pos [ 69.32 28.75 0.29 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.527859 -3.10708 -0.29 ] + nhpr [ -0 0 -0 ] + scale [ 1.37455 1.37455 1.37455 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 0.85 ] + nhpr [ -0 0 -1 ] + scale [ 0.8 1 0.5 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.17 0 0.71 ] + scale [ 0.7 1 1.1 ] + kern [ 0.070127 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.14 ] + scale [ 0.7 1 0.9 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 69.14 13.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.266667 1 0.419608 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5105" [ + vis [ "5105" "5102" "5103" "5104" "5106" "5107" "5108" "5109" "5110" "5111" ] + suit_edge [ 15 19 ] + suit_edge [ 20 17 ] + battle_cell [ 20 20 44 63 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 19.14 73.25 -3.05176e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random25_DNARoot" [ + pos [ 19.14 53.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10 -1.5 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 12.21 -0.06 7.55 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 5.1 -0.06 7.52 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 5.19 -0.13 18 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 11.7 -0.09 17.94 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 69.14 73.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.517647 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 10.5 -10 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 29.4209 68.0042 -3.0607e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5106" [ + vis [ "5106" "5102" "5103" "5104" "5105" "5107" "5108" "5109" "5110" "5111" ] + suit_edge [ 19 21 ] + suit_edge [ 22 20 ] + suit_edge [ 178 22 ] + suit_edge [ 22 178 ] + suit_edge [ 178 21 ] + suit_edge [ 21 178 ] + suit_edge [ 179 21 ] + suit_edge [ 21 179 ] + suit_edge [ 179 22 ] + suit_edge [ 22 179 ] + battle_cell [ 20 20 44 98 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 79.14 73.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random25_DNARoot" [ + pos [ 19.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 84.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 84.14 118.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.25 -3.14 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.9 1.9 1.9 ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 4.14 73.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 7 -12 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 15.75 -25.86 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 84.14 98.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 16 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 8.25 -26.14 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.09538 -0.137032 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.832259 0.832259 0.832259 ] + color [ 0 1 0.99 1 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 84.14 83.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 4.14 93.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.99999 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.10365 1.10365 1.10365 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5107" [ + vis [ "5107" "5106" "5105" "5104" "5103" "5108" "5109" "5110" "5111" "5112" "5113" ] + suit_edge [ 21 23 ] + suit_edge [ 23 24 ] + suit_edge [ 25 26 ] + suit_edge [ 26 22 ] + suit_edge [ 23 27 ] + suit_edge [ 27 23 ] + suit_edge [ 26 27 ] + suit_edge [ 27 26 ] + suit_edge [ 26 28 ] + suit_edge [ 28 26 ] + suit_edge [ 23 28 ] + suit_edge [ 28 23 ] + battle_cell [ 20 20 44 128 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 9.14 153.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random25_DNARoot" [ + pos [ 4.14 133.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.75 -1.86 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 9 -11 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 4.75 -25.86 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 69.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 0.86 -13.25 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 4.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 84.14 153.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.25 -2.14 0 ] + nhpr [ 180 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 15.25 -26.14 0 ] + nhpr [ 180 0 -0 ] + ] + ] + landmark_building "tb5:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Vege-tables and Chairs" ] + pos [ 84.14 139.25 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -1.45 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ -0.12 0 1.06 ] + scale [ 0.7 1 0.8 ] + kern [ 0.068644 ] + flags [ "d" ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.09 ] + scale [ 0.7 1 0.8 ] + kern [ 0.101393 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb4:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Cantaloupe Bridal Shop" ] + pos [ 3.14 114.25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.517647 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.49999 -3.00001 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.842064 0.842064 0.842064 ] + color [ 0.678431 0.419608 0.737255 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -4.79 ] + nhpr [ -0 0 -3 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.666667 0.333333 0 1 ] + pos [ 0 0 1.19 ] + scale [ 0.8 1 1.1 ] + kern [ 0.02321 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.776471 0 0.776471 1 ] + pos [ 0 0 -0.03 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "b" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5108" [ + vis [ "5108" "5107" "5106" "5104" "5105" "5103" "5109" "5110" "5111" "5112" "5113" "5114" "5115" ] + suit_edge [ 24 29 ] + suit_edge [ 30 25 ] + battle_cell [ 20 20 44.1351 163.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 69.14 153.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random25_DNARoot" [ + pos [ 69.14 173.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 13 -10 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 19.14 153.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 17 -10 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5109" [ + vis [ "5109" "5108" "5107" "5106" "5105" "5104" "5103" "5110" "5111" "5112" "5113" "5114" "5115" "5116" ] + suit_edge [ 29 31 ] + suit_edge [ 31 32 ] + suit_edge [ 33 34 ] + suit_edge [ 34 30 ] + suit_edge [ 34 35 ] + suit_edge [ 35 34 ] + suit_edge [ 31 35 ] + suit_edge [ 35 31 ] + suit_edge [ 180 34 ] + suit_edge [ 34 180 ] + suit_edge [ 180 31 ] + suit_edge [ 31 180 ] + battle_cell [ 20 20 54 193 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 29.14 173.25 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random25_DNARoot" [ + pos [ 19.14 198.25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4.75 -1.86 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ -18 -44 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 0.43 -12.31 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 19.14 208.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.73 -0.02 7.54 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.53 -0.03 7.52 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.2 -0.02 18.11 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.49 -0.05 18.07 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 4.88 -1.16 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 39.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 19.29 -8.98 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -15.2838 -0.159256 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.10167 1.10167 1.10167 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 59.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 19.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Petals" ] + pos [ 19 171 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.517647 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.95996 -2.98726 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.993282 0.993282 0.993282 ] + color [ 0.678431 0.419608 0.737255 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ -0.88 0 0.09 ] + nhpr [ -0 0 -1 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.372549 0.372549 0.686275 1 ] + pos [ 0.26 0 -1.29 ] + scale [ 2.8 1 2.7 ] + kern [ 0.208124 ] + width [ 32.4254 ] + height [ 32.4254 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 49.8546 207.965 -7.689e-006 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "5110" [ + vis [ "5110" "5109" "5108" "5107" "5106" "5105" "5104" "5103" "5111" "5112" "5113" "5114" "5115" "5116" ] + suit_edge [ 32 170 ] + suit_edge [ 58 33 ] + battle_cell [ 20 20 79 198 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 69.14 173.25 1.33514e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random25_DNARoot" [ + pos [ 89.14 173.25 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 69.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 5.36 -0.04 7.05 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 12 -0.05 6.99 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 85.011 184.057 1.33514e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "5111" [ + vis [ "5111" "5110" "5109" "5108" "5107" "5106" "5105" "5112" "5113" "5114" "5115" "5116" "5117" "5103" "5139" ] + suit_edge [ 39 40 ] + suit_edge [ 40 41 ] + suit_edge [ 42 43 ] + suit_edge [ 43 44 ] + suit_edge [ 44 58 ] + suit_edge [ 170 39 ] + suit_edge [ 182 39 ] + suit_edge [ 39 182 ] + suit_edge [ 182 44 ] + suit_edge [ 44 182 ] + battle_cell [ 20 20 112 198 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 89.14 163.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random25_DNARoot" [ + pos [ 89 238 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 13 -24 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 109 238 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.74902 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 14 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ -4 -12 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb8:random_DNARoot" [ + pos [ 114.14 158.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 99.14 158.25 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -2.86 -23.75 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 89.14 223.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 89.14 158.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 129.13 158.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 19.14 -9.75 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.50002 0.499998 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00223 1.00223 1.00223 ] + color [ 0.22 0.58 0.65 1 ] + ] + ] + ] + visgroup "5112" [ + vis [ "5112" "5111" "5110" "5109" "5108" "5107" "5113" "5114" "5115" "5116" "5117" "5139" ] + suit_edge [ 41 46 ] + suit_edge [ 46 47 ] + suit_edge [ 48 49 ] + suit_edge [ 49 42 ] + suit_edge [ 49 50 ] + suit_edge [ 50 49 ] + suit_edge [ 46 50 ] + suit_edge [ 50 46 ] + battle_cell [ 20 20 150 213 -0.5 ] + group "streets" [ + street "street_divided_40x70_DNARoot" [ + code [ "street_divided_40x70" ] + pos [ 129.14 163.25 -7.62939e-006 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 129.14 163.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 149.14 163.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 129.14 243.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 149.14 243.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 159.14 133.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 159.14 113.25 0 ] + nhpr [ 90 -0.021399 2.5054e-006 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 159.14 93.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random25_DNARoot" [ + pos [ 154.13 238.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.517647 1 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5.87 -3.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 8 -39 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -4 -39 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -16 -39 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 2 -39 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -10 -39 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + landmark_building "tb7:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Compost Office" ] + pos [ 128.13 238.25 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 7.99999 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.17347 1.17347 1.17347 ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -0.28 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.29 ] + scale [ 1.5 1 1.3 ] + kern [ 0.039322 ] + width [ 36.1533 ] + height [ 36.1533 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.67 ] + scale [ 1.3 1 1.3 ] + kern [ 0.132723 ] + width [ 58.6958 ] + height [ 58.6958 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + landmark_building "tb8:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Mom and Pop Corn" ] + pos [ 190 158 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.87001 -2.74998 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.84398 0.84398 0.84398 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -4.22 ] + scale [ 1.4 1 1.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.19 0 0.76 ] + scale [ 0.9 1 0.9 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.08 ] + scale [ 1.1 1 1 ] + kern [ 0.051746 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 159.14 158.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.89 0.7 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.89 0.7 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4.703 -1.58001 0 ] + nhpr [ 9.50016e-014 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 159.14 148.25 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.8 0.53 1 1 ] + ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 159.14 123.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 8.296 -1.305 0 ] + nhpr [ 2.03556e-013 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 159.14 113.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 139.14 123.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 139.14 108.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 6.881 -1.191 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 139.14 93.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.92 0.56 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 159.14 93.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 124.14 93.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 174.14 158.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 14.14 -11.75 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 139.14 158.25 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 139.14 143.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9.99999 -1.323 0 ] + nhpr [ -180 0.0321975 5.62959e-009 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 153.637 227.24 -7.689e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "5113" [ + vis [ "5113" "5112" "5111" "5110" "5109" "5108" "5107" "5114" "5115" "5116" "5117" "5118" "5119" "5139" ] + suit_edge [ 47 51 ] + suit_edge [ 51 52 ] + suit_edge [ 53 48 ] + suit_edge [ 54 53 ] + suit_edge [ 52 57 ] + suit_edge [ 57 52 ] + suit_edge [ 54 57 ] + suit_edge [ 57 54 ] + suit_edge [ 174 54 ] + suit_edge [ 52 61 ] + suit_edge [ 181 53 ] + suit_edge [ 53 181 ] + suit_edge [ 181 51 ] + suit_edge [ 51 181 ] + battle_cell [ 20 20 186.135 198.253 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 209.14 233.25 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random25_DNARoot" [ + pos [ 209.5 158.5 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 14.14 -24.75 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 5 -6 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 209.14 173.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 194.14 238.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -1.13 -11.25 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 1.87 -23.25 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 169.14 238.25 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 7.38458 -0.223175 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.06675 1.06675 1.06675 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 209.14 238.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5114" [ + vis [ "5114" "5113" "5112" "5111" "5110" "5109" "5108" "5115" "5116" "5117" "5118" "5119" "5120" "5121" ] + suit_edge [ 61 62 ] + suit_edge [ 63 174 ] + suit_edge [ 183 174 ] + suit_edge [ 174 183 ] + suit_edge [ 183 61 ] + suit_edge [ 61 183 ] + battle_cell [ 20 20 219.135 198.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 228.189 223.25 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random25_DNARoot" [ + pos [ 229.14 173.25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 15.87 -2.05 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 8 -9 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 209.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.754177 0.754177 0.754177 ] + color [ 1 0.55 0.55 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5115" [ + vis [ "5115" "5114" "5113" "5112" "5111" "5110" "5109" "5108" "5116" "5117" "5118" "5119" "5120" "5121" ] + suit_edge [ 62 65 ] + suit_edge [ 65 66 ] + suit_edge [ 67 68 ] + suit_edge [ 68 63 ] + suit_edge [ 63 69 ] + suit_edge [ 69 63 ] + suit_edge [ 62 69 ] + suit_edge [ 69 62 ] + suit_edge [ 185 68 ] + suit_edge [ 68 185 ] + suit_edge [ 185 65 ] + suit_edge [ 65 185 ] + battle_cell [ 20 20 247.135 189.253 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 228.14 213.25 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random25_DNARoot" [ + pos [ 243.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 14 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 3 -15 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 263.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.6 1 0.678431 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.576471 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.6 1 0.678431 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.34902 1 0.4 1 ] + count [ 2 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.71 -0.13 7.5 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.5 -0.13 7.5 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 5.98 -11.02 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 2 -47 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 278.14 223.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.57 -0.07 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.57 -0.08 7 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 278.14 208.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 278.14 193.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.04449 -0.0495605 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.03306 1.03306 1.03306 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + landmark_building "tb9:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Berried Treasure" ] + pos [ 228.14 223.25 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.5 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.34645 1.34645 1.34645 ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 1.41 ] + nhpr [ -0 0 -2 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.756863 0 0.380392 1 ] + pos [ 0.25 0 -0.63 ] + scale [ 1.4 1 1.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 237.92 182.22 0 ] + nhpr [ 60 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 234.718 179.504 7.62939e-006 ] + nhpr [ 135.95 0 -0 ] + ] + ] + visgroup "5116" [ + vis [ "5116" "5115" "5114" "5113" "5112" "5111" "5110" "5109" "5117" "5118" "5119" "5120" "5121" "5122" ] + suit_edge [ 66 70 ] + suit_edge [ 71 67 ] + battle_cell [ 20 20 253.135 163.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 228.14 173.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random25_DNARoot" [ + pos [ 229.14 153.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.94 -1.88 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 278.14 173.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10.08 -2.24 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5117" [ + vis [ "5117" "5116" "5115" "5114" "5113" "5112" "5111" "5118" "5119" "5120" "5121" "5122" ] + suit_edge [ 70 72 ] + suit_edge [ 73 71 ] + suit_edge [ 72 74 ] + suit_edge [ 74 72 ] + suit_edge [ 73 74 ] + suit_edge [ 74 73 ] + suit_edge [ 73 75 ] + suit_edge [ 75 73 ] + suit_edge [ 72 76 ] + suit_edge [ 77 73 ] + battle_cell [ 20 20 254.135 128.253 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 218.14 153.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random25_DNARoot" [ + pos [ 214.14 143.25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 213.14 113.25 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 0.176471 0.776471 0.686275 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 278.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 0.3 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -10.1303 -14.25 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 214.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7.21 -1.39 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 14.87 -12.25 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 24.8698 -12.25 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb11:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Gopher's Gags" ] + pos [ 213.02 118.19 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -0.15 ] + nhpr [ -0 0 1 ] + scale [ 1.4 1 1.4 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.88 ] + scale [ 1.4 1 1.5 ] + kern [ 0.05399 ] + width [ 34.9785 ] + height [ 34.9785 ] + flags [ "bd" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 293.14 123.15 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 293.14 153.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.74902 0.698039 1 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + ] + ] + landmark_building "tb10:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Black-eyed Susan's Boxing Lessons" ] + pos [ 293.14 143.25 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.709804 0.537255 0.776471 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -4.76 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.41 0 -0.44 ] + scale [ 1.4 1 1.6 ] + width [ 51.1509 ] + height [ 51.1509 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.3 0 -1.61 ] + width [ 26.5752 ] + height [ 26.5752 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "x" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.27615 -3.15677 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.892485 0.892485 0.892485 ] + color [ 1 0.55 0.81 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 224.351 123.424 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5118" [ + vis [ "5118" "5117" "5116" "5115" "5114" "5113" "5112" "5119" "5120" "5121" "5122" "5123" "5125" ] + suit_edge [ 76 78 ] + suit_edge [ 79 77 ] + suit_edge [ 184 76 ] + suit_edge [ 76 184 ] + suit_edge [ 184 77 ] + suit_edge [ 77 184 ] + battle_cell [ 20 20 254.135 98.253 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 288.14 73.25 1.52588e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random25_DNARoot" [ + pos [ 213.14 73.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 13 -11 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 5.62643 -22.3251 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 293.1 113.2 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7.25 -2.06 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 293.14 98.25 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 7.25 -0.14 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 15.25 -0.14 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 7.96 -9.75 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 18.0796 -24.8357 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 22.73 -6.68 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 228.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 213.14 93.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 19 -4 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.27918 0.105911 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.965255 0.965255 0.965255 ] + color [ 0.22 0.58 0.65 1 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 293.14 73.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 267.682 87.938 1.52588e-005 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "5119" [ + vis [ "5119" "5118" "5117" "5116" "5115" "5114" "5113" "5120" "5121" "5122" "5123" "5124" "5125" "5126" "5127" ] + suit_edge [ 78 80 ] + suit_edge [ 81 79 ] + battle_cell [ 20 20 253.135 63.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 278.14 53.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random25_DNARoot" [ + pos [ 228.14 48.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 21.75 -1.87 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 6.71 -1.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 278.14 73.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5120" [ + vis [ "5120" "5119" "5118" "5117" "5116" "5115" "5114" "5121" "5122" "5123" "5124" "5125" "5126" "5127" "5128" ] + suit_edge [ 80 82 ] + suit_edge [ 84 81 ] + suit_edge [ 85 84 ] + suit_edge [ 82 86 ] + suit_edge [ 82 114 ] + suit_edge [ 114 82 ] + suit_edge [ 84 114 ] + suit_edge [ 114 84 ] + suit_edge [ 186 86 ] + suit_edge [ 86 186 ] + suit_edge [ 186 85 ] + suit_edge [ 85 186 ] + battle_cell [ 20 20 261.135 35.253 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 278.14 13.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random25_DNARoot" [ + pos [ 243.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb26:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Pine Needle Crafts" ] + pos [ 227.14 28.25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.43767 -3.0914 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.863594 0.863594 0.863594 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 -4.5 ] + scale [ 1 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.403922 0.0588235 0.443137 1 ] + pos [ 0 0 1.72 ] + scale [ 0.8 1 1 ] + width [ 19.8535 ] + height [ 19.8535 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.22 ] + scale [ 2.1 1 1.7 ] + kern [ 0.207605 ] + width [ 18.6331 ] + height [ 18.6331 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 278.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.09424 -0.05 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.767331 0.767331 0.767331 ] + color [ 0.22 0.58 0.65 1 ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 258.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 7.57 -1.27 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 228.14 3.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 18.14 -11.75 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 239.554 45.5477 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5121" [ + vis [ "5121" "5120" "5119" "5118" "5117" "5116" "5115" "5114" "5122" "5123" "5124" "5125" "5126" "5127" "5128" ] + suit_edge [ 87 85 ] + suit_edge [ 86 88 ] + battle_cell [ 20 20 288.135 28.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 278.14 3.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random25_DNARoot" [ + pos [ 298.14 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.39 -0.02 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.64 -0.02 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.49 -2.05 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 278.14 53.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5122" [ + vis [ "5122" "5121" "5120" "5119" "5118" "5117" "5116" "5123" "5124" "5125" "5126" "5127" "5128" "5129" ] + suit_edge [ 88 89 ] + suit_edge [ 89 90 ] + suit_edge [ 187 90 ] + suit_edge [ 90 187 ] + suit_edge [ 199 200 ] + suit_edge [ 200 201 ] + suit_edge [ 201 87 ] + suit_edge [ 90 95 ] + battle_cell [ 20 20 313.964 27.8127 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 298.14 48.25 -7.6592e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 338.14 -31.75 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 298.14 48.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random25_DNARoot" [ + pos [ 298.14 -11.75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.847059 0.909804 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 313.14 -31.75 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.63428 -0.0127258 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00505 1.00505 1.00505 ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 298.14 -31.75 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 20 -5 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 328.14 -31.75 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.34902 0.898039 0.976471 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + landmark_building "tb13:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Crop Top Barbers" ] + pos [ 343.14 -31.75 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.20798 -3.0258 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.27705 1.27705 1.27705 ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 1.27 ] + nhpr [ -0 0 -4 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.34902 0.34902 1 ] + pos [ 0 0 1.38 ] + scale [ 0.7 1 0.7 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.34902 0.34902 1 ] + pos [ 0 0 0.05 ] + scale [ 1.4 1 1.4 ] + kern [ 0.1 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 298.14 53.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 7.21921 -2.11664 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 298.14 68.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 3.99979 -8.37907 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -62.243 -81.7337 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 298.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 16.504 -8.86 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 323.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 8.8241 -7.43732 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 333.204 16.1539 -7.689e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "5123" [ + vis [ "5123" "5122" "5121" "5120" "5119" "5118" "5124" "5125" "5126" "5127" "5128" "5129" ] + suit_edge [ 95 97 ] + suit_edge [ 95 99 ] + suit_edge [ 99 95 ] + battle_cell [ 20 20 358.964 -11.1873 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 338.14 -31.75 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 338.14 48.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random25_DNARoot" [ + pos [ 368.14 -31.75 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 7.09 -0.21 8 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 7.03 -0.05 18.17 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 15.27 -0.1 18.27 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 15.2 -0.21 7.85 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 4.1759 -4.56207 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb27:toon_landmark_hqDG_DNARoot" [ + code [ "toon_landmark_hqDG" ] + building_type [ "hq" ] + title [ "" ] + pos [ 357.935 28.45 0 ] + nhpr [ 90 0 -0 ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -22.9048 22.7018 0 ] + nhpr [ 105 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 22.7018 22.9048 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 22.9048 -22.7017 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -20 1 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 19 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 0.999979 23 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -6.00002 -8 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5.99998 -8 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -8.00002 6 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7.99998 6 0 ] + nhpr [ -45 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5124" [ + vis [ "5124" "5123" "5122" "5121" "5120" "5125" "5126" "5127" ] + suit_edge [ 98 199 ] + battle_cell [ 20 20 358.964 67.8127 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 338.14 48.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random25_DNARoot" [ + pos [ 343.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 13.2468 -7.62148 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 358.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 19.8241 -1.43732 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5.8241 -1.43732 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 12.8241 -1.43793 0 ] + nhpr [ -180 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5125" [ + vis [ "5125" "5124" "5123" "5122" "5121" "5120" "5119" "5118" "5126" "5127" "5128" "5129" "5130" ] + suit_edge [ 97 100 ] + suit_edge [ 101 98 ] + suit_edge [ 102 101 ] + suit_edge [ 100 103 ] + suit_edge [ 103 104 ] + suit_edge [ 105 102 ] + battle_cell [ 20 20 397.964 27.8127 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 418.14 8.25 -9.91821e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 418.14 8.25 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 378.14 88.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random25_DNARoot" [ + pos [ 418.14 3.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.34902 0.898039 0.976471 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 4.43726 -6.17596 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb15:random25_DNARoot" [ + pos [ 388.14 -31.75 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb15:random25_DNARoot" [ + pos [ 403.14 -31.75 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ -5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 19.176 -1.56268 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 24.176 -1.56268 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 29.176 -1.56268 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 418.14 -11.75 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 418.14 -31.75 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 383.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 403.14 88.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 418.14 88.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 14.37 -7.79 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 10.7645 -19.1137 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 418.14 68.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 412.7 44.7689 -9.91821e-005 ] + nhpr [ -24.2106 0 -0 ] + ] + ] + visgroup "5126" [ + vis [ "5126" "5125" "5124" "5123" "5122" "5121" "5120" "5119" "5127" "5128" "5129" "5130" "5131" "5133" "5132" ] + suit_edge [ 104 106 ] + suit_edge [ 107 105 ] + suit_edge [ 188 104 ] + suit_edge [ 104 188 ] + suit_edge [ 188 105 ] + suit_edge [ 105 188 ] + battle_cell [ 20 20 428.135 28.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 438.14 53.25 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random25_DNARoot" [ + pos [ 438.14 3.25 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 3 -11 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.769724 0.769724 0.769724 ] + color [ 0.5 0.68 0.36 1 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 418.14 53.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5127" [ + vis [ "5127" "5126" "5125" "5124" "5123" "5122" "5121" "5120" "5119" "5128" "5129" "5130" "5131" "5132" "5133" ] + suit_edge [ 106 108 ] + suit_edge [ 108 109 ] + suit_edge [ 110 107 ] + suit_edge [ 111 110 ] + suit_edge [ 189 109 ] + suit_edge [ 109 189 ] + suit_edge [ 189 111 ] + suit_edge [ 111 189 ] + battle_cell [ 20 20 456.135 36.253 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 478.14 53.25 -0.000114441 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb15:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Bud's Bird Seed" ] + pos [ 465.14 3.25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.86 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 9.12814 -2.85922 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.987363 0.987363 0.987363 ] + color [ 1 1 0.52 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ -1.16 0 1.58 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.19 0 1.94 ] + scale [ 1.1 1 1.1 ] + width [ 9.1132 ] + height [ 9.1132 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.11 0 0.07 ] + scale [ 1.5 1 1.5 ] + kern [ 0.241888 ] + width [ 38.1854 ] + height [ 38.1854 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 488.14 53.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.22247 0.0478821 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.747895 0.747895 0.747895 ] + color [ 0.75 0.7 1 1 ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 488.14 3.25 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 10.78 -12.19 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 15.93 -1.46 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 488.14 13.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Leaf It Bees" ] + pos [ 489.14 37.25 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 0.38 ] + scale [ 1.6 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.439216 0.294118 0.705882 1 ] + pos [ 0 0 -0.34 ] + scale [ 1.6 1 1.4 ] + kern [ 0.07 ] + width [ 28.2398 ] + height [ 28.2398 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -1.57 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 460.853 19.5206 -0.000114471 ] + nhpr [ -165 0 -0 ] + ] + ] + visgroup "5128" [ + vis [ "5128" "5127" "5126" "5125" "5124" "5123" "5122" "5121" "5120" "5129" "5130" "5131" "5132" "5133" ] + suit_edge [ 108 112 ] + suit_edge [ 112 108 ] + suit_edge [ 110 112 ] + suit_edge [ 112 110 ] + suit_edge [ 110 113 ] + suit_edge [ 113 110 ] + suit_edge [ 108 113 ] + suit_edge [ 113 108 ] + suit_edge [ 109 115 ] + suit_edge [ 116 111 ] + battle_cell [ 20 20 463.135 63.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 438.14 73.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb25:random25_DNARoot" [ + pos [ 488.14 73.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 438.14 53.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10.11 -1.73 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5129" [ + vis [ "5129" "5128" "5126" "5125" "5127" "5124" "5123" "5122" "5130" "5131" "5132" "5133" "5134" ] + suit_edge [ 115 117 ] + suit_edge [ 117 118 ] + suit_edge [ 119 120 ] + suit_edge [ 120 116 ] + suit_edge [ 120 121 ] + suit_edge [ 121 120 ] + suit_edge [ 117 121 ] + suit_edge [ 121 117 ] + suit_edge [ 191 118 ] + suit_edge [ 118 191 ] + suit_edge [ 191 119 ] + suit_edge [ 119 191 ] + battle_cell [ 20 20 463.135 97.253 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 498.14 73.25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random25_DNARoot" [ + pos [ 423.14 73.25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 503.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 503.14 93.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 10.54 -11.25 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 4 -26 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 438.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -3.97 -10.1 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -12 -17 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Dew Drop Inn" ] + pos [ 422.935 95.45 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.82071 -2.9144 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.838178 0.838178 0.838178 ] + color [ 0.73 0.55 0.86 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -4.69 ] + scale [ 1.1 1 1.1 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.29 0 -0.25 ] + scale [ 2 1 1.7 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.36 0 -1.69 ] + scale [ 2 1 1.7 ] + kern [ 0.100067 ] + width [ 50 ] + height [ 50 ] + flags [ "d" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 503.14 113.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.25 -0.14 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 423.14 83.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5130" [ + vis [ "5130" "5129" "5128" "5127" "5126" "5125" "5131" "5132" "5133" "5134" "5135" ] + suit_edge [ 118 122 ] + suit_edge [ 123 119 ] + suit_edge [ 122 124 ] + suit_edge [ 124 122 ] + suit_edge [ 123 124 ] + suit_edge [ 124 123 ] + suit_edge [ 122 125 ] + suit_edge [ 126 123 ] + suit_edge [ 190 126 ] + suit_edge [ 126 190 ] + suit_edge [ 190 125 ] + suit_edge [ 125 190 ] + battle_cell [ 20 20 463.135 128.253 -0.5 ] + group "streets" [ + street "street_divided_transition_15_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 428.14 153.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random25_DNARoot" [ + pos [ 423.14 113.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 6.75 -0.08 8 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 15.42 -0.07 8 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 13.31 -2.21 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 503.14 153.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.847059 0.909804 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10.64 -1.67 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 10 -14 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 15 -26 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 488.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb18:random25_DNARoot" [ + pos [ 423.14 153.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 503.14 128.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 9.95153 -8.69006 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 423.14 138.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.44 0.96 1 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.00002 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.75136 0.75136 0.75136 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + landmark_building "tb17:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Flutterby's Butterflies" ] + pos [ 503.14 138.25 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.999969 -3.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.25717 1.25717 1.25717 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.72 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.415686 0.207843 1 ] + pos [ 0 0 0.2 ] + scale [ 1 1 1.5 ] + kern [ 0.060811 ] + width [ 28.2398 ] + height [ 28.2398 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 446.665 138.295 0 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "5131" [ + vis [ "5131" "5130" "5129" "5128" "5127" "5126" "5125" "5132" "5133" "5134" "5135" ] + suit_edge [ 125 127 ] + suit_edge [ 128 126 ] + suit_edge [ 192 128 ] + suit_edge [ 128 192 ] + suit_edge [ 192 127 ] + suit_edge [ 127 192 ] + battle_cell [ 20 20 463.135 163.253 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 438.14 173.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random25_DNARoot" [ + pos [ 488.14 173.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10 -1 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 14 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb18:random25_DNARoot" [ + pos [ 438.14 153.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 3.20718 -2.00931 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.41083 -0.0594788 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.777768 0.777768 0.777768 ] + color [ 0.76 0.4 0.58 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5132" [ + vis [ "5132" "5131" "5130" "5129" "5128" "5127" "5126" "5133" "5134" "5135" "5136" ] + suit_edge [ 127 133 ] + suit_edge [ 133 134 ] + suit_edge [ 135 136 ] + suit_edge [ 136 128 ] + suit_edge [ 136 137 ] + suit_edge [ 137 136 ] + suit_edge [ 133 137 ] + suit_edge [ 137 133 ] + battle_cell [ 20 20 470.135 190.253 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 448.14 173.25 -5.34058e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random25_DNARoot" [ + pos [ 438.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 448.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 13.25 -1.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 463.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -11.81 -2.01 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 9.4 -8.51 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 20 -13 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb18:random25_DNARoot" [ + pos [ 438.14 198.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 16.43 -1.3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 16.58 -9.88 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 1 -17 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 9.88 -1.11 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb18:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Peas and Q's" ] + pos [ 438.14 172.25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.8 0.54 0.61 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 9.12007 -2.83185 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00349 1.00349 1.00349 ] + color [ 0.729412 0.54902 0.858824 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 1.49 ] + scale [ 1.3 1 1.5 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.15 0 0.63 ] + scale [ 1 1 0.9 ] + kern [ 0.049561 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + scale [ 0.7 1 0.6 ] + kern [ 0.021609 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 481.595 179.233 -5.34654e-005 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "5133" [ + vis [ "5133" "5132" "5131" "5130" "5129" "5128" "5127" "5126" "5134" "5135" "5136" "5137" "5138" ] + suit_edge [ 134 138 ] + suit_edge [ 138 139 ] + suit_edge [ 140 141 ] + suit_edge [ 141 135 ] + suit_edge [ 141 142 ] + suit_edge [ 142 141 ] + suit_edge [ 138 142 ] + suit_edge [ 142 138 ] + suit_edge [ 193 140 ] + suit_edge [ 140 193 ] + suit_edge [ 193 139 ] + suit_edge [ 139 193 ] + suit_edge [ 194 138 ] + suit_edge [ 138 194 ] + suit_edge [ 194 141 ] + suit_edge [ 141 194 ] + battle_cell [ 20 20 507.135 198.253 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 488.14 173.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random25_DNARoot" [ + pos [ 513.14 173.25 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 503.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.52893 0.0553894 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.01974 1.01974 1.01974 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 503.14 173.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.34902 0.898039 0.976471 1 ] + count [ 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -1 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ -1 -11 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.763533 0.763533 0.763533 ] + color [ 0 1 0.99 1 ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 528.14 173.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.25 0.96 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7 -2 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 11 -10 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 518.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.517647 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 3.75 -1.75 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ -13 -11 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb19:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Jack's Beanstalks" ] + pos [ 488.14 223.25 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.0969849 -3.29645 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.35933 1.35933 1.35933 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 1.55 ] + nhpr [ -0 0 -1 ] + scale [ 0.8 1 0.5 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.423529 0.211765 1 ] + pos [ 0.33 0 -0.78 ] + scale [ 1.5 1 2 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5134" [ + vis [ "5134" "5133" "5132" "5131" "5130" "5129" "5135" "5136" "5137" "5138" ] + suit_edge [ 139 143 ] + suit_edge [ 143 144 ] + suit_edge [ 145 146 ] + suit_edge [ 146 140 ] + suit_edge [ 143 147 ] + suit_edge [ 147 143 ] + suit_edge [ 146 147 ] + suit_edge [ 147 146 ] + suit_edge [ 195 146 ] + suit_edge [ 146 195 ] + suit_edge [ 195 143 ] + suit_edge [ 143 195 ] + battle_cell [ 20 20 549.135 198.253 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 528.14 173.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random25_DNARoot" [ + pos [ 583.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 5 -10 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 568.14 173.25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.388235 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 6 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ -0.06 -9.76 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 543.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 17 -11 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb20:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Rake It Inn" ] + pos [ 556.14 173.25 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.13715 -2.81415 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.13427 1.13427 1.13427 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ -0.35 0 -0.8 ] + scale [ 1.4 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.27 0 -0.44 ] + scale [ 2.1 1 2 ] + kern [ 0.2 ] + width [ 20.6556 ] + height [ 20.6556 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.55 0 -1.57 ] + scale [ 1.5 1 1 ] + kern [ 0.145724 ] + width [ 17.1221 ] + height [ 17.1221 ] + flags [ "d" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 528.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.61884 -0.237244 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.81899 0.81899 0.81899 ] + color [ 1 0.55 0.55 1 ] + ] + ] + landmark_building "tb21:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Grape Expectations" ] + pos [ 558.14 223.25 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.517647 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.68085 -3.26753 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.07557 1.07557 1.07557 ] + color [ 0.6 0.5 0.71 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 1.2 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.06 0 1.82 ] + scale [ 1.2 1 1 ] + kern [ 0.034552 ] + width [ 8.99014 ] + height [ 8.99014 ] + flags [ "d" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.07 0 0.54 ] + scale [ 1.2 1 1.1 ] + kern [ 0.225677 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.11 ] + scale [ 0.8 1 0.7 ] + width [ 24.0657 ] + height [ 24.0657 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 544.26 215.376 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "5135" [ + vis [ "5135" "5134" "5133" "5132" "5131" "5130" "5136" "5137" "5138" ] + suit_edge [ 144 148 ] + suit_edge [ 148 149 ] + suit_edge [ 150 151 ] + suit_edge [ 151 145 ] + suit_edge [ 145 152 ] + suit_edge [ 152 145 ] + suit_edge [ 144 152 ] + suit_edge [ 152 144 ] + suit_edge [ 196 151 ] + suit_edge [ 151 196 ] + suit_edge [ 196 148 ] + suit_edge [ 148 196 ] + battle_cell [ 20 20 586.135 190.253 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 568.14 213.25 1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random25_DNARoot" [ + pos [ 593.14 223.25 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.96 -3 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 21.8 -10.09 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 618.14 223.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 618.14 188.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 13 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 618.14 203.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.44 0.96 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.49994 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.01257 1.01257 1.01257 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 595.403 201.543 1.52588e-005 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "5136" [ + vis [ "5136" "5135" "5133" "5134" "5132" "5137" "5138" ] + suit_edge [ 149 153 ] + suit_edge [ 153 154 ] + suit_edge [ 155 156 ] + suit_edge [ 156 150 ] + suit_edge [ 156 157 ] + suit_edge [ 157 156 ] + suit_edge [ 153 157 ] + suit_edge [ 157 153 ] + suit_edge [ 197 154 ] + suit_edge [ 154 197 ] + suit_edge [ 197 155 ] + suit_edge [ 155 197 ] + battle_cell [ 20 20 593.135 152.253 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 568.14 173.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random25_DNARoot" [ + pos [ 568.14 148.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 618.14 148.25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 8.19 -1.96 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb24:random25_DNARoot" [ + pos [ 568.14 133.25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.49188 0.0102539 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.776362 0.776362 0.776362 ] + color [ 0.78 0.55 0.65 1 ] + ] + ] + landmark_building "tb22:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Petal Pusher Bicycles" ] + pos [ 618.14 173.25 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -1.33 ] + nhpr [ -0 0 3 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0.16 0 0.67 ] + scale [ 0.9 1 1 ] + stumble [ 0.036566 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 -0.06 ] + scale [ 1.1 1 0.9 ] + kern [ 0.031213 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 577.73 165.013 0 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "5137" [ + vis [ "5137" "5136" "5135" "5134" "5133" "5138" ] + suit_edge [ 154 158 ] + suit_edge [ 158 159 ] + suit_edge [ 159 160 ] + suit_edge [ 162 163 ] + suit_edge [ 163 164 ] + suit_edge [ 164 165 ] + suit_edge [ 165 155 ] + suit_edge [ 160 166 ] + suit_edge [ 166 160 ] + suit_edge [ 162 167 ] + suit_edge [ 167 162 ] + suit_edge [ 160 162 ] + suit_edge [ 198 160 ] + suit_edge [ 160 198 ] + battle_cell [ 20 20 593.135 109.253 -0.5 ] + group "streets" [ + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ 593.14 88.25 -6.10352e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ 593.14 98.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ 603.14 98.25 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ 593.14 98.25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random25_DNARoot" [ + pos [ 558.14 133.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb24:random25_DNARoot" [ + pos [ 558.14 108.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 18 -19 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -14.9996 -12.96 -6.10352e-005 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 13 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 558.14 53.25 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 7.98 -8.04 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 613.14 53.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 638.14 53.25 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 35.34 -11.76 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 24.34 -1.76 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 638.14 73.25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 11.02 -9.96 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -12 -11.04 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 618.14 133.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 10.18 -20.6 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -9 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 8 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ -19.04 -40 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 638.14 133.25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 558.14 73.25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 1 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.78804 -0.0388794 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.764309 0.764309 0.764309 ] + color [ 1 0.62 0.85 1 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 573.14 53.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + landmark_building "tb23:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Bubble Bird Baths" ] + pos [ 601.14 53.25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.06134 -3.01748 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.15108 1.15108 1.15108 ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -0.72 ] + scale [ 1.5 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.372549 0.372549 0.686275 1 ] + pos [ 0.33 0 -0.8 ] + scale [ 1.5 1 1.7 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb24:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Mum's the Word" ] + pos [ 558 95 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.541161 -3.07526 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.31499 1.31499 1.31499 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.71 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + pos [ 0.03 0 1.95 ] + scale [ 1.1 1 1.1 ] + kern [ 0.085268 ] + width [ 38.0807 ] + height [ 38.0807 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 0.85 ] + scale [ 1.2 1 1 ] + kern [ 0.085103 ] + width [ 58.1598 ] + height [ 58.1598 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.356863 0.180392 1 ] + pos [ 0 0 -0.17 ] + width [ 28.6961 ] + height [ 28.6961 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 567.387 114.748 -6.1065e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5138" [ + vis [ "5138" "5137" "5136" "5135" "5134" "5133" ] + battle_cell [ 20 20 660 100 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 678.14 123.25 7.62939e-006 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random25_DNARoot" [ + pos [ 653.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 6 -10 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -8.96008 -4 7.62939e-006 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 678.14 73.25 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb23:random25_DNARoot" [ + pos [ 678.14 78.25 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 638.14 123.25 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 668.14 123.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.43 -0.04 7.57 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 678.14 123.25 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb22:random25_DNARoot" [ + pos [ 658.14 123.25 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 3.96 -3 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + prop "linktunnel_tt_2131_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 678.14 98.25 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.04 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.91 ] + scale [ 0.8 1 0.8 ] + width [ 40.8764 ] + height [ 40.8764 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + pos [ 0 0 1.66 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 678.14 118.25 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 683.14 78.25 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 672.727 89.7658 -0.499995 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "5139" [ + vis [ "5139" "5112" "5113" "5111" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 148.7 19.8 0 ] + nhpr [ -11 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 135.442 56.7881 0.407465 ] + nhpr [ -135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 162.961 57.4756 0.360527 ] + nhpr [ 150 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 135 30 0.474173 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 163.864 28.8638 0.594801 ] + nhpr [ 45 0 -0 ] + ] + ] + group "props" [ + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 181.414 81.5706 0.359131 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 125.699 82.6492 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 115.142 20.3243 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 183.554 17.3509 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 150 5 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.32843 1.32843 1.32843 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 188.752 43.5515 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 112.411 46.4132 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 125.757 -24.8955 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 160 -50 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.24036 1.24036 1.24036 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 189.132 -60.926 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 110 -50 0 ] + nhpr [ 150 0.11499 -0 ] + scale [ 1.18024 1.18024 1.18024 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 180 -80 0 ] + nhpr [ 149.814 -3.87875 -2.33811 ] + scale [ 1.68483 1.68483 1.68483 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 186.268 -0.924725 0.320466 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 114.494 -3.03658 0.320466 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 95 60 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.38012 1.38012 1.38012 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 202.639 75.6371 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.52874 1.52874 1.52874 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 85.7464 20.4003 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 213.674 16.4914 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.29267 1.29267 1.29267 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 177.438 41.1602 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 120.616 41.3287 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 170.776 86.9365 0.359131 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 157.819 78.25 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 140.186 78.1833 0 ] + nhpr [ -90 -0.0200133 -2.22603e-009 ] + ] + ] + street "street_DG_pond_DNARoot" [ + code [ "street_DG_pond" ] + pos [ 149.14 43.25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/daisys_garden_5200.dna b/ttmodels/src/dna/daisys_garden_5200.dna new file mode 100644 index 00000000..f618377e --- /dev/null +++ b/ttmodels/src/dna/daisys_garden_5200.dna @@ -0,0 +1,11847 @@ +store_suit_point [ 0, STREET_POINT, 5 30 -0.5 ] +store_suit_point [ 1, STREET_POINT, 5 20 -0.5 ] +store_suit_point [ 2, STREET_POINT, 20 20 -0.5 ] +store_suit_point [ 3, STREET_POINT, 30 20 -0.5 ] +store_suit_point [ 4, STREET_POINT, 45 20 -0.5 ] +store_suit_point [ 5, STREET_POINT, 45 30 -0.5 ] +store_suit_point [ 6, STREET_POINT, 30 30 -0.5 ] +store_suit_point [ 7, STREET_POINT, 20 30 -0.5 ] +store_suit_point [ 8, FRONT_DOOR_POINT, 20 4 0, 25 ] +store_suit_point [ 9, FRONT_DOOR_POINT, 30 47 0, 26 ] +store_suit_point [ 10, STREET_POINT, 60 15 -0.5 ] +store_suit_point [ 11, STREET_POINT, 65 0 -0.5 ] +store_suit_point [ 12, STREET_POINT, 75 0 -0.5 ] +store_suit_point [ 13, STREET_POINT, 67 22 -0.5 ] +store_suit_point [ 14, STREET_POINT, 65 -12 -0.5 ] +store_suit_point [ 15, STREET_POINT, 65 -23 -0.5 ] +store_suit_point [ 16, STREET_POINT, 65 -40 -0.5 ] +store_suit_point [ 17, STREET_POINT, 75 -40 -0.5 ] +store_suit_point [ 18, STREET_POINT, 75 -23 -0.5 ] +store_suit_point [ 19, STREET_POINT, 75 -12 -0.5 ] +store_suit_point [ 20, FRONT_DOOR_POINT, 92 -12 0, 27 ] +store_suit_point [ 21, FRONT_DOOR_POINT, 49 -23 0, 1 ] +store_suit_point [ 22, STREET_POINT, 75 -60 -0.5 ] +store_suit_point [ 23, STREET_POINT, 95 -70 -0.5 ] +store_suit_point [ 24, STREET_POINT, 95 -60 -0.5 ] +store_suit_point [ 25, STREET_POINT, 81 -54 -0.5 ] +store_suit_point [ 26, STREET_POINT, 105 -70 -0.5 ] +store_suit_point [ 27, STREET_POINT, 115 -70 -0.5 ] +store_suit_point [ 28, STREET_POINT, 115 -60 -0.5 ] +store_suit_point [ 29, STREET_POINT, 105 -60 -0.5 ] +store_suit_point [ 30, FRONT_DOOR_POINT, 105 -86 0, 2 ] +store_suit_point [ 31, STREET_POINT, 136 -62 -0.5 ] +store_suit_point [ 32, STREET_POINT, 145 -40 -0.5 ] +store_suit_point [ 33, STREET_POINT, 135 -40 -0.5 ] +store_suit_point [ 34, STREET_POINT, 129 -54 -0.5 ] +store_suit_point [ 35, STREET_POINT, 151 -26 -0.5 ] +store_suit_point [ 36, STREET_POINT, 165 -20 -0.5 ] +store_suit_point [ 37, STREET_POINT, 165 -10 -0.5 ] +store_suit_point [ 38, STREET_POINT, 143 -18 -0.5 ] +store_suit_point [ 39, STREET_POINT, 179 -26 -0.5 ] +store_suit_point [ 40, STREET_POINT, 185 -40 -0.5 ] +store_suit_point [ 41, STREET_POINT, 195 -40 -0.5 ] +store_suit_point [ 42, STREET_POINT, 186 -19 -0.5 ] +store_suit_point [ 43, STREET_POINT, 194 -61 -0.5 ] +store_suit_point [ 44, STREET_POINT, 215 -70 -0.5 ] +store_suit_point [ 45, STREET_POINT, 215 -60 -0.5 ] +store_suit_point [ 46, STREET_POINT, 201 -54 -0.5 ] +store_suit_point [ 47, STREET_POINT, 222 -70 -0.5 ] +store_suit_point [ 49, STREET_POINT, 235 -60 -0.5 ] +store_suit_point [ 50, STREET_POINT, 222 -60 -0.5 ] +store_suit_point [ 51, FRONT_DOOR_POINT, 222 -86 0, 3 ] +store_suit_point [ 52, STREET_POINT, 235 -70 -0.5 ] +store_suit_point [ 53, STREET_POINT, 256 -61 -0.5 ] +store_suit_point [ 54, STREET_POINT, 265 -40 -0.5 ] +store_suit_point [ 55, STREET_POINT, 255 -40 -0.5 ] +store_suit_point [ 56, STREET_POINT, 249 -54 -0.5 ] +store_suit_point [ 57, STREET_POINT, 255 -20 -0.5 ] +store_suit_point [ 58, STREET_POINT, 265 -20 -0.5 ] +store_suit_point [ 59, STREET_POINT, 271 -5 -0.5 ] +store_suit_point [ 60, STREET_POINT, 285 0 -0.5 ] +store_suit_point [ 61, STREET_POINT, 285 10 -0.5 ] +store_suit_point [ 62, STREET_POINT, 265 2 -0.5 ] +store_suit_point [ 63, FRONT_DOOR_POINT, 238 -6 0, 4 ] +store_suit_point [ 64, STREET_POINT, 304 6 -0.5 ] +store_suit_point [ 65, STREET_POINT, 315 30 -0.5 ] +store_suit_point [ 66, STREET_POINT, 305 30 -0.5 ] +store_suit_point [ 67, STREET_POINT, 297 15 -0.5 ] +store_suit_point [ 68, FRONT_DOOR_POINT, 308 -16 0, 5 ] +store_suit_point [ 69, STREET_POINT, 306 51 -0.5 ] +store_suit_point [ 70, STREET_POINT, 285 60 -0.5 ] +store_suit_point [ 71, STREET_POINT, 285 50 -0.5 ] +store_suit_point [ 72, STREET_POINT, 299 43 -0.5 ] +store_suit_point [ 73, FRONT_DOOR_POINT, 308 76 0, 6 ] +store_suit_point [ 74, STREET_POINT, 271 66 -0.5 ] +store_suit_point [ 75, STREET_POINT, 265 80 -0.5 ] +store_suit_point [ 76, STREET_POINT, 255 80 -0.5 ] +store_suit_point [ 77, STREET_POINT, 264 59 -0.5 ] +store_suit_point [ 78, STREET_POINT, 265 87 -0.5 ] +store_suit_point [ 79, STREET_POINT, 265 100 -0.5 ] +store_suit_point [ 80, STREET_POINT, 255 100 -0.5 ] +store_suit_point [ 81, STREET_POINT, 255 87 -0.5 ] +store_suit_point [ 82, FRONT_DOOR_POINT, 239 87 0, 7 ] +store_suit_point [ 83, STREET_POINT, 271 115 -0.5 ] +store_suit_point [ 84, STREET_POINT, 285 120 -0.5 ] +store_suit_point [ 85, STREET_POINT, 285 130 -0.5 ] +store_suit_point [ 86, STREET_POINT, 263 122 -0.5 ] +store_suit_point [ 90, STREET_POINT, 305 130 -0.5 ] +store_suit_point [ 92, STREET_POINT, 345 120 -0.5 ] +store_suit_point [ 94, STREET_POINT, 355 120 -0.5 ] +store_suit_point [ 95, STREET_POINT, 405 120 -0.5 ] +store_suit_point [ 97, STREET_POINT, 405 130 -0.5 ] +store_suit_point [ 98, FRONT_DOOR_POINT, 353 103 0, 9 ] +store_suit_point [ 100, STREET_POINT, 419 114 -0.5 ] +store_suit_point [ 101, STREET_POINT, 425 100 -0.5 ] +store_suit_point [ 102, STREET_POINT, 435 100 -0.5 ] +store_suit_point [ 103, STREET_POINT, 427 121 -0.5 ] +store_suit_point [ 104, STREET_POINT, 425 88 -0.5 ] +store_suit_point [ 105, STREET_POINT, 425 80 -0.5 ] +store_suit_point [ 106, STREET_POINT, 435 80 -0.5 ] +store_suit_point [ 107, STREET_POINT, 435 88 -0.5 ] +store_suit_point [ 108, FRONT_DOOR_POINT, 451 88 0, 11 ] +store_suit_point [ 109, STREET_POINT, 419 66 -0.5 ] +store_suit_point [ 110, STREET_POINT, 405 60 -0.5 ] +store_suit_point [ 111, STREET_POINT, 405 50 -0.5 ] +store_suit_point [ 112, STREET_POINT, 427 58 -0.5 ] +store_suit_point [ 113, STREET_POINT, 384 51 -0.5 ] +store_suit_point [ 114, STREET_POINT, 375 30 -0.5 ] +store_suit_point [ 115, STREET_POINT, 385 30 -0.5 ] +store_suit_point [ 116, STREET_POINT, 391 44 -0.5 ] +store_suit_point [ 117, FRONT_DOOR_POINT, 359 41 0, 12 ] +store_suit_point [ 118, STREET_POINT, 384 9 -0.5 ] +store_suit_point [ 119, STREET_POINT, 405 0 -0.5 ] +store_suit_point [ 120, STREET_POINT, 405 10 -0.5 ] +store_suit_point [ 121, STREET_POINT, 391 17 -0.5 ] +store_suit_point [ 122, STREET_POINT, 419 -6 -0.5 ] +store_suit_point [ 123, STREET_POINT, 425 -20 -0.5 ] +store_suit_point [ 124, STREET_POINT, 435 -20 -0.5 ] +store_suit_point [ 125, STREET_POINT, 426 1 -0.5 ] +store_suit_point [ 126, FRONT_DOOR_POINT, 451 6 0, 13 ] +store_suit_point [ 127, STREET_POINT, 425 -40 -0.5 ] +store_suit_point [ 128, STREET_POINT, 435 -40 -0.5 ] +store_suit_point [ 129, STREET_POINT, 434 -61 -0.5 ] +store_suit_point [ 130, STREET_POINT, 455 -70 -0.5 ] +store_suit_point [ 131, STREET_POINT, 455 -60 -0.5 ] +store_suit_point [ 132, STREET_POINT, 441 -54 -0.5 ] +store_suit_point [ 133, FRONT_DOOR_POINT, 409 -50 0, 14 ] +store_suit_point [ 134, STREET_POINT, 475 -70 -0.5 ] +store_suit_point [ 135, STREET_POINT, 475 -60 -0.5 ] +store_suit_point [ 136, STREET_POINT, 496 -61 -0.5 ] +store_suit_point [ 137, STREET_POINT, 505 -40 -0.5 ] +store_suit_point [ 138, STREET_POINT, 495 -40 -0.5 ] +store_suit_point [ 139, STREET_POINT, 489 -54 -0.5 ] +store_suit_point [ 140, FRONT_DOOR_POINT, 482 -86 0, 15 ] +store_suit_point [ 141, STREET_POINT, 511 -26 -0.5 ] +store_suit_point [ 143, STREET_POINT, 525 -10 -0.5 ] +store_suit_point [ 144, STREET_POINT, 504 -19 -0.5 ] +store_suit_point [ 145, STREET_POINT, 525 -20 -0.5 ] +store_suit_point [ 146, STREET_POINT, 539 -26 -0.5 ] +store_suit_point [ 147, STREET_POINT, 545 -40 -0.5 ] +store_suit_point [ 148, STREET_POINT, 555 -40 -0.5 ] +store_suit_point [ 149, STREET_POINT, 546 -19 -0.5 ] +store_suit_point [ 150, FRONT_DOOR_POINT, 537 6 0, 16 ] +store_suit_point [ 151, STREET_POINT, 554 -61 -0.5 ] +store_suit_point [ 152, STREET_POINT, 575 -70 -0.5 ] +store_suit_point [ 153, STREET_POINT, 575 -60 -0.5 ] +store_suit_point [ 154, STREET_POINT, 561 -54 -0.5 ] +store_suit_point [ 155, STREET_POINT, 582 -70 -0.5 ] +store_suit_point [ 156, STREET_POINT, 595 -70 -0.5 ] +store_suit_point [ 159, FRONT_DOOR_POINT, 582 -86 0, 17 ] +store_suit_point [ 160, STREET_POINT, 595 -60 -0.5 ] +store_suit_point [ 161, STREET_POINT, 582 -60 -0.5 ] +store_suit_point [ 162, STREET_POINT, 616 -62 -0.5 ] +store_suit_point [ 163, STREET_POINT, 625 -40 -0.5 ] +store_suit_point [ 164, STREET_POINT, 615 -40 -0.5 ] +store_suit_point [ 165, STREET_POINT, 609 -54 -0.5 ] +store_suit_point [ 166, STREET_POINT, 625 -12 -0.5 ] +store_suit_point [ 167, STREET_POINT, 625 0 -0.5 ] +store_suit_point [ 168, STREET_POINT, 615 0 -0.5 ] +store_suit_point [ 169, STREET_POINT, 615 -12 -0.5 ] +store_suit_point [ 170, FRONT_DOOR_POINT, 599 -12 0, 18 ] +store_suit_point [ 171, STREET_POINT, 625 10 -0.5 ] +store_suit_point [ 172, STREET_POINT, 625 20 -0.5 ] +store_suit_point [ 173, STREET_POINT, 615 20 -0.5 ] +store_suit_point [ 174, STREET_POINT, 615 10 -0.5 ] +store_suit_point [ 175, FRONT_DOOR_POINT, 641 10 0, 19 ] +store_suit_point [ 176, STREET_POINT, 625 40 -0.5 ] +store_suit_point [ 177, STREET_POINT, 615 40 -0.5 ] +store_suit_point [ 178, STREET_POINT, 625 60 -0.5 ] +store_suit_point [ 179, STREET_POINT, 635 60 -0.5 ] +store_suit_point [ 180, STREET_POINT, 635 70 -0.5 ] +store_suit_point [ 181, STREET_POINT, 607 70 -0.5 ] +store_suit_point [ 183, STREET_POINT, 595 70 -0.5 ] +store_suit_point [ 184, STREET_POINT, 595 60 -0.5 ] +store_suit_point [ 185, STREET_POINT, 615 60 -0.5 ] +store_suit_point [ 186, FRONT_DOOR_POINT, 607 116 0, 21 ] +store_suit_point [ 187, FRONT_DOOR_POINT, 578 73 0, 20 ] +store_suit_point [ 188, SIDE_DOOR_POINT, 73 50 0, 26 ] +store_suit_point [ 189, SIDE_DOOR_POINT, 38 0 0, 25 ] +store_suit_point [ 190, SIDE_DOOR_POINT, 95 10 0, 27 ] +store_suit_point [ 191, SIDE_DOOR_POINT, 45 -35 0, 1 ] +store_suit_point [ 192, SIDE_DOOR_POINT, 138 -90 0, 2 ] +store_suit_point [ 193, SIDE_DOOR_POINT, 142 10 -0.000111185, 27 ] +store_suit_point [ 194, SIDE_DOOR_POINT, 193 10 -0.000111185, 4 ] +store_suit_point [ 195, SIDE_DOOR_POINT, 210 -90 -0.000111185, 3 ] +store_suit_point [ 196, SIDE_DOOR_POINT, 285 -71 -0.000111185, 5 ] +store_suit_point [ 197, SIDE_DOOR_POINT, 335 37 -0.000111185, 6 ] +store_suit_point [ 198, SIDE_DOOR_POINT, 235 60 -0.000111185, 7 ] +store_suit_point [ 199, SIDE_DOOR_POINT, 245 150 -0.000111185, 8 ] +store_suit_point [ 200, SIDE_DOOR_POINT, 293 100 -0.000111185, 9 ] +store_suit_point [ 201, SIDE_DOOR_POINT, 411 150 -0.000111185, 10 ] +store_suit_point [ 202, SIDE_DOOR_POINT, 454 120 0, 11 ] +store_suit_point [ 203, SIDE_DOOR_POINT, 398 79.9996 0, 12 ] +store_suit_point [ 204, SIDE_DOOR_POINT, 455 -17.3 0, 13 ] +store_suit_point [ 205, SIDE_DOOR_POINT, 377 -20 0, 14 ] +store_suit_point [ 206, SIDE_DOOR_POINT, 495 -90 -0.000111185, 15 ] +store_suit_point [ 207, SIDE_DOOR_POINT, 500 9.99999 -0.000111185, 16 ] +store_suit_point [ 208, SIDE_DOOR_POINT, 547 -90 -0.000111185, 17 ] +store_suit_point [ 209, SIDE_DOOR_POINT, 595 12 -0.000111185, 18 ] +store_suit_point [ 210, SIDE_DOOR_POINT, 645 29 -0.000111185, 19 ] +store_suit_point [ 211, SIDE_DOOR_POINT, 595.044 31.7984 0, 20 ] +store_suit_point [ 212, SIDE_DOOR_POINT, 585.045 119.799 0, 21 ] +store_suit_point [ 214, STREET_POINT, 390 130 -0.5 ] +store_suit_point [ 215, STREET_POINT, 390 145 -0.5 ] +store_suit_point [ 216, STREET_POINT, 305 145 -0.5 ] +store_suit_point [ 217, STREET_POINT, 305 179 -0.5 ] +store_suit_point [ 218, STREET_POINT, 345 179 -0.5 ] +store_suit_point [ 220, FRONT_DOOR_POINT, 305 191 0, 8 ] +store_suit_point [ 221, SIDE_DOOR_POINT, 285 158 0, 8 ] +store_suit_point [ 222, STREET_POINT, 390 179 -0.5 ] +store_suit_point [ 223, STREET_POINT, 380 179 -0.5 ] +store_suit_point [ 224, FRONT_DOOR_POINT, 380 191 0, 10 ] +store_suit_point [ 225, SIDE_DOOR_POINT, 355 194 0, 10 ] +group "daisysGarden" [ + visgroup "5201" [ + vis [ "5201" "5202" "5203" "5204" "5207" "5205" "5206" ] + battle_cell [ 20 20 -15 25 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ -35 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -15 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -35 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random25_DNARoot" [ + pos [ -35 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5 -11 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ -15 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 8 -11 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ -15 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 5 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 5 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 8 -15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.65 -0.15 5.82 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.11 -0.15 5.84 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.05 -0.08 16.84 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.86 -0.21 16.62 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ -35 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 20 -5 0 ] + nhpr [ -165 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 5 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 5 -20 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -35 5 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -50 45 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ -35 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ -35 45 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] + group "props" [ + prop "linktunnel_dg_5000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -35 5 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 -2.99 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.09 ] + scale [ 1.5 1 1.5 ] + width [ 45.7352 ] + height [ 45.7352 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.65 ] + scale [ 2.5 1 2.5 ] + kern [ 1e-006 ] + graphic [ + code [ "daisySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.95 ] + scale [ 0.8 1 0.8 ] + width [ 43.5654 ] + height [ 43.5654 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -28.0271 33.2347 -0.499989 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "5202" [ + vis [ "5202" "5201" "5203" "5204" "5205" "5206" "5207" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 2 3 ] + suit_edge [ 3 4 ] + suit_edge [ 5 6 ] + suit_edge [ 6 7 ] + suit_edge [ 7 0 ] + suit_edge [ 2 8 ] + suit_edge [ 8 2 ] + suit_edge [ 7 8 ] + suit_edge [ 8 7 ] + suit_edge [ 6 9 ] + suit_edge [ 9 6 ] + suit_edge [ 3 9 ] + suit_edge [ 9 3 ] + suit_edge [ 189 4 ] + suit_edge [ 4 189 ] + suit_edge [ 189 5 ] + suit_edge [ 5 189 ] + battle_cell [ 20 20 25 25 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 5 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb25:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Barley, Hops, and Malt Shop" ] + pos [ 30 0 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.00481 -2.96302 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.28047 1.28047 1.28047 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.63 ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.415686 0 0.415686 1 ] + pos [ 0 0 0.37 ] + scale [ 0.9 1 1.1 ] + width [ 33.1444 ] + height [ 33.1444 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + landmark_building "tb26:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Bert's Dirt" ] + pos [ 20 51 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.5 -3.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.852821 0.852821 0.852821 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -5.05 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0 1 ] + pos [ 0.53 0 -0.95 ] + scale [ 2 1 2 ] + kern [ 0.071308 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb25:random25_DNARoot" [ + pos [ 45 0 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.5 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.02897 1.02897 1.02897 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb25:random_DNARoot" [ + pos [ 15 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 10.5501 -9.8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 5 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 12 -11 0 ] + nhpr [ 180 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 37.7522 38.4872 -7.62939e-006 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "5203" [ + vis [ "5203" "5202" "5201" "5204" "5205" "5206" "5207" ] + suit_edge [ 4 10 ] + suit_edge [ 10 11 ] + suit_edge [ 12 13 ] + suit_edge [ 13 5 ] + suit_edge [ 188 13 ] + suit_edge [ 13 188 ] + suit_edge [ 188 10 ] + suit_edge [ 10 188 ] + suit_edge [ 190 12 ] + suit_edge [ 12 190 ] + suit_edge [ 190 11 ] + suit_edge [ 11 190 ] + suit_edge [ 191 16 ] + suit_edge [ 16 191 ] + suit_edge [ 191 17 ] + suit_edge [ 17 191 ] + battle_cell [ 20 20 65.5884 13.8818 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 45 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random25_DNARoot" [ + pos [ 40 50 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 15 -0.09 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 7 -0.08 7 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 14.9 -8.66 0.02 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 80 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 95 40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ -6.28 -3.89 0.02 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 0.55 -14.31 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 17.32 -11.69 0.02 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 32.85 -43.85 0.02 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 25.1189 -0.0366821 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00539 1.00539 1.00539 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 95 50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb26:random25_DNARoot" [ + pos [ 65 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.81632 0.0101738 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.755953 0.755953 0.755953 ] + color [ 0.6 0.5 0.71 1 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 95 20 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.75 0.7 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5204" [ + vis [ "5204" "5203" "5202" "5201" "5205" "5206" "5207" "5208" "5209" "5210" "5211" "5212" ] + suit_edge [ 11 14 ] + suit_edge [ 14 15 ] + suit_edge [ 15 16 ] + suit_edge [ 17 18 ] + suit_edge [ 19 12 ] + suit_edge [ 18 19 ] + suit_edge [ 19 20 ] + suit_edge [ 20 19 ] + suit_edge [ 14 20 ] + suit_edge [ 20 14 ] + suit_edge [ 15 21 ] + suit_edge [ 21 15 ] + suit_edge [ 18 21 ] + suit_edge [ 21 18 ] + battle_cell [ 20 20 70 -20 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 45 0 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random25_DNARoot" [ + pos [ 45 -15 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ 45 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.22998 0.0421944 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.765459 0.765459 0.765459 ] + color [ 1 1 0.52 1 ] + ] + ] + landmark_building "tb27:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Gopher Broke Savings & Loan" ] + pos [ 96 2 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.39 1 ] + ] + sign [ + code [ "DG_sign3" ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.388235 0.576471 1 ] + pos [ 0 0 -0.09 ] + scale [ 1 1 1.1 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.388235 0.576471 1 ] + pos [ 0 0 1.03 ] + scale [ 0.8 1 1 ] + flags [ "d" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.73414 -3.22386 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.04225 1.04225 1.04225 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 95 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + landmark_building "tb1:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "From Start to Spinach" ] + pos [ 45 -30 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.75 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0.16 0 2.02 ] + scale [ 1.1 1 1.1 ] + kern [ 0.072657 ] + width [ 6.24898 ] + height [ 6.24898 ] + flags [ "d" ] + text [ + letters [ "f" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.71 ] + scale [ 1.2 1 1.2 ] + kern [ 0.056292 ] + width [ 26.8694 ] + height [ 26.8694 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.24 ] + scale [ 0.8 1 0.8 ] + width [ 70.6364 ] + height [ 70.6364 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.95858 -2.99496 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.26379 1.26379 1.26379 ] + color [ 0.78 0.55 0.65 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 83.2012 -22.2923 1.14441e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "5205" [ + vis [ "5205" "5204" "5203" "5202" "5201" "5206" "5207" "5208" "5209" "5210" "5211" "5212" "5213" ] + suit_edge [ 16 22 ] + suit_edge [ 22 23 ] + suit_edge [ 24 25 ] + suit_edge [ 25 17 ] + battle_cell [ 20 20 80.9121 -60.3336 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 95 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random25_DNARoot" [ + pos [ 45 -65 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 6.66 -0.09 6.86 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 15.25 -0.01 6.84 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 19.5 -45.12 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 23 -11 0 ] + nhpr [ 180 2 -3.4962e-007 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ 60 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ 80 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10.1 -1.45 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 18.45 -1.1 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ 45 -75 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 3 -30 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -3.09 -15.68 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 5.04 -1.06 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb1:random25_DNARoot" [ + pos [ 45 -90 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 5 -5 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ 95 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 90.7093 -78.9194 7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "5206" [ + vis [ "5206" "5205" "5204" "5203" "5202" "5201" "5207" "5208" "5209" "5210" "5211" "5212" "5213" "5245" ] + suit_edge [ 23 26 ] + suit_edge [ 26 27 ] + suit_edge [ 28 29 ] + suit_edge [ 29 24 ] + suit_edge [ 26 30 ] + suit_edge [ 30 26 ] + suit_edge [ 29 30 ] + suit_edge [ 30 29 ] + battle_cell [ 20 20 104.847 -65.0664 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 115 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb27:random25_DNARoot" [ + pos [ 95 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9.94 -1.77 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + landmark_building "tb2:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Jake's Rakes" ] + pos [ 115 -90 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.49998 -2.99998 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.85625 0.85625 0.85625 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -5.41 ] + nhpr [ -0 0 -3 ] + scale [ 1.1 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.27 ] + scale [ 2 1 1.5 ] + kern [ 0.214238 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -1.58 ] + scale [ 2 1 1.5 ] + kern [ 0.116998 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5207" [ + vis [ "5207" "5206" "5205" "5204" "5203" "5202" "5201" "5209" "5210" "5211" "5212" "5213" "5208" "5245" ] + suit_edge [ 27 31 ] + suit_edge [ 31 32 ] + suit_edge [ 33 34 ] + suit_edge [ 34 28 ] + suit_edge [ 192 31 ] + suit_edge [ 31 192 ] + suit_edge [ 192 34 ] + suit_edge [ 34 192 ] + battle_cell [ 20 20 129.997 -59.8203 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 155 -40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random25_DNARoot" [ + pos [ 165.4 -89.94 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 1 -29 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 0.32 -41.09 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.81 -2.44 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ 146 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ -4 -15 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.7 -0.1 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb2:random25_DNARoot" [ + pos [ 131 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 10 -44 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 7.81 -2.44 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 128.657 -76.9016 2.28882e-005 ] + nhpr [ 180 0 0 ] + ] + ] + visgroup "5208" [ + vis [ "5208" "5207" "5206" "5205" "5209" "5210" "5211" "5212" "5245" ] + suit_edge [ 32 35 ] + suit_edge [ 35 36 ] + suit_edge [ 37 38 ] + suit_edge [ 38 33 ] + suit_edge [ 193 38 ] + suit_edge [ 38 193 ] + suit_edge [ 193 35 ] + suit_edge [ 35 193 ] + battle_cell [ 20 20 145.344 -25.2004 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 125 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb27:random25_DNARoot" [ + pos [ 115 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 22 -11 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10.96 -1.91 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 115 -15 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 115 10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_mailbox_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4 -4 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 16 -12 0 ] + nhpr [ -60 0 -0 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 135 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.77501 -0.00451374 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.769253 0.769253 0.769253 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 165 10 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.1554 -0.000442505 17.693 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.5088 -0.00849915 17.6068 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.22524 -0.0144043 6.70745 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 12.0001 -6.10352e-005 6.73679 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb27:random25_DNARoot" [ + pos [ 150 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.6 -0.04 17.59 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.57 -0.09 17.51 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.75 -0.02 6.49 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.36 -0.01 6.56 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 165 50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 165 30 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 0.92 0.56 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.92 0.56 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5209" [ + vis [ "5209" "5208" "5207" "5206" "5205" "5210" "5211" "5212" "5245" ] + suit_edge [ 36 39 ] + suit_edge [ 39 40 ] + suit_edge [ 41 42 ] + suit_edge [ 42 37 ] + suit_edge [ 194 42 ] + suit_edge [ 42 194 ] + suit_edge [ 194 39 ] + suit_edge [ 39 194 ] + battle_cell [ 20 20 184.963 -25.1838 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 165 0 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 165 30 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 165 49.9999 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random25_DNARoot" [ + pos [ 200 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 6 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 214.98 9.97 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 5.12 -0.11 6.75 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 11.61 -0.15 6.67 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 11.49 -0.05 17.43 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 4.84 -0.15 17.69 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 20 -2 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 215 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 16.1 -10.42 0 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 215 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 185 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.79 0.55 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.72 -0.0095253 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.0169 1.0169 1.0169 ] + color [ 0.22 0.58 0.65 1 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 16.5022 -14.8969 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -19 -47 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.66006 1.66006 1.66006 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 200 50 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb4:random25_DNARoot" [ + pos [ 185 30 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 185 50 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.38 0.82 0.45 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 15.9256 -1.1701 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 3.415 -1.12411 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 182.284 -5.87662 0 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "5210" [ + vis [ "5210" "5209" "5208" "5207" "5206" "5205" "5204" "5211" "5212" "5213" "5214" "5215" "5216" "5245" ] + suit_edge [ 40 43 ] + suit_edge [ 43 44 ] + suit_edge [ 45 46 ] + suit_edge [ 46 41 ] + suit_edge [ 195 44 ] + suit_edge [ 44 195 ] + suit_edge [ 195 45 ] + suit_edge [ 45 195 ] + battle_cell [ 20 20 199.458 -59.4018 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 215 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random25_DNARoot" [ + pos [ 190 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 5.08 -8.65 0 ] + nhpr [ 165 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -20 -45 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 18 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 205 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -9.50003 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00134 1.00134 1.00134 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 215 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.68 0.85 0.45 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "prop_trashcan_wood_DNARoot" [ + code [ "prop_trashcan_wood" ] + pos [ 160.96 -153.87 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + visgroup "5211" [ + vis [ "5211" "5210" "5209" "5208" "5207" "5206" "5205" "5204" "5212" "5213" "5214" "5215" "5216" "5217" "5218" "5219" "5220" "5243" "5245" ] + suit_edge [ 44 47 ] + suit_edge [ 49 50 ] + suit_edge [ 50 45 ] + suit_edge [ 47 51 ] + suit_edge [ 51 47 ] + suit_edge [ 50 51 ] + suit_edge [ 51 50 ] + suit_edge [ 47 52 ] + battle_cell [ 20 20 224.843 -64.8476 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 235 -40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random25_DNARoot" [ + pos [ 215 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9 -3 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 235 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + landmark_building "tb3:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Photo Cynthia's Camera Shop" ] + pos [ 230 -90 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.49997 -3.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2749 1.2749 1.2749 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0.25 0 0.78 ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 0.858317 ] + scale [ 1.0568 1 1 ] + kern [ 0.0604972 ] + width [ 23.1661 ] + height [ 23.1661 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0.627451 1 ] + scale [ 1.18524 1 1 ] + kern [ 0.129619 ] + width [ 21.1136 ] + height [ 21.1136 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 232.211 -78.6542 0 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "5212" [ + vis [ "5212" "5211" "5210" "5209" "5207" "5206" "5205" "5208" "5204" "5213" "5214" "5215" "5216" "5217" "5218" "5219" "5220" "5243" ] + suit_edge [ 52 53 ] + suit_edge [ 53 54 ] + suit_edge [ 55 56 ] + suit_edge [ 56 49 ] + suit_edge [ 196 53 ] + suit_edge [ 53 196 ] + suit_edge [ 196 56 ] + suit_edge [ 56 196 ] + battle_cell [ 20 20 254.54 -55.0022 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 275 -40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random25_DNARoot" [ + pos [ 265 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.42 -0.03 6.48 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.23 -0.06 6.46 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.43 -0.02 17.66 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.65 -0.02 17.5 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 285 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 11.29 -1.2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 285 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10.15 -2.18 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb3:random25_DNARoot" [ + pos [ 250 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 9 -43 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 285 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -15 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.02268 1.02268 1.02268 ] + color [ 0.76 0.4 0.58 1 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 285 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.8 0.54 0.61 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 3.14 -1.1 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 257.391 -71.3137 0.000175476 ] + nhpr [ -150 0 0 ] + ] + ] + visgroup "5213" [ + vis [ "5213" "5212" "5211" "5210" "5207" "5206" "5205" "5214" "5215" "5216" "5217" "5218" "5219" "5220" "5243" ] + suit_edge [ 57 55 ] + suit_edge [ 54 58 ] + battle_cell [ 20 20 260.09 -29.9129 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 235 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random25_DNARoot" [ + pos [ 235 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_mailbox_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11 -2 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 285 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 15.16 -9.92 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5214" [ + vis [ "5214" "5213" "5212" "5211" "5210" "5207" "5216" "5217" "5215" "5218" "5219" "5220" "5243" "5244" ] + suit_edge [ 59 60 ] + suit_edge [ 58 59 ] + suit_edge [ 61 62 ] + suit_edge [ 62 57 ] + suit_edge [ 62 63 ] + suit_edge [ 63 62 ] + suit_edge [ 59 63 ] + suit_edge [ 63 59 ] + battle_cell [ 20 20 270.137 -0.177276 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 245 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random25_DNARoot" [ + pos [ 235 5 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 7.48 -13.51 0 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb4:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Lisa Lemon Used Cars" ] + pos [ 234 -20 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.98871 -3.06425 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.01515 1.01515 1.01515 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 0.43 ] + scale [ 1.4 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0.28 0 -0.52 ] + scale [ 1.2 1 1.2 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.63 ] + kern [ 0.12222 ] + wiggle [ 4.19959 ] + stumble [ 0.015849 ] + stomp [ 0.04041 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 285 -11.0297 0 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "5215" [ + vis [ "5215" "5214" "5213" "5212" "5211" "5210" "5207" "5216" "5217" "5218" "5219" ] + suit_edge [ 60 64 ] + suit_edge [ 64 65 ] + suit_edge [ 66 67 ] + suit_edge [ 67 61 ] + suit_edge [ 64 68 ] + suit_edge [ 68 64 ] + suit_edge [ 67 68 ] + suit_edge [ 68 67 ] + battle_cell [ 20 20 304.746 15.4365 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 325 30 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random25_DNARoot" [ + pos [ -35 700 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 295 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 335 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 335 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 3.53 -14.67 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 18 -3 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 335 30 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb5:random25_DNARoot" [ + pos [ 335 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Poison Oak Furniture" ] + pos [ 320 -20 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -1.94 ] + scale [ 1.5 1 1.1 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ 0.45 0 -0.49 ] + scale [ 1.4 1 1.5 ] + kern [ 0.066597 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.384314 0.568627 1 ] + pos [ 0.58 0 -1.45 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5216" [ + vis [ "5216" "5215" "5214" "5213" "5212" "5211" "5210" "5217" "5218" "5219" ] + suit_edge [ 65 69 ] + suit_edge [ 69 70 ] + suit_edge [ 71 72 ] + suit_edge [ 72 66 ] + suit_edge [ 69 73 ] + suit_edge [ 73 69 ] + suit_edge [ 72 73 ] + suit_edge [ 73 72 ] + suit_edge [ 197 65 ] + suit_edge [ 65 197 ] + suit_edge [ 197 66 ] + suit_edge [ 66 197 ] + battle_cell [ 20 20 304.952 44.9675 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 285 70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random25_DNARoot" [ + pos [ 335 65 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5 -3 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 335 80 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.25 -0.11 17.36 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.49 -0.07 6.64 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.6 -0.02 17.43 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.85 -0.06 6.59 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 335 45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 2 -11 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 13.89 -45.48 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ -16.97 -12.61 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 16 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.49998 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.764151 0.764151 0.764151 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 285 80 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb6:random25_DNARoot" [ + pos [ 320 80 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "14 Carrot Jewelers" ] + pos [ 295 80 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.15941 1.15941 1.15941 ] + color [ 0.38 0.82 0.45 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5 -5 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 -1.1 ] + scale [ 1.4 1 1.2 ] + baseline [ + code [ "humanist" ] + color [ 0.717647 0.356863 0 1 ] + pos [ 0.12 0 1.88 ] + scale [ 0.8 1 0.9 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "1" ] + ] + text [ + letters [ "4" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.25 ] + scale [ 1.6 1 1.5 ] + kern [ 0.095121 ] + width [ 31.3913 ] + height [ 31.3913 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 288.578 68.6166 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "5217" [ + vis [ "5217" "5216" "5215" "5214" "5213" "5212" "5211" "5218" "5219" "5220" "5221" "5222" "5243" "5244" ] + suit_edge [ 70 74 ] + suit_edge [ 74 75 ] + suit_edge [ 76 77 ] + suit_edge [ 77 71 ] + suit_edge [ 198 77 ] + suit_edge [ 77 198 ] + suit_edge [ 198 74 ] + suit_edge [ 74 198 ] + battle_cell [ 20 20 270.078 60.1054 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 285 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random25_DNARoot" [ + pos [ 235 30 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 10.68 -16.88 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 0 -32 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 2.71 -41.59 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 26.3316 -0.0161133 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.774075 0.774075 0.774075 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 235 70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 235 50 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.55 0.65 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5218" [ + vis [ "5218" "5217" "5216" "5215" "5214" "5213" "5212" "5211" "5219" "5220" "5221" "5222" "5223" "5244" "5243" ] + suit_edge [ 75 78 ] + suit_edge [ 78 79 ] + suit_edge [ 80 81 ] + suit_edge [ 81 76 ] + suit_edge [ 81 82 ] + suit_edge [ 82 81 ] + suit_edge [ 78 82 ] + suit_edge [ 82 78 ] + battle_cell [ 20 20 260.006 89.902 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 285 80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random25_DNARoot" [ + pos [ 285 100 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 11 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + landmark_building "tb7:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Musical Fruit" ] + pos [ 235 80 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ -5.97 -45 0 ] + nhpr [ 165 0 -0 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.5 ] + nhpr [ -0 0 -1 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.7 ] + scale [ 1.4 1 1 ] + kern [ 0.069484 ] + width [ 27.6152 ] + height [ 27.6152 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.34902 0 1 ] + pos [ 0 0 -0.15 ] + scale [ 1.2 1 0.8 ] + width [ 16.9638 ] + height [ 16.9638 ] + text [ + letters [ "d" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 1.68 ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.895378 -2.99377 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.24922 1.24922 1.24922 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 247.055 95.7801 -7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "5219" [ + vis [ "5219" "5218" "5217" "5216" "5215" "5214" "5213" "5212" "5211" "5220" "5221" "5222" "5223" "5224" "5244" "5243" ] + suit_edge [ 79 83 ] + suit_edge [ 83 84 ] + suit_edge [ 85 86 ] + suit_edge [ 86 80 ] + suit_edge [ 199 86 ] + suit_edge [ 86 199 ] + suit_edge [ 199 83 ] + suit_edge [ 83 199 ] + battle_cell [ 20 20 266.536 116.845 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 245 100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random25_DNARoot" [ + pos [ 235 95 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 3 -4 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 6.82 -0.07 8.15 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 15.26 -0.07 7.95 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 15.15 -0.05 18.59 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 6.74 0.01 18.58 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 19.6 -6.86 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 235 135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -1 -8 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -30.29 -44.18 0 ] + nhpr [ 105 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -5.06 -0.99 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 265 150 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 4.97 -0.09 17.2 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.71 -0.13 17.16 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.34 -0.07 6.51 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 4.95 -0.07 6.65 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 255 150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 7.99 -8.65 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -1.51 -0.99 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb7:random25_DNARoot" [ + pos [ 235 120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 235 150 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.30524 0.0151367 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.762464 0.762464 0.762464 ] + color [ 0.22 0.58 0.65 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5220" [ + vis [ "5220" "5219" "5218" "5217" "5214" "5213" "5211" "5212" "5221" "5222" "5223" "5224" "5244" "5243" ] + suit_edge [ 90 85 ] + suit_edge [ 200 84 ] + suit_edge [ 84 200 ] + suit_edge [ 200 85 ] + suit_edge [ 85 200 ] + suit_edge [ 84 92 ] + suit_edge [ 216 90 ] + battle_cell [ 20 20 310 125 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 325 145 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 345 145 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 345 95 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 325 95 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random25_DNARoot" [ + pos [ 325 100 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 300 100 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.5 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.0119 1.0119 1.0119 ] + color [ 0.5 0.68 0.36 1 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 345 100 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 6 -3 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + ] + group "props" [ + prop "prop_trashcan_wood_DNARoot" [ + code [ "prop_trashcan_wood" ] + pos [ 303.22 150.06 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 310.452 112.657 -3.8147e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "5221" [ + vis [ "5221" "5220" "5219" "5218" "5217" "5222" "5223" "5224" "5225" ] + group "streets" [ + ] + group "buildings" [ + ] + group "props" [ + ] + ] + visgroup "5222" [ + vis [ "5222" "5221" "5220" "5219" "5218" "5217" "5223" "5224" "5225" "5228" "5229" "5230" "5231" "5244" "5243" ] + suit_edge [ 94 95 ] + suit_edge [ 92 94 ] + suit_edge [ 94 98 ] + suit_edge [ 98 94 ] + suit_edge [ 97 214 ] + suit_edge [ 214 215 ] + battle_cell [ 20 20 374.977 125.476 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 405 145 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 345 105 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 405 95 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 365 95 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random25_DNARoot" [ + pos [ 385 100 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 18 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb9:random25_DNARoot" [ + pos [ 405 100 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Astroturf Mowers" ] + pos [ 359.83 98.84 -0.05 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.14926 -2.97333 0.05 ] + nhpr [ -0 0 -0 ] + scale [ 1.29326 1.29326 1.29326 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.53 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.435294 0.215686 1 ] + pos [ 0.02 0 0.27 ] + scale [ 1.2 1 1.2 ] + width [ 32.4612 ] + height [ 32.4612 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5223" [ + vis [ "5223" "5222" "5221" "5220" "5219" "5218" "5224" "5225" "5226" "5227" "5228" "5229" "5230" "5231" "5244" "5243" ] + suit_edge [ 95 100 ] + suit_edge [ 100 101 ] + suit_edge [ 102 103 ] + suit_edge [ 103 97 ] + suit_edge [ 201 97 ] + suit_edge [ 97 201 ] + suit_edge [ 201 95 ] + suit_edge [ 95 201 ] + suit_edge [ 202 103 ] + suit_edge [ 103 202 ] + suit_edge [ 202 100 ] + suit_edge [ 100 202 ] + battle_cell [ 20 20 423.004 116.632 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 405 140 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random25_DNARoot" [ + pos [ 430 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 445 150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 455 150 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 455 115 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 5.2 -9.96 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 415 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 11 -10 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 18 -21 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 30 -8 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -4 -44 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 405 150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -0.2 -0.3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 455 125 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -3.48 -3.59 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.04453 1.04453 1.04453 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5224" [ + vis [ "5224" "5223" "5222" "5221" "5220" "5219" "5225" "5226" "5227" "5228" "5229" "5230" "5231" "5244" "5243" ] + suit_edge [ 101 104 ] + suit_edge [ 104 105 ] + suit_edge [ 106 107 ] + suit_edge [ 107 102 ] + suit_edge [ 107 108 ] + suit_edge [ 108 107 ] + suit_edge [ 104 108 ] + suit_edge [ 108 104 ] + battle_cell [ 20 20 429.946 90.0312 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 405 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random25_DNARoot" [ + pos [ 405 80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + landmark_building "tb11:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Garden Hosiery" ] + pos [ 455 100 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -1.04 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ -0.11 0 1.06 ] + scale [ 1.3 1 1.3 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.07 ] + scale [ 1.3 1 1.3 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 417.405 90.4787 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "5225" [ + vis [ "5225" "5224" "5223" "5222" "5221" "5226" "5227" "5228" "5229" "5230" "5231" "5232" "5243" "5244" ] + suit_edge [ 105 109 ] + suit_edge [ 109 110 ] + suit_edge [ 111 112 ] + suit_edge [ 112 106 ] + battle_cell [ 20 20 422.509 63.3441 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 445 80 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random25_DNARoot" [ + pos [ 455 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 2 -45 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 15.38 -10.69 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb11:random25_DNARoot" [ + pos [ 455 60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 3.57 -0.08 14.9 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 8.61 -0.04 14.9 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 455 45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 11.18 -12.93 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 3.7 -37.91 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5226" [ + vis [ "5226" "5225" "5224" "5223" "5227" "5228" "5229" "5230" "5231" "5232" ] + suit_edge [ 110 113 ] + suit_edge [ 113 114 ] + suit_edge [ 115 116 ] + suit_edge [ 116 111 ] + suit_edge [ 113 117 ] + suit_edge [ 117 113 ] + suit_edge [ 116 117 ] + suit_edge [ 117 116 ] + suit_edge [ 203 110 ] + suit_edge [ 110 203 ] + suit_edge [ 203 111 ] + suit_edge [ 111 203 ] + battle_cell [ 20 20 387.224 47.5987 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 365 30 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random25_DNARoot" [ + pos [ 370 80 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 9.19 -1.99 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb12:random25_DNARoot" [ + pos [ 355 80 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb12:random25_DNARoot" [ + pos [ 355 65 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ -0.94 -12.74 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb12:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Silly Statues" ] + pos [ 355 34 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.737286 -2.90143 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.26408 1.26408 1.26408 ] + color [ 0.22 0.58 0.65 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 1.46 ] + scale [ 0.8 1 0.4 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.88 ] + scale [ 1.2 1 2 ] + kern [ 0.104219 ] + width [ 32.5977 ] + height [ 32.5977 ] + flags [ "bd" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb12:random25_DNARoot" [ + pos [ 355 45 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb12:random25_DNARoot" [ + pos [ 390 80 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 3.80212 -0.0270691 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.757917 0.757917 0.757917 ] + color [ 0.76 0.4 0.58 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5227" [ + vis [ "5227" "5226" "5225" "5224" "5223" "5228" "5229" "5230" "5231" "5232" "5235" ] + suit_edge [ 114 118 ] + suit_edge [ 118 119 ] + suit_edge [ 120 121 ] + suit_edge [ 121 115 ] + suit_edge [ 205 118 ] + suit_edge [ 118 205 ] + suit_edge [ 205 121 ] + suit_edge [ 121 205 ] + battle_cell [ 20 20 387.939 11.9059 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 405 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random25_DNARoot" [ + pos [ 355.35 -1.36 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.61 -0.15 7.25 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.36 -0.15 7.25 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 3.61 -0.15 18.25 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 8.61 -0.15 18 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 355.4 -20.1 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 370 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -11.5 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.758853 0.758853 0.758853 ] + color [ 0.22 0.58 0.65 1 ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 405 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 17.58 -2.06 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb12:random25_DNARoot" [ + pos [ 355.35 13.64 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 15.36 -2.65 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 11.42 -45.83 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 385 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.68 0.85 0.45 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 371.139 10.4803 -5.91278e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + visgroup "5228" [ + vis [ "5228" "5227" "5226" "5225" "5224" "5223" "5222" "5229" "5230" "5231" "5232" "5235" "5244" ] + suit_edge [ 119 122 ] + suit_edge [ 122 123 ] + suit_edge [ 124 125 ] + suit_edge [ 125 120 ] + suit_edge [ 125 126 ] + suit_edge [ 126 125 ] + suit_edge [ 122 126 ] + suit_edge [ 126 122 ] + suit_edge [ 204 124 ] + suit_edge [ 124 204 ] + suit_edge [ 204 123 ] + suit_edge [ 123 204 ] + battle_cell [ 20 20 424.389 -4.67908 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 405 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random25_DNARoot" [ + pos [ 455 30 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 0 -26 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 0 -41 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 455 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb13:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Trowels and Tribulations" ] + pos [ 455 20 -0.05 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4.70884 -5.04907 0.05 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.20001 -2.95999 0.05 ] + nhpr [ -0 0 -0 ] + scale [ 1.16392 1.16392 1.16392 ] + color [ 0.48 1 0.7 1 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 22.5363 -5.11685 0.05 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ -0.59 0 -2.25 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.360784 0.290196 0.756863 1 ] + pos [ 0.58 0 -0.14 ] + scale [ 1.3 1 1.1 ] + kern [ 0.05 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.360784 0.290196 0.756863 1 ] + pos [ 0.61 0 -0.98 ] + scale [ 1.2 1 1 ] + kern [ 0.114184 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.81 0 -1.72 ] + scale [ 1 1 0.7 ] + width [ 18.4149 ] + height [ 18.4149 ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5229" [ + vis [ "5229" "5228" "5227" "5226" "5225" "5224" "5223" "5222" "5230" "5231" "5232" "5235" "5236" "5237" "5244" ] + suit_edge [ 123 127 ] + suit_edge [ 128 124 ] + battle_cell [ 20 20 429.738 -30.1423 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 405 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random25_DNARoot" [ + pos [ 405 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11.42 -2.95 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb13:random25_DNARoot" [ + pos [ 455 -30 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -17.489 -0.0609436 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.03454 1.03454 1.03454 ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5230" [ + vis [ "5230" "5229" "5228" "5227" "5226" "5225" "5223" "5224" "5222" "5231" "5232" "5235" "5236" "5237" "5238" "5233" "5234" "5244" ] + suit_edge [ 127 129 ] + suit_edge [ 129 130 ] + suit_edge [ 131 132 ] + suit_edge [ 132 128 ] + suit_edge [ 129 133 ] + suit_edge [ 133 129 ] + suit_edge [ 132 133 ] + suit_edge [ 133 132 ] + battle_cell [ 20 20 438.302 -58.0771 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 455 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random25_DNARoot" [ + pos [ 440 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 11 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -6.87 -7.34 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 4.28 -1.13 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 420 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random25_DNARoot" [ + pos [ 455 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb14:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Spring Rain Seltzer Bottles" ] + pos [ 405 -59.75 -0.75 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.14294 -3.0563 0.75 ] + nhpr [ -0 0 -0 ] + scale [ 0.68513 0.68513 0.68513 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -3.26 ] + scale [ 1.2 1 1.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.27451 0.54902 1 ] + pos [ -0.08 0 0.63 ] + scale [ 1.4 1 1 ] + kern [ 0.064866 ] + width [ 25.5552 ] + height [ 25.5552 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.368627 0.368627 1 ] + pos [ 0.09 0 -0.04 ] + scale [ 0.8 1 0.7 ] + kern [ 0.08 ] + width [ 27.6098 ] + height [ 27.6098 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 405 -80 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 18 -16 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -2.16 -14.82 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -4 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 32.35 -43.96 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 4.86 -1.13 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb14:random25_DNARoot" [ + pos [ 405 -90 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 427.821 -67.5297 7.62939e-006 ] + nhpr [ 135 0 0 ] + ] + ] + visgroup "5231" [ + vis [ "5231" "5230" "5229" "5228" "5227" "5226" "5225" "5224" "5223" "5222" "5232" "5233" "5234" "5235" "5236" "5237" "5238" "5244" ] + suit_edge [ 130 134 ] + suit_edge [ 135 131 ] + battle_cell [ 20 20 464.923 -65.1349 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 455 -90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random25_DNARoot" [ + pos [ 455 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb15:random25_DNARoot" [ + pos [ 475 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 4 -9 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 12.23 -2.62 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5232" [ + vis [ "5232" "5231" "5230" "5229" "5228" "5227" "5226" "5233" "5234" "5235" "5236" "5237" "5238" ] + suit_edge [ 134 136 ] + suit_edge [ 136 137 ] + suit_edge [ 138 139 ] + suit_edge [ 139 135 ] + suit_edge [ 136 140 ] + suit_edge [ 140 136 ] + suit_edge [ 139 140 ] + suit_edge [ 140 139 ] + suit_edge [ 206 136 ] + suit_edge [ 136 206 ] + suit_edge [ 206 139 ] + suit_edge [ 139 206 ] + battle_cell [ 20 20 489.872 -59.7652 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 515 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random25_DNARoot" [ + pos [ 525 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 15.16 -0.03 15.43 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 6.57 -0.08 15.37 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 15 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 6.19 -17.76 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 15 -26 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 6.54 -38.22 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 26.2049 0.0493774 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.755055 0.755055 0.755055 ] + color [ 0.76 0.4 0.58 1 ] + ] + ] + landmark_building "tb15:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Hayseed News" ] + pos [ 490 -90 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 1.31 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.4 ] + baseline [ + code [ "humanist" ] + color [ 0.360784 0 0.501961 1 ] + pos [ 0 0 -0.82 ] + scale [ 1.2 1 2.2 ] + kern [ 0.14312 ] + wiggle [ 3.7755 ] + width [ 25.3254 ] + height [ 25.3254 ] + flags [ "d" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 0.598236 -3.07312 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.36905 1.36905 1.36905 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb15:random25_DNARoot" [ + pos [ 500 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5233" [ + vis [ "5233" "5232" "5231" "5230" "5234" "5235" "5236" "5237" ] + suit_edge [ 137 141 ] + suit_edge [ 143 144 ] + suit_edge [ 144 138 ] + suit_edge [ 141 145 ] + suit_edge [ 207 144 ] + suit_edge [ 144 207 ] + suit_edge [ 207 141 ] + suit_edge [ 141 207 ] + battle_cell [ 20 20 506.838 -22.9092 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 485 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random25_DNARoot" [ + pos [ 475 -25 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 16.31 -19.9 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 475 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 11.88 -7.39 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 475 0 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 475 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 10.55 -9.32 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 490 10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.92999 0.0210915 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.73968 0.73968 0.73968 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 510 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 7.54 -2.84 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5234" [ + vis [ "5234" "5233" "5232" "5231" "5230" "5235" "5236" "5237" ] + suit_edge [ 145 146 ] + suit_edge [ 146 147 ] + suit_edge [ 148 149 ] + suit_edge [ 149 143 ] + suit_edge [ 149 150 ] + suit_edge [ 150 149 ] + suit_edge [ 146 150 ] + suit_edge [ 150 146 ] + battle_cell [ 20 20 543.37 -23.0359 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 525 0 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random25_DNARoot" [ + pos [ 565 10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 575 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 575 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 30.13 -43.15 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ -5.66 -6.38 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 5 -20 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 575 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.32 -2.08 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb18:random25_DNARoot" [ + pos [ 575 -30 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb16:random25_DNARoot" [ + pos [ 550 10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 5.73 -3.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + landmark_building "tb16:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Take It or Leaf It Pawn Shop" ] + pos [ 525 10 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 0.72 ] + scale [ 1.3 1 1.4 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ -0.18 0 1.48 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0 1 ] + pos [ -0.22 0 0.59 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + scale [ 0.8 1 0.6 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 557.839 -19.1633 -3.05176e-005 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "5235" [ + vis [ "5235" "5234" "5233" "5232" "5231" "5230" "5229" "5227" "5236" "5237" "5238" "5239" "5240" "5241" "5242" ] + suit_edge [ 147 151 ] + suit_edge [ 151 152 ] + suit_edge [ 153 154 ] + suit_edge [ 154 148 ] + suit_edge [ 208 151 ] + suit_edge [ 151 208 ] + suit_edge [ 208 154 ] + suit_edge [ 154 208 ] + battle_cell [ 20 20 557.474 -57.7485 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 575 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random25_DNARoot" [ + pos [ 575 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11.16 -3.42 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 540 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 1 -11 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ -1 -26 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 6.95 -36.08 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ -28.79 -43.55 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 555 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.08887 -0.0108261 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.01682 1.01682 1.01682 ] + color [ 0.5 0.68 0.36 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5236" [ + vis [ "5236" "5235" "5234" "5233" "5232" "5231" "5230" "5229" "5237" "5238" "5239" "5240" "5241" "5242" ] + suit_edge [ 152 155 ] + suit_edge [ 155 156 ] + suit_edge [ 155 159 ] + suit_edge [ 159 155 ] + suit_edge [ 160 161 ] + suit_edge [ 161 153 ] + suit_edge [ 161 159 ] + suit_edge [ 159 161 ] + battle_cell [ 20 20 584.948 -64.9935 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 595 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random25_DNARoot" [ + pos [ 575 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + landmark_building "tb17:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "The Squirting Flower" ] + pos [ 590 -90 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 0 0 0.64 ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 1.93 ] + scale [ 1.1 1 0.7 ] + kern [ 0.095802 ] + width [ 5.69606 ] + height [ 5.69606 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.34 ] + scale [ 1.2 1 1.1 ] + kern [ 0.04 ] + width [ 24.9439 ] + height [ 24.9439 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.2215 -2.93723 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.25395 1.25395 1.25395 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 595.01 -89.96 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 3.01 -8.96 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5237" [ + vis [ "5237" "5236" "5235" "5234" "5233" "5232" "5231" "5230" "5229" "5238" "5239" "5240" "5241" "5242" ] + suit_edge [ 156 162 ] + suit_edge [ 162 163 ] + suit_edge [ 164 165 ] + suit_edge [ 165 160 ] + battle_cell [ 20 20 610.074 -59.6593 -0.5 ] + group "streets" [ + street "street_curved_corner_15_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 635 -40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random25_DNARoot" [ + pos [ 620 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 11.53 -7.04 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 645 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 13 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 645 -75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 7 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 645 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 14 -14 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 3 -18 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb17:random25_DNARoot" [ + pos [ 645 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 8.73 -9.67 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 599.569 -46.4969 7.62939e-006 ] + nhpr [ 30 0 -0 ] + ] + ] + visgroup "5238" [ + vis [ "5238" "5237" "5236" "5235" "5232" "5231" "5230" "5239" "5240" "5241" "5242" ] + suit_edge [ 163 166 ] + suit_edge [ 166 167 ] + suit_edge [ 168 169 ] + suit_edge [ 169 164 ] + suit_edge [ 169 170 ] + suit_edge [ 170 169 ] + suit_edge [ 166 170 ] + suit_edge [ 170 166 ] + battle_cell [ 20 20 619.85 -25.2179 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 595 0 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random25_DNARoot" [ + pos [ 595 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + ] + prop "prop_mailbox_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 6.8 -3.04 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 645 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 645 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 15 -9 0 ] + nhpr [ -180 0 -0 ] + ] + ] + landmark_building "tb18:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "The Dandy Lion Pet Shop" ] + pos [ 594.96 -27.15 -0.06 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.88933 -2.96942 0.06 ] + nhpr [ -0 0 -0 ] + scale [ 0.97956 0.97956 0.97956 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 0.23 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0 1 ] + pos [ -0.11 0 1.62 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0 1 ] + pos [ 0.14 0 0.65 ] + scale [ 0.9 1 1 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0 1 ] + pos [ 0 0 -0.1 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5239" [ + vis [ "5239" "5238" "5237" "5236" "5235" "5240" "5241" "5242" ] + suit_edge [ 167 171 ] + suit_edge [ 171 172 ] + suit_edge [ 173 174 ] + suit_edge [ 174 168 ] + suit_edge [ 171 175 ] + suit_edge [ 175 171 ] + suit_edge [ 174 175 ] + suit_edge [ 175 174 ] + suit_edge [ 209 173 ] + suit_edge [ 173 209 ] + suit_edge [ 209 172 ] + suit_edge [ 172 209 ] + battle_cell [ 20 20 620.229 10.1227 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 645 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random25_DNARoot" [ + pos [ 595.04 -0.2 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 7.49998 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.02076 1.02076 1.02076 ] + color [ 0.79 0.55 1 1 ] + ] + ] + landmark_building "tb19:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Trellis the Truth! Private Investigators" ] + pos [ 645 20 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 14 -40 0 ] + nhpr [ 180 0 -0 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -5.2 ] + scale [ 1.1 1 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0 1 ] + pos [ 0.39 0 -0.31 ] + scale [ 1.2 1 1.5 ] + kern [ 0.087577 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0 1 ] + pos [ 0.43 0 -1.32 ] + width [ 25.9599 ] + height [ 25.9599 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.70001 -2.96002 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.842928 0.842928 0.842928 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5240" [ + vis [ "5240" "5239" "5238" "5237" "5236" "5235" "5241" "5242" ] + suit_edge [ 172 176 ] + suit_edge [ 177 173 ] + suit_edge [ 210 176 ] + suit_edge [ 176 210 ] + suit_edge [ 210 177 ] + suit_edge [ 177 210 ] + suit_edge [ 211 177 ] + suit_edge [ 177 211 ] + suit_edge [ 211 176 ] + suit_edge [ 176 211 ] + battle_cell [ 20 20 619.969 30.2829 -0.5 ] + group "streets" [ + street "street_20x40_15_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 645.04 19.8 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random25_DNARoot" [ + pos [ 595.04 24.8 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.38655 -0.0349731 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00144 1.00144 1.00144 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 645.04 39.8 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 17.8 -10.04 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.16677 0.0725708 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.02291 1.02291 1.02291 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 606.749 21.6431 -1.90735e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "5241" [ + vis [ "5241" "5240" "5239" "5238" "5237" "5236" "5235" "5242" ] + suit_edge [ 176 178 ] + suit_edge [ 178 179 ] + suit_edge [ 179 180 ] + suit_edge [ 180 181 ] + suit_edge [ 183 184 ] + suit_edge [ 184 185 ] + suit_edge [ 185 177 ] + suit_edge [ 181 186 ] + suit_edge [ 186 181 ] + suit_edge [ 183 187 ] + suit_edge [ 187 183 ] + suit_edge [ 181 183 ] + suit_edge [ 212 183 ] + suit_edge [ 183 212 ] + battle_cell [ 20 20 601 66 -0.5 ] + group "streets" [ + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ 620.04 84.8 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ 620.04 84.8 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ 620.04 74.8 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ 610.04 84.8 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random25_DNARoot" [ + pos [ 655.04 59.8 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 11.89 -0.02 7.36 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ 5.16 -0.01 7.37 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 11 -2 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 12.62 -18.31 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -12 -11 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 655.04 119.8 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 620.04 119.8 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 13 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 26.07 -15.34 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 575.04 104.8 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 595.04 39.8 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 18 -13 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ -8.06 -7.76 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 645.04 119.8 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 655.04 39.8 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 575.04 119.8 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.20245 -0.170204 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.778315 0.778315 0.778315 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 575.04 39.8 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb20:random25_DNARoot" [ + pos [ 575.04 84.8 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 18.42 -1.97 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 11.84 -1.06 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb20:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Vine and Dandy Menswear" ] + pos [ 574.04 58.8 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.69999 -2.96002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.01586 1.01586 1.01586 ] + color [ 0.68 0.42 0.74 1 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 21 -41 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.8 1.8 1.8 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -1.46 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.368627 0.368627 1 ] + pos [ 0.53 0 -0.51 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "V" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.36 0 -1.36 ] + kern [ 0.072042 ] + width [ 26.1828 ] + height [ 26.1828 ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + landmark_building "tb21:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Root 66 Diner" ] + pos [ 595.04 119.8 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -2.71 ] + baseline [ + code [ "humanist" ] + color [ 0 0.4 0.2 1 ] + pos [ 0 0 -0.31 ] + scale [ 1.8 1 1.5 ] + kern [ 0.1 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "6" ] + ] + text [ + letters [ "6" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.4 0.2 1 ] + pos [ 0 0 -1.6 ] + scale [ 2 1 1.5 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 586.735 86.976 0 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "5242" [ + vis [ "5242" "5241" "5240" "5239" "5238" "5237" "5236" ] + battle_cell [ 20 20 670 85 -0.5 ] + group "streets" [ + street "street_40x40_15_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 655.04 59.8 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random25_DNARoot" [ + pos [ 670.05 59.8 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 680.05 59.8 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 2.92 -7.87 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 675.05 109.8 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 655.04 109.8 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 19 -11 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 9.34 -2.46 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 695.05 59.8 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:random25_DNARoot" [ + pos [ 695.05 64.8 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:random25_DNARoot" [ + pos [ 695.05 109.8 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 700.05 64.8 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 695.05 104.8 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] + group "props" [ + prop "linktunnel_dd_1201_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 695.05 84.8 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + pos [ 0 0 0.2 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.15 ] + scale [ 1.2 1 1.5 ] + width [ 66.6667 ] + height [ 66.6667 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.96 ] + scale [ 0.7 1 0.7 ] + width [ 43.5654 ] + height [ 43.5654 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 687.703 76.3925 -0.499992 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "5243" [ + vis [ "5243" "5222" "5223" "5244" "5220" "5219" "5218" "5217" "5215" "5214" "5213" "5212" "5211" "5224" "5225" ] + suit_edge [ 217 216 ] + suit_edge [ 218 217 ] + suit_edge [ 217 220 ] + suit_edge [ 220 217 ] + suit_edge [ 216 221 ] + suit_edge [ 221 216 ] + battle_cell [ 20 20 305 170 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 285 155 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 325 145 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 345 195 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 325 155 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 325 195 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 9.99997 -6.00002 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 315 195 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 6 -3 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb8:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "We'd Be Gone Travel Agency" ] + pos [ 295 195 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.5015 -3.01093 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.883018 0.883018 0.883018 ] + color [ 0.68 0.42 0.74 1 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 -5.19 ] + nhpr [ -0 0 -2 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.690196 0.345098 0 1 ] + pos [ 0.43 0 -0.04 ] + scale [ 1.2 1 1.2 ] + kern [ 0.050624 ] + width [ 26.5379 ] + height [ 26.5379 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.690196 0.345098 0 1 ] + pos [ 0.32 0 -1.16 ] + scale [ 1.2 1 1.2 ] + kern [ 0.08 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb8:random25_DNARoot" [ + pos [ 285 195 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 6 -11 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 285 180 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 285 165 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.32 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 285 150 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.28421 0.272858 0 ] + nhpr [ -0 0 -0 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + ] + visgroup "5244" [ + vis [ "5244" "5243" "5222" "5220" "5219" "5218" "5217" "5223" "5224" "5225" "5228" "5229" "5230" "5231" ] + suit_edge [ 215 222 ] + suit_edge [ 222 223 ] + suit_edge [ 223 218 ] + suit_edge [ 223 224 ] + suit_edge [ 224 223 ] + suit_edge [ 218 225 ] + suit_edge [ 225 218 ] + battle_cell [ 20 20 380 175 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 365 195 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + landmark_building "tb28:toon_landmark_hqDG_DNARoot" [ + code [ "toon_landmark_hqDG" ] + building_type [ "hq" ] + title [ "" ] + pos [ 345 150 0 ] + nhpr [ 180 0 -0 ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 405 145 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 365 195 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 345 155 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 405 195 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 4.94 -0.04 17.87 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_window_flowerbox_woven_DNARoot" [ + code [ "prop_window_flowerbox_woven" ] + pos [ 11.75 -0.05 17.86 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 10 -5 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 35 -5 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb10:random25_DNARoot" [ + pos [ 390 195 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.92 0.56 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + landmark_building "tb10:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Tuft Guy Gym" ] + pos [ 365 196 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 0.39 1 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 23 -5 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + sign [ + code [ "DG_sign1" ] + pos [ 0 0 0.5 ] + scale [ 1.5 1 1.2 ] + baseline [ + code [ "humanist" ] + color [ 0.807843 0.262745 0 1 ] + pos [ 0 0 -0.33 ] + scale [ 1.7 1 1.5 ] + kern [ 0.094609 ] + wiggle [ 3 ] + stumble [ 0.071465 ] + stomp [ 0.05 ] + width [ 31.7058 ] + height [ 31.7058 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.807843 0.262745 0 1 ] + pos [ 0 0 -1.59 ] + scale [ 1.3 1 1 ] + kern [ 0.171335 ] + wiggle [ 4.36857 ] + stumble [ 0.068762 ] + stomp [ 0.05 ] + flags [ "d" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 9 -3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.00957 1.00957 1.00957 ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 405 165 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 405 175 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 345 195 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.754589 0.754589 0.754589 ] + color [ 0.53 0.48 0.82 1 ] + ] + ] + ] + visgroup "5245" [ + vis [ "5209" "5208" "5207" "5206" "5210" "5211" "5245" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 201 74 0 ] + nhpr [ 32 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 179.3 114 0.338 ] + nhpr [ -180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 170.942 114.885 0.425339 ] + nhpr [ -180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 187.287 114.072 0.415648 ] + nhpr [ 150 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 162.961 113.59 0.404519 ] + nhpr [ -150 0.0449683 0.0387841 ] + ] + ] + group "props" [ + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 210 115 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 140 75 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 160 135 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 196.748 56.8506 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 140 115 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 150 55 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 190 140 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 210 80 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 146.95 99.8488 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 203.083 99.8944 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 169.01 79.8778 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.693327 0.693327 0.693327 ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 181.378 79.7444 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.677122 0.677122 0.677122 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 205 163.763 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.26337 1.26337 1.26337 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 215 50 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.60151 1.60151 1.60151 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 227.662 105 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 135 140 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.31847 1.31847 1.31847 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 165 165 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.62399 1.62399 1.62399 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 110 100 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.34923 1.34923 1.34923 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 125 40 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.36302 1.36302 1.36302 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 215 145 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.20377 1.20377 1.20377 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 117.619 184.445 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.42415 1.42415 1.42415 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 220.37 128.591 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.60223 1.60223 1.60223 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 115 75 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.36416 1.36416 1.36416 ] + ] + ] + street "street_DG_pond_DNARoot" [ + code [ "street_DG_pond" ] + pos [ 175 100 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/daisys_garden_5300.dna b/ttmodels/src/dna/daisys_garden_5300.dna new file mode 100644 index 00000000..fc71f51c --- /dev/null +++ b/ttmodels/src/dna/daisys_garden_5300.dna @@ -0,0 +1,7776 @@ +store_suit_point [ 0, FRONT_DOOR_POINT, -65 -80 0, 33 ] +store_suit_point [ 2, STREET_POINT, -70 -45 -0.5 ] +store_suit_point [ 3, STREET_POINT, -45 -45 -0.5 ] +store_suit_point [ 4, STREET_POINT, -40 -45 -0.5 ] +store_suit_point [ 5, STREET_POINT, -5 -45 -0.5 ] +store_suit_point [ 6, STREET_POINT, 15 -45 -0.5 ] +store_suit_point [ 7, STREET_POINT, 40 -45 -0.5 ] +store_suit_point [ 8, STREET_POINT, 40 -25 -0.5 ] +store_suit_point [ 9, STREET_POINT, 40 -10 -0.5 ] +store_suit_point [ 10, STREET_POINT, 40 30 -0.5 ] +store_suit_point [ 11, STREET_POINT, 40 50 -0.5 ] +store_suit_point [ 12, STREET_POINT, 40 80 -0.5 ] +store_suit_point [ 13, STREET_POINT, 40 90 -0.5 ] +store_suit_point [ 14, STREET_POINT, 40 115 -0.5 ] +store_suit_point [ 15, STREET_POINT, 5 115 -0.5 ] +store_suit_point [ 16, STREET_POINT, -5 120 -0.5 ] +store_suit_point [ 20, STREET_POINT, -27.9619 158.232 -0.5 ] +store_suit_point [ 26, STREET_POINT, -66.8528 154.697 -0.5 ] +store_suit_point [ 27, STREET_POINT, -80.9949 140.555 -0.5 ] +store_suit_point [ 28, STREET_POINT, -95.137 126.413 -0.5 ] +store_suit_point [ 29, STREET_POINT, -109.279 112.27 -0.5 ] +store_suit_point [ 30, STREET_POINT, -123.421 98.1283 -0.5 ] +store_suit_point [ 31, STREET_POINT, -134.028 108.735 -0.5 ] +store_suit_point [ 32, STREET_POINT, -148.17 94.5927 -0.5 ] +store_suit_point [ 33, STREET_POINT, -158.777 105.199 -0.5 ] +store_suit_point [ 34, STREET_POINT, -162.312 115.806 -0.5 ] +store_suit_point [ 35, STREET_POINT, -158.777 133.484 -0.5 ] +store_suit_point [ 36, STREET_POINT, -151.706 147.626 -0.5 ] +store_suit_point [ 37, STREET_POINT, -155.241 165.303 -0.5 ] +store_suit_point [ 38, STREET_POINT, -180.002 175.879 -0.5 ] +store_suit_point [ 40, STREET_POINT, -191.119 190.888 -0.5 ] +store_suit_point [ 41, STREET_POINT, -196.119 205.888 -0.5 ] +store_suit_point [ 42, STREET_POINT, -206.119 215.888 -0.5 ] +store_suit_point [ 43, STREET_POINT, -221.119 220.888 -0.5 ] +store_suit_point [ 44, STREET_POINT, -256.119 220.888 -0.5 ] +store_suit_point [ 45, STREET_POINT, -281.119 220.888 -0.5 ] +store_suit_point [ 46, STREET_POINT, -306.119 220.888 -0.5 ] +store_suit_point [ 53, STREET_POINT, -315.947 210.883 -0.5 ] +store_suit_point [ 54, STREET_POINT, -280.947 210.883 -0.5 ] +store_suit_point [ 55, STREET_POINT, -255.947 210.883 -0.5 ] +store_suit_point [ 56, STREET_POINT, -220.947 210.883 -0.5 ] +store_suit_point [ 57, STREET_POINT, -206.057 200.859 -0.5 ] +store_suit_point [ 58, STREET_POINT, -201.057 190.859 -0.5 ] +store_suit_point [ 59, STREET_POINT, -187.017 168.864 -0.5 ] +store_suit_point [ 60, STREET_POINT, -162.269 158.258 -0.5 ] +store_suit_point [ 61, STREET_POINT, -165.804 140.58 -0.5 ] +store_suit_point [ 62, STREET_POINT, -176.357 115.765 -0.5 ] +store_suit_point [ 63, STREET_POINT, -165.75 98.0871 -0.5 ] +store_suit_point [ 64, STREET_POINT, -155.143 87.4805 -0.5 ] +store_suit_point [ 70, STREET_POINT, -116.252 91.016 -0.5 ] +store_suit_point [ 71, STREET_POINT, -102.11 105.158 -0.5 ] +store_suit_point [ 72, STREET_POINT, -87.9682 119.3 -0.5 ] +store_suit_point [ 73, STREET_POINT, -73.826 133.442 -0.5 ] +store_suit_point [ 74, STREET_POINT, -59.6839 147.585 -0.5 ] +store_suit_point [ 75, STREET_POINT, -49.0773 136.978 -0.5 ] +store_suit_point [ 76, STREET_POINT, -35.0454 151.13 -0.5 ] +store_suit_point [ 77, STREET_POINT, -24.4388 140.524 -0.5 ] +store_suit_point [ 78, STREET_POINT, -15 115 -0.5 ] +store_suit_point [ 79, STREET_POINT, 5 105 -0.5 ] +store_suit_point [ 80, STREET_POINT, 30 105 -0.5 ] +store_suit_point [ 81, STREET_POINT, 30 90 -0.5 ] +store_suit_point [ 82, STREET_POINT, 30 80 -0.5 ] +store_suit_point [ 83, STREET_POINT, 30 40 -0.5 ] +store_suit_point [ 84, STREET_POINT, 30 30 -0.5 ] +store_suit_point [ 85, STREET_POINT, 30 -10 -0.5 ] +store_suit_point [ 86, STREET_POINT, 30 -20 -0.5 ] +store_suit_point [ 87, STREET_POINT, 30 -35 -0.5 ] +store_suit_point [ 88, STREET_POINT, 15 -35 -0.5 ] +store_suit_point [ 89, STREET_POINT, 5 -35 -0.5 ] +store_suit_point [ 90, STREET_POINT, -5 -35 -0.5 ] +store_suit_point [ 91, STREET_POINT, -35 -35 -0.5 ] +store_suit_point [ 92, STREET_POINT, -45 -35 -0.5 ] +store_suit_point [ 93, STREET_POINT, -70 -35 -0.5 ] +store_suit_point [ 95, FRONT_DOOR_POINT, -10 -15 0, 4 ] +store_suit_point [ 98, FRONT_DOOR_POINT, 65 -25 0, 35 ] +store_suit_point [ 101, FRONT_DOOR_POINT, 65 45 0, 15 ] +store_suit_point [ 104, FRONT_DOOR_POINT, 5 45 0, 36 ] +store_suit_point [ 105, FRONT_DOOR_POINT, 35 130 0, 17 ] +store_suit_point [ 108, FRONT_DOOR_POINT, -30 110 0, 27 ] +store_suit_point [ 111, STREET_POINT, -10 135 -0.5 ] +store_suit_point [ 112, STREET_POINT, -17.3677 147.595 -0.5 ] +store_suit_point [ 122, FRONT_DOOR_POINT, -208.231 98.1535 0, 28 ] +store_suit_point [ 125, FRONT_DOOR_POINT, -148.127 172.4 0, 28 ] +store_suit_point [ 128, FRONT_DOOR_POINT, -176.119 220.888 0, 30 ] +store_suit_point [ 131, FRONT_DOOR_POINT, -256.119 240.888 0, 21 ] +store_suit_point [ 134, FRONT_DOOR_POINT, -271 185.889 0, 19 ] +store_suit_point [ 135, FRONT_DOOR_POINT, -336 220.889 0, 5 ] +store_suit_point [ 138, SIDE_DOOR_POINT, -65 -5.56315e-006 0, 4 ] +store_suit_point [ 141, SIDE_DOOR_POINT, -35 -60 0, 33 ] +store_suit_point [ 144, SIDE_DOOR_POINT, -40 -10 0, 4 ] +store_suit_point [ 145, SIDE_DOOR_POINT, 10 -70 0, 33 ] +store_suit_point [ 148, SIDE_DOOR_POINT, 55 90 0, 17 ] +store_suit_point [ 151, SIDE_DOOR_POINT, 56.3676 107.374 0, 17 ] +store_suit_point [ 154, SIDE_DOOR_POINT, 0 95 0, 27 ] +store_suit_point [ 157, SIDE_DOOR_POINT, -3.22559 154.666 0 ] +store_suit_point [ 160, SIDE_DOOR_POINT, -49.1875 122.846 0, 27 ] +store_suit_point [ 163, SIDE_DOOR_POINT, -102.221 154.666 0, 11 ] +store_suit_point [ 166, SIDE_DOOR_POINT, -88.1318 83.4513 0, 26 ] +store_suit_point [ 169, SIDE_DOOR_POINT, -190.499 80.4094 0, 28 ] +store_suit_point [ 172, SIDE_DOOR_POINT, -186.963 147.585 0, 28 ] +store_suit_point [ 175, SIDE_DOOR_POINT, -201.119 240.888 0, 30 ] +store_suit_point [ 178, SIDE_DOOR_POINT, -236.119 185.888 0, 19 ] +store_suit_point [ 181, SIDE_DOOR_POINT, -231.119 245.888 0, 21 ] +store_suit_point [ 182, SIDE_DOOR_POINT, -321.119 185.888 0, 5 ] +store_suit_point [ 185, STREET_POINT, -17.4195 169.028 -0.5 ] +store_suit_point [ 187, STREET_POINT, -31.3548 183.006 -0.5 ] +store_suit_point [ 188, STREET_POINT, -45.605 196.996 -0.5 ] +store_suit_point [ 189, STREET_POINT, -59.8632 183.014 -0.5 ] +store_suit_point [ 190, STREET_POINT, -73.7629 168.707 -0.5 ] +store_suit_point [ 191, STREET_POINT, -165.855 76.9788 -0.5 ] +store_suit_point [ 192, STREET_POINT, -109.189 76.8219 -0.5 ] +store_suit_point [ 193, STREET_POINT, -151.61 62.6689 -0.5 ] +store_suit_point [ 194, STREET_POINT, -137.537 48.5407 -0.5 ] +store_suit_point [ 195, STREET_POINT, -123.229 62.7606 -0.5 ] +store_suit_point [ 196, STREET_POINT, -315.992 246.004 -0.5 ] +store_suit_point [ 197, STREET_POINT, -305.975 245.916 -0.5 ] +store_suit_point [ 198, STREET_POINT, -305.858 265.85 -0.5 ] +store_suit_point [ 199, STREET_POINT, -315.977 265.82 -0.5 ] +store_suit_point [ 200, STREET_POINT, -305.967 290.774 -0.5 ] +store_suit_point [ 201, STREET_POINT, -315.884 290.904 -0.5 ] +store_suit_point [ 202, FRONT_DOOR_POINT, -16.6846 197.763 0, 10 ] +store_suit_point [ 204, FRONT_DOOR_POINT, -77.3615 200.491 0, 11 ] +store_suit_point [ 206, FRONT_DOOR_POINT, -169.331 45.009 0, 37 ] +store_suit_point [ 208, FRONT_DOOR_POINT, -109.188 48.7901 0, 26 ] +store_suit_point [ 210, SIDE_DOOR_POINT, -340.953 235.949 0, 5 ] +group "daisysGarden" [ + visgroup "5300" [ + vis [ "5300" ] + group "streets" [ + ] + group "buildings" [ + ] + group "props" [ + ] + ] + visgroup "5301" [ + vis [ "5301" "5302" "5303" "5304" ] + suit_edge [ 0 2 ] + suit_edge [ 2 0 ] + suit_edge [ 2 3 ] + suit_edge [ 92 93 ] + suit_edge [ 93 2 ] + suit_edge [ 0 93 ] + suit_edge [ 93 0 ] + suit_edge [ 138 93 ] + suit_edge [ 93 138 ] + suit_edge [ 138 2 ] + suit_edge [ 2 138 ] + battle_cell [ 20 20 -60.1072 -40.1007 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -45 -20 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -65 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -45 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -65 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -45 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb33:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "The Salad Bar" ] + pos [ -52.759 -79.9851 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.44 0.96 1 1 ] + ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 -1.02733 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.670588 0.286275 0.643137 1 ] + pos [ 0 0 -1.26793 ] + scale [ 2.06252 1 1.6579 ] + width [ 41.4125 ] + height [ 41.4125 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + pos [ 0 0 1.51511 ] + scale [ 2.60354 1 2.29368 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -15 0 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -45 0 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -85.0004 -80.0208 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 24.8306 -5.0942 0 ] + nhpr [ -1.08554e-013 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 15.8168 -11.5017 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4.71249 -13.6817 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 4.51022 -25.8643 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 15.4506 -27.5581 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -75.0001 -79.9999 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -45 -80 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -44.9999 -59.9999 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -55 0 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -75 0 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.25 0.96 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.44 0.96 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 6.2187 0.071701 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.734308 0.734308 0.734308 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -85 0 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.35 0.9 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -85 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -5 -5 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_DG_ur_DNARoot" [ + code [ "prop_tree_DG_ur" ] + pos [ 7.26348 -9.99995 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 7.5036 -30 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + prop "linktunnel_dg_5000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -85 -60 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 -2.48846 ] + scale [ 1.47523 1 1.57295 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.732978 ] + scale [ 1.47877 1 1.57837 ] + width [ 43.0446 ] + height [ 43.0446 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.80592 ] + scale [ 0.970578 1 0.865055 ] + width [ 46.0126 ] + height [ 46.0126 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + pos [ 0 0 1.64297 ] + scale [ 2.27553 1 2.0241 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -73.1493 -55.9885 -7.62939e-006 ] + nhpr [ 120 0 0 ] + ] + ] + visgroup "5303" [ + vis [ "5303" "5302" "5301" "5304" "5305" "5306" "5307" ] + suit_edge [ 5 6 ] + suit_edge [ 6 7 ] + suit_edge [ 7 8 ] + suit_edge [ 8 9 ] + suit_edge [ 85 86 ] + suit_edge [ 86 87 ] + suit_edge [ 87 88 ] + suit_edge [ 88 89 ] + suit_edge [ 98 8 ] + suit_edge [ 8 98 ] + suit_edge [ 98 86 ] + suit_edge [ 86 98 ] + suit_edge [ 145 88 ] + suit_edge [ 88 145 ] + suit_edge [ 145 6 ] + suit_edge [ 6 145 ] + battle_cell [ 20 20 35.3438 -39.9889 -0.5 ] + group "streets" [ + street "street_interior_corner_slope_DNARoot" [ + code [ "DG_street_interior_corner_slope" ] + pos [ 65 -50 3.8147e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_exterior_corner_slope_DNARoot" [ + code [ "DG_street_exterior_corner_slope" ] + pos [ 35 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "DG_street_slope_pathway_30x20" ] + pos [ 10 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_30x10_DNARoot" [ + code [ "DG_street_slope_30x10" ] + pos [ 30 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "DG_street_slope_pathway_30x20" ] + pos [ 35 -25 3.8147e-006 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb33:random_DNARoot" [ + pos [ 22.3505 -70 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.16 0.83 0.53 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.6 1 0.68 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 1.23136 -17.4119 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 7.3782 0.0410017 0 ] + nhpr [ -0 0 -0 ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 37.3505 -70 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 2.86662 -16.4627 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.13664 1.13664 1.13664 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 57.3505 -70 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 5.22458 -11.715 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 67.3505 -70 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 65 -50 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 65 -35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.8 0.54 0.61 1 ] + ] + ] + landmark_building "tb35:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Flower Bed and Breakfast" ] + pos [ 65.1238 -11.5111 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 1 0.52 1 ] + ] + sign [ + code [ "DG_sign3" ] + scale [ 1.18062 1 1.28444 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0 1 ] + pos [ 0.081223 0 0.826086 ] + scale [ 1.1108 1 0.787843 ] + stomp [ 0.04903 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0 0 0 1 ] + pos [ 0 0 -0.0484441 ] + nhpr [ -0 0 -0.614721 ] + scale [ 1.28544 1 0.843713 ] + stomp [ 0.0383746 ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.6792 -3.0658 0 ] + nhpr [ -0 0 -0 ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + ] + group "props" [ + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 20.7094 -25.2026 0 ] + nhpr [ -0 0 -0 ] + ] + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ 54 -56 0 ] + nhpr [ 90 0 -0 ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ 51.0885 -32.7388 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "5304" [ + vis [ "5304" "5303" "5302" "5301" "5305" "5306" "5307" "5308" "5319" "5318" ] + suit_edge [ 9 10 ] + suit_edge [ 84 85 ] + battle_cell [ 20 20 35.077 9.98387 -0.5 ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 85 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_transition_L_DNARoot" [ + code [ "DG_street_slope_transition_L" ] + pos [ 65 30 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_transition_R_DNARoot" [ + code [ "DG_street_slope_transition_R" ] + pos [ 65 -10 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_divided_40x70_15_DNARoot" [ + code [ "DG_street_slope_30x40" ] + pos [ 35 10 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 104.315 0.108503 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 85 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 124.315 0.108503 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 124.315 -19.8915 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 124.315 -19.8915 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 109.315 -19.8915 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 65 35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.76 0.84 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.76 0.84 1 1 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 7.2317 -17.8968 0 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 144.315 20.1085 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 17.1088 -1.688 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 2.6298 -1.67 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 144.315 0.108503 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 144.315 -19.8915 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 11.598 -5.988 0 ] + nhpr [ -30 0 -0 ] + ] + ] + ] + group "buildings" [ + flat_building "tb35:random_DNARoot" [ + pos [ 65 0 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.8 0.54 0.61 1 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ 4.75223 -17.899 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -1.13997 -3.9925 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 85 0 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.58 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 105 -7.62939e-006 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.64 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 4.6 -1.27111 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 124.315 0.108503 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 65 20 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.76 0.84 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.76 0.84 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 85 20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 15.506 -1.3134 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 100 20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 115 20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 130 20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 5 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 5 15 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.7 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.7 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 1.5969 -17.4219 0 ] + nhpr [ -180 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 61.0028 18.8966 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "5305" [ + vis [ "5305" "5304" "5303" "5302" "5301" "5306" "5307" "5308" "5309" "5319" ] + suit_edge [ 10 11 ] + suit_edge [ 11 12 ] + suit_edge [ 82 83 ] + suit_edge [ 83 84 ] + suit_edge [ 101 11 ] + suit_edge [ 11 101 ] + suit_edge [ 101 83 ] + suit_edge [ 83 101 ] + suit_edge [ 104 83 ] + suit_edge [ 83 104 ] + suit_edge [ 104 11 ] + suit_edge [ 11 104 ] + battle_cell [ 20 20 35.0527 60.0658 -0.5 ] + group "streets" [ + street "street_slope_pathway_30x20_DNARoot" [ + code [ "DG_street_slope_pathway_30x20" ] + pos [ 35 45 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_transition_R_DNARoot" [ + code [ "DG_street_slope_transition_R" ] + pos [ 65 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_30x20_DNARoot" [ + code [ "DG_street_slope_30x20" ] + pos [ 35 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "DG_street_slope_pathway_30x20" ] + pos [ 35 45 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb36:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "April's Showers and Tubs" ] + pos [ 5.07969 35.6327 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.55 1 1 ] + ] + sign [ + code [ "DG_sign2" ] + pos [ 1.01418 0 -2.78985 ] + scale [ 1.1795 1 1.36993 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.878431 0.980392 0.160784 1 ] + pos [ 0 0 1.45046 ] + scale [ 1.19793 1 1.62402 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.972549 0.662745 0.454902 1 ] + pos [ 0 0 0.216762 ] + width [ 39.5901 ] + height [ 39.5901 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 1.2032 -11.4948 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.39144 1.39144 1.39144 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.6234 -3.32618 0 ] + nhpr [ -0 0 -0 ] + color [ 0.68 0.42 0.74 1 ] + ] + ] + landmark_building "tb15:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Grass Roots" ] + pos [ 65 59.2373 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + scale [ 1.42973 1 1.28174 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0 1 ] + pos [ 0 0 1.37506 ] + scale [ 0.719279 1 1.63164 ] + width [ 4.22792 ] + height [ 4.22792 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.721569 1 0.517647 1 ] + pos [ 0 0 -1.22698 ] + scale [ 0.87014 1 1.9138 ] + width [ 42.7824 ] + height [ 42.7824 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.5848 -2.8968 0 ] + nhpr [ 2.74152e-013 0 -0 ] + scale [ 1.14421 1.14421 1.14421 ] + color [ 0.76 0.84 1 1 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 22.0656 -11.417 0 ] + nhpr [ 2.98557e-013 0 -0 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 5 55 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.65 0.44 0.75 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -2.98585 -11.5774 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.34041 1.34041 1.34041 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 19.7065 -17.2037 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 65 80 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 25.6368 -11.0582 0 ] + nhpr [ 2.95967e-006 0 -0 ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 4.754 -16.7759 0 ] + nhpr [ 2.95967e-006 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 55 80 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0Sleep" ] + cell_id [ 0 ] + pos [ 20.0066 62.2473 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5306" [ + vis [ "5306" "5305" "5304" "5303" "5302" "5307" "5308" "5309" "5310" "5319" ] + suit_edge [ 12 13 ] + suit_edge [ 13 14 ] + suit_edge [ 14 15 ] + suit_edge [ 79 80 ] + suit_edge [ 80 81 ] + suit_edge [ 81 82 ] + suit_edge [ 105 80 ] + suit_edge [ 80 105 ] + suit_edge [ 105 14 ] + suit_edge [ 14 105 ] + suit_edge [ 148 13 ] + suit_edge [ 13 148 ] + suit_edge [ 148 81 ] + suit_edge [ 81 148 ] + suit_edge [ 151 80 ] + suit_edge [ 80 151 ] + suit_edge [ 151 14 ] + suit_edge [ 14 151 ] + battle_cell [ 20 20 35.2709 110.005 -0.5 ] + group "streets" [ + street "street_exterior_corner_slope_DNARoot" [ + code [ "DG_street_exterior_corner_slope" ] + pos [ 15 110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 35 90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_courtyard_w_grass_endR_DNARoot" [ + code [ "street_30x20" ] + pos [ 5 110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ 35 130 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_20x20" ] + pos [ 35 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random_DNARoot" [ + pos [ 5 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 12.049 -2.62598 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.46593 1.46593 1.46593 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 50 130 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 55 130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 8.245 -8.1307 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 12.0037 -3.46975 0 ] + nhpr [ -9.65935e-006 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 55 115 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.35 1 0.4 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.14 0.173899 0 ] + nhpr [ -0 0 -0 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 55 100 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.6 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.6326 0.424198 0 ] + nhpr [ -0 0 -0 ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 5 75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 20.2311 -15.7603 0 ] + nhpr [ 180 0 -0 ] + ] + ] + landmark_building "tb17:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Apples and Oranges" ] + pos [ 22.2579 132.317 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.55 0.65 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 1 0.86 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.882353 0.0470588 1 ] + pos [ 0 0 1.39555 ] + scale [ 0.874706 1 1.49611 ] + width [ 24.8084 ] + height [ 24.8084 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 0.568627 0 1 ] + pos [ 0 0 -0.281146 ] + nhpr [ -0 0 2.36484 ] + scale [ 1.71239 1 1 ] + stomp [ 0.093138 ] + width [ 37.2258 ] + height [ 37.2258 ] + flags [ "db" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 9.0406 -3.093 0 ] + nhpr [ -0 0 -0 ] + color [ 1 0.55 0.65 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 48.7481 99.6923 -1.52588e-005 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "5307" [ + vis [ "5307" "5306" "5305" "5304" "5308" "5309" "5310" "5311" "5319" "5320" "5303" ] + suit_edge [ 15 16 ] + suit_edge [ 77 78 ] + suit_edge [ 78 79 ] + suit_edge [ 108 78 ] + suit_edge [ 78 108 ] + suit_edge [ 108 16 ] + suit_edge [ 16 108 ] + suit_edge [ 16 111 ] + suit_edge [ 111 112 ] + suit_edge [ 154 79 ] + suit_edge [ 79 154 ] + suit_edge [ 154 15 ] + suit_edge [ 15 154 ] + suit_edge [ 157 112 ] + suit_edge [ 112 157 ] + suit_edge [ 157 77 ] + suit_edge [ 77 157 ] + battle_cell [ 20 20 -10.3371 119.318 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 5 130 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 5 130 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -35 130 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -17.3301 86.0517 -0.0370865 ] + nhpr [ 45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -34.9539 129.723 -0.0803242 ] + nhpr [ -165 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb27:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Dirt. Cheap." ] + pos [ -27.1996 102.39 0 ] + nhpr [ 120 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 1 0.86 1 ] + ] + sign [ + code [ "DG_sign1" ] + color [ 0.48 1 0.7 1 ] + pos [ 0 0 1.40853 ] + scale [ 1 1 0.51394 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.858824 1 ] + pos [ 0.478287 0 -1.12336 ] + scale [ 1.31709 1 2.16603 ] + width [ 34.2407 ] + height [ 34.2407 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.21214 -3.25275 0 ] + nhpr [ 4.67719e-006 0 -0 ] + scale [ 1.25736 1.25736 1.25736 ] + color [ 0.48 1 0.7 1 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -34.6823 115.875 0 ] + nhpr [ 126 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -16.56 86.8112 0 ] + nhpr [ 123 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 5.56104 -5.42429 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.737222 0.737222 0.737221 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -9.48889 93.8823 0 ] + nhpr [ -135 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 5 90 0 ] + nhpr [ 165 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.42149 -0.0322708 0 ] + nhpr [ -0 0 -0 ] + color [ 0.79 0.55 1 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 1.15485 144.462 0 ] + nhpr [ -75 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 18.2928 -5.43819 0 ] + nhpr [ -15 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ -8.82158 161.783 0 ] + nhpr [ -60 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.48 1 0.7 1 ] + ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.25 0.96 0.98 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.57464 0.195533 0 ] + nhpr [ 1.47878e-006 0 -0 ] + color [ 0.38 0.82 0.45 1 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -0.37825 -1.88651 0 ] + nhpr [ 2.95756e-006 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_fightIdle" ] + cell_id [ 0 ] + pos [ -2.63119 139.124 -7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "5308" [ + vis [ "5308" "5307" "5306" "5305" "5304" "5309" "5310" "5311" "5319" "5320" ] + suit_edge [ 26 27 ] + suit_edge [ 73 74 ] + suit_edge [ 74 75 ] + suit_edge [ 75 76 ] + suit_edge [ 76 77 ] + suit_edge [ 112 20 ] + suit_edge [ 160 74 ] + suit_edge [ 74 160 ] + suit_edge [ 160 26 ] + suit_edge [ 26 160 ] + suit_edge [ 20 185 ] + suit_edge [ 190 26 ] + battle_cell [ 20 20 -49.4285 144.113 -0.5 ] + group "streets" [ + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ -45.652 168.808 0 ] + nhpr [ -135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_tight_corner_mirror_DNARoot" [ + code [ "street_courtyard_90_exit" ] + pos [ -45.652 168.808 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random_DNARoot" [ + pos [ 8.77122 179.379 0 ] + nhpr [ -135 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 19.0394 -4.2171 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -40.529 123.912 0 ] + nhpr [ -165 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ -8.21039 -9.27917 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.32802 1.32802 1.32802 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.33906 -0.414153 0 ] + nhpr [ -0 0 -0 ] + color [ 0.6 0.5 0.71 1 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -98.6291 158.258 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -93.6291 166.918 0 ] + nhpr [ 135 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ -79.652 175.808 0 ] + nhpr [ -135 0 -0 ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ -62.1964 127.609 0 ] + nhpr [ -173.951 0 -0 ] + ] + ] + visgroup "5309" [ + vis [ "5309" "5308" "5307" "5306" "5310" "5311" "5319" "5320" ] + suit_edge [ 27 28 ] + suit_edge [ 28 29 ] + suit_edge [ 71 72 ] + suit_edge [ 72 73 ] + suit_edge [ 163 72 ] + suit_edge [ 72 163 ] + suit_edge [ 163 28 ] + suit_edge [ 28 163 ] + battle_cell [ 20 20 -95.237 119.163 -0.5 ] + group "streets" [ + street "street_slope_60x10_DNARoot" [ + code [ "DG_street_w_grass_60x40" ] + pos [ -91.5581 122.902 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random_DNARoot" [ + pos [ -109.236 147.651 0 ] + nhpr [ 45 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.79 0.55 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.42326 0.262338 0 ] + nhpr [ -0 0 -0 ] + color [ 0.73 0.55 0.86 1 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 9.59105 -14.456 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.13795 1.13795 1.13795 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -126.913 129.973 0 ] + nhpr [ 45 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 18.6146 -13.4584 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 3.30571 -14.9475 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -73.9896 104.593 0 ] + nhpr [ -135 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ 0.324919 -9.10153 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 14.87 -8.52439 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.847756 0.847756 0.847756 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -59.8475 118.736 0 ] + nhpr [ -135 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 7.05937 -8.31254 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.965894 0.965894 0.965894 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5310" [ + vis [ "5310" "5309" "5308" "5307" "5311" "5312" "5313" "5314" "5319" "5320" ] + suit_edge [ 29 30 ] + suit_edge [ 30 31 ] + suit_edge [ 31 32 ] + suit_edge [ 32 33 ] + suit_edge [ 63 64 ] + suit_edge [ 70 71 ] + suit_edge [ 166 30 ] + suit_edge [ 30 166 ] + suit_edge [ 166 70 ] + suit_edge [ 70 166 ] + suit_edge [ 64 191 ] + suit_edge [ 192 70 ] + battle_cell [ 20 20 -133.974 101.405 -0.5 ] + group "streets" [ + street "street_divided_40x70_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ -137.52 76.9403 0 ] + nhpr [ 45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_courtyard_90_exit" ] + pos [ -137.52 76.9403 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random_DNARoot" [ + pos [ -150.905 120.274 0 ] + nhpr [ -45 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.57678 -1.51351 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -143.834 113.203 0 ] + nhpr [ 45 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 11.9819 -6.13557 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -88.1318 90.4513 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -0.0148468 -4.65984 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.4394 -0.086094 0 ] + nhpr [ -0 0 -0 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_fightSad" ] + cell_id [ 0 ] + pos [ -147.493 108.998 0 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "5311" [ + vis [ "5311" "5310" "5309" "5312" "5313" "5314" "5308" "5307" "5320" "5319" ] + suit_edge [ 33 34 ] + suit_edge [ 34 35 ] + suit_edge [ 61 62 ] + suit_edge [ 62 63 ] + suit_edge [ 122 34 ] + suit_edge [ 34 122 ] + suit_edge [ 122 62 ] + suit_edge [ 62 122 ] + suit_edge [ 169 33 ] + suit_edge [ 33 169 ] + suit_edge [ 169 63 ] + suit_edge [ 63 169 ] + suit_edge [ 172 61 ] + suit_edge [ 61 172 ] + suit_edge [ 172 35 ] + suit_edge [ 35 172 ] + battle_cell [ 20 20 -169.197 122.828 -0.5 ] + group "streets" [ + street "street_slope_transition_L_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -186.934 76.996 0 ] + nhpr [ 45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ -172.701 90.9214 0 ] + nhpr [ 45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -222.318 126.371 0 ] + nhpr [ -135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -186.837 147.445 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb28:random_DNARoot" [ + pos [ -201.105 147.584 0 ] + nhpr [ -45 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.58 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.58 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -194.034 140.513 0 ] + nhpr [ 45 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.3865 -0.226685 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.849056 0.849056 0.849056 ] + color [ 0.8 0.54 0.61 1 ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -215.247 133.442 0 ] + nhpr [ 45 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_fat_brickbox_ur" ] + pos [ 8.30212 -18.9922 1.14441e-005 ] + nhpr [ 90 0 -0 ] + scale [ 0.828572 0.828572 0.828572 ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -229.389 119.3 0 ] + nhpr [ 45 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -215.247 105.158 0 ] + nhpr [ 135 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -182.379 72.2332 0 ] + nhpr [ 135 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.55 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 22.7814 -10.6644 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.814832 0.814832 0.814832 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.53783 0.0705605 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.754298 0.754298 0.754298 ] + color [ 1 0.55 1 1 ] + ] + ] + landmark_building "tb28:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Couch Potato Furniture" ] + pos [ -200.143 89.9069 0 ] + nhpr [ 135 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.48 1 0.7 1 ] + ] + sign [ + code [ "DG_sign1" ] + scale [ 1.04378 1 1.24331 ] + baseline [ + code [ "mickey" ] + color [ 0.0901961 0.701961 0.368627 1 ] + pos [ 0.642458 0 -0.224448 ] + scale [ 1.3609 1 1.38434 ] + stomp [ -0.0648025 ] + width [ 57.3856 ] + height [ 57.3856 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.0901961 0.701961 0.368627 1 ] + pos [ 0.397194 0 -1.46502 ] + nhpr [ -0 0 -1.96052 ] + scale [ 1.76707 1 1.41455 ] + stomp [ 0.0384382 ] + width [ 40.9095 ] + height [ 40.9095 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.32042 -4.45901 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 19.6961 -5.1028 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ -187.55 93.0427 0 ] + nhpr [ 105 0 -0 ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ -185.288 109.662 0 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "5312" [ + vis [ "5312" "5311" "5310" "5313" "5314" "5315" "5316" "5320" "5321" ] + suit_edge [ 35 36 ] + suit_edge [ 36 37 ] + suit_edge [ 37 38 ] + suit_edge [ 38 40 ] + suit_edge [ 59 60 ] + suit_edge [ 60 61 ] + suit_edge [ 58 59 ] + suit_edge [ 125 37 ] + suit_edge [ 37 125 ] + suit_edge [ 125 60 ] + suit_edge [ 60 125 ] + battle_cell [ 20 20 -175.813 170.973 -0.5 ] + group "streets" [ + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_angle_45" ] + pos [ -176.263 150.931 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_double_corner_DNARoot" [ + code [ "street_angle_30" ] + pos [ -176.237 151.025 0 ] + nhpr [ -105 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -176.263 150.931 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -176.119 190.888 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -176.119 190.888 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb9:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Fungi Clown School" ] + pos [ -151.247 182.932 0 ] + nhpr [ -41 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "tunnel_sign_magenta" ] + pos [ 0 0 1.07359 ] + scale [ 0.917351 1 0.5672 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 0 1 ] + pos [ 0 0 0.394067 ] + scale [ 1.06084 1 2.27866 ] + kern [ 0.0613889 ] + stumble [ 0.020641 ] + stomp [ -0.205911 ] + width [ 291.638 ] + height [ 291.638 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "i" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 1 1 ] + pos [ 0 0 -1.30838 ] + scale [ 1.36129 1 1.418 ] + width [ 42.6351 ] + height [ 42.6351 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.26752 -2.20805 0 ] + nhpr [ -2 0 -0 ] + scale [ 1.25654 1.25654 1.25654 ] + color [ 0.6 1 0.68 1 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -176.387 190.445 0 ] + nhpr [ -15 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 10.0462 -1.69566 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.36884 1.36884 1.36884 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -3.81783 -4.77276 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -157.463 185.371 0 ] + nhpr [ -43 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -141.141 170.872 0 ] + nhpr [ -75 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 10.4206 -1.55503 0 ] + nhpr [ -1.64936e-006 0 -0 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -137.308 156.448 0 ] + nhpr [ -95 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -138.292 141.784 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -213.574 179.6 0 ] + nhpr [ 99 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.89 0.7 0.98 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -203.574 162.28 0 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 0.35 0.9 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 3.37434 -1.17095 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 16.6415 -1.19048 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -179.892 154.655 0 ] + nhpr [ 162 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -8.62355 -1.02131 0 ] + nhpr [ 18 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -205.319 172.333 0 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "5313" [ + vis [ "5313" "5312" "5311" "5310" "5314" "5315" "5316" "5320" "5321" ] + suit_edge [ 40 41 ] + suit_edge [ 41 42 ] + suit_edge [ 42 43 ] + suit_edge [ 56 57 ] + suit_edge [ 57 58 ] + suit_edge [ 128 57 ] + suit_edge [ 57 128 ] + suit_edge [ 128 41 ] + suit_edge [ 41 128 ] + suit_edge [ 175 41 ] + suit_edge [ 41 175 ] + suit_edge [ 175 57 ] + suit_edge [ 57 175 ] + battle_cell [ 20 20 -205.946 211.023 -0.5 ] + group "streets" [ + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ -221.119 230.888 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "props" [ + ] + group "buildings" [ + landmark_building "tb30:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "Spill the Beans" ] + pos [ -173.885 232.437 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.48 1 0.7 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + scale [ 1.33179 1 1.35958 ] + baseline [ + code [ "suit" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 1.98037 ] + scale [ 0.849881 1 1.00526 ] + width [ 2.90794 ] + height [ 2.90794 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0 0.501961 1 1 ] + pos [ -0.00123434 0 0.113031 ] + kern [ 0.178521 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 0.99044 ] + scale [ 0.813463 1 0.768222 ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0 0.658824 0 1 ] + pos [ 0 0 -1.3845 ] + scale [ 1.17608 1 1.82023 ] + width [ 45.2615 ] + height [ 45.2615 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.408 -2.927 0 ] + nhpr [ -6.53466e-014 0 -0 ] + scale [ 1.14179 1.14179 1.14179 ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ -221.057 240.859 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 8.99806 -1.7012 0 ] + nhpr [ 1 0 -0 ] + scale [ 1.46579 1.46579 1.46579 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ -221.057 245.859 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ -206.057 240.859 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.4 0.8 0.52 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_pillars_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.16 0.83 0.53 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -1.30096e-005 1.08451e-005 0 ] + nhpr [ 5.96016e-008 0 -0 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ -196.057 240.859 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_fat_brickbox_ur" ] + pos [ 7.8447 -10.47 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.797621 0.797621 0.797621 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ -173.735 205.204 0 ] + nhpr [ -100 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 9.35323 -1.97414 0 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ -176.057 240.859 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.38 0.82 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -215.921 194.416 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 3.672 -7.955 0 ] + nhpr [ 1.00179e-005 0 -0 ] + ] + ] + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ -177.56 200.412 0 ] + nhpr [ 120 0 -0 ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -216.51 230.46 -1.52588e-005 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "5314" [ + vis [ "5314" "5313" "5312" "5311" "5310" "5315" "5316" "5320" "5321" ] + suit_edge [ 43 44 ] + suit_edge [ 44 45 ] + suit_edge [ 54 55 ] + suit_edge [ 55 56 ] + suit_edge [ 131 44 ] + suit_edge [ 44 131 ] + suit_edge [ 131 55 ] + suit_edge [ 55 131 ] + suit_edge [ 134 44 ] + suit_edge [ 44 134 ] + suit_edge [ 134 55 ] + suit_edge [ 55 134 ] + suit_edge [ 178 56 ] + suit_edge [ 56 178 ] + suit_edge [ 178 43 ] + suit_edge [ 43 178 ] + suit_edge [ 181 43 ] + suit_edge [ 43 181 ] + suit_edge [ 181 56 ] + suit_edge [ 56 181 ] + battle_cell [ 20 20 -251.114 215.819 -0.5 ] + group "streets" [ + street "street_grass_transition_60x20_DNARoot" [ + code [ "DG_street_grass_transition_60x20" ] + pos [ -231.057 215.859 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "DG_street_w_grass_60x40" ] + pos [ -261 215.889 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb19:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Green Bean Jeans" ] + pos [ -256 185.889 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.76 0.84 1 1 ] + ] + sign [ + code [ "DG_sign1" ] + color [ 0 1 0.99 1 ] + pos [ 0 0 -1.01763 ] + scale [ 1.33249 1 1.17093 ] + baseline [ + code [ "mickey" ] + color [ 0.678431 0.223529 0.94902 1 ] + pos [ 0.324387 0 -1.18013 ] + scale [ 1.08283 1 2.14893 ] + wiggle [ -0.0442122 ] + width [ 54.6788 ] + height [ 54.6788 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 20.8437 -4.61386 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.1952 1.1952 1.1952 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 5.22882 -4.33765 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.25299 1.25299 1.25299 ] + ] + ] + landmark_building "tb21:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Squash and Stretch Gym" ] + pos [ -268.624 246.402 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.55 0.65 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 1 0.86 1 ] + scale [ 0.808626 1 1.4412 ] + baseline [ + code [ "humanist" ] + color [ 1 0 0 1 ] + pos [ 0 0 1.35949 ] + scale [ 1.06464 1 1.72134 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.0156863 0 0.0156863 1 ] + pos [ 0 0 0.647558 ] + scale [ 1 1 0.607175 ] + text [ + letters [ "&" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 1 1 ] + pos [ 0 0 0.0232416 ] + scale [ 2.91634 1 0.759946 ] + stumble [ 0.0363601 ] + width [ 41.7061 ] + height [ 41.7061 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.807843 0 1 ] + pos [ 0 0 -0.940895 ] + scale [ 1.54272 1 1 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 25.08 -14.613 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.703 -2.98999 0 ] + nhpr [ -0 0 -0 ] + color [ 0.8 0.54 0.61 1 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 2.94299 -15.034 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ -281 245.889 0 ] + nhpr [ -1 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 5.31423 -14.2978 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.832686 0.832686 0.832686 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ -241.057 245.859 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.6 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.62 0.85 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.74293 0.33182 0 ] + nhpr [ 5.96016e-008 0 -0 ] + color [ 1 1 0.39 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -225.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.75 0.7 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 2.03 0.166992 0 ] + nhpr [ -2.7306e-006 0 -0 ] + color [ 0.76 0.84 1 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -240.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.73 0.55 0.86 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.16 0.83 0.53 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.96 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 3.28299 -14.081 0 ] + nhpr [ -1.00179e-005 0 -0 ] + scale [ 1.16437 1.16437 1.16437 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -225.921 194.416 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "5315" [ + vis [ "5315" "5314" "5313" "5312" "5316" "5321" ] + suit_edge [ 45 46 ] + suit_edge [ 53 54 ] + suit_edge [ 135 53 ] + suit_edge [ 53 135 ] + suit_edge [ 135 46 ] + suit_edge [ 46 135 ] + suit_edge [ 182 46 ] + suit_edge [ 46 182 ] + suit_edge [ 182 53 ] + suit_edge [ 53 182 ] + suit_edge [ 196 53 ] + suit_edge [ 46 197 ] + suit_edge [ 210 196 ] + suit_edge [ 196 210 ] + suit_edge [ 210 197 ] + suit_edge [ 197 210 ] + battle_cell [ 20 20 -311.054 215.806 -0.5 ] + group "streets" [ + street "street_exterior_whole_corner_w_grass_DNARoot" [ + code [ "DG_street_exterior_whole_corner_w_grass" ] + pos [ -290.947 215.883 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb5:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Snail Mail" ] + pos [ -340.825 210 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DG_sign3" ] + pos [ 0 0 -3.08439 ] + scale [ 1.01508 1 1.43629 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 0.882353 0 0.882353 1 ] + pos [ -0.240297 0 0.240371 ] + scale [ 1.04562 1 1.38069 ] + flags [ "db" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 5.38106 -3.06061 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.891071 0.891071 0.891071 ] + color [ 1 1 0.39 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -340.921 225.853 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.7 0.98 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.7 0.98 1 ] + count [ 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.52992 0.0138245 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.770536 0.770536 0.770536 ] + color [ 0.73 0.55 0.86 1 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 6.015 -13.841 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -340.921 186.004 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 25.07 -14.412 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.24355 1.24355 1.24355 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -280.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.64 0.51 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 0.71 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 0.197983 -14.884 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -290.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.86 1 ] + windows [ + code [ "window_sm_pointed_DG_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 5.19798 -14.884 0 ] + nhpr [ -135 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 22.7097 -4.90005 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -325.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_DG_flat_trashcan_DNARoot" [ + code [ "prop_DG_flat_trashcan" ] + pos [ 8.94907 -4.9294 0 ] + nhpr [ -31 0 -0 ] + scale [ 0.732887 0.732887 0.732887 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -315.921 186.004 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.73 0.55 0.86 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ -9.80202 -14.884 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 1.42414e-005 -0.173996 0 ] + nhpr [ 0.999997 0 -0 ] + color [ 1 0.55 1 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -296.331 230.237 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -326.102 243.551 0.000152588 ] + nhpr [ 45 0 0 ] + ] + ] + visgroup "5316" [ + vis [ "5316" "5315" "5314" "5313" "5312" "5321" ] + suit_edge [ 198 200 ] + suit_edge [ 200 201 ] + suit_edge [ 201 199 ] + battle_cell [ 20 20 -310.942 281.003 -0.5 ] + group "streets" [ + street "street_10x20_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -330.947 305.883 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -290.947 345.883 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_street_40x40_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -370.947 305.883 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_street_40x40_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -290.947 305.883 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_street_40x40_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -370.947 345.883 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_street_40x40_DNARoot" [ + code [ "street_street_40x40" ] + pos [ -290.947 345.883 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ -270.947 305.883 -0.5 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_suit_build5_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -270.947 300.883 -0.5 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_suit_build3_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -270.947 295.883 -0.5 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -350.921 300.85 -0.521725 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -350.921 290.85 -0.521725 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -280.947 285.883 -0.5 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -350.921 305.85 -0.521725 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -270.947 320.883 -0.5 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -350.921 275.85 -0.521725 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build3_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -340.921 275.85 -0.521725 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + group "props" [ + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -338.402 326.651 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -286.492 388.346 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -270.304 387.555 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -254.625 386.048 0 ] + nhpr [ -0 0 -0 ] + ] + prop "linktunnel_sellhq_11000_DNARoot" [ + code [ "prop_cog_tunnel" ] + pos [ -310.947 315.883 -0.475 ] + nhpr [ -180 -0.115471 -2.01896e-008 ] + sign [ + baseline [ + code [ "suit" ] + color [ 0.733333 0.733333 0.733333 1 ] + pos [ 0 0 -0.40119 ] + scale [ 2.50633 1 1.23588 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0.733333 0.733333 0.733333 1 ] + pos [ 0 0 -1.68829 ] + scale [ 2.33314 1 1.43206 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Q" ] + ] + ] + ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -370.03 350.647 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.682782 0.682782 0.682782 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -376.796 335.131 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.682167 0.682167 0.682167 ] + ] + ] + ] + visgroup "5317" [ + vis [ "5317" ] + group "streets" [ + ] + group "buildings" [ + ] + group "props" [ + ] + ] + visgroup "5318" [ + vis [ "5318" "5304" ] + group "streets" [ + street "street_DG_pond_DNARoot" [ + code [ "street_DG_pond" ] + pos [ 134.315 -69.8915 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + ] + group "props" [ + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 113.18 -33.6042 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 120.341 -108.192 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.47393 1.47393 1.47393 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 172.499 -72.3023 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 93.8506 -53.4574 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.33581 1.33581 1.33581 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 137.646 -102.917 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 166.574 -40.2223 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 170.563 -95.0054 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.48133 1.48133 1.48133 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 195.259 -46.7119 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.93529 1.93529 1.93529 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 75.2603 -95.442 0 ] + nhpr [ 45 0 -0 ] + scale [ 2.11097 2.11097 2.11097 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 160.441 -124.085 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 165.088 -16.3328 0 ] + nhpr [ 45 0 -0 ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 134.5 -93.3 0 ] + nhpr [ 3 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 120.449 -83.7576 0.413117 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 120.848 -55.6079 0.388995 ] + nhpr [ -135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 148.224 -83.7521 0.407928 ] + nhpr [ 45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 148.591 -55.962 0.358744 ] + nhpr [ 135 0 -0 ] + ] + ] + ] + visgroup "5319" [ + vis [ "5319" "5310" "5309" "5308" "5307" "5306" "5305" "5311" "5320" ] + suit_edge [ 185 187 ] + suit_edge [ 187 188 ] + suit_edge [ 188 189 ] + suit_edge [ 189 190 ] + suit_edge [ 202 187 ] + suit_edge [ 187 202 ] + suit_edge [ 204 189 ] + suit_edge [ 189 204 ] + battle_cell [ 20 20 -45.6064 190.215 -0.5 ] + group "streets" [ + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "DG_street_Tcourtyard_w_grass" ] + pos [ -45.676 168.772 0 ] + nhpr [ 45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_courtyard_w_grass_endL_DNARoot" [ + code [ "DG_street_Tcourtyard_w_grass" ] + pos [ -45.6064 168.766 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb11:toon_landmark_DG_D1_DNARoot" [ + code [ "toon_landmark_DG_D1" ] + title [ "Lettuce Inn" ] + pos [ -88.2238 193.671 0 ] + nhpr [ 45 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign2" ] + color [ 0.44 0.96 1 1 ] + scale [ 1 1 1.57305 ] + baseline [ + code [ "mickey" ] + color [ 0.823529 0.337255 0.945098 1 ] + pos [ 0 0 -0.128656 ] + scale [ 1.3996 1 1.59311 ] + width [ 45.7077 ] + height [ 45.7077 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -59.7941 218.305 0 ] + nhpr [ 45 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.25 0.96 0.98 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.58 0.65 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.25 0.96 0.98 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 1.7952 -17.8805 0.000442505 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -45.652 232.448 0 ] + nhpr [ -45 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -102.221 175.879 0 ] + nhpr [ 45 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 22.516 -15.6387 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DG_flower_lamp2_DNARoot" [ + code [ "prop_DG_flower_lamp2" ] + pos [ 1.52499 -23.064 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ -70.4007 207.699 0 ] + nhpr [ 45 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.16 0.83 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 0.169488 -15.4034 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -35.0454 221.841 0 ] + nhpr [ -45 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 21.547 -11.5515 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.36545 1.36545 1.36545 ] + ] + ] + landmark_building "tb10:toon_landmark_DG_C1_DNARoot" [ + code [ "toon_landmark_DG_C1" ] + title [ "Honeydew This" ] + pos [ -20.9273 207.663 0 ] + nhpr [ -45 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.62 0.85 1 ] + ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 1 1 0.86 1 ] + pos [ 0 0 -3.39297 ] + scale [ 1 1 1.6986 ] + baseline [ + code [ "humanist" ] + color [ 0 0.901961 0.627451 1 ] + pos [ 0 0 -0.487394 ] + scale [ 1.49849 1 0.915153 ] + width [ 56.1629 ] + height [ 56.1629 ] + flags [ "db" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.901961 0.627451 1 ] + pos [ 0 0 -1.63961 ] + scale [ 1.40314 1 0.921631 ] + width [ 54.1617 ] + height [ 54.1617 ] + flags [ "db" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + pos [ 0 0 1.79217 ] + scale [ 3.16857 1 2.01173 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.90117 -3.11741 0 ] + nhpr [ -0 0 -0 ] + color [ 0.76 0.4 0.58 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -6.78513 193.521 0 ] + nhpr [ -45 0 -0 ] + width [ 25 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -0.653717 -12.1127 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2125 1.2125 1.2125 ] + ] + ] + ] + group "props" [ + prop "prop_DG_flower_bed_DNARoot" [ + code [ "prop_DG_flower_bed" ] + pos [ -89.6852 208.082 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -46.6071 165.405 0 ] + nhpr [ 45 -0.217046 -0.0161048 ] + scale [ 2.18317 2.18317 2.18317 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_hydrant" ] + anim [ "tt_a_ara_dga_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -35.755 204.295 0 ] + nhpr [ -45 0 -0 ] + ] + ] + visgroup "5320" [ + vis [ "5320" "5319" "5313" "5312" "5311" "5310" "5309" "5308" "5307" "5314" ] + suit_edge [ 191 193 ] + suit_edge [ 193 194 ] + suit_edge [ 194 195 ] + suit_edge [ 195 192 ] + suit_edge [ 206 193 ] + suit_edge [ 193 206 ] + suit_edge [ 208 195 ] + suit_edge [ 195 208 ] + battle_cell [ 20 20 -137.349 55.8286 -0.5 ] + group "streets" [ + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "DG_street_Tcourtyard_w_grass" ] + pos [ -137.52 76.9403 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "DG_street_Tcourtyard_w_grass" ] + pos [ -137.52 76.9403 0 ] + nhpr [ -135 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb26:toon_landmark_DG_A2_DNARoot" [ + code [ "toon_landmark_DG_A2" ] + title [ "Ant Farming Supplies" ] + pos [ -95.7811 54.6819 0 ] + nhpr [ -135 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 1 0.52 1 ] + ] + sign [ + code [ "DG_sign3" ] + color [ 1 1 0.86 1 ] + pos [ 0 0 0.880819 ] + scale [ 1.48491 1 1.23352 ] + baseline [ + code [ "mickey" ] + color [ 0.584314 0.0745098 0.74902 1 ] + pos [ 0 0 1.17726 ] + scale [ 1.16815 1 0.914542 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.584314 0.0745098 0.74902 1 ] + scale [ 1.07601 1 1 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.25845 -2.96119 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.12 1.12 1.12 ] + color [ 1 1 0.52 1 ] + ] + ] + landmark_building "tb37:toon_landmark_DG_A1_DNARoot" [ + code [ "toon_landmark_DG_A1" ] + title [ "School of Vine Arts" ] + pos [ -158.964 34.7451 0 ] + nhpr [ 135 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.38 0.82 0.45 1 ] + ] + sign [ + code [ "DG_sign1" ] + color [ 0.68 0.85 0.45 1 ] + pos [ -0.283 0 -1.06311 ] + scale [ 1.71304 1 1 ] + baseline [ + code [ "DG_Ironwork" ] + color [ 1 1 0 1 ] + pos [ 0.213812 0 -1.18445 ] + scale [ 0.987197 1 1.80698 ] + flags [ "bd" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 8.25845 -2.96119 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.15 1.15 1.15 ] + color [ 0.38 0.82 0.45 1 ] + ] + ] + landmark_building "tb2:toon_landmark_hqDG_DNARoot" [ + code [ "toon_landmark_hqDG" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ -138.597 77.1236 -0.5 ] + nhpr [ -45 0 -0 ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ -137.744 13.4557 0 ] + nhpr [ 135 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 1 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -123.602 27.5979 0 ] + nhpr [ -135 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.18 0.78 0.69 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0 1 0.99 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.25 0.96 0.98 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.53 0.91 1 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -87.9572 62.9397 0 ] + nhpr [ -135 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.88 0.4 0.66 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.65 1 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 3.81951 -17.6664 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -113 38.1993 0 ] + nhpr [ -135 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 5.94961 -16.3384 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ -88.1318 75.4513 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ -189.45 65.1621 0 ] + nhpr [ 45 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.69 0.31 0.83 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 22 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ -148.35 24.0623 0 ] + nhpr [ 135 0 -0 ] + width [ 15.6 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ -178.763 54.5441 0 ] + nhpr [ 135 0 -0 ] + width [ 15.6 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 19.062 -27.5181 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_mailbox" ] + anim [ "tt_a_ara_dga_mailbox_idle0Sleep" ] + cell_id [ 0 ] + pos [ -146.634 40.0332 0 ] + nhpr [ 135 0 0 ] + ] + ] + visgroup "5321" [ + vis [ "5321" "5315" "5314" "5316" "5313" "5312" ] + suit_edge [ 197 198 ] + suit_edge [ 199 196 ] + battle_cell [ 20 20 -311.156 255.81 -0.5 ] + group "streets" [ + street "street_grass_transition_60x20_DNARoot" [ + code [ "DG_street_grass_transition_60x20" ] + pos [ -310.947 255.883 2.28882e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random_DNARoot" [ + pos [ -281 265.889 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 10.2285 -13.1148 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -340.921 250.85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shinglesDG_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 4.15599 -14.499 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -340.921 265.85 -0.521725 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -270.947 285.883 -0.5 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__dga_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__dga_trashcan" ] + anim [ "tt_a_ara_dga_trashcan_fightBoost" ] + cell_id [ 0 ] + pos [ -327.192 261.779 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "5302" [ + vis [ "5302" "5301" "5303" "5304" "5305" "5306" ] + suit_edge [ 3 4 ] + suit_edge [ 4 5 ] + suit_edge [ 89 90 ] + suit_edge [ 90 91 ] + suit_edge [ 91 92 ] + suit_edge [ 95 5 ] + suit_edge [ 5 95 ] + suit_edge [ 95 90 ] + suit_edge [ 90 95 ] + suit_edge [ 141 4 ] + suit_edge [ 4 141 ] + suit_edge [ 141 91 ] + suit_edge [ 91 141 ] + suit_edge [ 144 91 ] + suit_edge [ 91 144 ] + suit_edge [ 144 4 ] + suit_edge [ 4 144 ] + battle_cell [ 20 20 -20.0233 -39.8373 -0.5 ] + group "streets" [ + street "street_slope_transition_R_DNARoot" [ + code [ "DG_street_slope_transition_R" ] + pos [ -25 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_transition_L_DNARoot" [ + code [ "DG_street_slope_transition_L" ] + pos [ -25 -70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "DG_street_slope_pathway_30x20" ] + pos [ -10 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + street "street_interior_corner_slope_DNARoot" [ + code [ "DG_street_slope_30x20" ] + pos [ -15 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DG_tex" ] + texture [ "street_sidewalk_DG_tex" ] + texture [ "street_curb_DG_tex" ] + ] + ] + group "props" [ + ] + group "buildings" [ + landmark_building "tb4:toon_landmark_DG_B1_DNARoot" [ + code [ "toon_landmark_DG_B1" ] + title [ "Just Vase It" ] + pos [ -17.7141 -9.95449 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0.211244 0 1.28944 ] + scale [ 0.920045 1 0.4868 ] + baseline [ + code [ "mickey" ] + color [ 1 0.0235294 0.756863 1 ] + pos [ 0 0 1.20587 ] + scale [ 0.637962 1 1.32211 ] + width [ 7.28993 ] + height [ 7.28993 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.0235294 0.756863 1 ] + scale [ 0.749823 1 1 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.0235294 0.756863 1 ] + pos [ 0 0 -1.45209 ] + scale [ 1 1 1.61187 ] + width [ 46.1053 ] + height [ 46.1053 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -25 -60 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ul" ] + color [ 1 1 0.6 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ 4.6473 0.0297992 0 ] + nhpr [ -0 0 -0 ] + color [ 0.18 0.78 0.69 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -12.6495 -70 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.37 0.75 0.35 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_dr" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.69 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -25 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -2.64952 -70 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.85 0.91 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.85 0.91 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 7.51047 -16.8126 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.930944 0.930944 0.930944 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -5 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.79 0.55 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_ur" ] + color [ 0.6 1 0.68 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.53 1 1 ] + ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_large_woodbox_ur" ] + pos [ 2.92529 -16.4874 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.13311 1.13311 1.13311 ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -11.4593 -2.8851 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.25306 1.25306 1.25306 ] + color [ 0.48 1 0.7 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -35 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 1 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_tree_large_woodbox_ul" ] + pos [ 8.61304 -16.5049 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -45 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.53 0.48 0.82 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 1 0.55 0.81 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stairs_DG_DNARoot" [ + code [ "prop_stairs_DG" ] + pos [ -0.0778999 -0.1071 0 ] + nhpr [ -0 0 -0 ] + color [ 1 1 0.52 1 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/daisys_garden_sz.dna b/ttmodels/src/dna/daisys_garden_sz.dna new file mode 100644 index 00000000..1ec23837 --- /dev/null +++ b/ttmodels/src/dna/daisys_garden_sz.dna @@ -0,0 +1,1383 @@ +group "daisysGarden" [ + visgroup "5000:safe_zone" [ + vis [ "5000:safe_zone" ] + group "props" [ + prop "daisys_garden_DNARoot" [ + code [ "daisys_garden" ] + pos [ -0.16 0.130005 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 19.57 14.03 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 26.67 40.1 0.06 ] + nhpr [ 165 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 80 80 0 ] + nhpr [ 165 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -61.9 66.92 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -16.6 32.51 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -82.5 126.82 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 85.04 123.19 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -19.68 181.64 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ 18.86 179.73 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ -0.72 187.18 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -19.8 14.98 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ -31.98 71.25 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_tree_DG_ul_DNARoot" [ + code [ "prop_tree_DG_ul" ] + pos [ 33.6 73.82 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_fountain_DNARoot" [ + code [ "prop_daisys_fountain" ] + pos [ -0.39 50.94 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 81.13 154.68 10 ] + nhpr [ 165 0 0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ 29.22 198.3 10 ] + nhpr [ 165 0 0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -35.33 197.88 10 ] + nhpr [ 165 0 0 ] + ] + prop "prop_DG_flower_lamp1_DNARoot" [ + code [ "prop_DG_flower_lamp1" ] + pos [ -82.29 155.25 10 ] + nhpr [ 165 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -71.0948 213.74 10 ] + nhpr [ 270 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -36.2934 235.196 10 ] + nhpr [ 165 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 46.36 214.43 10 ] + nhpr [ -45 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 54.3 207.75 10 ] + nhpr [ -45 0 0 ] + ] + prop "prop_window_flowerbox_wood_DNARoot" [ + code [ "prop_window_flowerbox_wood" ] + pos [ -21.08 222.26 17.42 ] + nhpr [ 0 0 0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -84.66 172.97 9.97 ] + nhpr [ 50 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -64.16 197.29 10.01 ] + nhpr [ -131 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 65.13 196.32 10.06 ] + nhpr [ -55 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 83.13 171.01 10.02 ] + nhpr [ 127 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 55.1738 12.9627 0 ] + nhpr [ -167 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 75.19 23.04 0 ] + nhpr [ 45 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 51.34 11.94 0 ] + nhpr [ 16 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 72.51 20.35 0 ] + nhpr [ 45 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -31.37 9.33 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -35.18 9.32 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -50.46 11.96 0 ] + nhpr [ -30 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -53.68 13.83 0 ] + nhpr [ -30 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -65.64 20.37 0 ] + nhpr [ -45 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -68.3 23.05 0 ] + nhpr [ -45 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -94.01 87.1 0 ] + nhpr [ -60 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -95.91 90.39 0 ] + nhpr [ -60 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -101.45 105.97 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -101.52 109.71 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -97.16 127.36 0 ] + nhpr [ 60 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -99.06 124.13 0 ] + nhpr [ 60 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 95.01 87.68 0 ] + nhpr [ 60 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 96.93 90.96 0 ] + nhpr [ 60 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 99.94 103.97 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 99.92 107.67 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 98.89 119.93 0 ] + nhpr [ 105 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 97.89 123.55 0 ] + nhpr [ 105 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ -2.75 194.59 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_yellow_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 1.03 194.63 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 15.2 193.53 -0.01 ] + nhpr [ -25 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ 18.66 191.93 -0.02 ] + nhpr [ -24 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -22.53 191.78 0.01 ] + nhpr [ 22 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_pink" ] + pos [ -19.01 193.22 0.01 ] + nhpr [ 21 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 86.93 168.59 9.95 ] + nhpr [ -9 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 94.71 174.42 10.54 ] + nhpr [ -143 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -99.77 170.93 10 ] + nhpr [ -18 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -90.34 167.85 10 ] + nhpr [ 60 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + ] + ] + prop "prop_daisy_park_table_DNARoot" [ + code [ "prop_daisy_park_table" ] + pos [ -81 78 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 34.4 9.41 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_daisys_flowerbox_pink_DNARoot" [ + code [ "prop_daisys_flowerbox_yellow" ] + pos [ 30.44 9.42 0 ] + nhpr [ -175 0 0 ] + ] + ] + node "buildings" [ + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ 8.37 222.32 10 ] + nhpr [ 0 0 0 ] + sign [ + color [ 0.18 0.78 0.69 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09 ] + width [ 11.1111 ] + height [ 11.1111 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.996078 0.219608 0.54902 1 ] + pos [ 0.29 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.22 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 53.79 212.04 10 ] + nhpr [ -42 0 0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 64.94 202.01 10 ] + nhpr [ 37 0 0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -66.556 204.778 10 ] + nhpr [ 138.814 0 0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -75.6786 212.057 10 ] + nhpr [ 60 0 0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 8.37 222.32 10 ] + nhpr [ 120 0 0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 39.66 227.09 10 ] + nhpr [ -105 0 0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + ] + ] + prop "linktunnel_dg_5201_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -109.48 292.95 3.36 ] + nhpr [ -130 0 0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 -0.18 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.95 ] + scale [ 1.4 1 1.5 ] + width [ 40.563 ] + height [ 40.563 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.93 ] + scale [ 0.8 1 0.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + pos [ 0 0 1.49 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + ] + prop "linktunnel_dg_5102_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 187.08 191.78 3.3 ] + nhpr [ 126 0 0 ] + sign [ + code [ "tunnel_sign_green" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.01 ] + nhpr [ 0 0 2 ] + scale [ 1.5 1 1.5 ] + width [ 35.8744 ] + height [ 35.8744 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -2.02 ] + scale [ 0.8 1 0.8 ] + width [ 52.5099 ] + height [ 52.5099 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + pos [ 0 0 1.73 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 38.37 222.32 10 ] + nhpr [ 0 0 0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 42.64 222.08 10 ] + nhpr [ -42 0 0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.63 0.39 0.71 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.55 0.81 1 ] + windows [ + code [ "window_md_curved_DG_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brickDG_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -11.63 222.32 10 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.68 0.85 0.45 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 0.52 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 1 0.53 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.53 1 ] + ] + ] + ] + landmark_building "tb3:toon_landmark_DG_clothes_shop_DNARoot" [ + code [ "toon_landmark_DG_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ 85 40 0 ] + nhpr [ -105 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 1 0.55 0.65 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0 0.72549 0 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "linktunnel_dg_5301_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -60.12 -94.82 -6.63 ] + nhpr [ 0 0 0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 0.53 ] + scale [ 1.39066 1 1.61989 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.17 0 -0.62297 ] + scale [ 1.87057 1 1.51598 ] + width [ 34.4253 ] + height [ 34.4253 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.73655 ] + scale [ 0.95104 1 0.902303 ] + width [ 35.468 ] + height [ 35.468 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + pos [ 0 0 1.706 ] + scale [ 2.34951 1 1.88988 ] + graphic [ + code [ "daisySZ" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -68.3563 225.257 10 ] + nhpr [ 45 0 0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 67.1 10.9 0 ] + nhpr [ 21 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 40.6141 39.7708 0.322857 ] + nhpr [ -60 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 45.5303 59.0542 0.301811 ] + nhpr [ -150 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 64.3143 41.6922 0.27585 ] + nhpr [ 75 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 62.5348 57.8678 0.231369 ] + nhpr [ 135 0 0 ] + ] + ] + landmark_building "tb1:toon_landmark_DG_gag_shop_DNARoot" [ + code [ "toon_landmark_DG_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ -10.2301 217.38 10 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.8 0.54 0.61 1 ] + ] + ] + landmark_building "tb2:toon_landmark_hqDG_DNARoot" [ + code [ "toon_landmark_hqDG" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ -45.9641 39.1958 0 ] + nhpr [ -45 0 0 ] + ] + landmark_building "tb5:toon_landmark_DG_pet_shop_DNARoot" [ + code [ "toon_landmark_DG_pet_shop" ] + building_type [ "petshop" ] + title [ "" ] + pos [ 43.9925 6.83166 0.18034 ] + nhpr [ -171 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.73 0.55 0.86 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + color [ 0.501961 1 0.501961 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 0.501961 1 ] + pos [ 0 0 0.154303 ] + scale [ 1.53398 1 2.71448 ] + width [ 16.2951 ] + height [ 16.2951 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ -12.0904 1.48476 0 ] + nhpr [ 0 0 0 ] + ] + prop "neighborhood_sign_sellBotHQ_DNARoot" [ + code [ "neighborhood_sign_sellBotHQ" ] + pos [ 11.7463 1.19921 0 ] + nhpr [ 180 0 0 ] + ] + prop "daisys_garden_ext_DNARoot" [ + code [ "daisys_garden_ext" ] + pos [ -49.7454 233.211 9.99 ] + nhpr [ 210 0 0 ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ -54.0251 224.782 10.02 ] + nhpr [ 30 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -24.6717 228.875 10 ] + nhpr [ 293.962 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.58 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.58 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -34.8837 239.189 10 ] + nhpr [ 315 0 0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.8 0.54 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 1 0.39 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.58 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.65 0.81 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -54.3539 239.133 10 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_rock_ur" ] + color [ 0.22 0.74 0.62 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 21 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.55 0.55 1 ] + windows [ + code [ "window_flower_porthole_ur" ] + color [ 1 1 0.6 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.53 0.92 0.81 1 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dock_1100.dna b/ttmodels/src/dna/donalds_dock_1100.dna new file mode 100644 index 00000000..1fc28f07 --- /dev/null +++ b/ttmodels/src/dna/donalds_dock_1100.dna @@ -0,0 +1,8795 @@ +store_suit_point [ 14, STREET_POINT, 205 -35 -0.5 ] +store_suit_point [ 15, STREET_POINT, 205 -25 -0.5 ] +store_suit_point [ 17, STREET_POINT, 230.001 -35.0003 -0.5 ] +store_suit_point [ 18, STREET_POINT, 230 -10 -0.5 ] +store_suit_point [ 19, STREET_POINT, 220 -10 -0.5 ] +store_suit_point [ 20, STREET_POINT, 220.001 -25.0004 -0.5 ] +store_suit_point [ 21, STREET_POINT, 230 0 -0.5 ] +store_suit_point [ 22, STREET_POINT, 230.001 22.9987 -0.5 ] +store_suit_point [ 25, STREET_POINT, 220.001 22.9987 -0.5 ] +store_suit_point [ 26, STREET_POINT, 220.001 -0.000862122 -0.5 ] +store_suit_point [ 27, FRONT_DOOR_POINT, 241 0 0, 2 ] +store_suit_point [ 28, FRONT_DOOR_POINT, 208 22.9987 0, 26 ] +store_suit_point [ 29, STREET_POINT, 230 30 -0.5 ] +store_suit_point [ 30, STREET_POINT, 230 65.9999 -0.5 ] +store_suit_point [ 31, STREET_POINT, 230 70 -0.5 ] +store_suit_point [ 32, STREET_POINT, 220 70 -0.5 ] +store_suit_point [ 33, STREET_POINT, 220 65.9999 -0.5 ] +store_suit_point [ 34, STREET_POINT, 220 30 -0.5 ] +store_suit_point [ 35, FRONT_DOOR_POINT, 241 65.9999 0, 21 ] +store_suit_point [ 36, STREET_POINT, 230 90.0004 -0.5 ] +store_suit_point [ 37, STREET_POINT, 220 90 -0.5 ] +store_suit_point [ 38, STREET_POINT, 237 115 -0.5 ] +store_suit_point [ 39, FRONT_DOOR_POINT, 237 126.001 0, 4 ] +store_suit_point [ 41, STREET_POINT, 237 105.001 -0.5 ] +store_suit_point [ 42, STREET_POINT, 230 105.001 -0.5 ] +store_suit_point [ 43, STREET_POINT, 245 105.001 -0.5 ] +store_suit_point [ 44, STREET_POINT, 245 115.001 -0.5 ] +store_suit_point [ 45, STREET_POINT, 220 115.001 -0.5 ] +store_suit_point [ 46, STREET_POINT, 265 105.001 -0.5 ] +store_suit_point [ 47, STREET_POINT, 265 115.001 -0.5 ] +store_suit_point [ 48, STREET_POINT, 278.999 105.001 -0.5 ] +store_suit_point [ 49, STREET_POINT, 304.999 105.001 -0.5 ] +store_suit_point [ 50, STREET_POINT, 304.999 115.001 -0.5 ] +store_suit_point [ 51, STREET_POINT, 278.999 115.001 -0.5 ] +store_suit_point [ 52, FRONT_DOOR_POINT, 278.999 98.0005 0, 22 ] +store_suit_point [ 53, STREET_POINT, 319.999 105.001 -0.5 ] +store_suit_point [ 54, STREET_POINT, 319.999 90.0004 -0.5 ] +store_suit_point [ 55, STREET_POINT, 329.999 90.0004 -0.5 ] +store_suit_point [ 56, STREET_POINT, 329.999 115.001 -0.5 ] +store_suit_point [ 57, STREET_POINT, 319.999 69 -0.5 ] +store_suit_point [ 58, STREET_POINT, 319.999 49.9997 -0.5 ] +store_suit_point [ 59, STREET_POINT, 329.999 49.9997 -0.5 ] +store_suit_point [ 60, STREET_POINT, 329.999 69 -0.5 ] +store_suit_point [ 61, FRONT_DOOR_POINT, 309.999 69 0, 6 ] +store_suit_point [ 62, STREET_POINT, 319.999 34.9994 -0.5 ] +store_suit_point [ 63, STREET_POINT, 294.999 34.9994 -0.5 ] +store_suit_point [ 64, STREET_POINT, 294.999 24.9992 -0.5 ] +store_suit_point [ 65, STREET_POINT, 317.999 24.9992 -0.5 ] +store_suit_point [ 66, STREET_POINT, 329.999 24.9992 -0.5 ] +store_suit_point [ 67, FRONT_DOOR_POINT, 317.999 13.999 0, 8 ] +store_suit_point [ 68, STREET_POINT, 270 34.9994 -0.5 ] +store_suit_point [ 69, STREET_POINT, 270 9.99895 -0.5 ] +store_suit_point [ 70, STREET_POINT, 279.999 9.99895 -0.5 ] +store_suit_point [ 71, STREET_POINT, 279.999 24.9992 -0.5 ] +store_suit_point [ 72, FRONT_DOOR_POINT, 270 45.9996 0, 20 ] +store_suit_point [ 73, STREET_POINT, 270 6.99891 -0.5 ] +store_suit_point [ 74, STREET_POINT, 270 -30.0017 -0.5 ] +store_suit_point [ 76, STREET_POINT, 279.999 6.99891 -0.5 ] +store_suit_point [ 77, FRONT_DOOR_POINT, 259 6.99891 0, 9 ] +store_suit_point [ 79, STREET_POINT, 270 -70.0007 -0.5 ] +store_suit_point [ 80, STREET_POINT, 280 -70.0007 -0.5 ] +store_suit_point [ 81, STREET_POINT, 280 -30 -0.5 ] +store_suit_point [ 82, STREET_POINT, 270 -92.0011 -0.5 ] +store_suit_point [ 83, STREET_POINT, 270 -120.002 -0.5 ] +store_suit_point [ 85, STREET_POINT, 280 -92.0011 -0.5 ] +store_suit_point [ 86, FRONT_DOOR_POINT, 258.001 -92.0011 0, 28 ] +store_suit_point [ 89, STREET_POINT, 270 -145 -0.5 ] +store_suit_point [ 91, STREET_POINT, 305 -135 -0.5 ] +store_suit_point [ 92, STREET_POINT, 284 -135 -0.5 ] +store_suit_point [ 93, STREET_POINT, 280 -135 -0.5 ] +store_suit_point [ 94, STREET_POINT, 280 -120 -0.5 ] +store_suit_point [ 95, FRONT_DOOR_POINT, 284 -156 0, 27 ] +store_suit_point [ 96, STREET_POINT, 316 -145 -0.5 ] +store_suit_point [ 97, STREET_POINT, 320 -145 -0.5 ] +store_suit_point [ 98, STREET_POINT, 320 -160.001 -0.5 ] +store_suit_point [ 99, STREET_POINT, 329.999 -160.001 -0.5 ] +store_suit_point [ 100, STREET_POINT, 329.999 -135 -0.5 ] +store_suit_point [ 101, STREET_POINT, 316 -135 -0.5 ] +store_suit_point [ 102, FRONT_DOOR_POINT, 316 -125 0, 12 ] +store_suit_point [ 103, STREET_POINT, 320 -194.001 -0.5 ] +store_suit_point [ 104, STREET_POINT, 320 -210.002 -0.5 ] +store_suit_point [ 106, STREET_POINT, 329.999 -194.001 -0.5 ] +store_suit_point [ 107, FRONT_DOOR_POINT, 309 -194.001 0, 13 ] +store_suit_point [ 109, STREET_POINT, 320 -235 -0.5 ] +store_suit_point [ 110, STREET_POINT, 338 -235 -0.5 ] +store_suit_point [ 111, STREET_POINT, 345 -235 -0.5 ] +store_suit_point [ 112, STREET_POINT, 345 -225 -0.5 ] +store_suit_point [ 113, STREET_POINT, 338 -225 -0.5 ] +store_suit_point [ 114, STREET_POINT, 330 -225 -0.5 ] +store_suit_point [ 115, STREET_POINT, 330 -210 -0.5 ] +store_suit_point [ 116, FRONT_DOOR_POINT, 338 -246.001 0, 14 ] +store_suit_point [ 117, STREET_POINT, 384.999 -235 -0.5 ] +store_suit_point [ 118, STREET_POINT, 384.999 -210 -0.5 ] +store_suit_point [ 119, STREET_POINT, 374.999 -210 -0.5 ] +store_suit_point [ 120, STREET_POINT, 374.999 -225 -0.5 ] +store_suit_point [ 121, STREET_POINT, 384.999 -195 -0.5 ] +store_suit_point [ 122, STREET_POINT, 399.999 -195 -0.5 ] +store_suit_point [ 123, STREET_POINT, 399.999 -185 -0.5 ] +store_suit_point [ 124, STREET_POINT, 382.999 -185 -0.5 ] +store_suit_point [ 125, STREET_POINT, 374.999 -185 -0.5 ] +store_suit_point [ 126, FRONT_DOOR_POINT, 382.999 -173.999 0, 15 ] +store_suit_point [ 127, STREET_POINT, 424.999 -195 -0.5 ] +store_suit_point [ 128, STREET_POINT, 424.999 -169.999 -0.5 ] +store_suit_point [ 130, STREET_POINT, 414.999 -185 -0.5 ] +store_suit_point [ 131, STREET_POINT, 425 -158 -0.5 ] +store_suit_point [ 133, STREET_POINT, 425 -150 -0.5 ] +store_suit_point [ 135, STREET_POINT, 415 -150 -0.5 ] +store_suit_point [ 137, STREET_POINT, 415 -170 -0.5 ] +store_suit_point [ 138, FRONT_DOOR_POINT, 437 -158 0, 16 ] +store_suit_point [ 140, STREET_POINT, 425 -125 -0.5 ] +store_suit_point [ 141, STREET_POINT, 400 -125 -0.5 ] +store_suit_point [ 142, STREET_POINT, 400 -135 -0.5 ] +store_suit_point [ 143, STREET_POINT, 415 -135 -0.5 ] +store_suit_point [ 144, STREET_POINT, 375 -125 -0.5 ] +store_suit_point [ 145, STREET_POINT, 375 -110 -0.5 ] +store_suit_point [ 146, STREET_POINT, 365 -110 -0.5 ] +store_suit_point [ 147, STREET_POINT, 365 -135 -0.5 ] +store_suit_point [ 148, STREET_POINT, 365 -130 -0.5 ] +store_suit_point [ 149, FRONT_DOOR_POINT, 354 -130 0, 17 ] +store_suit_point [ 150, STREET_POINT, 375 -72 -0.5 ] +store_suit_point [ 151, STREET_POINT, 375 -70 -0.5 ] +store_suit_point [ 152, STREET_POINT, 365 -70 -0.5 ] +store_suit_point [ 153, STREET_POINT, 365 -72 -0.5 ] +store_suit_point [ 154, FRONT_DOOR_POINT, 386 -72 0, 19 ] +store_suit_point [ 155, STREET_POINT, 375 -56 -0.5 ] +store_suit_point [ 156, STREET_POINT, 365 -56 -0.5 ] +store_suit_point [ 157, FRONT_DOOR_POINT, 354 -56 0, 24 ] +store_suit_point [ 158, STREET_POINT, 284 -145 -0.5 ] +store_suit_point [ 159, STREET_POINT, 305 -145 -0.5 ] +store_suit_point [ 160, STREET_POINT, 415 -158 -0.5 ] +store_suit_point [ 161, SIDE_DOOR_POINT, 218 -50 0, 2 ] +store_suit_point [ 162, SIDE_DOOR_POINT, 205 0 0, 26 ] +store_suit_point [ 163, SIDE_DOOR_POINT, 245 37 0, 21 ] +store_suit_point [ 164, SIDE_DOOR_POINT, 205 80 0, 4 ] +store_suit_point [ 165, SIDE_DOOR_POINT, 258 90 0, 22 ] +store_suit_point [ 167, SIDE_DOOR_POINT, 300 10 0, 8 ] +store_suit_point [ 168, SIDE_DOOR_POINT, 287 50 0, 20 ] +store_suit_point [ 169, SIDE_DOOR_POINT, 255 28 0, 9 ] +store_suit_point [ 170, SIDE_DOOR_POINT, 255 -125 0, 28 ] +store_suit_point [ 171, SIDE_DOOR_POINT, 305 -172 0, 13 ] +store_suit_point [ 172, SIDE_DOOR_POINT, 255 -138 0, 27 ] +store_suit_point [ 173, SIDE_DOOR_POINT, 345 -165 0, 12 ] +store_suit_point [ 174, SIDE_DOOR_POINT, 305 -228 0, 14 ] +store_suit_point [ 175, SIDE_DOOR_POINT, 352 -210 0, 15 ] +store_suit_point [ 176, SIDE_DOOR_POINT, 423 -210 0, 16 ] +store_suit_point [ 177, SIDE_DOOR_POINT, 378 -150 0, 17 ] +store_suit_point [ 178, SIDE_DOOR_POINT, 390 -105 0, 19 ] +store_suit_point [ 179, SIDE_DOOR_POINT, 350 -95 0, 24 ] +store_suit_point [ 180, SIDE_DOOR_POINT, 305 83 0, 6 ] +group "donaldsDock" [ + visgroup "1101" [ + vis [ "1101" "1102" "1103" "1104" "1105" "1120" "1121" ] + battle_cell [ 20 20 190 -30 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 185 -50 1.14441e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 165 -50 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 160 -50 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 210 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.937255 0.717647 0.658824 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 19 -8 0 ] + nhpr [ -180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 15 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1 3.74 18.66 ] + nhpr [ -0 0 -0 ] + color [ 0.87 0.69 0.42 1 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 185 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 5 -9 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 160 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.517647 0.956863 0.792157 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.729412 0.627451 0.447059 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.662745 1 0.862745 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4 -9 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 7.5 5.7 20 ] + nhpr [ -15 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 17 8 0 ] + nhpr [ 15 0 -0 ] + scale [ 2 2 2 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 185 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 4 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.61 1.17 18.38 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 20 -8 0 ] + nhpr [ 180 0 -0 ] + ] + ] + prop "linktunnel_dd_1000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 160 -50 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + pos [ 0 0 -2.19 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0 1 ] + pos [ 0 0 -1.06 ] + scale [ 1.5 1 1.5 ] + width [ 68.171 ] + height [ 68.171 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.56 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.94 ] + scale [ 0.8 1 0.8 ] + width [ 49.1836 ] + height [ 49.1836 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb2:random_DNARoot" [ + pos [ 170 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 178.832 -14.7373 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 166.533 -21.7616 -0.5 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "1102" [ + vis [ "1101" "1102" "1103" "1104" "1105" "1120" "1121" ] + suit_edge [ 14 17 ] + suit_edge [ 17 18 ] + suit_edge [ 19 20 ] + suit_edge [ 20 15 ] + suit_edge [ 15 14 ] + suit_edge [ 161 17 ] + suit_edge [ 17 161 ] + battle_cell [ 20 20 225.001 -30.0003 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 245 -10 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 245 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 3.85 -4.15 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.82 -8 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 245 -35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.5 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2 1 20 ] + nhpr [ -0 0 -0 ] + color [ 0.92 0.63 0.42 1 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 245 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10 -5 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6 -4 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4.68 6.14 18.81 ] + nhpr [ -30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.23 ] + nhpr [ -0 0 -8 ] + scale [ 1.2 1 1.2 ] + kern [ 0.035536 ] + wiggle [ 2.73152 ] + width [ 38.847 ] + height [ 38.847 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.74 ] + nhpr [ -0 0 -8 ] + scale [ 1.2 1 1.2 ] + wiggle [ 1.8372 ] + width [ 15.0646 ] + height [ 15.0646 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.52 ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.6 ] + width [ 27.3426 ] + height [ 27.3426 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "," ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 1.47 ] + nhpr [ -0 0 -7 ] + scale [ 0.7 1 0.7 ] + width [ 25.3094 ] + height [ 25.3094 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.18 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.7 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 245 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 0 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4 -8 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + ] + group "props" [ + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 214 -19 0 ] + nhpr [ -0 0 -0 ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 225 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.35 -7.72 0 ] + nhpr [ -180 0 -0 ] + ] + ] + ] + visgroup "1103" [ + vis [ "1101" "1102" "1103" "1104" "1105" "1120" "1121" ] + suit_edge [ 18 21 ] + suit_edge [ 21 22 ] + suit_edge [ 26 19 ] + suit_edge [ 25 26 ] + suit_edge [ 21 27 ] + suit_edge [ 27 21 ] + suit_edge [ 26 27 ] + suit_edge [ 27 26 ] + suit_edge [ 25 28 ] + suit_edge [ 28 25 ] + suit_edge [ 22 28 ] + suit_edge [ 28 22 ] + suit_edge [ 22 29 ] + suit_edge [ 34 25 ] + suit_edge [ 162 26 ] + suit_edge [ 26 162 ] + suit_edge [ 162 21 ] + suit_edge [ 21 162 ] + battle_cell [ 20 20 225.001 4.99904 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 245 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.78 2.95 18.34 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6 -2 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10 -5 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -9 0 ] + nhpr [ 180 0 -0 ] + ] + prop "streetlight_DD_right_DNARoot" [ + code [ "streetlight_DD_right" ] + pos [ 7.47 -8.48 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 205 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -4.96 0.6 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 0 -7 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 29 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb26:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Salmon Chanted Evening Formal Wear" ] + pos [ 205 10 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0.97 0 -5.63 ] + nhpr [ -0 0 -1 ] + scale [ 2 1 1.5 ] + baseline [ + code [ "humanist" ] + color [ 1 0.584314 0.792157 1 ] + pos [ 0 0 -0.15 ] + scale [ 0.8 1 1.4 ] + kern [ 0.006846 ] + wiggle [ 1.50101 ] + stomp [ -0.020553 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.368627 1 1 1 ] + pos [ 0 0 -1.25 ] + scale [ 0.8 1 1 ] + kern [ 0.024778 ] + wiggle [ 2.57032 ] + stumble [ 0.0325 ] + stomp [ 0.009513 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + landmark_building "tb2:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Used Life Preservers" ] + pos [ 245 15 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.79 0.47 0.47 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -3 ] + nhpr [ -0 0 -6 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.360784 0.360784 0.360784 1 ] + pos [ 1.72 0 0.23 ] + scale [ 1.2 1 1.2 ] + kern [ 0.067798 ] + wiggle [ 3.0302 ] + stumble [ 0.021793 ] + stomp [ 0.02 ] + flags [ "cd" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.529412 0.0196078 0.2 1 ] + pos [ -3.66 0 0.09 ] + scale [ 1.5 1 1.5 ] + wiggle [ 1.43947 ] + stumble [ -0.004933 ] + stomp [ 0.068934 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 245 -10 1.14441e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 209.539 7.18622 1.14441e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1104" [ + vis [ "1102" "1103" "1104" "1105" "1106" "1107" "1120" "1121" "1122" "1101" "1128" "1129" ] + suit_edge [ 38 39 ] + suit_edge [ 39 38 ] + suit_edge [ 41 39 ] + suit_edge [ 39 41 ] + suit_edge [ 36 42 ] + suit_edge [ 42 41 ] + suit_edge [ 41 43 ] + suit_edge [ 44 38 ] + suit_edge [ 38 45 ] + suit_edge [ 45 37 ] + battle_cell [ 20 20 225 110.001 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 205 90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ 205 90 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 4 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 22.1 -1.25 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 4.93 4.49 18.86 ] + nhpr [ -0 0 -0 ] + color [ 0.44 0.67 0.45 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 205 110 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -7.28 -4.25 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.4 0.4 0.4 ] + color [ 0.9 0.9 0.9 1 ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 15.82 -3.24 -0.44 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 17.79 -7.7 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.84 -7.4 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.02 -8.54 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4.7 1.06 19.3 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 1.51 ] + nhpr [ -0 0 -7 ] + scale [ 0.7 1 0.7 ] + kern [ 0.028793 ] + wiggle [ 3.74412 ] + stumble [ 0.065607 ] + width [ 15.2683 ] + height [ 15.2683 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.24 ] + nhpr [ -0 0 -8 ] + scale [ 0.9 1 1.1 ] + wiggle [ 5.40493 ] + stumble [ -0.001889 ] + stomp [ 0.008968 ] + width [ 32.4338 ] + height [ 32.4338 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.85 ] + nhpr [ -0 0 -6 ] + scale [ 1.1 1 1.1 ] + wiggle [ 2.99445 ] + stumble [ 0.067726 ] + stomp [ 0.054238 ] + width [ 26.0613 ] + height [ 26.0613 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.72 ] + nhpr [ -0 0 -3 ] + scale [ 0.6 1 0.6 ] + kern [ 0.019825 ] + width [ 25.5768 ] + height [ 25.5768 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.31 ] + nhpr [ -0 0 -2 ] + scale [ 0.6 1 0.6 ] + kern [ 0.049083 ] + width [ 28.3632 ] + height [ 28.3632 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 205 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 0 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 12.82 -1.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb4:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Wet Suit Dry Cleaners" ] + pos [ 225 130 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.592157 0.592157 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -4.29 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "humanist" ] + color [ 0.85098 0.423529 0 1 ] + pos [ -1.73 0 -0.1 ] + scale [ 1.6 1 1.7 ] + kern [ 0.097699 ] + wiggle [ 5 ] + stumble [ 0.018081 ] + stomp [ 0.01 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.00784314 0.682353 0.494118 1 ] + pos [ -1.57 0 -1.15 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 19 11 20 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15.93 -8.88 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -31 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "1105" [ + vis [ "1103" "1104" "1105" "1106" "1107" "1108" "1101" "1122" "1121" "1120" "1102" "1128" "1129" ] + suit_edge [ 43 46 ] + suit_edge [ 47 44 ] + suit_edge [ 165 46 ] + suit_edge [ 46 165 ] + suit_edge [ 165 47 ] + suit_edge [ 47 165 ] + suit_edge [ 167 64 ] + suit_edge [ 64 167 ] + suit_edge [ 167 63 ] + suit_edge [ 63 167 ] + suit_edge [ 168 63 ] + suit_edge [ 63 168 ] + suit_edge [ 168 64 ] + suit_edge [ 64 168 ] + suit_edge [ 169 68 ] + suit_edge [ 68 169 ] + suit_edge [ 169 71 ] + suit_edge [ 71 169 ] + battle_cell [ 20 20 255 110.001 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 245 90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ 250 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.67 0.45 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.67 0.45 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 12.08 -7.98 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 270 90 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 18 -8 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1106" [ + vis [ "1104" "1105" "1106" "1107" "1108" "1109" "1110" "1122" "1121" "1123" "1124" "1129" "1128" ] + suit_edge [ 49 53 ] + suit_edge [ 53 54 ] + suit_edge [ 56 50 ] + suit_edge [ 55 56 ] + battle_cell [ 20 20 324.999 110.001 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 305 130 2.28882e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ 305 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.74902 0.74902 0.74902 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -7.71 9.28 15 ] + nhpr [ 15 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 11.61 14.46 5 ] + nhpr [ 15 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 14 -6.99997 0 ] + nhpr [ -75 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 325 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.529412 0.317647 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -1 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.24 -8.44 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 16 -7.00003 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -16.03 -34.74 0 ] + nhpr [ -75 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -11 -31 0 ] + nhpr [ -30 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 9 -1 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 340.554 98.7093 2.28882e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1107" [ + vis [ "1106" "1107" "1108" "1109" "1110" "1122" "1105" "1104" "1123" "1124" "1111" "1129" "1128" "1122" ] + suit_edge [ 57 58 ] + suit_edge [ 59 60 ] + suit_edge [ 60 55 ] + suit_edge [ 54 57 ] + suit_edge [ 57 61 ] + suit_edge [ 61 57 ] + suit_edge [ 60 61 ] + suit_edge [ 61 60 ] + suit_edge [ 54 180 ] + suit_edge [ 180 54 ] + suit_edge [ 55 180 ] + suit_edge [ 180 55 ] + battle_cell [ 20 20 324.999 70 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 305 90 2.28882e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random20_DNARoot" [ + pos [ 305 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Hook's Clock Repair" ] + pos [ 305 60 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign2" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.25098 0.25098 1 ] + pos [ 0 0 -0.22 ] + scale [ 1.5 1 1.5 ] + kern [ 0.060117 ] + wiggle [ 2 ] + stumble [ 0.000256 ] + stomp [ 0.01 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0 1 ] + pos [ 0 0 -1.3 ] + scale [ 1.1 1 1 ] + kern [ 0.055997 ] + wiggle [ 2.22851 ] + stomp [ 0.032415 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7 -9 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ 305 75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 345 70 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2.99998 -8.00003 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 345 60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ 310.264 85.6945 2.28882e-005 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "1108" [ + vis [ "1106" "1107" "1108" "1109" "1110" "1111" "1123" "1124" "1122" "1129" "1128" ] + suit_edge [ 58 62 ] + suit_edge [ 62 63 ] + suit_edge [ 64 65 ] + suit_edge [ 65 66 ] + suit_edge [ 66 59 ] + suit_edge [ 65 67 ] + suit_edge [ 67 65 ] + suit_edge [ 62 67 ] + suit_edge [ 67 62 ] + battle_cell [ 20 20 324.999 29.9993 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 295 10 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 345 50 1.14441e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random20_DNARoot" [ + pos [ 345 10 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 7.36 -1.23 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 295 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.917647 0.627451 0.419608 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 19 -8 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12 -3 0 ] + nhpr [ 90 0 -0 ] + color [ 0.87 0.69 0.42 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.02 -2.96 2.12 ] + nhpr [ 90 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15 -3 0 ] + nhpr [ 120 0 -0 ] + ] + ] + landmark_building "tb8:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Luff 'N Stuff" ] + pos [ 330 10 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -2.74 ] + nhpr [ -0 0 2 ] + baseline [ + code [ "mickey" ] + color [ 0.74902 0 0 1 ] + pos [ 0.2 0 0 ] + scale [ 1.1 1 1.1 ] + kern [ 0.022573 ] + wiggle [ 2.81464 ] + stomp [ 0.08696 ] + flags [ "b" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.92 -8.18 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 345 20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.99997 -8.99994 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 345 35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 345 45 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2.99999 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb8:20_DNARoot" [ + pos [ 305 10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.43 0.43 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 341.633 36.6473 1.14441e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1109" [ + vis [ "1106" "1107" "1108" "1109" "1110" "1111" "1112" "1113" "1114" "1123" "1124" "1129" "1128" ] + suit_edge [ 63 68 ] + suit_edge [ 68 69 ] + suit_edge [ 70 71 ] + suit_edge [ 71 64 ] + suit_edge [ 68 72 ] + suit_edge [ 72 68 ] + suit_edge [ 71 72 ] + suit_edge [ 72 71 ] + battle_cell [ 20 20 274.999 29.9993 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 255 9.99997 7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random20_DNARoot" [ + pos [ 255 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 255 35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 255 15 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 279.4 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.627451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11 4 17 ] + nhpr [ -15 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 20 -9.00002 7.62939e-006 ] + nhpr [ 75 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 255 20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.6 0.67 0.54 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.42 0.78 19.23 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.8 -4.66 0 ] + nhpr [ -60 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -1.48 -2.75 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -2.79 -8.62 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.84999 -31.4901 1.14441e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb20:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "From Fore to Aft" ] + pos [ 260 50 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -0.11 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 1 0.501961 1 ] + pos [ -1.99 0 -0.57 ] + kern [ 0.052467 ] + wiggle [ 2.42112 ] + stumble [ 0.000708 ] + stomp [ -0.036538 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.666667 0.666667 1 ] + pos [ -0.42 0 -0.5 ] + scale [ 1.2 1 1.2 ] + kern [ 0.041433 ] + wiggle [ 2.231 ] + stomp [ 0.019825 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.666667 0.666667 1 ] + pos [ 3.23 0 -0.5 ] + scale [ 1.2 1 1.2 ] + kern [ 0.068488 ] + stomp [ 0.026739 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.65098 0 1 ] + pos [ 1.57 0 -0.52 ] + kern [ 0.029744 ] + stomp [ 0.027985 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.13 -9.47 0 ] + nhpr [ -30 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp1" ] + cell_id [ 0 ] + pos [ 258.581 36.8731 7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1110" [ + vis [ "1107" "1108" "1109" "1110" "1111" "1112" "1113" "1114" "1106" "1123" "1124" "1129" "1128" ] + suit_edge [ 69 73 ] + suit_edge [ 73 74 ] + suit_edge [ 76 70 ] + suit_edge [ 73 77 ] + suit_edge [ 77 73 ] + suit_edge [ 76 77 ] + suit_edge [ 77 76 ] + suit_edge [ 81 76 ] + battle_cell [ 20 20 274.999 -10.0014 -0.5 ] + group "streets" [ + ] + group "buildings" [ + landmark_building "tb9:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Every Little Bait" ] + pos [ 255 0 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 2.09 ] + nhpr [ -0 0 -7 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0 1 ] + pos [ -1.13 0 -0.31 ] + scale [ 1.1 1 1.1 ] + wiggle [ 6 ] + stumble [ 0.05 ] + stomp [ 0.02 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 295 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 3 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.74902 0.74902 0.74902 1 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 295 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 255 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 0 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10 -9 0 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 255 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 9.24 -7.7 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.4 0.4 0.4 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 2 -8 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 295 -15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.05 0.82 19.76 ] + nhpr [ -0 0 -0 ] + color [ 0.45 0.31 0.17 1 ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 295 -30 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 291.475 -20.1 7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "1111" [ + vis [ "1111" "1112" "1113" "1114" "1115" "1124" "1123" "1110" "1109" "1108" ] + suit_edge [ 91 92 ] + suit_edge [ 92 93 ] + suit_edge [ 93 94 ] + suit_edge [ 92 95 ] + suit_edge [ 95 92 ] + suit_edge [ 89 158 ] + suit_edge [ 158 159 ] + suit_edge [ 158 95 ] + suit_edge [ 95 158 ] + suit_edge [ 83 89 ] + suit_edge [ 170 83 ] + suit_edge [ 83 170 ] + suit_edge [ 170 94 ] + suit_edge [ 94 170 ] + suit_edge [ 172 89 ] + suit_edge [ 89 172 ] + suit_edge [ 172 93 ] + suit_edge [ 93 172 ] + battle_cell [ 20 20 275 -140 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 295 -160 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 305 -120 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb27:random20_DNARoot" [ + pos [ 305 -160 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 270 -160 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0745098 0.470588 0.313726 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 255 -160 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 11 -7 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 2.3 -2.43 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5 -12 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7 -14 0 ] + nhpr [ -60 0 -0 ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 255 -145 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 295 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -8 -8 0 ] + nhpr [ 90 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -2.61 -8.13 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb27:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Billy Budd's Big Bargain Binnacle Barn" ] + pos [ 297 -160 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign3" ] + color [ 1 1 0.756863 1 ] + pos [ 0 0 -0.4 ] + scale [ 1.2 1 1 ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0.615686 0.235294 1 ] + pos [ -1.63 0 1.24 ] + scale [ 1.4 1 1.1 ] + stomp [ -0.007111 ] + flags [ "b" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.18 0 -0.71 ] + scale [ 0.9 1 1.4 ] + wiggle [ 5.62537 ] + stumble [ 0.00691 ] + flags [ "b" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0.580392 0.156863 1 ] + pos [ -1.51 0 -2.4 ] + scale [ 1.8 1 1.3 ] + flags [ "b" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 21 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10 -9 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -6 -7.97 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb28:20_DNARoot" [ + pos [ 255 -130 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.06 2.36 19.71 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 260.915 -130.283 0 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "1112" [ + vis [ "1109" "1110" "1111" "1123" "1124" "1112" "1113" "1114" "1115" ] + suit_edge [ 96 97 ] + suit_edge [ 97 98 ] + suit_edge [ 99 100 ] + suit_edge [ 100 101 ] + suit_edge [ 101 91 ] + suit_edge [ 101 102 ] + suit_edge [ 102 101 ] + suit_edge [ 96 102 ] + suit_edge [ 102 96 ] + suit_edge [ 159 96 ] + battle_cell [ 20 20 324.999 -140 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 305 -120 -6.10352e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random20_DNARoot" [ + pos [ 345 -120 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 345 -140 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.760784 0.568627 0.286275 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 13 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12 -32 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 2.58 -1.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb12:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Dime & Quarterdeck Bank" ] + pos [ 305 -120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + sign [ + code [ "DD_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -1.76 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.26 ] + scale [ 1.2 1 1.3 ] + kern [ 0.04371 ] + wiggle [ 2.99466 ] + stomp [ 0.02 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.6 0.6 0.301961 1 ] + pos [ 0 0 -1.23 ] + scale [ 1.7 1 1 ] + kern [ 0.200823 ] + wiggle [ 3.30835 ] + stumble [ 0.015725 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 31 -9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 34.01 -14.21 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 330 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 6.57 -1.15 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 310.753 -124.656 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "1113" [ + vis [ "1109" "1110" "1111" "1112" "1113" "1114" "1115" "1124" "1123" ] + suit_edge [ 98 103 ] + suit_edge [ 103 104 ] + suit_edge [ 106 99 ] + suit_edge [ 103 107 ] + suit_edge [ 107 103 ] + suit_edge [ 106 107 ] + suit_edge [ 107 106 ] + suit_edge [ 115 106 ] + suit_edge [ 171 98 ] + suit_edge [ 98 171 ] + suit_edge [ 171 99 ] + suit_edge [ 99 171 ] + suit_edge [ 173 99 ] + suit_edge [ 99 173 ] + suit_edge [ 173 98 ] + suit_edge [ 98 173 ] + battle_cell [ 20 20 324.999 -185.001 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 305 -160 -6.10352e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 305 -200 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ 345 -190 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.301961 0.184314 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 1 0.5 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.71 0.27 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 16 -8 -6.10352e-005 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0 -31 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 345 -205 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.57 0.7 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 305 -220 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.164706 0.439216 0.27451 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.164706 0.439216 0.27451 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 9 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 3.76 -8.16 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 305 -185 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.97 0.55 0.4 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 345 -155 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 4.43 4.76 18.74 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 41.2453 -7.75241 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_trashcan_DD_DNARoot" [ + code [ "DD_barrel" ] + pos [ 20 -2 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 345 -175 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.12 1.57 19.61 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.54 0.54 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3 -5 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0 -8 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb13:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Squid Pro Quo, Attorneys at Law" ] + pos [ 305 -205 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.97 0.55 0.4 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.77 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0 0.4 0.592157 1 ] + pos [ 0 0 0.59 ] + scale [ 0.8 1 1 ] + kern [ 0.072057 ] + flags [ "b" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.17 ] + scale [ 0.7 1 0.7 ] + kern [ 0.041762 ] + wiggle [ 1.1341 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.596078 0.0117647 0.145098 1 ] + pos [ 0.11 0 -0.73 ] + scale [ 0.5 1 0.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 308.784 -178.441 -6.10352e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1114" [ + vis [ "1109" "1110" "1111" "1112" "1113" "1114" "1115" "1116" "1124" "1123" "1125" "1117" "1126" ] + suit_edge [ 109 110 ] + suit_edge [ 110 111 ] + suit_edge [ 112 113 ] + suit_edge [ 113 114 ] + suit_edge [ 114 115 ] + suit_edge [ 110 116 ] + suit_edge [ 116 110 ] + suit_edge [ 113 116 ] + suit_edge [ 116 113 ] + suit_edge [ 104 109 ] + suit_edge [ 174 109 ] + suit_edge [ 109 174 ] + suit_edge [ 174 114 ] + suit_edge [ 114 174 ] + battle_cell [ 20 20 325 -230 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 345 -250 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 330 -250 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.67 0.45 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 16.69 2.93 17.19 ] + nhpr [ -0 0 -0 ] + color [ 0.45 0.31 0.17 1 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 305 -250 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 3.33 -3.39 -0.23 ] + nhpr [ 45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 305 -235 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + landmark_building "tb14:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Trim the Nail Boutique" ] + pos [ 345.09 -249.99 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign1" ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.35 ] + scale [ 1.2 1 1.2 ] + kern [ 0.056542 ] + flags [ "db" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.25098 1 ] + pos [ 0 0 -0.63 ] + scale [ 0.8 1 0.8 ] + kern [ 0.058595 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0.12 0 0.3 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 19.09 -2.99 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.09 -31.99 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.44 -37.63 0 ] + nhpr [ 15 0 -0 ] + color [ 0.92 0.63 0.42 1 ] + ] + ] + ] + group "props" [ + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 305 -230 20 ] + nhpr [ 120 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 1.44 ] + nhpr [ -0 0 -4 ] + scale [ 0.7 1 0.7 ] + width [ 27.008 ] + height [ 27.008 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "?" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 1 1 ] + pos [ 0 0 0.15 ] + nhpr [ -0 0 -3 ] + scale [ 1 1 1.1 ] + width [ 41.5921 ] + height [ 41.5921 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 1 1 ] + pos [ 0 0 -1.15 ] + scale [ 1.2 1 1.2 ] + wiggle [ 2.69487 ] + stumble [ 0.042241 ] + stomp [ 0.040246 ] + width [ 16.8979 ] + height [ 16.8979 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.07 ] + scale [ 0.8 1 0.8 ] + width [ 27.377 ] + height [ 27.377 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp1" ] + cell_id [ 0 ] + pos [ 309.769 -235.299 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "1115" [ + vis [ "1113" "1114" "1115" "1116" "1117" "1112" "1111" "1124" "1123" "1125" "1126" "1129" ] + suit_edge [ 111 117 ] + suit_edge [ 117 118 ] + suit_edge [ 119 120 ] + suit_edge [ 120 112 ] + suit_edge [ 175 112 ] + suit_edge [ 112 175 ] + suit_edge [ 175 111 ] + suit_edge [ 111 175 ] + suit_edge [ 176 127 ] + suit_edge [ 127 176 ] + suit_edge [ 176 130 ] + suit_edge [ 130 176 ] + battle_cell [ 20 20 379.999 -230 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 400 -210 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 360 -210 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 355 -210 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 370 -250.001 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 370 -290 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 370 -270 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 360 -250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10.05 -8.18 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7 -9 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 2.98 -8.18 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 400 -230 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 15.18 -4.33 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -9 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -3.72 -4.38 0 ] + nhpr [ 45 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ -6.64 -2.31 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 400 -210 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.709804 0.266667 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 3.5 -7.88 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 345 -210 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.568627 0.698039 0.34902 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 9 -8 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 22 -5 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 23 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 390 -265 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 390 -275 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 370 -275 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 370 -290 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 370 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 355 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.45 0.31 0.17 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 390 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 390 -290 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.44 0.67 0.45 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 370 -265 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 370 -250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.41391 10.5943 19.9998 ] + nhpr [ -60 0 -0 ] + color [ 0.36 0.45 0.22 1 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 400 -250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 390 -250 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 4 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 365.721 -245.501 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "1116" [ + vis [ "1114" "1115" "1116" "1117" "1118" "1119" "1125" "1126" "1113" "1129" ] + suit_edge [ 118 121 ] + suit_edge [ 121 122 ] + suit_edge [ 123 124 ] + suit_edge [ 124 125 ] + suit_edge [ 125 119 ] + suit_edge [ 124 126 ] + suit_edge [ 126 124 ] + suit_edge [ 121 126 ] + suit_edge [ 126 121 ] + battle_cell [ 20 20 379.999 -190 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 360 -210 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ 360 -210 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.568627 0.698039 0.34902 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.568627 0.698039 0.34902 1 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 360 -205 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.25 -3.48 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 4 -6 0 ] + nhpr [ -150 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -1 -32 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 360 -195 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.91 0.54 0.44 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.87 2.26 20.23 ] + nhpr [ -0 0 -0 ] + color [ 0.64 0.24 0.32 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -7 -32 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 8.91 -1.17 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 360 -180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 360 -170 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.52 -8.67 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 8.43 -1.32 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 390 -170 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5.39 -7.65 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + landmark_building "tb15:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Yacht's All, Folks!" ] + pos [ 375 -170 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.79 0.47 0.47 1 ] + ] + sign [ + code [ "DD_sign2" ] + baseline [ + code [ "mickey" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ 0 0 -0.01 ] + stomp [ 0.032407 ] + flags [ "b" ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "," ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ 0 0 -1.44 ] + flags [ "b" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 363.307 -192.857 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1117" [ + vis [ "1115" "1116" "1117" "1118" "1119" "1114" "1126" "1127" "1125" "1129" ] + suit_edge [ 131 138 ] + suit_edge [ 138 131 ] + suit_edge [ 128 131 ] + suit_edge [ 131 133 ] + suit_edge [ 135 160 ] + suit_edge [ 160 137 ] + suit_edge [ 160 138 ] + suit_edge [ 138 160 ] + battle_cell [ 20 20 419.999 -159.999 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 400 -150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ 400 -170 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.19 -4.55 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -5 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 390 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_right_DNARoot" [ + code [ "streetlight_DD_right" ] + pos [ 0 -9 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -7.88 -7.71 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Blackbeard's Beauty Parlor" ] + pos [ 440 -145 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ -0.19 0 -1.02 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.815686 0.694118 0.0156863 1 ] + pos [ -0.12 0 0.28 ] + scale [ 0.8 1 0.8 ] + kern [ 0.051113 ] + wiggle [ 3 ] + stumble [ 0.02 ] + stomp [ 0.01 ] + width [ 76.7165 ] + height [ 76.7165 ] + flags [ "cdb" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.207843 0.67451 0.235294 1 ] + pos [ 0 0 -0.72 ] + scale [ 0.8 1 0.7 ] + kern [ 0.022449 ] + wiggle [ 1 ] + stumble [ 0.020881 ] + stomp [ 0.011434 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -1.3 ] + scale [ 0.6 1 0.6 ] + kern [ 0.032912 ] + wiggle [ 1.80833 ] + stomp [ 0.008299 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 17.4985 -8.3916 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 404.755 -153.65 0 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "1118" [ + vis [ "1117" "1118" "1119" "1126" "1125" "1127" ] + suit_edge [ 141 144 ] + suit_edge [ 144 145 ] + suit_edge [ 146 147 ] + suit_edge [ 147 142 ] + suit_edge [ 146 148 ] + suit_edge [ 148 147 ] + suit_edge [ 148 149 ] + suit_edge [ 149 148 ] + suit_edge [ 144 149 ] + suit_edge [ 149 144 ] + suit_edge [ 177 147 ] + suit_edge [ 147 177 ] + suit_edge [ 177 144 ] + suit_edge [ 144 177 ] + battle_cell [ 20 20 370 -129.999 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 390 -150 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 390 -150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ 400 -150 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 370 -150 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -4.7 3.23 17 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 4.31 3.36 14 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -10.69 5.36 17 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 350 -150 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 350 -125 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.384314 0.301961 0.184314 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 16 -8 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 385 -150 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + landmark_building "tb17:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Out to See Optics" ] + pos [ 350 -140 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.06 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.4 ] + scale [ 1.1 1 1 ] + kern [ 0.054501 ] + wiggle [ 3.08688 ] + stumble [ 0.031508 ] + stomp [ 0.028333 ] + flags [ "b" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.71 ] + kern [ 0.071209 ] + wiggle [ 2.32691 ] + stumble [ 0.029973 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 0 -5 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5 -5 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ 354.862 -121.043 2.28882e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "1119" [ + vis [ "1116" "1117" "1118" "1119" "1126" "1125" "1127" ] + suit_edge [ 145 150 ] + suit_edge [ 150 151 ] + suit_edge [ 152 153 ] + suit_edge [ 153 146 ] + suit_edge [ 150 154 ] + suit_edge [ 154 150 ] + suit_edge [ 153 154 ] + suit_edge [ 154 153 ] + suit_edge [ 178 145 ] + suit_edge [ 145 178 ] + suit_edge [ 178 146 ] + suit_edge [ 146 178 ] + suit_edge [ 179 153 ] + suit_edge [ 153 179 ] + suit_edge [ 179 150 ] + suit_edge [ 150 179 ] + battle_cell [ 20 20 370 -89.9996 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb19:random20_DNARoot" [ + pos [ 390 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.607843 0.356863 1 ] + count [ 3 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.05 -5.35 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 3 -3 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 350 -85 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.64 0.93 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.82 0.82 0.4 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -11 -9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 11 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 390 -100 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -1.183 -8.0014 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.74902 0.74902 0.74902 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 350 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Disembark! Tree Surgeons" ] + pos [ 390 -60 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.86 0.48 0.23 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.17 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.65 ] + kern [ 0.069733 ] + wiggle [ 2.75667 ] + stumble [ 0.014603 ] + stomp [ 0.02 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 0 0 0.38 ] + scale [ 2 1 1.3 ] + kern [ 0.043816 ] + wiggle [ 1.85353 ] + stomp [ 0.02 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15 -8 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 350 -70 3.8147e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 353.575 -80.7701 3.8147e-005 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "1120" [ + vis [ "1120" "1103" "1102" "1101" "1121" "1104" "1105" "1122" ] + suit_edge [ 29 30 ] + suit_edge [ 30 31 ] + suit_edge [ 32 33 ] + suit_edge [ 33 34 ] + suit_edge [ 30 35 ] + suit_edge [ 35 30 ] + suit_edge [ 33 35 ] + suit_edge [ 35 33 ] + suit_edge [ 163 29 ] + suit_edge [ 29 163 ] + suit_edge [ 163 34 ] + suit_edge [ 34 163 ] + suit_edge [ 164 32 ] + suit_edge [ 32 164 ] + suit_edge [ 164 31 ] + suit_edge [ 31 164 ] + battle_cell [ 20 20 225 50 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 245 30 -3.8147e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 245 60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1 -9 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 205 35 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 3 -9 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -3 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.03 -4.87 0 ] + nhpr [ 15 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 17.18 3.26 12.48 ] + nhpr [ -0 0 -0 ] + color [ 0.38 0.68 0.46 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 24 -9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 31 -8 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb21:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Poop Deck Gym" ] + pos [ 245 75 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign2" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.317647 0.156863 1 ] + pos [ 0 0 -0.73 ] + scale [ 1.8 1 1.8 ] + kern [ 0.020009 ] + wiggle [ 2.71389 ] + stomp [ 0.03 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 245 45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 205 60 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 241.041 49.3792 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1121" [ + vis [ "1121" "1120" "1103" "1102" "1101" "1122" "1105" "1104" "1106" ] + suit_edge [ 31 36 ] + suit_edge [ 37 32 ] + battle_cell [ 20 20 225 80.0002 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 245 70 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 245 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 1.78 -6.5 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 205 70 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + ] + visgroup "1122" [ + vis [ "1122" "1106" "1107" "1108" "1105" "1104" "1120" "1121" "1128" ] + suit_edge [ 46 48 ] + suit_edge [ 48 49 ] + suit_edge [ 50 51 ] + suit_edge [ 51 47 ] + suit_edge [ 48 52 ] + suit_edge [ 52 48 ] + suit_edge [ 51 52 ] + suit_edge [ 52 51 ] + battle_cell [ 20 20 289.999 110.001 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 265 90 -0.000114441 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 265 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 7 -7 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12 -9 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 305 90 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + landmark_building "tb22:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Bait and Switches Electrical Shop" ] + pos [ 290 90 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16 -6 0 ] + nhpr [ 90 0 -0 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.88 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.423529 0 1 ] + pos [ -0.11 0 0.53 ] + scale [ 1.3 1 1.3 ] + kern [ 0.036383 ] + wiggle [ 0.09381 ] + stomp [ 0.049752 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.309804 0 1 ] + pos [ 0 0 -0.66 ] + scale [ 1.4 1 1.2 ] + kern [ 0.021839 ] + stomp [ 0.043067 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 280 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12 -7 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 2 12 12 ] + nhpr [ -30 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 8 -7 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 295 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 295.645 93.4063 2.28882e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "1123" [ + vis [ "1123" "1110" "1109" "1108" "1107" "1106" "1124" "1111" "1112" "1113" "1114" "1115" "1128" ] + suit_edge [ 80 81 ] + suit_edge [ 74 79 ] + battle_cell [ 20 20 275 -50.0003 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 295 -70 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 286 -68 0 ] + nhpr [ 180 0 -0 ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 255 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 19 -4 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 6.96 5.66 19.15 ] + nhpr [ -0 0 -0 ] + color [ 0.17 0.45 0.23 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 3 -9 0 ] + nhpr [ -15 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 255 -50 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3 -3 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 295 -30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 1 -6 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 9.18 2.44 18.04 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 295 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 295 -55 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 3 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 258.095 -61.8281 7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1124" [ + vis [ "1124" "1123" "1110" "1109" "1108" "1107" "1106" "1111" "1112" "1113" "1114" "1115" "1128" ] + suit_edge [ 79 82 ] + suit_edge [ 82 83 ] + suit_edge [ 85 80 ] + suit_edge [ 82 86 ] + suit_edge [ 86 82 ] + suit_edge [ 85 86 ] + suit_edge [ 86 85 ] + suit_edge [ 94 85 ] + battle_cell [ 20 20 275 -95.0011 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 295 -110 3.8147e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 295 -120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb12:20_DNARoot" [ + pos [ 295 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9 2 18 ] + nhpr [ -0 0 -0 ] + color [ 0.17 0.45 0.23 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7 -9 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15 -1 0 ] + nhpr [ -0 0 -0 ] + color [ 0.87 0.61 0.61 1 ] + ] + ] + flat_building "tb12:20_DNARoot" [ + pos [ 295 -100 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 255 -80 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8 -9 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 255 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8 -2 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11 -1 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb28:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Piano Tuna" ] + pos [ 255 -105 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16 -9 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -3.14 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.509804 1 ] + pos [ 0.2 0 0.16 ] + scale [ 2 1 2 ] + kern [ 0.04 ] + wiggle [ 2.60282 ] + stomp [ 0.02 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0 1 ] + pos [ 0 0 -0.9 ] + kern [ 0.045789 ] + wiggle [ 2.70949 ] + stumble [ 0.013993 ] + stomp [ 0.024174 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb12:20_DNARoot" [ + pos [ 295 -85 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3 -3 0 ] + nhpr [ -30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb12:20_DNARoot" [ + pos [ 295 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 291.923 -95.0332 3.8147e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1125" [ + vis [ "1125" "1116" "1115" "1114" "1117" "1126" "1127" "1119" "1118" "1129" ] + suit_edge [ 122 127 ] + suit_edge [ 127 128 ] + suit_edge [ 130 123 ] + suit_edge [ 137 130 ] + battle_cell [ 20 20 419.999 -190 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 440 -170 -2.28882e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 415 -210 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 440 -210 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 440 -195 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1 3 19 ] + nhpr [ -0 0 -0 ] + color [ 0.92 0.63 0.42 1 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 10.77 -4.23 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 6 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 440 -170 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "streetlight_DD_right_DNARoot" [ + code [ "streetlight_DD_right" ] + pos [ 4.95 -8.18 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7 -32 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 440 -185 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 430 -210 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10 1 20 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 408.502 -205.199 -2.28882e-005 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "1126" [ + vis [ "1126" "1118" "1119" "1127" "1117" "1125" "1116" "1115" "1114" "1129" ] + suit_edge [ 133 140 ] + suit_edge [ 140 141 ] + suit_edge [ 142 143 ] + suit_edge [ 143 135 ] + battle_cell [ 20 20 419.999 -129.999 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 400 -110 1.14441e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 408.9 -118.24 0 ] + nhpr [ 90 0 -0 ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 440 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.24 5.62 18.28 ] + nhpr [ -0 0 -0 ] + color [ 0.57 0.7 0.35 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8 -8 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 16 -35 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12 -32 0 ] + nhpr [ 180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 11 -38 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 440 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -30.69 -7.39 12.03 ] + nhpr [ 45 0 -0 ] + scale [ 1.9 1.9 1.9 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -20.12 -31.11 11.87 ] + nhpr [ 45 0 -0 ] + scale [ 1.9 1.9 1.9 ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 415 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 7.73 -1.15 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 400 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ 425 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 13.79 -16.92 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 435.566 -133.185 1.14441e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1127" [ + vis [ "1127" "1119" "1118" "1126" "1117" "1125" ] + suit_edge [ 151 155 ] + suit_edge [ 155 156 ] + suit_edge [ 156 152 ] + suit_edge [ 156 157 ] + suit_edge [ 157 156 ] + suit_edge [ 155 157 ] + suit_edge [ 157 155 ] + battle_cell [ 20 20 370 -55 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 350 -30 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ 350 -44 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10.0002 -9.00015 -1.14441e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 390 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + landmark_building "tb24:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Soles Repaired While U Wait" ] + pos [ 350 -69 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -2.31 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.368627 0.184314 1 ] + pos [ 0.23 0 0.4 ] + scale [ 1.5 1 1.5 ] + kern [ 0.066506 ] + wiggle [ 2 ] + stomp [ 0.045789 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.337255 0.501961 1 ] + pos [ 0 0 -0.64 ] + kern [ 0.072042 ] + wiggle [ 3.18364 ] + stumble [ 0.042135 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 390 -30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + prop "linktunnel_tt_2340_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 370 -30 0 ] + nhpr [ -0 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.5 ] + nhpr [ -0 0 -1 ] + scale [ 1.1 1 1.1 ] + kern [ 0.110098 ] + wiggle [ 0.79792 ] + width [ 61.9924 ] + height [ 61.9924 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.35 ] + scale [ 1.1 1 1 ] + kern [ 0.061055 ] + width [ 33.5469 ] + height [ 33.5469 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + pos [ 0 0 1.68 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -2.05 ] + scale [ 0.8 1 0.8 ] + width [ 46.0511 ] + height [ 46.0511 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 378.616 -35.3918 -0.5 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "1128" [ + vis [ "1128" "1129" "1106" "1107" "1108" "1109" "1110" "1105" "1104" "1122" "1121" ] + landmark_building "tb29:toon_landmark_hqDD_DNARoot" [ + code [ "toon_landmark_hqDD" ] + building_type [ "hq" ] + title [ "" ] + pos [ 365 100 0 ] + nhpr [ 90 0 -0 ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 395 130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.26 1.85 20.87 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 395 115 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.2 4.57 19.71 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 395 90 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 395 70 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.517647 0.956863 0.788235 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 57 14 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 375 70 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 360 70 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 20 -12 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 345 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 0 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 25.76 2.19 18.06 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 7 1 19 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 0.07 ] + nhpr [ -0 0 -4 ] + width [ 26.3317 ] + height [ 26.3317 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "M" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.96 ] + nhpr [ -0 0 -3 ] + width [ 18.0248 ] + height [ 18.0248 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -2.14 ] + nhpr [ -0 0 -2 ] + width [ 44.1073 ] + height [ 44.1073 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 1.35 ] + nhpr [ -0 0 -7 ] + scale [ 0.9 1 1 ] + width [ 42.8412 ] + height [ 42.8412 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "?" ] + ] + ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 360 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 375 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.572549 0.384314 0.337255 1 ] + ] + ] + ] + ] + visgroup "1129" [ + vis [ "1129" "1115" "1116" "1117" "1126" "1125" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 350 -348 0 ] + nhpr [ -78 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 368.148 -339.916 0.419537 ] + nhpr [ -135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 391.985 -339.985 0.468729 ] + nhpr [ 150 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 389.4 -363.95 0.459548 ] + nhpr [ 45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 370.452 -363.712 0.486794 ] + nhpr [ -45 0 -0 ] + ] + ] + group "props" [ + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 401.063 -314.464 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 406.765 -331.917 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.38254 1.38254 1.38254 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 350.207 -360.298 0 ] + nhpr [ -135 0 -0 ] + scale [ 1.41198 1.41198 1.41198 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 408.103 -365.459 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + scale [ 0.830627 0.830627 0.830627 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 378.834 -383.22 0.000213623 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 353.78 -330.463 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.26181 1.26181 1.26181 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 384.361 -381.776 -0.000629425 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_trashcan_DD_DNARoot" [ + code [ "prop_trashcan_DD" ] + pos [ 390 -325 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_trashcan_DD_DNARoot" [ + code [ "prop_trashcan_DD" ] + pos [ 370 -325 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 385 -375 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 375 -375 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 385.098 -333.835 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 375.098 -333.835 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 349.668 -355.053 6.86646e-005 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 409.108 -363.408 -5.34058e-005 ] + nhpr [ -0 0 -0 ] + scale [ 0.502397 0.502397 0.502397 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 390.425 -394.427 0 ] + nhpr [ -105 0 -0 ] + scale [ 1.25881 1.25881 1.25881 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 342.033 -421.347 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.59849 1.59849 1.59849 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 389.068 -396.973 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 414.641 -375 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 399.476 -317.431 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 354.767 -313.163 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 316.078 -359.407 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.59697 1.59697 1.59697 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 436.087 -336.531 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.40394 1.40394 1.40394 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 397.301 -315.767 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.605179 0.605179 0.605179 ] + ] + ] + street "street_DD_pond_DNARoot" [ + code [ "street_DD_pond" ] + pos [ 380 -355 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dock_1200.dna b/ttmodels/src/dna/donalds_dock_1200.dna new file mode 100644 index 00000000..c35e8c1d --- /dev/null +++ b/ttmodels/src/dna/donalds_dock_1200.dna @@ -0,0 +1,9281 @@ +store_suit_point [ 4, STREET_POINT, -338 -425 -0.5 ] +store_suit_point [ 5, STREET_POINT, -375 -425 -0.5 ] +store_suit_point [ 6, STREET_POINT, -375 -435 -0.5 ] +store_suit_point [ 7, STREET_POINT, -338 -435 -0.5 ] +store_suit_point [ 9, STREET_POINT, -393 -435 -0.5 ] +store_suit_point [ 10, STREET_POINT, -400 -435 -0.5 ] +store_suit_point [ 11, STREET_POINT, -390 -425 -0.5 ] +store_suit_point [ 12, STREET_POINT, -390 -410 -0.5 ] +store_suit_point [ 13, STREET_POINT, -400 -410 -0.5 ] +store_suit_point [ 14, FRONT_DOOR_POINT, -393 -446 0, 25 ] +store_suit_point [ 15, STREET_POINT, -390 -380 -0.5 ] +store_suit_point [ 16, STREET_POINT, -390 -370 -0.5 ] +store_suit_point [ 17, STREET_POINT, -400 -370 -0.5 ] +store_suit_point [ 18, STREET_POINT, -400 -380 -0.5 ] +store_suit_point [ 19, FRONT_DOOR_POINT, -379 -380 0, 3 ] +store_suit_point [ 20, STREET_POINT, -390 -350 -0.5 ] +store_suit_point [ 21, STREET_POINT, -400 -350 -0.5 ] +store_suit_point [ 22, STREET_POINT, -390 -335 -0.5 ] +store_suit_point [ 23, STREET_POINT, -375 -335 -0.5 ] +store_suit_point [ 24, STREET_POINT, -375 -325 -0.5 ] +store_suit_point [ 25, STREET_POINT, -400 -325 -0.5 ] +store_suit_point [ 26, STREET_POINT, -364 -335 -0.5 ] +store_suit_point [ 27, STREET_POINT, -345 -335 -0.5 ] +store_suit_point [ 28, STREET_POINT, -345 -325 -0.5 ] +store_suit_point [ 29, STREET_POINT, -364 -325 -0.5 ] +store_suit_point [ 30, FRONT_DOOR_POINT, -363 -314 0, 5 ] +store_suit_point [ 31, FRONT_DOOR_POINT, -366 -346 0, 6 ] +store_suit_point [ 32, STREET_POINT, -330 -335 -0.5 ] +store_suit_point [ 33, STREET_POINT, -330 -360 -0.5 ] +store_suit_point [ 34, STREET_POINT, -320 -360 -0.5 ] +store_suit_point [ 35, STREET_POINT, -320 -325 -0.5 ] +store_suit_point [ 36, STREET_POINT, -330 -385 -0.5 ] +store_suit_point [ 38, STREET_POINT, -305 -375 -0.5 ] +store_suit_point [ 39, STREET_POINT, -320 -375 -0.5 ] +store_suit_point [ 40, FRONT_DOOR_POINT, -331 -396 0, 7 ] +store_suit_point [ 41, STREET_POINT, -305.001 -385 -0.5 ] +store_suit_point [ 42, STREET_POINT, -285.002 -385 -0.5 ] +store_suit_point [ 43, STREET_POINT, -265.002 -385 -0.5 ] +store_suit_point [ 49, STREET_POINT, -245.002 -385 -0.5 ] +store_suit_point [ 50, STREET_POINT, -245.002 -375 -0.5 ] +store_suit_point [ 51, STREET_POINT, -233.002 -385 -0.5 ] +store_suit_point [ 52, STREET_POINT, -220.002 -385 -0.5 ] +store_suit_point [ 53, STREET_POINT, -220.002 -360 -0.5 ] +store_suit_point [ 54, STREET_POINT, -230.002 -375 -0.5 ] +store_suit_point [ 55, STREET_POINT, -230.002 -360 -0.5 ] +store_suit_point [ 56, FRONT_DOOR_POINT, -233.002 -396 0, 9 ] +store_suit_point [ 57, STREET_POINT, -220.002 -321 -0.5 ] +store_suit_point [ 58, STREET_POINT, -220.002 -320 -0.5 ] +store_suit_point [ 59, STREET_POINT, -230.002 -320 -0.5 ] +store_suit_point [ 60, STREET_POINT, -230.002 -321 -0.5 ] +store_suit_point [ 61, FRONT_DOOR_POINT, -208.002 -321 0, 10 ] +store_suit_point [ 63, STREET_POINT, -230.002 -280 -0.5 ] +store_suit_point [ 64, STREET_POINT, -230.001 -262 -0.5 ] +store_suit_point [ 66, STREET_POINT, -230.001 -255 -0.5 ] +store_suit_point [ 67, STREET_POINT, -205.001 -255 -0.5 ] +store_suit_point [ 68, STREET_POINT, -220.001 -280 -0.5 ] +store_suit_point [ 69, STREET_POINT, -220.001 -265 -0.5 ] +store_suit_point [ 70, STREET_POINT, -205.001 -265 -0.5 ] +store_suit_point [ 71, FRONT_DOOR_POINT, -241.001 -262 0, 11 ] +store_suit_point [ 72, STREET_POINT, -194.001 -255 -0.5 ] +store_suit_point [ 73, STREET_POINT, -194.001 -265 -0.5 ] +store_suit_point [ 74, STREET_POINT, -175.001 -265 -0.5 ] +store_suit_point [ 75, STREET_POINT, -175.001 -255 -0.5 ] +store_suit_point [ 76, FRONT_DOOR_POINT, -194.001 -244 0, 12 ] +store_suit_point [ 77, STREET_POINT, -160.001 -265 -0.5 ] +store_suit_point [ 78, STREET_POINT, -160.001 -280 -0.5 ] +store_suit_point [ 79, STREET_POINT, -150.001 -280 -0.5 ] +store_suit_point [ 80, STREET_POINT, -150.001 -255 -0.5 ] +store_suit_point [ 81, STREET_POINT, -160.001 -308 -0.5 ] +store_suit_point [ 82, STREET_POINT, -160.001 -310 -0.5 ] +store_suit_point [ 83, STREET_POINT, -150.001 -310 -0.5 ] +store_suit_point [ 84, STREET_POINT, -150.001 -308 -0.5 ] +store_suit_point [ 85, FRONT_DOOR_POINT, -170.001 -308 0, 13 ] +store_suit_point [ 86, FRONT_DOOR_POINT, -139.001 -308 0, 14 ] +store_suit_point [ 87, STREET_POINT, -160.001 -350 -0.5 ] +store_suit_point [ 88, STREET_POINT, -150.001 -350 -0.5 ] +store_suit_point [ 89, STREET_POINT, -160.001 -375 -0.5 ] +store_suit_point [ 90, STREET_POINT, -135.001 -375 -0.5 ] +store_suit_point [ 91, STREET_POINT, -135.001 -365 -0.5 ] +store_suit_point [ 92, STREET_POINT, -150.001 -365 -0.5 ] +store_suit_point [ 93, STREET_POINT, -118.001 -375 -0.5 ] +store_suit_point [ 94, STREET_POINT, -95.001 -375 -0.5 ] +store_suit_point [ 95, STREET_POINT, -95.001 -365 -0.5 ] +store_suit_point [ 96, STREET_POINT, -118.001 -365 -0.5 ] +store_suit_point [ 97, FRONT_DOOR_POINT, -118.001 -386 0, 27 ] +store_suit_point [ 98, STREET_POINT, -75.001 -375 -0.5 ] +store_suit_point [ 99, STREET_POINT, -55.001 -375 -0.5 ] +store_suit_point [ 100, STREET_POINT, -55.001 -365 -0.5 ] +store_suit_point [ 101, STREET_POINT, -75.001 -365 -0.5 ] +store_suit_point [ 102, FRONT_DOOR_POINT, -75.001 -354 0, 16 ] +store_suit_point [ 103, STREET_POINT, -35.001 -375 -0.5 ] +store_suit_point [ 104, STREET_POINT, -35.001 -365 -0.5 ] +store_suit_point [ 105, STREET_POINT, -10.001 -375 -0.5 ] +store_suit_point [ 106, STREET_POINT, -10.001 -362 -0.5 ] +store_suit_point [ 107, STREET_POINT, -10.001 -350 -0.5 ] +store_suit_point [ 108, STREET_POINT, -20.001 -350 -0.5 ] +store_suit_point [ 109, STREET_POINT, -20.001 -365 -0.5 ] +store_suit_point [ 110, FRONT_DOOR_POINT, 0.998985 -363 0, 17 ] +store_suit_point [ 111, STREET_POINT, -20.001 -310 -0.5 ] +store_suit_point [ 112, STREET_POINT, -20.001 -323 -0.5 ] +store_suit_point [ 113, STREET_POINT, -10.001 -323 -0.5 ] +store_suit_point [ 114, STREET_POINT, -10.001 -310 -0.5 ] +store_suit_point [ 115, FRONT_DOOR_POINT, -31.001 -323 0, 18 ] +store_suit_point [ 117, STREET_POINT, -10.0002 -285 -0.5 ] +store_suit_point [ 118, STREET_POINT, -35.0002 -285 -0.5 ] +store_suit_point [ 120, STREET_POINT, -20.0002 -295 -0.5 ] +store_suit_point [ 122, FRONT_DOOR_POINT, -10.0002 -275 0, 19 ] +store_suit_point [ 123, STREET_POINT, -60.0002 -285 -0.5 ] +store_suit_point [ 125, STREET_POINT, -62.0002 -295 -0.5 ] +store_suit_point [ 127, STREET_POINT, -70.0002 -270 -0.5 ] +store_suit_point [ 128, FRONT_DOOR_POINT, -62.0002 -306 0, 20 ] +store_suit_point [ 129, STREET_POINT, -60.0002 -239 -0.5 ] +store_suit_point [ 130, STREET_POINT, -60.0002 -230 -0.5 ] +store_suit_point [ 131, STREET_POINT, -70.0002 -230 -0.5 ] +store_suit_point [ 132, STREET_POINT, -70.0002 -239 -0.5 ] +store_suit_point [ 134, STREET_POINT, -60.001 -222 -0.5 ] +store_suit_point [ 135, STREET_POINT, -60.001 -190 -0.5 ] +store_suit_point [ 136, STREET_POINT, -70.001 -190 -0.5 ] +store_suit_point [ 137, STREET_POINT, -70.001 -222 -0.5 ] +store_suit_point [ 139, FRONT_DOOR_POINT, -49.001 -222 0, 28 ] +store_suit_point [ 140, STREET_POINT, -60.001 -170 -0.5 ] +store_suit_point [ 141, STREET_POINT, -70.001 -170 -0.5 ] +store_suit_point [ 142, STREET_POINT, -60.001 -145 -0.5 ] +store_suit_point [ 144, STREET_POINT, -85.001 -145 -0.5 ] +store_suit_point [ 145, STREET_POINT, -85.001 -155 -0.5 ] +store_suit_point [ 146, STREET_POINT, -70.001 -155 -0.5 ] +store_suit_point [ 147, FRONT_DOOR_POINT, -73.001 -134 0, 23 ] +store_suit_point [ 148, STREET_POINT, -117.001 -145 -0.5 ] +store_suit_point [ 149, STREET_POINT, -125.001 -145 -0.5 ] +store_suit_point [ 150, STREET_POINT, -125.001 -155 -0.5 ] +store_suit_point [ 151, STREET_POINT, -117.001 -155 -0.5 ] +store_suit_point [ 152, FRONT_DOOR_POINT, -117.001 -166 0, 24 ] +store_suit_point [ 153, STREET_POINT, -145.001 -145 -0.5 ] +store_suit_point [ 156, STREET_POINT, -154.001 -145 -0.5 ] +store_suit_point [ 157, STREET_POINT, -154.001 -155 -0.5 ] +store_suit_point [ 159, FRONT_DOOR_POINT, -81 -239 0, 21 ] +store_suit_point [ 160, STREET_POINT, -265.002 -375 -0.5 ] +store_suit_point [ 161, STREET_POINT, -285.002 -375 -0.5 ] +store_suit_point [ 162, FRONT_DOOR_POINT, -285.002 -364 0, 26 ] +store_suit_point [ 163, FRONT_DOOR_POINT, -338.002 -414 0, 1 ] +store_suit_point [ 164, STREET_POINT, -35 -295 -0.5 ] +store_suit_point [ 165, STREET_POINT, -70 -295 -0.5 ] +store_suit_point [ 166, STREET_POINT, -60 -270 -0.5 ] +store_suit_point [ 167, STREET_POINT, -73 -145 -0.5 ] +store_suit_point [ 168, STREET_POINT, -145.001 -155 -0.5 ] +store_suit_point [ 169, SIDE_DOOR_POINT, -127.001 -170 0, 24 ] +store_suit_point [ 170, SIDE_DOOR_POINT, -113.001 -130 0, 23 ] +store_suit_point [ 171, SIDE_DOOR_POINT, -45.001 -185 0, 28 ] +store_suit_point [ 172, SIDE_DOOR_POINT, -85.001 -260 0, 21 ] +store_suit_point [ 173, SIDE_DOOR_POINT, -85.0003 -280 0, 20 ] +store_suit_point [ 174, SIDE_DOOR_POINT, 4.9997 -295 0, 19 ] +store_suit_point [ 175, SIDE_DOOR_POINT, -35.0003 -343 0, 18 ] +store_suit_point [ 176, SIDE_DOOR_POINT, 4.9997 -343 0, 17 ] +store_suit_point [ 177, SIDE_DOOR_POINT, -45.0003 -350 0, 16 ] +store_suit_point [ 178, SIDE_DOOR_POINT, -65.001 -390 0, 27 ] +store_suit_point [ 179, SIDE_DOOR_POINT, -135.002 -342 0, 14 ] +store_suit_point [ 180, SIDE_DOOR_POINT, -175.002 -285 0, 13 ] +store_suit_point [ 181, SIDE_DOOR_POINT, -185.001 -240 0, 12 ] +store_suit_point [ 182, SIDE_DOOR_POINT, -245.001 -285 0, 11 ] +store_suit_point [ 183, SIDE_DOOR_POINT, -245.001 -317 0, 10 ] +store_suit_point [ 184, SIDE_DOOR_POINT, -254.002 -400 0, 9 ] +store_suit_point [ 185, SIDE_DOOR_POINT, -255.002 -360 0, 26 ] +store_suit_point [ 186, SIDE_DOOR_POINT, -312.002 -400 0, 7 ] +store_suit_point [ 187, SIDE_DOOR_POINT, -328 -310 0, 5 ] +store_suit_point [ 188, SIDE_DOOR_POINT, -350 -350 0, 6 ] +store_suit_point [ 189, SIDE_DOOR_POINT, -415 -340 0, 5 ] +store_suit_point [ 190, SIDE_DOOR_POINT, -415 -378 0, 3 ] +store_suit_point [ 191, SIDE_DOOR_POINT, -415 -423 0, 25 ] +store_suit_point [ 192, SIDE_DOOR_POINT, -358 -410 0, 1 ] +group "donaldsDock" [ + visgroup "1201" [ + vis [ "1201" "1202" "1203" "1226" ] + battle_cell [ 20 20 -324.875 -429.81 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -335 -450 3.8147e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random20_DNARoot" [ + pos [ -325 -410 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.709804 0.486275 0.34902 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.709804 0.486275 0.34902 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -315 -450 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.447059 0.309804 0.168627 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.71 0.27 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 2.27 4.27 12.54 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.38 0.68 0.46 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8 -5 0 ] + nhpr [ -165 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8 -2 0 ] + nhpr [ 165 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "DD_barrel" ] + pos [ 11 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -295 -450 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10 -8.38 0 ] + nhpr [ 180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 16.71 -8.55 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ -310 -410 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.870588 0.607843 0.607843 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10 -5 0 ] + nhpr [ -15 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.22005 -8.11996 -2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + ] + prop "linktunnel_dg_5242_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ -295 -430 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 0.9 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.06 ] + scale [ 1.4 1 1.5 ] + width [ 55.0903 ] + height [ 55.0903 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "daisySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.87 ] + scale [ 0.8 1 0.8 ] + width [ 39.1757 ] + height [ 39.1757 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -298.209 -438.448 -0.510909 ] + nhpr [ -105.628 0 -0 ] + ] + ] + visgroup "1202" [ + vis [ "1201" "1202" "1203" "1204" "1205" "1226" "1227" "1236" ] + suit_edge [ 9 6 ] + suit_edge [ 10 9 ] + suit_edge [ 5 11 ] + suit_edge [ 11 12 ] + suit_edge [ 13 10 ] + suit_edge [ 9 14 ] + suit_edge [ 14 9 ] + suit_edge [ 11 14 ] + suit_edge [ 14 11 ] + suit_edge [ 191 11 ] + suit_edge [ 11 191 ] + suit_edge [ 191 10 ] + suit_edge [ 10 191 ] + battle_cell [ 20 20 -395.019 -429.855 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -375 -450 -7.24792e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2t" [ + pos [ -415 -430 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -415 -450 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 12 2 20 ] + nhpr [ -0 0 -0 ] + color [ 0.45 0.31 0.17 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 6 -4 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 12.57 -1.22 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -405 -450 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb25:random_DNARoot" [ + pos [ -415 -430 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Ahab's Prefab Sea Crab Center" ] + pos [ -380 -450 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0.48 0 -1.54 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 0.89 ] + scale [ 1.3 1 1 ] + kern [ 0.062721 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 -0.04 ] + scale [ 1.3 1 1 ] + kern [ 0.06404 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 -0.94 ] + scale [ 1.3 1 1 ] + kern [ 0.078052 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -380.81 -415.203 -7.24792e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + visgroup "1203" [ + vis [ "1201" "1202" "1203" "1204" "1205" "1206" "1226" "1227" "1236" ] + suit_edge [ 12 15 ] + suit_edge [ 15 16 ] + suit_edge [ 17 18 ] + suit_edge [ 18 13 ] + suit_edge [ 15 19 ] + suit_edge [ 19 15 ] + suit_edge [ 18 19 ] + suit_edge [ 19 18 ] + suit_edge [ 190 17 ] + suit_edge [ 17 190 ] + suit_edge [ 190 16 ] + suit_edge [ 16 190 ] + battle_cell [ 20 20 -394.876 -389.953 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -375 -410 4.57764e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "toonTenTen_DNARoot" [ + pos [ -415 -400 4.57764e-005 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -375 -390 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.73 0.46 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.73 0.46 0.37 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "DD_barrel" ] + pos [ 14 -3 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10.2989 -7.28888 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2.59 -9.12 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -415 -415 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.1 -8.19 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5.00001 -8 3.8147e-005 ] + nhpr [ -30 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 0.98 -8.63 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.41 3.3 17.31 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + landmark_building "tb3:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Wok the Plank Chinese Food" ] + pos [ -375 -370 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ -0.35 0 0 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0 1 ] + pos [ -0.07 0 -0.06 ] + scale [ 1.3 1 1.3 ] + kern [ 0.097982 ] + wiggle [ 3.60039 ] + stumble [ 0.030229 ] + stomp [ 0.057571 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 1 0 1 ] + pos [ -0.58 0 -0.03 ] + scale [ 0.7 1 0.7 ] + kern [ 0.047608 ] + wiggle [ 5.99008 ] + stumble [ 0.031533 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -1.18 ] + scale [ 0.7 1 0.7 ] + kern [ 0.092405 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb3:20_DNARoot" [ + pos [ -415 -385 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.29 3.47 17.28 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -411.67 -398.874 4.57764e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1204" [ + vis [ "1204" "1205" "1206" "1208" "1209" "1228" "1227" "1210" "1202" "1203" "1226" "1236" ] + suit_edge [ 20 22 ] + suit_edge [ 22 23 ] + suit_edge [ 24 25 ] + suit_edge [ 25 21 ] + suit_edge [ 189 21 ] + suit_edge [ 21 189 ] + suit_edge [ 189 20 ] + suit_edge [ 20 189 ] + battle_cell [ 20 20 -395.163 -329.837 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -415 -350 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -385 -310 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -385 -290 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random20_DNARoot" [ + pos [ -415 -330 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 3 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -8 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 15 -6 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -415 -350 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 15.81 1.87 20.58 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 20 -3 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 19 -5 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.83 -31.23 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.00054 -38.0002 -7.62939e-006 ] + nhpr [ 60 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -415 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 1.12521 1.80441 19.578 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.92 ] + nhpr [ -0 0 -5 ] + scale [ 1.2 1 1.2 ] + width [ 25.4531 ] + height [ 25.4531 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.15 ] + nhpr [ -0 0 -2 ] + scale [ 1.2 1 1.2 ] + width [ 17.5476 ] + height [ 17.5476 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -2.25 ] + kern [ 0.04373 ] + width [ 34.4021 ] + height [ 34.4021 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.23 ] + nhpr [ -0 0 -2 ] + width [ 25.1503 ] + height [ 25.1503 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -370 -270 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -405 -290.001 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -385 -270 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -405 -270 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.45 0.31 0.17 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.86 0.48 0.23 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -385 -290 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.99973 -0.947113 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -14.9774 -0.831482 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -405 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15.0003 -1.28439 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 34.9402 -1.01746 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -411.769 -324.492 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1205" [ + vis [ "1203" "1204" "1205" "1206" "1208" "1209" "1227" "1202" "1228" "1210" "1236" ] + suit_edge [ 23 26 ] + suit_edge [ 26 27 ] + suit_edge [ 28 29 ] + suit_edge [ 29 24 ] + suit_edge [ 29 30 ] + suit_edge [ 30 29 ] + suit_edge [ 26 30 ] + suit_edge [ 30 26 ] + suit_edge [ 26 29 ] + suit_edge [ 26 31 ] + suit_edge [ 31 26 ] + suit_edge [ 29 31 ] + suit_edge [ 31 29 ] + suit_edge [ 188 27 ] + suit_edge [ 27 188 ] + suit_edge [ 188 28 ] + suit_edge [ 28 188 ] + battle_cell [ 20 20 -359.743 -329.905 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -375 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random20_DNARoot" [ + pos [ -350 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 5 12 8 ] + nhpr [ -15 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7 -5 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10 -7 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15 -8.85 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 13.65 -31.35 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 11.21 -39.13 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -370 -350 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.91 0.54 0.54 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -345 -350 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Peanut Butter and Jellyfish" ] + pos [ -355 -350 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -0.09 ] + nhpr [ -0 0 1 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.85098 0.423529 0 1 ] + pos [ 0 0 0.38 ] + kern [ 0.088123 ] + wiggle [ 0.49595 ] + stomp [ 0.055931 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.882353 0.0117647 0.117647 1 ] + pos [ 0 0 -1.49 ] + kern [ 0.122279 ] + wiggle [ 3.8851 ] + stumble [ 0.044602 ] + stomp [ -0.042404 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.152941 0.152941 0.152941 1 ] + pos [ 0 0 -0.54 ] + kern [ 0.072587 ] + wiggle [ 4.21054 ] + stumble [ 0.034382 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 6.86 -8.76 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb5:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Sails for Sale" ] + pos [ -375 -310 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.79 0.55 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.93 ] + nhpr [ -0 0 -6 ] + baseline [ + code [ "humanist" ] + color [ 0.545098 0.0196078 0.203922 1 ] + pos [ 0.44 0 -0.06 ] + scale [ 1.5 1 1.7 ] + kern [ 0.106108 ] + wiggle [ 4.41765 ] + stumble [ 0.02 ] + stomp [ 0.015585 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.83 0 0 ] + wiggle [ 3.85388 ] + stumble [ 0.041118 ] + stomp [ -0.060799 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15 -8.84 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 27.39 -2.27 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 28.53 -6.24 0 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -385 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 1 0 0 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 1 0 0 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.16684 2.28989 19.6 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 5 -8 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "1206" [ + vis [ "1204" "1205" "1206" "1203" "1228" "1227" "1208" "1209" "1210" ] + suit_edge [ 27 32 ] + suit_edge [ 32 33 ] + suit_edge [ 34 35 ] + suit_edge [ 35 28 ] + battle_cell [ 20 20 -325.106 -330.016 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -345 -310 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_curb_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random20_DNARoot" [ + pos [ -305 -310 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.44 0.67 0.45 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.439216 0.666667 0.447059 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.498039 0.498039 0.498039 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -335 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -320 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 5.16 -8.97 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 12.15 -2.87 -0.24 ] + nhpr [ -45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 7.74 -14.16 0 ] + nhpr [ -180 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 2 -1.16 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -345 -350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -345 -365 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10 -7 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ -305 -325 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 19.17 -8.23 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 16.09 -1.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -305 -345 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 10 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -310.907 -329.973 -7.62939e-006 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "1208" [ + vis [ "1205" "1206" "1208" "1209" "1210" "1204" "1228" "1211" ] + suit_edge [ 33 36 ] + suit_edge [ 38 39 ] + suit_edge [ 39 34 ] + suit_edge [ 36 40 ] + suit_edge [ 40 36 ] + suit_edge [ 39 40 ] + suit_edge [ 40 39 ] + suit_edge [ 36 41 ] + suit_edge [ 186 41 ] + suit_edge [ 41 186 ] + suit_edge [ 186 38 ] + suit_edge [ 38 186 ] + suit_edge [ 187 32 ] + suit_edge [ 32 187 ] + suit_edge [ 187 35 ] + suit_edge [ 35 187 ] + battle_cell [ 20 20 -324.823 -379.829 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -305 -400 -1.14441e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ -345 -380 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.164706 0.439216 0.27451 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.99 0.92 18.68 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.61 -8.65 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb7:random30_DNARoot" [ + pos [ -345 -400 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.31 -8.9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12 -6 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9 -4 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -335 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.732283 0.511163 0.511163 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -305 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + landmark_building "tb7:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Gifts With a Porpoise" ] + pos [ -320 -400 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign2" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.24 0 0.23 ] + scale [ 0.8 1 0.8 ] + kern [ 0.05521 ] + wiggle [ 1 ] + stomp [ 0.015331 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.0117647 0.670588 0.521569 1 ] + pos [ 0 0 -1.05 ] + scale [ 1.5 1 1.4 ] + kern [ 0.1287 ] + wiggle [ 2.8683 ] + stumble [ 0.038835 ] + stomp [ 0.00772 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -341.573 -371.713 -1.14441e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1209" [ + vis [ "1204" "1205" "1206" "1208" "1209" "1210" "1211" "1228" ] + suit_edge [ 41 42 ] + suit_edge [ 42 43 ] + suit_edge [ 160 161 ] + suit_edge [ 161 38 ] + suit_edge [ 161 162 ] + suit_edge [ 162 161 ] + suit_edge [ 42 162 ] + suit_edge [ 162 42 ] + battle_cell [ 20 20 -285.031 -379.884 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -305 -400 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ -285 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.607843 0.356863 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.49 -8.15 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb9t" [ + pos [ -265 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -305 -360 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.74902 0.74902 0.74902 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -275 -360 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb9:random_DNARoot" [ + pos [ -265 -400 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4 -8 -1.14441e-005 ] + nhpr [ -120 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 6.48 6.02 19.56 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + ] + landmark_building "tb26:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Root Beer Afloats" ] + pos [ -298 -360 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -2 -7 0 ] + nhpr [ -60 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 30.27 -6.62 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 32.86 -5.12 0 ] + nhpr [ 75 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -0.45 ] + nhpr [ -0 0 1 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0 0.501961 1 ] + pos [ 0 0 -0.99 ] + scale [ 1.4 1 1.3 ] + kern [ 0.149111 ] + wiggle [ 6.81165 ] + stumble [ 0.05 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.19 ] + scale [ 0.8 1 0.8 ] + kern [ 0.109551 ] + wiggle [ 2.61785 ] + stomp [ 0.02 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -291.271 -365.962 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "1210" [ + vis [ "1206" "1208" "1209" "1210" "1211" "1212" "1213" "1228" "1205" "1204" "1229" ] + suit_edge [ 49 51 ] + suit_edge [ 51 52 ] + suit_edge [ 52 53 ] + suit_edge [ 54 50 ] + suit_edge [ 55 54 ] + suit_edge [ 51 56 ] + suit_edge [ 56 51 ] + suit_edge [ 54 56 ] + suit_edge [ 56 54 ] + battle_cell [ 20 20 -225.139 -379.397 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -205 -360 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random20_DNARoot" [ + pos [ -205 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -205 -375 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0 0.607843 0.356863 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.607843 0.356863 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -205 -360 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.94 0.35 0.35 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.71 -8.69 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 1 -8 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3 1 21 ] + nhpr [ 45 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 1.41 ] + nhpr [ -0 0 -6 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.57 ] + nhpr [ -0 0 -6 ] + width [ 27.9345 ] + height [ 27.9345 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.584314 0.584314 0 1 ] + pos [ 0 0 -0.47 ] + nhpr [ -0 0 -4 ] + scale [ 1.2 1 1.2 ] + kern [ 0.08286 ] + width [ 29.4048 ] + height [ 29.4048 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.584314 0.584314 0 1 ] + pos [ 0 0 -1.31 ] + nhpr [ -0 0 -3 ] + width [ 21.1309 ] + height [ 21.1309 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -2.16 ] + nhpr [ -0 0 -3 ] + scale [ 1 1 0.9 ] + width [ 31.8634 ] + height [ 31.8634 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Windjammers and Jellies" ] + pos [ -220 -400 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.592157 0.592157 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -3.69 ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.615686 0.615686 1 ] + pos [ -1.64 0 1.08 ] + scale [ 1.5 1 1.5 ] + kern [ 0.07962 ] + wiggle [ 2.55467 ] + stomp [ 0.04 ] + width [ 15.7396 ] + height [ 15.7396 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0 0 1 ] + pos [ -1.55 0 -1.71 ] + scale [ 1.7 1 1.7 ] + kern [ 0.079626 ] + wiggle [ 1.56325 ] + stomp [ 0.034041 ] + width [ 10.3432 ] + height [ 10.3432 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + pos [ -1.66 0 -0.11 ] + kern [ 0.080308 ] + stomp [ 0.034709 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 20.33 -36.46 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ -12.41 -2.68 -0.07 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -10 -8 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -5.61 -8.42 0 ] + nhpr [ -180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -7 -15 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.51 -31.65 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 23.37 -8.26 0 ] + nhpr [ 180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 19 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 1 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -2.11 -6.72 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 17.8 13.11 21.12 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "1211" [ + vis [ "1210" "1211" "1212" "1229" "1213" "1209" "1208" "1228" ] + suit_edge [ 53 57 ] + suit_edge [ 57 58 ] + suit_edge [ 59 60 ] + suit_edge [ 60 55 ] + suit_edge [ 57 61 ] + suit_edge [ 61 57 ] + suit_edge [ 60 61 ] + suit_edge [ 61 60 ] + battle_cell [ 20 20 -224.914 -340.098 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ -205 -340 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.172549 0.635294 0.447059 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.172549 0.635294 0.447059 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 14.58 -6.25 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + flat_building "tb10t" [ + pos [ -205 -325 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -245 -360 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -245 -340 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.65 1.61 18.63 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 18 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb10:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Barnacle Bargains" ] + pos [ -205 -310 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign3" ] + baseline [ + code [ "mickey" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ -1.9 0 0.18 ] + scale [ 1.4 1 1.5 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.623529 0.623529 1 ] + pos [ -1.54 0 -1 ] + scale [ 1.1 1 1 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -245 -320 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -205 -325 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 20.9 -8.4 0 ] + nhpr [ 135 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -241.371 -341.387 -1.14441e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1212" [ + vis [ "1210" "1211" "1212" "1213" "1214" "1215" "1229" "1228" ] + suit_edge [ 66 64 ] + suit_edge [ 67 66 ] + suit_edge [ 68 69 ] + suit_edge [ 69 70 ] + suit_edge [ 64 71 ] + suit_edge [ 71 64 ] + suit_edge [ 69 71 ] + suit_edge [ 71 69 ] + suit_edge [ 64 63 ] + battle_cell [ 20 20 -225.12 -260.028 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -245 -280 7.62939e-006 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ -245 -250 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -4 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.19 -9.5 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -27.07 -7.72 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -245 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 8.3 -1.19 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -230 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 0.48 -7.25 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.07 -8.9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -0.08 11.83 8.66 ] + nhpr [ -0 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 20.31 -8.74 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.75 -31.34 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -215 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb11:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Deep Sea Diner" ] + pos [ -245 -275 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -2.76 ] + nhpr [ -0 0 3 ] + baseline [ + code [ "mickey" ] + color [ 0 0.396078 0.584314 1 ] + scale [ 1.3 1 1.3 ] + kern [ 0.198415 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.396078 0.584314 1 ] + pos [ 0 0 -1.29 ] + scale [ 1.3 1 1.3 ] + kern [ 0.215818 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -220.442 -243.781 7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "1213" [ + vis [ "1210" "1211" "1212" "1213" "1214" "1215" "1216" "1228" "1229" "1217" "1230" ] + suit_edge [ 72 67 ] + suit_edge [ 70 73 ] + suit_edge [ 73 74 ] + suit_edge [ 75 72 ] + suit_edge [ 72 76 ] + suit_edge [ 76 72 ] + suit_edge [ 73 76 ] + suit_edge [ 76 73 ] + suit_edge [ 181 75 ] + suit_edge [ 75 181 ] + suit_edge [ 181 74 ] + suit_edge [ 74 181 ] + battle_cell [ 20 20 -190.003 -260.156 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -205 -280 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ -175 -280 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 2.53 -4.72 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.74902 0.74902 0.74902 1 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -190 -280 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb12:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Able-Bodied Gym" ] + pos [ -205 -240 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.6 0.67 0.54 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.87 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.25 ] + scale [ 1.5 1 1.5 ] + kern [ 0.134052 ] + wiggle [ 2.27804 ] + stumble [ 0.048538 ] + stomp [ -0.042653 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.627451 1 ] + pos [ 0.01 0 -0.81 ] + scale [ 1.6 1 1 ] + kern [ 0.273171 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb12:random_DNARoot" [ + pos [ -190 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -192.07 -276.861 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1214" [ + vis [ "1212" "1213" "1214" "1215" "1216" "1217" "1230" "1229" ] + suit_edge [ 74 77 ] + suit_edge [ 77 78 ] + suit_edge [ 79 80 ] + suit_edge [ 80 75 ] + battle_cell [ 20 20 -155.166 -259.862 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -175 -240 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random20_DNARoot" [ + pos [ -180 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.501961 0.376471 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 5 8 16 ] + nhpr [ -15 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 9.59 -7.07 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 13.24 -8.82 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 15.6104 -5.21408 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + flat_building "tb12:20_DNARoot" [ + pos [ -165 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -135 -240 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.88 0.8 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.83 -8.71 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 3.9 -3.72 -0.06 ] + nhpr [ 45 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 37 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 40 -7 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -135 -260 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 13.76 2.48 21.57 ] + nhpr [ -0 0 -0 ] + color [ 0.42 0.16 0.16 1 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -150 -240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -7.9 11.3 10.5 ] + nhpr [ 15 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -16.57 -31.43 0 ] + nhpr [ 45 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ -155.107 -246.037 1.52588e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "1215" [ + vis [ "1212" "1213" "1214" "1215" "1216" "1217" "1230" ] + suit_edge [ 78 81 ] + suit_edge [ 81 82 ] + suit_edge [ 83 84 ] + suit_edge [ 84 79 ] + suit_edge [ 81 85 ] + suit_edge [ 85 81 ] + suit_edge [ 84 85 ] + suit_edge [ 85 84 ] + suit_edge [ 84 86 ] + suit_edge [ 86 84 ] + suit_edge [ 81 86 ] + suit_edge [ 86 81 ] + suit_edge [ 180 78 ] + suit_edge [ 78 180 ] + suit_edge [ 180 79 ] + suit_edge [ 79 180 ] + battle_cell [ 20 20 -155.192 -294.782 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -175 -280 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -175 -300 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ -135 -280 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 3 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -6 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 12.32 -4.3 0 ] + nhpr [ 135 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 11.3 -2 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.96 -8.09 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -175 -305 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8.99 -3.37 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12 -5 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2 -9 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -175 -290 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.79 0.47 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + landmark_building "tb14:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Reel 'Em Inn" ] + pos [ -135 -295 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.97 0.55 0.4 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -4.04 ] + nhpr [ -0 0 -4 ] + baseline [ + code [ "mickey" ] + color [ 0 0.701961 0.701961 1 ] + pos [ -1.41 0 -0.22 ] + scale [ 1.4 1 1.4 ] + flags [ "db" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.701961 0.701961 1 ] + pos [ -1.54 0 -2.04 ] + scale [ 1.4 1 1.4 ] + flags [ "b" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + landmark_building "tb13:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Art's Smart Chart Mart" ] + pos [ -175 -320 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + sign [ + code [ "DD_sign2" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.701961 0.34902 1 ] + pos [ 0 0 0.22 ] + kern [ 0.049535 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.658824 0.976471 1 ] + pos [ 0 0 -1.24 ] + scale [ 1.7 1 1.7 ] + kern [ 0.15 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "1216" [ + vis [ "1214" "1215" "1216" "1217" "1218" "1230" "1231" "1232" "1219" "1213" ] + suit_edge [ 87 89 ] + suit_edge [ 89 90 ] + suit_edge [ 91 92 ] + suit_edge [ 92 88 ] + battle_cell [ 20 20 -154.812 -369.637 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -135 -390 3.8147e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ -175 -370 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 18 -9 0 ] + nhpr [ 75 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -175 -390 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 3 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.31 -8.65 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 18.48 -1.1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 2.27 3.16 19.52 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0 1 ] + pos [ 0 0 -0.96 ] + nhpr [ -0 0 -3 ] + scale [ 1.5 1 1.5 ] + kern [ 0.045848 ] + width [ 34.709 ] + height [ 34.709 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "?" ] + ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb27:20_DNARoot" [ + pos [ -160 -390 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 6.52 -1.07 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -130 -390 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -145 -390 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8 -3 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 5 -2 0 ] + nhpr [ -150 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3 -6 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -4 -8 0 ] + nhpr [ -135 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -8 -32 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.62 -31.63 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.32 1.75 19.58 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -171.468 -365.37 3.8147e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1217" [ + vis [ "1216" "1217" "1218" "1219" "1220" "1215" "1230" "1232" "1231" "1214" "1213" ] + suit_edge [ 90 93 ] + suit_edge [ 93 94 ] + suit_edge [ 95 96 ] + suit_edge [ 96 91 ] + suit_edge [ 93 97 ] + suit_edge [ 97 93 ] + suit_edge [ 96 97 ] + suit_edge [ 97 96 ] + battle_cell [ 20 20 -115.094 -370.018 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -135 -390 -8.01086e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ -135 -350 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 19.81 9.63 14.25 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -110 -350 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -90 -390 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -3 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8 -5 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5 -8 0 ] + nhpr [ -45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb27:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "This Oar That" ] + pos [ -104 -390 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 28 -8 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.34 -8.54 0 ] + nhpr [ -135 0 -0 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.64 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 0.12 ] + scale [ 1.5 1 1.5 ] + kern [ 0.064964 ] + wiggle [ 1.4968 ] + stumble [ 0.001089 ] + stomp [ 0.05 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.682353 0 0.341176 1 ] + pos [ -0.13 0 -0.07 ] + scale [ 2.1 1 1.9 ] + kern [ 0.1 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -108.52 -354.844 6.86646e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "1218" [ + vis [ "1216" "1217" "1218" "1219" "1220" "1224" "1221" "1222" "1233" "1234" "1232" "1231" "1223" "1230" ] + suit_edge [ 103 105 ] + suit_edge [ 105 106 ] + suit_edge [ 106 107 ] + suit_edge [ 108 109 ] + suit_edge [ 109 104 ] + suit_edge [ 106 110 ] + suit_edge [ 110 106 ] + suit_edge [ 109 110 ] + suit_edge [ 110 109 ] + battle_cell [ 20 20 -15.1054 -369.883 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -405 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.944882 0.715146 0.659565 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -23 -8 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -20 -8.00001 0 ] + nhpr [ -135 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -25 -3 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -20 -3 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 15.38 1.02 19.88 ] + nhpr [ -0 0 -0 ] + color [ 0.81 0.48 0.48 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -45 -8.00001 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -390 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -375 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb17:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Be More Pacific Ocean Notions" ] + pos [ 5 -350 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -3.54 ] + nhpr [ -0 0 3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.682353 0.341176 1 ] + pos [ -2.16 0 1.15 ] + scale [ 1.3 1 1.3 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 1 0.501961 1 ] + pos [ -1.97 0 -0.76 ] + scale [ 2.2 1 2.2 ] + kern [ 0.066774 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.682353 0.341176 1 ] + pos [ -1.97 0 -1.78 ] + kern [ 0.040764 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.21 -30.71 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 6 -40 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 20.51 2.67 24.46 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -425 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 5.00004 -440 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 3.72485 -4.16148 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -9.99996 -440 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -30 -440 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11.0441 3.19305 17.1293 ] + nhpr [ 45 -3.80323 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -45 -440 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 4 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 5.87053 -2.42462 0 ] + nhpr [ 45 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.65221 -4.23466 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -55 -440 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -55 -425 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11.2245 -2.19208 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 17.2792 1.75179 20.6156 ] + nhpr [ 45 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -55 -405 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 5.00001 -350 3.8147e-006 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + landmark_building "tb29:toon_landmark_hqDD_DNARoot" [ + code [ "toon_landmark_hqDD" ] + building_type [ "hq" ] + title [ "" ] + pos [ -25 -410 0 ] + nhpr [ -0 0 -0 ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -18.6762 -388.332 3.8147e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1219" [ + vis [ "1218" "1219" "1220" "1221" "1222" "1216" "1217" "1231" "1232" "1233" "1234" "1224" ] + suit_edge [ 111 112 ] + suit_edge [ 112 108 ] + suit_edge [ 107 113 ] + suit_edge [ 113 114 ] + suit_edge [ 112 115 ] + suit_edge [ 115 112 ] + suit_edge [ 113 115 ] + suit_edge [ 115 113 ] + suit_edge [ 175 108 ] + suit_edge [ 108 175 ] + suit_edge [ 175 107 ] + suit_edge [ 107 175 ] + suit_edge [ 176 107 ] + suit_edge [ 107 176 ] + suit_edge [ 176 108 ] + suit_edge [ 108 176 ] + battle_cell [ 20 20 -15.0314 -329.814 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 5 -350 -5.34058e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -320 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.529412 0.317647 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.69 5.46 19.1 ] + nhpr [ -0 0 -0 ] + color [ 0.81 0.48 0.48 1 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -35 -320 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.164706 0.439216 0.27451 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0 0.529412 0.317647 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.164706 0.439216 0.27451 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 5 -335 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 2 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0.41 -8.12 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 3 -0.999979 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -35 -350 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8.0549 -8.35184 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb18:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Run Aground Taxi Service" ] + pos [ -35 -335 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign1" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.38 ] + scale [ 2 1 1.6 ] + kern [ 0.023341 ] + wiggle [ 2.64966 ] + stumble [ 0.027054 ] + stomp [ 0.026706 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.74 ] + kern [ 0.0853 ] + wiggle [ 2.7617 ] + stumble [ 0.020205 ] + stomp [ 0.01 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.87 -8.26 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 1.71206 -328.602 -5.34058e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1220" [ + vis [ "1218" "1219" "1220" "1221" "1222" "1232" "1233" "1234" "1224" "1231" ] + suit_edge [ 117 118 ] + suit_edge [ 117 122 ] + suit_edge [ 122 117 ] + suit_edge [ 120 122 ] + suit_edge [ 122 120 ] + suit_edge [ 164 120 ] + suit_edge [ 120 111 ] + suit_edge [ 114 117 ] + suit_edge [ 174 117 ] + suit_edge [ 117 174 ] + suit_edge [ 174 120 ] + suit_edge [ 120 174 ] + battle_cell [ 20 20 -15.2351 -289.941 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -35 -270 2.28882e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random20_DNARoot" [ + pos [ 5 -270 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.69 -9.15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 4 -4 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -5 -270 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -35 -270 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.568627 0.698039 0.34902 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10 -3 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.63 -8.67 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.76 -31.71 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4 -39 0 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 5 -285 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.866667 0.686275 0.419608 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.866667 0.686275 0.419608 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 17.08 -8.18 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 25 -8 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb19:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Duck's Back Water Company" ] + pos [ -20 -270 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign2" ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "humanist" ] + color [ 0 0.666667 0.333333 1 ] + pos [ 0 0 -0.1 ] + scale [ 1.5 1 1.5 ] + kern [ 0.062846 ] + wiggle [ -3.62304 ] + stumble [ 0.043192 ] + stomp [ 0.103854 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.2 ] + kern [ 0.020087 ] + wiggle [ 4.34083 ] + stumble [ 0.018302 ] + stomp [ 0.032597 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "." ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb19:random_DNARoot" [ + pos [ 5 -305 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -5.06 1.1 17.99 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 11 -8 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp2" ] + cell_id [ 0 ] + pos [ 0.248627 -283.114 2.67029e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "1221" [ + vis [ "1220" "1221" "1222" "1223" "1224" "1219" "1218" "1234" "1233" ] + suit_edge [ 118 123 ] + suit_edge [ 123 128 ] + suit_edge [ 128 123 ] + suit_edge [ 125 128 ] + suit_edge [ 128 125 ] + suit_edge [ 129 130 ] + suit_edge [ 131 132 ] + suit_edge [ 132 127 ] + suit_edge [ 125 164 ] + suit_edge [ 127 165 ] + suit_edge [ 165 125 ] + suit_edge [ 123 166 ] + suit_edge [ 173 127 ] + suit_edge [ 127 173 ] + suit_edge [ 173 166 ] + suit_edge [ 166 173 ] + battle_cell [ 20 20 -64.8329 -290.068 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -35 -270 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -45 -310 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random20_DNARoot" [ + pos [ -45 -270 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.71 0.27 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8.8 -7.76 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -8.64 -9.11 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -35 -310 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -85 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.627451 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.84 -7.26 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.56 -5.95 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10.06 -9.04 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 8.61 -1.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_nets" ] + pos [ 2.49 -3.42 -0.31 ] + nhpr [ 60 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -85 -290 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.913386 0.540868 0.540868 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.529412 0.317647 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.33 2.61 19.18 ] + nhpr [ -0 0 -0 ] + color [ 0.81 0.48 0.48 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 0 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb20:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "The Reel Deal" ] + pos [ -50 -310 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.878431 0.427451 0.427451 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -3.39 ] + nhpr [ -0 0 -4 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -3.29 0 1 ] + flags [ "bd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -1.57 0 -0.29 ] + flags [ "b" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -0.29 0 -1.65 ] + flags [ "b" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 19.53 6.61 19.95 ] + nhpr [ -0 0 -0 ] + color [ 0.17 0.44 0.28 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -2.18 -7.32 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.98 -9.4 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -75 -310 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.629921 0.471823 0.237147 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.627451 0.376471 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.627451 0.470588 0.235294 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "1222" [ + vis [ "1218" "1219" "1220" "1221" "1222" "1223" "1224" "1233" "1234" ] + suit_edge [ 129 130 ] + suit_edge [ 131 132 ] + suit_edge [ 132 127 ] + suit_edge [ 132 159 ] + suit_edge [ 159 132 ] + suit_edge [ 129 159 ] + suit_edge [ 159 129 ] + suit_edge [ 166 129 ] + suit_edge [ 172 127 ] + suit_edge [ 127 172 ] + suit_edge [ 172 166 ] + suit_edge [ 166 172 ] + battle_cell [ 20 20 -64.8305 -249.813 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -45 -270 1.52588e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb28:random20_DNARoot" [ + pos [ -45 -255 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 13 -7 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5 -8 0 ] + nhpr [ -15 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ -85 -270 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92549 0.152941 0.152941 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 20 -8 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -45 -235 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.65 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.909804 0.537255 0.537255 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.65 0.33 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb21:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "All For Nautical" ] + pos [ -85 -250 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.8 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 0.682353 0 0.341176 1 ] + pos [ 0.31 0 0.67 ] + scale [ 0.9 1 0.9 ] + flags [ "b" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.0156863 0.733333 0.623529 1 ] + pos [ 0 0 -0.76 ] + scale [ 1.3 1 1.3 ] + flags [ "b" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp3" ] + cell_id [ 0 ] + pos [ -51.235 -242.162 2.28882e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1223" [ + vis [ "1219" "1220" "1221" "1222" "1223" "1224" "1225" "1218" "1233" "1234" "1235" ] + suit_edge [ 140 142 ] + suit_edge [ 145 146 ] + suit_edge [ 146 141 ] + suit_edge [ 146 147 ] + suit_edge [ 147 146 ] + suit_edge [ 142 167 ] + suit_edge [ 167 144 ] + suit_edge [ 167 147 ] + suit_edge [ 147 167 ] + battle_cell [ 20 20 -65.0662 -149.795 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -85 -130 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -45 -145 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.729412 0.627451 0.447059 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 15.0442 -8.07206 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3 1 19 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0 0 -0.17 ] + nhpr [ -0 0 -7 ] + scale [ 1.6 1 1.6 ] + kern [ 0.026575 ] + wiggle [ 3.59116 ] + stumble [ 0.048151 ] + stomp [ 0.028589 ] + width [ 125.992 ] + height [ 125.992 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "8" ] + ] + text [ + letters [ "8" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.882353 0 0.443137 1 ] + pos [ 0 0 -1.38 ] + nhpr [ -0 0 -8 ] + scale [ 0.7 1 0.7 ] + kern [ 0.014662 ] + wiggle [ 5.33272 ] + width [ 51.0152 ] + height [ 51.0152 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.882353 0 0.443137 1 ] + pos [ 0 0 -2.11 ] + nhpr [ -0 0 -6 ] + scale [ 0.7 1 0.7 ] + wiggle [ 6.01351 ] + width [ 33.4437 ] + height [ 33.4437 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -45 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.9 1.04 19.43 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.75 -3.55 0 ] + nhpr [ 105 0 -0 ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 3.33 -3.47 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.19 -8.16 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -60 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.415686 0.156863 0.156863 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 6.92 -1.11 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb23:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Squid's Seaweed" ] + pos [ -85 -130 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -2.31 ] + nhpr [ -0 0 2 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.792157 0 0.396078 1 ] + pos [ 0 0 0.21 ] + scale [ 1.7 1 1.4 ] + kern [ 0.125409 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.717647 0.717647 1 ] + pos [ 0 0 -0.66 ] + scale [ 1.2 1 0.9 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.717647 0.717647 1 ] + pos [ 0 0 -1.41 ] + scale [ 1.2 1 0.9 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8.49 -8.99 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 3.29 -8.73 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5.4 -34.47 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8 -31 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb23:20_DNARoot" [ + pos [ -45 -160 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 2.74 -1.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -48.0531 -147.323 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1224" [ + vis [ "1223" "1224" "1225" "1222" "1233" "1234" "1221" "1235" ] + suit_edge [ 144 148 ] + suit_edge [ 148 149 ] + suit_edge [ 150 151 ] + suit_edge [ 151 145 ] + suit_edge [ 151 152 ] + suit_edge [ 152 151 ] + suit_edge [ 148 152 ] + suit_edge [ 152 148 ] + suit_edge [ 170 148 ] + suit_edge [ 148 170 ] + suit_edge [ 170 151 ] + suit_edge [ 151 170 ] + battle_cell [ 20 20 -105.136 -149.822 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -85 -130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -105 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.301961 0.184314 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14 -3 0 ] + nhpr [ -15 0 -0 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -85 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.532747 0.317894 1 ] + count [ 0 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 2 -6 0 ] + nhpr [ -45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 21 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -120 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11 -8.99992 2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "DD_barrel" ] + pos [ -2 -4 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 0.02 18.22 9.99 ] + nhpr [ -0 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + ] + landmark_building "tb24:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "That's a Moray!" ] + pos [ -105 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign3" ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.560784 0.835294 1 ] + pos [ -1.42 0 -0.04 ] + nhpr [ -0 0 2 ] + scale [ 1.5 1 1.5 ] + kern [ 0.05 ] + wiggle [ 1.57364 ] + stumble [ 0.000639997 ] + stomp [ 0.078719 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -1.58 0 -1.25 ] + scale [ 1.1 1 1.2 ] + kern [ 0.053156 ] + wiggle [ 1.0271 ] + stomp [ 0.030544 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp1" ] + cell_id [ 0 ] + pos [ -121.468 -163.021 -3.8147e-006 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "1225" [ + vis [ "1225" "1235" "1234" "1222" "1223" "1224" "1233" ] + suit_edge [ 156 157 ] + suit_edge [ 157 168 ] + suit_edge [ 153 156 ] + battle_cell [ 20 20 -155.124 -150.181 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -145 -170 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ -145 -130 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ -150 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -5 -32 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 3.59 -31.1 0 ] + nhpr [ -180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 4 -35 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -160 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.384314 0.301961 0.184314 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.5 3.51 17.43 ] + nhpr [ -0 0 -0 ] + color [ 0.36 0.45 0.22 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -175 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.166003 0.440945 0.276671 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17258 0.637795 0.450208 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -185 -170 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0778138 0.472441 0.314961 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.74902 0.74902 0.74902 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.529412 0.317647 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.17 -2.15 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.41 -9.6 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 14.89 -7.33 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.69 2.51 19.97 ] + nhpr [ -0 0 -0 ] + color [ 0.45 0.31 0.17 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -185 -140 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0.64 -8.92 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ -145 -125 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ -185 -155 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + prop "linktunnel_dd_1000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -185 -125 0 ] + nhpr [ -0 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + pos [ 0 0 -2.42 ] + scale [ 1.6 1 1.6 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0 1 ] + pos [ 0 0 -1.02 ] + scale [ 1.5 1 1.5 ] + width [ 62.4688 ] + height [ 62.4688 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.92 ] + scale [ 0.8 1 0.8 ] + width [ 34.4021 ] + height [ 34.4021 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -154.598 -166.009 2.28882e-005 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -172.972 -129.785 -0.511329 ] + nhpr [ 28.7613 0 -0 ] + ] + ] + visgroup "1226" [ + vis [ "1226" "1201" "1202" "1203" "1227" "1204" ] + suit_edge [ 4 5 ] + suit_edge [ 6 7 ] + suit_edge [ 7 4 ] + suit_edge [ 4 163 ] + suit_edge [ 163 4 ] + suit_edge [ 192 5 ] + suit_edge [ 5 192 ] + suit_edge [ 192 6 ] + suit_edge [ 6 192 ] + battle_cell [ 20 20 -355.07 -429.771 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -375 -450 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -375 -410 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ -330 -450 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8 -9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ -360 -450 0 ] + nhpr [ 180 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.7 6.08 18.61 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 7 -8 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 14 -8 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 15.12 -1.04 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb1:20_DNARoot" [ + pos [ -365 -410 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ -345 -450 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb1:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Buoys and Gulls Nursery School" ] + pos [ -350 -410 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.592157 0.592157 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -3.45 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.0862745 0.709804 0.913725 1 ] + pos [ -3.04 0 1.14 ] + scale [ 1.5 1 1.5 ] + kern [ 0.037499 ] + wiggle [ 3.73593 ] + stumble [ 0.016477 ] + stomp [ 0.019831 ] + flags [ "cd" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DD_Portago" ] + pos [ -1.53 0 0.23 ] + wiggle [ 3.98581 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0.501961 0.752941 1 ] + pos [ 0.05 0 -0.94 ] + scale [ 1.5 1 1.5 ] + wiggle [ 0.7313 ] + stumble [ -0.008187 ] + stomp [ 0.040344 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + pos [ -1.94 0 -1.99 ] + kern [ 0.014406 ] + wiggle [ 2.54143 ] + stumble [ 0.016971 ] + stomp [ 0.003837 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 8.4 -8.79 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -350.353 -446.923 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1227" [ + vis [ "1227" "1203" "1202" "1226" "1204" "1205" "1206" ] + suit_edge [ 16 20 ] + suit_edge [ 21 17 ] + battle_cell [ 20 20 -395.048 -360.043 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -375 -370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -415 -370 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.86997 -8.71999 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 18.25 -4.42 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -375 -350 0 ] + nhpr [ -90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 19.25 -8.48 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp3" ] + cell_id [ 0 ] + pos [ -381.178 -357.986 3.8147e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1228" [ + vis [ "1228" "1210" "1209" "1208" "1206" "1205" "1204" "1211" "1212" "1229" "1213" ] + suit_edge [ 43 49 ] + suit_edge [ 50 160 ] + suit_edge [ 184 49 ] + suit_edge [ 49 184 ] + suit_edge [ 184 50 ] + suit_edge [ 50 184 ] + suit_edge [ 185 50 ] + suit_edge [ 50 185 ] + suit_edge [ 185 49 ] + suit_edge [ 49 185 ] + battle_cell [ 20 20 -254.935 -380.198 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -265 -400 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ -265 -360 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.417323 0.15711 0.15711 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.874016 0.654655 0.329041 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76378 0.572086 0.287541 1 ] + ] + ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ -245 -400 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + ] + visgroup "1229" [ + vis [ "1229" "1228" "1211" "1212" "1210" "1213" "1214" "1209" ] + suit_edge [ 63 59 ] + suit_edge [ 58 68 ] + suit_edge [ 182 63 ] + suit_edge [ 63 182 ] + suit_edge [ 182 68 ] + suit_edge [ 68 182 ] + suit_edge [ 183 59 ] + suit_edge [ 59 183 ] + suit_edge [ 183 58 ] + suit_edge [ 58 183 ] + battle_cell [ 20 20 -225.021 -299.962 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -245 -280 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -205 -295 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.87 0.65 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16 -8.43 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -205 -280 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -245 -325 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ -245 -295 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -0.38 -7.28 0 ] + nhpr [ -165 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 5.07 -1.09 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ -245 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.69 2.72 18.88 ] + nhpr [ -0 0 -0 ] + color [ 0.81 0.48 0.48 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -2.07 -8.2 0 ] + nhpr [ -45 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp2" ] + cell_id [ 0 ] + pos [ -209.984 -301.305 -1.52588e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "1230" [ + vis [ "1230" "1216" "1215" "1214" "1213" "1217" "1231" "1232" "1218" "1212" ] + suit_edge [ 82 87 ] + suit_edge [ 88 83 ] + suit_edge [ 179 88 ] + suit_edge [ 88 179 ] + suit_edge [ 179 87 ] + suit_edge [ 87 179 ] + battle_cell [ 20 20 -154.841 -329.859 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -175 -310 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb14:20_DNARoot" [ + pos [ -135 -320 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10.43 -8.37 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 4 -2 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ -175 -335 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 19 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -2 -9 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb14:20_DNARoot" [ + pos [ -135 -335 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ -175 -350 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.14 0.73 18.88 ] + nhpr [ -0 0 -0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5 -9 0 ] + nhpr [ -75 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + visgroup "1231" [ + vis [ "1231" "1230" "1217" "1216" "1218" "1232" "1219" "1220" ] + suit_edge [ 94 98 ] + suit_edge [ 98 99 ] + suit_edge [ 100 101 ] + suit_edge [ 101 95 ] + suit_edge [ 101 102 ] + suit_edge [ 102 101 ] + suit_edge [ 98 102 ] + suit_edge [ 102 98 ] + suit_edge [ 178 98 ] + suit_edge [ 98 178 ] + suit_edge [ 178 101 ] + suit_edge [ 101 178 ] + battle_cell [ 20 20 -74.9791 -370.153 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -95 -390 -8.01086e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ -70 -350 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 4 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.76 -8.48 0 ] + nhpr [ 45 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 10 -1.00003 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -75 -390 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -55 -390 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 5 -9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 16.9999 -3.00002 3.8147e-006 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ -95 -350 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 3.32 -8.38 0 ] + nhpr [ 45 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Mermaid Swimwear" ] + pos [ -85 -350 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.8 ] + nhpr [ -0 0 1 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0.19 0 0.56 ] + kern [ 0.068927 ] + wiggle [ 2.17189 ] + stumble [ 0.02 ] + stomp [ 0.03 ] + flags [ "cdb" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.63 ] + kern [ 0.06106 ] + wiggle [ 3.02082 ] + stumble [ 0.036533 ] + stomp [ 0.033325 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_firstMoveArmUp3" ] + cell_id [ 0 ] + pos [ -82.2333 -384.189 -8.01086e-005 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "1232" [ + vis [ "1232" "1218" "1219" "1220" "1217" "1231" "1216" "1230" ] + suit_edge [ 99 103 ] + suit_edge [ 104 100 ] + suit_edge [ 177 100 ] + suit_edge [ 100 177 ] + suit_edge [ 177 99 ] + suit_edge [ 99 177 ] + battle_cell [ 20 20 -45.0107 -369.955 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -55 -390 3.05176e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb16:20_DNARoot" [ + pos [ -55 -350 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 1.73 -8.02 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -53.1211 -385.402 3.05176e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "1233" [ + vis [ "1233" "1234" "1224" "1223" "1222" "1221" "1220" "1219" "1218" "1235" ] + suit_edge [ 134 135 ] + suit_edge [ 136 137 ] + suit_edge [ 134 139 ] + suit_edge [ 139 134 ] + suit_edge [ 137 139 ] + suit_edge [ 139 137 ] + suit_edge [ 137 131 ] + suit_edge [ 130 134 ] + battle_cell [ 20 20 -65.0211 -209.808 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -45 -230 1.52588e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ -85 -230 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.82 -6.06 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10 -4 0 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ -85 -215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 3 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.85 4.24 18.81 ] + nhpr [ -0 0 -0 ] + color [ 0.57 0.7 0.35 1 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ -85 -200 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 6 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -45 -205 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + ] + landmark_building "tb28:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Good Luck Horseshoe Crabs" ] + pos [ -45 -208 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 19.58 -8.36 0 ] + nhpr [ 90 0 -0 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.58 ] + nhpr [ -0 0 -4 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.66 ] + scale [ 1.2 1 1.2 ] + wiggle [ 3.61522 ] + stumble [ 0.02 ] + stomp [ 0.033659 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0.6 0.85 ] + scale [ 1 1 1.3 ] + kern [ 0.065527 ] + wiggle [ 2.72228 ] + stomp [ 0.03221 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -45 -190 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 5.92 -9.13 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ -81.3821 -214.935 1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1234" [ + vis [ "1234" "1235" "1223" "1224" "1225" "1222" "1233" "1221" "1220" "1219" "1218" ] + suit_edge [ 135 140 ] + suit_edge [ 141 136 ] + suit_edge [ 171 135 ] + suit_edge [ 135 171 ] + suit_edge [ 171 136 ] + suit_edge [ 136 171 ] + battle_cell [ 20 20 -65.1622 -179.809 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -45 -190 -1.14441e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ -85 -190 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -45 -170 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 3 -9 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -45 -180 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ -49.4738 -179.039 -1.14441e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1235" [ + vis [ "1235" "1224" "1223" "1234" "1233" "1225" ] + suit_edge [ 149 153 ] + suit_edge [ 168 150 ] + suit_edge [ 169 150 ] + suit_edge [ 150 169 ] + suit_edge [ 169 149 ] + suit_edge [ 149 169 ] + battle_cell [ 20 20 -135.137 -149.891 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -125 -130 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ -145 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ -135 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8 -6.34 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2 -9 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ -120 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ -135 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -0.12 12.14 10.12 ] + nhpr [ -0 0 -0 ] + scale [ 2.1 2.1 2.1 ] + ] + ] + ] + visgroup "1236" [ + vis [ "1236" "1204" "1205" "1203" "1202" "1227" "1226" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -413 -252 0 ] + nhpr [ -35 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -395.292 -208.13 0.451049 ] + nhpr [ 180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -412.419 -229.356 0.465377 ] + nhpr [ -90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -378.014 -228.749 0.447249 ] + nhpr [ 90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -394.913 -243.085 0.462966 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_right_DNARoot" [ + code [ "streetlight_DD_right" ] + pos [ -385.57 -258.815 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_right_DNARoot" [ + code [ "streetlight_DD_right" ] + pos [ -384.534 -212.443 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -406.78 -213.056 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -404.46 -258.72 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ -375.812 -251.58 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -419.04 -210.625 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.56538 1.56538 1.56538 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -417.927 -207.484 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -370.968 -248.345 -0.000473022 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -367.58 -245.974 0 ] + nhpr [ -105 0 -0 ] + scale [ 1.68381 1.68381 1.68381 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -371.6 -214.966 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.87467 1.87467 1.87467 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -370.855 -217.255 0 ] + nhpr [ -60 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -381.37 -255.018 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.56836 1.56836 1.56836 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -368.969 -249.342 0 ] + nhpr [ 120 0 -0 ] + scale [ 1.13546 1.13546 1.13546 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -369.626 -216.406 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -421.137 -212.901 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.756448 0.756448 0.756448 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -418.256 -245.856 0 ] + nhpr [ -165 0 -0 ] + ] + ] + group "props" [ + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -423.535 -215.54 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.28343 1.28343 1.28343 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -388.816 -197.126 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -419.574 -191.048 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.52817 1.52817 1.52817 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -390.756 -195.749 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.525399 0.525399 0.525399 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -386.816 -197.245 0 ] + nhpr [ -105 0 -0 ] + scale [ 0.775954 0.775954 0.775954 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -343.42 -223.752 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.4841 1.4841 1.4841 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -450.032 -251.759 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.65801 1.65801 1.65801 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -364.172 -185 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -423.009 -175.536 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.50767 1.50767 1.50767 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -368.973 -253.549 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.60915 1.60915 1.60915 ] + ] + ] + street "street_DD_pond_DNARoot" [ + code [ "street_DD_pond" ] + pos [ -395 -225 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dock_1300.dna b/ttmodels/src/dna/donalds_dock_1300.dna new file mode 100644 index 00000000..29e30cf3 --- /dev/null +++ b/ttmodels/src/dna/donalds_dock_1300.dna @@ -0,0 +1,11053 @@ +store_suit_point [ 8, STREET_POINT, 100 15 -0.5 ] +store_suit_point [ 9, STREET_POINT, 100 25 -0.5 ] +store_suit_point [ 10, STREET_POINT, 115 15 -0.5 ] +store_suit_point [ 11, STREET_POINT, 115 0 -0.5 ] +store_suit_point [ 12, STREET_POINT, 125 0 -0.5 ] +store_suit_point [ 13, STREET_POINT, 125 25 -0.5 ] +store_suit_point [ 14, FRONT_DOOR_POINT, 126 46 0, 31 ] +store_suit_point [ 16, STREET_POINT, 100 -25 -0.5 ] +store_suit_point [ 17, STREET_POINT, 100 -80 -0.5 ] +store_suit_point [ 18, STREET_POINT, 110 -80 -0.5 ] +store_suit_point [ 19, STREET_POINT, 110 -35 -0.5 ] +store_suit_point [ 21, FRONT_DOOR_POINT, 89 -27 0, 32 ] +store_suit_point [ 22, STREET_POINT, 100 -95 -0.5 ] +store_suit_point [ 23, STREET_POINT, 115 -95 -0.5 ] +store_suit_point [ 24, STREET_POINT, 115 -120 -0.5 ] +store_suit_point [ 25, STREET_POINT, 125 -120 -0.5 ] +store_suit_point [ 26, STREET_POINT, 125 -85 -0.5 ] +store_suit_point [ 27, STREET_POINT, 110 -85 -0.5 ] +store_suit_point [ 28, FRONT_DOOR_POINT, 94 -99 0, 4 ] +store_suit_point [ 29, FRONT_DOOR_POINT, 151 -106 0, 5 ] +store_suit_point [ 30, STREET_POINT, 115 -145 -0.5 ] +store_suit_point [ 31, STREET_POINT, 140 -145 -0.5 ] +store_suit_point [ 32, STREET_POINT, 140 -135 -0.5 ] +store_suit_point [ 33, STREET_POINT, 125 -135 -0.5 ] +store_suit_point [ 34, FRONT_DOOR_POINT, 104 -166 0, 6 ] +store_suit_point [ 36, STREET_POINT, 170 -145 -0.5 ] +store_suit_point [ 37, STREET_POINT, 190 -145 -0.5 ] +store_suit_point [ 38, STREET_POINT, 190 -135 -0.5 ] +store_suit_point [ 39, STREET_POINT, 170 -135 -0.5 ] +store_suit_point [ 40, FRONT_DOOR_POINT, 160 -166 0, 7 ] +store_suit_point [ 41, STREET_POINT, 240 -145 -0.5 ] +store_suit_point [ 42, STREET_POINT, 240 -135 -0.5 ] +store_suit_point [ 43, STREET_POINT, 265 -145 -0.5 ] +store_suit_point [ 44, STREET_POINT, 265 -120 -0.5 ] +store_suit_point [ 45, STREET_POINT, 255 -120 -0.5 ] +store_suit_point [ 46, STREET_POINT, 255 -135 -0.5 ] +store_suit_point [ 47, FRONT_DOOR_POINT, 254 -166 0, 8 ] +store_suit_point [ 48, FRONT_DOOR_POINT, 281 -145 0, 9 ] +store_suit_point [ 49, STREET_POINT, 265 -82 -0.5 ] +store_suit_point [ 50, STREET_POINT, 265 -70 -0.5 ] +store_suit_point [ 51, STREET_POINT, 255 -70 -0.5 ] +store_suit_point [ 52, STREET_POINT, 255 -82 -0.5 ] +store_suit_point [ 53, FRONT_DOOR_POINT, 244 -82 0, 10 ] +store_suit_point [ 54, STREET_POINT, 265 -43 -0.5 ] +store_suit_point [ 55, STREET_POINT, 265 -20 -0.5 ] +store_suit_point [ 56, STREET_POINT, 255 -20 -0.5 ] +store_suit_point [ 57, STREET_POINT, 255 -43 -0.5 ] +store_suit_point [ 58, FRONT_DOOR_POINT, 281 -43 0, 11 ] +store_suit_point [ 59, STREET_POINT, 265 -5 -0.5 ] +store_suit_point [ 60, STREET_POINT, 280 -5 -0.5 ] +store_suit_point [ 61, STREET_POINT, 280 5 -0.5 ] +store_suit_point [ 62, STREET_POINT, 255 5 -0.5 ] +store_suit_point [ 63, FRONT_DOOR_POINT, 239 0 0, 13 ] +store_suit_point [ 64, FRONT_DOOR_POINT, 255 26 0, 14 ] +store_suit_point [ 65, STREET_POINT, 305 -5 -0.5 ] +store_suit_point [ 66, STREET_POINT, 330 -5 -0.5 ] +store_suit_point [ 67, STREET_POINT, 330 5 -0.5 ] +store_suit_point [ 68, STREET_POINT, 305 5 -0.5 ] +store_suit_point [ 69, FRONT_DOOR_POINT, 305 26 0, 15 ] +store_suit_point [ 70, STREET_POINT, 350 -5 -0.5 ] +store_suit_point [ 71, STREET_POINT, 350 5 -0.5 ] +store_suit_point [ 72, STREET_POINT, 400 -5 -0.5 ] +store_suit_point [ 73, STREET_POINT, 400 5 -0.5 ] +store_suit_point [ 74, STREET_POINT, 415 -5 -0.5 ] +store_suit_point [ 75, STREET_POINT, 415 -20 -0.5 ] +store_suit_point [ 76, STREET_POINT, 425 -20 -0.5 ] +store_suit_point [ 77, STREET_POINT, 425 5 -0.5 ] +store_suit_point [ 78, FRONT_DOOR_POINT, 423 26 0, 33 ] +store_suit_point [ 79, STREET_POINT, 415 -49 -0.5 ] +store_suit_point [ 80, STREET_POINT, 415 -70 -0.5 ] +store_suit_point [ 81, STREET_POINT, 425 -70 -0.5 ] +store_suit_point [ 82, STREET_POINT, 425 -49 -0.5 ] +store_suit_point [ 83, FRONT_DOOR_POINT, 404 -49 0, 18 ] +store_suit_point [ 84, FRONT_DOOR_POINT, 441 -49 0, 19 ] +store_suit_point [ 85, STREET_POINT, 415 -120 -0.5 ] +store_suit_point [ 86, STREET_POINT, 425 -120 -0.5 ] +store_suit_point [ 87, STREET_POINT, 415 -145 -0.5 ] +store_suit_point [ 88, STREET_POINT, 440 -145 -0.5 ] +store_suit_point [ 89, STREET_POINT, 440 -135 -0.5 ] +store_suit_point [ 90, STREET_POINT, 425 -135 -0.5 ] +store_suit_point [ 91, FRONT_DOOR_POINT, 394 -140 0, 20 ] +store_suit_point [ 92, STREET_POINT, 452 -145 -0.5 ] +store_suit_point [ 93, STREET_POINT, 478 -145 -0.5 ] +store_suit_point [ 94, STREET_POINT, 490 -145 -0.5 ] +store_suit_point [ 95, STREET_POINT, 490 -135 -0.5 ] +store_suit_point [ 96, STREET_POINT, 478 -135 -0.5 ] +store_suit_point [ 97, STREET_POINT, 452 -135 -0.5 ] +store_suit_point [ 98, FRONT_DOOR_POINT, 452 -166 0, 21 ] +store_suit_point [ 99, FRONT_DOOR_POINT, 478 -124 0, 23 ] +store_suit_point [ 100, STREET_POINT, 504 -145 -0.5 ] +store_suit_point [ 101, STREET_POINT, 540 -145 -0.5 ] +store_suit_point [ 102, STREET_POINT, 540 -135 -0.5 ] +store_suit_point [ 103, STREET_POINT, 504 -135 -0.5 ] +store_suit_point [ 104, FRONT_DOOR_POINT, 504 -165 0, 24 ] +store_suit_point [ 105, STREET_POINT, 565 -145 -0.5 ] +store_suit_point [ 106, STREET_POINT, 565 -120 -0.5 ] +store_suit_point [ 107, STREET_POINT, 555 -120 -0.5 ] +store_suit_point [ 108, STREET_POINT, 555 -135 -0.5 ] +store_suit_point [ 109, FRONT_DOOR_POINT, 586 -156 0, 25 ] +store_suit_point [ 110, STREET_POINT, 565 -102 -0.5 ] +store_suit_point [ 111, STREET_POINT, 565 -70 -0.5 ] +store_suit_point [ 112, STREET_POINT, 555 -70 -0.5 ] +store_suit_point [ 113, STREET_POINT, 555 -102 -0.5 ] +store_suit_point [ 114, FRONT_DOOR_POINT, 576 -102 0, 26 ] +store_suit_point [ 115, STREET_POINT, 565 -55 -0.5 ] +store_suit_point [ 116, STREET_POINT, 580 -55 -0.5 ] +store_suit_point [ 117, STREET_POINT, 555 -45 -0.5 ] +store_suit_point [ 118, STREET_POINT, 580 -45 -0.5 ] +store_suit_point [ 119, FRONT_DOOR_POINT, 534 -47 0, 34 ] +store_suit_point [ 120, FRONT_DOOR_POINT, 557 -8.99995 0, 28 ] +store_suit_point [ 123, STREET_POINT, 90 25 -0.5 ] +store_suit_point [ 124, STREET_POINT, 53 25 -0.5 ] +store_suit_point [ 125, STREET_POINT, 53 15 -0.5 ] +store_suit_point [ 126, STREET_POINT, 90 15 -0.5 ] +store_suit_point [ 127, FRONT_DOOR_POINT, 53 4.00001 0, 30 ] +store_suit_point [ 128, FRONT_DOOR_POINT, 90 46 0, 29 ] +store_suit_point [ 129, STREET_POINT, 115 -25 -0.5 ] +store_suit_point [ 130, STREET_POINT, 125 -35 -0.5 ] +store_suit_point [ 131, STREET_POINT, 125 -12 -0.5 ] +store_suit_point [ 132, STREET_POINT, 115 -12 -0.5 ] +store_suit_point [ 133, FRONT_DOOR_POINT, 151 -12 0, 2 ] +store_suit_point [ 134, SIDE_DOOR_POINT, 80 0 0, 30 ] +store_suit_point [ 135, SIDE_DOOR_POINT, 57 50 0, 29 ] +store_suit_point [ 136, SIDE_DOOR_POINT, 108 50 0, 31 ] +store_suit_point [ 138, SIDE_DOOR_POINT, 155 22 0, 2 ] +store_suit_point [ 139, SIDE_DOOR_POINT, 85 -63 0, 32 ] +store_suit_point [ 140, SIDE_DOOR_POINT, 155 -88 0, 5 ] +store_suit_point [ 141, SIDE_DOOR_POINT, 85 -128 0, 4 ] +store_suit_point [ 142, SIDE_DOOR_POINT, 123 -170 0, 6 ] +store_suit_point [ 143, SIDE_DOOR_POINT, 175 -170 0, 7 ] +store_suit_point [ 144, SIDE_DOOR_POINT, 270 -170 0, 8 ] +store_suit_point [ 145, SIDE_DOOR_POINT, 285 -113 0, 9 ] +store_suit_point [ 146, SIDE_DOOR_POINT, 240 -113 0, 10 ] +store_suit_point [ 147, SIDE_DOOR_POINT, 285 -62 0, 11 ] +store_suit_point [ 148, SIDE_DOOR_POINT, 286 -62 0 ] +store_suit_point [ 149, SIDE_DOOR_POINT, 240 -28 0, 13 ] +store_suit_point [ 150, SIDE_DOOR_POINT, 270.001 30.0002 0, 14 ] +store_suit_point [ 151, SIDE_DOOR_POINT, 320.001 30.0002 0, 15 ] +store_suit_point [ 152, SIDE_DOOR_POINT, 398.001 30.0002 0, 33 ] +store_suit_point [ 153, SIDE_DOOR_POINT, 445.001 -29.9998 0, 19 ] +store_suit_point [ 154, SIDE_DOOR_POINT, 400.001 -27.9998 0, 18 ] +store_suit_point [ 155, SIDE_DOOR_POINT, 400.001 -111 0, 20 ] +store_suit_point [ 156, SIDE_DOOR_POINT, 430.001 -170 0, 21 ] +store_suit_point [ 157, SIDE_DOOR_POINT, 455.001 -120 0, 23 ] +store_suit_point [ 158, SIDE_DOOR_POINT, 547.001 -170 0, 24 ] +store_suit_point [ 159, SIDE_DOOR_POINT, 589.736 -138.07 0, 25 ] +store_suit_point [ 160, SIDE_DOOR_POINT, 579.736 -112.07 0, 26 ] +store_suit_point [ 161, SIDE_DOOR_POINT, 529.736 -68.0701 0, 34 ] +store_suit_point [ 162, SIDE_DOOR_POINT, 587.736 -5.07017 0, 28 ] +group "donaldsDock" [ + visgroup "1301" [ + vis [ "1301" "1302" "1303" "1304" ] + battle_cell [ 20 20 25 20 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 0 0 -3.8147e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 20 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 20 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 40 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 60 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 30 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ 50 0 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 20.45 -8.55 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 0 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 0 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 15 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8.48 -17.35 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 14.67 -18.58 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 35 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.92 -12.18 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 10 -10 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ 15 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6 -6 0 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 50 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -4 -19 0 ] + nhpr [ -90 0 -0 ] + ] + ] + prop "linktunnel_dd_1000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 0 0 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0 1 ] + pos [ 0 0 -1.28 ] + scale [ 1.5 1 1.5 ] + width [ 63.3553 ] + height [ 63.3553 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 3 1 3 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 41.2643 ] + height [ 41.2643 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 5.06166 27.9831 -0.500006 ] + nhpr [ 75 0 -0 ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 16.7109 5.26512 -3.8147e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1302" [ + vis [ "1302" "1301" "1303" "1304" "1305" "1306" "1307" "1309" ] + suit_edge [ 9 123 ] + suit_edge [ 123 124 ] + suit_edge [ 125 126 ] + suit_edge [ 126 8 ] + suit_edge [ 124 125 ] + suit_edge [ 125 127 ] + suit_edge [ 127 125 ] + suit_edge [ 123 128 ] + suit_edge [ 128 123 ] + suit_edge [ 126 128 ] + suit_edge [ 128 126 ] + suit_edge [ 134 126 ] + suit_edge [ 126 134 ] + suit_edge [ 134 123 ] + suit_edge [ 123 134 ] + suit_edge [ 135 124 ] + suit_edge [ 124 135 ] + suit_edge [ 136 8 ] + suit_edge [ 8 136 ] + battle_cell [ 20 20 75 20 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 50 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 80 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 80 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 100 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 65 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8 4 19 ] + nhpr [ -15 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 5.49 -18.23 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb30:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Lost and Flounder" ] + pos [ 65 0 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.180392 0.352941 0.352941 1 ] + pos [ 0.36 0 0.09 ] + scale [ 1.5 1 1.5 ] + kern [ 0.044876 ] + wiggle [ 2.63905 ] + stumble [ 0.01 ] + stomp [ 0.02 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.282353 0.141176 1 ] + pos [ -1.04 0 0 ] + kern [ 0.040371 ] + wiggle [ 3.89357 ] + stumble [ 0.037274 ] + stomp [ -0.090041 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ 85 0 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -10.02 -4.02 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 75 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.5 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.13 -7.97 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb29:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Seagull Statue Store" ] + pos [ 80 50 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign2" ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.65098 0.933333 0.568627 1 ] + pos [ 0 0 -0.58 ] + scale [ 1.1 1 1.6 ] + kern [ 0.045171 ] + wiggle [ 3.80429 ] + stumble [ 0.118738 ] + width [ 100 ] + height [ 100 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 65.4272 5.75721 7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1303" [ + vis [ "1303" "1301" "1302" "1304" "1305" "1306" "1307" "1309" ] + suit_edge [ 8 10 ] + suit_edge [ 10 11 ] + suit_edge [ 12 13 ] + suit_edge [ 13 9 ] + suit_edge [ 10 14 ] + suit_edge [ 14 10 ] + suit_edge [ 13 14 ] + suit_edge [ 14 13 ] + suit_edge [ 138 13 ] + suit_edge [ 13 138 ] + suit_edge [ 138 10 ] + suit_edge [ 10 138 ] + suit_edge [ 136 9 ] + suit_edge [ 9 136 ] + battle_cell [ 20 20 120 20 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 100 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 100 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 120 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 637.62 -36.99 0 ] + nhpr [ -0 0 -0 ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ 130 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 13 -11 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 15 -16 0 ] + nhpr [ -105 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 20.48 -3.26 -0.13 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -1 9 17 ] + nhpr [ -15 0 -0 ] + scale [ 2.5 2.5 2.5 ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ 140 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ 155 50 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 23.7 0.67 19.62 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 1.32 ] + nhpr [ -0 0 -8 ] + kern [ 0.04382 ] + wiggle [ 4.51428 ] + stumble [ 0.062176 ] + stomp [ 0.022356 ] + width [ 21.5248 ] + height [ 21.5248 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.13 ] + nhpr [ -0 0 -6 ] + scale [ 0.9 1 0.9 ] + kern [ 0.01 ] + wiggle [ 3.37632 ] + stomp [ 0.036632 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.81 ] + nhpr [ -0 0 -5 ] + kern [ 0.025683 ] + wiggle [ 4.62265 ] + stomp [ 0.037786 ] + width [ 25.7274 ] + height [ 25.7274 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.74 ] + nhpr [ -0 0 -6 ] + stomp [ 0.05578 ] + width [ 23.8039 ] + height [ 23.8039 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 155 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ 100 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 155 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.31 -23.8 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.69 -46.77 0 ] + nhpr [ 180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 7.96 -47.92 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.28 -2.83 0 ] + nhpr [ -105 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 180 -5 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10.43 -6.25 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.95 -4.97 0 ] + nhpr [ -105 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + landmark_building "tb31:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Kelp Around the House" ] + pos [ 115 50 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.09 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.356863 0.180392 1 ] + pos [ 0.37 0 0.2 ] + nhpr [ -0 0 2 ] + scale [ 1.6 1 1.7 ] + kern [ 0.08 ] + wiggle [ 3.48167 ] + stumble [ 0.032656 ] + stomp [ 0.03 ] + flags [ "d" ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.415686 1 ] + pos [ -0.03 0 1.03 ] + scale [ 1 1 0.7 ] + kern [ 0.083962 ] + wiggle [ 2.29895 ] + stomp [ 0.026823 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.415686 1 ] + pos [ 0 0 0.34 ] + scale [ 1 1 0.7 ] + kern [ 0.082033 ] + wiggle [ 2.1181 ] + stomp [ 0.024726 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.8 ] + scale [ 1.5 1 0.9 ] + kern [ 0.100887 ] + wiggle [ 4.46191 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + visgroup "1304" [ + vis [ "1304" "1303" "1302" "1301" "1305" "1306" "1307" "1309" ] + suit_edge [ 16 17 ] + suit_edge [ 18 19 ] + suit_edge [ 21 16 ] + suit_edge [ 16 21 ] + suit_edge [ 19 21 ] + suit_edge [ 21 19 ] + suit_edge [ 129 16 ] + suit_edge [ 19 130 ] + suit_edge [ 130 131 ] + suit_edge [ 131 12 ] + suit_edge [ 11 132 ] + suit_edge [ 132 129 ] + suit_edge [ 131 133 ] + suit_edge [ 133 131 ] + suit_edge [ 132 133 ] + suit_edge [ 133 132 ] + suit_edge [ 139 17 ] + suit_edge [ 17 139 ] + suit_edge [ 139 18 ] + suit_edge [ 18 139 ] + battle_cell [ 20 20 110.672 -29.8629 -0.5 ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ 85 0 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_divided_40x70_DNARoot" [ + code [ "street_divided_40x70" ] + pos [ 85 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 155 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 155 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 0.97 -6.99 0 ] + nhpr [ -120 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10.99 -8.21 0 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 155 -55 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.34 -3.17 0 ] + nhpr [ 75 0 -0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.87 0.61 0.61 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.49 -2.98 0 ] + nhpr [ 120 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 155 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb32:20_DNARoot" [ + pos [ 85 -15 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb32:20_DNARoot" [ + pos [ 85 -55 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 3.52 -6.96 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 6.9 -8.42 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb32:20_DNARoot" [ + pos [ 85 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.11 2.72 18 ] + nhpr [ 15 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 9.43 -8.35 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -2.57 -34.8 0 ] + nhpr [ 105 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10.77 -35.27 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 23.13 -35.48 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb2:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "Nautical But Nice" ] + pos [ 155 0 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 1.55 0 -4.4 ] + nhpr [ -0 0 -1 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -2.08 0 0.37 ] + scale [ 2 1 2 ] + kern [ 0.023373 ] + wiggle [ 1.04573 ] + stomp [ 0.040121 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0.501961 0.752941 1 ] + pos [ -2.12 0 -2.35 ] + scale [ 2 1 2 ] + kern [ 0.055524 ] + wiggle [ 2.41999 ] + stomp [ 0.02 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + pos [ -2.18 0 -0.68 ] + kern [ 0.113613 ] + wiggle [ 4.02891 ] + stumble [ 0.017607 ] + stomp [ -0.052527 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.38 -23.58 0 ] + nhpr [ -120 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 15.93 -23.81 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb32:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Melville's Massive Mizzenmast Mart" ] + pos [ 85 -40 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 21.2 -23.19 0 ] + nhpr [ 75 0 -0 ] + ] + sign [ + code [ "DD_sign2" ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.823529 0.823529 1 ] + scale [ 1.2 1 1.2 ] + kern [ 0.05 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.823529 0.823529 1 ] + pos [ 0 0 -1.24 ] + scale [ 1.2 1 1.2 ] + kern [ 0.05 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 102.316 -15.3605 3.05176e-005 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "1305" [ + vis [ "1305" "1304" "1303" "1302" "1301" "1306" "1307" "1309" "1310" ] + suit_edge [ 17 22 ] + suit_edge [ 22 23 ] + suit_edge [ 23 24 ] + suit_edge [ 25 26 ] + suit_edge [ 26 27 ] + suit_edge [ 27 18 ] + suit_edge [ 22 28 ] + suit_edge [ 28 22 ] + suit_edge [ 26 28 ] + suit_edge [ 28 26 ] + suit_edge [ 26 29 ] + suit_edge [ 29 26 ] + suit_edge [ 23 29 ] + suit_edge [ 29 23 ] + suit_edge [ 140 26 ] + suit_edge [ 26 140 ] + suit_edge [ 140 22 ] + suit_edge [ 22 140 ] + battle_cell [ 20 20 120.084 -92.8417 -0.5 ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ 155 -120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 155 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 85 -90.5 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 85 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 155 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + landmark_building "tb4:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Mussel Beach Gymnasium" ] + pos [ 85 -110 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.52 -18.96 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -0.12 -17.18 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 0.37 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 1 0 1 ] + pos [ -1.79 0 0.91 ] + scale [ 1.5 1 1.5 ] + kern [ 0.078761 ] + width [ 12.3201 ] + height [ 12.3201 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 1 1 ] + pos [ -1.83 0 -1.08 ] + kern [ 0.088169 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + landmark_building "tb5:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Tackle Box Lunches" ] + pos [ 155 -95 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.211765 0.423529 1 ] + pos [ 0.18 0 0.1 ] + scale [ 1.3 1 1.4 ] + kern [ 0.043324 ] + wiggle [ 1 ] + stumble [ 0.02 ] + stomp [ 0.02 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 20.17 -20.99 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 10.32 -23.68 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.35 -22.95 0 ] + nhpr [ -120 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 91.393 -82.6269 3.05176e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + visgroup "1306" [ + vis [ "1306" "1305" "1304" "1303" "1302" "1307" "1308" "1309" "1310" "1311" "1301" ] + suit_edge [ 24 30 ] + suit_edge [ 30 31 ] + suit_edge [ 32 33 ] + suit_edge [ 33 25 ] + suit_edge [ 30 34 ] + suit_edge [ 34 30 ] + suit_edge [ 33 34 ] + suit_edge [ 34 33 ] + suit_edge [ 141 24 ] + suit_edge [ 24 141 ] + suit_edge [ 141 25 ] + suit_edge [ 25 141 ] + suit_edge [ 142 30 ] + suit_edge [ 30 142 ] + suit_edge [ 142 33 ] + suit_edge [ 33 142 ] + battle_cell [ 20 20 120 -140 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 140 -160 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 100 -120 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 100 -140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 100 -160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 120 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140 -160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 85 -150 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.76 0.96 19.37 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb6:20_DNARoot" [ + pos [ 85 -170 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.49 -24.05 0 ] + nhpr [ 60 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 18.76 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 85 -135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 5.81 -23.27 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb6:20_DNARoot" [ + pos [ 130 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.52 -17.93 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_crate" ] + pos [ 16 -7 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 2.24 1.03 19.32 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0 0 0.06 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 1.25 ] + nhpr [ -0 0 -6 ] + kern [ 0.05 ] + wiggle [ 3 ] + stumble [ 0.02 ] + stomp [ 0.02 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.03 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 1 ] + kern [ 0.002178 ] + wiggle [ 0.78989 ] + stomp [ 0.044956 ] + width [ 22.8645 ] + height [ 22.8645 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.12 ] + kern [ 0.042332 ] + wiggle [ 3.83053 ] + stomp [ 0.036413 ] + width [ 21.9587 ] + height [ 21.9587 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -2.14 ] + width [ 21.4782 ] + height [ 21.4782 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Cap Size Hat Store" ] + pos [ 115 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.22 ] + scale [ 1.7 1 1.7 ] + kern [ 0.120482 ] + wiggle [ 2.09206 ] + stumble [ 0.027664 ] + stomp [ 0.046655 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.78 ] + kern [ 0.109159 ] + wiggle [ 1.58943 ] + stumble [ 0.020048 ] + stomp [ 0.043034 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb6:20_DNARoot" [ + pos [ 100 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 9.01 -1.22 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 140 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5.95 -14.47 0 ] + nhpr [ -180 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 107.021 -137.964 -7.62939e-006 ] + nhpr [ 105 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle0" ] + pos [ 99.5724 -157.417 0 ] + nhpr [ 135 0 0 ] + ] + ] + visgroup "1307" [ + vis [ "1307" "1306" "1305" "1304" "1303" "1302" "1309" "1310" "1311" "1308" "1301" ] + suit_edge [ 31 36 ] + suit_edge [ 36 37 ] + suit_edge [ 38 39 ] + suit_edge [ 39 32 ] + suit_edge [ 36 40 ] + suit_edge [ 40 36 ] + suit_edge [ 39 40 ] + suit_edge [ 40 39 ] + battle_cell [ 20 20 160 -140 -0.5 ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 170 -140 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 140 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 170 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 190 -140 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 180 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 160 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 155 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -9.85 -5.27 0 ] + nhpr [ 150 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.29 -5.78 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15.41 -8.47 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.13 -3.25 0 ] + nhpr [ 165 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.31 -6.4 0 ] + nhpr [ -60 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + landmark_building "tb7:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Keel Deals" ] + pos [ 170 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -1.71548 -17.8579 0 ] + nhpr [ -90 0 -0 ] + ] + sign [ + code [ "DD_sign3" ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0 1 ] + pos [ -1.82 0 0.4 ] + scale [ 2.5 1 2.5 ] + kern [ 0.066934 ] + wiggle [ 0.96892 ] + stumble [ 0.030006 ] + stomp [ -0.072048 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0 1 ] + pos [ -1.9 0 -1.8 ] + scale [ 2.5 1 2.5 ] + kern [ 0.102278 ] + wiggle [ 2.71481 ] + stumble [ 0.040594 ] + stomp [ -0.055629 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 150 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.26 -17.9 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 10 -5 0 ] + nhpr [ -15 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 160.429 -153.329 0 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "1308" [ + vis [ "1308" "1307" "1306" "1309" "1310" "1305" "1311" ] + battle_cell [ 20 20 200 -95 -0.5 ] + flat_building "tb5:20_DNARoot" [ + pos [ 175 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 175 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 175 -90 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.63 3.52 17 ] + nhpr [ 15 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 190 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 200 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 3 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -2 4 12 ] + nhpr [ -0 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 10 11 15 ] + nhpr [ -0 0 -0 ] + scale [ 2 2 2 ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 215 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 225 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 225 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 225 -100 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + prop "prop_DD_street_water_DNARoot" [ + code [ "prop_DD_street_water" ] + pos [ 175 -120 0 ] + nhpr [ -0 0 -0 ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 175 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "1309" [ + vis [ "1309" "1307" "1306" "1305" "1304" "1310" "1311" "1312" "1313" "1314" "1308" "1303" "1302" ] + suit_edge [ 37 41 ] + suit_edge [ 42 38 ] + suit_edge [ 143 37 ] + suit_edge [ 37 143 ] + suit_edge [ 143 38 ] + suit_edge [ 38 143 ] + battle_cell [ 20 20 215 -140 -0.5 ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 220 -140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 240 -140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 190 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 220 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 200 -160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 240 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 200 -180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 225 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.92 0.63 0.42 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb35:toon_landmark_hqDD_DNARoot" [ + code [ "toon_landmark_hqDD" ] + building_type [ "hq" ] + title [ "" ] + pos [ 210 -200 0 ] + nhpr [ -0 0 -0 ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 180 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 250 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 240 -170 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.38 1.99 20 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.54 0.54 1 ] + ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 180 -180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 180 -195 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 180 -215 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.83109 2.6666 20.6565 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 180 -230 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 205 -230 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 225 -230 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.7702 8.89587 17.943 ] + nhpr [ -30 0 -0 ] + color [ 0.81 0.48 0.48 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 240 -230 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.9271 -3.04575 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.83116 -1.46632 0 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 240 -210 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 240 -195 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 240 -180 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 0 -4.99998 0 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 190 -230 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 5.38698 -3.43393 0 ] + nhpr [ -30 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 215 -185 0 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "1310" [ + vis [ "1310" "1309" "1308" "1307" "1306" "1305" "1311" "1312" "1313" "1314" ] + suit_edge [ 41 43 ] + suit_edge [ 43 44 ] + suit_edge [ 45 46 ] + suit_edge [ 46 42 ] + suit_edge [ 41 47 ] + suit_edge [ 47 41 ] + suit_edge [ 42 47 ] + suit_edge [ 47 42 ] + suit_edge [ 43 48 ] + suit_edge [ 48 43 ] + suit_edge [ 46 48 ] + suit_edge [ 48 46 ] + suit_edge [ 144 43 ] + suit_edge [ 43 144 ] + suit_edge [ 144 46 ] + suit_edge [ 46 144 ] + battle_cell [ 20 20 260 -140 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 280 -120 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 260 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280 -160 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -120 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ 285 -150 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ 285 -120 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 8.53 -36.05 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 3.19 -36.97 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 3.03 -12.11 0 ] + nhpr [ 180 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 12.28 -4.17 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 14.86 -5.18 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_crate" ] + pos [ 10.7 -7.66 0 ] + nhpr [ 165 0 -0 ] + ] + ] + landmark_building "tb8:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Knots So Fast" ] + pos [ 265 -170 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.94 0.7 0.49 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.78 ] + baseline [ + code [ "humanist" ] + color [ 0.341176 0.176471 0.176471 1 ] + pos [ 0.36 0 0.2 ] + scale [ 1.5 1 1.5 ] + kern [ 0.053308 ] + wiggle [ 5 ] + stumble [ 0.02 ] + stomp [ 0.02 ] + flags [ "d" ] + text [ + letters [ "K" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Rusty Buckets" ] + pos [ 285 -135 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -0.44 ] + nhpr [ -0 0 -1 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0 0 1 ] + pos [ -1.59 0 0.85 ] + scale [ 2 1 2 ] + kern [ 0.050178 ] + wiggle [ 1.24437 ] + stomp [ 0.059776 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0 0 1 ] + pos [ -1.88 0 -0.83 ] + scale [ 2 1 2 ] + kern [ 0.045173 ] + wiggle [ 1.19118 ] + stomp [ 0.053727 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 0 0 1 ] + pos [ -1.92 0 -1.79 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ 275 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ 285 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 4.09 -5.09 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 13.62 -18.74 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_crate" ] + pos [ 10 -2 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ -5.4 -13.3 21.38 ] + nhpr [ 60 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.12 0 1.25 ] + nhpr [ -0 0 -5 ] + scale [ 0.9 1 1 ] + kern [ 0.05 ] + wiggle [ 3 ] + stumble [ 0.000256 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.08 ] + nhpr [ -0 0 -5 ] + scale [ 1.2 1 1.2 ] + kern [ 0.05 ] + wiggle [ 3.768 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.14 ] + nhpr [ -0 0 -2 ] + scale [ 1.2 1 1.2 ] + wiggle [ 2.276 ] + stomp [ 0.044287 ] + width [ 21.5369 ] + height [ 21.5369 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -2.07 ] + nhpr [ -0 0 -3 ] + kern [ 0.026392 ] + wiggle [ 0.67628 ] + stomp [ 0.031508 ] + width [ 19.6541 ] + height [ 19.6541 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 273.767 -139.582 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "1311" [ + vis [ "1311" "1310" "1309" "1307" "1306" "1312" "1313" "1314" ] + suit_edge [ 44 49 ] + suit_edge [ 49 50 ] + suit_edge [ 51 52 ] + suit_edge [ 52 45 ] + suit_edge [ 52 53 ] + suit_edge [ 53 52 ] + suit_edge [ 49 53 ] + suit_edge [ 53 49 ] + suit_edge [ 145 44 ] + suit_edge [ 44 145 ] + suit_edge [ 145 45 ] + suit_edge [ 45 145 ] + suit_edge [ 146 45 ] + suit_edge [ 45 146 ] + suit_edge [ 146 44 ] + suit_edge [ 44 146 ] + battle_cell [ 20 20 260 -100 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 280 -120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 280 -100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280 -100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 240 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ 285 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 285 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4.91 -12.09 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb9:20_DNARoot" [ + pos [ 285 -105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 240 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 2 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 14 -6 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb10:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Anchor Management" ] + pos [ 240 -95 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.93 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.345098 0.345098 0.172549 1 ] + pos [ 0.44 0 0.2 ] + scale [ 1.2 1 1.2 ] + kern [ 0.069294 ] + wiggle [ 2.756 ] + stomp [ 0.016807 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.37 -8.34 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2.95 -31.82 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 18 17 20 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.6 0.4 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 276.183 -82.1061 0 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "1312" [ + vis [ "1312" "1311" "1310" "1309" "1313" "1314" "1315" "1317" "1318" ] + suit_edge [ 50 54 ] + suit_edge [ 54 55 ] + suit_edge [ 56 57 ] + suit_edge [ 57 51 ] + suit_edge [ 54 58 ] + suit_edge [ 58 54 ] + suit_edge [ 57 58 ] + suit_edge [ 58 57 ] + suit_edge [ 147 50 ] + suit_edge [ 50 147 ] + suit_edge [ 148 51 ] + suit_edge [ 51 148 ] + suit_edge [ 149 57 ] + suit_edge [ 57 149 ] + suit_edge [ 149 54 ] + suit_edge [ 54 149 ] + suit_edge [ 150 61 ] + suit_edge [ 61 150 ] + suit_edge [ 150 60 ] + suit_edge [ 60 150 ] + battle_cell [ 20 20 260 -45 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 240 -50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 240 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -60 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 -20 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 240 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 12.81 -8.65 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.13 -8.43 0 ] + nhpr [ 150 0 -0 ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ 240 -50 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 285 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.65 -8.86 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 2.14 -13.35 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.7 -11.66 0 ] + nhpr [ -165 0 -0 ] + scale [ 1.3 1.3 1.3 ] + color [ 0.87 0.69 0.42 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.79 -10.68 0 ] + nhpr [ 60 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 300 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ 240 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.87 0.61 0.61 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12.9 -8.58 0 ] + nhpr [ 150 0 -0 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 285 -55 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.32 -13.34 0 ] + nhpr [ -30 0 -0 ] + ] + ] + landmark_building "tb11:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "What's Canoe With You?" ] + pos [ 285 -30 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0.42 0 -3.98 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -3.25 0 1 ] + nhpr [ -0 0 1 ] + scale [ 0.7 1 0.7 ] + kern [ 0.03 ] + wiggle [ 3 ] + stumble [ 0.03 ] + stomp [ 0.03 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0.16 0 -0.11 ] + scale [ 2.1 1 1.3 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 2.92 0 -0.86 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "?" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 273.699 -59.9747 0 ] + nhpr [ 225 0 0 ] + ] + ] + visgroup "1313" [ + vis [ "1313" "1312" "1311" "1310" "1309" "1314" "1315" "1316" "1317" "1318" "1319" ] + suit_edge [ 55 59 ] + suit_edge [ 59 60 ] + suit_edge [ 61 62 ] + suit_edge [ 62 56 ] + suit_edge [ 59 63 ] + suit_edge [ 63 59 ] + suit_edge [ 62 63 ] + suit_edge [ 63 62 ] + suit_edge [ 62 64 ] + suit_edge [ 64 62 ] + suit_edge [ 59 64 ] + suit_edge [ 64 59 ] + battle_cell [ 20 20 260 0 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 240 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 220 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 220 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 220 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 240 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 260 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ 240 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ 230 10 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 16.83 -2.98 -0.37 ] + nhpr [ -45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 6.27 -14.85 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.2 -18.74 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 9.35 -1.08 0.02 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb13:20_DNARoot" [ + pos [ 230 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -1.37 -14.5 0 ] + nhpr [ -75 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 10 -15.0001 0 ] + nhpr [ 150 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb14:20_DNARoot" [ + pos [ 260 30 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.86 0.48 0.23 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 3 -14 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 8 -18 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -3.71 14.01 6.99 ] + nhpr [ -30 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 8.94 4 0.92 ] + nhpr [ -0 0 -0 ] + scale [ 2.5 2.5 2.5 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.54 -41.19 0 ] + nhpr [ -30 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 11.23 -41.4 0 ] + nhpr [ 135 0 -0 ] + ] + ] + landmark_building "tb14:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "The Yo Ho Stop and Go" ] + pos [ 245 30 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.77 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0 1 ] + pos [ -4.94 0 1.21 ] + scale [ 1.2 1 1.2 ] + kern [ 0.057768 ] + wiggle [ 1.26385 ] + stomp [ 0.041433 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -1.66 0 0.35 ] + scale [ 1.7 1 1.6 ] + kern [ 0.084914 ] + wiggle [ 2.54896 ] + stumble [ 0.020428 ] + stomp [ -0.046025 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 2.92 0 -0.79 ] + scale [ 1.3 1 1.3 ] + kern [ 0.054757 ] + wiggle [ 3.58656 ] + stomp [ 0.035825 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + flat_building "tb14:20_DNARoot" [ + pos [ 230 30 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 8.03 -0.93 -0.23 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb13:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Pier Pressure Plumbing" ] + pos [ 230 -10 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign2" ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 1 1 0.501961 1 ] + scale [ 1.2 1 1.2 ] + kern [ 0.072554 ] + wiggle [ 2.63956 ] + stumble [ 0.042044 ] + stomp [ 0.005883 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 1 1 0.501961 1 ] + pos [ 0.13 0 -1.23 ] + scale [ 1.2 1 1.2 ] + kern [ 0.106915 ] + wiggle [ 3.6578 ] + stumble [ 0.028497 ] + stomp [ 0.016013 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 245.026 -6.41105 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1314" [ + vis [ "1314" "1313" "1312" "1311" "1310" "1309" "1315" "1316" "1317" "1318" "1319" "1330" ] + suit_edge [ 60 65 ] + suit_edge [ 65 66 ] + suit_edge [ 67 68 ] + suit_edge [ 68 61 ] + suit_edge [ 68 69 ] + suit_edge [ 69 68 ] + suit_edge [ 65 69 ] + suit_edge [ 69 65 ] + suit_edge [ 151 67 ] + suit_edge [ 67 151 ] + suit_edge [ 151 66 ] + suit_edge [ 66 151 ] + battle_cell [ 20 20 305 0 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 280 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 300 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 300 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 320 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb15:20_DNARoot" [ + pos [ 280 30 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 315 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -0.86 -2.83 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.42 -8.13 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 2.66 -2.3 0 ] + nhpr [ 105 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 330 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb15:20_DNARoot" [ + pos [ 310 30 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.62 3.01 20 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 11 -19 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.72 -18.02 0 ] + nhpr [ -30 0 -0 ] + ] + ] + landmark_building "tb15:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "What's Up, Dock?" ] + pos [ 295 30 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.8 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.31 0 0.38 ] + nhpr [ -0 0 1 ] + scale [ 1.5 1 1.5 ] + kern [ 0.156733 ] + wiggle [ 4 ] + stumble [ 0.01 ] + stomp [ 0.03 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.34 0 -0.95 ] + scale [ 1.5 1 1.5 ] + kern [ 0.104449 ] + wiggle [ 3.70444 ] + stomp [ -0.053529 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + flat_building "tb15:20_DNARoot" [ + pos [ 330 30 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 9.12 -16.44 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + visgroup "1315" [ + vis [ "1315" "1314" "1313" "1312" "1316" "1317" "1318" "1319" "1330" ] + suit_edge [ 66 70 ] + suit_edge [ 71 67 ] + battle_cell [ 20 20 340 0 -0.5 ] + node "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 360 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 340 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 330 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + ] + node "buildings" [ + flat_building "tb33:random_DNARoot" [ + pos [ 369.999 59.9995 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 340 60.0001 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb15:20_DNARoot" [ + pos [ 340 30 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 360 45.0003 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 340 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.45 0.31 0.17 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 360 59.9999 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.44 0.67 0.45 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 345.85 16.3628 0 ] + nhpr [ -15 0 -0 ] + ] + ] + visgroup "1316" [ + vis [ "1316" "1315" "1314" "1317" "1313" "1318" "1330" ] + battle_cell [ 20 20 340 -75 -0.5 ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 330 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 310 -60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 330 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 330 -60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 330 -80 -9.09495e-013 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 310 -80 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 -60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 -80 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 330 -30 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 330 -45 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 12.49 -7.03 0 ] + nhpr [ -120 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -4.74 -13.22 0 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 310 -60 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.36 0.45 0.22 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.36 0.45 0.22 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 370 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 370 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 12.68 -12.77 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 350 -60 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 350 -50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 350 -35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 350 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 1 0 0 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 310 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.86 -5.73 0 ] + nhpr [ -120 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.48 -7.79 0 ] + nhpr [ -150 0 -0 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 310 -80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15.6 -5.75 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 0.34 -15.03 0 ] + nhpr [ -120 0 -0 ] + ] + ] + prop "prop_DD_lighthouse_DNARoot" [ + code [ "prop_DD_lighthouse" ] + pos [ 370 -100 0 ] + nhpr [ -0 0 -0 ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ 330 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + pos [ 344.58 -58.1883 3.8147e-006 ] + nhpr [ -120 0 -0 ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 334.102 -89.5202 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "1317" [ + vis [ "1317" "1316" "1315" "1314" "1313" "1312" "1318" "1319" "1320" "1322" "1321" "1330" ] + suit_edge [ 70 72 ] + suit_edge [ 73 71 ] + suit_edge [ 152 73 ] + suit_edge [ 73 152 ] + suit_edge [ 152 72 ] + suit_edge [ 72 152 ] + battle_cell [ 20 20 375 0 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 350 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 370 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 360 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 375 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 385 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 400 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.38 0.68 0.46 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 3 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12.82 -9.23 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 2.15 -8.08 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 380 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 360 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.35 -7.67 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -1.18903 -37.4759 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -5 -35 0 ] + nhpr [ -45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 390 30 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.6 0.67 0.54 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.17 0.64 0.45 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 2 23 17 ] + nhpr [ -30 0 -0 ] + scale [ 2.5 2.5 2.5 ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 375 30 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.29 -17.3 0 ] + nhpr [ 90 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 15.75 -18.17 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "DD_barrel" ] + pos [ 14.34 -3.7 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 360 30 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 1 0 0 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 379.257 -13.5795 3.8147e-006 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "1318" [ + vis [ "1318" "1317" "1316" "1315" "1314" "1313" "1312" "1319" "1320" "1321" "1322" ] + suit_edge [ 72 74 ] + suit_edge [ 74 75 ] + suit_edge [ 76 77 ] + suit_edge [ 77 73 ] + suit_edge [ 77 78 ] + suit_edge [ 78 77 ] + suit_edge [ 74 78 ] + suit_edge [ 78 74 ] + battle_cell [ 20 20 420 0 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 400 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 400 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 420 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 2.28 -37.28 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4.7 -12.95 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.84 -13.94 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.99 -14.41 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.94 -35.96 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.34 -6.7 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.7 -7.95 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.7 -9.95 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.91 0.54 0.54 1 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 2.3 0.93 19.45 ] + nhpr [ 30 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 1.4 ] + nhpr [ -0 0 -6 ] + scale [ 0.9 1 0.9 ] + width [ 32.0646 ] + height [ 32.0646 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.55 ] + nhpr [ -0 0 -5 ] + scale [ 0.9 1 0.9 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.65098 0 0 1 ] + pos [ 0 0 -0.84 ] + nhpr [ -0 0 -3 ] + scale [ 1.3 1 1.5 ] + kern [ 0.02155 ] + wiggle [ 3.37021 ] + stomp [ 0.05969 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -2 ] + nhpr [ -0 0 -3 ] + width [ 24.9078 ] + height [ 24.9078 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 405 30 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 435 30 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ 445 30 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + landmark_building "tb33:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "This Transom Man Custom Tailored Suits" ] + pos [ 410 30 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.08 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.415686 0.207843 0 1 ] + pos [ 0 0 0.34 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.25098 0.12549 0 1 ] + pos [ 0 0 -0.7 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "1319" [ + vis [ "1319" "1318" "1317" "1315" "1314" "1313" "1320" "1321" "1322" ] + suit_edge [ 75 79 ] + suit_edge [ 79 80 ] + suit_edge [ 81 82 ] + suit_edge [ 82 76 ] + suit_edge [ 79 83 ] + suit_edge [ 83 79 ] + suit_edge [ 82 83 ] + suit_edge [ 83 82 ] + suit_edge [ 82 84 ] + suit_edge [ 84 82 ] + suit_edge [ 79 84 ] + suit_edge [ 84 79 ] + suit_edge [ 153 76 ] + suit_edge [ 76 153 ] + suit_edge [ 153 75 ] + suit_edge [ 75 153 ] + suit_edge [ 154 75 ] + suit_edge [ 75 154 ] + suit_edge [ 154 76 ] + suit_edge [ 76 154 ] + battle_cell [ 20 20 420 -45 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 400 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 400 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -20 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -60 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 400 -45 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 400 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.73 0.63 0.45 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 400 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 13.77 -8.32 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.45 0.53 0.45 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + landmark_building "tb18:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Seven Seas Cafe" ] + pos [ 400 -60 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1 ] + nhpr [ -0 0 2 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.176471 0.415686 0.227451 1 ] + pos [ 0 0 0.2 ] + scale [ 1.4 1 1.4 ] + kern [ 0.133713 ] + wiggle [ 1.24209 ] + stumble [ 0.03 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + landmark_building "tb19:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Docker's Diner" ] + pos [ 445 -40 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 13 -13.88 0 ] + nhpr [ 180 0 -0 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0.33 0 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.827451 0.462745 1 ] + pos [ -1.93 0 0.13 ] + scale [ 1.7 1 1.7 ] + kern [ 0.04228 ] + wiggle [ 3.27975 ] + stumble [ 0.017278 ] + stomp [ 0.034519 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.827451 0.462745 1 ] + pos [ -2.31 0 -1.54 ] + scale [ 1.7 1 1.7 ] + kern [ 0.076943 ] + wiggle [ 2.98002 ] + stomp [ 0.02853 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 404.406 -37.2436 3.8147e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "1320" [ + vis [ "1320" "1319" "1318" "1317" "1321" "1322" "1323" "1324" ] + suit_edge [ 80 85 ] + suit_edge [ 86 81 ] + suit_edge [ 155 85 ] + suit_edge [ 85 155 ] + suit_edge [ 155 86 ] + suit_edge [ 86 155 ] + battle_cell [ 20 20 420 -100 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 400 -70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 400 -100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 -100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 400 -85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 12.09 -8.58 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -0.7 -8.05 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4.05 -8.7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.01 1.38 19 ] + nhpr [ -0 0 -0 ] + color [ 0.75 0.45 0.45 1 ] + ] + ] + flat_building "tb19:20_DNARoot" [ + pos [ 445 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10.64 -7.27 0 ] + nhpr [ -30 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -0.05 -13.13 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.7 -4.95 0 ] + nhpr [ 15 0 -0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.87 0.69 0.42 1 ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 445 -95 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 1.09 -13.4 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 445 -105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 400 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 400 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 5.52 -8.73 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + cell_id [ 0 ] + pos [ 438.473 -110.356 1.52588e-005 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "1321" [ + vis [ "1321" "1320" "1319" "1318" "1317" "1322" "1323" "1324" "1325" ] + suit_edge [ 85 87 ] + suit_edge [ 87 88 ] + suit_edge [ 89 90 ] + suit_edge [ 90 86 ] + suit_edge [ 90 91 ] + suit_edge [ 91 90 ] + suit_edge [ 87 91 ] + suit_edge [ 91 87 ] + suit_edge [ 156 88 ] + suit_edge [ 88 156 ] + suit_edge [ 156 89 ] + suit_edge [ 89 156 ] + battle_cell [ 20 20 420 -140 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 440 -160 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 380 -160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 380 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 380 -180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 420 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 390 -135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.52 0.96 0.79 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.73 0.63 0.45 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.66 1 0.86 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 8.02 -15.75 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 7.13 -18.06 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 6.86 -41.54 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 8.21 -43.43 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 390 -170 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 2 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 2.7 -2.95 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.12 -20.44 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 12.39 -1.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 405 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 440 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.87 0.65 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 15.42 -4.26 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 20 -18 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0 -19 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 15 -14 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb20:20_DNARoot" [ + pos [ 390 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.929134 0.153034 0.153034 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.532747 0.317894 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 420 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -1.95 -6.7 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -0.95 -2.7 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 9.01 -1.29 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb20:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Hook, Line, and Sinker Prank Shop" ] + pos [ 390 -150 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -0.23 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.823529 0 1 ] + pos [ -1.41 0 0.79 ] + scale [ 1 1 1.2 ] + kern [ 0.02 ] + stumble [ 0.010115 ] + width [ 14.9698 ] + height [ 14.9698 ] + flags [ "b" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.627451 0.701961 1 ] + pos [ -1.35 0 -1.28 ] + scale [ 1.2 1 1.2 ] + kern [ 0.06337 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + visgroup "1322" [ + vis [ "1322" "1321" "1320" "1319" "1318" "1317" "1323" "1324" "1325" ] + suit_edge [ 88 92 ] + suit_edge [ 92 93 ] + suit_edge [ 93 94 ] + suit_edge [ 95 96 ] + suit_edge [ 96 97 ] + suit_edge [ 97 89 ] + suit_edge [ 92 98 ] + suit_edge [ 98 92 ] + suit_edge [ 97 98 ] + suit_edge [ 98 97 ] + suit_edge [ 96 99 ] + suit_edge [ 99 96 ] + suit_edge [ 93 99 ] + suit_edge [ 99 93 ] + suit_edge [ 157 97 ] + suit_edge [ 97 157 ] + suit_edge [ 157 92 ] + suit_edge [ 92 157 ] + battle_cell [ 20 20 465 -140 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 460 -120 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 490 -120 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 440 -160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 480 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.39 -3.45 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 15.43 -18.4 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4.35 -14.62 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -3.5 -19.34 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.05 -5.7 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.3 1.3 1.3 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.05 -5.7 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + landmark_building "tb21:toon_landmark_DD_A1_DNARoot" [ + code [ "toon_landmark_DD_A1" ] + title [ "King Neptoon's Cannery" ] + pos [ 465 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.88 0.43 0.43 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -4 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.3 0 0.59 ] + scale [ 1.2 1 1.2 ] + kern [ 0.01 ] + wiggle [ 4.5 ] + stumble [ 0.02 ] + stomp [ 0.02 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.57 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 17 20 21 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb23:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "The Clam Bake Diner" ] + pos [ 465 -120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.6 0.67 0.54 1 ] + ] + sign [ + code [ "DD_sign3" ] + pos [ 0 0 -1.51 ] + nhpr [ -0 0 -3 ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -2.31 0 1.2 ] + scale [ 1.3 1 1.3 ] + kern [ 0.0956 ] + wiggle [ 2.96631 ] + stomp [ 0.059808 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -2.21 0 -0.66 ] + scale [ 2 1 2 ] + kern [ 0.057663 ] + wiggle [ 2.33484 ] + stomp [ 0.059389 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -2.25 0 -1.94 ] + scale [ 1.3 1 1.3 ] + kern [ 0.025749 ] + wiggle [ 2.94106 ] + stomp [ 0.042588 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 445 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.92 0.63 0.42 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 16.66 -7.95 0 ] + nhpr [ 90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 444.951 -155.242 0 ] + nhpr [ 150 0 -0 ] + ] + ] + visgroup "1323" [ + vis [ "1323" "1322" "1321" "1320" "1324" "1325" "1326" "1327" "1328" "1329" ] + suit_edge [ 94 100 ] + suit_edge [ 100 101 ] + suit_edge [ 102 103 ] + suit_edge [ 103 95 ] + suit_edge [ 100 104 ] + suit_edge [ 104 100 ] + suit_edge [ 103 104 ] + suit_edge [ 104 103 ] + battle_cell [ 20 20 515 -140 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 490 -160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 510 -160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 500 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 540 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 490 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 11.4691 -8.26082 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 520 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 17 -8.32 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ 495 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.79 0.47 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 13.04 -13.81 0 ] + nhpr [ 60 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -5.98837 -18.0049 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ 540 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 5.8 -12.85 0 ] + nhpr [ 150 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.97 -17.89 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ 530 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.38 0.22 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.87 0.69 0.42 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.5 0.38 0.22 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.76 0.73 0.64 1 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 11.41 -3.23 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6.15 -2.11 0 ] + nhpr [ 105 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.96 -2.12 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 505 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + landmark_building "tb24:toon_landmark_DD_C1_DNARoot" [ + code [ "toon_landmark_DD_C1" ] + title [ "Dog Paddles" ] + pos [ 515 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.19 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.392157 0.196078 0 1 ] + pos [ 0.22 0 -0.14 ] + scale [ 1.8 1 1.8 ] + kern [ 0.135229 ] + wiggle [ 3.31642 ] + stumble [ 0.057342 ] + stomp [ 0.067116 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "1324" [ + vis [ "1324" "1323" "1322" "1321" "1320" "1325" "1326" "1327" "1328" "1329" ] + suit_edge [ 101 105 ] + suit_edge [ 105 106 ] + suit_edge [ 107 108 ] + suit_edge [ 108 102 ] + suit_edge [ 105 109 ] + suit_edge [ 109 105 ] + suit_edge [ 108 109 ] + suit_edge [ 109 108 ] + suit_edge [ 158 101 ] + suit_edge [ 101 158 ] + suit_edge [ 158 102 ] + suit_edge [ 102 158 ] + suit_edge [ 159 108 ] + suit_edge [ 108 159 ] + suit_edge [ 159 105 ] + suit_edge [ 105 159 ] + battle_cell [ 20 20 560 -140 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 580 -120 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 540 -160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 560 -160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 580 -160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 580 -160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 580 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 570 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.13 -7.38 0 ] + nhpr [ -75 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.13 -9.08 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.18 -7.25 0 ] + nhpr [ -15 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 2.58 2.12 19.16 ] + nhpr [ 30 0 -0 ] + color [ 0.87 0.69 0.42 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.82 ] + nhpr [ -0 0 -6 ] + scale [ 0.8 1 1.1 ] + kern [ 0.048925 ] + wiggle [ 3.79136 ] + stumble [ 0.08 ] + stomp [ 0.032853 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.26 ] + nhpr [ -0 0 -5 ] + scale [ 0.8 1 1 ] + width [ 32.0574 ] + height [ 32.0574 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -2.07 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.9 ] + width [ 30.1732 ] + height [ 30.1732 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.2 ] + nhpr [ -0 0 -5 ] + kern [ 0.041886 ] + stomp [ 0.054527 ] + width [ 40.295 ] + height [ 40.295 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 590 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_lifesaver_DNARoot" [ + code [ "prop_lifesaver" ] + pos [ 4.68 -3.2 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 19.31 -18.11 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 590 -160 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.57 0.7 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.73 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 590 -120 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_dr" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.63 0.47 0.24 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 580 -120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + ] + ] + flat_building "tb24:20_DNARoot" [ + pos [ 555 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 590 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 30.79 -18.92 0 ] + nhpr [ -135 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -6.92 -18.88 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -7.67374 -41.6346 0 ] + nhpr [ -180 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -2.68 -42.53 0 ] + nhpr [ 45 0 -0 ] + ] + ] + landmark_building "tb25:toon_landmark_DD_B2_DNARoot" [ + code [ "toon_landmark_DD_B2" ] + title [ "Wholly Mackerel! Fish Market" ] + pos [ 590 -145 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DD_sign1" ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.623529 0.0156863 0.184314 1 ] + pos [ 0.31 0 0.2 ] + scale [ 1.5 1 1.5 ] + kern [ 0.05 ] + wiggle [ 2.85992 ] + stumble [ 0.028275 ] + stomp [ 0.046217 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.83 ] + kern [ 0.075624 ] + wiggle [ 3 ] + stomp [ 0.013283 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 549.002 -153.217 3.8147e-005 ] + nhpr [ 165 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle1" ] + pos [ 577.351 -162.715 1.52588e-005 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "1325" [ + vis [ "1325" "1324" "1323" "1322" "1321" "1326" "1327" "1328" "1329" ] + suit_edge [ 106 110 ] + suit_edge [ 110 111 ] + suit_edge [ 112 113 ] + suit_edge [ 113 107 ] + suit_edge [ 110 114 ] + suit_edge [ 114 110 ] + suit_edge [ 113 114 ] + suit_edge [ 114 113 ] + suit_edge [ 160 106 ] + suit_edge [ 106 160 ] + suit_edge [ 160 107 ] + suit_edge [ 107 160 ] + suit_edge [ 161 112 ] + suit_edge [ 112 161 ] + suit_edge [ 161 111 ] + suit_edge [ 111 161 ] + battle_cell [ 20 20 560 -100 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 540 -100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 540 -70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb23:20_DNARoot" [ + pos [ 530 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 580 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.15 -8.52 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 6.02 -7.76 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ 530 -90 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.08 0.47 0.31 1 ] + count [ 3 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 12.6 -12.42 3.63798e-012 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 4.87 -9.01 0 ] + nhpr [ 75 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ 530 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 18.0128 -17.7413 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10 4 20 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 580 -105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ 530 -75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + landmark_building "tb26:toon_landmark_DD_B1_DNARoot" [ + code [ "toon_landmark_DD_B1" ] + title [ "Claggart's Clever Clovis Closet" ] + pos [ 580 -90 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -0.2 ] + nhpr [ -0 0 2 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 0.53 ] + scale [ 1.3 1 1 ] + kern [ 0.044485 ] + flags [ "b" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DD_Portago" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 -0.66 ] + scale [ 1.3 1 1 ] + flags [ "b" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__dod_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__dod_mailbox" ] + anim [ "tt_a_ara_dod_mailbox_fightBoost" ] + cell_id [ 0 ] + pos [ 543.785 -91.8223 -7.62939e-006 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "1326" [ + vis [ "1326" "1325" "1324" "1323" "1327" "1328" "1329" ] + suit_edge [ 111 115 ] + suit_edge [ 115 116 ] + suit_edge [ 117 112 ] + suit_edge [ 118 117 ] + suit_edge [ 117 119 ] + suit_edge [ 119 117 ] + suit_edge [ 115 119 ] + suit_edge [ 119 115 ] + suit_edge [ 117 120 ] + suit_edge [ 120 117 ] + suit_edge [ 115 120 ] + suit_edge [ 120 115 ] + suit_edge [ 116 118 ] + battle_cell [ 20 20 560 -50 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 540 -70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ 530 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.48 0.93 0.74 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb34:toon_landmark_DD_D1_DNARoot" [ + code [ "toon_landmark_DD_D1" ] + title [ "Rudderly Ridiculous!" ] + pos [ 530 -61 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 0.59 0.59 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -4.14 -41.69 0 ] + nhpr [ -0 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -1.23 -42.51 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 22.53 -41.05 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 21.33 -18.67 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 33.3 -14.87 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 -0.93 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.0156863 0.733333 0.623529 1 ] + pos [ 0 0 0.2 ] + scale [ 1.4 1 1.4 ] + kern [ 0.035353 ] + width [ 48.4238 ] + height [ 48.4238 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.917647 0.458824 1 ] + pos [ 0 0 -0.97 ] + scale [ 0.9 1 1 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + visgroup "1327" [ + vis [ "1327" "1326" "1325" "1324" "1323" "1328" "1329" ] + battle_cell [ 20 20 560 -20 -0.5 ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 520 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 540 20 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 540 10 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 530 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 530 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ 3.81 -4.05 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ -6 18 17 ] + nhpr [ -0 0 -0 ] + scale [ 2 2 2 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 9 27 21 ] + nhpr [ -15 0 -0 ] + scale [ 2.3 2.3 2.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 18.97 -15.23 0 ] + nhpr [ -15 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 570 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 7 -19.37 0 ] + nhpr [ -165 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + landmark_building "tb28:toon_landmark_DD_A2_DNARoot" [ + code [ "toon_landmark_DD_A2" ] + title [ "Alice's Ballast Palace" ] + pos [ 545 -5 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 0.52 0.61 0.52 1 ] + ] + sign [ + code [ "DD_sign1" ] + pos [ 0 0 -1.55 ] + nhpr [ -0 0 -6 ] + baseline [ + code [ "DD_Portago" ] + color [ 0.145098 0.294118 0.294118 1 ] + pos [ 0.31 0 0.08 ] + scale [ 1.3 1 1.5 ] + kern [ 0.010916 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + visgroup "1328" [ + vis [ "1328" "1327" "1326" "1325" "1324" "1323" "1329" ] + suit_edge [ 162 118 ] + suit_edge [ 118 162 ] + battle_cell [ 20 20 595 -20 -0.5 ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 620 -10 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 640 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 620 -30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 595 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_dr" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.85 -2.11 0 ] + nhpr [ -105 0 -0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 10.2 -33.81 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ -1.42 -32.82 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.38 -5.92 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.4 1.4 1.4 ] + color [ 0.87 0.61 0.61 1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 14.88 -16.71 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 615 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.87 0.65 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.3 5.41 17 ] + nhpr [ -0 0 -0 ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 10.62 -32.99 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 630 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.74 0.55 0.32 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.63 0.6 0.4 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 580 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.63 0.48 0.34 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.79 0.47 0.47 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 630 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 544.894 -57.7135 0 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "1329" [ + vis [ "1329" "1328" "1327" "1326" "1325" "1324" "1323" ] + battle_cell [ 20 20 595 -50 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 580 -70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 610 -70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 595 -70 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.91 0.54 0.54 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.08 0.47 0.31 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.5 0.38 1 ] + ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 0.26 -8.31 0 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 610 -70 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.16 0.44 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 4 ] + ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 1.63 -7.07 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb26:20_DNARoot" [ + pos [ 630 -70 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15.36 -6.18 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 4.69 -8.15 0 ] + nhpr [ -120 0 -0 ] + ] + ] + prop "linktunnel_br_3101_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 630 -50 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 0.58 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.98 ] + scale [ 1.5 1 1.5 ] + width [ 44.5573 ] + height [ 44.5573 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + pos [ 0 0 1.63 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.91 ] + scale [ 0.8 1 0.8 ] + width [ 33.0786 ] + height [ 33.0786 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 624.279 -58.0312 -0.500015 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "1330" [ + vis [ "1330" "1315" "1314" "1317" "1316" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 374 120 0 ] + nhpr [ 130 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 353.717 88.211 0.441099 ] + nhpr [ -0 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 361.335 89.9368 0.422564 ] + nhpr [ 30 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 338.83 89.9299 0.418022 ] + nhpr [ -30 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 346.219 88.2058 0.643978 ] + nhpr [ -0 0 -0 ] + ] + ] + node "props" [ + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 327.171 83.1747 0 ] + nhpr [ -120 0 -0 ] + scale [ 0.658674 0.658674 0.658674 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 297.611 97.3517 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.54706 1.54706 1.54706 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 310.695 153.021 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.51866 1.51866 1.51866 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 340.081 127.417 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.627209 0.627209 0.627209 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 360.389 156.033 0 ] + nhpr [ -60 0 -0 ] + scale [ 1.44044 1.44044 1.44044 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 327.136 179.886 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 386.052 92.2573 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 300.599 94.8056 0 ] + nhpr [ -150 0 -0 ] + scale [ 0.739895 0.739895 0.739895 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 357.757 156.36 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.746363 0.746363 0.746363 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 376.883 101.829 0 ] + nhpr [ -165 0 -0 ] + scale [ 0.553839 0.553839 0.553839 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 318.637 66.9532 -0.00706482 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 341.498 128.43 -0.402779 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 345.111 125.482 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 355.326 125.959 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 370.901 106.668 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 328.429 96.9856 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 372.051 94.8678 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_2ftdockpiling_DNARoot" [ + code [ "prop_2ftdockpiling" ] + pos [ 329.861 107.794 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 376.567 103.974 0 ] + nhpr [ 30 0 -0 ] + scale [ 1.23146 1.23146 1.23146 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 370.871 73.1717 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.833708 0.833708 0.833708 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 401.961 135 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.48777 1.48777 1.48777 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 325.899 83.3136 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 332.455 113.792 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.118 1.118 1.118 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 366.727 125.433 0 ] + nhpr [ 30 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 369.084 126.456 0 ] + nhpr [ -0 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 366.099 127.477 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 362.837 128.037 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 358.791 132.201 0.0199699 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ 363.63 128.975 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_shipmasts_DNARoot" [ + code [ "prop_shipmasts" ] + pos [ 377.074 166.283 10.8525 ] + nhpr [ -45.0007 0.161361 0.157081 ] + scale [ 1.94855 1.94855 1.94855 ] + ] + ] + street "street_DD_pond_DNARoot" [ + code [ "street_DD_pond" ] + pos [ 350 105 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DD_tex" ] + texture [ "street_sidewalk_DD_tex" ] + texture [ "street_curb_DD_tex" ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle0" ] + pos [ 341.613 82.3785 3.8147e-006 ] + nhpr [ -60 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__dod_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__dod_trashcan" ] + anim [ "tt_a_ara_dod_trashcan_idle0" ] + pos [ 358.781 82.6592 3.8147e-006 ] + nhpr [ 60 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dock_sz.dna b/ttmodels/src/dna/donalds_dock_sz.dna new file mode 100644 index 00000000..cadaabde --- /dev/null +++ b/ttmodels/src/dna/donalds_dock_sz.dna @@ -0,0 +1,1338 @@ +group "donaldsDock" [ + visgroup "1000:safe_zone" [ + vis [ "1000:safe_zone" ] + group "streets" [ + ] + group "buildings" [ + flat_building "sz0:random_DNARoot" [ + pos [ -122.3 34.38 5.67 ] + nhpr [ 79 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -124.96 -49.96 5.67 ] + nhpr [ 90 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.3 0.18 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -112.88 -57.6 5.67 ] + nhpr [ 147 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.71 0.49 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.87 0.55 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.76 0.57 0.29 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -64.61 -90.2 5.67 ] + nhpr [ 146 0 0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -55 -90 5.67 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -10 -90 5.67 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.17 0.44 0.28 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.17 0.64 0.45 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.57 0.39 0.34 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 5.6 -99.86 5.67 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 5.6 -90 5.67 ] + nhpr [ -180 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.61 0.36 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 60 5.67 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 45 5.67 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.61 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.57 0.38 0.34 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 -10 5.67 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.53 0.32 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_board_ur" ] + color [ 0.93 0.15 0.15 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.53 0.32 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 -25 5.67 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.78 0.49 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ -25 -90 5.67 ] + nhpr [ 180 0 0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0.737255 0.501961 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09 ] + width [ 11.1111 ] + height [ 11.1111 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ 0.29 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.22 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -124 -14.56 5.67 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.384314 0.305635 0.187618 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.779528 0.489115 0.293469 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.574803 0.38771 0.340374 1 ] + ] + ] + ] + prop "linktunnel_dd_1101_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -198.22 -108.72 -0.975 ] + nhpr [ -34 0 0 ] + sign [ + code [ "tunnel_sign_red" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.25 ] + nhpr [ 0 0 1 ] + scale [ 1.1 1 1.1 ] + width [ 29.3591 ] + height [ 29.3591 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.26 ] + scale [ 1.4 1 1.1 ] + width [ 39.6338 ] + height [ 39.6338 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.95 ] + scale [ 0.8 1 0.8 ] + width [ 29.2886 ] + height [ 29.2886 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + pos [ 0 0 1.77 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + ] + ] + prop "linktunnel_dd_1301_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 164.82 -51.14 -0.975 ] + nhpr [ 90 0 0 ] + sign [ + code [ "tunnel_sign_red" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.4 ] + scale [ 1.5 1 1.1 ] + width [ 42.2619 ] + height [ 42.2619 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.3 ] + scale [ 1.4 1 1.1 ] + width [ 46.0023 ] + height [ 46.0023 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + pos [ 0 0 1.76 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2.01 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 47.5285 ] + height [ 47.5285 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + prop "linktunnel_dd_1225_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -214.99 74.98 -0.975 ] + nhpr [ -90 0 0 ] + sign [ + code [ "tunnel_sign_red" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.91 ] + nhpr [ 0 0 1 ] + scale [ 1.3 1 1.5 ] + width [ 39.2357 ] + height [ 39.2357 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.12 0 -1.9 ] + scale [ 0.8 1 0.8 ] + width [ 38.8969 ] + height [ 38.8969 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + pos [ 0 0 1.76 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 -40 5.67 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.31 0.19 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.78 0.49 0.29 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_wood_ur" ] + color [ 0.87 0.61 0.61 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.87 0.55 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.94 0.72 0.66 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 90 60 5.67 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_wood_ur" ] + color [ 0.874016 0.610097 0.610097 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.874016 0.548402 0.329041 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -119.44 49.1 5.67 ] + nhpr [ 165 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.42 0.16 0.16 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.87 0.65 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.73 0.51 0.51 1 ] + ] + ] + ] + landmark_building "tb8:toon_landmark_DD_clothes_shop_DNARoot" [ + code [ "toon_landmark_DD_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ -88.0457 115.078 3.25565 ] + nhpr [ 45 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.91 0.34 0.34 1 ] + ] + sign [ + pos [ 0 0 -0.5 ] + baseline [ + code [ "mickey" ] + color [ 0.701961 0 0 1 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "linktunnel_oz_6000_DNARoot" [ + code [ "prop_outdoor_zone_entrance" ] + pos [ -53.1974 172.046 3.27967 ] + nhpr [ 52.125 0 0 ] + sign [ + code [ "DD_sign2" ] + scale [ 2 1 1.4 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.439216 0.247059 0.184314 1 ] + scale [ 1.5 1 1.4 ] + wiggle [ 3 ] + stomp [ 0.0367716 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.439216 0.247059 0.184314 1 ] + pos [ 0 0 -1.2 ] + scale [ 1.5 1 1.4 ] + wiggle [ 3 ] + stomp [ 0.0367716 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + prop "donalds_dock" [ + code [ "donalds_dock" ] + pos [ -25 10 0 ] + nhpr [ 180 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -103.41 40.92 5.69 ] + nhpr [ -180 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -106.95 -41.49 5.67 ] + nhpr [ -165 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ -60.98 -71.34 5.73 ] + nhpr [ -120 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 2.52 -74.03 5.67 ] + nhpr [ -135 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 58.21 -37.67 5.68 ] + nhpr [ 45 0 0 ] + ] + prop "streetlight_DD_left_DNARoot" [ + code [ "streetlight_DD_left" ] + pos [ 57.15 57.28 5.71 ] + nhpr [ -45 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 75.92 -27.01 26.4 ] + nhpr [ -90 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -125.73 -48.23 25.21 ] + nhpr [ 90 0 0 ] + color [ 0.71 0.49 0.35 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ -69 -89.96 25.67 ] + nhpr [ 150 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_nets_DNARoot" [ + code [ "prop_nets" ] + pos [ -122.68 -38.45 5.57 ] + nhpr [ 60 2 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -108.75 44.58 5.7 ] + nhpr [ 45 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -108.87 41.47 5.7 ] + nhpr [ 105 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.33 -75.44 5.71 ] + nhpr [ 105 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -1.26 -72.98 5.8 ] + nhpr [ 60 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -71.17 -77.38 5.65 ] + nhpr [ 90 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -74.57 -74.96 5.69 ] + nhpr [ 45 0 0 ] + ] + prop "prop_ship_wheel_DNARoot" [ + code [ "prop_ship_wheel" ] + pos [ -79.04 -78.04 5.67 ] + nhpr [ 90 0 0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 61.03 55.59 5.65 ] + nhpr [ -75 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 58.24 51.29 5.7 ] + nhpr [ -120 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ -71.02 -69.91 5.67 ] + nhpr [ -90 0 0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 77.77 44.8 23.71 ] + nhpr [ -90 0 0 ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ -6 -94 25 ] + nhpr [ 180 0 0 ] + color [ 0.63 0.47 0.24 1 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ -82.34 -70.8 5.67 ] + nhpr [ 146 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ -107.27 -53.79 5.67 ] + nhpr [ -35 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -118.81 -0.75 5.67 ] + nhpr [ 89 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -118.86 30.91 5.67 ] + nhpr [ -90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 69.03 24.96 5.67 ] + nhpr [ -90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 68.83 -6.93 5.67 ] + nhpr [ 90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -55 115 3.25331 ] + nhpr [ 0 0 0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -59.7445 135.255 3.30638 ] + nhpr [ 135 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -100 85 3.2338 ] + nhpr [ -75 0 0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 64.4875 91.0424 3.25886 ] + nhpr [ 285 0 0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 59.0938 -64.9951 3.29744 ] + nhpr [ -159 0 0 ] + scale [ 1.5304 1.5304 1.5304 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 51.4007 -72.6317 3.29744 ] + nhpr [ -18 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ 19.2 -83.3846 3.29744 ] + nhpr [ 91 0 0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -10.8767 181.675 3.23742 ] + nhpr [ -120 0 0 ] + scale [ 1.40798 1.40798 1.40798 ] + ] + prop "prop_palm_tree_topflat_DNARoot" [ + code [ "prop_palm_tree_topflat" ] + pos [ -15 180 3.23697 ] + nhpr [ 45 0 0 ] + ] + ] + landmark_building "tb6:toon_landmark_DD_gag_shop_DNARoot" [ + code [ "toon_landmark_DD_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ -121.761 -24.113 5.66699 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + landmark_building "tb7:toon_landmark_hqDD_SZ_DNARoot" [ + code [ "toon_landmark_hqDD_SZ" ] + building_type [ "hq" ] + title [ "Toon Headquarters" ] + pos [ -8.4986 104.147 1.66701 ] + nhpr [ -90 0 0 ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -12.5 178 3.28 ] + nhpr [ 180 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -1.79822 139.984 3.59855 ] + nhpr [ 135 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -11.6229 148.498 3.64751 ] + nhpr [ 165 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -23.6427 149.15 3.59725 ] + nhpr [ -165 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -31.3754 141.368 3.56653 ] + nhpr [ -135 0 0 ] + ] + ] + landmark_building "tb10:toon_landmark_DD_pet_shop_DNARoot" [ + code [ "toon_landmark_DD_pet_shop" ] + building_type [ "petshop" ] + title [ "" ] + pos [ 40.2718 -89.8663 3.28834 ] + nhpr [ -165 0 0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.86 0.48 0.23 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 0.180612 ] + scale [ 1.51565 1 3.00508 ] + width [ 15.3614 ] + height [ 15.3614 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ 36.9924 113.67 3.28138 ] + nhpr [ 315 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dreamland_9100.dna b/ttmodels/src/dna/donalds_dreamland_9100.dna new file mode 100644 index 00000000..8cbda3e4 --- /dev/null +++ b/ttmodels/src/dna/donalds_dreamland_9100.dna @@ -0,0 +1,14285 @@ +store_suit_point [ 0, STREET_POINT, 40 -7 -0.5 ] +store_suit_point [ 1, STREET_POINT, 30 -7 -0.5 ] +store_suit_point [ 2, STREET_POINT, 30 -15 -0.5 ] +store_suit_point [ 3, STREET_POINT, 20 -15 -0.5 ] +store_suit_point [ 4, STREET_POINT, 20 -40 -0.5 ] +store_suit_point [ 5, STREET_POINT, 30 -40 -0.5 ] +store_suit_point [ 6, STREET_POINT, 30 -25 -0.5 ] +store_suit_point [ 7, STREET_POINT, 40 -25 -0.5 ] +store_suit_point [ 8, FRONT_DOOR_POINT, 51 -7 0, 2 ] +store_suit_point [ 9, FRONT_DOOR_POINT, 8 -10 0, 1 ] +store_suit_point [ 10, STREET_POINT, 20 -55 -0.5 ] +store_suit_point [ 11, STREET_POINT, 5 -55 -0.5 ] +store_suit_point [ 12, STREET_POINT, 5 -65 -0.5 ] +store_suit_point [ 13, STREET_POINT, 30 -65 -0.5 ] +store_suit_point [ 14, FRONT_DOOR_POINT, 28 -76 0, 4 ] +store_suit_point [ 15, STREET_POINT, -15 -55 -0.5 ] +store_suit_point [ 16, STREET_POINT, -15 -65 -0.5 ] +store_suit_point [ 17, STREET_POINT, -30 -55 -0.5 ] +store_suit_point [ 18, STREET_POINT, -30 -40 -0.5 ] +store_suit_point [ 19, STREET_POINT, -40 -40 -0.5 ] +store_suit_point [ 20, STREET_POINT, -40 -65 -0.5 ] +store_suit_point [ 21, FRONT_DOOR_POINT, -50 -59 0, 5 ] +store_suit_point [ 22, STREET_POINT, -37 -22 -0.5 ] +store_suit_point [ 23, STREET_POINT, -55 -15 -0.5 ] +store_suit_point [ 24, STREET_POINT, -55 -25 -0.5 ] +store_suit_point [ 25, STREET_POINT, -44 -29 -0.5 ] +store_suit_point [ 26, FRONT_DOOR_POINT, -18 -22 0, 7 ] +store_suit_point [ 27, FRONT_DOOR_POINT, -47 -4 0, 8 ] +store_suit_point [ 28, STREET_POINT, -95 -15 -0.5 ] +store_suit_point [ 29, STREET_POINT, -95 -25 -0.5 ] +store_suit_point [ 30, STREET_POINT, -113 -22 -0.5 ] +store_suit_point [ 31, STREET_POINT, -120 -40 -0.5 ] +store_suit_point [ 32, STREET_POINT, -110 -40 -0.5 ] +store_suit_point [ 33, STREET_POINT, -105 -30 -0.5 ] +store_suit_point [ 34, FRONT_DOOR_POINT, -97 -4 0, 9 ] +store_suit_point [ 35, STREET_POINT, -120 -55 -0.5 ] +store_suit_point [ 36, STREET_POINT, -135 -55 -0.5 ] +store_suit_point [ 37, STREET_POINT, -135 -65 -0.5 ] +store_suit_point [ 38, STREET_POINT, -110 -65 -0.5 ] +store_suit_point [ 39, FRONT_DOOR_POINT, -97 -61 0, 13 ] +store_suit_point [ 40, STREET_POINT, -147.99 -72.5 -0.5 ] +store_suit_point [ 41, STREET_POINT, -142 -66 -0.5 ] +store_suit_point [ 42, STREET_POINT, -147.553 -57.7417 -0.5 ] +store_suit_point [ 43, STREET_POINT, -156.651 -67.5 -0.5 ] +store_suit_point [ 44, STREET_POINT, -159.651 -72.6961 -0.5 ] +store_suit_point [ 45, STREET_POINT, -167.151 -85.6865 -0.5 ] +store_suit_point [ 46, STREET_POINT, -176.651 -102.141 -0.5 ] +store_suit_point [ 47, STREET_POINT, -167.99 -107.141 -0.5 ] +store_suit_point [ 48, STREET_POINT, -158.49 -90.6865 -0.5 ] +store_suit_point [ 49, STREET_POINT, -150.99 -77.6961 -0.5 ] +store_suit_point [ 50, FRONT_DOOR_POINT, -170.043 -66.6961 0, 16 ] +store_suit_point [ 51, FRONT_DOOR_POINT, -149.83 -95.6865 0, 17 ] +store_suit_point [ 52, STREET_POINT, -180.053 -114.033 -0.5 ] +store_suit_point [ 53, STREET_POINT, -169.258 -113.337 -0.5 ] +store_suit_point [ 54, STREET_POINT, -167.99 -122.141 -0.5 ] +store_suit_point [ 55, STREET_POINT, -176.651 -127.141 -0.5 ] +store_suit_point [ 56, STREET_POINT, -173.651 -132.338 -0.5 ] +store_suit_point [ 57, STREET_POINT, -166.651 -144.462 -0.5 ] +store_suit_point [ 58, STREET_POINT, -157.99 -139.462 -0.5 ] +store_suit_point [ 59, STREET_POINT, -164.99 -127.338 -0.5 ] +store_suit_point [ 60, FRONT_DOOR_POINT, -184.043 -138.338 -0.000226327, 19 ] +store_suit_point [ 61, STREET_POINT, -164.651 -147.926 -0.5 ] +store_suit_point [ 62, STREET_POINT, -156.651 -161.782 -0.5 ] +store_suit_point [ 63, STREET_POINT, -147.99 -156.782 -0.5 ] +store_suit_point [ 64, STREET_POINT, -155.99 -142.926 -0.5 ] +store_suit_point [ 65, FRONT_DOOR_POINT, -145.598 -136.926 0, 20 ] +store_suit_point [ 66, STREET_POINT, -148.053 -170.675 -0.5 ] +store_suit_point [ 67, STREET_POINT, -143.624 -162.345 -0.5 ] +store_suit_point [ 68, STREET_POINT, -135 -164.282 -0.5 ] +store_suit_point [ 69, STREET_POINT, -135 -174.282 -0.5 ] +store_suit_point [ 70, STREET_POINT, -115 -174.282 -0.5 ] +store_suit_point [ 71, STREET_POINT, -115 -164.282 -0.5 ] +store_suit_point [ 72, STREET_POINT, -90 -174.282 -0.5 ] +store_suit_point [ 73, STREET_POINT, -90 -149.282 -0.5 ] +store_suit_point [ 74, STREET_POINT, -100 -149.282 -0.5 ] +store_suit_point [ 75, STREET_POINT, -100 -164.282 -0.5 ] +store_suit_point [ 76, FRONT_DOOR_POINT, -97 -185.282 -0.000739034, 22 ] +store_suit_point [ 77, STREET_POINT, -87 -138.282 -0.5 ] +store_suit_point [ 78, STREET_POINT, -75 -134.282 -0.5 ] +store_suit_point [ 79, STREET_POINT, -75 -124.282 -0.5 ] +store_suit_point [ 80, STREET_POINT, -94 -133.282 -0.5 ] +store_suit_point [ 81, FRONT_DOOR_POINT, -94 -113.282 0, 25 ] +store_suit_point [ 82, STREET_POINT, -55 -134.282 -0.5 ] +store_suit_point [ 83, STREET_POINT, -55 -124.282 -0.5 ] +store_suit_point [ 84, STREET_POINT, -44 -138.282 -0.5 ] +store_suit_point [ 85, STREET_POINT, -40 -149.282 -0.5 ] +store_suit_point [ 86, STREET_POINT, -30 -149.282 -0.5 ] +store_suit_point [ 87, STREET_POINT, -37 -131.282 -0.5 ] +store_suit_point [ 88, FRONT_DOOR_POINT, -19.0001 -130.282 0, 26 ] +store_suit_point [ 89, STREET_POINT, -40 -189.282 -0.5 ] +store_suit_point [ 90, STREET_POINT, -30.0001 -189.282 -0.5 ] +store_suit_point [ 91, STREET_POINT, -40 -209.282 -0.5 ] +store_suit_point [ 92, STREET_POINT, -30.0001 -209.282 -0.5 ] +store_suit_point [ 93, STREET_POINT, -40.0001 -224.282 -0.5 ] +store_suit_point [ 94, STREET_POINT, -55 -224.282 -0.5 ] +store_suit_point [ 95, STREET_POINT, -55 -234.282 -0.5 ] +store_suit_point [ 96, STREET_POINT, -30.0001 -234.282 -0.5 ] +store_suit_point [ 97, FRONT_DOOR_POINT, -18.0001 -228.282 -0.000771854, 27 ] +store_suit_point [ 98, STREET_POINT, -74 -224.282 -0.5 ] +store_suit_point [ 99, STREET_POINT, -95 -224.282 -0.5 ] +store_suit_point [ 100, STREET_POINT, -95 -234.282 -0.5 ] +store_suit_point [ 101, STREET_POINT, -74 -234.282 -0.5 ] +store_suit_point [ 102, FRONT_DOOR_POINT, -74 -266.282 -0.000767351, 28 ] +store_suit_point [ 103, STREET_POINT, -115 -224.282 -0.5 ] +store_suit_point [ 104, STREET_POINT, -115 -234.282 -0.5 ] +store_suit_point [ 105, STREET_POINT, -136 -224.282 -0.5 ] +store_suit_point [ 106, STREET_POINT, -136 -234.282 -0.5 ] +store_suit_point [ 107, FRONT_DOOR_POINT, -136 -265.282 -0.000750565, 29 ] +store_suit_point [ 108, STREET_POINT, -155 -224.282 -0.5 ] +store_suit_point [ 109, STREET_POINT, -155 -234.282 -0.5 ] +store_suit_point [ 110, STREET_POINT, -163 -222.282 -0.5 ] +store_suit_point [ 111, STREET_POINT, -167 -231.282 -0.5 ] +store_suit_point [ 112, STREET_POINT, -167.99 -216.782 -0.5 ] +store_suit_point [ 113, STREET_POINT, -176.651 -221.782 -0.5 ] +store_suit_point [ 114, STREET_POINT, -178.49 -198.595 -0.5 ] +store_suit_point [ 115, STREET_POINT, -187.99 -182.141 -0.5 ] +store_suit_point [ 116, STREET_POINT, -196.651 -187.141 -0.5 ] +store_suit_point [ 117, STREET_POINT, -187.151 -203.595 -0.5 ] +store_suit_point [ 118, FRONT_DOOR_POINT, -196.677 -209.095 0.00123289, 30 ] +store_suit_point [ 121, STREET_POINT, -217.141 -181.651 -0.5 ] +store_suit_point [ 124, STREET_POINT, -251.782 -201.651 -0.5 ] +store_suit_point [ 125, STREET_POINT, -278.433 -205.49 -0.5 ] +store_suit_point [ 126, STREET_POINT, -265.933 -227.141 -0.5 ] +store_suit_point [ 127, STREET_POINT, -257.272 -222.141 -0.5 ] +store_suit_point [ 128, STREET_POINT, -264.772 -209.151 -0.5 ] +store_suit_point [ 129, FRONT_DOOR_POINT, -286.325 -215.82 0.00216054, 33 ] +store_suit_point [ 130, STREET_POINT, -255.933 -244.461 -0.5 ] +store_suit_point [ 131, STREET_POINT, -247.272 -239.461 -0.5 ] +store_suit_point [ 132, STREET_POINT, -247.433 -259.184 -0.5 ] +store_suit_point [ 133, STREET_POINT, -235.933 -279.102 -0.5 ] +store_suit_point [ 134, STREET_POINT, -227.272 -274.102 -0.5 ] +store_suit_point [ 135, STREET_POINT, -238.772 -254.184 -0.5 ] +store_suit_point [ 136, FRONT_DOOR_POINT, -275.145 -275.184 0.000730472, 34 ] +store_suit_point [ 137, FRONT_DOOR_POINT, -213.792 -237.452 0.000818916, 36 ] +store_suit_point [ 138, STREET_POINT, -225.933 -296.423 -0.5 ] +store_suit_point [ 139, STREET_POINT, -217.272 -291.423 -0.5 ] +store_suit_point [ 140, STREET_POINT, -216.282 -304.923 -0.5 ] +store_suit_point [ 141, STREET_POINT, -212.04 -296.485 -0.5 ] +store_suit_point [ 142, STREET_POINT, -204.282 -298.923 -0.5 ] +store_suit_point [ 143, STREET_POINT, -204.282 -308.923 -0.5 ] +store_suit_point [ 144, STREET_POINT, -185.282 -308.923 -0.5 ] +store_suit_point [ 145, STREET_POINT, -174.282 -308.923 -0.5 ] +store_suit_point [ 146, STREET_POINT, -174.282 -298.923 -0.5 ] +store_suit_point [ 147, STREET_POINT, -185.282 -298.923 -0.5 ] +store_suit_point [ 148, FRONT_DOOR_POINT, -182.282 -319.923 0.00147219, 40 ] +store_suit_point [ 149, FRONT_DOOR_POINT, -188.282 -287.923 0, 39 ] +store_suit_point [ 150, STREET_POINT, -134.282 -308.923 -0.5 ] +store_suit_point [ 151, STREET_POINT, -134.282 -298.923 -0.5 ] +store_suit_point [ 152, STREET_POINT, -124.282 -313.923 -0.5 ] +store_suit_point [ 153, STREET_POINT, -119.282 -323.923 -0.5 ] +store_suit_point [ 154, STREET_POINT, -109.282 -323.923 -0.5 ] +store_suit_point [ 155, STREET_POINT, -117.282 -305.923 -0.5 ] +store_suit_point [ 156, STREET_POINT, -119.282 -343.923 -0.5 ] +store_suit_point [ 157, STREET_POINT, -109.282 -343.923 -0.5 ] +store_suit_point [ 158, STREET_POINT, -119.282 -358.923 -0.5 ] +store_suit_point [ 159, STREET_POINT, -134.282 -358.923 -0.5 ] +store_suit_point [ 160, STREET_POINT, -134.282 -368.923 -0.5 ] +store_suit_point [ 161, STREET_POINT, -109.282 -368.923 -0.5 ] +store_suit_point [ 162, FRONT_DOOR_POINT, -112.282 -379.923 0.00147219, 43 ] +store_suit_point [ 163, STREET_POINT, -147.282 -358.923 -0.5 ] +store_suit_point [ 164, STREET_POINT, -174.282 -358.923 -0.5 ] +store_suit_point [ 165, STREET_POINT, -174.282 -368.923 -0.5 ] +store_suit_point [ 166, STREET_POINT, -147.282 -368.923 -0.5 ] +store_suit_point [ 167, FRONT_DOOR_POINT, -147.282 -347.923 0.00147219, 44 ] +store_suit_point [ 168, STREET_POINT, -192.282 -365.923 -0.5 ] +store_suit_point [ 169, STREET_POINT, -199.282 -383.923 -0.5 ] +store_suit_point [ 170, STREET_POINT, -189.282 -383.923 -0.5 ] +store_suit_point [ 171, STREET_POINT, -185.282 -372.923 -0.5 ] +store_suit_point [ 172, STREET_POINT, -199.282 -396.923 -0.5 ] +store_suit_point [ 173, STREET_POINT, -199.282 -413.923 -0.5 ] +store_suit_point [ 174, STREET_POINT, -189.282 -413.923 -0.5 ] +store_suit_point [ 175, STREET_POINT, -189.282 -396.923 -0.5 ] +store_suit_point [ 176, FRONT_DOOR_POINT, -210.282 -395.923 0.00147219, 45 ] +store_suit_point [ 177, FRONT_DOOR_POINT, -176.282 -398.923 0.00147219, 47 ] +store_suit_point [ 178, STREET_POINT, -191.282 -430.923 -0.5 ] +store_suit_point [ 179, STREET_POINT, -174.282 -438.923 -0.5 ] +store_suit_point [ 180, STREET_POINT, -174.282 -428.923 -0.5 ] +store_suit_point [ 181, STREET_POINT, -184.282 -423.923 -0.5 ] +store_suit_point [ 182, STREET_POINT, -152.282 -438.923 -0.5 ] +store_suit_point [ 183, STREET_POINT, -134.282 -438.923 -0.5 ] +store_suit_point [ 184, STREET_POINT, -134.282 -428.923 -0.5 ] +store_suit_point [ 185, STREET_POINT, -152.282 -428.923 -0.5 ] +store_suit_point [ 186, FRONT_DOOR_POINT, -152.282 -449.923 0.00147219, 49 ] +store_suit_point [ 187, STREET_POINT, -119.282 -438.923 -0.5 ] +store_suit_point [ 188, STREET_POINT, -119.282 -453.923 -0.5 ] +store_suit_point [ 189, STREET_POINT, -119.282 -413.923 -0.5 ] +store_suit_point [ 190, STREET_POINT, -119.282 -428.923 -0.5 ] +store_suit_point [ 192, STREET_POINT, -101.282 -413.923 -0.5 ] +store_suit_point [ 193, FRONT_DOOR_POINT, -103.282 -402.923 0, 50 ] +store_suit_point [ 194, STREET_POINT, -79.2821 -420.923 -0.5 ] +store_suit_point [ 196, FRONT_DOOR_POINT, -68.2821 -420.923 0.00147219, 51 ] +store_suit_point [ 197, STREET_POINT, -79.2821 -453.923 -0.5 ] +store_suit_point [ 198, STREET_POINT, -79.2821 -413.923 -0.5 ] +store_suit_point [ 200, FRONT_DOOR_POINT, -96.873 -299.32 0.00274671, 42 ] +store_suit_point [ 201, SIDE_DOOR_POINT, 55 -28 0, 2 ] +store_suit_point [ 202, SIDE_DOOR_POINT, 5 -28 0, 1 ] +store_suit_point [ 203, SIDE_DOOR_POINT, 45 -50 0, 4 ] +store_suit_point [ 204, SIDE_DOOR_POINT, -55 -48 0, 5 ] +store_suit_point [ 205, SIDE_DOOR_POINT, -15 -10 0, 7 ] +store_suit_point [ 206, SIDE_DOOR_POINT, -65 0 0, 8 ] +store_suit_point [ 207, SIDE_DOOR_POINT, -135 -10 0, 9 ] +store_suit_point [ 208, SIDE_DOOR_POINT, -105 -80 0, 13 ] +store_suit_point [ 209, SIDE_DOOR_POINT, -145 -43 0, 16 ] +store_suit_point [ 210, SIDE_DOOR_POINT, -139 -86.9282 0, 17 ] +store_suit_point [ 211, SIDE_DOOR_POINT, -186.141 -88.5788 0, 16 ] +store_suit_point [ 212, SIDE_DOOR_POINT, -162.034 -176.447 0, 19 ] +store_suit_point [ 213, SIDE_DOOR_POINT, -125 -149.282 -0.002759, 20 ] +store_suit_point [ 214, SIDE_DOOR_POINT, -75 -157.282 -0.002759, 22 ] +store_suit_point [ 215, SIDE_DOOR_POINT, -80 -109.282 -0.002759, 25 ] +store_suit_point [ 216, SIDE_DOOR_POINT, -15.0001 -142.282 -0.00216243, 26 ] +store_suit_point [ 217, SIDE_DOOR_POINT, -50.0001 -249.282 -0.00216249, 27 ] +store_suit_point [ 218, SIDE_DOOR_POINT, -105 -249.282 -0.00216258, 28 ] +store_suit_point [ 219, SIDE_DOOR_POINT, -165 -246.282 -0.00216249, 29 ] +store_suit_point [ 220, SIDE_DOOR_POINT, -193.632 -222.359 -0.00217208, 30 ] +store_suit_point [ 223, SIDE_DOOR_POINT, -271.424 -247.631 0.00172532, 34 ] +store_suit_point [ 224, SIDE_DOOR_POINT, -239.283 -223.301 0.00172532, 36 ] +store_suit_point [ 225, SIDE_DOOR_POINT, -213.682 -320.923 0.00151473, 40 ] +store_suit_point [ 226, SIDE_DOOR_POINT, -205.621 -261.603 0.00127512, 39 ] +store_suit_point [ 227, SIDE_DOOR_POINT, -174.282 -283.923 0.00152546, 39 ] +store_suit_point [ 228, SIDE_DOOR_POINT, -124.282 -283.923 0.00152546, 42 ] +store_suit_point [ 229, SIDE_DOOR_POINT, -94.282 -356.923 0.00152546, 43 ] +store_suit_point [ 230, SIDE_DOOR_POINT, -163.282 -344.923 0.00152546, 44 ] +store_suit_point [ 231, SIDE_DOOR_POINT, -206.4 -362.506 0.00163785, 45 ] +store_suit_point [ 232, SIDE_DOOR_POINT, -169.282 -413.923 0.00164177, 47 ] +store_suit_point [ 233, SIDE_DOOR_POINT, -181.282 -451.923 0.00164177, 49 ] +store_suit_point [ 234, SIDE_DOOR_POINT, -89.282 -398.923 0.00164177, 50 ] +store_suit_point [ 235, SIDE_DOOR_POINT, -64.282 -443.923 0.00164177, 51 ] +store_suit_point [ 236, STREET_POINT, -217.989 -130.18 -0.5 ] +store_suit_point [ 237, FRONT_DOOR_POINT, -199.865 -133.572 0, 31 ] +store_suit_point [ 238, STREET_POINT, -230.489 -108.529 -0.5 ] +store_suit_point [ 239, STREET_POINT, -269.461 -131.029 -0.5 ] +store_suit_point [ 240, FRONT_DOOR_POINT, -242.052 -102.503 0, 31 ] +store_suit_point [ 241, STREET_POINT, -204.15 -174.151 -0.5 ] +store_suit_point [ 242, STREET_POINT, -308.432 -153.529 -0.5 ] +store_suit_point [ 243, STREET_POINT, -295.932 -175.18 -0.5 ] +store_suit_point [ 244, SIDE_DOOR_POINT, -303.056 -190.84 0, 33 ] +group "donaldsDreamland" [ + visgroup "9101" [ + vis [ "9101" "9102" "9103" "9104" "9105" ] + battle_cell [ 20 20 25 30 -0.5 ] + street "street_tight_corner_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 5 0 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 45 40 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb2:12_8_DNARoot" [ + pos [ 55 40 0 ] + nhpr [ -90 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.99999 -18 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 18.46 -5.24 0 ] + nhpr [ 60 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ 55 15 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.76 0.22 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb1:12_8_DNARoot" [ + pos [ 5 10 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -0.26 -5.45 0 ] + nhpr [ 30 0 0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.52 7.92 18.26 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.89 -52.96 19.04 ] + nhpr [ -180 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb1:13_9_8_DNARoot" [ + pos [ 5 -5 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6 -17 0 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb1:20_DNARoot" [ + pos [ 5 25 0 ] + nhpr [ 90 0 0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + prop "linktunnel_dl_9000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 5 40 0 ] + nhpr [ 0 0 0 ] + sign [ + code [ "tunnel_sign_red" ] + color [ 0.360784 0.309804 0.372549 1 ] + pos [ 0 0 -2.3 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.07 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.89 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.68 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 19.6144 5.62606 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 33.2928 29.0241 -0.500021 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "9102" [ + vis [ "9102" "9103" "9104" "9105" "9101" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 2 3 ] + suit_edge [ 3 4 ] + suit_edge [ 5 6 ] + suit_edge [ 6 7 ] + suit_edge [ 7 0 ] + suit_edge [ 0 8 ] + suit_edge [ 8 0 ] + suit_edge [ 1 9 ] + suit_edge [ 9 1 ] + suit_edge [ 201 7 ] + suit_edge [ 7 201 ] + suit_edge [ 202 3 ] + suit_edge [ 3 202 ] + battle_cell [ 20 20 35 -20 -0.5 ] + street "street_tight_corner_mirror_DNARoot" [ + code [ "street_tight_corner_mirror" ] + pos [ 5 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb2:12_8_DNARoot" [ + pos [ 55 -40 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 14.13 -6.15 0 ] + nhpr [ 90 0 0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + landmark_building "tb1:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Snuggle Inn" ] + pos [ 5 -20 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -0.22 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.15 0 0.17 ] + scale [ 1.3 1 1.3 ] + kern [ 0.084769 ] + wiggle [ 8.56936 ] + stumble [ 0.088667 ] + stomp [ -0.00166 ] + width [ 34.503 ] + height [ 34.503 ] + flags [ "cd" ] + text [ + letters [ "s" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 55 -15 0 ] + nhpr [ -90 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 20.16 1.05 20.14 ] + nhpr [ 90 0 0 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 21.09 -3.88 0 ] + nhpr [ -45 0 0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 4.59 -21.78 0 ] + nhpr [ -90 0 -0 ] + scale [ 3.5 3.5 3.5 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 5 -40 0 ] + nhpr [ 90 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5 -3 0 ] + nhpr [ -45 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4 -6 0 ] + nhpr [ -105 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb2:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Forty Winks for the Price of Twenty" ] + pos [ 55 0 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.02 0 -4.2 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.27451 0 0.54902 1 ] + pos [ 0 0 0.33 ] + scale [ 0.6 1 0.6 ] + width [ 23.9664 ] + height [ 23.9664 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0.08 0 1.02 ] + nhpr [ 0 0 1 ] + scale [ 1.2 1 1.3 ] + kern [ 0.096943 ] + width [ 27.3149 ] + height [ 27.3149 ] + text [ + letters [ "4" ] + ] + text [ + letters [ "0" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.27451 0 0.54902 1 ] + pos [ 0 0 -0.1 ] + scale [ 0.7 1 0.5 ] + width [ 33.4739 ] + height [ 33.4739 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 8.59705 -22.5911 1.14441e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9103" [ + vis [ "9103" "9102" "9101" "9104" "9105" "9106" "9107" "9108" ] + suit_edge [ 4 10 ] + suit_edge [ 10 11 ] + suit_edge [ 12 13 ] + suit_edge [ 13 5 ] + suit_edge [ 13 14 ] + suit_edge [ 14 13 ] + suit_edge [ 10 14 ] + suit_edge [ 14 10 ] + suit_edge [ 203 13 ] + suit_edge [ 13 203 ] + suit_edge [ 203 10 ] + suit_edge [ 10 203 ] + battle_cell [ 20 20 25 -60 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 45 -40 1.52588e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 45 -60 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 12.54 -6.41 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 2.14 4.29 13.34 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb4:13_9_8_DNARoot" [ + pos [ 5 -80 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb4:12_8_DNARoot" [ + pos [ 45 -40 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 4.17 8.21 19.56 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.1 -34.46 0 ] + nhpr [ 90 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb4:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Ed's Red Bed Spreads" ] + pos [ 36.8774 -80 0 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 1.97 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.07 0 0.44 ] + scale [ 0.9 1 1 ] + width [ 25 ] + height [ 25 ] + flags [ "b" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb4:12_8_DNARoot" [ + pos [ 45 -80 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.16 0.97 19.67 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb4:13_9_8_DNARoot" [ + pos [ 25 -80 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5 0 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 13.24 -6.25 0 ] + nhpr [ -135 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 7.85 3.49 29.08 ] + nhpr [ 30 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 42.7283 -56.0031 1.52588e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "9104" [ + vis [ "9104" "9103" "9102" "9101" "9105" "9106" "9107" "9108" ] + suit_edge [ 11 15 ] + suit_edge [ 16 12 ] + battle_cell [ 20 20 -5 -60 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 5 -40 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb4:10_DNARoot" [ + pos [ 5 -80 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 18.27 -3.00001 1.52588e-005 ] + nhpr [ -75 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.596078 0.74902 0.74902 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 19.33 -3.17001 1.52588e-005 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.647059 0.619608 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 17.33 -3.17004 1.52588e-005 ] + nhpr [ -45 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -15 -40 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -11.7111 -73.417 0 ] + nhpr [ 150 0 -0 ] + ] + ] + visgroup "9105" [ + vis [ "9105" "9104" "9103" "9102" "9106" "9107" "9108" "9101" ] + suit_edge [ 15 17 ] + suit_edge [ 17 18 ] + suit_edge [ 19 20 ] + suit_edge [ 20 16 ] + suit_edge [ 17 21 ] + suit_edge [ 21 17 ] + suit_edge [ 20 21 ] + suit_edge [ 21 20 ] + suit_edge [ 204 19 ] + suit_edge [ 19 204 ] + suit_edge [ 204 18 ] + suit_edge [ 18 204 ] + suit_edge [ 205 22 ] + suit_edge [ 22 205 ] + suit_edge [ 205 25 ] + suit_edge [ 25 205 ] + battle_cell [ 20 20 -35 -60 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -15 -80 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb4:10_DNARoot" [ + pos [ -15 -80 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb5:20_10_DNARoot" [ + pos [ -34.99 -89.98 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb5:20_10_DNARoot" [ + pos [ -34.99 -79.98 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 16.52 -4.15 0.05 ] + nhpr [ -45 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 11.55 -7.7 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 22.54 -0.79 28.74 ] + nhpr [ -90 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ -2.33 -6.25 0 ] + nhpr [ -90 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 7.37 -1.21 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb5:20_10_DNARoot" [ + pos [ -55 -80 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 7.88 -1.31 0 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb5:13_9_8_DNARoot" [ + pos [ -55 -55 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Cloud Nine Design" ] + pos [ -54 -66 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0.00264888 0 1.851 ] + nhpr [ 0 0 -0.00446188 ] + scale [ 1.11483 1 0.708841 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 0.764316 ] + scale [ 1.2 1 1.08633 ] + kern [ 0.030098 ] + wiggle [ 3.6318 ] + width [ 33.3441 ] + height [ 33.3441 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -0.356889 ] + width [ 35.1902 ] + height [ 35.1902 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -17.7265 -41.74 -3.8147e-006 ] + nhpr [ -29.9892 0 -0 ] + ] + ] + visgroup "9106" [ + vis [ "9106" "9105" "9104" "9107" "9108" "9109" "9110" "9111" "9103" "9112" ] + suit_edge [ 18 22 ] + suit_edge [ 22 23 ] + suit_edge [ 24 25 ] + suit_edge [ 25 19 ] + suit_edge [ 22 26 ] + suit_edge [ 26 22 ] + suit_edge [ 25 26 ] + suit_edge [ 26 25 ] + suit_edge [ 22 27 ] + suit_edge [ 27 22 ] + suit_edge [ 25 27 ] + suit_edge [ 27 25 ] + battle_cell [ 20 20 -39 -29 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -55 -1.90735e-006 -9.91821e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb7:20_10_DNARoot" [ + pos [ -15 -25 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb8:20_10_DNARoot" [ + pos [ -40 0 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 4 -15 0 ] + nhpr [ 180 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 9 -7 0 ] + nhpr [ -120 0 0 ] + ] + ] + flat_building "tb7:20_10_DNARoot" [ + pos [ -15 0 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb7:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Big Mama's Bahama Pajamas" ] + pos [ -15 -15 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.32 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.776471 0.776471 1 ] + pos [ 0 0 1.03 ] + scale [ 0.7 1 0.7 ] + kern [ 0.05 ] + width [ 26.9942 ] + height [ 26.9942 ] + flags [ "bd" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.776471 0.776471 1 ] + pos [ 0 0 0.07 ] + scale [ 1.2 1 1.1 ] + kern [ 0.043992 ] + width [ 23.6368 ] + height [ 23.6368 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "j" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb8:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Cat Nip for Cat Naps" ] + pos [ -55 0 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -3.79 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.180392 0.352941 0.352941 1 ] + pos [ -0.08 0 1.19 ] + scale [ 0.9 1 0.8 ] + kern [ 0.069609 ] + width [ 41.2984 ] + height [ 41.2984 ] + flags [ "b" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.180392 0.352941 0.352941 1 ] + pos [ 0 0 -0.17 ] + scale [ 0.9 1 0.7 ] + kern [ 0.021039 ] + width [ 43.5028 ] + height [ 43.5028 ] + flags [ "b" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.180392 0.352941 0.352941 1 ] + pos [ 0 0 0.72 ] + scale [ 0.5 1 0.5 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -52.857 -37.258 -9.91821e-005 ] + nhpr [ 135 0 0 ] + ] + ] + visgroup "9107" [ + vis [ "9107" "9106" "9108" "9109" "9110" "9111" "9112" "9105" "9104" "9103" "9113" ] + suit_edge [ 23 28 ] + suit_edge [ 29 24 ] + suit_edge [ 206 23 ] + suit_edge [ 23 206 ] + suit_edge [ 206 24 ] + suit_edge [ 24 206 ] + battle_cell [ 20 20 -75 -20 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -55 0 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb13:13_9_8_DNARoot" [ + pos [ -55 -40 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 20 -20 8.48 ] + nhpr [ -90 0 0 ] + scale [ 3 3 3 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.6 3.09 18.78 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb13:13_9_8_DNARoot" [ + pos [ -75 -40 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3 0 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb9:13_9_8_DNARoot" [ + pos [ -95 0 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 13.11 -6.72 0 ] + nhpr [ 0 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb8:13_9_8_DNARoot" [ + pos [ -75 0 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.6 6.55 19.31 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -73.4992 -34.5263 0 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "9108" [ + vis [ "9108" "9107" "9106" "9105" "9104" "9103" "9109" "9110" "9111" "9112" "9113" "9114" ] + suit_edge [ 28 30 ] + suit_edge [ 30 31 ] + suit_edge [ 32 33 ] + suit_edge [ 33 29 ] + suit_edge [ 28 34 ] + suit_edge [ 34 28 ] + suit_edge [ 29 34 ] + suit_edge [ 34 29 ] + suit_edge [ 207 30 ] + suit_edge [ 30 207 ] + suit_edge [ 207 33 ] + suit_edge [ 33 207 ] + battle_cell [ 20 20 -109 -26 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -135 -40 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -115 0 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -135 0 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -135 -40 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 5.19 2.8 30.18 ] + nhpr [ 45 0 0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ 0 0 0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 1.77 -35.7 0 ] + nhpr [ 135 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -135 -20 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 14 -17 0 ] + nhpr [ -45 0 0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4.18 3.22 29.8 ] + nhpr [ -15 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.48 ] + nhpr [ 0 0 -5 ] + scale [ 1 1 1.4 ] + width [ 25.457 ] + height [ 25.457 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.8 ] + nhpr [ 0 0 -4 ] + scale [ 1 1 1.3 ] + width [ 28.3801 ] + height [ 28.3801 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.99 ] + nhpr [ 0 0 -3 ] + scale [ 1.3 1 1.3 ] + width [ 22.6901 ] + height [ 22.6901 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Deep Sleep for Cheap" ] + pos [ -105.52 -0.1 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.51 ] + scale [ 0.7 1 0.9 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.07 0 0.99 ] + scale [ 2.3 1 1 ] + width [ 25 ] + height [ 25 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.2 0 0.4 1 ] + pos [ 0 0 0.28 ] + nhpr [ 0 0 -1 ] + scale [ 1.1 1 0.6 ] + width [ 27.5657 ] + height [ 27.5657 ] + flags [ "d" ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + ] + visgroup "9109" [ + vis [ "9109" "9108" "9110" "9111" "9112" "9113" "9114" "9107" "9106" ] + suit_edge [ 31 35 ] + suit_edge [ 35 36 ] + suit_edge [ 37 38 ] + suit_edge [ 38 32 ] + suit_edge [ 38 39 ] + suit_edge [ 39 38 ] + suit_edge [ 35 39 ] + suit_edge [ 39 35 ] + suit_edge [ 208 38 ] + suit_edge [ 38 208 ] + suit_edge [ 208 35 ] + suit_edge [ 35 208 ] + battle_cell [ 20 20 -115 -60 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -95 -40 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + landmark_building "tb13:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Clock Cleaners" ] + pos [ -95 -51 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 10.37 -2.66 4.04 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.411765 0.607843 1 ] + pos [ -0.27 0 -1.74 ] + scale [ 1.2 1 1.2 ] + kern [ 0.074307 ] + wiggle [ 4.1216 ] + stumble [ 0.056458 ] + stomp [ 0.034684 ] + flags [ "dc" ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.501961 1 ] + pos [ -0.56 0 -0.3 ] + scale [ 1.2 1 1.2 ] + kern [ 0.040252 ] + wiggle [ 4.74873 ] + stomp [ 0.035406 ] + flags [ "c" ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -95 -40 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 6.97 -1.29 0 ] + nhpr [ 180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -95 -65 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:20_10_DNARoot" [ + pos [ -115 -80 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.71 -2.63 0 ] + nhpr [ 0 0 0 ] + scale [ 1.2 1.2 1.2 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 10 -1 0 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -95 -80 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 12.73 3.7 20.37 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 20.98 -4.49 0 ] + nhpr [ 75 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -130.754 -45.1123 0 ] + nhpr [ 45 0 0 ] + ] + ] + visgroup "9110" [ + vis [ "9110" "9111" "9112" "9113" "9114" "9115" "9109" "9108" "9107" "9106" ] + suit_edge [ 40 41 ] + suit_edge [ 42 43 ] + suit_edge [ 41 37 ] + suit_edge [ 36 42 ] + suit_edge [ 209 36 ] + suit_edge [ 36 209 ] + suit_edge [ 209 37 ] + suit_edge [ 37 209 ] + battle_cell [ 20 20 -144.637 -63.0188 -0.5 ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -135 -80 0 ] + nhpr [ 60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -154.9 -45.33 0 ] + nhpr [ 15 0 0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -0.85 -6.68 0 ] + nhpr [ 30 0 0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -172.58 -63.01 0 ] + nhpr [ 45 0 0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.92 4.05 29.46 ] + nhpr [ -15 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 7.43 -6.06 0 ] + nhpr [ 135 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -136.903 -76.9567 0 ] + nhpr [ -150 0 -0 ] + ] + ] + visgroup "9111" [ + vis [ "9111" "9110" "9109" "9108" "9107" "9106" "9112" "9113" "9114" "9115" "9116" "9117" ] + suit_edge [ 43 44 ] + suit_edge [ 44 45 ] + suit_edge [ 45 46 ] + suit_edge [ 47 48 ] + suit_edge [ 48 49 ] + suit_edge [ 49 40 ] + suit_edge [ 44 50 ] + suit_edge [ 50 44 ] + suit_edge [ 49 50 ] + suit_edge [ 50 49 ] + suit_edge [ 48 51 ] + suit_edge [ 51 48 ] + suit_edge [ 45 51 ] + suit_edge [ 51 45 ] + suit_edge [ 210 40 ] + suit_edge [ 40 210 ] + suit_edge [ 210 43 ] + suit_edge [ 43 210 ] + suit_edge [ 211 46 ] + suit_edge [ 46 211 ] + suit_edge [ 211 47 ] + suit_edge [ 47 211 ] + battle_cell [ 20 20 -162.923 -87.9166 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -155 -114.64 -1.14441e-005 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -147.5 -101.651 0 ] + nhpr [ -120 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -182.142 -81.665 0 ] + nhpr [ 60 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 5.00761 -5.35342 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb17:13_9_8_DNARoot" [ + pos [ -135 -80 0 ] + nhpr [ -120 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -189.642 -94.6553 0 ] + nhpr [ 60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.11 -18.12 10.62 ] + nhpr [ 90 0 0 ] + scale [ 3 3 3 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.83 3.42 14.42 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb16:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Lights Out Electric Co." ] + pos [ -177.14 -72.99 0 ] + nhpr [ 60 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.8 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.458824 0.0156863 0.172549 1 ] + pos [ -0.57 0 0.68 ] + nhpr [ 0 0 -5 ] + scale [ 1.2 1 1.2 ] + kern [ 0.1 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.258824 1 ] + pos [ 0 0 -0.17 ] + scale [ 0.9 1 0.8 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "." ] + ] + ] + ] + ] + landmark_building "tb17:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Crib Notes - Music to Sleep By" ] + pos [ -142 -92.1244 0 ] + nhpr [ -120 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0.425742 0 1.03351 ] + scale [ 1 1 1.15324 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.501961 0 1 ] + pos [ -0.146047 0 0.74845 ] + scale [ 0.918435 1 1.04264 ] + width [ 23.97 ] + height [ 23.97 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -178.191 -88.0458 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9112" [ + vis [ "9112" "9111" "9110" "9109" "9108" "9107" "9106" "9113" "9114" "9115" "9116" "9117" ] + suit_edge [ 46 52 ] + suit_edge [ 53 47 ] + suit_edge [ 54 53 ] + suit_edge [ 52 55 ] + battle_cell [ 20 20 -174.03 -114.949 -0.5 ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -155 -114.64 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb19:12_8_DNARoot" [ + pos [ -189.64 -134.64 0 ] + nhpr [ 105 0 0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 6.02 1.13 20.56 ] + nhpr [ 30 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.76 ] + nhpr [ 0 0 -4 ] + scale [ 1.3 1 1.3 ] + width [ 26.3553 ] + height [ 26.3553 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.37 ] + nhpr [ 0 0 -4 ] + scale [ 1.3 1 1.3 ] + width [ 19.1865 ] + height [ 19.1865 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.4 ] + nhpr [ 0 0 -2 ] + width [ 21.9303 ] + height [ 21.9303 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2.26 ] + nhpr [ 0 0 -3 ] + width [ 32.4044 ] + height [ 32.4044 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -195 -114.65 0 ] + nhpr [ 75 0 0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -5.7 -8.73 0 ] + nhpr [ 60 0 0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.71 -2.27 0.02 ] + nhpr [ -105 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.62 -2.12 0.02 ] + nhpr [ -60 0 0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.44 1.17 21.18 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9113" [ + vis [ "9113" "9112" "9114" "9115" "9116" "9117" "9111" "9110" "9109" "9108" "9107" ] + suit_edge [ 55 56 ] + suit_edge [ 56 57 ] + suit_edge [ 58 59 ] + suit_edge [ 59 54 ] + suit_edge [ 56 60 ] + suit_edge [ 60 56 ] + suit_edge [ 59 60 ] + suit_edge [ 60 59 ] + battle_cell [ 20 20 -165.926 -133.016 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -145 -131.96 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb17:20_DNARoot" [ + pos [ -155 -114.64 0 ] + nhpr [ -60 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ -1.62 -4.76 0 ] + nhpr [ -120 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.07 -4.84 0 ] + nhpr [ 30 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb19:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Relax to the Max" ] + pos [ -182.14 -147.63 0 ] + nhpr [ 120 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -4.85 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.23 0 0.56 ] + nhpr [ 0 0 2 ] + scale [ 0.7 1 0.7 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0.19 0 1.21 ] + nhpr [ 0 0 1 ] + scale [ 1.3 1 1.2 ] + kern [ 0.07157 ] + width [ 21.4037 ] + height [ 21.4037 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "X" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0.2 0 -0.25 ] + width [ 18.909 ] + height [ 18.909 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "X" ] + ] + ] + ] + ] + ] + visgroup "9114" [ + vis [ "9114" "9113" "9112" "9111" "9110" "9109" "9108" "9115" "9116" "9117" "9118" "9119" "9120" ] + suit_edge [ 57 61 ] + suit_edge [ 61 62 ] + suit_edge [ 63 64 ] + suit_edge [ 64 58 ] + suit_edge [ 64 65 ] + suit_edge [ 65 64 ] + suit_edge [ 61 65 ] + suit_edge [ 65 61 ] + battle_cell [ 20 20 -157.089 -150.519 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -135 -149.28 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb20:20_10_DNARoot" [ + pos [ -140 -140.62 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 10.7 -6.71 0 ] + nhpr [ -120 0 0 ] + ] + ] + landmark_building "tb20:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "PJ's Taxi Service" ] + pos [ -148 -126.77 0 ] + nhpr [ -60 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.31 0 -0.22 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.2 0.4 1 ] + pos [ 0 0 0.45 ] + scale [ 1.1 1 1.3 ] + kern [ 0.055426 ] + wiggle [ 6.53025 ] + stumble [ 0.08523 ] + stomp [ 0.028103 ] + width [ 20.6024 ] + height [ 20.6024 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb19:20_10_DNARoot" [ + pos [ -169.63 -169.29 0 ] + nhpr [ 120 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10.73 0.01 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9115" [ + vis [ "9115" "9116" "9117" "9118" "9119" "9120" "9114" "9113" "9112" "9111" "9110" ] + suit_edge [ 62 66 ] + suit_edge [ 67 63 ] + suit_edge [ 68 67 ] + suit_edge [ 66 69 ] + suit_edge [ 212 62 ] + suit_edge [ 62 212 ] + suit_edge [ 212 63 ] + suit_edge [ 63 212 ] + suit_edge [ 213 68 ] + suit_edge [ 68 213 ] + suit_edge [ 213 69 ] + suit_edge [ 69 213 ] + battle_cell [ 20 20 -144.774 -166.092 -0.5 ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -135 -149.28 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb19:13_9_8_DNARoot" [ + pos [ -135 -189.28 0 ] + nhpr [ 165 0 0 ] + width [ 20.7 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.51 1.42 29.71 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10.2 -3 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0 0 0.36 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.88 ] + kern [ 0.02302 ] + wiggle [ -0.399769 ] + stumble [ -0.006415 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.501961 1 ] + pos [ -0.1 0 1.03 ] + scale [ 0.6 1 0.4 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + flat_building "tb19:13_9_8_DNARoot" [ + pos [ -154.99 -183.92 0 ] + nhpr [ 135 0 0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 17.43 1.8 25.06 ] + nhpr [ 105 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -155.376 -177.717 -7.62939e-006 ] + nhpr [ 142.183 0 -0 ] + ] + ] + visgroup "9116" [ + vis [ "9116" "9117" "9118" "9119" "9120" "9115" "9114" "9113" "9112" "9111" ] + suit_edge [ 69 70 ] + suit_edge [ 71 68 ] + battle_cell [ 20 20 -125.053 -169.555 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -115 -149.28 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb22:20_10_DNARoot" [ + pos [ -115 -189.32 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb20:13_9_8_DNARoot" [ + pos [ -135 -149.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 13.31 -35.4 0 ] + nhpr [ -30 0 0 ] + ] + ] + ] + visgroup "9117" [ + vis [ "9117" "9116" "9118" "9119" "9120" "9115" "9114" "9113" "9112" "9111" ] + suit_edge [ 70 72 ] + suit_edge [ 72 73 ] + suit_edge [ 74 75 ] + suit_edge [ 75 71 ] + suit_edge [ 72 76 ] + suit_edge [ 76 72 ] + suit_edge [ 75 76 ] + suit_edge [ 76 75 ] + suit_edge [ 214 73 ] + suit_edge [ 73 214 ] + suit_edge [ 214 74 ] + suit_edge [ 74 214 ] + battle_cell [ 20 20 -97.6172 -165.966 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -75 -149.28 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb22:13_9_8_DNARoot" [ + pos [ -101.5 -189.28 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_crate" ] + pos [ 10.52 -2.66 0 ] + nhpr [ -45 0 0 ] + scale [ 1.3 1.3 1.3 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.79 -3.23 0 ] + nhpr [ -90 0 0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb22:12_8_DNARoot" [ + pos [ -75 -174.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -13.68 -23.05 -7.62939e-006 ] + nhpr [ 45 0 -0 ] + scale [ 3 3 3 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 10.05 -4.97 0 ] + nhpr [ -45 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 2.38 -1.42 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:12_8_DNARoot" [ + pos [ -75 -149.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + landmark_building "tb22:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Sleepy Time Pieces" ] + pos [ -89 -189.28 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.11 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 1.1 ] + scale [ 1.2 1 1.2 ] + kern [ 0.035327 ] + wiggle [ 5.1578 ] + stumble [ 0.035128 ] + stomp [ 0.02 ] + width [ 30.7078 ] + height [ 30.7078 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.1 ] + scale [ 1.1 1 1 ] + width [ 19.7433 ] + height [ 19.7433 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ -72 -189.28 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb22:20_DNARoot" [ + pos [ -75 -164.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.17 3.07 18.29 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -78.9421 -169.841 -3.8147e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9118" [ + vis [ "9118" "9117" "9116" "9115" "9119" "9120" "9121" "9122" "9114" ] + suit_edge [ 73 77 ] + suit_edge [ 77 78 ] + suit_edge [ 79 80 ] + suit_edge [ 80 74 ] + suit_edge [ 80 81 ] + suit_edge [ 81 80 ] + suit_edge [ 77 81 ] + suit_edge [ 81 77 ] + suit_edge [ 215 79 ] + suit_edge [ 79 215 ] + suit_edge [ 215 78 ] + suit_edge [ 78 215 ] + battle_cell [ 20 20 -88.666 -135.985 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -115 -149.28 -0.000152588 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb20:13_9_8_DNARoot" [ + pos [ -115 -149.28 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 11.6 -1.27 0 ] + nhpr [ 180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb25:13_9_8_DNARoot" [ + pos [ -115 -134.28 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.61 -6.9 0 ] + nhpr [ -45 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -11.95 -37.25 -0.02 ] + nhpr [ -105 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb25:13_9_8_DNARoot" [ + pos [ -115 -119.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ -70 -109.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Curl Up Beauty Parlor" ] + pos [ -102.128 -109.28 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.14 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.305882 0.0431373 0.435294 1 ] + pos [ 0.15 0 0.72 ] + nhpr [ 0 0 1 ] + scale [ 1.4 1 1.4 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.4 1 ] + pos [ 0 0 0.04 ] + scale [ 0.7 1 0.7 ] + width [ 21.0606 ] + height [ 21.0606 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb25:12_8_DNARoot" [ + pos [ -115 -109.28 0 ] + nhpr [ 0 0 0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.3 0.5 29.47 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 14.29 -14.78 0 ] + nhpr [ -180 0 0 ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ -90 -109.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -109.676 -133.117 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9119" [ + vis [ "9119" "9118" "9117" "9116" "9115" "9114" "9120" "9121" "9122" "9123" ] + suit_edge [ 78 82 ] + suit_edge [ 83 79 ] + battle_cell [ 20 20 -65.5982 -130.075 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -75 -149.28 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb22:20_DNARoot" [ + pos [ -55 -149.28 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb25:10_DNARoot" [ + pos [ -70 -109.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 5.15 -5.91 -0.02 ] + nhpr [ -15 0 0 ] + ] + ] + ] + visgroup "9120" [ + vis [ "9120" "9119" "9118" "9117" "9116" "9115" "9121" "9122" "9123" "9124" "9114" ] + suit_edge [ 84 85 ] + suit_edge [ 86 87 ] + suit_edge [ 87 83 ] + suit_edge [ 82 84 ] + suit_edge [ 87 88 ] + suit_edge [ 88 87 ] + suit_edge [ 84 88 ] + suit_edge [ 88 84 ] + suit_edge [ 216 86 ] + suit_edge [ 86 216 ] + suit_edge [ 216 85 ] + suit_edge [ 85 216 ] + suit_edge [ 217 95 ] + suit_edge [ 95 217 ] + suit_edge [ 217 94 ] + suit_edge [ 94 217 ] + battle_cell [ 20 20 -41.2023 -135.472 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -55 -109.28 -2.28882e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb25:10_DNARoot" [ + pos [ -50 -109.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb26:20_10_DNARoot" [ + pos [ -30 -99.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb26:20_10_DNARoot" [ + pos [ -30 -109.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb26:13_9_8_DNARoot" [ + pos [ -15 -109.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 13.09 -14.93 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 4.27 -4.67 0 ] + nhpr [ 45 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8.29 -3.48 0.01 ] + nhpr [ -60 0 0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 10.88 -4.69 0.01 ] + nhpr [ -120 0 0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb26:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Bed Time Stories" ] + pos [ -15 -123.28 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + pos [ 0.23544 0 1.96801 ] + scale [ 1 1 0.455463 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.184314 0.317647 0.223529 1 ] + pos [ 0 0 0.536784 ] + scale [ 1.3 1 1.3 ] + kern [ 0.144249 ] + stumble [ 0.043349 ] + stomp [ 0.054527 ] + width [ 25.261 ] + height [ 25.261 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb26:20_10_DNARoot" [ + pos [ -15 -134.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -22.2074 -137.403 -2.28882e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9121" [ + vis [ "9121" "9120" "9119" "9118" "9122" "9123" "9124" "9125" "9153" ] + suit_edge [ 85 89 ] + suit_edge [ 90 86 ] + battle_cell [ 20 20 -35.6592 -170.475 -0.5 ] + node "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -55 -149.28 -1.14441e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -15 -149.28 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -15 -169.28 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 25 -194.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 44.9999 -194.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 64.9999 -194.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + node "buildings" [ + flat_building "tb26:20_DNARoot" [ + pos [ -15 -149.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb26:13_9_8_DNARoot" [ + pos [ 5 -149.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 8.13 -7.33 -0.03 ] + nhpr [ 45 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 12 -26 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb22:20_DNARoot" [ + pos [ -55 -159.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb22:20_DNARoot" [ + pos [ -55 -174.28 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.67 -4.89 -0.03 ] + nhpr [ -15 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.01 3.28 19.17 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:20_DNARoot" [ + pos [ -55 -194.28 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 8.34 0.04 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 6.95 -37.31 7.04 ] + nhpr [ 90 0 0 ] + scale [ 3.2 3.2 3.2 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 65 -174.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 45 -174.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 15 -174.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 30 -174.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb26:13_9_8_DNARoot" [ + pos [ 5.00396 -174.286 0.17692 ] + nhpr [ 2.02428e-005 0.0132852 -0.0873023 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb26:10_DNARoot" [ + pos [ 5 -164.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 15.0039 -174.286 0.192157 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -50.3851 -173.687 -1.14441e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9122" [ + vis [ "9122" "9123" "9124" "9125" "9126" "9127" "9121" "9120" "9119" "9118" "9128" "9153" ] + suit_edge [ 89 91 ] + suit_edge [ 92 90 ] + battle_cell [ 20 20 -35.1817 -199.041 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -55 -189.28 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -15 -189.28 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb27:12_8_DNARoot" [ + pos [ 5 -209.28 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 5.16 -8.92 0 ] + nhpr [ 60 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ 5 -194.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 0.85 4.82 18.23 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2 -27 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -55 -209.28 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.33 2.83 18.67 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ 25 -194.28 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 65 -204.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 40 -194.28 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 50 -194.28 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 65 -194.28 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + ] + visgroup "9123" [ + vis [ "9123" "9122" "9121" "9120" "9119" "9118" "9124" "9125" "9126" "9127" "9128" ] + suit_edge [ 91 93 ] + suit_edge [ 93 94 ] + suit_edge [ 95 96 ] + suit_edge [ 96 92 ] + suit_edge [ 93 97 ] + suit_edge [ 97 93 ] + suit_edge [ 96 97 ] + suit_edge [ 97 96 ] + battle_cell [ 20 20 -34.9894 -229.251 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -15 -209.28 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb27:12_8_DNARoot" [ + pos [ -15 -209.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 4.94 -1.18 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb27:20_DNARoot" [ + pos [ -15 -234.28 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb27:12_8_DNARoot" [ + pos [ -15 -249.28 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 8.02 -2.42 0 ] + nhpr [ 0 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0 0 0.48 ] + scale [ 1.3 1 1.2 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.372549 0.54902 1 ] + pos [ 0 0 -0.85 ] + scale [ 0.7 1 0.7 ] + kern [ 0.04 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.09 0 0.78 ] + scale [ 0.5 1 0.3 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + flat_building "tb27:12_8_DNARoot" [ + pos [ -30 -249.28 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.84 -0.01 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 5.24 3.05 20.04 ] + nhpr [ 135 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 9 -1.28 0 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb27:12_8_DNARoot" [ + pos [ -45 -249.28 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4 5.15 19.84 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb27:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "The Sleepy Teepee" ] + pos [ -15 -218.28 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -0.24 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.356863 0.356863 1 ] + pos [ 0 0 0.09 ] + scale [ 1 1 1.1 ] + kern [ 0.079999 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "bd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -51.02 -214.393 -7.62939e-006 ] + nhpr [ 66.6442 0 -0 ] + ] + ] + visgroup "9124" [ + vis [ "9124" "9123" "9122" "9121" "9120" "9125" "9126" "9127" "9128" "9129" "9130" "9151" "9152" ] + suit_edge [ 94 98 ] + suit_edge [ 98 99 ] + suit_edge [ 100 101 ] + suit_edge [ 101 95 ] + suit_edge [ 101 102 ] + suit_edge [ 102 101 ] + suit_edge [ 98 102 ] + suit_edge [ 102 98 ] + battle_cell [ 20 20 -74.1396 -229.784 -0.5 ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -95 -249.28 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -75 -269.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -55 -249.28 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb28:12_8_DNARoot" [ + pos [ -55 -249.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.04 -6.63 -0.05 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -55 -259.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb28:12_8_DNARoot" [ + pos [ -55 -269.28 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 3.88 -3.31 -0.11 ] + nhpr [ 45 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -70 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 4.43 -5.07 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -70 -199.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb28:10_DNARoot" [ + pos [ -85 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb28:10_DNARoot" [ + pos [ -100 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.07 -1.7 0.01 ] + nhpr [ -120 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.15 -2.84 0.01 ] + nhpr [ -60 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 15.18 -18.6 7.65 ] + nhpr [ 90 0 0 ] + scale [ 3 3 3 ] + ] + ] + flat_building "tb28:12_8_DNARoot" [ + pos [ -80 -269.28 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -95 -269.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ -95 -259.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 0.77 -5.25 -0.05 ] + nhpr [ 15 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb28:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Call It a Day Calendars" ] + pos [ -66 -269.28 0 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -4.49 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.58 ] + scale [ 1.2 1 1.2 ] + kern [ 0.04 ] + width [ 32.1937 ] + height [ 32.1937 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.392157 0 0.392157 1 ] + pos [ 0 0 -0.28 ] + scale [ 1 1 0.8 ] + kern [ 0.11133 ] + width [ 39.5319 ] + height [ 39.5319 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "9125" [ + vis [ "9125" "9124" "9123" "9122" "9121" "9126" "9127" "9128" "9129" "9130" "9151" "9152" ] + suit_edge [ 99 103 ] + suit_edge [ 104 100 ] + suit_edge [ 218 100 ] + suit_edge [ 100 218 ] + suit_edge [ 218 99 ] + suit_edge [ 99 218 ] + battle_cell [ 20 20 -105.095 -229.345 -0.5 ] + flat_building "tb28:13_9_8_DNARoot" [ + pos [ -100 -209.28 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb28:13_9_8_DNARoot" [ + pos [ -120 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 3.77 -4.88 0 ] + nhpr [ -180 0 0 ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -95 -209.28 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb28:13_9_8_DNARoot" [ + pos [ -95 -249.28 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 16 -7 0 ] + nhpr [ 0 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -108.553 -215.199 0 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "9126" [ + vis [ "9126" "9125" "9124" "9123" "9122" "9121" "9127" "9128" "9129" "9130" "9151" "9152" ] + suit_edge [ 103 105 ] + suit_edge [ 106 104 ] + suit_edge [ 105 107 ] + suit_edge [ 107 105 ] + suit_edge [ 106 107 ] + suit_edge [ 107 106 ] + suit_edge [ 105 108 ] + suit_edge [ 109 106 ] + battle_cell [ 20 20 -134.925 -230.559 -0.5 ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -155 -249.28 7.62939e-006 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -135 -269.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -115 -249.28 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb29:12_8_DNARoot" [ + pos [ -115 -249.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 5.44 -6.46 -0.06 ] + nhpr [ -30 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb29:12_8_DNARoot" [ + pos [ -115 -269.28 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4.4 0.04 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb29:12_8_DNARoot" [ + pos [ -115 -259.28 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb29:20_10_DNARoot" [ + pos [ -140 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb29:20_10_DNARoot" [ + pos [ -155 -209.28 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ -140 -269 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb29:13_9_8_DNARoot" [ + pos [ -155 -269.28 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 19.31 -6.3 0 ] + nhpr [ 15 0 0 ] + ] + ] + landmark_building "tb29:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Silver Lining Jewelers" ] + pos [ -129 -269.28 0 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0.435041 0 1.34896 ] + scale [ 1 1 1.06585 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.839216 0.815686 0.380392 1 ] + pos [ -0.0361721 0 0.676621 ] + scale [ 1.1 1 1.1 ] + kern [ 0.0750571 ] + stomp [ 0.079305 ] + width [ 24.094 ] + height [ 24.094 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -147.11 -213.365 7.62939e-006 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "9127" [ + vis [ "9127" "9126" "9125" "9124" "9123" "9122" "9121" "9128" "9129" "9130" "9152" "9151" ] + suit_edge [ 108 110 ] + suit_edge [ 111 109 ] + suit_edge [ 110 112 ] + suit_edge [ 113 111 ] + suit_edge [ 219 109 ] + suit_edge [ 109 219 ] + suit_edge [ 219 108 ] + suit_edge [ 108 219 ] + battle_cell [ 20 20 -164.839 -227.168 -0.5 ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -155 -209.28 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb30:20_10_DNARoot" [ + pos [ -174.99 -243.92 0 ] + nhpr [ 135 0 0 ] + width [ 20.7 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.97 1.27 29.91 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 12.88 -5.89 0 ] + nhpr [ 0 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb29:20_10_DNARoot" [ + pos [ -155 -249.28 0 ] + nhpr [ 165 0 0 ] + width [ 20.7 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 12.89 -33.62 0 ] + nhpr [ 15 0 0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 13.06 6.89 26.86 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9128" [ + vis [ "9128" "9127" "9126" "9125" "9124" "9123" "9122" "9129" "9130" "9131" "9151" "9152" ] + suit_edge [ 112 114 ] + suit_edge [ 114 115 ] + suit_edge [ 116 117 ] + suit_edge [ 117 113 ] + suit_edge [ 117 118 ] + suit_edge [ 118 117 ] + suit_edge [ 114 118 ] + suit_edge [ 118 114 ] + suit_edge [ 220 113 ] + suit_edge [ 113 220 ] + suit_edge [ 220 112 ] + suit_edge [ 112 220 ] + battle_cell [ 20 20 -182.155 -203.031 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -155 -209.28 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb30:13_9_8_DNARoot" [ + pos [ -160 -200.62 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 4.16 -6.23 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb30:13_9_8_DNARoot" [ + pos [ -151.34 -195.62 0 ] + nhpr [ -150 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + ] + flat_building "tb30:10_DNARoot" [ + pos [ -167.5 -187.63 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb30:10_DNARoot" [ + pos [ -175 -174.64 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 14.65 -13.91 0 ] + nhpr [ 90 0 -0 ] + scale [ 3 3 3 ] + ] + ] + flat_building "tb30:20_10_DNARoot" [ + pos [ -189.63 -229.29 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb30:12_8_DNARoot" [ + pos [ -202.14 -207.63 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb30:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Rock to Sleep Quarry" ] + pos [ -196.92 -217.25 0 ] + nhpr [ 120 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.18 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.53 ] + scale [ 1 1 0.9 ] + kern [ 0.02 ] + wiggle [ 3.19394 ] + stumble [ 0.044989 ] + stomp [ 0.03 ] + width [ 27.182 ] + height [ 27.182 ] + flags [ "b" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -191.519 -216.102 0 ] + nhpr [ 120 0 0 ] + ] + ] + visgroup "9129" [ + vis [ "9129" "9128" "9127" "9126" "9125" "9130" "9131" "9132" "9133" "9124" "9151" "9152" "9123" ] + suit_edge [ 115 236 ] + suit_edge [ 236 237 ] + suit_edge [ 237 236 ] + suit_edge [ 121 241 ] + suit_edge [ 241 116 ] + battle_cell [ 20 20 -210 -155 -0.5 ] + flat_building "tb31:random20_DNARoot" [ + pos [ -175 -174.64 0 ] + nhpr [ 30 0 0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -182.5 -161.65 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.13 0.01 0 ] + nhpr [ 0 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb31:12_8_DNARoot" [ + pos [ -190 -148.66 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 9.9 -0.71 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.1215 2.60542 17.9345 ] + nhpr [ 104.876 -0.00423171 1.94784 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ -195 -140 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 12.3 -5.65 0 ] + nhpr [ 45 0 0 ] + ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -229.64 -160 1.52588e-005 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -239.64 -142.68 0 ] + nhpr [ -60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb31:random_DNARoot" [ + pos [ -202.499 -127.01 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -188.421 -162.734 0 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "9130" [ + vis [ "9130" "9131" "9129" "9128" "9127" "9126" "9125" "9132" "9133" "9134" "9135" "9124" "9123" "9136" "9151" "9152" ] + suit_edge [ 124 121 ] + battle_cell [ 20 20 -238.947 -188.363 -0.5 ] + flat_building "tb31:12_8_DNARoot" [ + pos [ -218.3 -199.64 0 ] + nhpr [ -150 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb36:20_DNARoot" [ + pos [ -226.96 -204.64 0 ] + nhpr [ -150 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.97 -5.93 0 ] + nhpr [ 15 0 0 ] + ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -274.281 -162.68 0 ] + nhpr [ -60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -256.961 -152.68 0 ] + nhpr [ -60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -229.64 -160 0 ] + nhpr [ -150 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + landmark_building "tb52:toon_landmark_hqDL_DNARoot" [ + code [ "toon_landmark_hqDL" ] + building_type [ "hq" ] + title [ "" ] + pos [ -250 -160 0 ] + nhpr [ -150 0 0 ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -23.6655 15.1753 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -23.2708 -15.5126 0 ] + nhpr [ -180 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 28.6066 -15.7126 0 ] + nhpr [ 180 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 27.6994 15.5395 0 ] + nhpr [ -180 0 0 ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ -209.64 -194.64 0 ] + nhpr [ -150 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -219.267 -196.636 -3.8147e-006 ] + nhpr [ -150 0 -0 ] + ] + ] + visgroup "9131" [ + vis [ "9131" "9130" "9129" "9128" "9132" "9133" "9134" "9135" "9136" "9137" "9152" "9151" ] + suit_edge [ 125 126 ] + suit_edge [ 127 128 ] + suit_edge [ 128 124 ] + suit_edge [ 125 129 ] + suit_edge [ 129 125 ] + suit_edge [ 128 129 ] + suit_edge [ 129 128 ] + suit_edge [ 243 125 ] + suit_edge [ 243 244 ] + suit_edge [ 244 243 ] + battle_cell [ 20 20 -280 -190 -0.5 ] + landmark_building "tb33:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "The Dreamland Screening Room" ] + pos [ -283.92 -225.98 0 ] + nhpr [ 120 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 11.31 -1.85 4.13 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.411765 0.607843 1 ] + pos [ -0.5 0 -0.28 ] + scale [ 1.2 1 1.2 ] + kern [ 0.062482 ] + stomp [ 0.022901 ] + flags [ "d" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.533333 0 0.266667 1 ] + pos [ 0 0 -1.72 ] + scale [ 1.4 1 1.4 ] + kern [ 0.159789 ] + wiggle [ 1 ] + stumble [ 0.056226 ] + stomp [ 0.04924 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -291.42 -212.99 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.06 1.09 21.02 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb33:13_9_8_DNARoot" [ + pos [ -278.92 -234.64 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -244.28 -214.639 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -308.922 -182.679 -0.000137329 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -298.922 -200 0 ] + nhpr [ 120 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 10.9388 -16.7151 13 ] + nhpr [ -180 0 0 ] + scale [ 2.13059 2.13059 2.13059 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -271.138 -179.5 0 ] + nhpr [ -60 0 -0 ] + ] + ] + visgroup "9132" [ + vis [ "9132" "9131" "9130" "9129" "9133" "9134" "9135" "9136" "9137" "9151" "9152" ] + suit_edge [ 126 130 ] + suit_edge [ 131 127 ] + suit_edge [ 223 130 ] + suit_edge [ 130 223 ] + suit_edge [ 223 131 ] + suit_edge [ 131 223 ] + suit_edge [ 224 131 ] + suit_edge [ 131 224 ] + suit_edge [ 224 130 ] + suit_edge [ 130 224 ] + battle_cell [ 20 20 -256.66 -233.265 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -234.28 -231.96 -7.62939e-006 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb33:20_10_DNARoot" [ + pos [ -273.92 -243.3 0 ] + nhpr [ 120 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 5.07 -5.41 0.01 ] + nhpr [ 15 0 0 ] + ] + ] + flat_building "tb34:13_9_8_DNARoot" [ + pos [ -268.92 -251.96 0 ] + nhpr [ 120 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb36:13_9_8_DNARoot" [ + pos [ -244.28 -214.64 0 ] + nhpr [ -60 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -238.79 -231.661 -7.62939e-006 ] + nhpr [ -60 0 -0 ] + ] + ] + visgroup "9133" [ + vis [ "9133" "9134" "9135" "9136" "9137" "9138" "9139" "9132" "9131" "9130" "9129" "9152" "9151" ] + suit_edge [ 130 132 ] + suit_edge [ 132 133 ] + suit_edge [ 134 135 ] + suit_edge [ 135 131 ] + suit_edge [ 132 136 ] + suit_edge [ 136 132 ] + suit_edge [ 135 136 ] + suit_edge [ 136 135 ] + suit_edge [ 135 137 ] + suit_edge [ 137 135 ] + suit_edge [ 132 137 ] + suit_edge [ 137 132 ] + suit_edge [ 226 132 ] + suit_edge [ 132 226 ] + suit_edge [ 226 135 ] + suit_edge [ 135 226 ] + battle_cell [ 20 20 -241.312 -258.004 -0.5 ] + street "street_4way_intersection_DNARoot" [ + code [ "street_4way_intersection" ] + pos [ -214.28 -266.6 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -248.92 -286.6 0 ] + nhpr [ 120 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -276.24 -279.28 0 ] + nhpr [ 30 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -234.28 -231.96 0 ] + nhpr [ -60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -206.96 -239.28 0 ] + nhpr [ -150 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb36:13_9_8_DNARoot" [ + pos [ -234.28 -231.96 0 ] + nhpr [ 30 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 4.36 -5.68 0.01 ] + nhpr [ -30 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb36:20_10_DNARoot" [ + pos [ -201.96 -247.94 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 8.21 -2.39 0.01 ] + nhpr [ -135 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.66 -0.88 0.01 ] + nhpr [ -75 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb34:13_9_8_DNARoot" [ + pos [ -286.24 -261.96 0 ] + nhpr [ 30 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 14.53 -5.21 0.01 ] + nhpr [ 60 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb34:20_10_DNARoot" [ + pos [ -281.24 -270.62 0 ] + nhpr [ 120 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ -266.02 -296.42 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4.29 0.01 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 3.24 1.6 19.82 ] + nhpr [ 120 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 23.39 -36.99 6.16 ] + nhpr [ 90 0 0 ] + scale [ 3.5 3.5 3.5 ] + ] + ] + flat_building "tb34:12_8_DNARoot" [ + pos [ -248.7 -286.42 0 ] + nhpr [ -150 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -5.08 -5.02 0.02 ] + nhpr [ -60 0 0 ] + ] + ] + flat_building "tb39:20_10_DNARoot" [ + pos [ -196.96 -256.6 0 ] + nhpr [ -150 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb36:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Insomniac Insurance" ] + pos [ -213.66 -227.64 0 ] + nhpr [ -60 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.24 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.290196 0.027451 0.305882 1 ] + pos [ 0 0 0.35 ] + kern [ 0.050493 ] + width [ 25 ] + height [ 25 ] + flags [ "b" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + landmark_building "tb34:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Mind Over Mattress" ] + pos [ -273.65 -283.8 0 ] + nhpr [ 120 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.29 0 -4.12 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ 0.09 0 0.88 ] + scale [ 1.3 1 1.3 ] + kern [ 0.057571 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.04 ] + scale [ 1.1 1 1.1 ] + width [ 23.8886 ] + height [ 23.8886 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb36:13_9_8_DNARoot" [ + pos [ -206.96 -239.28 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + ] + flat_building "tb36:12_8_DNARoot" [ + pos [ -216.96 -221.96 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -204.983 -249.811 0 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "9134" [ + vis [ "9134" "9133" "9132" "9131" "9130" "9135" "9136" "9137" "9138" "9139" "9151" "9152" ] + suit_edge [ 133 138 ] + suit_edge [ 139 134 ] + battle_cell [ 20 20 -226.37 -285.16 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -248.92 -286.6 0 ] + nhpr [ -60 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb34:12_8_DNARoot" [ + pos [ -238.7 -303.74 0 ] + nhpr [ 120 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 11.27 -1.17 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb39:12_8_DNARoot" [ + pos [ -214.28 -266.6 0 ] + nhpr [ -60 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 1.98 -3.09 0 ] + nhpr [ 15 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 13 -1.3 0 ] + nhpr [ 180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9135" [ + vis [ "9135" "9136" "9137" "9138" "9139" "9134" "9133" "9132" "9131" "9130" "9151" ] + suit_edge [ 138 140 ] + suit_edge [ 141 139 ] + suit_edge [ 142 141 ] + suit_edge [ 140 143 ] + suit_edge [ 225 143 ] + suit_edge [ 143 225 ] + suit_edge [ 225 142 ] + suit_edge [ 142 225 ] + battle_cell [ 20 20 -214.24 -301.176 -0.5 ] + street "street_angle_60_DNARoot" [ + code [ "street_angle_60" ] + pos [ -204.28 -283.92 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb40:20_DNARoot" [ + pos [ -224.06 -318.38 0 ] + nhpr [ 135 0 0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.41 5.07 19.26 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11.44 -2.38 0 ] + nhpr [ -30 0 0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.44 -3.38 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb40:20_DNARoot" [ + pos [ -204.07 -323.73 0 ] + nhpr [ 165 0 0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 13.03 -31.77 0 ] + nhpr [ 45 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 0.19 -4.85 0 ] + nhpr [ 15 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ -442.33 -1581.35 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 6.02 0.94 20.27 ] + nhpr [ 30 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.09 0 1.35 ] + nhpr [ 0 0 -6 ] + scale [ 1.3 1 1 ] + kern [ 0.035594 ] + width [ 29.9133 ] + height [ 29.9133 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.19 ] + nhpr [ 0 0 -5 ] + scale [ 1.8 1 1.4 ] + kern [ 0.018893 ] + width [ 22.3879 ] + height [ 22.3879 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.09 0 -1.99 ] + nhpr [ 0 0 -4 ] + scale [ 0.8 1 0.8 ] + kern [ 0.003267 ] + wiggle [ 0.64545 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.85 ] + nhpr [ 0 0 -5 ] + width [ 37.8903 ] + height [ 37.8903 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + ] + visgroup "9136" [ + vis [ "9136" "9135" "9134" "9133" "9132" "9131" "9130" "9137" "9138" "9139" "9140" "9151" ] + suit_edge [ 143 144 ] + suit_edge [ 144 145 ] + suit_edge [ 146 147 ] + suit_edge [ 147 142 ] + suit_edge [ 144 148 ] + suit_edge [ 148 144 ] + suit_edge [ 149 147 ] + suit_edge [ 147 148 ] + suit_edge [ 148 147 ] + suit_edge [ 147 149 ] + suit_edge [ 144 149 ] + suit_edge [ 149 144 ] + battle_cell [ 20 20 -188.096 -304.034 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -174.28 -283.92 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb40:12_8_DNARoot" [ + pos [ -184.28 -323.92 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.72 2.87 18.87 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb40:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Nightstand Furniture Company" ] + pos [ -174.58 -323.36 0 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.25 0.25 0.25 1 ] + pos [ 0.34444 0 1.94001 ] + scale [ 1 1 0.392629 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.388235 0.576471 1 ] + pos [ -0.0310376 0 0.407171 ] + scale [ 0.921269 1 1.1 ] + kern [ -0.037465 ] + stumble [ 0.052729 ] + stomp [ 0.022869 ] + width [ 24.983 ] + height [ 24.983 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + landmark_building "tb39:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "House of Hibernation" ] + pos [ -195.736 -283.75 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.08 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.529412 0.0470588 0.470588 1 ] + pos [ 0 0 1.08 ] + scale [ 0.8 1 1 ] + width [ 20 ] + height [ 20 ] + flags [ "db" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.529412 0.0470588 0.470588 1 ] + pos [ 0 0 0.65 ] + scale [ 0.5 1 0.5 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.529412 0.0470588 0.470588 1 ] + pos [ 0 0 -0.17 ] + scale [ 0.8 1 1 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "db" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + flat_building "tb39:12_8_DNARoot" [ + pos [ -204.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -193.993 -319.48 0 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "9137" [ + vis [ "9137" "9136" "9135" "9134" "9133" "9132" "9131" "9138" "9139" "9140" ] + suit_edge [ 145 150 ] + suit_edge [ 151 146 ] + suit_edge [ 227 146 ] + suit_edge [ 146 227 ] + suit_edge [ 227 145 ] + suit_edge [ 145 227 ] + battle_cell [ 20 20 -154.039 -304.261 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -134.28 -283.92 -8.39233e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb39:13_9_8_DNARoot" [ + pos [ -164.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10.4 -3.24 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0 0 0.34 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.87 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ -0.15 0 0.98 ] + scale [ 0.7 1 0.5 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + flat_building "tb40:10_DNARoot" [ + pos [ -144.28 -323.92 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb40:13_9_8_DNARoot" [ + pos [ -164.28 -333.92 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb42:13_9_8_DNARoot" [ + pos [ -144.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ -134.28 -323.92 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 3.99 -6.6 0.03 ] + nhpr [ 0 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ -144.28 -323.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb40:13_9_8_DNARoot" [ + pos [ -164.28 -323.92 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 5.17 -8.09 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb39:13_9_8_DNARoot" [ + pos [ -184.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 15 -7 0 ] + nhpr [ 15 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -138.323 -286.985 -8.39233e-005 ] + nhpr [ -15 0 -0 ] + ] + ] + visgroup "9138" [ + vis [ "9138" "9137" "9136" "9135" "9134" "9139" "9140" "9141" "9133" "9144" "9143" "9142" ] + suit_edge [ 150 152 ] + suit_edge [ 152 153 ] + suit_edge [ 154 155 ] + suit_edge [ 155 151 ] + suit_edge [ 155 200 ] + suit_edge [ 200 155 ] + suit_edge [ 152 200 ] + suit_edge [ 200 152 ] + suit_edge [ 228 151 ] + suit_edge [ 151 228 ] + suit_edge [ 228 150 ] + suit_edge [ 150 228 ] + battle_cell [ 20 20 -120.282 -310.146 -0.5 ] + flat_building "tb42:13_9_8_DNARoot" [ + pos [ -114.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.52 3.39 29.19 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6.17 -13.38 0 ] + nhpr [ -180 0 0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5 0 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb42:20_10_DNARoot" [ + pos [ -94.28 -283.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb42:20_DNARoot" [ + pos [ -94.28 -303.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 7.45 0 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb42:20_DNARoot" [ + pos [ -94.28 -318.92 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -134.28 -283.92 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb42:13_9_8_DNARoot" [ + pos [ -134.28 -283.92 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 2.06 5.5 22.61 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 18 -9 0 ] + nhpr [ -75 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb42:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Sawing Wood Slumber Lumber" ] + pos [ -94.28 -288.92 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -0.3 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.490196 1 ] + pos [ 0 0 -0.29 ] + scale [ 0.9 1 0.6 ] + kern [ 0.053256 ] + wiggle [ 4.75603 ] + stumble [ 0.046832 ] + stomp [ -0.035772 ] + width [ 30.5055 ] + height [ 30.5055 ] + flags [ "d" ] + text [ + letters [ "s" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.56 ] + nhpr [ 0 0 2 ] + scale [ 1.2 1 1.2 ] + kern [ 0.05788 ] + width [ 36.6959 ] + height [ 36.6959 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + ] + ] + ] + ] + visgroup "9139" [ + vis [ "9139" "9140" "9141" "9142" "9143" "9138" "9137" "9136" "9135" "9134" "9133" "9132" "9144" ] + suit_edge [ 153 156 ] + suit_edge [ 157 154 ] + battle_cell [ 20 20 -115.058 -333.914 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -134.28 -323.92 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb42:10_DNARoot" [ + pos [ -94.28 -318.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb42:10_DNARoot" [ + pos [ -94.28 -333.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 0.53 -4.05 0 ] + nhpr [ -30 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.63 -2.95 0 ] + nhpr [ 15 0 0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -0.08 -13.92 8.54 ] + nhpr [ -90 0 0 ] + scale [ 3 3 3 ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ -134.28 -343.92 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 4.77 -5.69 0.03 ] + nhpr [ -15 0 0 ] + ] + ] + ] + visgroup "9140" [ + vis [ "9140" "9139" "9138" "9137" "9136" "9141" "9142" "9143" ] + suit_edge [ 156 158 ] + suit_edge [ 158 159 ] + suit_edge [ 160 161 ] + suit_edge [ 161 157 ] + suit_edge [ 161 162 ] + suit_edge [ 162 161 ] + suit_edge [ 158 162 ] + suit_edge [ 162 158 ] + suit_edge [ 229 157 ] + suit_edge [ 157 229 ] + suit_edge [ 229 156 ] + suit_edge [ 156 229 ] + battle_cell [ 20 20 -114.958 -363.158 -0.5 ] + flat_building "tb43:20_10_DNARoot" [ + pos [ -84.28 -348.92 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb43:13_9_8_DNARoot" [ + pos [ -94.28 -363.92 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 10.44 -1.07 0.01 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb43:13_9_8_DNARoot" [ + pos [ -94.28 -383.92 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 4.1 -3.58 0.05 ] + nhpr [ 45 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.59 -7.97 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.56 0.31 31.8 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb43:20_DNARoot" [ + pos [ -119.28 -383.92 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.58 5.92 19.07 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 7.01 -1.39 0 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -94.28 -343.92 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + landmark_building "tb43:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Shut-Eye Optometry" ] + pos [ -104.28 -383.92 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -5.35 ] + scale [ 1 1 1.2 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.92 ] + scale [ 1.5 1 1.1 ] + kern [ 0.128787 ] + width [ 25 ] + height [ 25 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.184314 0.184314 0 1 ] + pos [ 0 0 0.22 ] + nhpr [ 0 0 -2 ] + scale [ 1.1 1 0.6 ] + kern [ 0.08 ] + width [ 25 ] + height [ 25 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb43:20_10_DNARoot" [ + pos [ -94.28 -348.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16 -6 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + visgroup "9141" [ + vis [ "9141" "9140" "9139" "9138" "9142" "9143" "9144" ] + suit_edge [ 159 163 ] + suit_edge [ 163 164 ] + suit_edge [ 165 166 ] + suit_edge [ 166 160 ] + suit_edge [ 163 167 ] + suit_edge [ 167 163 ] + suit_edge [ 166 167 ] + suit_edge [ 167 166 ] + suit_edge [ 230 164 ] + suit_edge [ 164 230 ] + suit_edge [ 230 165 ] + suit_edge [ 165 230 ] + battle_cell [ 20 20 -145.155 -363.819 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -134.28 -343.92 3.05176e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb44:12_8_DNARoot" [ + pos [ -144.28 -343.92 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb43:12_8_DNARoot" [ + pos [ -134.28 -383.92 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 11.18 0.5 19.29 ] + nhpr [ 60 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 2.9 -5.55 0.04 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb47:12_8_DNARoot" [ + pos [ -149.28 -383.92 0.01 ] + nhpr [ 180 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ -175.42 -345.06 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + landmark_building "tb44:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Pillow Fights Nightly" ] + pos [ -154.28 -343.92 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.23 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.0156863 0.188235 1 ] + pos [ 0 0 0.88 ] + kern [ 0.066919 ] + width [ 24.7666 ] + height [ 24.7666 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.384314 1 ] + pos [ 0.34 0 0.15 ] + scale [ 0.9 1 0.7 ] + kern [ 0.126838 ] + width [ 30.4081 ] + height [ 30.4081 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -147.968 -380.466 3.05176e-005 ] + nhpr [ -180 0 0 ] + ] + ] + visgroup "9142" [ + vis [ "9142" "9141" "9140" "9139" "9143" "9144" "9145" "9138" ] + suit_edge [ 164 168 ] + suit_edge [ 168 169 ] + suit_edge [ 170 171 ] + suit_edge [ 171 165 ] + suit_edge [ 231 168 ] + suit_edge [ 168 231 ] + suit_edge [ 231 171 ] + suit_edge [ 171 231 ] + battle_cell [ 20 20 -188.533 -370.318 -0.5 ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -174.28 -383.92 0 ] + nhpr [ 45 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -174.28 -383.92 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb44:12_8_DNARoot" [ + pos [ -189.91 -348.94 0 ] + nhpr [ 15 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 0.81 6.93 19.52 ] + nhpr [ 15 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -0.970024 -19.08 3.05176e-005 ] + nhpr [ 105 0 -0 ] + scale [ 3 3 3 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 3.87 -32.1 0 ] + nhpr [ 75 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 4.98 -4.42 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb44:12_8_DNARoot" [ + pos [ -202.9 -356.44 0 ] + nhpr [ 30 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2 0 0 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb45:12_8_DNARoot" [ + pos [ -214.28 -383.92 0 ] + nhpr [ 75 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2 -6.15 0.01 ] + nhpr [ -75 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.31 -7.95 0.02 ] + nhpr [ -135 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb45:12_8_DNARoot" [ + pos [ -210.4 -369.43 0 ] + nhpr [ 60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.6 0.55 19.65 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.31 -7.15 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -209.386 -376.609 1.90735e-005 ] + nhpr [ 75.6775 0 -0 ] + ] + ] + visgroup "9143" [ + vis [ "9143" "9142" "9141" "9140" "9139" "9138" "9144" "9145" "9146" "9148" "9149" "9150" ] + suit_edge [ 169 172 ] + suit_edge [ 172 173 ] + suit_edge [ 174 175 ] + suit_edge [ 175 170 ] + suit_edge [ 172 176 ] + suit_edge [ 176 172 ] + suit_edge [ 175 176 ] + suit_edge [ 176 175 ] + suit_edge [ 175 177 ] + suit_edge [ 177 175 ] + suit_edge [ 172 177 ] + suit_edge [ 177 172 ] + battle_cell [ 20 20 -194.094 -399.883 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -214.28 -383.92 0.000137329 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ -174.28 -383.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ -174.28 -403.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + landmark_building "tb45:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "The All Tucked Inn" ] + pos [ -214.28 -404.924 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.76 ] + scale [ 0.6 1 0.8 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.392157 0 0.392157 1 ] + pos [ 0 0 1.19 ] + scale [ 1 1 0.6 ] + kern [ 0.201294 ] + width [ 20 ] + height [ 20 ] + flags [ "cd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.392157 0 0.392157 1 ] + pos [ 0 0 0.45 ] + scale [ 1.3 1 0.8 ] + kern [ 0.133696 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "cd" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.28 ] + scale [ 1.8 1 0.8 ] + kern [ 0.321325 ] + width [ 20 ] + height [ 20 ] + flags [ "cd" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + landmark_building "tb47:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Make Your Bed! Hardware Store" ] + pos [ -174.28 -388.92 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.41 0 -0.22 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.329412 0.160784 0.160784 1 ] + pos [ 0 0 0.49 ] + scale [ 1.1 1 1.4 ] + kern [ 0.012005 ] + wiggle [ 1 ] + stumble [ 0.041466 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -0.22 ] + scale [ 1 1 0.6 ] + width [ 29.186 ] + height [ 29.186 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb45:20_DNARoot" [ + pos [ -214.28 -393.92 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb45:20_DNARoot" [ + pos [ -213.14 -415.06 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -180 -385 0 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "9144" [ + vis [ "9144" "9143" "9142" "9141" "9145" "9146" "9147" "9148" "9149" "9150" ] + suit_edge [ 173 178 ] + suit_edge [ 178 179 ] + suit_edge [ 180 181 ] + suit_edge [ 181 174 ] + battle_cell [ 20 20 -187.994 -428.123 -0.5 ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -174.28 -413.92 0 ] + nhpr [ 135 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ -174.28 -413.92 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb45:12_8_DNARoot" [ + pos [ -209.26 -429.55 0 ] + nhpr [ 105 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 10.74 -5.32 0.04 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 0.28 6.54 7.31 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb45:12_8_DNARoot" [ + pos [ -201.76 -442.54 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.63 -19.47 6.39 ] + nhpr [ 90 0 0 ] + scale [ 3 3 3 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 9.09 -33.11 0 ] + nhpr [ -30 0 0 ] + ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -188.77 -450.04 0 ] + nhpr [ 150 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.43 4.33 19.6 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 1685.64 2097.77 0.05 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 6.86 -5.74 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -174.28 -453.92 0 ] + nhpr [ 165 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + ] + visgroup "9145" [ + vis [ "9145" "9144" "9143" "9142" "9146" "9147" "9148" "9149" "9150" ] + suit_edge [ 179 182 ] + suit_edge [ 182 183 ] + suit_edge [ 184 185 ] + suit_edge [ 185 180 ] + suit_edge [ 182 186 ] + suit_edge [ 186 182 ] + suit_edge [ 185 186 ] + suit_edge [ 186 185 ] + suit_edge [ 232 180 ] + suit_edge [ 180 232 ] + suit_edge [ 232 179 ] + suit_edge [ 179 232 ] + suit_edge [ 233 179 ] + suit_edge [ 179 233 ] + suit_edge [ 233 180 ] + suit_edge [ 180 233 ] + battle_cell [ 20 20 -154.845 -434.005 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -134.28 -413.92 1.90735e-006 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ -164.28 -413.92 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.53 0.08 0 ] + nhpr [ 0 0 0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb50:20_DNARoot" [ + pos [ -149.28 -413.92 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 1.07 -4.82 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.34 6.34 19.34 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 12.02 -1.17 0.01 ] + nhpr [ 180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -159.28 -453.92 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.6 -4.26 0.01 ] + nhpr [ -120 0 0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.6 -2.26 0.01 ] + nhpr [ -90 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3.51 1.43 20.12 ] + nhpr [ 30 0 0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.1 ] + nhpr [ 0 0 -4 ] + kern [ 0.010949 ] + width [ 24.097 ] + height [ 24.097 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.99 ] + nhpr [ 0 0 -7 ] + scale [ 0.9 1 1.4 ] + kern [ 0.02485 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -2.04 ] + nhpr [ 0 0 -3 ] + kern [ 0.007459 ] + wiggle [ -0.26554 ] + stumble [ 0.005701 ] + stomp [ 0.014413 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ -174.28 -413.92 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + landmark_building "tb49:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Snore or Less" ] + pos [ -144.28 -453.92 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 -4.07 ] + nhpr [ 0 0 -2 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ 0.05 0 1.31 ] + scale [ 2.1 1 1.2 ] + kern [ 0.099535 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.67 ] + scale [ 1.1 1 0.7 ] + kern [ 0.188817 ] + width [ 10.5948 ] + height [ 10.5948 ] + flags [ "d" ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.07 ] + scale [ 1.9 1 1 ] + kern [ 0.1 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -134.28 -453.92 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -154.003 -419.282 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "9146" [ + vis [ "9146" "9147" "9148" "9149" "9150" "9145" "9144" "9143" "9142" ] + suit_edge [ 183 187 ] + suit_edge [ 187 188 ] + suit_edge [ 189 190 ] + suit_edge [ 190 184 ] + battle_cell [ 20 20 -114.898 -434.935 -0.5 ] + street "street_courtyard_70_exit_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ -99.28 -433.92 2.28882e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb50:12_8_DNARoot" [ + pos [ -134.28 -413.92 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 5.57 -6.68 0 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -134.28 -468.92 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 8.57 -7.68 0 ] + nhpr [ 90 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -131.385 -449.289 2.28882e-005 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "9147" [ + vis [ "9147" "9148" "9149" "9150" "9146" "9145" "9144" "9143" ] + suit_edge [ 192 189 ] + suit_edge [ 192 193 ] + suit_edge [ 193 192 ] + suit_edge [ 198 192 ] + suit_edge [ 234 198 ] + suit_edge [ 198 234 ] + battle_cell [ 20 20 -99.6214 -418.841 -0.5 ] + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70" ] + pos [ -99.28 -433.92 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb50:12_8_DNARoot" [ + pos [ -134.28 -398.92 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.81 2.35 18.12 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 13.39 -6 0.02 ] + nhpr [ 30 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 6 -6 0 ] + nhpr [ 45 0 0 ] + ] + ] + flat_building "tb51:13_9_8_DNARoot" [ + pos [ -79.28 -398.92 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb50:13_9_8_DNARoot" [ + pos [ -99.28 -398.92 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 0.26 -34.24 0.01 ] + nhpr [ -90 0 0 ] + ] + ] + landmark_building "tb50:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Crack of Dawn Repairs" ] + pos [ -110.698 -398.92 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.75 0.75 0.75 1 ] + pos [ 0.290489 0 1.02549 ] + scale [ 1 1 1.08807 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 1 0.658824 1 ] + pos [ 0.109053 0 0.732457 ] + kern [ 0.023663 ] + stumble [ -0.002474 ] + width [ 26.2547 ] + height [ 26.2547 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + visgroup "9148" [ + vis [ "9148" "9149" "9150" "9147" "9146" "9145" "9144" "9143" ] + suit_edge [ 194 196 ] + suit_edge [ 196 194 ] + suit_edge [ 197 194 ] + suit_edge [ 194 198 ] + suit_edge [ 235 197 ] + suit_edge [ 197 235 ] + battle_cell [ 20 20 -84.3791 -434.176 -0.5 ] + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70" ] + pos [ -99.28 -433.92 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb51:13_9_8_DNARoot" [ + pos [ -64.28 -398.92 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 9.7 -7.69 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 4.91 -4.85 -0.01 ] + nhpr [ 30 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb51:20_DNARoot" [ + pos [ -64.28 -423.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb51:20_DNARoot" [ + pos [ -64.28 -453.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb51:20_DNARoot" [ + pos [ -64.28 -433.92 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 13.1 1.46 13.3 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + landmark_building "tb51:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "For Richer or Snorer" ] + pos [ -64.28 -413.92 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 2.72 ] + scale [ 0.9 1 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.32549 0 0.32549 1 ] + pos [ -2.05 0 0.31 ] + nhpr [ 0 0 -12 ] + scale [ 1.2 1 1.3 ] + kern [ 0.05 ] + wiggle [ 4.1273 ] + stumble [ 0.102717 ] + stomp [ -0.001851 ] + width [ 20 ] + height [ 20 ] + flags [ "d" ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.392157 0.196078 1 ] + pos [ -1.8 0 0.13 ] + nhpr [ 0 0 -9 ] + scale [ 1.4 1 1.3 ] + width [ 31.053 ] + height [ 31.053 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.411765 0 0.823529 1 ] + pos [ 3.75 0 -0.22 ] + nhpr [ 0 0 22 ] + scale [ 1.2 1 1.3 ] + kern [ 0.027637 ] + width [ 14.0197 ] + height [ 14.0197 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + ] + visgroup "9149" [ + vis [ "9149" "9150" "9148" "9147" "9146" "9145" "9144" "9143" "9142" ] + suit_edge [ 188 197 ] + battle_cell [ 20 20 -99.9252 -449.983 -0.5 ] + street "street_courtyard_70_exit_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ -99.28 -433.92 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -119.28 -468.92 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ -3.45 -5.53 0.02 ] + nhpr [ -15 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb51:20_DNARoot" [ + pos [ -64.28 -468.92 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 18.23 -6.77 0.02 ] + nhpr [ 45 0 0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + ] + visgroup "9150" [ + vis [ "9150" "9149" "9148" "9147" "9146" "9145" "9144" "9143" "9142" ] + battle_cell [ 20 20 -100 -485 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -79.28 -508.92 1.14441e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -119.28 -478.92 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 16.06 -20.39 10.68 ] + nhpr [ 90 0 0 ] + scale [ 3 3 3 ] + ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -119.28 -493.92 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.61 2.25 18.76 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3 0 0 ] + nhpr [ 0 0 0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb49:12_8_DNARoot" [ + pos [ -119.28 -508.92 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.73053 -6.56005 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb51:12_8_DNARoot" [ + pos [ -79.28 -468.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb51:12_8_DNARoot" [ + pos [ -79.28 -483.92 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 3.47 -6.4 0.01 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.83 4.98 18.04 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb51:12_8_DNARoot" [ + pos [ -79.28 -498.92 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + prop "linktunnel_mm_4301_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ -99.28 -508.92 0 ] + nhpr [ 180 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 0.533333 0.533333 0.533333 1 ] + pos [ 0 0 0.8 ] + scale [ 1.4 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 0.0862745 0.352941 0.552941 1 ] + pos [ 0 0 -0.79 ] + scale [ 1.3 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.0862745 0.352941 0.552941 1 ] + pos [ 0 0 -1.62 ] + scale [ 0.8 1 0.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + color [ 0.505882 0.537255 0.552941 1 ] + pos [ 0 0 1.5 ] + scale [ 2 1 2 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -84.4559 -472.195 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -107.392 -504.01 -0.500008 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "9151" [ + vis [ "9151" "9152" "9130" "9131" "9132" "9133" "9134" "9135" "9136" "9129" "9128" "9127" "9126" "9125" "9124" ] + suit_edge [ 239 242 ] + suit_edge [ 242 243 ] + battle_cell [ 20 20 -300 -155 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -308.922 -182.68 0 ] + nhpr [ 30 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -274.281 -162.68 0 ] + nhpr [ 30 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -328.922 -148.038 0 ] + nhpr [ 30 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.23 3.28 18.86 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb33:12_8_DNARoot" [ + pos [ -311.602 -138.038 0 ] + nhpr [ 30 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_tree_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ -1.11 -5.13 0 ] + nhpr [ 30 0 0 ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -294.281 -128.038 0 ] + nhpr [ 30 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4 -0.27 -0.01 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb31:10_DNARoot" [ + pos [ -285.621 -123.038 0 ] + nhpr [ 30 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -285.621 -123.038 0 ] + nhpr [ 120 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -308.922 -182.68 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11.6542 -3.17435 0 ] + nhpr [ -180 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.3862 -2.44232 0 ] + nhpr [ 165 0 0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -308.922 -182.68 0 ] + nhpr [ -150 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -316.422 -169.689 0 ] + nhpr [ 120 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -332.582 -161.699 0 ] + nhpr [ 30 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -323.922 -156.699 0 ] + nhpr [ 120 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ -294.945 -132.388 -2.28882e-005 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "9152" [ + vis [ "9152" "9151" "9126" "9127" "9128" "9129" "9130" "9131" "9132" "9133" "9134" "9135" "9125" ] + suit_edge [ 236 238 ] + suit_edge [ 238 239 ] + suit_edge [ 238 240 ] + suit_edge [ 240 238 ] + battle_cell [ 20 20 -240 -120 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -256.961 -152.68 0 ] + nhpr [ 30 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -259.64 -108.038 -3.8147e-006 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + flat_building "tb31:10_DNARoot" [ + pos [ -272.63 -115.538 0 ] + nhpr [ 30 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb31:13_9_8_DNARoot" [ + pos [ -259.64 -108.038 0 ] + nhpr [ 30 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.23 -1.4 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb31:13_9_8_DNARoot" [ + pos [ -264.64 -99.3782 0 ] + nhpr [ -60 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb31:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Down Time Watch Repair" ] + pos [ -250.98 -103.038 0 ] + nhpr [ 30 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.42 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.368627 0.368627 1 ] + pos [ 0 0 0.89 ] + scale [ 1.4 1 1.2 ] + kern [ 0.103222 ] + wiggle [ 5.13814 ] + stumble [ 0.12775 ] + stomp [ 0.025709 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.176471 0.34902 1 ] + pos [ 0 0 -0.02 ] + kern [ 0.043165 ] + wiggle [ -0.091108 ] + stumble [ 0.046885 ] + stomp [ 0.035897 ] + width [ 18.4682 ] + height [ 18.4682 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb31:12_8_DNARoot" [ + pos [ -242.319 -98.0385 0 ] + nhpr [ 30 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.45 2.68 19.72 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 16.14 -3.84 -0.02 ] + nhpr [ -60 0 0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb31:random_DNARoot" [ + pos [ -224.999 -88.0385 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb31:random_DNARoot" [ + pos [ -217.499 -101.029 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 3.27186 1.59103 20.6173 ] + nhpr [ 104.794 -0.77908 -2.30604 ] + ] + ] + flat_building "tb31:random_DNARoot" [ + pos [ -209.999 -114.019 0 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 8.7134 -16.6381 9 ] + nhpr [ -180 0 0 ] + scale [ 2.13059 2.13059 2.13059 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -211.275 -120.571 0 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "9153" [ + vis [ "9153" "9121" "9122" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 117 -149.8 0 ] + nhpr [ -159 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 106.796 -197.427 0.354809 ] + nhpr [ -30 0 0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 115.875 -199.573 0.404289 ] + nhpr [ 0 0 0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 125.813 -198.141 0.343344 ] + nhpr [ 30 0 0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 132.725 -191.63 0.357632 ] + nhpr [ 45 0 0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + node "props" [ + prop "prop_DL_hydrant_DNARoot" [ + code [ "prop_DL_hydrant" ] + pos [ 96.2134 -156.008 0 ] + nhpr [ 15 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 129.157 -227.47 17 ] + nhpr [ 15 0 0 ] + scale [ 4.37995 4.37995 4.37995 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 152.237 -154.507 16.5596 ] + nhpr [ 15 0 0 ] + scale [ 4.38226 4.38226 4.38226 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 149.609 -194.388 13.9948 ] + nhpr [ -15 0 0 ] + scale [ 3.43889 3.43889 3.43889 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 94.3506 -154.651 13.5151 ] + nhpr [ 15 0 0 ] + scale [ 5.29628 5.29628 5.29628 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 109.808 -158.806 0 ] + nhpr [ 15 0 0 ] + scale [ 1.38667 1.38667 1.38667 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 139.172 -190.662 0.132122 ] + nhpr [ 15 0 0 ] + scale [ 1.62684 1.62684 1.62684 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 91.869 -163.946 0 ] + nhpr [ -120 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 89.8001 -202.228 0 ] + nhpr [ -75 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 141.686 -159.209 0 ] + nhpr [ -135 0 0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 142.039 -203.76 0.00392257 ] + nhpr [ -135 -0.231407 -0.0370625 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 120.281 -203.328 -3.8147e-006 ] + nhpr [ 15 0 -0 ] + color [ 0.48 0.93 0.74 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 106.824 -198.294 15.3606 ] + nhpr [ 15.3919 -0.0915809 -13.1417 ] + scale [ 3.24762 3.24762 3.24762 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 102.487 -157.396 0 ] + nhpr [ 30 0 0 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 158.157 -197.154 0 ] + nhpr [ -60 0 0 ] + scale [ 1.59685 1.59685 1.59685 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 79.7747 -202.726 0 ] + nhpr [ -60 0 0 ] + scale [ 1.5344 1.5344 1.5344 ] + ] + ] + street "street_DL_pond_DNARoot" [ + code [ "street_DL_pond" ] + pos [ 118 -181.28 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + node "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ 185.5 -169.95 9.59613 ] + nhpr [ -120 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 186.618 -214.439 5.75044 ] + nhpr [ -120 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 200.5 -149.95 2.87929 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 200.5 -169.95 2.87929 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 144.83 -127.45 0.343344 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 61.1921 -142.652 -3.80218 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 81.678 -237.115 8.22409 ] + nhpr [ 165 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 115.071 -233.528 12.798 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 98.6011 -127.941 8.72127 ] + nhpr [ 15 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 178.009 -182.858 9.58913 ] + nhpr [ -30 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 178.885 -227.345 5.87119 ] + nhpr [ -30 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 105.071 -233.528 12.8135 ] + nhpr [ -90 0 0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 156.942 -134.308 9.98442 ] + nhpr [ -15 0 0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 164.602 -121.286 9.98442 ] + nhpr [ -120 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 144.875 -117.577 0.343893 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 91.135 -115.004 8.7213 ] + nhpr [ -60 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 128.38 -100.408 9.98442 ] + nhpr [ -45 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 81.1922 -142.652 -3.80218 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 77.796 -251.603 8.18652 ] + nhpr [ 75 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 115.071 -243.528 7.29242 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 141.536 -259.194 6.29001 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 156.025 -255.312 6.29001 ] + nhpr [ -165 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dreamland_9200.dna b/ttmodels/src/dna/donalds_dreamland_9200.dna new file mode 100644 index 00000000..510c45f8 --- /dev/null +++ b/ttmodels/src/dna/donalds_dreamland_9200.dna @@ -0,0 +1,19571 @@ +store_suit_point [ 0, STREET_POINT, 90 105 -0.5 ] +store_suit_point [ 1, STREET_POINT, 90 115 -0.5 ] +store_suit_point [ 2, STREET_POINT, 80 115 -0.5 ] +store_suit_point [ 3, STREET_POINT, 80 105 -0.5 ] +store_suit_point [ 4, STREET_POINT, 67.5 115 -0.5 ] +store_suit_point [ 5, STREET_POINT, 60 115 -0.5 ] +store_suit_point [ 6, STREET_POINT, 60 105 -0.5 ] +store_suit_point [ 7, STREET_POINT, 67.5 105 -0.5 ] +store_suit_point [ 11, STREET_POINT, 35 90 -0.5 ] +store_suit_point [ 12, STREET_POINT, 45 90 -0.5 ] +store_suit_point [ 13, STREET_POINT, 47.5 97.5 -0.5 ] +store_suit_point [ 14, STREET_POINT, 52.5 102.5 -0.5 ] +store_suit_point [ 15, STREET_POINT, 35 80 -0.5 ] +store_suit_point [ 19, STREET_POINT, 60 55 -0.5 ] +store_suit_point [ 20, STREET_POINT, 60 65 -0.5 ] +store_suit_point [ 21, STREET_POINT, 52.5 67.5 -0.5 ] +store_suit_point [ 22, STREET_POINT, 47.5 72.5 -0.5 ] +store_suit_point [ 23, STREET_POINT, 45 80 -0.5 ] +store_suit_point [ 24, STREET_POINT, 80 65 -0.5 ] +store_suit_point [ 27, STREET_POINT, 92.5 47.5 -0.5 ] +store_suit_point [ 28, STREET_POINT, 95 40 -0.5 ] +store_suit_point [ 29, STREET_POINT, 105 40 -0.5 ] +store_suit_point [ 34, STREET_POINT, 85.784 24.2157 -0.5 ] +store_suit_point [ 35, STREET_POINT, 83.284 11.7157 -0.5 ] +store_suit_point [ 36, STREET_POINT, 93.284 11.7157 -0.5 ] +store_suit_point [ 37, STREET_POINT, 103.284 29.2157 -0.5 ] +store_suit_point [ 42, STREET_POINT, 108.284 -13.2843 -0.5 ] +store_suit_point [ 43, STREET_POINT, 108.284 -3.2843 -0.5 ] +store_suit_point [ 44, STREET_POINT, 100.784 -0.7843 -0.5 ] +store_suit_point [ 45, STREET_POINT, 95.784 4.2157 -0.5 ] +store_suit_point [ 46, STREET_POINT, 125.784 -13.2843 -0.5 ] +store_suit_point [ 47, STREET_POINT, 148.284 -13.2843 -0.5 ] +store_suit_point [ 48, STREET_POINT, 148.284 -3.2843 -0.5 ] +store_suit_point [ 49, STREET_POINT, 125.784 -3.2843 -0.5 ] +store_suit_point [ 50, STREET_POINT, 163.284 11.7157 -0.5 ] +store_suit_point [ 51, STREET_POINT, 160.784 4.2157 -0.5 ] +store_suit_point [ 52, STREET_POINT, 155.784 -0.784298 -0.5 ] +store_suit_point [ 57, STREET_POINT, 173.284 11.7157 -0.5 ] +store_suit_point [ 58, STREET_POINT, 173.284 19.2157 -0.5 ] +store_suit_point [ 61, STREET_POINT, 163.284 16.7157 -0.5 ] +store_suit_point [ 62, STREET_POINT, 151.569 40 -0.5 ] +store_suit_point [ 63, STREET_POINT, 154.069 30 -0.5 ] +store_suit_point [ 64, STREET_POINT, 161.569 35 -0.5 ] +store_suit_point [ 65, STREET_POINT, 161.569 40 -0.5 ] +store_suit_point [ 66, STREET_POINT, 161.569 60 -0.5 ] +store_suit_point [ 67, STREET_POINT, 151.569 60 -0.5 ] +store_suit_point [ 68, STREET_POINT, 80 55 -0.5 ] +store_suit_point [ 69, STREET_POINT, 87.5 52.5 -0.5 ] +store_suit_point [ 70, STREET_POINT, 161.569 75 -0.5 ] +store_suit_point [ 71, STREET_POINT, 176.569 75 -0.5 ] +store_suit_point [ 72, STREET_POINT, 176.569 85 -0.5 ] +store_suit_point [ 73, STREET_POINT, 159.069 85 -0.5 ] +store_suit_point [ 74, STREET_POINT, 151.569 85 -0.5 ] +store_suit_point [ 75, STREET_POINT, 201.569 75 -0.5 ] +store_suit_point [ 76, STREET_POINT, 201.569 60 -0.5 ] +store_suit_point [ 77, STREET_POINT, 216.569 60 -0.5 ] +store_suit_point [ 78, STREET_POINT, 216.569 100 -0.5 ] +store_suit_point [ 79, STREET_POINT, 201.569 100 -0.5 ] +store_suit_point [ 80, STREET_POINT, 201.569 85 -0.5 ] +store_suit_point [ 81, STREET_POINT, 231.569 60 -0.5 ] +store_suit_point [ 82, STREET_POINT, 231.569 75 -0.5 ] +store_suit_point [ 83, STREET_POINT, 256.569 75 -0.5 ] +store_suit_point [ 84, STREET_POINT, 256.569 85 -0.5 ] +store_suit_point [ 85, STREET_POINT, 231.569 85 -0.5 ] +store_suit_point [ 86, STREET_POINT, 231.569 100 -0.5 ] +store_suit_point [ 87, STREET_POINT, 286.569 55 -0.5 ] +store_suit_point [ 88, STREET_POINT, 286.569 62.5 -0.5 ] +store_suit_point [ 89, STREET_POINT, 281.569 72.5 -0.5 ] +store_suit_point [ 90, STREET_POINT, 274.069 80 -0.5 ] +store_suit_point [ 91, STREET_POINT, 264.069 85 -0.5 ] +store_suit_point [ 94, STREET_POINT, 276.569 55 -0.5 ] +store_suit_point [ 95, STREET_POINT, 276.569 15 -0.5 ] +store_suit_point [ 96, STREET_POINT, 286.569 15 -0.5 ] +store_suit_point [ 97, STREET_POINT, 279.069 2.5 -0.5 ] +store_suit_point [ 98, STREET_POINT, 289.069 7.5 -0.5 ] +store_suit_point [ 99, STREET_POINT, 294.037 1.98663 -0.5 ] +store_suit_point [ 100, STREET_POINT, 289.037 -6.67362 -0.5 ] +store_suit_point [ 101, STREET_POINT, 302.027 -14.1736 -0.5 ] +store_suit_point [ 102, STREET_POINT, 294.527 -27.164 -0.5 ] +store_suit_point [ 103, STREET_POINT, 328.678 -18.0134 -0.5 ] +store_suit_point [ 104, STREET_POINT, 285.777 -42.3194 -0.5 ] +store_suit_point [ 105, STREET_POINT, 274.527 -61.805 -0.5 ] +store_suit_point [ 106, STREET_POINT, 372.47 -72.164 -0.5 ] +store_suit_point [ 107, STREET_POINT, 375.64 -56.6736 -0.5 ] +store_suit_point [ 108, STREET_POINT, 372.894 -46.4284 -0.5 ] +store_suit_point [ 109, STREET_POINT, 363.319 -38.0134 -0.5 ] +store_suit_point [ 110, STREET_POINT, 352.494 -31.7634 -0.5 ] +store_suit_point [ 111, STREET_POINT, 352.47 -106.805 -0.5 ] +store_suit_point [ 113, STREET_POINT, 283.678 -95.9557 -0.5 ] +store_suit_point [ 114, STREET_POINT, 318.319 -115.956 -0.5 ] +store_suit_point [ 115, STREET_POINT, 330.394 -120.041 -0.5 ] +store_suit_point [ 116, STREET_POINT, 344.055 -116.38 -0.5 ] +store_suit_point [ 117, STREET_POINT, 267.027 -74.7954 -0.5 ] +store_suit_point [ 118, STREET_POINT, 254.037 -67.2954 -0.5 ] +store_suit_point [ 119, STREET_POINT, 249.037 -75.9557 -0.5 ] +store_suit_point [ 120, STREET_POINT, 268.523 -87.2057 -0.5 ] +store_suit_point [ 121, STREET_POINT, 248.792 -61.3803 -0.5 ] +store_suit_point [ 122, STREET_POINT, 246.962 -54.5502 -0.5 ] +store_suit_point [ 123, STREET_POINT, 248.547 -46.805 -0.5 ] +store_suit_point [ 124, STREET_POINT, 239.886 -41.805 -0.5 ] +store_suit_point [ 125, STREET_POINT, 237.051 -51.7152 -0.5 ] +store_suit_point [ 126, STREET_POINT, 237.632 -60.7104 -0.5 ] +store_suit_point [ 127, STREET_POINT, 241.627 -68.7906 -0.5 ] +store_suit_point [ 128, STREET_POINT, 251.382 -36.8947 -0.5 ] +store_suit_point [ 129, STREET_POINT, 250.801 -27.8995 -0.5 ] +store_suit_point [ 130, STREET_POINT, 246.806 -19.8194 -0.5 ] +store_suit_point [ 131, STREET_POINT, 239.396 -12.6544 -0.5 ] +store_suit_point [ 132, STREET_POINT, 234.396 -21.3146 -0.5 ] +store_suit_point [ 133, STREET_POINT, 239.641 -27.2297 -0.5 ] +store_suit_point [ 134, STREET_POINT, 241.471 -34.0598 -0.5 ] +store_suit_point [ 135, STREET_POINT, 229.486 -9.81942 -0.5 ] +store_suit_point [ 136, STREET_POINT, 220.491 -10.3995 -0.5 ] +store_suit_point [ 137, STREET_POINT, 212.41 -14.3947 -0.5 ] +store_suit_point [ 138, STREET_POINT, 205.245 -21.805 -0.5 ] +store_suit_point [ 139, STREET_POINT, 213.906 -26.805 -0.5 ] +store_suit_point [ 140, STREET_POINT, 219.821 -21.5598 -0.5 ] +store_suit_point [ 141, STREET_POINT, 226.651 -19.7297 -0.5 ] +store_suit_point [ 142, STREET_POINT, 158.284 -10.7843 -0.5 ] +store_suit_point [ 143, STREET_POINT, 165.784 -5.78431 -0.5 ] +store_suit_point [ 144, STREET_POINT, 170.784 1.71569 -0.5 ] +store_suit_point [ 145, STREET_POINT, 85.784 1.7157 -0.5 ] +store_suit_point [ 146, STREET_POINT, 90.784 -5.7843 -0.5 ] +store_suit_point [ 147, STREET_POINT, 98.284 -10.7843 -0.5 ] +store_suit_point [ 148, STREET_POINT, 102.5 50 -0.5 ] +store_suit_point [ 149, STREET_POINT, 97.5 57.5 -0.5 ] +store_suit_point [ 150, STREET_POINT, 90 62.5 -0.5 ] +store_suit_point [ 151, STREET_POINT, 37.5 70 -0.5 ] +store_suit_point [ 152, STREET_POINT, 42.5 62.5 -0.5 ] +store_suit_point [ 153, STREET_POINT, 50 57.5 -0.5 ] +store_suit_point [ 154, STREET_POINT, 50 112.5 -0.5 ] +store_suit_point [ 155, STREET_POINT, 42.5 107.5 -0.5 ] +store_suit_point [ 156, STREET_POINT, 37.5 100 -0.5 ] +store_suit_point [ 157, STREET_POINT, 185.245 -56.446 -0.5 ] +store_suit_point [ 158, STREET_POINT, 193.906 -61.446 -0.5 ] +store_suit_point [ 159, STREET_POINT, 172.745 -78.0966 -0.5 ] +store_suit_point [ 160, STREET_POINT, 181.406 -83.0966 -0.5 ] +store_suit_point [ 161, STREET_POINT, 173.906 -96.087 -0.5 ] +store_suit_point [ 162, STREET_POINT, 182.566 -101.087 -0.5 ] +store_suit_point [ 163, STREET_POINT, 195.066 -79.4364 -0.5 ] +store_suit_point [ 164, STREET_POINT, 186.406 -74.4364 -0.5 ] +store_suit_point [ 165, STREET_POINT, 170.155 -102.582 -0.5 ] +store_suit_point [ 167, STREET_POINT, 183.056 -130.238 -0.5 ] +store_suit_point [ 168, STREET_POINT, 188.056 -121.577 -0.5 ] +store_suit_point [ 169, STREET_POINT, 175.066 -114.077 -0.5 ] +store_suit_point [ 170, STREET_POINT, 204.707 -142.738 -0.5 ] +store_suit_point [ 171, STREET_POINT, 209.707 -134.077 -0.5 ] +store_suit_point [ 172, STREET_POINT, 222.697 -141.577 -0.5 ] +store_suit_point [ 173, STREET_POINT, 227.697 -132.917 -0.5 ] +store_suit_point [ 174, STREET_POINT, 206.046 -120.417 -0.5 ] +store_suit_point [ 175, STREET_POINT, 201.046 -129.077 -0.5 ] +store_suit_point [ 176, STREET_POINT, 235.687 -149.077 -0.5 ] +store_suit_point [ 177, STREET_POINT, 228.187 -162.068 -0.5 ] +store_suit_point [ 178, STREET_POINT, 236.848 -167.068 -0.5 ] +store_suit_point [ 179, STREET_POINT, 245.598 -151.912 -0.5 ] +store_suit_point [ 180, STREET_POINT, 249.348 -145.417 -0.5 ] +store_suit_point [ 181, STREET_POINT, 240.687 -140.417 -0.5 ] +store_suit_point [ 182, STREET_POINT, 215.687 -183.718 -0.5 ] +store_suit_point [ 183, STREET_POINT, 224.348 -188.718 -0.5 ] +store_suit_point [ 184, STREET_POINT, 216.848 -201.709 -0.5 ] +store_suit_point [ 185, STREET_POINT, 225.508 -206.709 -0.5 ] +store_suit_point [ 186, STREET_POINT, 238.008 -185.058 -0.5 ] +store_suit_point [ 187, STREET_POINT, 229.348 -180.058 -0.5 ] +store_suit_point [ 188, STREET_POINT, 213.097 -208.204 -0.5 ] +store_suit_point [ 189, STREET_POINT, 206.847 -219.029 -0.5 ] +store_suit_point [ 190, STREET_POINT, 215.508 -224.029 -0.5 ] +store_suit_point [ 193, STREET_POINT, 200.508 -250.01 -0.5 ] +store_suit_point [ 230, STREET_POINT, 203.097 -225.524 -0.5 ] +store_suit_point [ 231, STREET_POINT, 191.847 -245.01 -0.5 ] +store_suit_point [ 232, STREET_POINT, 184.347 -258 -0.5 ] +store_suit_point [ 233, STREET_POINT, 177.852 -254.25 -0.5 ] +store_suit_point [ 234, STREET_POINT, 171.357 -250.5 -0.5 ] +store_suit_point [ 235, STREET_POINT, 166.357 -259.161 -0.5 ] +store_suit_point [ 236, STREET_POINT, 172.852 -262.911 -0.5 ] +store_suit_point [ 237, STREET_POINT, 188.008 -271.661 -0.5 ] +store_suit_point [ 238, STREET_POINT, 190.508 -267.331 -0.5 ] +store_suit_point [ 239, STREET_POINT, 149.706 -238 -0.5 ] +store_suit_point [ 240, STREET_POINT, 144.706 -246.661 -0.5 ] +store_suit_point [ 241, STREET_POINT, 131.716 -239.161 -0.5 ] +store_suit_point [ 242, STREET_POINT, 126.716 -247.821 -0.5 ] +store_suit_point [ 243, STREET_POINT, 148.367 -260.321 -0.5 ] +store_suit_point [ 244, STREET_POINT, 153.367 -251.661 -0.5 ] +store_suit_point [ 245, STREET_POINT, 97.075 -219.161 -0.5 ] +store_suit_point [ 246, STREET_POINT, 92.075 -227.821 -0.5 ] +store_suit_point [ 247, STREET_POINT, 92.9244 -176.35 -0.5 ] +store_suit_point [ 248, STREET_POINT, 82.9244 -193.67 -0.5 ] +store_suit_point [ 249, STREET_POINT, 91.5846 -198.67 -0.5 ] +store_suit_point [ 250, STREET_POINT, 101.585 -181.35 -0.5 ] +store_suit_point [ 252, STREET_POINT, 89.9997 -206.415 -0.5 ] +store_suit_point [ 253, STREET_POINT, 80.6904 -205.788 -0.5 ] +store_suit_point [ 254, STREET_POINT, 91.9942 -212.923 -0.5 ] +store_suit_point [ 255, STREET_POINT, 82.675 -219.027 -0.5 ] +store_suit_point [ 256, STREET_POINT, 112.835 -161.864 -0.5 ] +store_suit_point [ 257, STREET_POINT, 104.174 -156.864 -0.5 ] +store_suit_point [ 258, STREET_POINT, 114.957 -141.568 -0.5 ] +store_suit_point [ 259, STREET_POINT, 104.801 -141.698 -0.5 ] +store_suit_point [ 260, STREET_POINT, 112.392 -131.531 -0.5 ] +store_suit_point [ 261, STREET_POINT, 107.337 -123.769 -0.5 ] +store_suit_point [ 262, STREET_POINT, 99.8115 -119.075 -0.5 ] +store_suit_point [ 263, STREET_POINT, 89.8115 -116.575 -0.5 ] +store_suit_point [ 264, STREET_POINT, 89.8115 -126.575 -0.5 ] +store_suit_point [ 265, STREET_POINT, 97.3115 -129.075 -0.5 ] +store_suit_point [ 266, STREET_POINT, 102.312 -134.075 -0.5 ] +store_suit_point [ 267, STREET_POINT, 49.8115 -116.575 -0.5 ] +store_suit_point [ 268, STREET_POINT, 49.8115 -126.575 -0.5 ] +store_suit_point [ 272, STREET_POINT, 23.1203 -105.202 -0.5 ] +store_suit_point [ 273, STREET_POINT, 25.6947 -109.641 -0.5 ] +store_suit_point [ 274, STREET_POINT, 34.0186 -119.006 -0.5 ] +store_suit_point [ 275, STREET_POINT, 42.8091 -124.79 -0.5 ] +store_suit_point [ 276, STREET_POINT, 44.2516 -114.861 -0.5 ] +store_suit_point [ 279, STREET_POINT, 30.2953 -92.4957 -0.5 ] +store_suit_point [ 280, STREET_POINT, 32.0663 -85.8387 -0.5 ] +store_suit_point [ 281, STREET_POINT, 37.3115 -79.9236 -0.5 ] +store_suit_point [ 282, STREET_POINT, 32.3115 -71.2634 -0.5 ] +store_suit_point [ 283, STREET_POINT, 24.9013 -78.4284 -0.5 ] +store_suit_point [ 284, STREET_POINT, 20.9061 -86.5086 -0.5 ] +store_suit_point [ 285, STREET_POINT, 20.3259 -95.5037 -0.5 ] +store_suit_point [ 286, STREET_POINT, 36.9144 -108.876 -0.5 ] +store_suit_point [ 287, STREET_POINT, 31.8048 -100.424 -0.5 ] +store_suit_point [ 288, STREET_POINT, 44.7218 -72.7586 -0.5 ] +store_suit_point [ 289, STREET_POINT, 48.717 -64.6784 -0.5 ] +store_suit_point [ 290, STREET_POINT, 49.2971 -55.6832 -0.5 ] +store_suit_point [ 291, STREET_POINT, 46.4622 -45.773 -0.5 ] +store_suit_point [ 292, STREET_POINT, 37.8019 -50.773 -0.5 ] +store_suit_point [ 293, STREET_POINT, 39.3868 -58.5182 -0.5 ] +store_suit_point [ 294, STREET_POINT, 37.5567 -65.3483 -0.5 ] +store_suit_point [ 295, STREET_POINT, 42.7122 -39.2778 -0.5 ] +store_suit_point [ 296, STREET_POINT, 34.2971 -29.7025 -0.5 ] +store_suit_point [ 297, STREET_POINT, 26.217 -25.7073 -0.5 ] +store_suit_point [ 298, STREET_POINT, 17.2218 -25.1272 -0.5 ] +store_suit_point [ 299, STREET_POINT, 7.31152 -27.9621 -0.5 ] +store_suit_point [ 300, STREET_POINT, 12.3115 -36.6224 -0.5 ] +store_suit_point [ 301, STREET_POINT, 20.0567 -35.0374 -0.5 ] +store_suit_point [ 302, STREET_POINT, 26.8868 -36.8675 -0.5 ] +store_suit_point [ 303, STREET_POINT, 32.8019 -42.1127 -0.5 ] +store_suit_point [ 304, STREET_POINT, -0.433675 -29.547 -0.5 ] +store_suit_point [ 305, STREET_POINT, -7.2638 -27.7169 -0.5 ] +store_suit_point [ 306, STREET_POINT, -13.1789 -22.4717 -0.5 ] +store_suit_point [ 307, STREET_POINT, -21.8391 -27.4717 -0.5 ] +store_suit_point [ 308, STREET_POINT, -14.6741 -34.882 -0.5 ] +store_suit_point [ 309, STREET_POINT, -6.59393 -38.8772 -0.5 ] +store_suit_point [ 310, STREET_POINT, 2.40126 -39.4573 -0.5 ] +store_suit_point [ 311, STREET_POINT, -20.3439 -15.0617 -0.5 ] +store_suit_point [ 312, STREET_POINT, -28.4241 -11.0665 -0.5 ] +store_suit_point [ 313, STREET_POINT, -37.4192 -10.4864 -0.5 ] +store_suit_point [ 314, STREET_POINT, -47.3295 -13.3213 -0.5 ] +store_suit_point [ 315, STREET_POINT, -42.3295 -21.9816 -0.5 ] +store_suit_point [ 316, STREET_POINT, -34.5843 -20.3967 -0.5 ] +store_suit_point [ 317, STREET_POINT, -27.7542 -22.2268 -0.5 ] +store_suit_point [ 318, STREET_POINT, -66.8151 -24.5713 -0.5 ] +store_suit_point [ 319, STREET_POINT, -81.9705 -33.3213 -0.5 ] +store_suit_point [ 320, STREET_POINT, -76.9705 -41.9816 -0.5 ] +store_suit_point [ 321, STREET_POINT, -61.8151 -33.2316 -0.5 ] +store_suit_point [ 322, STREET_POINT, -103.621 -45.8213 -0.5 ] +store_suit_point [ 323, STREET_POINT, -98.6212 -54.4816 -0.5 ] +store_suit_point [ 326, FRONT_DOOR_POINT, 62 42 0, 41 ] +store_suit_point [ 327, FRONT_DOOR_POINT, 107 64 0, 4 ] +store_suit_point [ 329, FRONT_DOOR_POINT, 125.569 10 0, 27 ] +store_suit_point [ 330, FRONT_DOOR_POINT, 186.284 9.7157 0, 9 ] +store_suit_point [ 334, STREET_POINT, 266.569 72.5 -0.5 ] +store_suit_point [ 335, STREET_POINT, 274.069 65 -0.5 ] +store_suit_point [ 336, FRONT_DOOR_POINT, 274.069 105 0, 40 ] +store_suit_point [ 338, FRONT_DOOR_POINT, 266.569 3 0, 53 ] +store_suit_point [ 339, FRONT_DOOR_POINT, 359.994 -18.773 0, 10 ] +store_suit_point [ 340, STREET_POINT, 363.47 -87.7524 -0.5 ] +store_suit_point [ 346, FRONT_DOOR_POINT, 190.38 -17.5525 0, 12 ] +store_suit_point [ 348, STREET_POINT, 161.405 -117.738 -0.5 ] +store_suit_point [ 363, SIDE_DOOR_POINT, 45 40 0, 41 ] +store_suit_point [ 364, SIDE_DOOR_POINT, 114.534 24.2157 0, 4 ] +store_suit_point [ 365, SIDE_DOOR_POINT, 102.981 -25.4074 0, 36 ] +store_suit_point [ 366, SIDE_DOOR_POINT, 142.034 10.4657 0, 27 ] +store_suit_point [ 367, SIDE_DOOR_POINT, 136.569 57.5 0, 5 ] +store_suit_point [ 368, SIDE_DOOR_POINT, 178.336 -13.033 0, 9 ] +store_suit_point [ 369, SIDE_DOOR_POINT, 246.569 52.5 0, 6 ] +store_suit_point [ 370, SIDE_DOOR_POINT, 256.569 112.5 0, 55 ] +store_suit_point [ 371, SIDE_DOOR_POINT, 261.569 105 0, 40 ] +store_suit_point [ 372, SIDE_DOOR_POINT, 296.569 20 0, 7 ] +store_suit_point [ 373, SIDE_DOOR_POINT, 276.292 -13.7489 0, 53 ] +store_suit_point [ 375, SIDE_DOOR_POINT, 342.673 -8.77299 0, 10 ] +store_suit_point [ 376, SIDE_DOOR_POINT, 359.21 -125.13 0, 44 ] +store_suit_point [ 377, SIDE_DOOR_POINT, 323.809 -136.446 0, 25 ] +store_suit_point [ 378, SIDE_DOOR_POINT, 280.508 -111.446 0, 13 ] +store_suit_point [ 379, SIDE_DOOR_POINT, 262.051 -8.414 0, 37 ] +store_suit_point [ 380, SIDE_DOOR_POINT, 201.005 0.850543 0, 12 ] +store_suit_point [ 381, SIDE_DOOR_POINT, 199.306 -102.092 0, 16 ] +store_suit_point [ 382, SIDE_DOOR_POINT, 162.901 -130.148 0, 38 ] +store_suit_point [ 385, SIDE_DOOR_POINT, 204.437 -203.204 0, 59 ] +store_suit_point [ 386, SIDE_DOOR_POINT, 213.498 -257.51 0, 18 ] +store_suit_point [ 387, SIDE_DOOR_POINT, 112.386 -262.641 0, 17 ] +store_suit_point [ 388, SIDE_DOOR_POINT, 90.7352 -250.141 0, 15 ] +store_suit_point [ 389, SIDE_DOOR_POINT, 127.41 -161.619 0, 21 ] +store_suit_point [ 390, SIDE_DOOR_POINT, 20.003 -127.444 0, 20 ] +store_suit_point [ 391, SIDE_DOOR_POINT, 66.9525 -51.2634 0, 8 ] +store_suit_point [ 392, SIDE_DOOR_POINT, -74.3151 -11.581 0, 19 ] +store_suit_point [ 393, SIDE_DOOR_POINT, -47.8199 -42.472 0, 22 ] +store_suit_point [ 394, SIDE_DOOR_POINT, 65 90 0, 52 ] +store_suit_point [ 395, SIDE_DOOR_POINT, 19.9915 97.6679 0, 3 ] +store_suit_point [ 396, FRONT_DOOR_POINT, 81.5218 92.5417 0, 52 ] +store_suit_point [ 397, FRONT_DOOR_POINT, 21.0417 82.5813 0, 3 ] +store_suit_point [ 398, FRONT_DOOR_POINT, 72.0566 0.671583 0, 36 ] +store_suit_point [ 399, FRONT_DOOR_POINT, 161.515 99.8757 0, 5 ] +store_suit_point [ 400, FRONT_DOOR_POINT, 228.788 119.735 0, 55 ] +store_suit_point [ 401, FRONT_DOOR_POINT, 216.569 40 0, 6 ] +store_suit_point [ 402, FRONT_DOOR_POINT, 308.99 52.5254 0, 7 ] +store_suit_point [ 403, FRONT_DOOR_POINT, 374.963 -96.9129 0, 44 ] +store_suit_point [ 404, FRONT_DOOR_POINT, 309.266 -126.686 0, 25 ] +store_suit_point [ 405, FRONT_DOOR_POINT, 275.875 -39.3814 0, 11 ] +store_suit_point [ 406, SIDE_DOOR_POINT, 268.413 -52.292 0, 11 ] +store_suit_point [ 407, FRONT_DOOR_POINT, 256.741 -97.3037 0, 13 ] +store_suit_point [ 408, FRONT_DOOR_POINT, 233.369 6.8717 1.90735e-006, 37 ] +store_suit_point [ 409, FRONT_DOOR_POINT, 207.953 -86.9567 0, 16 ] +store_suit_point [ 410, FRONT_DOOR_POINT, 152.766 -92.6484 0, 38 ] +store_suit_point [ 411, FRONT_DOOR_POINT, 250.172 -129.107 0, 54 ] +store_suit_point [ 412, FRONT_DOOR_POINT, 259.205 -156.937 0, 14 ] +store_suit_point [ 413, SIDE_DOOR_POINT, 263.376 -136.311 0, 54 ] +store_suit_point [ 414, SIDE_DOOR_POINT, 253.578 -167.78 0, 14 ] +store_suit_point [ 415, FRONT_DOOR_POINT, 195.545 -218.358 0, 59 ] +store_suit_point [ 416, FRONT_DOOR_POINT, 201.751 -276.768 0, 18 ] +store_suit_point [ 417, FRONT_DOOR_POINT, 168.842 -277.858 0, 17 ] +store_suit_point [ 418, FRONT_DOOR_POINT, 67.9396 -219.613 0, 15 ] +store_suit_point [ 419, FRONT_DOOR_POINT, 129.721 -121.488 0, 21 ] +store_suit_point [ 420, FRONT_DOOR_POINT, 11.7506 -115.203 0, 20 ] +store_suit_point [ 421, FRONT_DOOR_POINT, 52.9857 -27.4682 0, 8 ] +store_suit_point [ 422, FRONT_DOOR_POINT, -57.196 -1.92617 0, 19 ] +store_suit_point [ 423, FRONT_DOOR_POINT, -65.1404 -52.472 0, 22 ] +group "donaldsDreamland" [ + visgroup "9201" [ + vis [ "9201" "9202" "9203" "9205" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 3 0 ] + suit_edge [ 396 3 ] + suit_edge [ 3 396 ] + suit_edge [ 396 2 ] + suit_edge [ 2 396 ] + battle_cell [ 20 20 100 110 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_full_corner" ] + pos [ 120 130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb52:random_DNARoot" [ + pos [ 120 90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 5.87923 -5.78159 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.453 -6.331 0 ] + nhpr [ 8.58077e-007 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.153 -32.8274 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb52:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Midnight Oil & Gas Company" ] + pos [ 89.0946 89.5081 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + pos [ 0 0 2.34429 ] + scale [ 1.06415 1 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.25098 1 ] + pos [ -0.224386 0 -1.13527 ] + scale [ 0.913338 1 1.47667 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 105 90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 115 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 107.988 90.9562 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "linktunnel_dl_9000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 80 130 0 ] + nhpr [ -0 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0.00229422 0 -3.21825 ] + scale [ 1.32499 1 1.25185 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -0.50457 ] + scale [ 1.68159 1 1.14544 ] + width [ 39.247 ] + height [ 39.247 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + color [ 1 1 0.85098 1 ] + pos [ 0 0 1.55893 ] + scale [ 2 1 2 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.61951 ] + scale [ 0.860896 1 1 ] + width [ 46.2492 ] + height [ 46.2492 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 107.562 123.285 -0.500004 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "9202" [ + vis [ "9202" "9201" "9203" "9205" "9206" ] + suit_edge [ 2 4 ] + suit_edge [ 4 5 ] + suit_edge [ 6 7 ] + suit_edge [ 7 3 ] + suit_edge [ 394 7 ] + suit_edge [ 7 394 ] + suit_edge [ 394 4 ] + suit_edge [ 4 394 ] + battle_cell [ 20 20 70 110 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 60 90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb52:random_DNARoot" [ + pos [ 75 90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 17.7774 -5.11568 0 ] + nhpr [ 90 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 75 80 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 65 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 12.5226 -6.02246 0 ] + nhpr [ -90 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9203" [ + vis [ "9203" "9201" "9202" "9205" "9206" "9207" "9208" ] + suit_edge [ 12 13 ] + suit_edge [ 13 14 ] + suit_edge [ 14 6 ] + suit_edge [ 5 154 ] + suit_edge [ 154 155 ] + suit_edge [ 155 156 ] + suit_edge [ 156 11 ] + suit_edge [ 395 11 ] + suit_edge [ 11 395 ] + suit_edge [ 395 12 ] + suit_edge [ 12 395 ] + battle_cell [ 20 20 45.8702 103.805 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 20 90 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random_DNARoot" [ + pos [ 20 115 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 50 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6.7547 -1.172 0 ] + nhpr [ -117 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0 0 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 90 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 24.3831 -13.5805 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.7731 -5.65945 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.869781 0.869781 0.869781 ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 5.9893 1.5871 19.7323 ] + nhpr [ 20 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 30 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8.039 3.3404 18.5999 ] + nhpr [ 4.22897e-007 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 34.6341 124.667 -7.62939e-006 ] + nhpr [ 16.8891 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 29.3059 126.568 -2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "9204" [ + vis [ "9204" "9234" "9233" "9254" "9235" "9239" "9238" "9231" ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 144.396 -177.199 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 154.396 -159.878 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 155.736 -137.558 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 173.056 -147.558 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb38:random_DNARoot" [ + pos [ 154.396 -159.879 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 146.896 -172.869 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.05881 0.0558861 0.00247096 ] + nhpr [ -1.47878e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 136.896 -190.189 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 6.04254 -10.728 18.4069 ] + nhpr [ 120 0 -0 ] + scale [ 2.13666 2.13666 2.13666 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 129.396 -203.18 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4.17367 0.0309821 0 ] + nhpr [ -1.47878e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 16.9905 -2.11049 6.66804e-006 ] + nhpr [ 180 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 159.886 -180.369 -0.00250148 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 174.037 -205.859 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 7.93277 -15.1099 5.5696 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 9.85883 -23.5 0.00250148 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.52089 -21.6224 0.00247096 ] + nhpr [ 150 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.52242 -21.1989 0.00248622 ] + nhpr [ 180 0 -0 ] + scale [ 1.28934 1.28934 1.28934 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 181.537 -192.869 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.55504 -22.0276 0.00249004 ] + nhpr [ -2.93375e-006 0 -0 ] + scale [ 1.17292 1.17292 1.17292 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 2.32529 -22.7295 0.00249004 ] + nhpr [ 60 0 -0 ] + scale [ 1.13837 1.13837 1.13837 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 164.217 -182.869 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 156.717 -195.859 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 184.706 -177.379 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.0702 -1.44443 0 ] + nhpr [ 135 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 16.0556 -3.62714 0 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 174.248 -165.526 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 187.239 -173.026 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 168.758 -145.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 151.437 -135.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.9854 -1.9056 -1.14441e-005 ] + nhpr [ -0 0 -0 ] + scale [ 1.19701 1.19701 1.19701 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 15.0204 -1.05402 1.52588e-005 ] + nhpr [ -75 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 166.257 -149.366 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 168.758 -145.035 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 183.578 -159.365 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 166.537 -218.849 -0.00250148 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.896 -181.529 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 167.386 -167.378 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9205" [ + vis [ "9205" "9203" "9202" "9206" "9207" "9208" "9201" ] + suit_edge [ 11 15 ] + suit_edge [ 20 21 ] + suit_edge [ 21 22 ] + suit_edge [ 22 23 ] + suit_edge [ 23 12 ] + suit_edge [ 15 151 ] + suit_edge [ 151 152 ] + suit_edge [ 152 153 ] + suit_edge [ 153 19 ] + suit_edge [ 363 153 ] + suit_edge [ 153 363 ] + suit_edge [ 363 21 ] + suit_edge [ 21 363 ] + suit_edge [ 397 15 ] + suit_edge [ 15 397 ] + suit_edge [ 397 23 ] + suit_edge [ 23 397 ] + battle_cell [ 20 20 43.6687 68.7792 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 60 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_10x40" ] + pos [ 60 80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb3:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Fly By Night Travel Agency" ] + pos [ 20 72.2654 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0.231055 0 -0.599743 ] + scale [ 0.929182 1 0.755584 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.25098 1 ] + pos [ -0.0785351 0 0.580809 ] + scale [ 0.882725 1 0.7 ] + width [ 31.307 ] + height [ 31.307 ] + flags [ "bd" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 55 90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 60 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.8134 -11.2214 2.28882e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 35 40 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.4128 -1.6481 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + scale [ 1.15792 1.15792 1.15792 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.4603 -4.9955 -1.52588e-005 ] + nhpr [ 105 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 1.4917 -1.4434 0 ] + nhpr [ 63 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 55 40 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 16.102 -12.8922 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.22957 1.22957 1.22957 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.1041 -2.5038 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + scale [ 1.24365 1.24365 1.24365 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.3301 2.3522 19.6677 ] + nhpr [ 12 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + node "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 54.9835 75.8832 0 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9206" [ + vis [ "9206" "9205" "9203" "9207" "9208" "9209" "9210" ] + suit_edge [ 24 20 ] + suit_edge [ 19 68 ] + suit_edge [ 326 19 ] + suit_edge [ 19 326 ] + suit_edge [ 326 20 ] + suit_edge [ 20 326 ] + battle_cell [ 20 20 70.3342 60.3614 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 60 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb41:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Don't Let The Bed Bugs Bite" ] + pos [ 69.078 40 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.615686 0.384314 0.176471 1 ] + pos [ 0 0 1.20196 ] + scale [ 0.845056 1 0.689816 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ -0.117016 0 0.499345 ] + scale [ 0.731638 1 1.35203 ] + width [ 33.704 ] + height [ 33.704 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 -0.292272 ] + width [ 31.6785 ] + height [ 31.6785 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "x" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 83.0726 40 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 55 80 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 17.9024 -2.3209 -1.52588e-005 ] + nhpr [ -105 0 -0 ] + scale [ 1.42144 1.42144 1.42144 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 17.6411 -1.5826 3.02221 ] + nhpr [ -117 0 -0 ] + scale [ 0.895142 0.895142 0.895142 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9207" [ + vis [ "9207" "9206" "9205" "9203" "9208" "9209" "9210" ] + suit_edge [ 27 28 ] + suit_edge [ 68 69 ] + suit_edge [ 69 27 ] + suit_edge [ 29 148 ] + suit_edge [ 148 149 ] + suit_edge [ 149 150 ] + suit_edge [ 150 24 ] + suit_edge [ 327 149 ] + suit_edge [ 149 327 ] + suit_edge [ 327 27 ] + suit_edge [ 27 327 ] + battle_cell [ 20 20 94.1752 53.5926 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb4:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Night Owl Pet Shop" ] + pos [ 103.149 71.1177 0 ] + nhpr [ -45 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.25 0.25 0.25 1 ] + pos [ -0.0117327 0 -4.1529 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0.0159257 0 1.21944 ] + scale [ 1.56921 1 1.07442 ] + width [ 16.7691 ] + height [ 16.7691 ] + flags [ "d" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "l" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.501961 0.752941 1 ] + scale [ 1.18026 1 1 ] + width [ 29.3039 ] + height [ 29.3039 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 80 80 0 ] + nhpr [ -15 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 94.4889 76.1177 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ -2.56707e-006 5.1963e-007 0 ] + nhpr [ 2.95756e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 113.756 60.5111 0 ] + nhpr [ -75 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 88.2103 75.5923 0 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 113.525 51.4232 -2.28882e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9208" [ + vis [ "9208" "9207" "9206" "9205" "9203" "9209" "9210" "9211" ] + suit_edge [ 28 34 ] + suit_edge [ 34 35 ] + suit_edge [ 36 37 ] + suit_edge [ 37 29 ] + suit_edge [ 364 37 ] + suit_edge [ 37 364 ] + suit_edge [ 364 34 ] + suit_edge [ 34 364 ] + battle_cell [ 20 20 94.5934 26.556 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random_DNARoot" [ + pos [ 117.638 46.0222 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 110.09 18.0876 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 117.59 31.078 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.85074 -6.21302 0 ] + nhpr [ -1.70755e-006 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 19.7433 -15.0845 16.9895 ] + nhpr [ -60 0 -0 ] + scale [ 3.64421 3.64421 3.64421 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 69.8902 7.99806 0 ] + nhpr [ 85 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 12.8379 0.171509 0 ] + nhpr [ -0 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.45454 -1.74303 0 ] + nhpr [ -160 0 -0 ] + scale [ 1.30406 1.30406 1.30406 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.33692 -1.48641 0 ] + nhpr [ -130 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 59.9283 8.86962 0 ] + nhpr [ -5 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 69.9432 24.9347 0 ] + nhpr [ 49 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 116.223 38.6322 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9209" [ + vis [ "9209" "9208" "9207" "9206" "9210" "9211" "9212" ] + suit_edge [ 43 44 ] + suit_edge [ 44 45 ] + suit_edge [ 45 36 ] + suit_edge [ 35 145 ] + suit_edge [ 145 146 ] + suit_edge [ 146 147 ] + suit_edge [ 147 42 ] + suit_edge [ 365 42 ] + suit_edge [ 42 365 ] + suit_edge [ 365 43 ] + suit_edge [ 43 365 ] + suit_edge [ 398 145 ] + suit_edge [ 145 398 ] + suit_edge [ 398 45 ] + suit_edge [ 45 398 ] + battle_cell [ 20 20 93.5315 -1.40532 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb36:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Dream Jobs Employment Agency" ] + pos [ 72.0413 -7.30968 0 ] + nhpr [ 105 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.501961 1 1 ] + pos [ -6.65536 0 -0.244865 ] + scale [ 0.752 1 0.842995 ] + kern [ 0.0774606 ] + wiggle [ 3.87772 ] + stomp [ -0.0714836 ] + width [ 87.6813 ] + height [ 87.6813 ] + flags [ "bd" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.14902 0.152941 0.34902 1 ] + pos [ -6.77414 0 -0.958666 ] + scale [ 0.609591 1 0.577503 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 92.7108 -23.651 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.70767 19.1875 3.81871 ] + nhpr [ 165 0 -0 ] + scale [ 1.25013 1.25013 1.25013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 14.1397 12.3662 0 ] + nhpr [ 165 0 -0 ] + scale [ 1.6521 1.6521 1.6521 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 112.407 -27.124 0 ] + nhpr [ 170 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 15.4082 -5.38501 -7.6294e-006 ] + nhpr [ 85 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 2.93017 -2.15756 2.58141 ] + nhpr [ 73 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.01389 -1.9586 0 ] + nhpr [ 70 0 -0 ] + scale [ 1.20735 1.20735 1.20735 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 92.7108 -23.6511 0 ] + nhpr [ -130 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 110.67 -36.9721 0 ] + nhpr [ 80 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 79.7223 -16.2973 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.97805 6.46513 0 ] + nhpr [ -165 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 79.3335 -10.3044 -7.62939e-006 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "9210" [ + vis [ "9210" "9209" "9208" "9207" "9206" "9211" "9212" "9213" "9214" "9215" ] + suit_edge [ 42 46 ] + suit_edge [ 46 47 ] + suit_edge [ 48 49 ] + suit_edge [ 49 43 ] + suit_edge [ 329 49 ] + suit_edge [ 49 329 ] + suit_edge [ 329 46 ] + suit_edge [ 46 329 ] + suit_edge [ 366 48 ] + suit_edge [ 48 366 ] + suit_edge [ 366 47 ] + suit_edge [ 47 366 ] + battle_cell [ 20 20 127.358 -8.25511 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 148.284 11.7157 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb36:random_DNARoot" [ + pos [ 131.992 -27.4068 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "donalds_dreamland_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3.2648 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0 0.568627 0 1 ] + pos [ 0 0 -0.635018 ] + scale [ 0.957308 1 1.1128 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 0 1 ] + pos [ -0.222942 0 1.35609 ] + scale [ 0.561101 1 0.557471 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.016 2.5666 19.2248 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 105.09 9.42734 0 ] + nhpr [ 5 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 131.788 10.7347 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 147.592 -27.4068 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 9.224 0.0889003 0 ] + nhpr [ 0.999998 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + landmark_building "tb27:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "You Snooze, You Lose" ] + pos [ 117.327 12.0756 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign3" ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.840175 ] + scale [ 0.885725 1 0.961833 ] + width [ 27.5946 ] + height [ 27.5946 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ ":" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.74902 1 0.74902 1 ] + pos [ 0 0 0.232379 ] + scale [ 0.68508 1 0.58438 ] + width [ 27.6927 ] + height [ 27.6927 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 146.534 -26.2855 0 ] + nhpr [ 180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 112.853 5.79618 0 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "9211" [ + vis [ "9211" "9210" "9209" "9208" "9212" "9213" "9214" "9215" ] + suit_edge [ 50 51 ] + suit_edge [ 51 52 ] + suit_edge [ 52 48 ] + suit_edge [ 47 142 ] + suit_edge [ 142 143 ] + suit_edge [ 143 144 ] + suit_edge [ 144 57 ] + suit_edge [ 330 57 ] + suit_edge [ 57 330 ] + suit_edge [ 330 50 ] + suit_edge [ 50 330 ] + suit_edge [ 368 143 ] + suit_edge [ 143 368 ] + suit_edge [ 368 52 ] + suit_edge [ 52 368 ] + battle_cell [ 20 20 163.078 -0.788414 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random_DNARoot" [ + pos [ 181.432 -8.92604 0 ] + nhpr [ -130 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 175.083 -16.4922 0 ] + nhpr [ -145 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Pipe Dream Plumbers" ] + pos [ 186.569 20.7867 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.913725 0.913725 0.913725 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0.518293 0 -0.328368 ] + scale [ 0.841201 1 0.529807 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 1 1 ] + pos [ 0 0 0.417437 ] + scale [ 1.21361 1 1.62384 ] + width [ 19.644 ] + height [ 19.644 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 186.535 2.26785 0 ] + nhpr [ -115 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 12.7011 -0.0962933 19.7018 ] + nhpr [ 100 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 7.3794 -4.96446 0 ] + nhpr [ 85 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 166.911 -22.2304 0 ] + nhpr [ -165 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 5.8948 -4.60582 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.71949 1.919 18.3355 ] + nhpr [ -107 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 180.867 -6.35105 0 ] + nhpr [ 60 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9212" [ + vis [ "9212" "9211" "9210" "9209" "9208" "9213" "9214" "9215" "9216" ] + suit_edge [ 57 58 ] + suit_edge [ 61 50 ] + suit_edge [ 62 63 ] + suit_edge [ 63 61 ] + suit_edge [ 58 64 ] + suit_edge [ 64 65 ] + battle_cell [ 20 20 162.947 25.0846 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 176.569 40 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 151.788 10.7347 0 ] + nhpr [ 125 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 171.569 45 0 ] + nhpr [ -55 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.25848 -5.58958 2.28882e-005 ] + nhpr [ -95 0 -0 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 183.041 28.617 0 ] + nhpr [ -75 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 140.311 27.1125 0 ] + nhpr [ 105 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 0.409073 -2.21535 2.28882e-005 ] + nhpr [ -150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.3336 -1.62 -3.05176e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 11.3065 -1.29135 0 ] + nhpr [ 138 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9213" [ + vis [ "9212" "9211" "9213" "9210" "9214" "9215" "9216" "9217" ] + suit_edge [ 65 66 ] + suit_edge [ 67 62 ] + suit_edge [ 367 67 ] + suit_edge [ 67 367 ] + suit_edge [ 367 66 ] + suit_edge [ 66 367 ] + battle_cell [ 20 20 156.487 49.9005 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 176.569 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.686 -5.67 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 50 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 171.569 60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.6554 1.628 16.3103 ] + nhpr [ -89 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9214" [ + vis [ "9214" "9213" "9212" "9211" "9215" "9216" "9217" "9210" "9218" ] + suit_edge [ 66 70 ] + suit_edge [ 70 71 ] + suit_edge [ 72 73 ] + suit_edge [ 73 74 ] + suit_edge [ 74 67 ] + suit_edge [ 399 73 ] + suit_edge [ 73 399 ] + suit_edge [ 399 70 ] + suit_edge [ 70 399 ] + battle_cell [ 20 20 156.595 79.5709 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 136.569 60 2.28882e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 65 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 21.0066 -6.816 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.6911 2.007 18.4855 ] + nhpr [ 12 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 85.7 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 176.569 100 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.541 0.94099 18.2261 ] + nhpr [ -2 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 171.569 135 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 156.569 135 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Asleep At The Wheel Car Repair" ] + pos [ 154.387 100.141 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.11184 ] + scale [ 0.65292 1 0.60509 ] + baseline [ + code [ "humanist" ] + color [ 0.776471 0 0.388235 1 ] + pos [ 0 0 0.740916 ] + scale [ 0.994616 1 0.824829 ] + width [ 36.6613 ] + height [ 36.6613 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.658824 0.658824 1 ] + pos [ 0 0 -0.163427 ] + width [ 31.8524 ] + height [ 31.8524 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 166.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 27.223 -28.6328 26.4696 ] + nhpr [ -180 0 -0 ] + scale [ 3.21008 3.21008 3.21008 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 138.21 70.5923 0 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 173.503 95.8773 2.28882e-005 ] + nhpr [ -17.5006 0 -0 ] + ] + ] + visgroup "9215" [ + vis [ "9215" "9214" "9213" "9212" "9211" "9210" "9216" "9217" "9218" ] + suit_edge [ 71 75 ] + suit_edge [ 75 76 ] + suit_edge [ 76 77 ] + suit_edge [ 78 79 ] + suit_edge [ 79 80 ] + suit_edge [ 80 72 ] + battle_cell [ 20 20 196.165 80.1002 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 176.569 45 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb6:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Tooth Fairy Dentistry" ] + pos [ 225.044 39.8469 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.461693 0 0.903882 ] + baseline [ + code [ "DL_JiggeryPokery" ] + pos [ 0 0 0.227025 ] + scale [ 0.940191 1 0.7 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 1 0.0352941 1 ] + pos [ 0 0 1.13657 ] + scale [ 1.22391 1 1 ] + width [ 33.5926 ] + height [ 33.5926 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 176.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 135 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 115 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6.80299 -21.8678 2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.17101 -5.317 2.10126 ] + nhpr [ 135 0.0825656 -0.317094 ] + scale [ 0.726884 0.726884 0.726884 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.17599 -1.652 2.12898 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.62 -1.535 -1.52588e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.77 2.165 28.634 ] + nhpr [ 84 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 201.569 120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 100 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 115 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 186.569 60 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 1.754 1.2418 19.2071 ] + nhpr [ 37 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.256 -6.41686 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.809653 0.809653 0.809653 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 186.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 26.7551 -6.767 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 7.7173 -2.08579e-006 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 226.569 40.821 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 1.99225 -31.7626 -0.521616 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 16.9303 -31.7689 -0.521595 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 16.9247 -46.7426 -0.512082 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 1.71529 -46.7582 -0.336 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -36.7263 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -41.7262 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -46.7262 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 7.0399 -46.7262 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 12.0399 -46.7263 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.0399 -46.7263 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.0399 -41.7263 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.04 -36.7263 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.04 -31.7262 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03997 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 7.03995 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 12.04 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_mickey_on_horse" ] + pos [ 9.99999 -39.179 0 ] + nhpr [ 90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 37.723 -72.065 -1.52588e-005 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 37.896 -68.881 -1.52588e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 211.569 40 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.6663 -6.62086 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 202.463 113.743 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 213.098 109.023 -1.52588e-005 ] + nhpr [ -30 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 188.401 105.55 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9216" [ + vis [ "9216" "9215" "9214" "9213" "9212" "9217" "9220" "9219" "9218" "9222" "9223" "9224" "9221" ] + suit_edge [ 77 81 ] + suit_edge [ 81 82 ] + suit_edge [ 82 83 ] + suit_edge [ 84 85 ] + suit_edge [ 85 86 ] + suit_edge [ 86 78 ] + suit_edge [ 369 81 ] + suit_edge [ 81 369 ] + suit_edge [ 370 86 ] + suit_edge [ 86 370 ] + suit_edge [ 400 86 ] + suit_edge [ 86 400 ] + suit_edge [ 401 77 ] + suit_edge [ 77 401 ] + battle_cell [ 20 20 236.702 79.9165 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 256.569 115 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb55:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Bedknobs & Broomsticks Movie House" ] + pos [ 218.565 120.173 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_marquee" ] + pos [ 10 1.41611 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 -1.58504 ] + scale [ 0.994707 1 1.45858 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "mickey" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 246.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 256.569 120 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.537 -2.06501 -1.52588e-005 ] + nhpr [ 30 0 -0 ] + scale [ 0.789565 0.789565 0.789566 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.738 -1.30401 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + scale [ 0.762505 0.762505 0.762505 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 261.569 65 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 246.569 65 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 236.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 9.39101 0.052002 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 1.636 -9.33 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 3.327 -26.6292 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 246.569 40.821 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 18.547 -5.6525 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.757557 0.757557 0.757557 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6.92199 -26.1606 2.28882e-005 ] + nhpr [ -1.00179e-005 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 247.009 97.0516 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + pos [ 231.034 51.6699 2.28882e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "9217" [ + vis [ "9217" "9216" "9215" "9214" "9213" "9218" "9221" "9225" "9224" "9223" "9222" "9220" "9219" ] + suit_edge [ 87 88 ] + suit_edge [ 88 89 ] + suit_edge [ 89 90 ] + suit_edge [ 90 91 ] + suit_edge [ 91 84 ] + suit_edge [ 83 334 ] + suit_edge [ 335 94 ] + suit_edge [ 334 335 ] + suit_edge [ 336 90 ] + suit_edge [ 90 336 ] + suit_edge [ 336 334 ] + suit_edge [ 334 336 ] + suit_edge [ 371 91 ] + suit_edge [ 91 371 ] + suit_edge [ 371 83 ] + suit_edge [ 83 371 ] + battle_cell [ 20 20 273.213 73.5494 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 256.569 95 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb40:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Hit The Sack Fencing School" ] + pos [ 266.569 105 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0.128269 0 -3.39044 ] + scale [ 1 1 0.855724 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ 0 0 1.93137 ] + scale [ 1.08701 1 1.33553 ] + width [ 3.87752 ] + height [ 3.87752 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.435294 0 0.435294 1 ] + pos [ 0 0 1.09553 ] + scale [ 0.644495 1 0.837536 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.443137 0.721569 1 ] + pos [ 0.0930186 0 -0.0319999 ] + scale [ 1.41824 1 1.42881 ] + width [ 362.828 ] + height [ 362.828 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 0.501961 1 ] + pos [ 0.07803 0 -1.64222 ] + scale [ 1.30426 1 1.86083 ] + stumble [ 0.091158 ] + width [ 46.0647 ] + height [ 46.0647 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 281.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 10.381 -4.818 0 ] + nhpr [ -57 0 -0 ] + scale [ 0.771722 0.771722 0.771722 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.621 -8.0131 0.128048 ] + nhpr [ -30 0 -0 ] + scale [ 0.765124 0.765124 0.765124 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 120 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 311.569 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.569 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.82504 -1.35843 0 ] + nhpr [ 15 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.45706 -4.75485 0 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 311.569 90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 326.569 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 326.569 75 0 ] + nhpr [ -5 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 341.569 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 341.569 60 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 256.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.07501 4.741 18.6026 ] + nhpr [ -179 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.569 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.61869 -5.95599 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -0.816708 -17.5436 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.0563 21.497 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.53829 1.53829 1.53829 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -3.873 -22.327 23.9689 ] + nhpr [ -90 0 -0 ] + scale [ 2.95259 2.95259 2.95259 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 286.569 102.5 0 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 302.708 82.6344 0 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "9218" [ + vis [ "9218" "9217" "9216" "9215" "9219" "9220" "9221" "9222" "9223" "9224" "9225" "9214" ] + suit_edge [ 94 95 ] + suit_edge [ 96 87 ] + suit_edge [ 372 96 ] + suit_edge [ 96 372 ] + suit_edge [ 372 95 ] + suit_edge [ 95 372 ] + suit_edge [ 402 87 ] + suit_edge [ 87 402 ] + suit_edge [ 402 94 ] + suit_edge [ 94 402 ] + battle_cell [ 20 20 281.532 34.8645 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 261.569 55 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 301.569 15 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb7:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Dawn's Yawn & Garden Center" ] + pos [ 309.106 59.2976 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 1 0.501961 1 ] + pos [ -6.86992 0 1.17077 ] + scale [ 1.2862 1 1.54342 ] + stomp [ 0.0926768 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.658824 0 1 ] + pos [ -6.81464 0 0 ] + scale [ 0.595161 1 1 ] + kern [ 0.028386 ] + wiggle [ -4.83405 ] + stomp [ 0.05502 ] + flags [ "d" ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 311.569 25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 262.886 10.0644 0 ] + nhpr [ 95 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 4.4178 -5.92057 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 261.569 25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.0416 0.891997 20 ] + nhpr [ -0 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 246.569 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 296.569 25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 261.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.714 45 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 19.9628 0.226807 0 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 316.714 45 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 266.621 47.0541 -1.52588e-005 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "9219" [ + vis [ "9219" "9218" "9217" "9216" "9220" "9221" "9222" "9223" "9224" "9225" ] + suit_edge [ 95 97 ] + suit_edge [ 98 96 ] + suit_edge [ 99 98 ] + suit_edge [ 97 100 ] + suit_edge [ 338 97 ] + suit_edge [ 97 338 ] + suit_edge [ 338 98 ] + suit_edge [ 98 338 ] + suit_edge [ 373 100 ] + suit_edge [ 100 373 ] + suit_edge [ 373 99 ] + suit_edge [ 99 373 ] + battle_cell [ 20 20 284.556 5.11254 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_angle_60" ] + pos [ 301.569 15 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb53:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Moonbeam's Ice Creams" ] + pos [ 267.467 -6.80414 0 ] + nhpr [ 105 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.384314 0.384314 1 1 ] + pos [ 0.278437 0 -0.409452 ] + scale [ 0.906646 1 0.437504 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 1 1 1 ] + pos [ 0 0 1.10495 ] + scale [ 0.868682 1 1.00503 ] + width [ 26.0386 ] + height [ 26.0386 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + width [ 39.3878 ] + height [ 39.3878 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 285.899 -22.1411 0 ] + nhpr [ 135 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 15.9381 -22.4393 26.9205 ] + nhpr [ -150 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.3631 2.60985 22.1846 ] + nhpr [ -47 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 272.798 -7.73785 0 ] + nhpr [ -45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9220" [ + vis [ "9220" "9219" "9218" "9217" "9216" "9221" "9222" "9223" "9224" "9225" "9226" ] + suit_edge [ 100 101 ] + suit_edge [ 101 102 ] + suit_edge [ 103 99 ] + battle_cell [ 20 20 307.869 -13.4165 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 281.537 -19.664 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random_DNARoot" [ + pos [ 296.569 15 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 23.4532 1.96186 29.4658 ] + nhpr [ 114 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 318.22 2.5 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 318.889 5 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.63439 -1.78691 -1.52588e-005 ] + nhpr [ 15 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 13.485 -6.56077 2.28882e-005 ] + nhpr [ -90 -1.00179e-005 -6.56845e-013 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 313.032 4.10216 0 ] + nhpr [ 150 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9221" [ + vis [ "9221" "9220" "9219" "9218" "9217" "9216" "9222" "9223" "9224" "9225" "9226" ] + suit_edge [ 102 104 ] + suit_edge [ 104 105 ] + suit_edge [ 405 104 ] + suit_edge [ 104 405 ] + suit_edge [ 406 105 ] + suit_edge [ 105 406 ] + battle_cell [ 20 20 289.507 -46.1301 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 296.178 -74.305 -3.8147e-006 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb11:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Wake-Up Call Phone Company" ] + pos [ 272.135 -45.9607 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign3" ] + pos [ 0 0 1.34915 ] + scale [ 0.64845 1 0.566744 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0 1 ] + pos [ 0 0 0.541232 ] + nhpr [ -0 0 -0.337531 ] + scale [ 0.7 1 1.00801 ] + wiggle [ 1.25973 ] + stumble [ 0.0302791 ] + stomp [ -0.067041 ] + width [ 28.6372 ] + height [ 28.6372 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 278.399 -35.1315 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 263.399 -61.1123 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 284.182 -28.1167 -3.8147e-006 ] + nhpr [ 45 0 0 ] + ] + ] + visgroup "9222" [ + vis [ "9222" "9221" "9220" "9219" "9218" "9217" "9216" "9223" "9224" "9225" "9226" ] + suit_edge [ 106 107 ] + suit_edge [ 107 108 ] + suit_edge [ 108 109 ] + suit_edge [ 109 110 ] + suit_edge [ 110 103 ] + suit_edge [ 339 110 ] + suit_edge [ 110 339 ] + suit_edge [ 375 103 ] + suit_edge [ 103 375 ] + battle_cell [ 20 20 360.289 -42.0271 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 316.178 -39.664 1.52588e-005 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 370.819 -25.0229 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb10:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "REM Optometry" ] + pos [ 353.531 -15 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -1.01431 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.678466 ] + nhpr [ -0 0 1.69575 ] + scale [ 1.8012 1 1.78279 ] + width [ 28.4438 ] + height [ 28.4438 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.94902 1 0.34902 1 ] + pos [ -0.0993497 0 1.37372 ] + nhpr [ -0 0 1.35061 ] + scale [ 3.43584 1 1.22999 ] + kern [ 0.117277 ] + width [ 23.3532 ] + height [ 23.3532 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 383.841 -32.5 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.47746 2.79695 19.4272 ] + nhpr [ 114 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 392.502 -37.5 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 397.992 -57.9904 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2.09249 0.111097 -1.52588e-005 ] + nhpr [ 4.57536e-007 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 2.27233 -15.1472 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 392.992 -66.6506 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 9.99987 -2.96766 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.75 0.75 0.75 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -0.582935 ] + scale [ 0.909105 1 0.873139 ] + kern [ 0.0717778 ] + flags [ "bd" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 6.94618 2.33489 19.0268 ] + nhpr [ -88 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "animated_prop_SleepingHydrantAnimatedProp_DNARoot" [ + code [ "prop_DL_hydrant" ] + pos [ 14.8285 -8.31821 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 10.1733 -36.0779 2.28882e-005 ] + nhpr [ -90 1.00179e-005 6.56845e-013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 21.8615 -34.8954 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.10535 1.10535 1.10535 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 331.88 -2.5 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 17.0272 -5.78399 0 ] + nhpr [ 4.00117e-006 0 -0 ] + scale [ 0.691029 0.691029 0.691029 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ -1.62024 -33.7577 2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 0.438623 -45.7897 0 ] + nhpr [ 3.04139e-006 0 -0 ] + scale [ 1.2154 1.2154 1.2154 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 25.9743 -36.8208 0 ] + nhpr [ 2.95756e-006 0 -0 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 366.521 -22.5 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 11.9621 -5.69304 0 ] + nhpr [ -3.18633e-006 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 19.7891 0.0381873 -1.52588e-005 ] + nhpr [ -3.18633e-006 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 9.8798 -33.3543 29.0169 ] + nhpr [ -2.61839e-006 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 405.492 -45 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.4362 -1.77588 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.39085 -4.19687 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 349.668 -17.0469 1.52588e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "9223" [ + vis [ "9223" "9222" "9221" "9220" "9216" "9224" "9225" "9226" "9219" "9218" "9217" ] + suit_edge [ 340 106 ] + suit_edge [ 111 340 ] + suit_edge [ 403 340 ] + suit_edge [ 340 403 ] + battle_cell [ 20 20 357.426 -87.7625 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 365.46 -114.305 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 296.178 -74.305 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb44:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Rip Van Winkle's Wrinkle Cream" ] + pos [ 379.551 -89.9321 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.920151 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 1.04573 ] + scale [ 1.42699 1 0.7 ] + width [ 27.7316 ] + height [ 27.7316 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.866667 0.866667 0 1 ] + pos [ 0 0 0.369075 ] + nhpr [ -0 0 -2.00602 ] + scale [ 1 1 0.67903 ] + wiggle [ 2.92587 ] + stomp [ 0.026077 ] + width [ 27.2015 ] + height [ 27.2015 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 372.992 -101.292 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.2228 0.0593651 -1.52588e-005 ] + nhpr [ -4.66511e-006 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.79169 -35.3987 0 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 19.5701 -35.8164 2.28882e-005 ] + nhpr [ -90 -1.00179e-005 -6.56845e-013 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.89525 -50.2161 -1.52588e-005 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.15393 -52.0632 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.3951 -54.865 -1.52588e-005 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.24694 -5.38613 0 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + scale [ 0.83092 0.83092 0.83092 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 382.992 -83.9711 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + landmark_building "tb56:toon_landmark_hqDL_DNARoot" [ + code [ "toon_landmark_hqDL" ] + building_type [ "hq" ] + title [ "" ] + pos [ 322.91 -67.1147 0 ] + nhpr [ 60 0 -0 ] + ] + ] + ] + visgroup "9224" [ + vis [ "9224" "9223" "9222" "9221" "9220" "9219" "9218" "9217" "9216" "9225" "9226" "9227" "9228" ] + suit_edge [ 113 114 ] + suit_edge [ 114 115 ] + suit_edge [ 115 116 ] + suit_edge [ 116 111 ] + suit_edge [ 376 116 ] + suit_edge [ 116 376 ] + suit_edge [ 377 115 ] + suit_edge [ 115 377 ] + suit_edge [ 378 113 ] + suit_edge [ 113 378 ] + suit_edge [ 404 114 ] + suit_edge [ 114 404 ] + battle_cell [ 20 20 325.38 -113.262 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 365.46 -114.305 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 276.178 -108.946 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb44:random_DNARoot" [ + pos [ 355.492 -131.603 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.1706 2.25776 15.8763 ] + nhpr [ -88 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 14.694 -6.11876 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 345.492 -148.923 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 362.992 -118.612 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 14.5745 -13.5097 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 289.2 -116.423 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 21.0146 -6.84239 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 21.6222 -33.2008 2.28882e-005 ] + nhpr [ 1.70755e-006 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 18.999 -44.9032 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.36985 1.36985 1.36985 ] + ] + ] + landmark_building "tb25:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Cat's Pajamas" ] + pos [ 317.522 -132.921 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.606069 0 -0.483425 ] + nhpr [ -0 0 1.93027 ] + scale [ 0.87025 1 0.517336 ] + baseline [ + code [ "humanist" ] + color [ 1 0.415686 0.133333 1 ] + pos [ -0.0975055 0 0.0766824 ] + scale [ 0.873244 1 3.11655 ] + width [ 22.5194 ] + height [ 22.5194 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "j" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 332.501 -141.423 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 302.191 -123.923 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 16.4379 0.102715 21.5426 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 16.9171 -5.39527 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 14.9344 -35.7371 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.31868 1.31868 1.31868 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 334.289 -137.412 -7.62939e-006 ] + nhpr [ 162.691 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 337.499 -142.202 7.62939e-006 ] + nhpr [ 150 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 348.605 -139.338 -7.62939e-006 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "9225" [ + vis [ "9225" "9224" "9223" "9222" "9221" "9220" "9219" "9218" "9217" "9226" "9227" "9228" ] + suit_edge [ 105 117 ] + suit_edge [ 117 118 ] + suit_edge [ 119 120 ] + suit_edge [ 120 113 ] + suit_edge [ 407 120 ] + suit_edge [ 120 407 ] + suit_edge [ 407 117 ] + suit_edge [ 117 407 ] + battle_cell [ 20 20 269.329 -80.88 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 296.178 -74.305 -1.14441e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb13:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Wynken, Blynken & Nod, Attorneys at Law" ] + pos [ 262.87 -102.106 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "tunnel_sign_blue" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -2.59545 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 1.50608 ] + scale [ 0.7 1 1.03617 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.409213 ] + scale [ 0.620069 1 1.18694 ] + kern [ 0.0260926 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.996078 0.65098 0.00392157 1 ] + pos [ 0 0 -1.40453 ] + scale [ 1.19181 1 1.50774 ] + kern [ 0.0797818 ] + width [ 92.9174 ] + height [ 92.9174 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 250.229 -93.9231 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 0.815625 -18.8387 16.9912 ] + nhpr [ -165 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 271.88 -106.423 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 248.745 -91.395 -1.52588e-005 ] + nhpr [ 150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 265.93 -59.9049 -1.14441e-005 ] + nhpr [ 30 0 0 ] + ] + ] + visgroup "9226" [ + vis [ "9226" "9227" "9228" "9225" "9224" "9223" "9222" "9221" "9220" ] + suit_edge [ 118 121 ] + suit_edge [ 121 122 ] + suit_edge [ 122 123 ] + suit_edge [ 124 125 ] + suit_edge [ 125 126 ] + suit_edge [ 126 127 ] + suit_edge [ 127 119 ] + battle_cell [ 20 20 242.424 -59.8799 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 241.537 -88.946 2.28882e-005 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random_DNARoot" [ + pos [ 237.239 -86.4231 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.38301 2.27452 18.2286 ] + nhpr [ 2.00001 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 228.579 -81.4231 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.01254 -12.2538 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.80536 -16.5254 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.9492 -2.12469 2.28882e-005 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 215.589 -73.9231 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 3 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 225.589 -56.6026 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 221.258 -54.1026 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 254.739 -56.1123 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 224.87 -52.7145 2.28882e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + visgroup "9227" [ + vis [ "9227" "9226" "9225" "9228" "9229" "9230" "9231" "9224" ] + suit_edge [ 123 128 ] + suit_edge [ 128 129 ] + suit_edge [ 129 130 ] + suit_edge [ 130 131 ] + suit_edge [ 132 133 ] + suit_edge [ 133 134 ] + suit_edge [ 134 124 ] + suit_edge [ 379 130 ] + suit_edge [ 130 379 ] + suit_edge [ 379 133 ] + suit_edge [ 133 379 ] + battle_cell [ 20 20 245.937 -28.3708 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 246.896 0.336018 -7.62939e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random_DNARoot" [ + pos [ 231.259 -36.7821 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 264.739 -38.7918 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 272.239 -25.8014 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.7965 -10.5987 2.28882e-005 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 272.909 -14.6412 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 263.578 -20.8014 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 268.578 -12.1411 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 251.258 -2.14112 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 267.909 -23.3014 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 262.922 -14.4087 -7.62939e-006 ] + nhpr [ -105.365 0 -0 ] + ] + ] + visgroup "9228" [ + vis [ "9228" "9227" "9226" "9225" "9224" "9229" "9230" "9231" "9232" ] + suit_edge [ 131 135 ] + suit_edge [ 135 136 ] + suit_edge [ 136 137 ] + suit_edge [ 137 138 ] + suit_edge [ 139 140 ] + suit_edge [ 140 141 ] + suit_edge [ 141 132 ] + suit_edge [ 380 137 ] + suit_edge [ 137 380 ] + suit_edge [ 380 140 ] + suit_edge [ 140 380 ] + suit_edge [ 408 135 ] + suit_edge [ 135 408 ] + suit_edge [ 408 140 ] + suit_edge [ 140 408 ] + battle_cell [ 20 20 221.801 -15.2379 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 192.255 -14.3049 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb37:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Waltzing Matilda's Dance School" ] + pos [ 226.872 12.4693 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 1.06581 ] + scale [ 0.702004 1 0.958468 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 1 0.501961 1 ] + pos [ 0 0 0.639753 ] + scale [ 0.988508 1 0.904735 ] + kern [ 0.0632861 ] + wiggle [ -3.67194 ] + stomp [ 0.0546312 ] + width [ 29.8081 ] + height [ 29.8081 ] + flags [ "bd" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.701961 0.34902 1 ] + pos [ 0 0 -0.213058 ] + kern [ 0.0841751 ] + stomp [ 0.0627531 ] + width [ 25.3254 ] + height [ 25.3254 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 235.277 30.1794 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 212.287 20.3589 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.52499 9.57859 0 ] + nhpr [ 3.912e-006 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 207.287 11.6986 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 194.787 -9.95201 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 3 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 16.2495 0.0562993 -3.05176e-005 ] + nhpr [ -1.25001e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 7.99877 0.316833 31.1881 ] + nhpr [ 24 0 -0 ] + scale [ 1.57947 1.57947 1.57947 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 18.4558 -16.0227 2.28882e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 225.277 12.8589 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 15.253 -22.167 17.5977 ] + nhpr [ -150 0 -0 ] + scale [ 3.15622 3.15622 3.15622 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 238.267 5.35888 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 13.9461 -6.27329 0 ] + nhpr [ 2.12249e-006 0 -0 ] + scale [ 0.839676 0.839676 0.839676 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 220 15 0 ] + nhpr [ -30 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9229" [ + vis [ "9229" "9228" "9227" "9230" "9231" "9232" ] + suit_edge [ 138 157 ] + suit_edge [ 158 139 ] + suit_edge [ 346 138 ] + suit_edge [ 138 346 ] + suit_edge [ 346 139 ] + suit_edge [ 139 346 ] + battle_cell [ 20 20 198.766 -42.5383 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 206.896 -68.946 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random_DNARoot" [ + pos [ 214.428 -55.9327 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 11.4996 -5.47117 0 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 210.098 -53.4327 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb12:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Counting Sheep So You Don't Have To!" ] + pos [ 185.836 -25.1284 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.303842 0 -0.245498 ] + scale [ 0.713734 1 0.769229 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0 1 1 ] + pos [ 0 0 0.982449 ] + nhpr [ -0 0 -1.13872 ] + scale [ 1.16895 1 0.981278 ] + width [ 24.3057 ] + height [ 24.3057 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 1 1 ] + pos [ 0 0 0.352727 ] + nhpr [ -0 0 -0.926634 ] + scale [ 1.15864 1 0.471272 ] + width [ 26.2863 ] + height [ 26.2863 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 222.598 -31.7821 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 179.787 -35.9328 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 169.787 -53.2533 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.7116 -5.82453 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.778183 0.778183 0.778183 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 182.904 -32.4911 -1.52588e-005 ] + nhpr [ -120 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 179.267 -49.6409 -7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "9230" [ + vis [ "9230" "9229" "9228" "9227" "9231" "9232" "9233" "9234" ] + suit_edge [ 157 159 ] + suit_edge [ 159 160 ] + suit_edge [ 160 161 ] + suit_edge [ 162 163 ] + suit_edge [ 163 164 ] + suit_edge [ 164 158 ] + suit_edge [ 381 162 ] + suit_edge [ 162 381 ] + suit_edge [ 381 161 ] + suit_edge [ 161 381 ] + suit_edge [ 409 163 ] + suit_edge [ 163 409 ] + suit_edge [ 409 160 ] + suit_edge [ 160 409 ] + battle_cell [ 20 20 184.094 -78.9252 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 215.556 -73.946 3.05176e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 142.434 -60.5966 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb16:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Wet Blanket Party Planners" ] + pos [ 213.928 -80.856 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.860739 ] + scale [ 0.877658 1 0.824789 ] + baseline [ + code [ "mickey" ] + color [ 0.541176 0.756863 1 1 ] + pos [ 0 0 0.355259 ] + scale [ 0.64796 1 1.51096 ] + kern [ 0.0534257 ] + width [ 22.3396 ] + height [ 22.3396 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 152.466 -43.2533 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 164.117 -73.0738 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.3305 -1.40717 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11.0598 -1.35815 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.8076 -1.31717 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -0.927475 11.9586 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 206.928 -68.9231 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 215.588 -73.9231 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.86966 -16.8034 2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 205.562 -91.2891 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 5.41865 -5.74656 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 26.3091 -6.60191 2.28882e-005 ] + nhpr [ -1.70755e-006 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.617 -86.0642 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.9998 0.000473022 0 ] + nhpr [ 90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.30262 -12.0325 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 139.296 -76.0641 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 142.466 -60.5738 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.02431 1.52438 19.959 ] + nhpr [ 42 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 5.19602 -5.24578 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.848496 0.848496 0.848496 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.6072 -1.99346 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + scale [ 1.74349 1.74349 1.74349 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 18.6042 -7.29416 1.52588e-005 ] + nhpr [ -165 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 209.688 -76.4014 7.62939e-006 ] + nhpr [ -105 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 154.992 -46.6806 3.05176e-005 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "9231" [ + vis [ "9231" "9204" "9230" "9229" "9228" "9227" "9232" "9233" "9234" "9254" ] + suit_edge [ 161 165 ] + suit_edge [ 168 169 ] + suit_edge [ 169 162 ] + suit_edge [ 165 348 ] + suit_edge [ 348 167 ] + suit_edge [ 382 348 ] + suit_edge [ 348 382 ] + suit_edge [ 382 169 ] + suit_edge [ 169 382 ] + suit_edge [ 410 165 ] + suit_edge [ 165 410 ] + suit_edge [ 410 169 ] + suit_edge [ 169 410 ] + battle_cell [ 20 20 170.888 -115.505 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 175.556 -143.228 -8.39233e-005 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 155.915 -97.2464 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140.915 -123.228 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 160.916 -88.5871 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb38:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "House of Zzzzzs" ] + pos [ 148.818 -97.5354 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + color [ 0.75 0.75 0.75 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.647059 0.290196 1 1 ] + pos [ 0.120014 0 1.44206 ] + scale [ 1.46718 1 1.37518 ] + width [ 31.1293 ] + height [ 31.1293 ] + flags [ "d" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 128.595 -104.568 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 138.595 -87.2472 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.585 -112.068 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 145.947 -114.545 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 140.946 -123.206 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 136.585 -120.728 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 140.915 -123.228 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 135.915 -131.888 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 130.915 -140.549 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.49331 1.4753 29.6619 ] + nhpr [ 24 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 143.905 -148.049 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1852 -1.91149 2.89021 ] + nhpr [ -150 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.0149 -1.96248 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + scale [ 1.36864 1.36864 1.36864 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.04486 -1.30199 1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.405 -152.379 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.928 -155.526 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 154.396 -159.878 -0.00250148 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 166.928 -138.205 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 179.918 -145.705 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1823 -4.96848 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.8197 -2.02436 -0.115376 ] + nhpr [ 150 0 -0 ] + scale [ 1.32933 1.32933 1.32933 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.98367 -1.50823 2.28882e-005 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.85418 -0.0495509 -3.05176e-005 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.437 -126.375 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 169.428 -133.875 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 10.1952 -0.658628 28.4781 ] + nhpr [ 93 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 6.52642 -20.2601 22.5043 ] + nhpr [ -180 0 -0 ] + scale [ 2.89054 2.89054 2.89054 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.617 -112.045 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 156.805 -103.323 0 ] + nhpr [ 60 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 145.075 -110.779 -8.39233e-005 ] + nhpr [ 75 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 143.505 -145.365 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "9232" [ + vis [ "9232" "9231" "9230" "9229" "9228" "9233" "9234" "9235" "9236" "9237" ] + suit_edge [ 167 170 ] + suit_edge [ 170 171 ] + suit_edge [ 171 172 ] + suit_edge [ 173 174 ] + suit_edge [ 174 175 ] + suit_edge [ 175 168 ] + battle_cell [ 20 20 205.522 -131.216 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 200.556 -99.9268 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 227.877 -92.6062 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb54:random_DNARoot" [ + pos [ 193.088 -112.894 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 204.918 -102.404 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 209.918 -93.7436 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 219.248 -87.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 236.569 -97.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 245.229 -102.583 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 226.569 -114.904 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 245.229 -102.583 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 231.569 -106.244 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 197.418 -115.394 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.57409 2.63738 21.7657 ] + nhpr [ 24 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 217.909 -109.904 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 222.909 -101.244 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 188.578 -150.705 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 222.058 -152.715 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 213.399 -147.715 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 240.198 -111.266 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 205.899 -160.705 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 3.98742 -3.79238 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.625025 0.625025 0.625025 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 1.96904 -17.4285 -7.6294e-006 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 227.909 -92.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.13852 -1.30198 1.52588e-005 ] + nhpr [ -75 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.25376 -4.12359 1.52588e-005 ] + nhpr [ -45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 182.805 -145.313 -1.52588e-005 ] + nhpr [ -30 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 230.763 -118.312 0 ] + nhpr [ 150 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 207.357 -152.328 0 ] + nhpr [ -170.155 0 -0 ] + ] + ] + visgroup "9233" [ + vis [ "9233" "9232" "9231" "9230" "9234" "9235" "9236" "9237" "9238" "9254" "9204" ] + suit_edge [ 172 176 ] + suit_edge [ 176 177 ] + suit_edge [ 178 179 ] + suit_edge [ 179 180 ] + suit_edge [ 180 181 ] + suit_edge [ 181 173 ] + suit_edge [ 411 181 ] + suit_edge [ 181 411 ] + suit_edge [ 411 176 ] + suit_edge [ 176 411 ] + suit_edge [ 412 179 ] + suit_edge [ 179 412 ] + suit_edge [ 412 176 ] + suit_edge [ 176 412 ] + suit_edge [ 413 180 ] + suit_edge [ 180 413 ] + suit_edge [ 413 176 ] + suit_edge [ 176 413 ] + suit_edge [ 414 178 ] + suit_edge [ 178 414 ] + suit_edge [ 414 177 ] + suit_edge [ 177 414 ] + battle_cell [ 20 20 240.128 -147.974 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 235.197 -119.927 1.52588e-005 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 269.838 -139.927 3.8147e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb54:random_DNARoot" [ + pos [ 279.87 -122.583 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 269.87 -139.904 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 287.191 -149.904 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 5.32555 -4.80613 0 ] + nhpr [ -1.25001e-006 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.46942 -6.45512 0 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 282.191 -158.564 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb54:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Sleepless in the Saddle- All Night Pony Rides" ] + pos [ 241.738 -123.637 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + scale [ 0.693006 1 0.663482 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 1.02537 ] + scale [ 0.849423 1 0.883636 ] + kern [ 0.0297572 ] + width [ 25.7762 ] + height [ 25.7762 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.25098 0 0 1 ] + pos [ 0 0 0.206382 ] + scale [ 0.921691 1 0.756043 ] + width [ 27.5773 ] + height [ 27.5773 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb14:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Dreamboat Marine Supply" ] + pos [ 263.599 -150.906 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.71299 ] + nhpr [ -0 0 -3.94533 ] + scale [ 0.771886 1 0.570736 ] + baseline [ + code [ "mickey" ] + color [ 0.101961 0.65098 0.52549 1 ] + pos [ 0 0 -0.119258 ] + scale [ 0.713659 1 1.64076 ] + stomp [ 0.070094 ] + width [ 50.0356 ] + height [ 50.0356 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 235.229 -119.904 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 13.2419 -18.8217 21.8788 ] + nhpr [ -150 0 -0 ] + scale [ 2.97791 2.97791 2.97791 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 256.88 -132.404 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 257.339 -161.578 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 264.87 -148.564 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 277.327 -146.537 3.8147e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9234" [ + vis [ "9234" "9204" "9233" "9232" "9231" "9235" "9236" "9237" "9238" "9254" "9230" ] + suit_edge [ 177 182 ] + suit_edge [ 182 183 ] + suit_edge [ 183 184 ] + suit_edge [ 185 186 ] + suit_edge [ 186 187 ] + suit_edge [ 187 178 ] + battle_cell [ 20 20 226.706 -184.754 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 258.499 -179.568 1.52588e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 192.877 -153.228 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb59:random_DNARoot" [ + pos [ 210.687 -192.378 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10.151 -0.0860492 -3.05176e-005 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -1.99925 -2.80321 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 197.697 -184.879 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 200.229 -180.526 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 197.73 -184.856 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 212.058 -170.036 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 203.399 -165.035 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 186.078 -155.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 9.06302 -1.2206 0 ] + nhpr [ -15 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 6.26246 -1.89692 0 ] + nhpr [ -75 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.51445 -1.31977 0 ] + nhpr [ -120 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.1033 0.102358 -3.05176e-005 ] + nhpr [ -2.72879e-006 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 249.839 -174.568 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 258.5 -179.568 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 4.74964 -4.60861 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.721365 0.721365 0.721365 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.88238 -17.0466 -7.6294e-006 ] + nhpr [ 1.70755e-006 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.7735 3.19359 27.4057 ] + nhpr [ -88 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 248.5 -196.889 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 251.147 -186.25 -7.62939e-006 ] + nhpr [ -117.749 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 208.258 -188.288 -7.62939e-006 ] + nhpr [ 135 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 195.194 -163.316 1.52588e-005 ] + nhpr [ -30 0 -0 ] + ] + ] + visgroup "9235" [ + vis [ "9235" "9234" "9233" "9232" "9236" "9237" "9238" "9204" "9231" "9254" ] + suit_edge [ 184 188 ] + suit_edge [ 188 189 ] + suit_edge [ 190 185 ] + suit_edge [ 385 188 ] + suit_edge [ 188 385 ] + suit_edge [ 385 185 ] + suit_edge [ 185 385 ] + battle_cell [ 20 20 216.299 -212.882 -0.5 ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 238.499 -214.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 228.499 -231.529 3.8147e-006 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 238.5 -214.209 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 245.819 -241.529 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.3288 -0.979879 0 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.1215 0.147494 -0.00250148 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 198.187 -214.029 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.698 -23.2695 19.7752 ] + nhpr [ -90 0 -0 ] + scale [ 1.83063 1.83063 1.83063 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 231.925 -213.283 3.8147e-006 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "9236" [ + vis [ "9236" "9235" "9234" "9233" "9232" "9254" "9237" "9238" "9239" "9240" ] + suit_edge [ 193 190 ] + suit_edge [ 189 230 ] + suit_edge [ 230 231 ] + suit_edge [ 415 190 ] + suit_edge [ 190 415 ] + suit_edge [ 415 230 ] + suit_edge [ 230 415 ] + battle_cell [ 20 20 203.57 -234.581 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 213.498 -257.51 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random_DNARoot" [ + pos [ 233.319 -263.18 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 223.499 -240.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 240.819 -250.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.08912 -15.4527 5.17821 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 7.5575 -21.286 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 4.28016 -21.6055 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.82146 -22.9269 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 219.168 -237.689 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 224.168 -229.029 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb59:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Sleeping Beauty Parlor" ] + pos [ 191.261 -225.502 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 0.964002 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0 1 1 ] + pos [ 0 0 0.635299 ] + scale [ 1.14312 1 1.24159 ] + width [ 23.2937 ] + height [ 23.2937 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 180.687 -244.34 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9237" [ + vis [ "9237" "9236" "9235" "9234" "9233" "9232" "9238" "9239" "9240" "9241" ] + suit_edge [ 231 232 ] + suit_edge [ 232 233 ] + suit_edge [ 233 234 ] + suit_edge [ 235 236 ] + suit_edge [ 236 237 ] + suit_edge [ 237 238 ] + suit_edge [ 238 193 ] + suit_edge [ 386 193 ] + suit_edge [ 193 386 ] + suit_edge [ 386 231 ] + suit_edge [ 231 386 ] + suit_edge [ 416 238 ] + suit_edge [ 238 416 ] + suit_edge [ 416 232 ] + suit_edge [ 232 416 ] + suit_edge [ 417 236 ] + suit_edge [ 236 417 ] + suit_edge [ 417 233 ] + suit_edge [ 233 417 ] + battle_cell [ 20 20 185.209 -261.954 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 213.498 -257.51 -4.57764e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 176.178 -282.151 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb17:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Baker's Dozin' Doughnuts" ] + pos [ 174.078 -283.228 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.403922 0.807843 1 ] + pos [ -5.47682 0 0.541302 ] + nhpr [ -0 0 -10.2483 ] + scale [ 0.892292 1 1.36301 ] + kern [ 0.0233887 ] + stomp [ 0.0784459 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.792157 0.733333 0 1 ] + pos [ -6.34794 0 -0.932006 ] + nhpr [ -0 0 -8.62625 ] + scale [ 0.813732 1 1.27783 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb18:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Sandman's Sandwiches" ] + pos [ 207.59 -267.926 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0.637283 0 -0.521565 ] + scale [ 1 1 0.545244 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 1 0.501961 1 ] + pos [ 0.188808 0 1.04059 ] + scale [ 1.52207 1 1.25926 ] + width [ 36.8658 ] + height [ 36.8658 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0.52549 0.0509804 1 ] + width [ 31.174 ] + height [ 31.174 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 174.838 -304.472 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 4.63733 0.0758512 29.5044 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 174.838 -304.472 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 215.999 -253.18 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 203.988 -303.981 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 190.998 -296.481 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.34 0.31 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 183.498 -309.472 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 210.999 -261.84 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 1.65883 -6.90921 -7.6294e-006 ] + nhpr [ -4.66511e-006 0 -0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 195.999 -287.821 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 195.998 -287.821 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 198.498 -283.491 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 184.838 -287.151 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 14.1379 -17.8217 12.505 ] + nhpr [ 30 0 -0 ] + scale [ 2.64577 2.64577 2.64577 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 155.688 -287.641 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 166.178 -299.472 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 180.74 -283.104 -1.52588e-005 ] + nhpr [ 150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9238" [ + vis [ "9238" "9237" "9236" "9239" "9240" "9241" "9253" "9204" "9235" "9234" ] + suit_edge [ 234 239 ] + suit_edge [ 239 240 ] + suit_edge [ 240 241 ] + suit_edge [ 242 243 ] + suit_edge [ 243 244 ] + suit_edge [ 244 235 ] + battle_cell [ 20 20 148.765 -249.277 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 144.216 -217.51 -7.62939e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 136.536 -270.812 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb59:random_DNARoot" [ + pos [ 163.367 -234.34 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 143.546 -228.671 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 165.867 -230.01 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 154.527 -269.651 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 147.027 -282.642 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 151.357 -285.142 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 166.178 -299.472 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.25 0.25 0.25 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 143.857 -298.133 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 6.18412 -6.70527 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1075 -2.22888 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.69866 -2.68661 2.76731 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.21785 -11.8635 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.47316 -13.0878 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 135.196 -293.133 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 144.347 -327.283 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 11.7596 -14.2943 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.60446 1.60446 1.60446 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 127.027 -317.283 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.53664 1.8583 26.3331 ] + nhpr [ -48 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 114.036 -309.783 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.25 0.25 0.25 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 105.376 -304.783 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 125.376 -270.142 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.54192 3.49525 15 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 127.876 -265.812 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 136.536 -270.812 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 104.216 -286.792 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 112.876 -291.792 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 20.1564 -10.6438 21.1804 ] + nhpr [ 120 0 -0 ] + scale [ 3.36024 3.36024 3.36024 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.7833 -20.2273 -0.00250148 ] + nhpr [ -30 0 -0 ] + scale [ 1.31617 1.31617 1.31617 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 126.536 -288.132 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 163.187 -274.651 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 12.1642 -7.50893 -7.6294e-006 ] + nhpr [ 90 1.00179e-005 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 148.546 -220.01 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20.0008 -4.66244 -0.0757027 ] + nhpr [ 180 0.0286269 -0.000228887 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 5.0007 -4.99946 -0.124069 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.26575 -16.9604 -7.6294e-006 ] + nhpr [ -90 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 5.79254 -5.04227 0.000415744 ] + nhpr [ 90 0 -0 ] + scale [ 1.09157 1.09157 1.09157 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 14.1795 -4.54137 0.000415744 ] + nhpr [ 90 0 -0 ] + scale [ 1.10773 1.10773 1.10773 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 127.354 -262.827 0 ] + nhpr [ -30 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 159.751 -234.645 -7.62939e-006 ] + nhpr [ -30 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 135.386 -275.489 1.14441e-005 ] + nhpr [ 105 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 188.208 -298.126 0.000152588 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9239" [ + vis [ "9239" "9204" "9238" "9237" "9236" "9240" "9241" "9242" "9253" "9243" ] + suit_edge [ 241 245 ] + suit_edge [ 246 242 ] + suit_edge [ 387 242 ] + suit_edge [ 242 387 ] + suit_edge [ 387 241 ] + suit_edge [ 241 387 ] + suit_edge [ 388 246 ] + suit_edge [ 246 388 ] + suit_edge [ 388 245 ] + suit_edge [ 245 388 ] + battle_cell [ 20 20 112.144 -233.552 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 141.716 -221.84 -0.00246429 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 134.396 -194.519 -0.00249481 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb38:random_DNARoot" [ + pos [ 104.575 -206.17 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15.8909 -2.15184 -2.28882e-005 ] + nhpr [ 90 0 -0 ] + scale [ 1.56721 1.56721 1.56721 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 18.6401 -1.3036 0 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -4.92553 -4.3645 -7.6294e-006 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 134.886 -223.671 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 119.216 -260.812 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 116.716 -265.142 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 108.056 -260.142 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ -0.00927101 0.0420232 -0.00250148 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 103.726 -257.642 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.81247 2.55217 29.0433 ] + nhpr [ -48 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 6.70295 -10.2359 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 95.0654 -252.642 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 86.4051 -247.642 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -0.0220795 -28.2036 15.0959 ] + nhpr [ 30 0 -0 ] + scale [ 3.29097 3.29097 3.29097 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 82.075 -245.142 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 121.895 -216.17 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 144.886 -206.349 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_anvil_sign" ] + pos [ 9.97569 0.0875842 10.2422 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9240" [ + vis [ "9240" "9239" "9204" "9238" "9237" "9236" "9241" "9242" "9243" "9253" ] + suit_edge [ 245 254 ] + suit_edge [ 254 252 ] + suit_edge [ 253 255 ] + suit_edge [ 255 246 ] + suit_edge [ 418 255 ] + suit_edge [ 255 418 ] + suit_edge [ 418 254 ] + suit_edge [ 254 418 ] + battle_cell [ 20 20 87.2769 -216.265 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_angle_60" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb15:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "First Security Blanket Bank" ] + pos [ 72.1032 -226.562 0 ] + nhpr [ 120 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.2801 ] + scale [ 0.721157 1 0.510664 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.843137 0 1 ] + pos [ 0 0 0.588464 ] + scale [ 0.976958 1 1.23074 ] + width [ 26.0105 ] + height [ 26.0105 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 82.075 -245.142 0 ] + nhpr [ 145 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 84.5749 -240.811 0 ] + nhpr [ 125 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 73.8835 -239.406 0 ] + nhpr [ 85 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 74.755 -229.444 0 ] + nhpr [ 120 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 66.8228 -213.767 0 ] + nhpr [ 105 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6.8944 -1.1766 1.52588e-005 ] + nhpr [ 138 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 83.0878 -233.535 -5.72205e-006 ] + nhpr [ 150 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 157.351 -184.12 -0.00249481 ] + nhpr [ -120 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 137.781 -192.082 -0.00246429 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "9241" [ + vis [ "9241" "9242" "9243" "9240" "9239" "9253" "9238" "9237" ] + suit_edge [ 247 248 ] + suit_edge [ 249 250 ] + suit_edge [ 252 249 ] + suit_edge [ 248 253 ] + battle_cell [ 20 20 89.631 -192.05 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_angle_30" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random_DNARoot" [ + pos [ 64.7045 -205.861 0 ] + nhpr [ 75 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.93489 1.43858 18.9456 ] + nhpr [ 9 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 112.075 -193.18 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.85305 0.0202554 -0.00249385 ] + nhpr [ -4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 69.934 -186.171 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 7.51429 0.898873 19.8424 ] + nhpr [ 28 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.69953 2.3022 18.0917 ] + nhpr [ 92 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9242" [ + vis [ "9242" "9243" "9244" "9245" "9241" "9240" "9239" "9253" ] + suit_edge [ 258 260 ] + suit_edge [ 261 262 ] + suit_edge [ 262 263 ] + suit_edge [ 260 261 ] + suit_edge [ 264 265 ] + suit_edge [ 265 266 ] + suit_edge [ 266 259 ] + suit_edge [ 419 261 ] + suit_edge [ 261 419 ] + suit_edge [ 419 265 ] + suit_edge [ 265 419 ] + battle_cell [ 20 20 103.866 -127.665 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 89.811 -101.575 5.34058e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb21:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Snug As A Bug Rug Dealer" ] + pos [ 130.109 -113.198 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 0.637629 ] + scale [ 0.827096 1 0.719216 ] + baseline [ + code [ "humanist" ] + color [ 1 0.501961 0.752941 1 ] + pos [ -0.225556 0 0.199956 ] + scale [ 0.913242 1 1.63477 ] + kern [ 0.012469 ] + wiggle [ 4.54921 ] + stumble [ 0.0133593 ] + stomp [ -0.0559178 ] + width [ 31.0299 ] + height [ 31.0299 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 89.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -2.939 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.591318 ] + scale [ 0.822291 1 1.26575 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 22.7745 -14.447 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 109.811 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.201 -2.04401 2.09568 ] + nhpr [ 60 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.736 -2.056 0 ] + nhpr [ 75 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.437 -2.208 -9.09495e-013 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.37 9.65989 5.34058e-005 ] + nhpr [ -45 0 -0 ] + scale [ 1.72331 1.72331 1.72331 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 109.812 -101.575 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -101.575 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -126.575 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 21.61 0.097998 29.4962 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 3.08 -18.994 21.593 ] + nhpr [ -90 0 -0 ] + scale [ 3.31608 3.31608 3.31608 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 128.455 -135.584 0 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9243" [ + vis [ "9243" "9244" "9245" "9246" "9247" "9242" "9241" "9240" "9239" "9253" ] + suit_edge [ 263 267 ] + suit_edge [ 268 264 ] + battle_cell [ 20 20 68.8552 -121.728 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 89.8115 -101.575 5.34058e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random_DNARoot" [ + pos [ 79.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.8877 0.0459976 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 69.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 89.8115 -141.575 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.1032 0.0239942 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 74.8115 -141.575 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 64.8115 -141.575 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 49.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 3.45 -5.246 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.828018 0.828018 0.828017 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 63.8351 -136.846 5.34058e-005 ] + nhpr [ 180 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 125.878 -104.191 0.043129 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "9244" [ + vis [ "9244" "9243" "9242" "9253" "9245" "9246" "9247" ] + suit_edge [ 272 273 ] + suit_edge [ 273 274 ] + suit_edge [ 274 275 ] + suit_edge [ 275 268 ] + suit_edge [ 267 276 ] + suit_edge [ 276 286 ] + suit_edge [ 286 287 ] + suit_edge [ 390 274 ] + suit_edge [ 274 390 ] + suit_edge [ 390 286 ] + suit_edge [ 286 390 ] + suit_edge [ 420 287 ] + suit_edge [ 287 420 ] + suit_edge [ 420 273 ] + suit_edge [ 273 420 ] + battle_cell [ 20 20 35.1938 -114.611 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_angle_60" ] + pos [ 49.8115 -101.575 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 49.8115 -101.575 0 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb20:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Talking In Your Sleep Voice Training" ] + pos [ 15.178 -121.587 0 ] + nhpr [ 120 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -4.1022 ] + baseline [ + code [ "humanist" ] + color [ 0 1 1 1 ] + pos [ 0 0 1.03687 ] + scale [ 0.7 1 1.0159 ] + width [ 33.7893 ] + height [ 33.7893 ] + flags [ "bd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.623529 0.92549 1 ] + pos [ -0.0751857 0 -0.0854465 ] + scale [ 0.903799 1 0.89451 ] + flags [ "d" ] + text [ + letters [ "V" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 44.8115 -92.9143 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 4.93966 -7.79564 -7.6294e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 49.8115 -141.575 0 ] + nhpr [ 165 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 29.8168 -136.217 0 ] + nhpr [ 135 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 26.2965 -132.699 0 ] + nhpr [ 135 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.2495 1.43947 17.6114 ] + nhpr [ -47 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9245" [ + vis [ "9245" "9244" "9243" "9242" "9253" "9246" "9247" ] + suit_edge [ 279 280 ] + suit_edge [ 280 281 ] + suit_edge [ 282 283 ] + suit_edge [ 283 284 ] + suit_edge [ 284 285 ] + suit_edge [ 285 272 ] + suit_edge [ 287 279 ] + battle_cell [ 20 20 25.5068 -87.5754 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 10.1705 -112.914 0 ] + nhpr [ 30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random_DNARoot" [ + pos [ 0.170475 -95.5938 0 ] + nhpr [ 30 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 4.5006 -93.0938 0 ] + nhpr [ 120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.43712 13.8129 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.32039 1.32039 1.32039 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 15.1373 5.1925 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -2.9994 -80.1034 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 9.99098 -72.6034 0 ] + nhpr [ 120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -27.15 -88.2732 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -14.1597 -80.7732 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 0.170475 -95.5938 0 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 7.6705 -108.584 0 ] + nhpr [ 120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 18.5126 -1.53657 0 ] + nhpr [ 90 1.00179e-005 -1.52006e-013 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 7.12586 0.0203449 -0.00248622 ] + nhpr [ 4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 7.49098 -68.2732 0 ] + nhpr [ 30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 5.6396 -5.24996 0 ] + nhpr [ -145 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 21.0405 -6.58704 -7.6294e-006 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.4696 1.87872 29.0009 ] + nhpr [ 58 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.2366 -22.0998 21.9665 ] + nhpr [ 150 0 -0 ] + scale [ 3.8569 3.8569 3.8569 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 1.27769 -80.1102 0 ] + nhpr [ 30 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 14.6238 -77.2247 7.62939e-006 ] + nhpr [ 45 0 -0 ] + ] + ] + visgroup "9246" [ + vis [ "9246" "9245" "9244" "9243" "9247" "9248" "9249" "9250" "9251" ] + suit_edge [ 281 288 ] + suit_edge [ 288 289 ] + suit_edge [ 289 290 ] + suit_edge [ 290 291 ] + suit_edge [ 292 293 ] + suit_edge [ 293 294 ] + suit_edge [ 294 282 ] + suit_edge [ 391 290 ] + suit_edge [ 290 391 ] + suit_edge [ 391 293 ] + suit_edge [ 293 391 ] + battle_cell [ 20 20 44.1514 -62.1454 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 59.4525 -38.2732 0 ] + nhpr [ -150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random_DNARoot" [ + pos [ 69.4525 -55.5938 0 ] + nhpr [ -60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 18.5716 -5.83116 0 ] + nhpr [ 105 0 -0 ] + scale [ 0.930079 0.930079 0.930079 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0.383372 0.020216 -0.00248622 ] + nhpr [ -1.70755e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 79.4525 -72.9143 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 64.4525 -46.9335 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 56.9525 -33.9432 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 65.6129 -28.9434 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 62.132 -82.9143 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 4.11083 -8.59504 0 ] + nhpr [ 120 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 60.1544 -49.6795 0 ] + nhpr [ -60 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 74.1863 -69.9014 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 77.0436 -72.2915 0.000137329 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "9247" [ + vis [ "9247" "9246" "9245" "9244" "9243" "9248" "9249" "9250" "9251" "9252" ] + suit_edge [ 291 295 ] + suit_edge [ 295 296 ] + suit_edge [ 296 297 ] + suit_edge [ 297 298 ] + suit_edge [ 298 299 ] + suit_edge [ 300 301 ] + suit_edge [ 301 302 ] + suit_edge [ 302 303 ] + suit_edge [ 303 292 ] + suit_edge [ 421 296 ] + suit_edge [ 296 421 ] + suit_edge [ 421 303 ] + suit_edge [ 303 421 ] + battle_cell [ 20 20 26.5369 -31.1038 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 19.8115 -49.613 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -0.188519 -14.972 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb8:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Bed Of Roses Florist" ] + pos [ 49.9152 -20.1464 0 ] + nhpr [ -60 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0.501961 1 1 ] + pos [ 0.572069 0 1.70929 ] + scale [ 0.851944 1 0.897218 ] + stomp [ 0.0314333 ] + width [ 27.8054 ] + height [ 27.8054 ] + flags [ "bd" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 24.8115 -58.2732 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -0.188511 -14.972 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 12.9413 -7.9996 0 ] + nhpr [ -105 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.94122 2.5864 17.9567 ] + nhpr [ 72 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 20.5595 6.5414 5.47839 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 25.7923 0.0280228 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 6.10518 -4.98263 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 20.4075 -12.1685 18.9846 ] + nhpr [ -120 0 -0 ] + scale [ 3.5236 3.5236 3.5236 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 33.0585 -29.1605 -7.6294e-006 ] + nhpr [ 1.47878e-006 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 12.8019 -7.47198 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 13.2923 21.6787 0 ] + nhpr [ -60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 12.8019 -7.47198 0 ] + nhpr [ 120 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 30.7923 -8.63223 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 39.4525 -3.63224 0 ] + nhpr [ -60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 42.6224 -19.1227 0 ] + nhpr [ -60 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 25.0549 -13.9104 0 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "9248" [ + vis [ "9248" "9247" "9246" "9249" "9250" "9251" "9252" ] + suit_edge [ 299 304 ] + suit_edge [ 304 305 ] + suit_edge [ 305 306 ] + suit_edge [ 307 308 ] + suit_edge [ 308 309 ] + suit_edge [ 309 310 ] + suit_edge [ 310 300 ] + battle_cell [ 20 20 -6.33573 -33.6642 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 19.8115 -49.613 -2.28882e-005 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random_DNARoot" [ + pos [ -29.8295 -43.6322 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -19.8295 -60.9528 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.71478 0.0222962 -0.00248622 ] + nhpr [ 4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -14.8295 -69.613 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 2.49099 -59.613 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 0.0375563 -11.1996 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -24.8295 -52.2925 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 5.33228 1.57797 18.9821 ] + nhpr [ -32 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 19.8115 -49.613 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -11.9112 -56.6274 -2.28882e-005 ] + nhpr [ 144.829 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ -9.24541 -64.4177 -2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ -13.9491 -66.4154 -2.28882e-005 ] + nhpr [ -150 0 -0 ] + ] + ] + visgroup "9249" [ + vis [ "9249" "9250" "9251" "9248" "9247" "9246" "9252" ] + suit_edge [ 306 311 ] + suit_edge [ 311 312 ] + suit_edge [ 312 313 ] + suit_edge [ 313 314 ] + suit_edge [ 315 316 ] + suit_edge [ 316 317 ] + suit_edge [ 317 307 ] + battle_cell [ 20 20 -30.3799 -15.8859 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -54.8295 -0.330963 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random_DNARoot" [ + pos [ -20.1885 19.669 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Armadillo Pillow Company" ] + pos [ -65.4581 -6.3344 0 ] + nhpr [ 30 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -0.808214 ] + scale [ 1 1 0.75921 ] + baseline [ + code [ "mickey" ] + color [ 0.647059 0.54902 0.352941 1 ] + pos [ 0 0 0.115294 ] + scale [ 0.7 1 1.80567 ] + width [ 28.1902 ] + height [ 28.1902 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -50.4994 2.16904 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -41.8391 7.16904 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3.65095 0.324423 21.781 ] + nhpr [ 33 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.10648 -8.96329 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 25.0481 -5.03322 -0.00248622 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 23.1562 -2.25762 -0.00100327 ] + nhpr [ -147 0 -0 ] + scale [ 1.80429 1.80429 1.80429 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -12.6885 6.67866 0 ] + nhpr [ -60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.59545 -1.77122 0 ] + nhpr [ 105 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.49377 -1.44567 7.62939e-006 ] + nhpr [ 60 0 -0 ] + scale [ 0.82312 0.82312 0.82312 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.03311 -16.1446 -7.6294e-006 ] + nhpr [ -45 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -10.3332 -11.3436 7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9250" [ + vis [ "9250" "9249" "9248" "9247" "9246" "9251" "9252" ] + suit_edge [ 314 318 ] + suit_edge [ 318 319 ] + suit_edge [ 320 321 ] + suit_edge [ 321 315 ] + suit_edge [ 392 318 ] + suit_edge [ 318 392 ] + suit_edge [ 392 321 ] + suit_edge [ 321 392 ] + suit_edge [ 393 321 ] + suit_edge [ 321 393 ] + suit_edge [ 393 318 ] + suit_edge [ 318 393 ] + suit_edge [ 422 314 ] + suit_edge [ 314 422 ] + suit_edge [ 422 315 ] + suit_edge [ 315 422 ] + suit_edge [ 423 320 ] + suit_edge [ 320 423 ] + suit_edge [ 423 319 ] + suit_edge [ 319 423 ] + battle_cell [ 20 20 -63.1606 -28.1892 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -54.8295 -0.330963 0 ] + nhpr [ -150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb22:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Dream On Talent Agency" ] + pos [ -58.1102 -49.3521 0 ] + nhpr [ -150 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0.247483 0 1.43655 ] + scale [ 0.877563 1 0.526318 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0 1 ] + pos [ 0 0 0.435572 ] + nhpr [ -0 0 -2.05138 ] + scale [ 0.554214 1 2.13468 ] + width [ 30.2924 ] + height [ 30.2924 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -34.8295 -34.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 8.97771 -4.70316 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -43.4898 -39.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -85.1404 -17.831 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 20.4498 1.53528 19.1585 ] + nhpr [ 58 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -98.1307 -25.331 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -52.15 -44.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0.326088 0.00560557 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_hydrant_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 7.19837 -1.58966 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -69.4706 -54.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ -64.354 -7.20855 0 ] + nhpr [ -150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -81.4582 -21.9902 3.8147e-006 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "9251" [ + vis [ "9251" "9250" "9249" "9248" "9247" "9246" "9252" ] + suit_edge [ 319 322 ] + suit_edge [ 322 323 ] + suit_edge [ 323 320 ] + battle_cell [ 20 20 -93.9857 -45.8716 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -104.112 -74.972 0 ] + nhpr [ 30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random_DNARoot" [ + pos [ -126.252 -116.623 4.36375 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -81.6116 -113.943 5.01076 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -136.603 -18.6937 4.47683 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -161.244 -56.0142 4.43805 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build5_ur" ] + color [ 0.25 0.25 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build5_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -115.452 -35.331 0 ] + nhpr [ 30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 13.7601 -10.3428 23.0431 ] + nhpr [ 150 0 -0 ] + scale [ 4.44793 4.44793 4.44793 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -124.112 -40.331 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -78.1308 -59.972 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -95.4513 -69.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -151.959 -3.59358 19.2544 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -130.308 8.90644 19.2544 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -112.772 -15.821 3.19589 ] + nhpr [ 30 0 -0 ] + ] + ] + ] + visgroup "9252" [ + vis [ "9252" "9251" "9250" "9249" "9248" "9247" ] + group "streets" [ + street "street_10x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -91.6116 -96.6226 4.43199 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_stairs_40x10x5" ] + pos [ -136.199 -99.3953 -0.578773 ] + nhpr [ -60 -5.47327e-009 -9.48005e-009 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_4way_intersection" ] + pos [ -104.112 -74.972 0 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x40" ] + pos [ -163.753 -51.6707 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_stairs_40x10x5" ] + pos [ -126.656 -35.9218 -0.561953 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -131.603 -27.3539 4.43805 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x40" ] + pos [ -138.753 -94.972 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ -139.914 -115.865 23.5799 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -149.914 -98.544 23.5799 ] + nhpr [ -150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -159.459 9.39679 19.2544 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -113.262 -109.123 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -104.602 -104.123 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -91.6116 -96.6226 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -171.244 -38.6937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -158.254 -31.1937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -149.593 -26.1937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -136.611 -18.6803 -0.561953 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -131.611 -27.3405 -0.561953 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -104.112 -74.972 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -99.1116 -83.6322 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -169.912 -61.0008 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.782119 0.782119 0.782119 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -177.412 -48.0104 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.789164 0.789164 0.789164 ] + ] + prop "linktunnel_cashhq_12000_DNARoot" [ + code [ "prop_cog_tunnel" ] + pos [ -146.735 -76.4866 -0.496864 ] + nhpr [ -60 0 -0 ] + sign [ + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0 0 -0.454734 ] + scale [ 1.94135 1 1.34943 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ -0.145453 0 -1.58779 ] + scale [ 2.00652 1 1.22781 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Q" ] + ] + ] + ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -137.39 -36.1215 4.4691 ] + nhpr [ -60 0 -0 ] + scale [ 0.491224 0.491224 0.491224 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -106.525 -89.0184 4.45267 ] + nhpr [ 30 0 -0 ] + scale [ 0.558264 0.558264 0.558264 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -126.059 -100.162 5.00001 ] + nhpr [ 30 0 -0 ] + scale [ 0.620002 0.620002 0.620002 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -157.564 -46.1268 4.62218 ] + nhpr [ -60 0 -0 ] + scale [ 0.738382 0.738382 0.738382 ] + ] + ] + ] + visgroup "9253" [ + vis [ "9253" "9239" "9238" "9240" "9241" "9242" "9243" "9244" "9245" ] + suit_edge [ 250 256 ] + suit_edge [ 257 247 ] + suit_edge [ 256 258 ] + suit_edge [ 259 257 ] + suit_edge [ 389 256 ] + suit_edge [ 256 389 ] + suit_edge [ 389 257 ] + suit_edge [ 257 389 ] + battle_cell [ 20 20 107.797 -160.508 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 114.575 -188.85 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 89.8115 -141.575 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_angle_30" ] + pos [ 89.934 -151.53 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random_DNARoot" [ + pos [ 79.934 -168.85 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 119.575 -180.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 124.575 -171.529 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -141.575 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -151.575 0 ] + nhpr [ -104.75 0 -0 ] + width [ 20.7 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 89.8115 -151.575 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 15.217 -4.623 -7.6294e-006 ] + nhpr [ 135 0 -0 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 89.1286 -155.976 0 ] + nhpr [ 60 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 96.7505 -145.687 0 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "9254" [ + vis [ "9254" "9255" "9236" "9235" "9234" "9204" "9231" ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 260.461 -296.17 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 290.461 -244.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 273.14 -234.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 255.819 -224.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280.461 -261.529 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 255.82 -224.209 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 268.81 -231.709 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 286.131 -241.709 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 297.782 -271.53 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 292.782 -280.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 285.282 -293.18 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 253.14 -268.85 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 13.6578 -9.82202 0 ] + nhpr [ 165 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 13.3641 -21.8873 1.52588e-005 ] + nhpr [ 135 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.6185 -21.8802 1.52588e-005 ] + nhpr [ 135 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 270.461 -278.85 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 16.5267 5.3328 24.1876 ] + nhpr [ 2 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 8.74204 -14.0377 6.9345 ] + nhpr [ 165 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 263.14 -251.529 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 280.461 -261.529 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 240.819 -250.19 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 235.819 -258.85 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 270.461 -278.85 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 275.461 -270.19 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 260.461 -296.17 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 294.791 -246.709 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 307.782 -254.209 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 15.7582 -0.417932 29.5059 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 4.70688 -1.55255 0 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9255" [ + vis [ "9255" "9254" ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 277.782 -306.171 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 325.412 -333.67 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 312.732 -395.631 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 307.732 -404.292 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 255.591 -414.603 6.27553 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 312.912 -355.32 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 295.412 -385.631 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 290.412 -394.292 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 184.659 -327.462 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 183.319 -349.782 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 199.076 -376.14 7.98505 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 251.8 -291.17 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 174.659 -344.782 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 173.319 -367.103 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 189.076 -393.46 7.98505 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 242.601 -407.103 6.27553 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + ] + group "props" [ + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 272.633 -353.991 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 271.848 -365.359 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 268.037 -328.627 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 216.677 -331.813 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 217.599 -365.147 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 246.446 -380.799 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 170.979 -360.877 23.5552 ] + nhpr [ 88 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 190.132 -372.085 37.4265 ] + nhpr [ 105 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 249.292 -415.061 34.122 ] + nhpr [ 150 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 308.211 -395.555 28.9794 ] + nhpr [ 102 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 246.519 -316.479 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 259.782 -307.881 13.4624 ] + nhpr [ 180 0 -0 ] + scale [ 3.12946 3.12946 3.12946 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 221.433 -330.528 15.6962 ] + nhpr [ -165 0 -0 ] + scale [ 3.33391 3.33391 3.33391 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 281.174 -383.107 22.4562 ] + nhpr [ 180 0 -0 ] + scale [ 3.34531 3.34531 3.34531 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 286.426 -343.986 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 244.027 -304.278 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 205.138 -341.814 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 216.082 -351.831 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 255.46 -392.574 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 262.942 -362.022 0 ] + nhpr [ -45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 265.485 -345.153 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 218.945 -382.68 0 ] + nhpr [ -30 0 -0 ] + scale [ 2.16795 2.16795 2.16795 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 276.666 -349.42 0 ] + nhpr [ 105 0 -0 ] + scale [ 1.79907 1.79907 1.79907 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 273.794 -348.102 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.79906 1.79906 1.79907 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "prop_crate" ] + pos [ 272.469 -360.821 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.79906 1.79906 1.79907 ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 259.3 -353 0.025 ] + nhpr [ 24 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 239.646 -330.58 0.347881 ] + nhpr [ -165 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 227.949 -344.654 0.347881 ] + nhpr [ -95 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 232.738 -360.966 0.547134 ] + nhpr [ -35 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 248.693 -365.617 0.347881 ] + nhpr [ 25 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + street "street_80x40_DNARoot" [ + code [ "street_DL_pond" ] + pos [ 245.541 -348.608 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/donalds_dreamland_sz.dna b/ttmodels/src/dna/donalds_dreamland_sz.dna new file mode 100644 index 00000000..a00d1ae4 --- /dev/null +++ b/ttmodels/src/dna/donalds_dreamland_sz.dna @@ -0,0 +1,1184 @@ +group "donaldsDreamland" [ + visgroup "9000:safe_zone" [ + vis [ "9000:safe_zone" ] + group "props" [ + prop "donalds_dreamland" [ + code [ "donalds_dreamland" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -83.8 88.31 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 63.7 88.11 0 ] + nhpr [ -180 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 62.5 -88.22 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -85.09 -87.97 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 14 88 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ -22.34 87.98 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ -23.59 -88.04 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 13.41 -88.04 0 ] + nhpr [ 0 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ -21 -99 0 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 11.29 -99.12 0 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 138.654 -3.73007 -14.6491 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 154.048 17.0896 -14.6491 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 155.993 -19.098 -14.6491 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 167.494 -17.8012 -14.6503 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 179.656 12.6623 -14.6491 ] + nhpr [ -90 0 0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 180.525 -3.61397 -14.6491 ] + nhpr [ -90 0 0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 182.745 -35.9228 -14.6491 ] + nhpr [ 90 0 0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 199.326 22.1863 -15.5524 ] + nhpr [ 90 0.349927 7.16186e-009 ] + scale [ 1.59639 1.59639 1.59639 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 119.398 22.5553 -14.6491 ] + nhpr [ 90 0 0 ] + scale [ 1.72311 1.72311 1.72311 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 167.823 41.1939 -15.7278 ] + nhpr [ 90 0 0 ] + scale [ 1.45768 1.45768 1.45768 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 201.384 -9.79236 -14.6491 ] + nhpr [ 90 0 0 ] + scale [ 2.0031 2.0031 2.00309 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 113.625 -19.9727 -14.1585 ] + nhpr [ 90 0 0 ] + scale [ 1.42332 1.42332 1.42332 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 182.249 24.8644 -14.7952 ] + nhpr [ -45 17.693 -2.96447e-007 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 149.061 -35.6036 -14.6491 ] + nhpr [ 90 0 0 ] + scale [ 1.63983 1.63983 1.63983 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 137.228 -5.21484 -5.45245 ] + nhpr [ 90 0 0 ] + scale [ 3.27196 3.27196 3.27196 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 149.354 30.0527 -4.48916 ] + nhpr [ 150 0 0 ] + scale [ 3.25548 3.25548 3.25548 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 173.003 -11.4036 -4.64023 ] + nhpr [ -165 0 0 ] + scale [ 3.76318 3.76318 3.76318 ] + ] + prop "prop_DL_hydrant_DNARoot" [ + code [ "prop_DL_hydrant" ] + pos [ 142.443 27.4259 -14.9994 ] + nhpr [ 30 0 0 ] + ] + ] + node "group_0" [ + node "group_1" [ + flat_building "random20_DNARoot" [ + pos [ 34 -105.2 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ -25 -104.9 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ -59 -105 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ 84.7 -105.2 0 ] + nhpr [ -180 0 0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ -81 -105 0 ] + nhpr [ 180 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ 64 -105.2 0 ] + nhpr [ -180 0 0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0.65098 0.65098 1 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09 ] + width [ 11.1111 ] + height [ 11.1111 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.643137 1 ] + pos [ 0.29 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.22 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + prop "linktunnel_dl_9101_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -65.2 -195.2 -6.7 ] + nhpr [ 0 0 0 ] + sign [ + code [ "tunnel_sign_red" ] + color [ 0.376471 0.376471 0.376471 1 ] + pos [ 0 0 0.14 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -0.83 ] + scale [ 1.4 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.9 ] + scale [ 0.8 1 0.8 ] + width [ 55.0903 ] + height [ 55.0903 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.66 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + ] + ] + landmark_building "sz1:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Lullaby Library" ] + pos [ -67 -105 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign4" ] + pos [ 0.47 0 0 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.0941176 0.164706 0.360784 1 ] + pos [ 0 0 -0.13 ] + scale [ 1.4 1 1.5 ] + kern [ -0.027704 ] + width [ 28.6755 ] + height [ 28.6755 ] + flags [ "b" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + ] + node "group_2" [ + flat_building "random20_DNARoot" [ + pos [ -50 104.5 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ -106 105 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "sz3:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "The Snooze Bar" ] + pos [ 67.4996 105 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ -5.11 0 0 ] + baseline [ + code [ "humanist" ] + color [ 0.784314 0.784314 0.501961 1 ] + pos [ -0.25 0 0 ] + scale [ 0.7 1 0.7 ] + kern [ -0.026772 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ -81 105 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -81 105 0 ] + nhpr [ 105 0 0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_DL_clothes_shop_DNARoot" [ + code [ "toon_landmark_DL_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ -59.3422 100.432 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.415686 0.27451 0.168627 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.843137 0.615686 0.482353 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ 14.8 104.5 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ 68.3485 105 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "random20_DNARoot" [ + pos [ 41.2478 104.18 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + prop "linktunnel_dl_9201_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 55 195 -6.65 ] + nhpr [ 180 0 0 ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 0.166939 ] + scale [ 1.6 1 1.55652 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.03 0 -0.46814 ] + scale [ 1.436 1 1.58258 ] + width [ 32.1583 ] + height [ 32.1583 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "j" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.6184 ] + scale [ 0.856689 1 1 ] + width [ 38.6997 ] + height [ 38.6997 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0.00598332 0 1.79893 ] + scale [ 2.10389 1 2.14409 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + ] + ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 150.2 33.7 -15 ] + nhpr [ -171 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 169.602 15.9243 -14.649 ] + nhpr [ 150 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 145.227 6.91187 -14.6675 ] + nhpr [ -120 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 172.82 -6.78233 -14.6491 ] + nhpr [ 60 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 151.115 -11.4363 -14.6617 ] + nhpr [ -45 0 0 ] + ] + ] + landmark_building "tb4:toon_landmark_DL_gag_shop_DNARoot" [ + code [ "toon_landmark_DL_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ -49 -102 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + ] + landmark_building "tb5:toon_landmark_hqDL_DNARoot" [ + code [ "toon_landmark_hqDL" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ -40.875 -1.37841 -15 ] + nhpr [ 180 0 0 ] + ] + landmark_building "tb8:toon_landmark_DL_pet_shop_DNARoot" [ + code [ "toon_landmark_DL_pet_shop" ] + building_type [ "petshop" ] + title [ "" ] + pos [ 42.3097 102.794 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.501961 1 ] + scale [ 1.55234 1 2.89634 ] + width [ 16.6464 ] + height [ 16.6464 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -55.8144 78.6632 30 ] + nhpr [ 30 0 0 ] + scale [ 5.82921 5.82921 5.82921 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -34.1666 117.498 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -32.506 117.199 45.3497 ] + nhpr [ 30 0 0 ] + scale [ 5.82921 5.82921 5.82921 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 41.2786 140.493 50 ] + nhpr [ -45.0368 0.977402 1.29666 ] + scale [ 5.82921 5.82921 5.82921 ] + ] + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 9.66689 98.2549 0.00108576 ] + nhpr [ -180 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ -18.669 97.6904 0.0203404 ] + nhpr [ 0 0 0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ 82.6013 27.5211 -14.99 ] + nhpr [ 270 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/estate_1.dna b/ttmodels/src/dna/estate_1.dna new file mode 100644 index 00000000..7bc798ba --- /dev/null +++ b/ttmodels/src/dna/estate_1.dna @@ -0,0 +1,205 @@ +group "Estate" [ + visgroup "30000:estate" [ + vis [ "30000:estate" ] + node "level" [ + group "fishing_pond_1" [ + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 49.1029 -124.805 0.344704 ] + hpr [ 90 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 46.5222 -134.739 0.390713 ] + hpr [ 75 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 41.31 -144.559 0.375978 ] + hpr [ 45 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 46.8254 -113.682 0.46015 ] + hpr [ 135 0 0 ] + ] + ] + prop "terrain_DNARoot" [ + code [ "terrain" ] + pos [ -4.99989 -0.000152588 2.28882e-005 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -51.4214 -24.6363 4.02119 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -63.7942 5.18094 2.61119 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -58.2389 22.6873 2.35777 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 127.118 41.6667 -0.018425 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -123.438 -61.7798 -0.0212231 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -5.39423 -18.9763 7.15569 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -4.92633 -30.2208 7.08492 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -65.0909 -28.2464 4.00514 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -140.916 -118.105 0.46346 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -33.3073 -226.712 -0.227959 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -89.2946 155.887 -5.88637 ] + hpr [ 30 0 0 ] + scale [ 1.39228 1.39228 1.39228 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 130.934 -112.295 0.87703 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 91.8022 151.809 0.25066 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -19.0631 94.8639 0.251884 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -108.708 -179.715 -0.88939 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 172.91 27.0758 -0.424359 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -168.464 111.89 2.8051 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 54.3968 150.639 -0.865251 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 53.3863 -192.501 8.15125 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -61.57 -191.095 8.61497 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -50.9591 15.1061 2.76965 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 48.166 -157.726 0.00427294 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 7.15445 -172.415 0.00508118 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 74.6897 -96.6978 0.0356426 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 48.8133 -4.20992 8.10629 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -93.9252 46.3882 0.163597 ] + hpr [ 15 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -87.9846 38.8645 0.038681 ] + hpr [ 15 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 29.1518 86.819 0.062892 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 23.4233 80.1862 0.0406952 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 58.2562 73.7532 0.0911045 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 98.8038 -66.3475 0.0390043 ] + hpr [ 30 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -49.0482 -129.666 0.329399 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -58.1199 -141 0.0263481 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 42.2373 9.56175 8.36716 ] + hpr [ 0 0 0 ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/golf_zone_sz.dna b/ttmodels/src/dna/golf_zone_sz.dna new file mode 100644 index 00000000..3c627014 --- /dev/null +++ b/ttmodels/src/dna/golf_zone_sz.dna @@ -0,0 +1,1515 @@ +group "goofySpeedway" [ + visgroup "8000:safe_zone" [ + vis [ "8000:safe_zone" ] + node "level" [ + node "golf_kart_0_0" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 133.588 47.396 -0.05 ] + nhpr [ 58.732 0 0 ] + ] + ] + node "golf_kart_0_1" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 121.484 23.65 -0.05 ] + nhpr [ 75.142 0 0 ] + ] + ] + node "golf_kart_0_2" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 117.751 -1.069 -0.05 ] + nhpr [ 81.928 0 0 ] + ] + ] + node "golf_kart_1_0" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 10.725 -95.93 -0.05 ] + nhpr [ -30.762 0 0 ] + ] + ] + node "golf_kart_1_1" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -16.308 -86.81 -0.05 ] + nhpr [ -16.949 0 0 ] + ] + ] + node "golf_kart_1_2" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -41.97 -87.26 -0.05 ] + nhpr [ -9.108 0 0 ] + ] + ] + node "golf_kart_2_0" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -97.77 -27.878 -0.05 ] + nhpr [ -87.415 0 0 ] + ] + ] + node "golf_kart_2_1" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -100.205 -2.018 -0.05 ] + nhpr [ 284.36 0 0 ] + ] + ] + node "golf_kart_2_2" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -106.58 21.819 -0.05 ] + nhpr [ -66.64 0 0 ] + ] + ] + prop "goofy_speedway_DNARoot" [ + code [ "goofy_speedway" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + prop "linktunnel_bosshq_10000_DNARoot" [ + code [ "prop_golf_cog_tunnel" ] + pos [ 100 -95 0.05 ] + nhpr [ 45 0 0 ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel2" ] + pos [ -20 -100 0.129929 ] + nhpr [ -15 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.5 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "6" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel1" ] + pos [ -129.472 37.2723 0.129929 ] + nhpr [ -54.6042 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 0.1 ] + nhpr [ 0 0 3 ] + scale [ 0.43 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "9" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel2" ] + pos [ -110 -5 0.129929 ] + nhpr [ -75 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 0.1 ] + nhpr [ 0 0 3 ] + scale [ 0.43 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "9" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel1" ] + pos [ -110 -5 0.129929 ] + nhpr [ -75 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 0.1 ] + nhpr [ 0 0 3 ] + scale [ 0.43 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.2 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "9" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel1" ] + pos [ -66.3251 -96.9588 0.129929 ] + nhpr [ 7.99989 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.5 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "6" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel2" ] + pos [ 135 20 0.129929 ] + nhpr [ 75 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "3" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARoot" [ + code [ "prop_golf_tunnel1" ] + pos [ 130.87 -26.3261 0.129929 ] + nhpr [ 95.7167 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "3" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARootTest" [ + code [ "prop_golf_tunnel1" ] + pos [ 135 20 0.129929 ] + nhpr [ 75 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.6 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "3" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "tunnel_gz_DNARootTest" [ + code [ "prop_golf_tunnel1" ] + pos [ -20 -100 0.129929 ] + nhpr [ -15 0 0 ] + sign [ + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 0 ] + nhpr [ 0 0 3.88713 ] + scale [ 0.7 1 0.7 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.3 0 -0.5 ] + nhpr [ 0 0 4 ] + scale [ 0.5 1 0.5 ] + width [ -8.33333 ] + height [ -8.33333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "6" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + prop "linktunnel_oz_6000_DNARoot" [ + code [ "prop_golf_NoSign_entrance" ] + pos [ 5 145 0 ] + nhpr [ 0 0 0 ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.705882 0.156863 0.235294 1 ] + scale [ 2 1 2 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.705882 0.156863 0.235294 1 ] + pos [ 0 0 -4 ] + scale [ 3 1 3 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + ] + +] diff --git a/ttmodels/src/dna/goofy_speedway_sz.dna b/ttmodels/src/dna/goofy_speedway_sz.dna new file mode 100644 index 00000000..f41895fe --- /dev/null +++ b/ttmodels/src/dna/goofy_speedway_sz.dna @@ -0,0 +1,1007 @@ +group "goofySpeedway" [ + visgroup "8000:safe_zone" [ + vis [ "8000:safe_zone" ] + node "level" [ + node "racing_pad_2_town" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 73.0385 -117.178 -0.73 ] + nhpr [ 75 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 71.7178 -121.868 -0.73 ] + nhpr [ 75 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 66.7986 -115.568 -0.73 ] + nhpr [ 75 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 65.5021 -120.238 -0.73 ] + nhpr [ 75 0 0 ] + ] + ] + node "racing_pad_3_town" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 59.4843 -132.151 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 55.2478 -134.588 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 56.2809 -126.578 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 51.9502 -129.195 -0.73 ] + nhpr [ 30 0 0 ] + ] + ] + node "racing_pad_1_town" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 72.1652 -96.0857 -0.73 ] + nhpr [ 105 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 73.3705 -100.877 -0.73 ] + nhpr [ 105 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 65.3432 -97.8303 -0.73 ] + nhpr [ 105 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 66.6576 -102.722 -0.73 ] + nhpr [ 105 0 0 ] + ] + ] + node "racing_pad_0_town" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 55.027 -84.6514 -0.73 ] + nhpr [ 150 6.67011e-009 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 59.104 -86.9306 -0.727414 ] + nhpr [ 150 0 1.86792e-007 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 51.586 -90.5975 -0.73 ] + nhpr [ 150 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 55.6422 -93.1141 -0.73 ] + nhpr [ 150 0 0 ] + ] + ] + node "racing_pad_4_stadium" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 23.3 -168.6 -0.73 ] + nhpr [ 60 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 21.31 -172.08 -0.73 ] + nhpr [ 60 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 17.5084 -165.257 -0.73 ] + nhpr [ 60 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 15.4951 -168.767 -0.73 ] + nhpr [ 60 0 0 ] + ] + ] + node "racing_pad_5_stadium" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ 9.05689 -182.789 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ 5.41506 -184.871 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ 5.56268 -176.864 -0.73 ] + nhpr [ 30 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ 1.85977 -178.936 -0.734695 ] + nhpr [ 30 0 0 ] + ] + ] + node "racing_pad_6_stadium" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -10.4275 -183.285 -0.73 ] + nhpr [ -15 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -14.3288 -182.142 -0.73 ] + nhpr [ -15 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -8.54365 -176.376 -0.73 ] + nhpr [ -15 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -12.5286 -175.2 -0.73 ] + nhpr [ -15 0 0 ] + ] + ] + node "racing_pad_7_stadium" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -24.2997 -170.514 -0.73 ] + nhpr [ -60 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -26.4587 -166.589 -0.73 ] + nhpr [ -60 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -18.2461 -167.033 -0.73 ] + nhpr [ -60 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -20.4443 -163.069 -0.73 ] + nhpr [ -60 0 0 ] + ] + ] + node "viewing_pad_0" [ + pos [ 0 0 0.08 ] + nhpr [ 0 0 0 ] + scale [ 1 1 1 ] + prop "starting_block_0" [ + code [ "gs_showblock" ] + pos [ 34.7799 61.6369 0 ] + nhpr [ 55.49 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_2" [ + code [ "gs_showblock" ] + pos [ 48.4554 47.8536 0 ] + nhpr [ 35 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_4" [ + code [ "gs_showblock" ] + pos [ 57.4133 29.7905 0 ] + nhpr [ 17.33 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_6" [ + code [ "gs_showblock" ] + pos [ 57.3092 -6.08025 0 ] + nhpr [ 341.7 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_8" [ + code [ "gs_showblock" ] + pos [ 48.6874 -22.9098 0 ] + nhpr [ 324.49 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_10" [ + code [ "gs_showblock" ] + pos [ 34.9595 -36.4749 0 ] + nhpr [ 304.99 0 0 ] + scale [ 15 15 15 ] + ] + ] + node "viewing_pad_1" [ + pos [ 0 0 0.08 ] + nhpr [ 0 0 0 ] + scale [ 1 1 1 ] + prop "starting_block_0" [ + code [ "gs_showblock" ] + pos [ -33.6555 62.01 0 ] + nhpr [ 124.7 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_2" [ + code [ "gs_showblock" ] + pos [ -48.2099 48.43 0 ] + nhpr [ 145.01 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_4" [ + code [ "gs_showblock" ] + pos [ -57.8004 29.5893 0 ] + nhpr [ 161.57 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_6" [ + code [ "gs_showblock" ] + pos [ -57.0908 -6.61133 0 ] + nhpr [ 196.57 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_8" [ + code [ "gs_showblock" ] + pos [ -48.8114 -22.8225 0 ] + nhpr [ 216.87 0 0 ] + scale [ 15 15 15 ] + ] + prop "starting_block_10" [ + code [ "gs_showblock" ] + pos [ -35.0038 -36.5645 0 ] + nhpr [ 235.3 0 0 ] + scale [ 15 15 15 ] + ] + ] + prop "goofy_speedway_DNARoot" [ + code [ "goofy_speedway" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + landmark_building "tb1:toon_landmark_GS_kart_shop_DNARoot" [ + code [ "toon_landmark_GS_kart_shop" ] + building_type [ "kartshop" ] + title [ "" ] + pos [ 0 14.56 0.121307 ] + nhpr [ 0 0 0 ] + ] + node "Trees" [ + prop "gs_treebase_01" [ + code [ "gs_treebase" ] + pos [ 13.0862 60.3313 0 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_02" [ + code [ "gs_treebase" ] + pos [ -12.7559 60.6068 0 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_03" [ + code [ "gs_treebase" ] + pos [ 13.3112 -35.3729 0 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_04" [ + code [ "gs_treebase" ] + pos [ -13.8737 -34.803 0 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_05" [ + code [ "gs_treebase" ] + pos [ 17.1844 -58.7125 0 ] + nhpr [ -120 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_06" [ + code [ "gs_treebase" ] + pos [ -16.5338 -59.6159 0 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_07" [ + code [ "gs_treebase" ] + pos [ 33.5348 -77.524 -0.986076 ] + nhpr [ 15 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_08" [ + code [ "gs_treebase" ] + pos [ -34.0546 -79.0192 -0.95 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_09" [ + code [ "gs_treebase" ] + pos [ -33.9526 -142.334 -0.912308 ] + nhpr [ 30 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + prop "gs_treebase_10" [ + code [ "gs_treebase" ] + pos [ 32.1423 -145.064 -1.14349 ] + nhpr [ -75 0 0 ] + scale [ 14.0091 14.0091 14.0091 ] + ] + ] + node "crashedBoards" [ + pos [ 0 0 0.1 ] + nhpr [ 0 0 0 ] + scale [ 1 1 1 ] + prop "prop_gs_crashed_board_01" [ + code [ "prop_gs_crashed_board" ] + pos [ 0.970987 -110.599 -0.0135054] + nhpr [ 60 0 0 ] + ] + ] + node "lampPosts" [ + pos [ 0 0 0.1 ] + nhpr [ 0 0 0 ] + scale [ 1 1 1 ] + prop "gs_lamppost_01" [ + code [ "gs_lamppost" ] + pos [ 64.2319 3.13617 0 ] + nhpr [ -180 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_02" [ + code [ "gs_lamppost" ] + pos [ 64.2387 21.0899 0 ] + nhpr [ 180 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_03" [ + code [ "gs_lamppost" ] + pos [ -64.2312 20.5462 0 ] + nhpr [ 180 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_04" [ + code [ "gs_lamppost" ] + pos [ -64.0807 4.25428 0 ] + nhpr [ 180 359.223 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_05" [ + code [ "gs_lamppost" ] + pos [ -12.6411 -54.3133 0 ] + nhpr [ -120 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_06" [ + code [ "gs_lamppost" ] + pos [ 12.5559 -53.8343 0 ] + nhpr [ 30 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_07" [ + code [ "gs_lamppost" ] + pos [ 11.4847 -72.3553 0 ] + nhpr [ 135 0 0 ] + scale [ 16 16 16 ] + ] + prop "gs_lamppost_08" [ + code [ "gs_lamppost" ] + pos [ -12.2492 -71.7945 0 ] + nhpr [ 225 0 0 ] + scale [ 16 16 16 ] + ] + ] + node "announcers" [ + prop "gs_announcer_01" [ + code [ "gs_announcer" ] + pos [ 36.9082 -137.074 -0.718405 ] + nhpr [ 60 0 0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "gs_announcer_02" [ + code [ "gs_announcer" ] + pos [ 25.0413 -148.413 -0.745812 ] + nhpr [ 30 0 0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "gs_announcer_03" [ + code [ "gs_announcer" ] + pos [ -26.1674 -146.864 -0.721916 ] + nhpr [ 150 1.28066e-006 5.08889e-014 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "gs_announcer_04" [ + code [ "gs_announcer" ] + pos [ -37.404 -135.235 -0.77696 ] + nhpr [ 120 0 0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "gs_announcer_05" [ + code [ "gs_announcer" ] + pos [ 36.8472 -85.2043 -0.749627 ] + nhpr [ 120 0 0 ] + scale [ 1.4 1.4 1.4 ] + ] + prop "gs_announcer_06" [ + code [ "gs_announcer" ] + pos [ -37.6279 -87.5084 -0.747403 ] + nhpr [ 60 0 5.33706e-008 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + node "cones" [ + prop "gs_cone_01" [ + code [ "gs_cone" ] + pos [ 13.9778 4.96125 0 ] + nhpr [ 0 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_02" [ + code [ "gs_cone" ] + pos [ 13.9777 20.2565 0 ] + nhpr [ 0 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_03" [ + code [ "gs_cone" ] + pos [ -29.6418 8.66831 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_04" [ + code [ "gs_cone" ] + pos [ -32.9107 23.0442 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_05" [ + code [ "gs_cone" ] + pos [ -13.5526 21.9477 0 ] + nhpr [ 0 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_06" [ + code [ "gs_cone" ] + pos [ -8.50098 -107.548 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_07" [ + code [ "gs_cone" ] + pos [ -21.2906 -130.285 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_08" [ + code [ "gs_cone" ] + pos [ -18.3939 -130.38 1.95211 ] + nhpr [ 90 0 0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "gs_cone_09" [ + code [ "gs_cone" ] + pos [ 23.6111 -111.615 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_10" [ + code [ "gs_cone" ] + pos [ 23.8284 -108.171 0 ] + nhpr [ -15 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_11" [ + code [ "gs_cone" ] + pos [ 45.5463 -80.2441 -0.782309 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_12" [ + code [ "gs_cone" ] + pos [ 41.8548 -80.6942 -0.777281 ] + nhpr [ 120 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_13" [ + code [ "gs_cone" ] + pos [ 79.336 -111.145 -0.778327 ] + nhpr [ 15 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_14" [ + code [ "gs_cone" ] + pos [ 79.7556 -109.163 0.0892836 ] + nhpr [ -90 -65.6429 179.698 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_15" [ + code [ "gs_cone" ] + pos [ 26.3967 -152.37 -0.785851 ] + nhpr [ 75 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_17" [ + code [ "gs_cone" ] + pos [ -66.588 -129.773 -0.77 ] + nhpr [ 315 1.44729e-007 9.68138e-006 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_18" [ + code [ "gs_cone" ] + pos [ 45.7352 -140.211 -0.780145 ] + nhpr [ 0 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_19" [ + code [ "gs_cone" ] + pos [ 43.2261 -139.872 -0.781728 ] + nhpr [ 15 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_20" [ + code [ "gs_cone" ] + pos [ -40.7592 -137.471 -0.774723 ] + nhpr [ -15 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_21" [ + code [ "gs_cone" ] + pos [ -2.4526 -189.738 -0.727055 ] + nhpr [ -180 0.380735 0.529366 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_22" [ + code [ "gs_cone" ] + pos [ -15.0527 1.83079 0 ] + nhpr [ 30 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + prop "gs_cone_16" [ + code [ "prop_3ftdockpiling" ] + pos [ -53.7762 -82.0762 -0.8 ] + nhpr [ 285 0 0 ] + scale [ 1.35 1.35 1.35 ] + ] + ] + node "crates" [ + prop "gs_krate_01" [ + code [ "gs_krate" ] + pos [ -18.4133 -130.325 0 ] + nhpr [ 75 0 0 ] + scale [ 1.2 1.2 1.2 ] + ] + prop "gs_krate_03" [ + code [ "gs_krate" ] + pos [ -43.2279 -128.323 -0.77 ] + nhpr [ 15 0 0 ] + ] + prop "gs_krate_04" [ + code [ "gs_krate" ] + pos [ -45.2487 -128.575 -0.77 ] + nhpr [ 30 0 0 ] + ] + prop "gs_krate_05" [ + code [ "gs_krate" ] + pos [ 0 -189.543 -0.740014 ] + nhpr [ 270 0 0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "gs_krate_02" [ + code [ "gs_krate" ] + pos [ -44.1964 -128.433 0.86 ] + nhpr [ 30 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + node "mailboxes" [ + prop "gs_mailbox_01" [ + code [ "gs_mailbox" ] + pos [ 20.124 -49.9769 0.04 ] + nhpr [ 210 0 0 ] + scale [ 10 10 10 ] + ] + prop "gs_mailbox_02" [ + code [ "gs_mailbox" ] + pos [ 17.3915 -76.0454 0 ] + nhpr [ -45 0 0 ] + scale [ 10 10 10 ] + ] + ] + prop "gs_wrench" [ + code [ "gs_wrench" ] + pos [ -42.0194 7.93055 4.19378 ] + nhpr [ 15 -29.3964 57.2829 ] + ] + prop "gs_tireiron" [ + code [ "gs_tireIron" ] + pos [ -40.9225 13.4848 -0.348712 ] + nhpr [ -30 1.98438e-007 -3.39793e-008 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "gs_tires" [ + code [ "gs_tires" ] + pos [ 34.3452 -1.20382 -0.331983 ] + nhpr [ 15 0 0 ] + ] + node "flags" [ + prop "gs_flag_01" [ + code [ "gs_flag" ] + pos [ 19.1008 6.4803 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "gs_flag_02" [ + code [ "gs_flag" ] + pos [ -17.2657 6.4803 0 ] + nhpr [ 0 0 0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "gs_flag_03" [ + code [ "gs_flag" ] + pos [ -75.8772 -90.7048 0 ] + nhpr [ 0 0 0 ] + ] + prop "gs_flag_04" [ + code [ "gs_flag" ] + pos [ -75.3548 -132.856 0 ] + nhpr [ 0 0 0 ] + ] + prop "gs_flag_05" [ + code [ "gs_flag" ] + pos [ -22.0346 -185.934 0 ] + nhpr [ 0 0 0 ] + ] + prop "gs_flag_06" [ + code [ "gs_flag" ] + pos [ 18.2062 -186.257 0 ] + nhpr [ 0 0 0 ] + ] + prop "gs_flag_07" [ + code [ "gs_flag" ] + pos [ 76.063 -130.147 0 ] + nhpr [ 0 0 0 ] + ] + prop "gs_flag_08" [ + code [ "gs_flag" ] + pos [ 75.2066 -88.5278 0 ] + nhpr [ 0 0 0 ] + ] + ] + prop "linktunnel_tt_2000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -20 78.1 0.56 ] + nhpr [ 0 0 0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -2.84 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.09 0 -0.99 ] + scale [ 1.5 1 1.5 ] + width [ 38.4394 ] + height [ 38.4394 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.94 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + node "BuildingFacade" [ + flat_building "tb0:random_DNARoot" [ + pos [ 54.172 87.5718 0 ] + nhpr [ 30 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 34.7946 81.0034 0 ] + nhpr [ 15 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb0:20_DNARoot" [ + pos [ 19.8333 80.9249 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb0:20_DNARoot" [ + pos [ -53.6004 96.1594 0 ] + nhpr [ -45 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb0:20_DNARoot" [ + pos [ -39.6008 82.004 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + ] + node "UseKartHereSigns" [ + pos [ -177.409 -1.26947 0 ] + nhpr [ 0 0 0 ] + scale [ 20 20 20 ] + ] + node "leader_boards" [ + prop "leaderBoard_stadium" [ + code [ "leader_board" ] + pos [ 1.40398 -105.379 0 ] + nhpr [ 179.126 0 0 ] + ] + prop "leaderBoard_city" [ + code [ "leader_board" ] + pos [ -3.54519 -113.659 0 ] + nhpr [ -58.0988 0 0 ] + ] + prop "leaderBoard_country" [ + code [ "leader_board" ] + pos [ 6.30172 -113.738 0 ] + nhpr [ 60.2947 0 0 ] + ] + ] + node "racing_pad_9_country" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -71.682 -124.238 -0.73 ] + nhpr [ -75 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -72.8028 -119.873 -0.73 ] + nhpr [ -75 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -65.2119 -122.469 -0.73 ] + nhpr [ -75 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -66.1926 -118.067 -0.73 ] + nhpr [ -75 0 0 ] + ] + ] + node "racing_pad_10_country" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -73.2471 -104.146 -0.729938 ] + nhpr [ -105 0.0356288 -5.56654e-005 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -72.0614 -99.9108 -0.73 ] + nhpr [ -105 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -66.5596 -105.873 -0.73 ] + nhpr [ -105 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -65.3765 -101.588 -0.73 ] + nhpr [ -105 0 0 ] + ] + ] + node "racing_pad_11_country" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -61.2631 -89.9246 -0.73 ] + nhpr [ -150 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -57.3379 -87.6031 -0.73 ] + nhpr [ -150 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -57.7913 -96.0109 -0.73 ] + nhpr [ -150 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -53.7315 -93.7394 -0.73 ] + nhpr [ -150 0 0 ] + ] + ] + node "racing_pad_8_country" [ + prop "starting_block_0" [ + code [ "gs_parkingspot" ] + pos [ -56.6638 -135.053 -0.73 ] + nhpr [ -30 0 0 ] + ] + prop "starting_block_1" [ + code [ "gs_parkingspot" ] + pos [ -60.2216 -132.82 -0.73 ] + nhpr [ -30 0 0 ] + ] + prop "starting_block_2" [ + code [ "gs_parkingspot" ] + pos [ -56.7835 -126.841 -0.73 ] + nhpr [ -30 0 0 ] + ] + prop "starting_block_3" [ + code [ "gs_parkingspot" ] + pos [ -53.0094 -128.959 -0.73 ] + nhpr [ -30 0 0 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/minnies_melody_land_4100.dna b/ttmodels/src/dna/minnies_melody_land_4100.dna new file mode 100644 index 00000000..fdd6b8a2 --- /dev/null +++ b/ttmodels/src/dna/minnies_melody_land_4100.dna @@ -0,0 +1,10677 @@ +store_suit_point [ 2, STREET_POINT, -425 205 -0.5 ] +store_suit_point [ 3, STREET_POINT, -425 215 -0.5 ] +store_suit_point [ 8, STREET_POINT, -410 205 -0.5 ] +store_suit_point [ 9, STREET_POINT, -410 190 -0.5 ] +store_suit_point [ 10, STREET_POINT, -400 190 -0.5 ] +store_suit_point [ 11, STREET_POINT, -400 215 -0.5 ] +store_suit_point [ 12, FRONT_DOOR_POINT, -389 213 0, 3 ] +store_suit_point [ 13, STREET_POINT, -410 158 -0.5 ] +store_suit_point [ 14, STREET_POINT, -410 150 -0.5 ] +store_suit_point [ 15, STREET_POINT, -400 150 -0.5 ] +store_suit_point [ 16, STREET_POINT, -400 158 -0.5 ] +store_suit_point [ 17, FRONT_DOOR_POINT, -421 158 0, 4 ] +store_suit_point [ 18, STREET_POINT, -410 145 -0.5 ] +store_suit_point [ 19, STREET_POINT, -400 145 -0.5 ] +store_suit_point [ 20, FRONT_DOOR_POINT, -389 145 0, 5 ] +store_suit_point [ 21, STREET_POINT, -410 110 -0.5 ] +store_suit_point [ 22, STREET_POINT, -400 110 -0.5 ] +store_suit_point [ 23, STREET_POINT, -410 95 -0.5 ] +store_suit_point [ 24, STREET_POINT, -425 95 -0.5 ] +store_suit_point [ 25, STREET_POINT, -425 85 -0.5 ] +store_suit_point [ 26, STREET_POINT, -400 85 -0.5 ] +store_suit_point [ 27, FRONT_DOOR_POINT, -407 74 0, 6 ] +store_suit_point [ 28, STREET_POINT, -465 95 -0.5 ] +store_suit_point [ 29, STREET_POINT, -465 85 -0.5 ] +store_suit_point [ 30, STREET_POINT, -479 95 -0.5 ] +store_suit_point [ 31, STREET_POINT, -490 95 -0.5 ] +store_suit_point [ 32, STREET_POINT, -490 70 -0.5 ] +store_suit_point [ 33, STREET_POINT, -480 70 -0.5 ] +store_suit_point [ 34, STREET_POINT, -480 85 -0.5 ] +store_suit_point [ 35, FRONT_DOOR_POINT, -479 106 0, 7 ] +store_suit_point [ 36, FRONT_DOOR_POINT, -501 92 0, 45 ] +store_suit_point [ 37, STREET_POINT, -490 50 -0.5 ] +store_suit_point [ 38, STREET_POINT, -480 50 -0.5 ] +store_suit_point [ 39, STREET_POINT, -490 43 -0.5 ] +store_suit_point [ 40, STREET_POINT, -490 37 -0.5 ] +store_suit_point [ 41, STREET_POINT, -490 20 -0.5 ] +store_suit_point [ 42, STREET_POINT, -480 20 -0.5 ] +store_suit_point [ 43, STREET_POINT, -480 37 -0.5 ] +store_suit_point [ 44, STREET_POINT, -480 43 -0.5 ] +store_suit_point [ 45, FRONT_DOOR_POINT, -469 43 0, 10 ] +store_suit_point [ 46, FRONT_DOOR_POINT, -501 37 0, 12 ] +store_suit_point [ 47, STREET_POINT, -490 -20 -0.5 ] +store_suit_point [ 48, STREET_POINT, -480 -20 -0.5 ] +store_suit_point [ 49, STREET_POINT, -490 -32 -0.5 ] +store_suit_point [ 50, STREET_POINT, -490 -42 -0.5 ] +store_suit_point [ 51, STREET_POINT, -490 -50 -0.5 ] +store_suit_point [ 52, STREET_POINT, -480 -50 -0.5 ] +store_suit_point [ 53, STREET_POINT, -480 -42 -0.5 ] +store_suit_point [ 54, STREET_POINT, -480 -32 -0.5 ] +store_suit_point [ 55, FRONT_DOOR_POINT, -469 -32 0, 11 ] +store_suit_point [ 56, FRONT_DOOR_POINT, -501 -42 0, 9 ] +store_suit_point [ 57, STREET_POINT, -490 -80 -0.5 ] +store_suit_point [ 58, STREET_POINT, -480 -80 -0.5 ] +store_suit_point [ 59, STREET_POINT, -490 -105 -0.5 ] +store_suit_point [ 60, STREET_POINT, -465 -105 -0.5 ] +store_suit_point [ 61, STREET_POINT, -465 -95 -0.5 ] +store_suit_point [ 62, STREET_POINT, -480 -95 -0.5 ] +store_suit_point [ 65, STREET_POINT, -435 -95 -0.5 ] +store_suit_point [ 66, STREET_POINT, -453 -95 -0.5 ] +store_suit_point [ 67, STREET_POINT, -453 -105 -0.5 ] +store_suit_point [ 68, STREET_POINT, -435 -105 -0.5 ] +store_suit_point [ 69, FRONT_DOOR_POINT, -453.5 -115 0, 55 ] +store_suit_point [ 70, STREET_POINT, -410 -105 -0.5 ] +store_suit_point [ 71, STREET_POINT, -410 -80 -0.5 ] +store_suit_point [ 72, STREET_POINT, -420 -80 -0.5 ] +store_suit_point [ 73, STREET_POINT, -420 -95 -0.5 ] +store_suit_point [ 74, FRONT_DOOR_POINT, -399 -105 0, 14 ] +store_suit_point [ 75, STREET_POINT, -410 -40 -0.5 ] +store_suit_point [ 76, STREET_POINT, -420 -40 -0.5 ] +store_suit_point [ 77, STREET_POINT, -410 -16 -0.5 ] +store_suit_point [ 78, STREET_POINT, -410 0 -0.5 ] +store_suit_point [ 79, STREET_POINT, -420 0 -0.5 ] +store_suit_point [ 80, STREET_POINT, -420 -16 -0.5 ] +store_suit_point [ 81, FRONT_DOOR_POINT, -399 -16 0, 46 ] +store_suit_point [ 82, FRONT_DOOR_POINT, -431 -16 0, 15 ] +store_suit_point [ 83, STREET_POINT, -410 20 -0.5 ] +store_suit_point [ 84, STREET_POINT, -420 20 -0.5 ] +store_suit_point [ 85, STREET_POINT, -410 35 -0.5 ] +store_suit_point [ 86, STREET_POINT, -395 35 -0.5 ] +store_suit_point [ 87, STREET_POINT, -395 45 -0.5 ] +store_suit_point [ 88, STREET_POINT, -410 45 -0.5 ] +store_suit_point [ 89, STREET_POINT, -420 45 -0.5 ] +store_suit_point [ 90, FRONT_DOOR_POINT, -410 56 0, 17 ] +store_suit_point [ 91, STREET_POINT, -365 35 -0.5 ] +store_suit_point [ 92, STREET_POINT, -365 20 -0.5 ] +store_suit_point [ 93, STREET_POINT, -355 20 -0.5 ] +store_suit_point [ 94, STREET_POINT, -355 45 -0.5 ] +store_suit_point [ 95, FRONT_DOOR_POINT, -344 41 0, 18 ] +store_suit_point [ 96, STREET_POINT, -365 0 -0.5 ] +store_suit_point [ 97, STREET_POINT, -355 0 -0.5 ] +store_suit_point [ 98, STREET_POINT, -365 -25 -0.5 ] +store_suit_point [ 100, STREET_POINT, -340 -15 -0.5 ] +store_suit_point [ 101, STREET_POINT, -355 -15 -0.5 ] +store_suit_point [ 102, FRONT_DOOR_POINT, -376 -22 0, 19 ] +store_suit_point [ 104, STREET_POINT, -320 -15 -0.5 ] +store_suit_point [ 105, STREET_POINT, -302 -25 -0.5 ] +store_suit_point [ 106, STREET_POINT, -280 -25 -0.5 ] +store_suit_point [ 107, STREET_POINT, -280 -15 -0.5 ] +store_suit_point [ 108, STREET_POINT, -302 -15 -0.5 ] +store_suit_point [ 110, STREET_POINT, -255 -25 -0.5 ] +store_suit_point [ 111, STREET_POINT, -255 0 -0.5 ] +store_suit_point [ 112, STREET_POINT, -265 0 -0.5 ] +store_suit_point [ 113, STREET_POINT, -265 -15 -0.5 ] +store_suit_point [ 114, FRONT_DOOR_POINT, -244 -28 0, 22 ] +store_suit_point [ 115, STREET_POINT, -255 28 -0.5 ] +store_suit_point [ 116, STREET_POINT, -255 40 -0.5 ] +store_suit_point [ 117, STREET_POINT, -265 40 -0.5 ] +store_suit_point [ 118, STREET_POINT, -265 28 -0.5 ] +store_suit_point [ 119, FRONT_DOOR_POINT, -244 28 0, 23 ] +store_suit_point [ 120, STREET_POINT, -255 58 -0.5 ] +store_suit_point [ 121, STREET_POINT, -255 80 -0.5 ] +store_suit_point [ 122, STREET_POINT, -265 80 -0.5 ] +store_suit_point [ 123, STREET_POINT, -265 58 -0.5 ] +store_suit_point [ 124, FRONT_DOOR_POINT, -276 58 0, 25 ] +store_suit_point [ 125, STREET_POINT, -255 98 -0.5 ] +store_suit_point [ 126, STREET_POINT, -255 110 -0.5 ] +store_suit_point [ 127, STREET_POINT, -265 110 -0.5 ] +store_suit_point [ 128, STREET_POINT, -265 98 -0.5 ] +store_suit_point [ 129, FRONT_DOOR_POINT, -244 98 0, 56 ] +store_suit_point [ 130, STREET_POINT, -255 135 -0.5 ] +store_suit_point [ 131, STREET_POINT, -263 135 -0.5 ] +store_suit_point [ 132, STREET_POINT, -300 135 -0.5 ] +store_suit_point [ 134, STREET_POINT, -265 125 -0.5 ] +store_suit_point [ 135, FRONT_DOOR_POINT, -263 146 0, 26 ] +store_suit_point [ 137, STREET_POINT, -315 135 -0.5 ] +store_suit_point [ 138, STREET_POINT, -315 150 -0.5 ] +store_suit_point [ 139, STREET_POINT, -308 125 -0.5 ] +store_suit_point [ 140, STREET_POINT, -300 125 -0.5 ] +store_suit_point [ 141, STREET_POINT, -325 125 -0.5 ] +store_suit_point [ 142, STREET_POINT, -325 150 -0.5 ] +store_suit_point [ 143, FRONT_DOOR_POINT, -308 114 0, 48 ] +store_suit_point [ 144, STREET_POINT, -315 171 -0.5 ] +store_suit_point [ 145, STREET_POINT, -315 190 -0.5 ] +store_suit_point [ 146, STREET_POINT, -325 190 -0.5 ] +store_suit_point [ 147, STREET_POINT, -325 171 -0.5 ] +store_suit_point [ 148, FRONT_DOOR_POINT, -336 171 0, 28 ] +store_suit_point [ 149, STREET_POINT, -315 217 -0.5 ] +store_suit_point [ 150, STREET_POINT, -315 227 -0.5 ] +store_suit_point [ 151, STREET_POINT, -315 230 -0.5 ] +store_suit_point [ 152, STREET_POINT, -325 230 -0.5 ] +store_suit_point [ 153, STREET_POINT, -325 227 -0.5 ] +store_suit_point [ 154, STREET_POINT, -325 217 -0.5 ] +store_suit_point [ 155, FRONT_DOOR_POINT, -304 217 0, 30 ] +store_suit_point [ 156, FRONT_DOOR_POINT, -336 227 0, 29 ] +store_suit_point [ 157, STREET_POINT, -315 260 -0.5 ] +store_suit_point [ 158, STREET_POINT, -325 260 -0.5 ] +store_suit_point [ 159, STREET_POINT, -315 275 -0.5 ] +store_suit_point [ 160, STREET_POINT, -300 275 -0.5 ] +store_suit_point [ 161, STREET_POINT, -300 285 -0.5 ] +store_suit_point [ 162, STREET_POINT, -325 285 -0.5 ] +store_suit_point [ 163, FRONT_DOOR_POINT, -317 296 0, 31 ] +store_suit_point [ 164, STREET_POINT, -270 275 -0.5 ] +store_suit_point [ 165, STREET_POINT, -270 285 -0.5 ] +store_suit_point [ 166, STREET_POINT, -255 275 -0.5 ] +store_suit_point [ 167, STREET_POINT, -255 260 -0.5 ] +store_suit_point [ 168, STREET_POINT, -245 260 -0.5 ] +store_suit_point [ 169, STREET_POINT, -245 285 -0.5 ] +store_suit_point [ 170, STREET_POINT, -260 285 -0.5 ] +store_suit_point [ 171, FRONT_DOOR_POINT, -260 296 0, 32 ] +store_suit_point [ 172, STREET_POINT, -255 237 -0.5 ] +store_suit_point [ 173, STREET_POINT, -255 227 -0.5 ] +store_suit_point [ 174, STREET_POINT, -255 220 -0.5 ] +store_suit_point [ 175, STREET_POINT, -245 220 -0.5 ] +store_suit_point [ 176, STREET_POINT, -245 227 -0.5 ] +store_suit_point [ 177, STREET_POINT, -245 237 -0.5 ] +store_suit_point [ 178, FRONT_DOOR_POINT, -234 237 0, 58 ] +store_suit_point [ 179, FRONT_DOOR_POINT, -266 227 0, 49 ] +store_suit_point [ 180, STREET_POINT, -255 200 -0.5 ] +store_suit_point [ 181, STREET_POINT, -245 200 -0.5 ] +store_suit_point [ 182, STREET_POINT, -255 175 -0.5 ] +store_suit_point [ 183, STREET_POINT, -242 175 -0.5 ] +store_suit_point [ 184, STREET_POINT, -220 175 -0.5 ] +store_suit_point [ 185, STREET_POINT, -220 185 -0.5 ] +store_suit_point [ 186, STREET_POINT, -245 185 -0.5 ] +store_suit_point [ 187, FRONT_DOOR_POINT, -242 164 0, 35 ] +store_suit_point [ 188, STREET_POINT, -205 175 -0.5 ] +store_suit_point [ 189, STREET_POINT, -205 160 -0.5 ] +store_suit_point [ 190, STREET_POINT, -195 160 -0.5 ] +store_suit_point [ 191, STREET_POINT, -195 173 -0.5 ] +store_suit_point [ 192, STREET_POINT, -195 185 -0.5 ] +store_suit_point [ 193, STREET_POINT, -202 185 -0.5 ] +store_suit_point [ 194, FRONT_DOOR_POINT, -202 196 0, 52 ] +store_suit_point [ 195, FRONT_DOOR_POINT, -184 173 0, 37 ] +store_suit_point [ 196, STREET_POINT, -205 140 -0.5 ] +store_suit_point [ 197, STREET_POINT, -195 140 -0.5 ] +store_suit_point [ 198, STREET_POINT, -205 125 -0.5 ] +store_suit_point [ 200, STREET_POINT, -195 100 -0.5 ] +store_suit_point [ 201, STREET_POINT, -195 117 -0.5 ] +store_suit_point [ 202, STREET_POINT, -195 125 -0.5 ] +store_suit_point [ 203, STREET_POINT, -205 117 -0.5 ] +store_suit_point [ 204, STREET_POINT, -205 100 -0.5 ] +store_suit_point [ 205, FRONT_DOOR_POINT, -216 125 0, 38 ] +store_suit_point [ 206, FRONT_DOOR_POINT, -184 117 0, 53 ] +store_suit_point [ 207, STREET_POINT, -205 88 -0.5 ] +store_suit_point [ 208, STREET_POINT, -205 60 -0.5 ] +store_suit_point [ 209, STREET_POINT, -195 60 -0.5 ] +store_suit_point [ 210, STREET_POINT, -195 88 -0.5 ] +store_suit_point [ 211, FRONT_DOOR_POINT, -215 88 0, 39 ] +store_suit_point [ 212, STREET_POINT, -205 40 -0.5 ] +store_suit_point [ 213, STREET_POINT, -195 40 -0.5 ] +store_suit_point [ 214, STREET_POINT, -205 27 -0.5 ] +store_suit_point [ 215, STREET_POINT, -195 27 -0.5 ] +store_suit_point [ 216, FRONT_DOOR_POINT, -216 27 0, 41 ] +store_suit_point [ 217, SIDE_DOOR_POINT, -220 50 0, 41 ] +store_suit_point [ 218, SIDE_DOOR_POINT, -180 78 0, 53 ] +store_suit_point [ 219, SIDE_DOOR_POINT, -220 68 0, 39 ] +store_suit_point [ 220, SIDE_DOOR_POINT, -180 153 0, 37 ] +store_suit_point [ 221, SIDE_DOOR_POINT, -220 148 0, 38 ] +store_suit_point [ 222, SIDE_DOOR_POINT, -225 200 0, 52 ] +store_suit_point [ 223, SIDE_DOOR_POINT, -270 192 0, 35 ] +store_suit_point [ 224, SIDE_DOOR_POINT, -270 208 0, 49 ] +store_suit_point [ 225, SIDE_DOOR_POINT, -230 277 0, 58 ] +store_suit_point [ 226, SIDE_DOOR_POINT, -288 300 0, 32 ] +store_suit_point [ 227, SIDE_DOOR_POINT, -340 265 0, 31 ] +store_suit_point [ 228, SIDE_DOOR_POINT, -300 245 0, 30 ] +store_suit_point [ 229, SIDE_DOOR_POINT, -340 250 0, 29 ] +store_suit_point [ 230, SIDE_DOOR_POINT, -340 153 0, 28 ] +store_suit_point [ 231, SIDE_DOOR_POINT, -340 140 0, 48 ] +store_suit_point [ 232, SIDE_DOOR_POINT, -240 137 0, 26 ] +store_suit_point [ 233, SIDE_DOOR_POINT, -240 117 0, 56 ] +store_suit_point [ 234, SIDE_DOOR_POINT, -280 80 0, 25 ] +store_suit_point [ 235, SIDE_DOOR_POINT, -240 50 0, 23 ] +store_suit_point [ 236, SIDE_DOOR_POINT, -240 -15 0, 22 ] +store_suit_point [ 237, SIDE_DOOR_POINT, -272 -40 0, 54 ] +store_suit_point [ 238, SIDE_DOOR_POINT, -380 10 0, 19 ] +store_suit_point [ 239, SIDE_DOOR_POINT, -357 60 0, 18 ] +store_suit_point [ 240, SIDE_DOOR_POINT, -388 60 0, 17 ] +store_suit_point [ 241, SIDE_DOOR_POINT, -435 15 0, 15 ] +store_suit_point [ 242, SIDE_DOOR_POINT, -395 2 0, 46 ] +store_suit_point [ 243, SIDE_DOOR_POINT, -395 -70 0, 14 ] +store_suit_point [ 244, SIDE_DOOR_POINT, -427 -120 0, 55 ] +store_suit_point [ 245, SIDE_DOOR_POINT, -505 -70 0, 9 ] +store_suit_point [ 246, SIDE_DOOR_POINT, -465 -65 0, 11 ] +store_suit_point [ 247, SIDE_DOOR_POINT, -505 15 0, 12 ] +store_suit_point [ 248, SIDE_DOOR_POINT, -465 63 0, 10 ] +store_suit_point [ 250, SIDE_DOOR_POINT, -505 77 0, 45 ] +store_suit_point [ 251, SIDE_DOOR_POINT, -452 110 0, 7 ] +store_suit_point [ 252, SIDE_DOOR_POINT, -385 102 0, 6 ] +store_suit_point [ 253, SIDE_DOOR_POINT, -385 177 0, 5 ] +store_suit_point [ 254, SIDE_DOOR_POINT, -425 140 0, 4 ] +store_suit_point [ 255, SIDE_DOOR_POINT, -418 230 0, 3 ] +store_suit_point [ 256, STREET_POINT, -365 -70 -0.5 ] +store_suit_point [ 257, STREET_POINT, -340 -70 -0.5 ] +store_suit_point [ 258, STREET_POINT, -320 -70 -0.5 ] +store_suit_point [ 259, STREET_POINT, -302 -70 -0.5 ] +store_suit_point [ 262, STREET_POINT, -302 -54 -0.5 ] +store_suit_point [ 263, FRONT_DOOR_POINT, -284 -54 0, 54 ] +group "minniesMelodyLand" [ + visgroup "4101" [ + vis [ "4102" "4103" "4104" "4101" "4128" ] + battle_cell [ 20 20 -445 210 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -425 230 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ -454.72 230 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ -450 190 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -425 190 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -450 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -460 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 7 -7 0 ] + nhpr [ -0 0 -0 ] + ] + ] + prop "linktunnel_tt_2201_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ -459.72 210 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.72 ] + nhpr [ -0 0 1 ] + scale [ 1.5 1 1.5 ] + width [ 32.495 ] + height [ 32.495 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.96 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + pos [ 0 0 1.8 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb3:random_DNARoot" [ + pos [ -440 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 6.28 -8 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -430 190 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -440 190 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -440.723 193.171 -9.15527e-005 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -454.182 201.142 -0.5 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "4102" [ + vis [ "4101" "4102" "4128" "4104" "4103" "4105" ] + suit_edge [ 2 8 ] + suit_edge [ 8 9 ] + suit_edge [ 10 11 ] + suit_edge [ 11 3 ] + suit_edge [ 11 12 ] + suit_edge [ 12 11 ] + suit_edge [ 8 12 ] + suit_edge [ 12 8 ] + suit_edge [ 3 2 ] + suit_edge [ 255 3 ] + suit_edge [ 3 255 ] + battle_cell [ 20 20 -405 210 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -425 230 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random20_DNARoot" [ + pos [ -410 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -400 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -385 230 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 5 -3 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 9 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb3:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Tom-Tom's Drums" ] + pos [ -385 220 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.12 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.384314 0 0.768627 1 ] + pos [ 0 0 -0.82 ] + scale [ 1.4 1 1.4 ] + kern [ 0.060441 ] + width [ 33.761 ] + height [ 33.761 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 28.14 -2.86 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -425 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -385 195 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -1.49001 -33.58 0 ] + nhpr [ -180 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -406.402 226.477 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "4103" [ + vis [ "4101" "4102" "4103" "4104" "4105" "4106" "4107" "4128" "4129" "4130" ] + suit_edge [ 9 13 ] + suit_edge [ 13 14 ] + suit_edge [ 15 16 ] + suit_edge [ 16 10 ] + suit_edge [ 13 17 ] + suit_edge [ 17 13 ] + suit_edge [ 16 17 ] + suit_edge [ 17 16 ] + battle_cell [ 20 20 -405 170 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -425 190 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -425 170 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ -425 165 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3 -3 0 ] + nhpr [ 105 0 -0 ] + ] + ] + landmark_building "tb4:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "In Four-Four Time" ] + pos [ -425 150 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.37 ] + scale [ 0.9 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 0.79 ] + width [ 30.9262 ] + height [ 30.9262 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 -0.12 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -385 170 0 ] + nhpr [ -90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -385 185 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -419.152 182.77 -1.14441e-005 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "4104" [ + vis [ "4104" "4128" "4103" "4102" "4101" "4107" "4106" "4105" "4129" ] + suit_edge [ 21 23 ] + suit_edge [ 23 24 ] + suit_edge [ 25 26 ] + suit_edge [ 26 22 ] + suit_edge [ 23 27 ] + suit_edge [ 27 23 ] + suit_edge [ 26 27 ] + suit_edge [ 27 26 ] + suit_edge [ 252 22 ] + suit_edge [ 22 252 ] + suit_edge [ 252 21 ] + suit_edge [ 21 252 ] + suit_edge [ 253 10 ] + suit_edge [ 10 253 ] + suit_edge [ 253 9 ] + suit_edge [ 9 253 ] + battle_cell [ 20 20 -405 90 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -385 110 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random20_DNARoot" [ + pos [ -385 95 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 3.16682 -6.66882 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -7 -32 0 ] + nhpr [ 180 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 12.58 -1.04 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -420 70 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -385 70 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 7 -3 0 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb6:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Casa De Castanets" ] + pos [ -395 70 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.68 0 0.03 ] + scale [ 1.4 1 1.4 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.639216 0.0666667 0.666667 1 ] + pos [ 1.8 0 0.89 ] + nhpr [ -0 0 -1 ] + scale [ 1.4 1 1.5 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.639216 0.0666667 0.666667 1 ] + pos [ 1.8 0 -0.79 ] + nhpr [ -0 0 -1 ] + scale [ 1.3 1 1.5 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -385 110 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -385 80 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4105" [ + vis [ "4104" "4105" "4106" "4107" "4103" "4102" "4128" "4129" "4130" "4108" "4131" "4132" ] + suit_edge [ 24 28 ] + suit_edge [ 29 25 ] + suit_edge [ 251 28 ] + suit_edge [ 28 251 ] + suit_edge [ 251 29 ] + suit_edge [ 29 251 ] + battle_cell [ 20 20 -445 90 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -445 110 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -425 110 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ -455 70 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -445 70 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -425 70 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 6.94 -1.31 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -460 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.807843 0.298039 0.509804 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -439.859 105.906 -2.28882e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "4106" [ + vis [ "4105" "4106" "4107" "4128" "4104" "4103" "4129" "4130" "4131" "4132" "4108" "4133" ] + suit_edge [ 28 30 ] + suit_edge [ 30 31 ] + suit_edge [ 31 32 ] + suit_edge [ 33 34 ] + suit_edge [ 34 29 ] + suit_edge [ 30 35 ] + suit_edge [ 35 30 ] + suit_edge [ 34 35 ] + suit_edge [ 35 34 ] + suit_edge [ 31 36 ] + suit_edge [ 36 31 ] + suit_edge [ 34 36 ] + suit_edge [ 36 34 ] + suit_edge [ 250 32 ] + suit_edge [ 32 250 ] + suit_edge [ 250 33 ] + suit_edge [ 33 250 ] + battle_cell [ 20 20 -485 90 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -505 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb45:random20_DNARoot" [ + pos [ -505 100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -470 110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -505 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 6 -3 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 16 -8 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10 -5 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb45:random20_DNARoot" [ + pos [ -505 70 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 5 -34.38 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb7:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Catchy Toon Apparel" ] + pos [ -490 110 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ -0.22 0 -0.03 ] + scale [ 0.7 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.76 ] + scale [ 1 1 1.3 ] + kern [ 0.053531 ] + width [ 26.6909 ] + height [ 26.6909 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb45:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Club 88" ] + pos [ -505 83 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.752941 1 ] + pos [ 0 0 -1.25 ] + scale [ 3 1 3 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "8" ] + ] + text [ + letters [ "8" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -500.324 82.3399 0 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4107" [ + vis [ "4105" "4106" "4107" "4104" "4103" "4128" "4129" "4130" "4131" "4132" "4133" "4108" "4102" ] + suit_edge [ 32 37 ] + suit_edge [ 38 33 ] + suit_edge [ 248 38 ] + suit_edge [ 38 248 ] + suit_edge [ 248 37 ] + suit_edge [ 37 248 ] + battle_cell [ 20 20 -485 60 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -505 70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ -465 70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -505 50 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -465 55 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4108" [ + vis [ "4109" "4110" "4133" "4106" "4107" "4108" "4129" "4130" "4131" "4132" "4105" "4148" ] + suit_edge [ 57 59 ] + suit_edge [ 59 60 ] + suit_edge [ 61 62 ] + suit_edge [ 62 58 ] + battle_cell [ 20 20 -485 -100 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -465 -120 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -525 -99.9999 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb55:random20_DNARoot" [ + pos [ -485 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 4.83 -1.37 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb55:random20_DNARoot" [ + pos [ -470 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 4 ] + ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ 5 -5 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 1.2 -33.83 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 5.78 -6.41 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.92 0.92 0.92 1 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 15 -2.06918 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -100 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -515 -80.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -525 -80.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.97 0.44 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -525 -65.0001 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.97 0.44 0.47 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 2.9688 -2.83398 1.52588e-005 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ -525 -100 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 14.32 -3.84802 -3.8147e-006 ] + nhpr [ -30 0 -0 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -503.15 -82.966 -7.62939e-006 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "4109" [ + vis [ "4110" "4111" "4112" "4134" "4135" "4109" "4108" "4133" "4132" "4131" "4148" ] + suit_edge [ 68 70 ] + suit_edge [ 70 71 ] + suit_edge [ 72 73 ] + suit_edge [ 73 65 ] + suit_edge [ 70 74 ] + suit_edge [ 74 70 ] + suit_edge [ 73 74 ] + suit_edge [ 74 73 ] + suit_edge [ 244 68 ] + suit_edge [ 68 244 ] + suit_edge [ 244 65 ] + suit_edge [ 65 244 ] + battle_cell [ 20 20 -415 -100 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -395 -80 -9.15527e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ -395 -120 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -395 -80 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 12 -2 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 2.61 -6.99 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 5 -34 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -395 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 1.5 -8.9 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 9.58 -2.02 -0.06 ] + nhpr [ -45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb55:random20_DNARoot" [ + pos [ -420 -120 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -4 -7.5 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb14:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Shave and a Haircut for a Song" ] + pos [ -395 -95 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.33 ] + nhpr [ -0 0 -2 ] + scale [ 0.7 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.22 ] + scale [ 0.9 1 0.8 ] + kern [ 0.058032 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.03 ] + scale [ 1 1 0.7 ] + kern [ 0.035674 ] + width [ 20.9745 ] + height [ 20.9745 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -407.816 -116.627 -9.15527e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "4110" [ + vis [ "4108" "4109" "4134" "4135" "4112" "4111" "4110" "4133" "4148" ] + suit_edge [ 71 75 ] + suit_edge [ 76 72 ] + suit_edge [ 243 71 ] + suit_edge [ 71 243 ] + suit_edge [ 243 72 ] + suit_edge [ 72 243 ] + battle_cell [ 20 20 -415 -60 -0.5 ] + group "streets" [ + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -395 -80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ -435 -80 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb46:random20_DNARoot" [ + pos [ -395 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ -435 -55 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -395 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.42 0.42 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4111" [ + vis [ "4113" "4111" "4112" "4110" "4133" "4134" "4114" "4109" "4135" "4136" "4115" "4116" "4147" ] + suit_edge [ 83 85 ] + suit_edge [ 85 86 ] + suit_edge [ 87 88 ] + suit_edge [ 88 89 ] + suit_edge [ 89 84 ] + suit_edge [ 88 90 ] + suit_edge [ 90 88 ] + suit_edge [ 85 90 ] + suit_edge [ 90 85 ] + battle_cell [ 20 20 -415 40 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -435 20 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ -435 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 12.8 -2.95 0 ] + nhpr [ 60 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.29 -1.23 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -435 35 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 4.77 -1.28 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -435 20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 7.52 -31.7 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.22 -40.52 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + landmark_building "tb17:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Happy Mandolins" ] + pos [ -420 60 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0.34 0 0.14 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.388235 0.576471 1 ] + pos [ 0.13 0 0.77 ] + scale [ 1.8 1 0.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "b" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.388235 0.576471 1 ] + pos [ 0.31 0 -0.02 ] + nhpr [ -0 0 -1 ] + scale [ 1.6 1 0.7 ] + kern [ 0.1 ] + width [ 34.3171 ] + height [ 34.3171 ] + flags [ "b" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -431.696 47.5278 -1.52588e-005 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "4112" [ + vis [ "4108" "4109" "4110" "4111" "4113" "4136" "4116" "4115" "4114" "4112" "4135" "4134" "4133" "4147" ] + suit_edge [ 86 91 ] + suit_edge [ 91 92 ] + suit_edge [ 93 94 ] + suit_edge [ 94 87 ] + suit_edge [ 91 95 ] + suit_edge [ 95 91 ] + suit_edge [ 94 95 ] + suit_edge [ 95 94 ] + suit_edge [ 239 94 ] + suit_edge [ 94 239 ] + suit_edge [ 239 91 ] + suit_edge [ 91 239 ] + suit_edge [ 240 87 ] + suit_edge [ 87 240 ] + suit_edge [ 240 86 ] + suit_edge [ 86 240 ] + battle_cell [ 20 20 -360 40 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -380 60 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random20_DNARoot" [ + pos [ -340 35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.87 -1.46 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 9.81 -7.02 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -350 60 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb18:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Rests Rooms" ] + pos [ -340 50 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.79 1 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.18 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.415686 0.415686 1 ] + pos [ 0 0 -0.76 ] + scale [ 1.6 1 1.6 ] + kern [ 0.092785 ] + width [ 28.7068 ] + height [ 28.7068 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -380 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.8 0.61 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.8 0.61 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 2 -7 0 ] + nhpr [ -75 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -395 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -340 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 7.92 -1.86 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -365 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 0.49 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ -385 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -395 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -380 20 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ -5.34 -6.5 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 9.11 -2.43 0 ] + nhpr [ 105 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -366.691 54.2369 7.62939e-006 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "4114" [ + vis [ "4113" "4111" "4112" "4114" "4115" "4136" "4116" "4117" "4137" "4138" "4147" ] + suit_edge [ 96 98 ] + suit_edge [ 100 101 ] + suit_edge [ 101 97 ] + suit_edge [ 98 102 ] + suit_edge [ 102 98 ] + suit_edge [ 101 102 ] + suit_edge [ 102 101 ] + suit_edge [ 98 256 ] + suit_edge [ 256 257 ] + battle_cell [ 20 20 -360 -45 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -340 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ -380 -50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -340 -50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random20_DNARoot" [ + pos [ -380 -15 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -0.49 -8.17 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 9.27 -33.84 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 4.64 -1.27 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -380 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "More Scores" ] + pos [ -380 -30 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.79 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.42 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.384314 0.568627 1 ] + pos [ 0 0 0.76 ] + scale [ 1.2 1 1 ] + wiggle [ 2.15117 ] + stomp [ 0.01 ] + width [ 32.9804 ] + height [ 32.9804 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.384314 0.568627 1 ] + pos [ 0 0 -0.13 ] + scale [ 0.8 1 0.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -340 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -360 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ -5.56005 -8.76187 0 ] + nhpr [ -165 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -380 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -380 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -360 -100 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -375 -100 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -390 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -390 -85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -390 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -375.398 -40.0596 3.05176e-005 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "4115" [ + vis [ "4113" "4115" "4117" "4118" "4111" "4112" "4114" "4116" "4136" "4137" "4138" "4139" "4147" ] + suit_edge [ 104 100 ] + battle_cell [ 20 20 -330 -20 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -340 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -340 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -330 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb57:random20_DNARoot" [ + pos [ -330 0 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -340 0 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb59:toon_landmark_hqMM_DNARoot" [ + code [ "toon_landmark_hqMM" ] + building_type [ "hq" ] + title [ "" ] + pos [ -330 -40 0 ] + nhpr [ -0 0 -0 ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 14.9999 5.00004 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -15 5 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "4116" [ + vis [ "4113" "4116" "4117" "4118" "4138" "4139" "4136" "4137" "4114" "4115" "4147" ] + suit_edge [ 106 110 ] + suit_edge [ 110 111 ] + suit_edge [ 112 113 ] + suit_edge [ 113 107 ] + suit_edge [ 110 114 ] + suit_edge [ 114 110 ] + suit_edge [ 113 114 ] + suit_edge [ 114 113 ] + suit_edge [ 236 113 ] + suit_edge [ 113 236 ] + suit_edge [ 236 110 ] + suit_edge [ 110 236 ] + suit_edge [ 237 106 ] + suit_edge [ 106 237 ] + suit_edge [ 237 107 ] + suit_edge [ 107 237 ] + battle_cell [ 20 20 -260 -20 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -240 -1.33514e-005 1.52588e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -240 0 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 1.35 -7.16 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 9 -1 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ -240 -40 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 8.87 -8.28 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 33 -33 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb22:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Chin Rest Pillows" ] + pos [ -240 -20 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.24 ] + scale [ 0.8 1 0.5 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.27 ] + scale [ 0.9 1 0.9 ] + wiggle [ 2.47406 ] + stumble [ 0.071323 ] + stomp [ 0.053052 ] + width [ 36.3544 ] + height [ 36.3544 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ -240 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -265 -40 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ -240 -35 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -263.551 -35.6765 1.52588e-005 ] + nhpr [ 180 0 0 ] + ] + ] + visgroup "4117" [ + vis [ "4114" "4115" "4116" "4117" "4118" "4138" "4139" "4137" "4136" "4147" ] + suit_edge [ 111 115 ] + suit_edge [ 115 116 ] + suit_edge [ 117 118 ] + suit_edge [ 118 112 ] + suit_edge [ 115 119 ] + suit_edge [ 119 115 ] + suit_edge [ 118 119 ] + suit_edge [ 119 118 ] + battle_cell [ 20 20 -260 20 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -240 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -240 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.67 -3.61 0 ] + nhpr [ 135 0 -0 ] + ] + ] + landmark_building "tb23:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Flats Sharpened" ] + pos [ -240 40 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -2.23 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ -3.2 0 0.64 ] + nhpr [ -0 0 -14 ] + scale [ 1.1 1 1 ] + kern [ 0.07832 ] + width [ 12.5 ] + height [ 12.5 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0.7 0 0 ] + scale [ 1.2 1 1 ] + kern [ 0.061835 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4118" [ + vis [ "4118" "4119" "4120" "4121" "4116" "4117" "4136" "4137" "4138" "4139" "4140" "4141" "4147" ] + suit_edge [ 126 130 ] + suit_edge [ 130 131 ] + suit_edge [ 131 132 ] + suit_edge [ 134 127 ] + suit_edge [ 134 135 ] + suit_edge [ 135 134 ] + suit_edge [ 131 135 ] + suit_edge [ 135 131 ] + suit_edge [ 140 134 ] + suit_edge [ 232 130 ] + suit_edge [ 130 232 ] + suit_edge [ 232 134 ] + suit_edge [ 134 232 ] + suit_edge [ 233 126 ] + suit_edge [ 126 233 ] + suit_edge [ 233 127 ] + suit_edge [ 127 233 ] + suit_edge [ 234 122 ] + suit_edge [ 122 234 ] + suit_edge [ 234 121 ] + suit_edge [ 121 234 ] + battle_cell [ 20 20 -270 130 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -280 150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -290 110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -300 110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random20_DNARoot" [ + pos [ -300 150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 1.75 -6.05 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -290 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 9.14 -7.94 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -255.5 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 8.54 -1.4 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -280 110 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 14 -5 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb56:random20_DNARoot" [ + pos [ -240 125 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb26:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Notations" ] + pos [ -275 150 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0.21 0 -0.42 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.411765 0.0588235 0.588235 1 ] + pos [ -0.05 0 0.63 ] + scale [ 1.3 1 1 ] + kern [ 0.151729 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -0.14 ] + scale [ 1 1 0.7 ] + width [ 37.7302 ] + height [ 37.7302 ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -240 150 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.69 0.58 0.96 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -275.48 113.997 7.62939e-006 ] + nhpr [ 135 0 -0 ] + ] + ] + visgroup "4119" [ + vis [ "4119" "4120" "4139" "4118" "4121" "4140" "4141" "4138" "4146" ] + suit_edge [ 132 137 ] + suit_edge [ 137 138 ] + suit_edge [ 139 140 ] + suit_edge [ 141 139 ] + suit_edge [ 142 141 ] + suit_edge [ 139 143 ] + suit_edge [ 143 139 ] + suit_edge [ 137 143 ] + suit_edge [ 143 137 ] + suit_edge [ 231 142 ] + suit_edge [ 142 231 ] + suit_edge [ 231 138 ] + suit_edge [ 138 231 ] + battle_cell [ 20 20 -320 130 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -300 110 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb48:random20_DNARoot" [ + pos [ -340 110 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 3 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 1.56 -0.52 -0.08 ] + nhpr [ 60 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -340 135 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.42 0.42 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -315 110 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 10 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb48:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Carry a Toon Movers" ] + pos [ -297.1 110 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0.74902 0 0.74902 1 ] + pos [ -0.46 0 -0.19 ] + scale [ 1.6 1 1.8 ] + width [ 59.4742 ] + height [ 59.4742 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.74902 0 0.74902 1 ] + pos [ -0.21 0 -1.91 ] + scale [ 1.2 1 1 ] + kern [ 0.212762 ] + width [ 47.2523 ] + height [ 47.2523 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -335.882 128.836 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + pos [ -304.819 144.328 -9.15527e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "4120" [ + vis [ "4119" "4120" "4118" "4138" "4139" "4121" "4140" "4141" "4146" ] + suit_edge [ 138 144 ] + suit_edge [ 144 145 ] + suit_edge [ 146 147 ] + suit_edge [ 147 142 ] + suit_edge [ 147 148 ] + suit_edge [ 148 147 ] + suit_edge [ 144 148 ] + suit_edge [ 148 144 ] + suit_edge [ 230 142 ] + suit_edge [ 142 230 ] + suit_edge [ 230 138 ] + suit_edge [ 138 230 ] + battle_cell [ 20 20 -320 170 -0.5 ] + group "streets" [ + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -300 150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ -300 194.9 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -300 165 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -300.02 179.94 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -340 145 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb28:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Accidental Insurance" ] + pos [ -340 160 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.47 ] + scale [ 0.6 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ -0.12 0 0.83 ] + scale [ 1.2 1 0.8 ] + kern [ 0.05 ] + width [ 31.8036 ] + height [ 31.8036 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.06 ] + scale [ 1.1 1 0.8 ] + kern [ 0.080531 ] + width [ 24.4762 ] + height [ 24.4762 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4121" [ + vis [ "4120" "4122" "4125" "4124" "4123" "4121" "4140" "4141" "4142" "4143" "4144" "4126" "4146" "4119" "4118" ] + suit_edge [ 157 159 ] + suit_edge [ 159 160 ] + suit_edge [ 161 162 ] + suit_edge [ 162 158 ] + suit_edge [ 159 163 ] + suit_edge [ 163 159 ] + suit_edge [ 162 163 ] + suit_edge [ 163 162 ] + battle_cell [ 20 20 -320 280 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -340 260 7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb31:random20_DNARoot" [ + pos [ -340 270 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -340 290 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -310 300 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.82 -3.22 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -340 300 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 13.46 -4.64 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 3.66 -1.09 -0.04 ] + nhpr [ 45 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 8.74 -1.36 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -340 280 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 7.49 -6.37 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -11.64 -32.24 0 ] + nhpr [ -90 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 1.32 -1.22 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb31:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Canto Help You" ] + pos [ -325 300 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.16 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.396078 0 0.792157 1 ] + pos [ 0 0 -0.77 ] + scale [ 1.2 1 1.2 ] + kern [ 0.083116 ] + width [ 23.2455 ] + height [ 23.2455 ] + flags [ "b" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -340 260 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -335.506 271.472 7.62939e-006 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "4122" [ + vis [ "4144" "4142" "4141" "4140" "4126" "4125" "4124" "4123" "4121" "4122" "4143" "4146" "4120" "4119" "4118" ] + suit_edge [ 164 166 ] + suit_edge [ 166 167 ] + suit_edge [ 168 169 ] + suit_edge [ 169 170 ] + suit_edge [ 170 165 ] + suit_edge [ 170 171 ] + suit_edge [ 171 170 ] + suit_edge [ 166 171 ] + suit_edge [ 171 166 ] + suit_edge [ 225 169 ] + suit_edge [ 169 225 ] + suit_edge [ 225 166 ] + suit_edge [ 166 225 ] + battle_cell [ 20 20 -250 280 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -270 300 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb32:random20_DNARoot" [ + pos [ -240 300 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 9.46 -2.33 -0.07 ] + nhpr [ -45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -250 300 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3 -3 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb58:random20_DNARoot" [ + pos [ -230 270 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 6.14 -7.17 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb58:random20_DNARoot" [ + pos [ -230 285 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -230 300 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 15 -8 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 33 -33 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb32:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Dance Around the Clock Shop" ] + pos [ -270 300 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 0.22 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -0.26 ] + scale [ 0.9 1 1.1 ] + width [ 22.5739 ] + height [ 22.5739 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -1.19 ] + width [ 20.0743 ] + height [ 20.0743 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -265.187 293.793 1.52588e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "4123" [ + vis [ "4123" "4124" "4125" "4121" "4122" "4126" "4144" "4143" "4142" "4146" "4145" ] + suit_edge [ 167 172 ] + suit_edge [ 172 173 ] + suit_edge [ 173 174 ] + suit_edge [ 175 176 ] + suit_edge [ 176 177 ] + suit_edge [ 177 168 ] + suit_edge [ 177 178 ] + suit_edge [ 178 177 ] + suit_edge [ 172 178 ] + suit_edge [ 178 172 ] + suit_edge [ 173 179 ] + suit_edge [ 179 173 ] + suit_edge [ 176 179 ] + suit_edge [ 179 176 ] + battle_cell [ 20 20 -250 240 -0.5 ] + group "streets" [ + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -270 260 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb58:random20_DNARoot" [ + pos [ -230 260 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + ] + flat_building "tb58:random20_DNARoot" [ + pos [ -230 230 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + ] + flat_building "tb49:random20_DNARoot" [ + pos [ -270 240 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + landmark_building "tb58:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Plummeting Pianos" ] + pos [ -230 250 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.13 ] + scale [ 1 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0.1 0 0.83 ] + nhpr [ -0 0 -1 ] + scale [ 1 1 0.9 ] + kern [ 0.085575 ] + width [ 22.9085 ] + height [ 22.9085 ] + flags [ "c" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.13 ] + scale [ 1 1 0.9 ] + kern [ 0.096997 ] + width [ 23.8442 ] + height [ 23.8442 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb49:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ -270 215 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + ] + visgroup "4124" [ + vis [ "4124" "4125" "4126" "4127" "4121" "4122" "4123" "4142" "4143" "4144" "4145" "4146" ] + suit_edge [ 180 182 ] + suit_edge [ 182 183 ] + suit_edge [ 183 184 ] + suit_edge [ 185 186 ] + suit_edge [ 186 181 ] + suit_edge [ 186 187 ] + suit_edge [ 187 186 ] + suit_edge [ 183 187 ] + suit_edge [ 187 183 ] + suit_edge [ 222 185 ] + suit_edge [ 185 222 ] + suit_edge [ 222 184 ] + suit_edge [ 184 222 ] + suit_edge [ 223 180 ] + suit_edge [ 180 223 ] + suit_edge [ 223 181 ] + suit_edge [ 181 223 ] + battle_cell [ 20 20 -240 180 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -230 160 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -230 160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb35:random20_DNARoot" [ + pos [ -270 160 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -255 160 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 10.17 -7.32 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 6.63 -1.08 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb35:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Tenor Times" ] + pos [ -230 160 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 0.42 ] + scale [ 1.4 1 1.2 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.282353 0.282353 0.568627 1 ] + pos [ 0 0 0.72 ] + nhpr [ -0 0 1 ] + scale [ 1.1 1 1.1 ] + kern [ 0.099837 ] + width [ 34.9785 ] + height [ 34.9785 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.282353 0.282353 0.568627 1 ] + pos [ 0 0 -0.14 ] + nhpr [ -0 0 -2 ] + scale [ 1 1 0.7 ] + width [ 28.5242 ] + height [ 28.5242 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb52:random20_DNARoot" [ + pos [ -230 200 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 14 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -4.57764e-005 -4.00001 -3.8147e-006 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -7.18 -5 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -270 185 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -270 170 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 10.16 -1.31 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -220 160 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 6 -2 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -266.296 173.596 1.52588e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4125" [ + vis [ "4143" "4144" "4145" "4127" "4126" "4125" "4124" "4123" "4142" "4146" "4122" ] + suit_edge [ 184 188 ] + suit_edge [ 188 189 ] + suit_edge [ 190 191 ] + suit_edge [ 191 192 ] + suit_edge [ 192 193 ] + suit_edge [ 193 185 ] + suit_edge [ 188 194 ] + suit_edge [ 194 188 ] + suit_edge [ 193 194 ] + suit_edge [ 194 193 ] + suit_edge [ 191 195 ] + suit_edge [ 195 191 ] + suit_edge [ 188 195 ] + suit_edge [ 195 188 ] + battle_cell [ 20 20 -205 180 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -220 200 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb37:random20_DNARoot" [ + pos [ -180 200 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb52:random20_DNARoot" [ + pos [ -220 200 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 5 -34 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb52:random20_DNARoot" [ + pos [ -200 200 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.62 0.85 1 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 7 -8 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 19.15 -3.62 0 ] + nhpr [ -45 0 -0 ] + ] + ] + landmark_building "tb52:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Full Stop Shop" ] + pos [ -215 200 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.19 ] + scale [ 2 1 2 ] + kern [ 0.072037 ] + wiggle [ 2 ] + stomp [ 0.07304 ] + width [ 124.44 ] + height [ 124.44 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.8 ] + scale [ 2.5 1 2.3 ] + wiggle [ 2 ] + width [ 147.973 ] + height [ 147.973 ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + landmark_building "tb37:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "For Good Measure" ] + pos [ -180 185 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.79 1 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -2.48 0 -1.2 ] + nhpr [ -0 0 2 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 1.96 0 0.66 ] + scale [ 1.3 1 1.3 ] + kern [ 0.024181 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 1.91 0 -1.43 ] + scale [ 0.8 1 0.8 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 1.88 0 -0.45 ] + scale [ 1.3 1 1.3 ] + kern [ 0.077816 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ -185.022 187.074 -7.62939e-006 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "4126" [ + vis [ "4124" "4125" "4126" "4123" "4142" "4127" "4143" "4144" "4145" "4146" "4122" ] + suit_edge [ 189 196 ] + suit_edge [ 197 190 ] + suit_edge [ 220 190 ] + suit_edge [ 190 220 ] + suit_edge [ 220 189 ] + suit_edge [ 189 220 ] + suit_edge [ 221 190 ] + suit_edge [ 190 221 ] + suit_edge [ 221 189 ] + suit_edge [ 189 221 ] + battle_cell [ 20 20 -200 150 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -220 160 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb37:random20_DNARoot" [ + pos [ -180 160 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.79 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ -220 135 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4127" [ + vis [ "4127" "4124" "4125" "4126" "4145" "4144" "4143" ] + suit_edge [ 212 214 ] + suit_edge [ 214 215 ] + suit_edge [ 215 213 ] + suit_edge [ 214 216 ] + suit_edge [ 216 214 ] + suit_edge [ 215 216 ] + suit_edge [ 216 215 ] + battle_cell [ 20 20 -200 20 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -180 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -170 40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ -165 40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb42:random20_DNARoot" [ + pos [ -180 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 3.09 -8.03 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -220 0 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb42:random20_DNARoot" [ + pos [ -165 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb42:random20_DNARoot" [ + pos [ -210 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 8 -5 0 ] + nhpr [ -45 0 -0 ] + ] + ] + landmark_building "tb42:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Ragtime Dry Cleaners" ] + pos [ -195 0 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.29 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0.22 0 -0.76 ] + scale [ 1 1 1.1 ] + wiggle [ 1.71347 ] + stomp [ 0.05 ] + width [ 27.8265 ] + height [ 27.8265 ] + flags [ "b" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb41:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Blues News" ] + pos [ -220 15 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.22 ] + nhpr [ -0 0 -5 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.14 ] + nhpr [ -0 0 -1 ] + scale [ 1.1 1 1.1 ] + kern [ 0.06198 ] + width [ 35.0594 ] + height [ 35.0594 ] + flags [ "b" ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb42:random20_DNARoot" [ + pos [ -180 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.97 0.44 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + prop "linktunnel_mm_4000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -165 40 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + pos [ 0 0 -2.13 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.443137 0.541176 0.941176 1 ] + pos [ 0 0 -1.01 ] + nhpr [ -0 0 2 ] + scale [ 1.5 1 1.5 ] + wiggle [ 2.60407 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.71 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -2.01 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -213.531 14.9896 1.52588e-005 ] + nhpr [ 90 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -170.799 28.1689 -0.499992 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4113" [ + vis [ "4112" "4113" "4114" "4115" "4111" "4136" "4116" "4147" ] + suit_edge [ 92 96 ] + suit_edge [ 97 93 ] + suit_edge [ 238 96 ] + suit_edge [ 96 238 ] + suit_edge [ 238 97 ] + suit_edge [ 97 238 ] + battle_cell [ 20 20 -360 10 -0.5 ] + group "props" [ + ] + group "buildings" [ + flat_building "tb18:random20_DNARoot" [ + pos [ -340 20 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.956863 0.921569 0.647059 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -380 0 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -380 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + ] + visgroup "4128" [ + vis [ "4128" "4103" "4102" "4101" "4104" "4105" "4106" "4107" "4129" "4130" ] + suit_edge [ 14 18 ] + suit_edge [ 19 15 ] + suit_edge [ 18 20 ] + suit_edge [ 20 18 ] + suit_edge [ 19 20 ] + suit_edge [ 20 19 ] + suit_edge [ 18 21 ] + suit_edge [ 22 19 ] + suit_edge [ 254 18 ] + suit_edge [ 18 254 ] + suit_edge [ 254 19 ] + suit_edge [ 19 254 ] + battle_cell [ 20 20 -405 130 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -425 150 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -425 110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -385 135 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -445 110 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.929412 0.647059 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.964706 0.929412 0.647059 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ 5 -10 0 ] + nhpr [ -60 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 1.03 -22.03 -0.45 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -445 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -385 125 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -425 130 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -4.99999 0 0 ] + nhpr [ -60 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb5:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Fifi's Fiddles" ] + pos [ -385 155 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 40.63 -6.47 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.92 0.92 0.92 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.67 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.0470588 0.427451 0.745098 1 ] + pos [ 0 0 0.2 ] + scale [ 1.2 1 1.5 ] + stomp [ 0.019537 ] + width [ 27.2725 ] + height [ 27.2725 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 23 -4 0 ] + nhpr [ 120 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -421.65 133.806 -7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4129" [ + vis [ "4107" "4106" "4105" "4128" "4103" "4129" "4130" "4131" "4132" "4133" "4108" ] + suit_edge [ 37 39 ] + suit_edge [ 39 40 ] + suit_edge [ 40 41 ] + suit_edge [ 42 43 ] + suit_edge [ 43 44 ] + suit_edge [ 44 38 ] + suit_edge [ 44 45 ] + suit_edge [ 45 44 ] + suit_edge [ 39 45 ] + suit_edge [ 45 39 ] + suit_edge [ 40 46 ] + suit_edge [ 46 40 ] + suit_edge [ 43 46 ] + suit_edge [ 46 43 ] + battle_cell [ 20 20 -485 35 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -505 50 -3.8147e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -465 35 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 4 -2.18 0 ] + nhpr [ 120 0 -0 ] + ] + ] + landmark_building "tb12:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Dr. Fret's Dentistry" ] + pos [ -505 25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.79 1 1 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 21.83 -7.38 0 ] + nhpr [ -180 0 -0 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.89 0 -0.59 ] + scale [ 1.5 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 0.368627 0.368627 1 1 ] + pos [ 2.14 0 0.14 ] + wiggle [ 5.22827 ] + stomp [ 0.03 ] + flags [ "b" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 1 1 ] + pos [ 1.98 0 -1.01 ] + scale [ 0.9 1 0.9 ] + wiggle [ 2.78888 ] + stumble [ 0.01358 ] + stomp [ 0.053498 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + landmark_building "tb10:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Please Refrain" ] + pos [ -465 50 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.2 ] + scale [ 0.8 1 0.5 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.4 0 0.4 1 ] + pos [ 0 0 0.04 ] + nhpr [ -0 0 -2 ] + scale [ 1 1 1.1 ] + kern [ 0.033909 ] + width [ 48.6381 ] + height [ 48.6381 ] + flags [ "b" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -468.9 24.0692 -3.8147e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4130" [ + vis [ "4130" "4129" "4106" "4107" "4105" "4131" "4132" "4133" "4108" "4128" ] + suit_edge [ 41 47 ] + suit_edge [ 48 42 ] + suit_edge [ 247 41 ] + suit_edge [ 41 247 ] + suit_edge [ 247 42 ] + suit_edge [ 42 247 ] + battle_cell [ 20 20 -485 0 -0.5 ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -505 20 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -505 -5 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -465 15 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -465 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -505 5 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.42 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.890196 0.509804 0.823529 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -502.37 -6.38985 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4131" [ + vis [ "4131" "4130" "4129" "4107" "4106" "4105" "4132" "4133" "4108" ] + suit_edge [ 47 49 ] + suit_edge [ 49 50 ] + suit_edge [ 50 51 ] + suit_edge [ 52 53 ] + suit_edge [ 53 54 ] + suit_edge [ 54 48 ] + suit_edge [ 54 55 ] + suit_edge [ 55 54 ] + suit_edge [ 49 55 ] + suit_edge [ 55 49 ] + suit_edge [ 50 56 ] + suit_edge [ 56 50 ] + suit_edge [ 53 56 ] + suit_edge [ 56 53 ] + battle_cell [ 20 20 -485 -35 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -505 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 1.99982 -7.81983 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 12 -4.82 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb9:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Do, Rae, Me Piano Keys" ] + pos [ -505 -50 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.48 ] + nhpr [ -0 0 -3 ] + scale [ 1 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.69 ] + scale [ 1.2 1 1.2 ] + width [ 23.4489 ] + height [ 23.4489 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb11:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Tuning Forks and Spoons" ] + pos [ -465 -20 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -2.04 0 -1.17 ] + nhpr [ -0 0 2 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 1.94 0 0.31 ] + scale [ 1 1 1.5 ] + kern [ 0.046583 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 2.06 0 -0.91 ] + kern [ 0.037366 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "4132" [ + vis [ "4132" "4131" "4130" "4129" "4107" "4106" "4133" "4108" "4109" "4105" "4148" ] + suit_edge [ 51 57 ] + suit_edge [ 58 52 ] + suit_edge [ 245 57 ] + suit_edge [ 57 245 ] + suit_edge [ 245 58 ] + suit_edge [ 58 245 ] + suit_edge [ 246 58 ] + suit_edge [ 58 246 ] + suit_edge [ 246 57 ] + suit_edge [ 57 246 ] + battle_cell [ 20 20 -485 -65 -0.5 ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -505 -70 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -505 -50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -465 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -465 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 2.13 -7.08 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.5 0.5 0.5 ] + color [ 0.917647 0.917647 0.917647 1 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -465 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ -505 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + visgroup "4133" [ + vis [ "4133" "4108" "4132" "4131" "4130" "4129" "4109" "4110" "4134" "4135" "4112" "4111" "4148" ] + suit_edge [ 65 66 ] + suit_edge [ 66 61 ] + suit_edge [ 60 67 ] + suit_edge [ 67 68 ] + suit_edge [ 67 69 ] + suit_edge [ 69 67 ] + suit_edge [ 66 69 ] + suit_edge [ 69 66 ] + battle_cell [ 20 20 -450 -100 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -465 -120 1.14441e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -465 -80 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ -450 -80 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb55:random20_DNARoot" [ + pos [ -435 -120 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 7.26994 -4.58002 -9.15527e-005 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb55:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "The Treble Chef's Cooking School" ] + pos [ -441.18 -120 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 0.72549 0.72549 1 ] + pos [ 0 0 0.25 ] + scale [ 1.6 1 1.7 ] + width [ 57.6203 ] + height [ 57.6203 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.72549 0.72549 1 ] + pos [ 0 0 -1.64 ] + scale [ 1.3 1 1.5 ] + width [ 71.3267 ] + height [ 71.3267 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb55:random20_DNARoot" [ + pos [ -455 -120 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.97 0.58 0.55 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -451.185 -82.6295 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "4134" [ + vis [ "4134" "4135" "4111" "4112" "4110" "4109" "4133" ] + suit_edge [ 75 77 ] + suit_edge [ 77 78 ] + suit_edge [ 79 80 ] + suit_edge [ 80 76 ] + suit_edge [ 77 81 ] + suit_edge [ 81 77 ] + suit_edge [ 80 81 ] + suit_edge [ 81 80 ] + suit_edge [ 80 82 ] + suit_edge [ 82 80 ] + suit_edge [ 77 82 ] + suit_edge [ 82 77 ] + battle_cell [ 20 20 -415 -20 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -395 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ -435 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 3.56 -7.46 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb15:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Piccolo's Pizza" ] + pos [ -435 -25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.64 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.313726 0.623529 1 ] + pos [ 0 0 0.27 ] + scale [ 1 1 1.2 ] + kern [ 0.039322 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "A" ] + ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 21 -8 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -2 -8 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb46:random20_DNARoot" [ + pos [ -395 -30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + ] + landmark_building "tb46:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ -395 -5 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 31.67 -5.42 0 ] + nhpr [ 105 0 -0 ] + ] + ] + ] + visgroup "4135" [ + vis [ "4135" "4134" "4110" "4109" "4133" "4111" "4112" ] + suit_edge [ 78 83 ] + suit_edge [ 84 79 ] + suit_edge [ 241 84 ] + suit_edge [ 84 241 ] + suit_edge [ 241 83 ] + suit_edge [ 83 241 ] + suit_edge [ 242 78 ] + suit_edge [ 78 242 ] + suit_edge [ 242 79 ] + suit_edge [ 79 242 ] + battle_cell [ 20 20 -415 10 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -395 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb46:random20_DNARoot" [ + pos [ -395 20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ -435 -5 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ -435 10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb46:random20_DNARoot" [ + pos [ -395 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "4136" [ + vis [ "4136" "4137" "4115" "4114" "4113" "4112" "4111" "4116" "4117" "4118" "4138" "4139" "4147" ] + suit_edge [ 105 106 ] + suit_edge [ 107 108 ] + suit_edge [ 108 104 ] + suit_edge [ 258 259 ] + suit_edge [ 259 262 ] + suit_edge [ 262 105 ] + suit_edge [ 262 263 ] + suit_edge [ 263 262 ] + battle_cell [ 20 20 -300 -45 -0.5 ] + landmark_building "tb54:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Pitch Perfect Roofing" ] + pos [ -280 -45 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + color [ 0.501961 0.501961 0.752941 1 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.52549 0.294118 0.803922 1 ] + pos [ 0 0 -0.24 ] + nhpr [ -0 0 1 ] + scale [ 2 1 2 ] + kern [ 0.070614 ] + width [ 58.5823 ] + height [ 58.5823 ] + flags [ "b" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.52549 0.294118 0.803922 1 ] + pos [ 0 0 -1.9 ] + scale [ 1.6 1 1.2 ] + kern [ 0.088947 ] + width [ 47.0345 ] + height [ 47.0345 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -320 -40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ -320 -90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -280 -50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -280 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -280 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -280 -70 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -270 -85 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -6.10425 -9.93892 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -270 -70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -270 -100 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 3.49445 -0.707031 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -285 -100 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -300 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -300 -90 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "4137" [ + vis [ "4137" "4136" "4115" "4114" "4117" "4116" "4138" "4139" "4118" "4147" ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ -320 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -320 20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 15 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ -17 -35 0 ] + nhpr [ -60 0 -0 ] + ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -320 0 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 1.82 -11.09 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 21 -12 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb57:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Barbershop Quartet" ] + pos [ -308 40 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.4 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.658824 0 0.658824 1 ] + pos [ 0 0 -0.85 ] + scale [ 1.2 1 1.2 ] + kern [ 0.017483 ] + width [ 30.1668 ] + height [ 30.1668 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -295 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 14 -3 0 ] + nhpr [ 105 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 15 -20 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -320 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 4 -0.49 -0.12 ] + nhpr [ 30 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + ] + visgroup "4138" [ + vis [ "4138" "4117" "4116" "4136" "4137" "4115" "4114" "4139" "4118" "4119" "4120" "4140" "4147" ] + suit_edge [ 116 120 ] + suit_edge [ 120 121 ] + suit_edge [ 122 123 ] + suit_edge [ 123 117 ] + suit_edge [ 123 124 ] + suit_edge [ 124 123 ] + suit_edge [ 120 124 ] + suit_edge [ 124 120 ] + suit_edge [ 235 120 ] + suit_edge [ 120 235 ] + suit_edge [ 235 123 ] + suit_edge [ 123 235 ] + battle_cell [ 20 20 -260 60 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -240 40 2.28882e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb56:random20_DNARoot" [ + pos [ -240 70 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -280 65 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -280 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 0 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 4 -7 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -240 60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 18 -4 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -280 75 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -3 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + flat_building "tb56:random20_DNARoot" [ + pos [ -240 85 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 12 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb25:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Tuba Toothpaste" ] + pos [ -280 50 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.26 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ -0.08 0 0.14 ] + scale [ 0.7 1 1.4 ] + width [ 34.2853 ] + height [ 34.2853 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -244.747 59.2958 -9.15527e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "4139" [ + vis [ "4139" "4138" "4137" "4136" "4116" "4117" "4118" "4119" "4120" "4140" "4147" "4115" ] + suit_edge [ 121 125 ] + suit_edge [ 125 126 ] + suit_edge [ 127 128 ] + suit_edge [ 128 122 ] + suit_edge [ 125 129 ] + suit_edge [ 129 125 ] + suit_edge [ 128 129 ] + suit_edge [ 129 128 ] + battle_cell [ 20 20 -260 95 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -240 80 2.28882e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -240 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -280 85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + ] + ] + landmark_building "tb56:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ -240 108 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -280 100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -246.151 83.8496 2.28882e-005 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "4140" [ + vis [ "4140" "4120" "4119" "4118" "4121" "4141" "4146" "4122" ] + suit_edge [ 145 149 ] + suit_edge [ 149 150 ] + suit_edge [ 150 151 ] + suit_edge [ 152 153 ] + suit_edge [ 153 154 ] + suit_edge [ 154 146 ] + suit_edge [ 149 155 ] + suit_edge [ 155 149 ] + suit_edge [ 154 155 ] + suit_edge [ 155 154 ] + suit_edge [ 153 156 ] + suit_edge [ 156 153 ] + suit_edge [ 150 156 ] + suit_edge [ 156 150 ] + battle_cell [ 20 20 -320 210 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -300 190 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -300 209.9 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 16 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ -340 200 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -340 179.3 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 15 -7 0 ] + nhpr [ -180 0 -0 ] + ] + ] + landmark_building "tb29:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Riff's Paper Plates" ] + pos [ -340 215 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 1 0.87451 0.74902 1 ] + pos [ -0.39 0 -1.1 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.807843 0.184314 0.592157 1 ] + pos [ -0.03 0 0.98 ] + scale [ 1.3 1 1.3 ] + kern [ 0.042903 ] + width [ 22.9911 ] + height [ 22.9911 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.807843 0.184314 0.592157 1 ] + pos [ 0.02 0 -1.29 ] + scale [ 1.4 1 1.8 ] + kern [ 0.069439 ] + width [ 41.0998 ] + height [ 41.0998 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb30:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Music Is Our Forte" ] + pos [ -300 225 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.79 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.16 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 0 0 0.38 ] + scale [ 0.8 1 1.1 ] + kern [ 0.018952 ] + width [ 32.9728 ] + height [ 32.9728 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -335.921 209.79 -9.15527e-005 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "4141" [ + vis [ "4141" "4140" "4120" "4119" "4118" "4121" "4122" "4146" ] + suit_edge [ 151 157 ] + suit_edge [ 158 152 ] + suit_edge [ 228 157 ] + suit_edge [ 157 228 ] + suit_edge [ 228 158 ] + suit_edge [ 158 228 ] + suit_edge [ 229 158 ] + suit_edge [ 158 229 ] + suit_edge [ 229 157 ] + suit_edge [ 157 229 ] + battle_cell [ 20 20 -320 245 -0.5 ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -300 230 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -340 260 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "toonTwenty_DNARoot" [ + pos [ -300 260 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -300 240 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 13 -4 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -300 250 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ -340 240 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4142" [ + vis [ "4142" "4124" "4125" "4126" "4144" "4143" "4123" "4122" "4121" "4146" "4145" ] + suit_edge [ 174 180 ] + suit_edge [ 181 175 ] + suit_edge [ 224 180 ] + suit_edge [ 180 224 ] + suit_edge [ 224 181 ] + suit_edge [ 181 224 ] + battle_cell [ 20 20 -250 210 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -270 220 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb58:random20_DNARoot" [ + pos [ -230 215 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.556863 0.647059 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb49:random20_DNARoot" [ + pos [ -270 200 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.79 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -235.47 204.917 -7.62939e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4143" [ + vis [ "4143" "4126" "4125" "4124" "4123" "4121" "4142" "4127" "4144" "4145" "4122" "4146" ] + suit_edge [ 196 198 ] + suit_edge [ 200 201 ] + suit_edge [ 201 202 ] + suit_edge [ 202 197 ] + suit_edge [ 198 203 ] + suit_edge [ 203 204 ] + suit_edge [ 198 205 ] + suit_edge [ 205 198 ] + suit_edge [ 202 205 ] + suit_edge [ 205 202 ] + suit_edge [ 201 206 ] + suit_edge [ 206 201 ] + suit_edge [ 203 206 ] + suit_edge [ 206 203 ] + battle_cell [ 20 20 -200 120 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -220 140 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ -220 99 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.866667 0.890196 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 4 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 8 -2 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 3 -9 0 ] + nhpr [ -180 0 -0 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + flat_building "tb53:random20_DNARoot" [ + pos [ -180 145 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 7 -3 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb53:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ -179.8 133 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + landmark_building "tb38:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Hard Rock Shop" ] + pos [ -220 115 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 0.35 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0 0 0.79 ] + kern [ 0.03 ] + wiggle [ 3 ] + stumble [ 0.043834 ] + stomp [ 0.01 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0 0 -0.16 ] + width [ 13.2519 ] + height [ 13.2519 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + visgroup "4144" [ + vis [ "4144" "4143" "4126" "4125" "4124" "4122" "4141" "4123" "4121" "4145" "4127" "4142" "4146" ] + suit_edge [ 204 207 ] + suit_edge [ 207 208 ] + suit_edge [ 209 210 ] + suit_edge [ 210 200 ] + suit_edge [ 207 211 ] + suit_edge [ 211 207 ] + suit_edge [ 210 211 ] + suit_edge [ 211 210 ] + battle_cell [ 20 20 -200 80 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -220 100 -3.8147e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -180 70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 4.5 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb53:random20_DNARoot" [ + pos [ -180 85 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + landmark_building "tb39:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Four Score Antiques" ] + pos [ -220 74 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 0.49 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.59 ] + kern [ 0.067758 ] + width [ 26.264 ] + height [ 26.264 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb53:random20_DNARoot" [ + pos [ -180 110 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.619608 0.854902 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.690196 0.576471 0.964706 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.835294 0.552941 0.984314 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 12 -8 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10 -3 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ -220 60 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.984314 0.647059 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 12.9999 -7.00005 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + node "group_0" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -184.096 87.3153 0 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "4145" [ + vis [ "4145" "4127" "4144" "4143" "4126" "4125" "4124" "4122" "4123" ] + suit_edge [ 208 212 ] + suit_edge [ 213 209 ] + suit_edge [ 217 212 ] + suit_edge [ 212 217 ] + suit_edge [ 218 210 ] + suit_edge [ 210 218 ] + suit_edge [ 218 207 ] + suit_edge [ 207 218 ] + suit_edge [ 219 208 ] + suit_edge [ 208 219 ] + suit_edge [ 219 209 ] + suit_edge [ 209 219 ] + battle_cell [ 20 20 -200 50 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -220 60 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -180 55 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.670588 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.97 0.44 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -220 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 16 -1.2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -214.776 42.329 7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "4146" [ + vis [ "4146" "4121" "4122" "4123" "4142" "4140" "4141" "4120" "4124" "4125" "4126" "4143" "4144" "4119" ] + suit_edge [ 160 164 ] + suit_edge [ 165 161 ] + suit_edge [ 226 161 ] + suit_edge [ 161 226 ] + suit_edge [ 226 160 ] + suit_edge [ 160 226 ] + suit_edge [ 227 158 ] + suit_edge [ 158 227 ] + suit_edge [ 227 157 ] + suit_edge [ 157 227 ] + battle_cell [ 20 20 -285 280 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -300 260 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb49:random20_DNARoot" [ + pos [ -270 260 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb49:random20_DNARoot" [ + pos [ -285 260 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 11 -6 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -295 300 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -280 300 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 5 -6 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -278.717 264.8 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "4147" [ + vis [ "4147" "4136" "4137" "4138" "4139" "4111" "4112" "4114" "4115" "4116" "4117" "4113" ] + suit_edge [ 257 258 ] + battle_cell [ 20 20 -330 -70 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -340 -90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -320 -90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + visgroup "4148" [ + vis [ "4148" "4108" "4109" "4110" "4133" "4132" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -613.6 -89.8 0 ] + nhpr [ -98 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -570.662 -101.811 1.9065 ] + nhpr [ 45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -589.644 -101.644 1.89854 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -570.109 -78.5609 1.89524 ] + nhpr [ 135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -590.693 -78.9364 1.91926 ] + nhpr [ -135 0 -0 ] + ] + ] + group "props" [ + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -579.89 -69.7874 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -580 -110 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -543.06 -98.1575 -0.00075531 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -543.181 -81.5271 0.000778198 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -541.634 -66.7024 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -620.461 -114.231 0 ] + nhpr [ -60 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -555.41 -50.173 3.05176e-005 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -602.836 -127.326 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -623.246 -89.6841 1.52588e-005 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -619.521 -65.3147 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -602.31 -50.4108 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -579.34 -45.321 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -580.315 -133.547 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -557.184 -126.928 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -542.576 -112.166 0 ] + nhpr [ -90 0 -0 ] + ] + ] + street "street_MM_pond_DNARoot" [ + code [ "street_MM_pond" ] + pos [ -580 -89.9999 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -569.958 -22.3061 7.8157 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -561.359 -27.3825 7.80612 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -625 -19.9999 7.57439 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -605 -19.9999 8.1851 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_shingles_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -670 -105 7.68109 ] + nhpr [ 45 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -652.322 -87.3222 7.68109 ] + nhpr [ 120 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -629.33 -143.839 9.15222 ] + nhpr [ 135 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_MM_sm_curved_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_MM_sm_curved_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -639.505 -161.203 9.00788 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_MM_sm_curved_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_MM_sm_curved_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -564.209 -152.648 9.42532 ] + nhpr [ -165 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -556.738 -165.527 9.33912 ] + nhpr [ 120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/minnies_melody_land_4200.dna b/ttmodels/src/dna/minnies_melody_land_4200.dna new file mode 100644 index 00000000..105e79d2 --- /dev/null +++ b/ttmodels/src/dna/minnies_melody_land_4200.dna @@ -0,0 +1,9688 @@ +store_suit_point [ 2, STREET_POINT, 135 355 -0.5 ] +store_suit_point [ 3, STREET_POINT, 160 355 -0.5 ] +store_suit_point [ 4, FRONT_DOOR_POINT, 124 355 0, 1 ] +store_suit_point [ 5, STREET_POINT, 135 345 -0.5 ] +store_suit_point [ 6, STREET_POINT, 160 345 -0.5 ] +store_suit_point [ 7, STREET_POINT, 179 345 -0.5 ] +store_suit_point [ 10, STREET_POINT, 179 355 -0.5 ] +store_suit_point [ 11, FRONT_DOOR_POINT, 177 334 0, 2 ] +store_suit_point [ 12, FRONT_DOOR_POINT, 182 366 0, 3 ] +store_suit_point [ 13, STREET_POINT, 210 345 -0.5 ] +store_suit_point [ 14, STREET_POINT, 210 355 -0.5 ] +store_suit_point [ 15, STREET_POINT, 225 345 -0.5 ] +store_suit_point [ 16, STREET_POINT, 225 330 -0.5 ] +store_suit_point [ 17, STREET_POINT, 235 330 -0.5 ] +store_suit_point [ 18, STREET_POINT, 235 355 -0.5 ] +store_suit_point [ 19, FRONT_DOOR_POINT, 246 350 0, 4 ] +store_suit_point [ 20, STREET_POINT, 225 313 -0.5 ] +store_suit_point [ 21, STREET_POINT, 225 290 -0.5 ] +store_suit_point [ 22, STREET_POINT, 235 290 -0.5 ] +store_suit_point [ 23, STREET_POINT, 235 313 -0.5 ] +store_suit_point [ 24, FRONT_DOOR_POINT, 214 313 0, 5 ] +store_suit_point [ 25, STREET_POINT, 225 275 -0.5 ] +store_suit_point [ 26, STREET_POINT, 210 275 -0.5 ] +store_suit_point [ 27, STREET_POINT, 210 265 -0.5 ] +store_suit_point [ 28, STREET_POINT, 235 265 -0.5 ] +store_suit_point [ 29, FRONT_DOOR_POINT, 246 271 0, 32 ] +store_suit_point [ 30, STREET_POINT, 190 275 -0.5 ] +store_suit_point [ 31, STREET_POINT, 190 265 -0.5 ] +store_suit_point [ 32, STREET_POINT, 183 275 -0.5 ] +store_suit_point [ 33, STREET_POINT, 165 275 -0.5 ] +store_suit_point [ 34, STREET_POINT, 160 275 -0.5 ] +store_suit_point [ 35, STREET_POINT, 160 265 -0.5 ] +store_suit_point [ 36, STREET_POINT, 165 265 -0.5 ] +store_suit_point [ 37, STREET_POINT, 183 265 -0.5 ] +store_suit_point [ 38, FRONT_DOOR_POINT, 183 254 0, 7 ] +store_suit_point [ 39, FRONT_DOOR_POINT, 165 286 0, 9 ] +store_suit_point [ 40, STREET_POINT, 130 275 -0.5 ] +store_suit_point [ 41, STREET_POINT, 130 265 -0.5 ] +store_suit_point [ 42, STREET_POINT, 126 275 -0.5 ] +store_suit_point [ 43, STREET_POINT, 100 275 -0.5 ] +store_suit_point [ 44, STREET_POINT, 100 265 -0.5 ] +store_suit_point [ 45, STREET_POINT, 126 265 -0.5 ] +store_suit_point [ 46, FRONT_DOOR_POINT, 126 254 0, 33 ] +store_suit_point [ 47, STREET_POINT, 85 275 -0.5 ] +store_suit_point [ 48, STREET_POINT, 85 290 -0.5 ] +store_suit_point [ 49, STREET_POINT, 75 290 -0.5 ] +store_suit_point [ 50, STREET_POINT, 75 265 -0.5 ] +store_suit_point [ 51, FRONT_DOOR_POINT, 64 268 0, 10 ] +store_suit_point [ 52, STREET_POINT, 85 330 -0.5 ] +store_suit_point [ 53, STREET_POINT, 75 330 -0.5 ] +store_suit_point [ 54, STREET_POINT, 85 337 -0.5 ] +store_suit_point [ 55, STREET_POINT, 85 367 -0.5 ] +store_suit_point [ 56, STREET_POINT, 85 380 -0.5 ] +store_suit_point [ 57, STREET_POINT, 75 380 -0.5 ] +store_suit_point [ 58, STREET_POINT, 75 367 -0.5 ] +store_suit_point [ 59, STREET_POINT, 75 337 -0.5 ] +store_suit_point [ 60, FRONT_DOOR_POINT, 64 337 0, 36 ] +store_suit_point [ 61, FRONT_DOOR_POINT, 96 367 0, 12 ] +store_suit_point [ 62, STREET_POINT, 85 400 -0.5 ] +store_suit_point [ 63, STREET_POINT, 75 400 -0.5 ] +store_suit_point [ 64, STREET_POINT, 85 425 -0.5 ] +store_suit_point [ 65, STREET_POINT, 60 425 -0.5 ] +store_suit_point [ 66, STREET_POINT, 60 415 -0.5 ] +store_suit_point [ 67, STREET_POINT, 75 415 -0.5 ] +store_suit_point [ 68, FRONT_DOOR_POINT, 80 436 0, 13 ] +store_suit_point [ 69, STREET_POINT, 35 425 -0.5 ] +store_suit_point [ 70, STREET_POINT, 35 440 -0.5 ] +store_suit_point [ 71, STREET_POINT, 25 440 -0.5 ] +store_suit_point [ 72, STREET_POINT, 25 415 -0.5 ] +store_suit_point [ 73, FRONT_DOOR_POINT, 37 404 0, 38 ] +store_suit_point [ 74, STREET_POINT, 35 460 -0.5 ] +store_suit_point [ 75, STREET_POINT, 25 460 -0.5 ] +store_suit_point [ 76, STREET_POINT, 35 475 -0.5 ] +store_suit_point [ 77, STREET_POINT, 35 495 -0.5 ] +store_suit_point [ 78, STREET_POINT, 25 495 -0.5 ] +store_suit_point [ 79, STREET_POINT, 25 475 -0.5 ] +store_suit_point [ 80, FRONT_DOOR_POINT, 14 473 0, 16 ] +store_suit_point [ 81, FRONT_DOOR_POINT, 46 478 0, 34 ] +store_suit_point [ 82, STREET_POINT, 35 515 -0.5 ] +store_suit_point [ 83, STREET_POINT, 25 515 -0.5 ] +store_suit_point [ 84, STREET_POINT, 35 531 -0.5 ] +store_suit_point [ 86, STREET_POINT, 10 530 -0.5 ] +store_suit_point [ 87, STREET_POINT, 25 530 -0.5 ] +store_suit_point [ 90, STREET_POINT, -35 565 -0.5 ] +store_suit_point [ 91, STREET_POINT, -35 515 -0.5 ] +store_suit_point [ 92, STREET_POINT, -25 515 -0.5 ] +store_suit_point [ 93, STREET_POINT, -25 530 -0.5 ] +store_suit_point [ 95, STREET_POINT, -35 498 -0.5 ] +store_suit_point [ 96, STREET_POINT, -35 485 -0.5 ] +store_suit_point [ 97, STREET_POINT, -25 485 -0.5 ] +store_suit_point [ 98, STREET_POINT, -25 498 -0.5 ] +store_suit_point [ 99, FRONT_DOOR_POINT, -46 498 0, 37 ] +store_suit_point [ 100, STREET_POINT, -35 467 -0.5 ] +store_suit_point [ 101, STREET_POINT, -25 467 -0.5 ] +store_suit_point [ 102, STREET_POINT, -35 445 -0.5 ] +store_suit_point [ 103, STREET_POINT, -25 445 -0.5 ] +store_suit_point [ 104, FRONT_DOOR_POINT, -14 467 0, 19 ] +store_suit_point [ 105, STREET_POINT, -35 434 -0.5 ] +store_suit_point [ 106, STREET_POINT, -35 422 -0.5 ] +store_suit_point [ 107, STREET_POINT, -35 405 -0.5 ] +store_suit_point [ 108, STREET_POINT, -25 405 -0.5 ] +store_suit_point [ 109, STREET_POINT, -25 422 -0.5 ] +store_suit_point [ 110, STREET_POINT, -25 434 -0.5 ] +store_suit_point [ 111, FRONT_DOOR_POINT, -46 434 0, 22 ] +store_suit_point [ 112, FRONT_DOOR_POINT, -14 422 0, 20 ] +store_suit_point [ 113, STREET_POINT, -35 390 -0.5 ] +store_suit_point [ 114, STREET_POINT, -50 390 -0.5 ] +store_suit_point [ 115, STREET_POINT, -50 380 -0.5 ] +store_suit_point [ 116, STREET_POINT, -25 380 -0.5 ] +store_suit_point [ 117, FRONT_DOOR_POINT, -30 369 0, 23 ] +store_suit_point [ 118, STREET_POINT, -73 390 -0.5 ] +store_suit_point [ 119, STREET_POINT, -85 390 -0.5 ] +store_suit_point [ 120, STREET_POINT, -85 365 -0.5 ] +store_suit_point [ 121, STREET_POINT, -75 365 -0.5 ] +store_suit_point [ 122, STREET_POINT, -75 380 -0.5 ] +store_suit_point [ 123, FRONT_DOOR_POINT, -73 401 0, 24 ] +store_suit_point [ 124, STREET_POINT, -85 335 -0.5 ] +store_suit_point [ 125, STREET_POINT, -75 335 -0.5 ] +store_suit_point [ 126, STREET_POINT, -85 298 -0.5 ] +store_suit_point [ 127, STREET_POINT, -85 295 -0.5 ] +store_suit_point [ 128, STREET_POINT, -75 295 -0.5 ] +store_suit_point [ 129, STREET_POINT, -75 298 -0.5 ] +store_suit_point [ 130, FRONT_DOOR_POINT, -96 298 0, 35 ] +store_suit_point [ 131, STREET_POINT, -85 270 -0.5 ] +store_suit_point [ 132, STREET_POINT, -75 270 -0.5 ] +store_suit_point [ 133, STREET_POINT, -85 245 -0.5 ] +store_suit_point [ 134, STREET_POINT, -60 245 -0.5 ] +store_suit_point [ 135, STREET_POINT, -60 255 -0.5 ] +store_suit_point [ 136, STREET_POINT, -75 255 -0.5 ] +store_suit_point [ 137, FRONT_DOOR_POINT, -77 234 0, 27 ] +store_suit_point [ 138, STREET_POINT, -40 245 -0.5 ] +store_suit_point [ 139, STREET_POINT, -40 255 -0.5 ] +store_suit_point [ 140, STREET_POINT, -32 245 -0.5 ] +store_suit_point [ 143, STREET_POINT, -32 255 -0.5 ] +store_suit_point [ 144, FRONT_DOOR_POINT, -32 266 0, 28 ] +store_suit_point [ 145, STREET_POINT, 0 245 -0.5 ] +store_suit_point [ 146, STREET_POINT, 0 255 -0.5 ] +store_suit_point [ 147, STREET_POINT, 15 245 -0.5 ] +store_suit_point [ 148, STREET_POINT, 15 230 -0.5 ] +store_suit_point [ 149, STREET_POINT, 25 230 -0.5 ] +store_suit_point [ 150, STREET_POINT, 25 255 -0.5 ] +store_suit_point [ 151, STREET_POINT, 12 255 -0.5 ] +store_suit_point [ 152, FRONT_DOOR_POINT, 12 266 0, 29 ] +store_suit_point [ 153, STREET_POINT, 15 209 -0.5 ] +store_suit_point [ 154, STREET_POINT, 15 195 -0.5 ] +store_suit_point [ 155, STREET_POINT, 40 195 -0.5 ] +store_suit_point [ 156, STREET_POINT, 40 205 -0.5 ] +store_suit_point [ 157, STREET_POINT, 25 205 -0.5 ] +store_suit_point [ 158, FRONT_DOOR_POINT, 4 209 0, 30 ] +store_suit_point [ 159, STREET_POINT, 58 195 -0.5 ] +store_suit_point [ 160, STREET_POINT, 58 205 -0.5 ] +store_suit_point [ 161, FRONT_DOOR_POINT, 58 215 0, 31 ] +store_suit_point [ 162, SIDE_DOOR_POINT, 45 220 0, 31 ] +store_suit_point [ 163, SIDE_DOOR_POINT, 22 180 0, 30 ] +store_suit_point [ 164, SIDE_DOOR_POINT, 40 248 0, 29 ] +store_suit_point [ 165, SIDE_DOOR_POINT, -18 270 0, 28 ] +store_suit_point [ 166, SIDE_DOOR_POINT, -47 230 0, 27 ] +store_suit_point [ 167, SIDE_DOOR_POINT, -100 272 0, 35 ] +store_suit_point [ 168, SIDE_DOOR_POINT, -60 344 0, 23 ] +store_suit_point [ 169, SIDE_DOOR_POINT, -100 375 0, 24 ] +store_suit_point [ 170, SIDE_DOOR_POINT, -50 415 0, 22 ] +store_suit_point [ 171, SIDE_DOOR_POINT, -10 442 0, 20 ] +store_suit_point [ 172, SIDE_DOOR_POINT, -50 452 0, 37 ] +store_suit_point [ 174, SIDE_DOOR_POINT, 50 532 0, 17 ] +store_suit_point [ 175, SIDE_DOOR_POINT, 50 500 0, 34 ] +store_suit_point [ 176, SIDE_DOOR_POINT, 10 458 0, 16 ] +store_suit_point [ 177, SIDE_DOOR_POINT, 10 422 0, 38 ] +store_suit_point [ 178, SIDE_DOOR_POINT, 100 423 0, 13 ] +store_suit_point [ 179, SIDE_DOOR_POINT, 100 405 0, 12 ] +store_suit_point [ 180, SIDE_DOOR_POINT, 60 395 0, 36 ] +store_suit_point [ 181, SIDE_DOOR_POINT, 60 297 0, 10 ] +store_suit_point [ 182, SIDE_DOOR_POINT, 90 250 0, 33 ] +store_suit_point [ 183, SIDE_DOOR_POINT, 200 290 0, 9 ] +store_suit_point [ 184, SIDE_DOOR_POINT, 200 250 0, 7 ] +store_suit_point [ 185, SIDE_DOOR_POINT, 250 295 0, 32 ] +store_suit_point [ 186, SIDE_DOOR_POINT, 210 298 0, 5 ] +store_suit_point [ 187, SIDE_DOOR_POINT, 250 307 0, 4 ] +store_suit_point [ 188, SIDE_DOOR_POINT, 202 370 0, 3 ] +store_suit_point [ 189, SIDE_DOOR_POINT, 155 330 0, 2 ] +store_suit_point [ 190, SIDE_DOOR_POINT, 142 330 0, 1 ] +store_suit_point [ 191, STREET_POINT, -10 590 -0.5 ] +store_suit_point [ 192, STREET_POINT, -35 590 -0.5 ] +store_suit_point [ 193, FRONT_DOOR_POINT, -18 601 0, 18 ] +store_suit_point [ 196, STREET_POINT, 35 565 -0.5 ] +store_suit_point [ 197, SIDE_DOOR_POINT, -49 595 0, 18 ] +store_suit_point [ 198, STREET_POINT, 35 590 -0.5 ] +store_suit_point [ 199, FRONT_DOOR_POINT, 31 600 0, 17 ] +group "minniesMelodyLand" [ + visgroup "4201" [ + vis [ "4201" "4202" "4203" "4204" "4205" ] + battle_cell [ 20 20 140 385 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 120 400 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + prop "linktunnel_br_3201_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 140 400 0 ] + nhpr [ -0 0 -0 ] + sign [ + code [ "tunnel_sign_blue" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.91 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + pos [ 0 0 1.61 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.82 ] + scale [ 1.5 1 1.5 ] + width [ 31.7299 ] + height [ 31.7299 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 400 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.670588 0.396078 0.992157 1 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 120 385 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 120 370 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 20.0199 -3.77997 -3.05176e-005 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 385 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -0.829983 -7.90001 -8.39233e-005 ] + nhpr [ -180 0 -0 ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 148.711 395.715 -0.500023 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "4202" [ + vis [ "4201" "4202" "4203" "4204" "4205" ] + suit_edge [ 3 2 ] + suit_edge [ 2 4 ] + suit_edge [ 4 2 ] + suit_edge [ 2 5 ] + suit_edge [ 5 6 ] + suit_edge [ 189 6 ] + suit_edge [ 6 189 ] + suit_edge [ 189 3 ] + suit_edge [ 3 189 ] + suit_edge [ 190 5 ] + suit_edge [ 5 190 ] + battle_cell [ 20 20 140 350 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 160 330 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random20_DNARoot" [ + pos [ 135 330 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 14.48 -3.59 -0.11 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 120 330 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 160 330 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 10 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 150 330 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + landmark_building "tb1:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "The Schmaltzy Waltz School of Dance" ] + pos [ 120 345 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.79 1 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 19.5799 -35.83 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.1 0 -0.3 ] + scale [ 1.1 1 1.1 ] + kern [ 0.063593 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.14 ] + scale [ 1 1 0.7 ] + kern [ 0.042745 ] + width [ 27.0373 ] + height [ 27.0373 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 133.135 334.03 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "4203" [ + vis [ "4201" "4202" "4203" "4204" "4205" "4206" ] + suit_edge [ 6 7 ] + suit_edge [ 10 3 ] + suit_edge [ 7 11 ] + suit_edge [ 11 7 ] + suit_edge [ 10 11 ] + suit_edge [ 11 10 ] + suit_edge [ 7 12 ] + suit_edge [ 12 7 ] + suit_edge [ 10 12 ] + suit_edge [ 12 10 ] + suit_edge [ 7 13 ] + suit_edge [ 14 10 ] + suit_edge [ 188 14 ] + suit_edge [ 14 188 ] + suit_edge [ 188 13 ] + suit_edge [ 13 188 ] + battle_cell [ 20 20 185 350 -0.5 ] + group "streets" [ + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 160 330 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 200 330 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 210 330 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 370 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 195 370 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 13 -3 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 170 330 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + landmark_building "tb3:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "I Can Handel It!" ] + pos [ 170 370 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.76 0 -1.3 ] + scale [ 0.9 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 1.7 0 1.39 ] + scale [ 1.4 1 1.2 ] + width [ 13.1662 ] + height [ 13.1662 ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 1.88 0 0.21 ] + scale [ 1.4 1 1.1 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 1.78 0 -0.58 ] + scale [ 0.8 1 0.8 ] + kern [ 0.050657 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 1.92 0 -1.32 ] + scale [ 0.7 1 0.8 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb2:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Timbre! Equipment for the Singing Lumberjack" ] + pos [ 185 330 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.870588 0.8 0.466667 1 ] + ] + sign [ + code [ "MM_sign3" ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.64 ] + scale [ 1.4 1 1.3 ] + kern [ 0.110058 ] + width [ 24.3469 ] + height [ 24.3469 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.15 ] + scale [ 0.4 1 0.7 ] + width [ 35.7347 ] + height [ 35.7347 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 204.705 333.254 -8.39233e-005 ] + nhpr [ -135 0 0 ] + ] + ] + visgroup "4204" [ + vis [ "4201" "4202" "4203" "4204" "4205" "4206" "4207" "4223" ] + suit_edge [ 13 15 ] + suit_edge [ 15 16 ] + suit_edge [ 17 18 ] + suit_edge [ 18 14 ] + suit_edge [ 18 19 ] + suit_edge [ 19 18 ] + suit_edge [ 15 19 ] + suit_edge [ 19 15 ] + battle_cell [ 20 20 230 350 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 210 370 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random20_DNARoot" [ + pos [ 225 370 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 8.49 -1.29 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 240 370 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 210 370 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.576471 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 5.7 -34.59 0 ] + nhpr [ -135 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 6 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 250 370 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 5.83 -7.97 0 ] + nhpr [ -45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 250 340 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 8.23 -4.42 0 ] + nhpr [ 105 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 4.38 -1.36 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb4:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Tina's Concertina Concerts" ] + pos [ 250 359.5 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.415686 0.854902 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 0.21 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.411765 0.607843 1 ] + pos [ 0 0 -0.64 ] + scale [ 0.8 1 0.9 ] + kern [ 0.051936 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 226.4 365.735 2.28882e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "4205" [ + vis [ "4201" "4202" "4203" "4204" "4205" "4206" "4207" "4208" "4223" "4224" "4236" ] + suit_edge [ 16 20 ] + suit_edge [ 20 21 ] + suit_edge [ 22 23 ] + suit_edge [ 23 17 ] + suit_edge [ 20 24 ] + suit_edge [ 24 20 ] + suit_edge [ 23 24 ] + suit_edge [ 24 23 ] + suit_edge [ 185 22 ] + suit_edge [ 22 185 ] + suit_edge [ 185 21 ] + suit_edge [ 21 185 ] + suit_edge [ 186 21 ] + suit_edge [ 21 186 ] + suit_edge [ 186 22 ] + suit_edge [ 22 186 ] + suit_edge [ 187 23 ] + suit_edge [ 23 187 ] + suit_edge [ 187 20 ] + suit_edge [ 20 187 ] + battle_cell [ 20 20 230 310 -0.5 ] + group "streets" [ + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 210 330 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random20_DNARoot" [ + pos [ 210 320 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 250 300 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 250 315 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 210 290 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 250 330 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Zither Here Nor There" ] + pos [ 210 305 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.12 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.82 ] + scale [ 1 1 0.9 ] + kern [ 0.027185 ] + width [ 30.1495 ] + height [ 30.1495 ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.04 ] + scale [ 1 1 0.9 ] + width [ 26.5154 ] + height [ 26.5154 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4206" [ + vis [ "4203" "4204" "4205" "4206" "4207" "4208" "4209" "4223" "4224" "4225" "4236" ] + suit_edge [ 21 25 ] + suit_edge [ 25 26 ] + suit_edge [ 27 28 ] + suit_edge [ 28 22 ] + suit_edge [ 28 29 ] + suit_edge [ 29 28 ] + suit_edge [ 25 29 ] + suit_edge [ 29 25 ] + battle_cell [ 20 20 230 270 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 250 290 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb32:random20_DNARoot" [ + pos [ 250 250 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.97 0.44 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5.45 -7.35 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 2.39 -0.46 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 225 250 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 12.32 -5.64 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 9.13 -34.97 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.905882 0.905882 0.905882 1 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 250 270 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 235 250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 250 290 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 5 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb32:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Etude Brute? Theatre Company" ] + pos [ 250 285 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.08 ] + scale [ 2 1 2 ] + kern [ 0.148145 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -1.44 ] + scale [ 0.8 1 0.8 ] + kern [ 0.11078 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 229.02 254.549 0 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "4207" [ + vis [ "4204" "4205" "4206" "4207" "4208" "4209" "4210" "4211" "4224" "4223" "4236" "4225" "4226" "4227" ] + suit_edge [ 26 30 ] + suit_edge [ 31 27 ] + suit_edge [ 183 30 ] + suit_edge [ 30 183 ] + suit_edge [ 183 31 ] + suit_edge [ 31 183 ] + suit_edge [ 184 31 ] + suit_edge [ 31 184 ] + suit_edge [ 184 30 ] + suit_edge [ 30 184 ] + battle_cell [ 20 20 200 270 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 210 290 7.62939e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random20_DNARoot" [ + pos [ 190 290 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 210 250 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 194.31 255.756 7.62939e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "4208" [ + vis [ "4205" "4206" "4207" "4208" "4209" "4210" "4211" "4225" "4224" "4236" "4223" "4226" "4227" ] + suit_edge [ 43 47 ] + suit_edge [ 47 48 ] + suit_edge [ 49 50 ] + suit_edge [ 50 44 ] + suit_edge [ 50 51 ] + suit_edge [ 51 50 ] + suit_edge [ 47 51 ] + suit_edge [ 51 47 ] + suit_edge [ 182 44 ] + suit_edge [ 44 182 ] + suit_edge [ 182 43 ] + suit_edge [ 43 182 ] + battle_cell [ 20 20 80 270 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 100 250 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ 60 275 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 12 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.22 -1.2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 80 250 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.35 -7.45 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -14 -34 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 60 250 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb10:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Hurry Up, Slow Polka! School of Driving" ] + pos [ 60 260 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + scale [ 1 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.72 ] + scale [ 0.7 1 1 ] + kern [ 0.045652 ] + width [ 25.3133 ] + height [ 25.3133 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.09 ] + scale [ 0.8 1 0.7 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ 100 250 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.945098 0.572549 0.870588 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 20 -1 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4209" [ + vis [ "4207" "4208" "4209" "4210" "4211" "4212" "4226" "4227" "4225" "4236" "4224" "4223" "4206" "4213" "4229" "4228" "4214" ] + suit_edge [ 48 52 ] + suit_edge [ 53 49 ] + suit_edge [ 181 49 ] + suit_edge [ 49 181 ] + suit_edge [ 181 48 ] + suit_edge [ 48 181 ] + battle_cell [ 20 20 80 310 -0.5 ] + group "streets" [ + ] + group "buildings" [ + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 60 330 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 60 290 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 60 305 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 63.1061 310.154 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4210" [ + vis [ "4208" "4209" "4210" "4211" "4212" "4213" "4214" "4228" "4229" "4226" "4227" "4236" "4225" ] + suit_edge [ 62 64 ] + suit_edge [ 64 65 ] + suit_edge [ 66 67 ] + suit_edge [ 67 63 ] + suit_edge [ 64 68 ] + suit_edge [ 68 64 ] + suit_edge [ 67 68 ] + suit_edge [ 68 67 ] + suit_edge [ 178 64 ] + suit_edge [ 64 178 ] + suit_edge [ 178 67 ] + suit_edge [ 67 178 ] + suit_edge [ 179 62 ] + suit_edge [ 62 179 ] + suit_edge [ 179 63 ] + suit_edge [ 63 179 ] + battle_cell [ 20 20 80 420 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 60 440 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ 100 440 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 50 440 0 ] + nhpr [ -0 0 -0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 16 -2 0 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb13:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "B-Sharp Fine Menswear" ] + pos [ 70 440 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.62 0 0.39 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 2.01 0 0.35 ] + scale [ 1.1 1 1.1 ] + kern [ 0.021261 ] + flags [ "b" ] + text [ + letters [ "B" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 1.94 0 -0.76 ] + scale [ 0.8 1 0.8 ] + kern [ 0.112781 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 100 430 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 100 415 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 85 440 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 8.8 -8.39 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 63.9911 404.87 7.62939e-006 ] + nhpr [ 120 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_fightIdle" ] + pos [ 95.3932 408.499 -7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4211" [ + vis [ "4208" "4209" "4210" "4211" "4212" "4213" "4214" "4226" "4227" "4228" "4229" "4225" "4236" "4224" "4238" "4239" ] + suit_edge [ 65 69 ] + suit_edge [ 69 70 ] + suit_edge [ 71 72 ] + suit_edge [ 72 66 ] + suit_edge [ 69 73 ] + suit_edge [ 73 69 ] + suit_edge [ 72 73 ] + suit_edge [ 73 72 ] + battle_cell [ 20 20 40 420 -0.5 ] + group "streets" [ + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 50 400 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 50 400 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ 10 430 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 7.04 -34.93 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 10 400 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 8 -6 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 29.84 400.31 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 18.77 -2.72 0 ] + nhpr [ -45 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 11.03 -1.05 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 60 400 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 10 415 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb38:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Canticle Your Fancy Gift Shop" ] + pos [ 45 400 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.13 0 0.76 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.9 ] + width [ 28.9143 ] + height [ 28.9143 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.08 0 -0.06 ] + scale [ 1 1 0.9 ] + kern [ 0.061638 ] + width [ 14.1842 ] + height [ 14.1842 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4212" [ + vis [ "4208" "4209" "4210" "4211" "4212" "4213" "4214" "4225" "4236" "4224" "4226" "4227" "4228" "4229" "4239" "4238" ] + suit_edge [ 70 74 ] + suit_edge [ 75 71 ] + suit_edge [ 176 75 ] + suit_edge [ 75 176 ] + suit_edge [ 176 74 ] + suit_edge [ 74 176 ] + suit_edge [ 177 72 ] + suit_edge [ 72 177 ] + suit_edge [ 177 69 ] + suit_edge [ 69 177 ] + battle_cell [ 20 20 30 450 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 50 440 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ 50 450 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 10 450 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 50 465 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 0.97 0.47 0.67 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.7 0.7 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 14.2986 449.168 1.14441e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4213" [ + vis [ "4208" "4209" "4210" "4211" "4212" "4213" "4214" "4215" "4227" "4228" "4229" "4226" "4236" "4239" "4238" "4230" ] + suit_edge [ 82 84 ] + suit_edge [ 86 87 ] + suit_edge [ 87 83 ] + suit_edge [ 174 84 ] + suit_edge [ 84 174 ] + suit_edge [ 174 87 ] + suit_edge [ 87 174 ] + suit_edge [ 84 196 ] + battle_cell [ 20 20 30 535 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb34:random20_DNARoot" [ + pos [ 50 525 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 3 -6 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 50 555 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 50 540 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.96 0.79 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 19.37 -34.13 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 10 555 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 50 555 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 10 555 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 0 555 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 50 575 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 10 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb39:toon_landmark_hqMM_DNARoot" [ + code [ "toon_landmark_hqMM" ] + building_type [ "hq" ] + title [ "" ] + pos [ 0 555 0 ] + nhpr [ -180 0 -0 ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -16.9999 6.9999 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 17.0001 6.99994 0 ] + nhpr [ -180 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 45.256 544.416 -1.52588e-005 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "4214" [ + vis [ "4211" "4212" "4213" "4214" "4215" "4216" "4228" "4229" "4227" "4226" "4225" "4210" "4209" "4208" "4236" "4230" "4231" "4217" "4239" "4238" ] + suit_edge [ 90 91 ] + suit_edge [ 92 93 ] + suit_edge [ 93 86 ] + battle_cell [ 20 20 -30 535 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -10 515 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ 10 515 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 5 -1 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 15 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ -50 515 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 5.68 -8.02 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 5.09 -35.23 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -50 535 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.26 -4.64 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ -50 555 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 18 -7.99998 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -10 515 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -50 565 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + visgroup "4215" [ + vis [ "4213" "4214" "4215" "4216" "4217" "4230" "4231" "4218" "4232" "4219" "4237" "4239" "4238" ] + suit_edge [ 91 95 ] + suit_edge [ 95 96 ] + suit_edge [ 97 98 ] + suit_edge [ 98 92 ] + suit_edge [ 95 99 ] + suit_edge [ 99 95 ] + suit_edge [ 98 99 ] + suit_edge [ 99 98 ] + battle_cell [ 20 20 -30 500 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -10 485 9.15527e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -10 505 9.15527e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random20_DNARoot" [ + pos [ -50 440 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.588235 0.486275 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -10 515 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -10 505 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ -50 500 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb37:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Harp Tarps" ] + pos [ -49.76 483.87 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.14 ] + scale [ 2 1 2 ] + width [ 64.813 ] + height [ 64.813 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.501961 1 ] + pos [ -0.39 0 -1.69 ] + scale [ 1.4 1 1 ] + kern [ 0.201422 ] + width [ 31.41 ] + height [ 31.41 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ -44.2048 509.213 9.15527e-005 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "4216" [ + vis [ "4214" "4215" "4216" "4217" "4218" "4231" "4230" "4232" "4219" "4237" "4238" "4239" "4213" ] + suit_edge [ 107 113 ] + suit_edge [ 113 114 ] + suit_edge [ 115 116 ] + suit_edge [ 116 108 ] + suit_edge [ 116 117 ] + suit_edge [ 117 116 ] + suit_edge [ 113 117 ] + suit_edge [ 117 113 ] + battle_cell [ 20 20 -35 385 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -10 405 7.62939e-006 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -40 365 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.956863 0.956863 0.466667 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.956863 0.956863 0.466667 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 3.94 -7.11 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -10 375 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -10 405 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 11.43 -2.01 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -10 390 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -10 365 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + ] + landmark_building "tb23:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Haydn Go Seek Playground Supplies" ] + pos [ -20 365 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.52 0 0.32 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 2.03 0 0.7 ] + scale [ 0.9 1 1 ] + width [ 18.7543 ] + height [ 18.7543 ] + flags [ "b" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "k" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 2.02 0 -0.76 ] + scale [ 0.8 1 0.8 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -14.7991 401.309 7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "4217" [ + vis [ "4214" "4215" "4216" "4217" "4218" "4219" "4231" "4230" "4232" "4233" "4234" "4235" "4237" "4238" "4239" "4213" ] + suit_edge [ 114 118 ] + suit_edge [ 118 119 ] + suit_edge [ 119 120 ] + suit_edge [ 121 122 ] + suit_edge [ 122 115 ] + suit_edge [ 118 123 ] + suit_edge [ 123 118 ] + suit_edge [ 122 123 ] + suit_edge [ 123 122 ] + suit_edge [ 169 122 ] + suit_edge [ 122 169 ] + suit_edge [ 169 119 ] + suit_edge [ 119 169 ] + battle_cell [ 20 20 -75 385 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -50 405 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -100 365 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ -100 395 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -100 405 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 3.57 -0.69 -0.02 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 4.61 -8.9 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 7.68 -1.29 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -60 405 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 14.21 -5.83 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.917647 0.917647 0.917647 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -100 380 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 20.62 -43.26 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 4.53 -1.34 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -50 365 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 14.68 -3.48 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -100 370 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ -3 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb24:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "White Noise for Girls and Boys" ] + pos [ -85 405 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.59 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 1.02 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 0.8 ] + kern [ 0.056351 ] + width [ 27.3038 ] + height [ 27.3038 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.41 ] + nhpr [ -0 0 -1 ] + scale [ 0.9 1 0.6 ] + width [ 26.3776 ] + height [ 26.3776 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.18 ] + scale [ 0.9 1 0.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ -94.1794 372.661 -4.57764e-005 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "4218" [ + vis [ "4216" "4217" "4218" "4219" "4220" "4221" "4222" "4235" "4234" "4233" "4232" "4231" "4230" "4215" "4237" "4214" "4239" "4238" "4213" ] + suit_edge [ 120 124 ] + suit_edge [ 125 121 ] + suit_edge [ 168 125 ] + suit_edge [ 125 168 ] + suit_edge [ 168 124 ] + suit_edge [ 124 168 ] + battle_cell [ 20 20 -80 345 -0.5 ] + group "streets" [ + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -100 365 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_keyboard_10x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ -100 345 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ -60 365 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -100 335 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -60 340 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10 -5 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -100 350 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ -60 350 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4219" [ + vis [ "4217" "4218" "4219" "4220" "4221" "4222" "4232" "4233" "4234" "4235" "4237" "4240" ] + suit_edge [ 131 133 ] + suit_edge [ 133 134 ] + suit_edge [ 135 136 ] + suit_edge [ 136 132 ] + suit_edge [ 136 137 ] + suit_edge [ 137 136 ] + suit_edge [ 133 137 ] + suit_edge [ 137 133 ] + battle_cell [ 20 20 -80 250 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -60 230 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -120 240 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -140 239.999 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -160 239.999 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb27:random20_DNARoot" [ + pos [ -90 230 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb27:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Vocal Chords Braided" ] + pos [ -65 230 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.21 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ 0.2 0 0.26 ] + nhpr [ -0 0 -1 ] + width [ 29.4907 ] + height [ 29.4907 ] + flags [ "b" ] + text [ + letters [ "V" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -100 260 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -100 230 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_MM_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_MM_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -120 240 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -160 270 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 2.97901 -1.27499 0 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -140 240.001 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -160 240 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -160 260 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -135 260 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -120 260 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -100 240 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.59 0.49 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_MM_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -96.6965 262.529 3.8147e-005 ] + nhpr [ 75 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_fightIdle" ] + pos [ -64.0627 264.843 0 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "4220" [ + vis [ "4219" "4220" "4221" "4222" "4232" "4234" "4235" "4237" "4240" ] + suit_edge [ 145 147 ] + suit_edge [ 147 148 ] + suit_edge [ 149 150 ] + suit_edge [ 150 151 ] + suit_edge [ 151 146 ] + suit_edge [ 151 152 ] + suit_edge [ 152 151 ] + suit_edge [ 147 152 ] + suit_edge [ 152 147 ] + suit_edge [ 164 150 ] + suit_edge [ 150 164 ] + suit_edge [ 164 147 ] + suit_edge [ 147 164 ] + battle_cell [ 20 20 20 250 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 0 270 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ 40 270 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 25 270 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3 -3 0 ] + nhpr [ 105 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ -18.8 -43 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 11.07 -1.29 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb29:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Double Reed Bookstore" ] + pos [ 0 270 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -2.37 0 -1.05 ] + scale [ 1.3 1 1.2 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.47451 0 0.47451 1 ] + pos [ 1.95 0 0.75 ] + width [ 17.3455 ] + height [ 17.3455 ] + flags [ "b" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.47451 0 0.47451 1 ] + pos [ 1.95 0 -1 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 40 255 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ -2 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "4221" [ + vis [ "4219" "4220" "4221" "4222" "4232" "4234" "4235" "4237" "4240" ] + suit_edge [ 148 153 ] + suit_edge [ 153 154 ] + suit_edge [ 154 155 ] + suit_edge [ 156 157 ] + suit_edge [ 157 149 ] + suit_edge [ 153 158 ] + suit_edge [ 158 153 ] + suit_edge [ 157 158 ] + suit_edge [ 158 157 ] + suit_edge [ 163 154 ] + suit_edge [ 154 163 ] + suit_edge [ 157 163 ] + suit_edge [ 163 157 ] + battle_cell [ 20 20 20 210 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 0 230 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 40 180 -3.8147e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ 15 180 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.06 -9.05 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 0 180 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 20.5 -4.5 0 ] + nhpr [ 75 0 -0 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 40 240 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 4.18002 -34.22 7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 0 215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 0.6 -4.6 0 ] + nhpr [ 105 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -0.85 -34.17 0 ] + nhpr [ -105 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 30 180 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 40 180 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + ] + landmark_building "tb30:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Lousy Lyrics" ] + pos [ 0 200 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.41 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 1 1 ] + pos [ 0 0 -0.3 ] + scale [ 1.4 1 1 ] + kern [ 0.103517 ] + width [ 27.0849 ] + height [ 27.0849 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.2 ] + scale [ 0.9 1 0.6 ] + width [ 31.41 ] + height [ 31.41 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 17.8695 183.007 7.62939e-006 ] + nhpr [ 180 0 0 ] + ] + ] + visgroup "4222" [ + vis [ "4219" "4220" "4221" "4222" "4235" "4234" "4232" "4237" ] + suit_edge [ 155 159 ] + suit_edge [ 159 160 ] + suit_edge [ 160 156 ] + suit_edge [ 160 161 ] + suit_edge [ 161 160 ] + suit_edge [ 162 156 ] + suit_edge [ 156 162 ] + suit_edge [ 162 155 ] + suit_edge [ 155 162 ] + battle_cell [ 20 20 55 200 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 40 220 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 40 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 40 175 -3.05176e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + group "buildings" [ + flat_building "tb31:random20_DNARoot" [ + pos [ 80 220 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 6.88 -12.35 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.917647 0.917647 0.917647 1 ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 2.49 -0.8 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 65 220 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 205 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 40 165 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 40 175 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 9.3 -4.11 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb31:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Toon Tunes" ] + pos [ 50 220 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.698039 0.784314 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.17 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + scale [ 0.9 1 1 ] + width [ 35.7322 ] + height [ 35.7322 ] + flags [ "b" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 40 220 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 175 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 190 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + prop "linktunnel_mm_4000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 80 165 0 ] + nhpr [ 180 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + pos [ 0 0 -1.1 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -1.23 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.62 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -2.01 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 75.9553 191.698 -3.8147e-006 ] + nhpr [ -90 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 51.5466 169.525 -0.500061 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "4223" [ + vis [ "4223" "4207" "4206" "4205" "4224" "4236" "4225" "4208" "4209" "4226" "4204" ] + suit_edge [ 30 32 ] + suit_edge [ 32 33 ] + suit_edge [ 33 34 ] + suit_edge [ 35 36 ] + suit_edge [ 36 37 ] + suit_edge [ 37 31 ] + suit_edge [ 37 38 ] + suit_edge [ 38 37 ] + suit_edge [ 32 38 ] + suit_edge [ 38 32 ] + suit_edge [ 33 39 ] + suit_edge [ 39 33 ] + suit_edge [ 36 39 ] + suit_edge [ 39 36 ] + battle_cell [ 20 20 175 270 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 190 290 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 175 250 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 175 290 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.61 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5 -2 0 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb9:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "On Ballet! Climbing Supplies" ] + pos [ 155 290 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 0.14 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.74 ] + nhpr [ -0 0 -2 ] + scale [ 1.2 1 0.9 ] + kern [ 0.066749 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "b" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.15 0 0 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 0.7 ] + width [ 34.3395 ] + height [ 34.3395 ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + landmark_building "tb7:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Doppler's Sound Effects Studio" ] + pos [ 190 250 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.43 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.24 ] + scale [ 2 1 1 ] + kern [ 0.092964 ] + width [ 26.6631 ] + height [ 26.6631 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.05 ] + scale [ 1 1 0.6 ] + width [ 28.5714 ] + height [ 28.5714 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + ] + visgroup "4224" [ + vis [ "4224" "4236" "4208" "4209" "4225" "4223" "4207" "4206" "4205" "4226" "4227" ] + suit_edge [ 34 40 ] + suit_edge [ 41 35 ] + battle_cell [ 20 20 145 270 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 160 290 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 140 290 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ 155 250 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.25 -7.12 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 143.305 287.059 3.8147e-006 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "4225" [ + vis [ "4225" "4236" "4224" "4223" "4207" "4206" "4208" "4209" "4226" "4227" "4210" "4211" "4212" "4228" "4229" "4213" "4214" ] + battle_cell [ 20 20 120 310 -0.5 ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 100 290 -3.43323e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 140 300 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 7.96 -20.66 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ -2 -33 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 140 315 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 6 -2 7.62939e-006 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 140 330 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 115 330 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 3 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5.22 -1.7 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 23.69 -3.96 -0.07 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 100 330 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 10 -14 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 133.701 301.739 -3.43323e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4226" [ + vis [ "4226" "4209" "4208" "4236" "4224" "4225" "4227" "4210" "4211" "4228" "4212" "4223" "4229" "4213" "4214" ] + suit_edge [ 52 54 ] + suit_edge [ 54 55 ] + suit_edge [ 55 56 ] + suit_edge [ 57 58 ] + suit_edge [ 58 59 ] + suit_edge [ 59 53 ] + suit_edge [ 59 60 ] + suit_edge [ 60 59 ] + suit_edge [ 54 60 ] + suit_edge [ 60 54 ] + suit_edge [ 55 61 ] + suit_edge [ 61 55 ] + suit_edge [ 58 61 ] + suit_edge [ 61 58 ] + battle_cell [ 20 20 80 355 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 100 330 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 100 370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 100 360 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.66 -3.1 0 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 60 315 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 60 340 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 60 360 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 2 -2 0 ] + nhpr [ 105 0 -0 ] + ] + ] + landmark_building "tb12:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "C-Flat Tire Repair" ] + pos [ 100 375 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.13 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.27 0 0.64 ] + nhpr [ -0 0 -1 ] + scale [ 1.4 1 1.3 ] + width [ 22.3314 ] + height [ 22.3314 ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.16 ] + scale [ 1 1 0.7 ] + kern [ 0.116099 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + landmark_building "tb36:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Her and Hymn Wedding Planners" ] + pos [ 60 325 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 0.28 ] + scale [ 1.3 1 1.3 ] + kern [ 0.100797 ] + width [ 50 ] + height [ 50 ] + flags [ "b" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.94 ] + kern [ 0.079325 ] + width [ 52.6537 ] + height [ 52.6537 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 100 340 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 5.79 -6.75 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + visgroup "4227" [ + vis [ "4227" "4210" "4226" "4209" "4225" "4208" "4236" "4224" "4211" "4212" "4228" "4229" "4213" "4214" ] + suit_edge [ 56 62 ] + suit_edge [ 63 57 ] + suit_edge [ 180 63 ] + suit_edge [ 63 180 ] + suit_edge [ 180 62 ] + suit_edge [ 62 180 ] + battle_cell [ 20 20 80 390 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 100 380 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 100 395 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 10 -6 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 60 370 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 7.39 -7.62 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 60 390 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.56 0.8 0.65 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4228" [ + vis [ "4228" "4212" "4229" "4213" "4214" "4211" "4210" "4227" "4226" "4225" "4209" "4224" "4236" "4239" "4238" ] + suit_edge [ 74 76 ] + suit_edge [ 76 77 ] + suit_edge [ 78 79 ] + suit_edge [ 79 75 ] + suit_edge [ 79 80 ] + suit_edge [ 80 79 ] + suit_edge [ 76 80 ] + suit_edge [ 80 76 ] + suit_edge [ 76 81 ] + suit_edge [ 81 76 ] + suit_edge [ 79 81 ] + suit_edge [ 81 79 ] + battle_cell [ 20 20 30 480 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 50 460 0.000110626 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 50 490 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 10 480 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10 -5 0 ] + nhpr [ 135 0 -0 ] + ] + ] + landmark_building "tb34:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 50 491 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + landmark_building "tb16:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Four-Part Harmonicas" ] + pos [ 10 465 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.79 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.16 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.27451 0.203922 0.419608 1 ] + pos [ 0 0 0.91 ] + scale [ 1 1 0.9 ] + kern [ 0.086586 ] + width [ 32.5637 ] + height [ 32.5637 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.27451 0.203922 0.419608 1 ] + pos [ 0 0 -0.09 ] + kern [ 0.120002 ] + width [ 44.0567 ] + height [ 44.0567 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 44.8982 492.592 0.000110626 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "4229" [ + vis [ "4229" "4228" "4212" "4227" "4210" "4211" "4209" "4226" "4236" "4208" "4213" "4214" "4239" "4238" ] + suit_edge [ 77 82 ] + suit_edge [ 83 78 ] + suit_edge [ 175 82 ] + suit_edge [ 82 175 ] + suit_edge [ 175 83 ] + suit_edge [ 83 175 ] + battle_cell [ 20 20 30 505 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 50 495 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 10 495 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.219608 0.678431 1 ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 50 510 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.419608 0.419608 0.847059 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4230" [ + vis [ "4230" "4215" "4214" "4216" "4231" "4217" "4218" "4232" "4213" "4237" "4219" "4239" "4238" ] + suit_edge [ 96 100 ] + suit_edge [ 101 97 ] + suit_edge [ 100 102 ] + suit_edge [ 103 101 ] + suit_edge [ 101 104 ] + suit_edge [ 104 101 ] + suit_edge [ 100 104 ] + suit_edge [ 104 100 ] + suit_edge [ 172 102 ] + suit_edge [ 102 172 ] + suit_edge [ 172 103 ] + suit_edge [ 103 172 ] + battle_cell [ 20 20 -30 465 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -10 445 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -10 460 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5 -3 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ -10 490 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10 -4 0 ] + nhpr [ 75 0 -0 ] + ] + ] + landmark_building "tb19:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Madrigal Motor Homes" ] + pos [ -10 475 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.16 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.85 ] + width [ 32.0236 ] + height [ 32.0236 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.17 ] + scale [ 1.1 1 1 ] + kern [ 0.058148 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ -50 460 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ -50 445 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ -50 475 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + ] + ] + ] + visgroup "4231" [ + vis [ "4231" "4230" "4215" "4214" "4216" "4217" "4218" "4232" "4237" "4219" "4238" "4239" "4213" ] + suit_edge [ 102 105 ] + suit_edge [ 105 106 ] + suit_edge [ 106 107 ] + suit_edge [ 108 109 ] + suit_edge [ 109 110 ] + suit_edge [ 110 103 ] + suit_edge [ 105 111 ] + suit_edge [ 111 105 ] + suit_edge [ 110 111 ] + suit_edge [ 111 110 ] + suit_edge [ 109 112 ] + suit_edge [ 112 109 ] + suit_edge [ 106 112 ] + suit_edge [ 112 106 ] + suit_edge [ 170 107 ] + suit_edge [ 107 170 ] + suit_edge [ 170 108 ] + suit_edge [ 108 170 ] + suit_edge [ 171 103 ] + suit_edge [ 103 171 ] + suit_edge [ 171 102 ] + suit_edge [ 102 171 ] + battle_cell [ 20 20 -30 425 -0.5 ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -10 405 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -10 410 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 0 ] + ] + ] + ] + landmark_building "tb20:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Name That Toon" ] + pos [ -10 435 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.61 0 -1.19 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 1.8 0 0.66 ] + scale [ 1.1 1 1.1 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 2.02 0 -0.92 ] + scale [ 1.5 1 1.5 ] + kern [ 0.1542 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + landmark_building "tb22:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Overture Understudies" ] + pos [ -50 425 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.22 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0 0.501961 1 ] + pos [ 0.17 0 0.87 ] + scale [ 1 1 0.8 ] + kern [ 0.097213 ] + width [ 15.9271 ] + height [ 15.9271 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0 0.501961 1 ] + pos [ 0 0 -0.15 ] + scale [ 1 1 0.8 ] + kern [ 0.07466 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ -50 405 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -10 450 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + visgroup "4232" [ + vis [ "4232" "4233" "4218" "4217" "4216" "4219" "4231" "4230" "4215" "4234" "4235" "4220" "4221" "4222" "4237" "4214" "4238" "4239" "4213" ] + suit_edge [ 124 126 ] + suit_edge [ 126 127 ] + suit_edge [ 128 129 ] + suit_edge [ 129 125 ] + suit_edge [ 126 130 ] + suit_edge [ 130 126 ] + suit_edge [ 129 130 ] + suit_edge [ 130 129 ] + battle_cell [ 20 20 -80 315 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -100 335 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -100 280 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5.24 -5.57 0 ] + nhpr [ 75 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -100 320 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.968627 0.866667 0.466667 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.968627 0.576471 0.552941 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 9.16 -6.32 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -100 300 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.8 0.61 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 11.8 -8.37 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 4.84 -5.16 0 ] + nhpr [ 105 0 -0 ] + ] + ] + landmark_building "tb35:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Accordions, If You Want In, Just Bellow!" ] + pos [ -100 285 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.09 ] + scale [ 2.5 1 2.5 ] + kern [ 0.097865 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.32 ] + width [ 44.6728 ] + height [ 44.6728 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + ] + visgroup "4233" [ + vis [ "4233" "4232" "4218" "4217" "4219" "4237" ] + battle_cell [ 20 20 -35 310 -0.5 ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ -20 290 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -60 330 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ 12 -20 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 6.06 -7.77 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -20 305 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -50 290 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.698039 0.698039 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.8 0.45 0.71 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -35 290 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 16.46 -6.72 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.92 0.92 0.92 1 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -20 290 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 3 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 13 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -40 330 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -20 330 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "The Baritone Barber" ] + pos [ -20 325 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.02 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.32549 0.32549 0.65098 1 ] + pos [ 0 0 -0.82 ] + scale [ 0.9 1 1 ] + kern [ 0.07996 ] + width [ 25 ] + height [ 25 ] + flags [ "b" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -26.1291 301.694 7.62939e-006 ] + nhpr [ -135 0 0 ] + ] + ] + visgroup "4234" [ + vis [ "4234" "4235" "4219" "4232" "4220" "4221" "4222" "4237" "4218" "4217" "4240" ] + suit_edge [ 134 138 ] + suit_edge [ 139 135 ] + suit_edge [ 166 138 ] + suit_edge [ 138 166 ] + suit_edge [ 166 139 ] + suit_edge [ 139 166 ] + battle_cell [ 20 20 -50 250 -0.5 ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -60 230 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -60 270 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -55 230 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -40 230 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] + visgroup "4235" [ + vis [ "4235" "4234" "4232" "4219" "4220" "4221" "4222" "4237" "4240" ] + suit_edge [ 138 140 ] + suit_edge [ 143 139 ] + suit_edge [ 143 144 ] + suit_edge [ 144 143 ] + suit_edge [ 140 144 ] + suit_edge [ 144 140 ] + suit_edge [ 140 145 ] + suit_edge [ 146 143 ] + suit_edge [ 165 146 ] + suit_edge [ 146 165 ] + suit_edge [ 165 145 ] + suit_edge [ 145 165 ] + battle_cell [ 20 20 -20 250 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -40 230 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ -20 230 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 0 230 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -10 230 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -25 230 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.486275 0.788235 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 10.68 -7.39 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -25 270 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.8 0.45 0.71 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -10 270 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb28:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Sing Solo We Can't Hear You" ] + pos [ -40 270 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 2.73 -7.72 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -0.22 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.56 ] + kern [ 0.065857 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "b" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.23 ] + scale [ 0.8 1 0.8 ] + width [ 29.9482 ] + height [ 29.9482 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -9.90765 236.023 -7.62939e-006 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "4236" [ + vis [ "4236" "4225" "4224" "4223" "4207" "4206" "4205" "4208" "4209" "4226" "4227" "4210" "4211" "4228" "4229" "4212" "4214" "4213" "4239" "4238" ] + suit_edge [ 40 42 ] + suit_edge [ 42 43 ] + suit_edge [ 44 45 ] + suit_edge [ 45 41 ] + suit_edge [ 45 46 ] + suit_edge [ 46 45 ] + suit_edge [ 42 46 ] + suit_edge [ 46 42 ] + battle_cell [ 20 20 115 270 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 130 290 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb33:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 139 250 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ 115 250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.698039 0.756863 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.698039 0.756863 1 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 8.91 -3.12 0.11 ] + nhpr [ 105 0 -0 ] + ] + ] + ] + visgroup "4237" [ + vis [ "4237" "4219" "4234" "4235" "4232" "4233" "4218" "4217" "4216" "4220" "4221" "4222" "4231" "4215" "4230" "4214" "4240" ] + suit_edge [ 127 131 ] + suit_edge [ 132 128 ] + suit_edge [ 167 132 ] + suit_edge [ 132 167 ] + suit_edge [ 167 131 ] + suit_edge [ 131 167 ] + battle_cell [ 20 20 -80 280 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -100 295 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ -100 275 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -60 290 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 17.06 -6.22 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 0 -5 0 ] + nhpr [ 75 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -100 265 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4238" [ + vis [ "4238" "4212" "4211" "4213" "4214" "4215" "4216" "4217" "4239" "4231" "4230" "4229" "4228" ] + suit_edge [ 191 192 ] + suit_edge [ 192 90 ] + suit_edge [ 191 193 ] + suit_edge [ 193 191 ] + battle_cell [ 20 20 -30 585 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -50 565 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ -50 570 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -50 605 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + ] + ] + landmark_building "tb18:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Chopin Blocks and Other Kitchen Supplies" ] + pos [ -30 605 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.34 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.35 0 0.85 ] + nhpr [ -0 0 -2 ] + scale [ 1.1 1 1.1 ] + width [ 32.5224 ] + height [ 32.5224 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0 0.25098 1 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.8 ] + width [ 27.2494 ] + height [ 27.2494 ] + text [ + letters [ "(" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ ")" ] + ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ -50 585 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ -40.5503 602.003 -7.62939e-006 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "4239" [ + vis [ "4239" "4238" "4231" "4230" "4229" "4228" "4211" "4212" "4213" "4214" "4215" "4216" "4217" ] + suit_edge [ 192 197 ] + suit_edge [ 197 192 ] + suit_edge [ 196 198 ] + suit_edge [ 198 191 ] + suit_edge [ 198 199 ] + suit_edge [ 199 198 ] + battle_cell [ 20 20 30 585 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 10 605 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -10 565 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 50 590 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 50 605 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 40 605 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.4 0.82 1 ] + count [ 0 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 4 -3 0 ] + nhpr [ 120 0 -0 ] + ] + ] + landmark_building "tb17:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Sonata Your Fault! Discount Auto Insurance" ] + pos [ 20 605 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 0.14 ] + scale [ 1.1 1 1.1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.08 0 0.66 ] + scale [ 0.9 1 1.1 ] + width [ 25.0796 ] + height [ 25.0796 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.06 0 -0.11 ] + scale [ 0.6 1 0.7 ] + width [ 31.0395 ] + height [ 31.0395 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 10 605 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.58 0.55 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 6 -3 0 ] + nhpr [ 75 0 -0 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -4.99999 605 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.25721 -6.83124 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + visgroup "4240" [ + vis [ "4240" "4219" "4237" "4234" "4235" "4220" "4221" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -248.7 249 0 ] + nhpr [ -98 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -225.279 261.401 1.97518 ] + nhpr [ -135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -204.991 261.623 1.89815 ] + nhpr [ 135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -224.698 238.377 1.92611 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -205.722 238.179 1.92272 ] + nhpr [ 45 0 -0 ] + ] + ] + street "street_MM_pond_DNARoot" [ + code [ "street_MM_pond" ] + pos [ -215 250 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + group "props" [ + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -208.089 270.039 0 ] + nhpr [ -90 -15.9693 1.46764e-006 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -221.963 227.814 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -208.373 228.564 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -235.354 240.882 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -235.123 257.965 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -223.45 269.825 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -178.404 241.188 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -194.713 240.795 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -178.609 258.328 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -194.846 258.331 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -167.722 237.134 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -247.872 220.186 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.31752 1.31752 1.31752 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -179.401 215.335 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.38164 1.38164 1.38164 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -168.661 264.17 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -248.784 279.968 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.39621 1.39621 1.39621 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -178.404 285.001 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.41969 1.41969 1.41969 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -213.919 220.21 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -214.937 279.285 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -185 180 10.2967 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -280 270 8.57303 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -195 315 11.49 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -280 210 11.0393 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -295 270 8.57303 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -280 230 11.0393 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -195 330 11.49 ] + nhpr [ -90 -0.148089 -5.84744e-009 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -210 180 10.2967 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/minnies_melody_land_4300.dna b/ttmodels/src/dna/minnies_melody_land_4300.dna new file mode 100644 index 00000000..52e52dcb --- /dev/null +++ b/ttmodels/src/dna/minnies_melody_land_4300.dna @@ -0,0 +1,12914 @@ +store_suit_point [ 0, STREET_POINT, 65 30 -0.5 ] +store_suit_point [ 1, STREET_POINT, 65 40 -0.5 ] +store_suit_point [ 2, STREET_POINT, 55 30 -0.5 ] +store_suit_point [ 3, STREET_POINT, 55 40 -0.5 ] +store_suit_point [ 4, STREET_POINT, 65 62 -0.5 ] +store_suit_point [ 5, STREET_POINT, 65 80 -0.5 ] +store_suit_point [ 6, STREET_POINT, 55 80 -0.5 ] +store_suit_point [ 7, STREET_POINT, 55 62 -0.5 ] +store_suit_point [ 8, FRONT_DOOR_POINT, 44 62 0, 1 ] +store_suit_point [ 9, STREET_POINT, 65 95 -0.5 ] +store_suit_point [ 10, STREET_POINT, 80 95 -0.5 ] +store_suit_point [ 11, STREET_POINT, 80 105 -0.5 ] +store_suit_point [ 12, STREET_POINT, 55 105 -0.5 ] +store_suit_point [ 13, FRONT_DOOR_POINT, 63 116 0, 3 ] +store_suit_point [ 14, STREET_POINT, 120 95 -0.5 ] +store_suit_point [ 15, STREET_POINT, 120 105 -0.5 ] +store_suit_point [ 16, STREET_POINT, 137 104 -0.5 ] +store_suit_point [ 17, STREET_POINT, 145 120 -0.5 ] +store_suit_point [ 18, STREET_POINT, 135 120 -0.5 ] +store_suit_point [ 19, STREET_POINT, 131 109 -0.5 ] +store_suit_point [ 20, FRONT_DOOR_POINT, 138 84 0, 20 ] +store_suit_point [ 21, STREET_POINT, 145 142 -0.5 ] +store_suit_point [ 22, STREET_POINT, 145 160 -0.5 ] +store_suit_point [ 23, STREET_POINT, 135 160 -0.5 ] +store_suit_point [ 24, STREET_POINT, 135 142 -0.5 ] +store_suit_point [ 25, FRONT_DOOR_POINT, 156 142 0, 4 ] +store_suit_point [ 26, STREET_POINT, 145 177 -0.5 ] +store_suit_point [ 27, STREET_POINT, 145 200 -0.5 ] +store_suit_point [ 28, STREET_POINT, 135 200 -0.5 ] +store_suit_point [ 29, STREET_POINT, 135 177 -0.5 ] +store_suit_point [ 30, FRONT_DOOR_POINT, 124 177 0, 7 ] +store_suit_point [ 31, STREET_POINT, 149 210 -0.5 ] +store_suit_point [ 32, STREET_POINT, 160 215 -0.5 ] +store_suit_point [ 33, STREET_POINT, 160 225 -0.5 ] +store_suit_point [ 34, STREET_POINT, 142 216 -0.5 ] +store_suit_point [ 35, FRONT_DOOR_POINT, 137.5 236 0, 21 ] +store_suit_point [ 37, STREET_POINT, 200 215 -0.5 ] +store_suit_point [ 38, STREET_POINT, 200 225 -0.5 ] +store_suit_point [ 41, STREET_POINT, 210 210 -0.5 ] +store_suit_point [ 42, STREET_POINT, 215 200 -0.5 ] +store_suit_point [ 43, STREET_POINT, 225 200 -0.5 ] +store_suit_point [ 44, STREET_POINT, 217 218 -0.5 ] +store_suit_point [ 45, FRONT_DOOR_POINT, 236 218 0, 28 ] +store_suit_point [ 46, FRONT_DOOR_POINT, 223 236 0, 27 ] +store_suit_point [ 47, STREET_POINT, 225 180 -0.5 ] +store_suit_point [ 48, STREET_POINT, 225 160 -0.5 ] +store_suit_point [ 49, STREET_POINT, 215 180 -0.5 ] +store_suit_point [ 50, STREET_POINT, 215 160 -0.5 ] +store_suit_point [ 51, FRONT_DOOR_POINT, 235 180 0, 9 ] +store_suit_point [ 52, STREET_POINT, 215 142 -0.5 ] +store_suit_point [ 53, STREET_POINT, 215 120 -0.5 ] +store_suit_point [ 54, STREET_POINT, 225 120 -0.5 ] +store_suit_point [ 55, STREET_POINT, 225 142 -0.5 ] +store_suit_point [ 56, FRONT_DOOR_POINT, 204 142 0, 12 ] +store_suit_point [ 57, STREET_POINT, 215 103 -0.5 ] +store_suit_point [ 58, STREET_POINT, 215 95 -0.5 ] +store_suit_point [ 59, STREET_POINT, 222 95 -0.5 ] +store_suit_point [ 60, STREET_POINT, 240 95 -0.5 ] +store_suit_point [ 61, STREET_POINT, 225 105 -0.5 ] +store_suit_point [ 62, STREET_POINT, 240 105 -0.5 ] +store_suit_point [ 63, FRONT_DOOR_POINT, 204 103 0, 17 ] +store_suit_point [ 64, FRONT_DOOR_POINT, 222 84 0, 19 ] +store_suit_point [ 65, STREET_POINT, 261 95 -0.5 ] +store_suit_point [ 66, STREET_POINT, 280 95 -0.5 ] +store_suit_point [ 67, STREET_POINT, 261 105 -0.5 ] +store_suit_point [ 68, STREET_POINT, 280 105 -0.5 ] +store_suit_point [ 69, FRONT_DOOR_POINT, 261 116 0, 29 ] +store_suit_point [ 70, STREET_POINT, 320 95 -0.5 ] +store_suit_point [ 71, STREET_POINT, 320 55 -0.5 ] +store_suit_point [ 72, STREET_POINT, 370 105 -0.5 ] +store_suit_point [ 73, STREET_POINT, 320 32 -0.5 ] +store_suit_point [ 74, STREET_POINT, 320 15 -0.5 ] +store_suit_point [ 75, FRONT_DOOR_POINT, 309 32 0, 35 ] +store_suit_point [ 76, STREET_POINT, 320 -10 -0.5 ] +store_suit_point [ 77, STREET_POINT, 330 -10 -0.5 ] +store_suit_point [ 78, STREET_POINT, 345 -10 -0.5 ] +store_suit_point [ 79, FRONT_DOOR_POINT, 309 -7 0, 36 ] +store_suit_point [ 80, FRONT_DOOR_POINT, 330 -20 0, 41 ] +store_suit_point [ 81, STREET_POINT, 385 -10 -0.5 ] +store_suit_point [ 82, STREET_POINT, 400 -10 -0.5 ] +store_suit_point [ 83, STREET_POINT, 400 -25 -0.5 ] +store_suit_point [ 84, STREET_POINT, 410 -25 -0.5 ] +store_suit_point [ 85, STREET_POINT, 410 -10 -0.5 ] +store_suit_point [ 86, STREET_POINT, 425 -10 -0.5 ] +store_suit_point [ 87, STREET_POINT, 410 105 -0.5 ] +store_suit_point [ 88, STREET_POINT, 410 80 -0.5 ] +store_suit_point [ 89, FRONT_DOOR_POINT, 408 116 0, 38 ] +store_suit_point [ 90, FRONT_DOOR_POINT, 421 83 0, 68 ] +store_suit_point [ 91, STREET_POINT, 410 40 -0.5 ] +store_suit_point [ 92, STREET_POINT, 410 47 -0.5 ] +store_suit_point [ 93, FRONT_DOOR_POINT, 421 47 0, 40 ] +store_suit_point [ 94, STREET_POINT, 410 15 -0.5 ] +store_suit_point [ 95, STREET_POINT, 410 0 -0.5 ] +store_suit_point [ 96, STREET_POINT, 425 0 -0.5 ] +store_suit_point [ 97, STREET_POINT, 400 -75 -0.5 ] +store_suit_point [ 98, STREET_POINT, 410 -75 -0.5 ] +store_suit_point [ 99, STREET_POINT, 400 -90 -0.5 ] +store_suit_point [ 100, STREET_POINT, 385 -90 -0.5 ] +store_suit_point [ 101, STREET_POINT, 385 -112 -0.5 ] +store_suit_point [ 102, STREET_POINT, 385 -130 -0.5 ] +store_suit_point [ 103, STREET_POINT, 403 -130 -0.5 ] +store_suit_point [ 104, STREET_POINT, 425 -130 -0.5 ] +store_suit_point [ 105, STREET_POINT, 425 -108 -0.5 ] +store_suit_point [ 106, STREET_POINT, 425 -90 -0.5 ] +store_suit_point [ 107, STREET_POINT, 410 -90 -0.5 ] +store_suit_point [ 108, FRONT_DOOR_POINT, 374 -112 0, 44 ] +store_suit_point [ 109, FRONT_DOOR_POINT, 403 -141 0, 43 ] +store_suit_point [ 110, FRONT_DOOR_POINT, 436 -108 0, 45 ] +store_suit_point [ 111, STREET_POINT, 458 -10 -0.5 ] +store_suit_point [ 112, STREET_POINT, 465 -10 -0.5 ] +store_suit_point [ 113, STREET_POINT, 465 0 -0.5 ] +store_suit_point [ 114, STREET_POINT, 458 0 -0.5 ] +store_suit_point [ 115, FRONT_DOOR_POINT, 458 11 0, 42 ] +store_suit_point [ 116, STREET_POINT, 475 -15 -0.5 ] +store_suit_point [ 117, STREET_POINT, 480 -25 -0.5 ] +store_suit_point [ 118, STREET_POINT, 490 -25 -0.5 ] +store_suit_point [ 119, STREET_POINT, 483 -7 -0.5 ] +store_suit_point [ 120, FRONT_DOOR_POINT, 501 -12 0, 49 ] +store_suit_point [ 121, FRONT_DOOR_POINT, 488 11 0, 48 ] +store_suit_point [ 122, STREET_POINT, 480 -65 -0.5 ] +store_suit_point [ 123, STREET_POINT, 490 -65 -0.5 ] +store_suit_point [ 124, STREET_POINT, 480 -77 -0.5 ] +store_suit_point [ 125, STREET_POINT, 480 -105 -0.5 ] +store_suit_point [ 126, STREET_POINT, 490 -105 -0.5 ] +store_suit_point [ 127, STREET_POINT, 490 -77 -0.5 ] +store_suit_point [ 128, FRONT_DOOR_POINT, 469 -72 0, 50 ] +store_suit_point [ 129, FRONT_DOOR_POINT, 501 -77 0, 53 ] +store_suit_point [ 130, STREET_POINT, 495 -115 -0.5 ] +store_suit_point [ 131, STREET_POINT, 505 -120 -0.5 ] +store_suit_point [ 132, STREET_POINT, 488 -124 -0.5 ] +store_suit_point [ 133, STREET_POINT, 505 -130 -0.5 ] +store_suit_point [ 134, FRONT_DOOR_POINT, 487 -141 0, 54 ] +store_suit_point [ 135, FRONT_DOOR_POINT, 470 -125 0, 52 ] +store_suit_point [ 136, STREET_POINT, 523 -130 -0.5 ] +store_suit_point [ 137, STREET_POINT, 545 -130 -0.5 ] +store_suit_point [ 138, STREET_POINT, 545 -120 -0.5 ] +store_suit_point [ 139, STREET_POINT, 523 -120 -0.5 ] +store_suit_point [ 140, FRONT_DOOR_POINT, 523 -141 0, 55 ] +store_suit_point [ 141, STREET_POINT, 570 -130 -0.5 ] +store_suit_point [ 142, STREET_POINT, 570 -105 -0.5 ] +store_suit_point [ 143, STREET_POINT, 560 -105 -0.5 ] +store_suit_point [ 144, STREET_POINT, 560 -120 -0.5 ] +store_suit_point [ 145, STREET_POINT, 570 -60 -0.5 ] +store_suit_point [ 146, STREET_POINT, 585 -60 -0.5 ] +store_suit_point [ 147, STREET_POINT, 585 -45 -0.5 ] +store_suit_point [ 148, STREET_POINT, 545 -45 -0.5 ] +store_suit_point [ 149, STREET_POINT, 545 -60 -0.5 ] +store_suit_point [ 150, STREET_POINT, 560 -60 -0.5 ] +store_suit_point [ 151, STREET_POINT, 585 -33 -0.5 ] +store_suit_point [ 152, STREET_POINT, 585 -5 -0.5 ] +store_suit_point [ 153, STREET_POINT, 545 -28 -0.5 ] +store_suit_point [ 154, STREET_POINT, 545 -5 -0.5 ] +store_suit_point [ 155, FRONT_DOOR_POINT, 534 -28 0, 56 ] +store_suit_point [ 156, FRONT_DOOR_POINT, 596 -44 0, 72 ] +store_suit_point [ 157, STREET_POINT, 585 10 -0.5 ] +store_suit_point [ 158, STREET_POINT, 570 10 -0.5 ] +store_suit_point [ 159, STREET_POINT, 570 35 -0.5 ] +store_suit_point [ 160, STREET_POINT, 560 35 -0.5 ] +store_suit_point [ 161, STREET_POINT, 560 10 -0.5 ] +store_suit_point [ 162, STREET_POINT, 545 10 -0.5 ] +store_suit_point [ 163, STREET_POINT, 570 57 -0.5 ] +store_suit_point [ 164, STREET_POINT, 570 70 -0.5 ] +store_suit_point [ 165, STREET_POINT, 605 70 -0.5 ] +store_suit_point [ 166, STREET_POINT, 560 57 -0.5 ] +store_suit_point [ 167, STREET_POINT, 560 80 -0.5 ] +store_suit_point [ 168, STREET_POINT, 605 80 -0.5 ] +store_suit_point [ 169, FRONT_DOOR_POINT, 549 57 0, 70 ] +store_suit_point [ 170, STREET_POINT, 623 79 -0.5 ] +store_suit_point [ 171, STREET_POINT, 630 95 -0.5 ] +store_suit_point [ 172, STREET_POINT, 620 95 -0.5 ] +store_suit_point [ 173, STREET_POINT, 616 86 -0.5 ] +store_suit_point [ 175, STREET_POINT, 630 102 -0.5 ] +store_suit_point [ 176, STREET_POINT, 630 135 -0.5 ] +store_suit_point [ 177, STREET_POINT, 620 135 -0.5 ] +store_suit_point [ 178, STREET_POINT, 620 102 -0.5 ] +store_suit_point [ 179, FRONT_DOOR_POINT, 641 102 0, 62 ] +store_suit_point [ 180, STREET_POINT, 630 175 -0.5 ] +store_suit_point [ 181, STREET_POINT, 620 175 -0.5 ] +store_suit_point [ 182, STREET_POINT, 634 184 -0.5 ] +store_suit_point [ 183, STREET_POINT, 645 190 -0.5 ] +store_suit_point [ 184, STREET_POINT, 645 200 -0.5 ] +store_suit_point [ 185, STREET_POINT, 626 191 -0.5 ] +store_suit_point [ 186, FRONT_DOOR_POINT, 609 177 0, 71 ] +store_suit_point [ 187, FRONT_DOOR_POINT, 623 210 0, 67 ] +store_suit_point [ 188, STREET_POINT, 655 190 -0.5 ] +store_suit_point [ 189, STREET_POINT, 655 200 -0.5 ] +store_suit_point [ 190, SIDE_DOOR_POINT, 40 87 0, 1 ] +store_suit_point [ 191, SIDE_DOOR_POINT, 100 33 0, 20 ] +store_suit_point [ 192, SIDE_DOOR_POINT, 87 120 0, 3 ] +store_suit_point [ 193, SIDE_DOOR_POINT, 115 80 0, 20 ] +store_suit_point [ 194, SIDE_DOOR_POINT, 160 127 0, 4 ] +store_suit_point [ 195, SIDE_DOOR_POINT, 120 153 0, 7 ] +store_suit_point [ 196, SIDE_DOOR_POINT, 155 240 0, 21 ] +store_suit_point [ 197, SIDE_DOOR_POINT, 240 233 0, 27 ] +store_suit_point [ 198, SIDE_DOOR_POINT, 240 153 0, 9 ] +store_suit_point [ 199, SIDE_DOOR_POINT, 240 193 0, 28 ] +store_suit_point [ 200, SIDE_DOOR_POINT, 200 163 0, 12 ] +store_suit_point [ 201, SIDE_DOOR_POINT, 263 80 0, 19 ] +store_suit_point [ 202, SIDE_DOOR_POINT, 244 120 0, 29 ] +store_suit_point [ 203, SIDE_DOOR_POINT, 200 115 0, 17 ] +store_suit_point [ 204, SIDE_DOOR_POINT, 306 50 0, 35 ] +store_suit_point [ 205, SIDE_DOOR_POINT, 305 5 0, 36 ] +store_suit_point [ 206, SIDE_DOOR_POINT, 377 -25 0, 41 ] +store_suit_point [ 207, SIDE_DOOR_POINT, 375 120 0, 38 ] +store_suit_point [ 209, SIDE_DOOR_POINT, 424 25 0, 40 ] +store_suit_point [ 210, SIDE_DOOR_POINT, 385 -50 0, 44 ] +store_suit_point [ 211, SIDE_DOOR_POINT, 440 -138 0, 43 ] +store_suit_point [ 212, SIDE_DOOR_POINT, 440 -95 0, 45 ] +store_suit_point [ 213, SIDE_DOOR_POINT, 430 15 0, 42 ] +store_suit_point [ 214, SIDE_DOOR_POINT, 425 102 0, 68 ] +store_suit_point [ 215, SIDE_DOOR_POINT, 505 6.99999 0, 49 ] +store_suit_point [ 216, SIDE_DOOR_POINT, 465 -33 0, 50 ] +store_suit_point [ 217, SIDE_DOOR_POINT, 505 -60 0, 53 ] +store_suit_point [ 218, SIDE_DOOR_POINT, 465 -110 0, 52 ] +store_suit_point [ 219, SIDE_DOOR_POINT, 500 -145 0, 54 ] +store_suit_point [ 220, SIDE_DOOR_POINT, 543 -145 0, 55 ] +store_suit_point [ 221, SIDE_DOOR_POINT, 600 -57 0, 72 ] +store_suit_point [ 222, SIDE_DOOR_POINT, 530 4.99999 0, 56 ] +store_suit_point [ 223, SIDE_DOOR_POINT, 535 82 0, 70 ] +store_suit_point [ 224, SIDE_DOOR_POINT, 645 157 0, 62 ] +store_suit_point [ 225, SIDE_DOOR_POINT, 605 118 0, 71 ] +store_suit_point [ 226, SIDE_DOOR_POINT, 637 215 0, 67 ] +group "minniesMelodyLand" [ + visgroup "4301" [ + vis [ "4301" "4302" "4303" "4304" ] + suit_edge [ 0 1 ] + suit_edge [ 2 0 ] + suit_edge [ 3 2 ] + suit_edge [ 191 0 ] + suit_edge [ 0 191 ] + battle_cell [ 20 20 60 30 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 80 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 80 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 20 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 80 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 20 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 20 15 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 20 25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 20 40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.9 -8.06 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 17.03 -1.78 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.67 1.83 18.68 ] + nhpr [ -180 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 40 0 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 2.61 -2.1 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 100 0 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 16.97 -1.91 0 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 100 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 100 25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 20 0 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + prop "linktunnel_dl_9150_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 60 0 0 ] + nhpr [ 180 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + color [ 0.533333 0.435294 0.823529 1 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.984314 0.992157 0.596078 1 ] + pos [ 0 0 -1 ] + nhpr [ -0 0 1 ] + scale [ 1.4 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.984314 0.992157 0.596078 1 ] + pos [ 0 0 -1.96 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.61 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 100 40 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 80 40 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 11.23 -18.57 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.15 -1.95 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.12 3.67 16.26 ] + nhpr [ 180 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 76.4128 24.8235 2.28882e-005 ] + nhpr [ -90 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 51.4409 4.68143 -0.500046 ] + nhpr [ 180 0 0 ] + ] + ] + visgroup "4302" [ + vis [ "4302" "4301" "4303" "4304" "4305" "4306" ] + suit_edge [ 1 4 ] + suit_edge [ 4 5 ] + suit_edge [ 6 7 ] + suit_edge [ 7 3 ] + suit_edge [ 4 8 ] + suit_edge [ 8 4 ] + suit_edge [ 7 8 ] + suit_edge [ 8 7 ] + battle_cell [ 20 20 60 60 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 80 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 40 70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 0.97 0.36 0.36 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 40 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + landmark_building "tb1:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Marshall's Stacks" ] + pos [ 40 50 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ -0.79 0 -1.1 ] + nhpr [ -0 0 2 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ -0.11 0 0.6 ] + scale [ 0.9 1 1.1 ] + width [ 32.0574 ] + height [ 32.0574 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.13 ] + scale [ 0.9 1 0.6 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 80 65 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 80 80 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.58 0.96 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 80 50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + ] + visgroup "4303" [ + vis [ "4303" "4301" "4302" "4304" "4305" "4306" ] + suit_edge [ 5 9 ] + suit_edge [ 9 10 ] + suit_edge [ 11 12 ] + suit_edge [ 12 6 ] + suit_edge [ 9 13 ] + suit_edge [ 13 9 ] + suit_edge [ 12 13 ] + suit_edge [ 13 12 ] + suit_edge [ 190 6 ] + suit_edge [ 6 190 ] + suit_edge [ 190 5 ] + suit_edge [ 5 190 ] + battle_cell [ 20 20 60 100 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 40 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 40 110 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 40 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 6.28 -3.55 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 65 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.8 0.47 0.8 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 10.71 -1.84 -7.62939e-006 ] + nhpr [ 135 0 -0 ] + ] + ] + landmark_building "tb3:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "What a Mezzo! Maid Service" ] + pos [ 50 120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + sign [ + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + scale [ 1.5 1 1.5 ] + kern [ 0.089093 ] + width [ 55.0903 ] + height [ 55.0903 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.31 ] + scale [ 1.3 1 1 ] + width [ 35.2448 ] + height [ 35.2448 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 40 80 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 40 95 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 9.51 -7.54 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -9.51 -33.51 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.72 5.49 19.61 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 45.0305 94.3479 -7.62939e-006 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "4304" [ + vis [ "4304" "4301" "4302" "4303" "4305" "4306" "4307" "4308" "4309" "4344" ] + suit_edge [ 10 14 ] + suit_edge [ 15 11 ] + suit_edge [ 192 11 ] + suit_edge [ 11 192 ] + suit_edge [ 192 10 ] + suit_edge [ 10 192 ] + suit_edge [ 193 14 ] + suit_edge [ 14 193 ] + suit_edge [ 193 15 ] + suit_edge [ 15 193 ] + battle_cell [ 20 20 100 100 -0.5 ] + flat_building "tb20:random_DNARoot" [ + pos [ 95 80 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 80 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 125 80 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 13.96 3.27 19.37 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 80 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 105 80 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 95 120 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 6.12 6.06 19.68 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + ] + visgroup "4305" [ + vis [ "4305" "4304" "4303" "4302" "4306" "4307" "4308" "4309" "4344" ] + suit_edge [ 14 16 ] + suit_edge [ 16 17 ] + suit_edge [ 18 19 ] + suit_edge [ 19 15 ] + suit_edge [ 16 20 ] + suit_edge [ 20 16 ] + suit_edge [ 19 20 ] + suit_edge [ 20 19 ] + battle_cell [ 20 20 133.5 105.5 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 160 120 7.62939e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb20:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 150 80 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 95 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -21.63 -35.54 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 110 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.51 3.65 20.46 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 8.5 -1.5 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 120 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.15 -4.93 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 160 80 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 147.697 95.2085 7.62939e-005 ] + nhpr [ -135 0 0 ] + ] + ] + visgroup "4306" [ + vis [ "4306" "4305" "4304" "4303" "4302" "4307" "4308" "4309" "4344" ] + suit_edge [ 17 21 ] + suit_edge [ 21 22 ] + suit_edge [ 23 24 ] + suit_edge [ 24 18 ] + suit_edge [ 21 25 ] + suit_edge [ 25 21 ] + suit_edge [ 24 25 ] + suit_edge [ 25 24 ] + suit_edge [ 194 17 ] + suit_edge [ 17 194 ] + suit_edge [ 194 18 ] + suit_edge [ 18 194 ] + suit_edge [ 195 23 ] + suit_edge [ 23 195 ] + suit_edge [ 195 22 ] + suit_edge [ 22 195 ] + battle_cell [ 20 20 140 140 -0.5 ] + flat_building "tb4:random_DNARoot" [ + pos [ 159.94 160.04 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.96 0.96 0.47 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 130 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 160 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 160 120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 135 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 145 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.87 0.8 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 3.23 6.17 13.15 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + landmark_building "tb4:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Mixolydian Scales" ] + pos [ 159.94 150.04 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.29 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 0.3 ] + scale [ 0.8 0 1.2 ] + kern [ 0.039 ] + width [ 37 ] + height [ 37 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "4307" [ + vis [ "4307" "4306" "4305" "4304" "4308" "4309" "4310" "4344" ] + suit_edge [ 22 26 ] + suit_edge [ 26 27 ] + suit_edge [ 28 29 ] + suit_edge [ 29 23 ] + suit_edge [ 29 30 ] + suit_edge [ 30 29 ] + suit_edge [ 26 30 ] + suit_edge [ 30 26 ] + battle_cell [ 20 20 140 180 -0.5 ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 160 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 190 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 175 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.47 2.25 18.69 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 185 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 3.76 -6.72 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 160 200 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 160 160 -0.000152588 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + landmark_building "tb7:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Relax the Bach" ] + pos [ 120 165 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 0 -5 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 25.23 -5.12 0 ] + nhpr [ 150 0 -0 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.71 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.34 ] + scale [ 1.2 1 1.2 ] + kern [ 0.065718 ] + width [ 25.2876 ] + height [ 25.2876 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.11 ] + scale [ 1 1 0.9 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 155.681 164.127 -0.000152588 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "4308" [ + vis [ "4308" "4307" "4306" "4305" "4304" "4309" "4310" "4311" "4344" ] + suit_edge [ 27 31 ] + suit_edge [ 31 32 ] + suit_edge [ 33 34 ] + suit_edge [ 34 28 ] + suit_edge [ 34 35 ] + suit_edge [ 35 34 ] + suit_edge [ 31 35 ] + suit_edge [ 35 31 ] + suit_edge [ 196 33 ] + suit_edge [ 33 196 ] + suit_edge [ 196 32 ] + suit_edge [ 32 196 ] + battle_cell [ 20 20 145.5 213.5 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 120 200 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 120 215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 9.31 -9.61 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -11.34 -36.41 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 120 230 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 120 240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 150 240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb21:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Anna's Cruises" ] + pos [ 125 240 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ -0.47 0 -1.27 ] + scale [ 0.9 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.87 ] + nhpr [ -0 0 -1 ] + scale [ 1 1 0.9 ] + kern [ 0.039 ] + width [ 25.5931 ] + height [ 25.5931 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + nhpr [ -0 0 -3 ] + scale [ 1 1 0.7 ] + kern [ 0.087201 ] + width [ 22.2563 ] + height [ 22.2563 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 120 200 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.23 5.02 17.61 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + ] + visgroup "4309" [ + vis [ "4309" "4308" "4307" "4306" "4305" "4304" "4310" "4311" "4312" "4313" "4314" "4344" ] + suit_edge [ 32 37 ] + suit_edge [ 38 33 ] + battle_cell [ 20 20 180 220 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 160 200 -1.52588e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 170 200 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 170 200 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5.01 -2.05 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 170 190 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 190 180 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3.6 6.48 17.61 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 19.01 -3.3 -0.14 ] + nhpr [ -30.18 -11.4986 -0.883753 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 190 190 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 200 200 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 5.3 -1.93 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 190 200 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ 7.6 -5.75 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 170 180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 192.694 234.44 -1.52588e-005 ] + nhpr [ -30 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + pos [ 187.391 183.121 -0.000152588 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "4310" [ + vis [ "4310" "4309" "4308" "4307" "4311" "4312" "4313" "4314" "4344" ] + suit_edge [ 37 41 ] + suit_edge [ 41 42 ] + suit_edge [ 43 44 ] + suit_edge [ 44 38 ] + suit_edge [ 44 45 ] + suit_edge [ 45 44 ] + suit_edge [ 41 45 ] + suit_edge [ 45 41 ] + suit_edge [ 44 46 ] + suit_edge [ 46 44 ] + suit_edge [ 41 46 ] + suit_edge [ 46 41 ] + suit_edge [ 197 44 ] + suit_edge [ 44 197 ] + suit_edge [ 197 41 ] + suit_edge [ 41 197 ] + battle_cell [ 20 20 214 214 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 200 240 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 200 240 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 3.35 -36.59 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 3.8 5.03 11.43 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 10.96 -1.3 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb27:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "Common Time Watches" ] + pos [ 215 240 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.84 ] + kern [ 0.08629 ] + width [ 27.7677 ] + height [ 27.7677 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.18 ] + width [ 51.3769 ] + height [ 51.3769 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 230 240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 240 240 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 240 215 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 11 -1.3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb28:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Schumann's Shoes for Men" ] + pos [ 240 230 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.09 ] + scale [ 2 1 2 ] + width [ 36.3121 ] + height [ 36.3121 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -1.45 ] + scale [ 1.3 1 1 ] + width [ 43.0756 ] + height [ 43.0756 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + ] + visgroup "4311" [ + vis [ "4311" "4310" "4309" "4308" "4312" "4313" "4314" "4344" ] + suit_edge [ 47 43 ] + suit_edge [ 48 47 ] + suit_edge [ 42 49 ] + suit_edge [ 49 50 ] + suit_edge [ 47 51 ] + suit_edge [ 51 47 ] + suit_edge [ 49 51 ] + suit_edge [ 51 49 ] + suit_edge [ 199 43 ] + suit_edge [ 43 199 ] + suit_edge [ 199 42 ] + suit_edge [ 42 199 ] + suit_edge [ 200 50 ] + suit_edge [ 50 200 ] + suit_edge [ 200 48 ] + suit_edge [ 48 200 ] + battle_cell [ 20 20 220 180 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 200 200 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 200 185 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 200 170 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 10.67 -6.85 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 240 170 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 240 200 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + ] + landmark_building "tb9:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "I Can't Understanza!" ] + pos [ 240 190 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 0 -6 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 21 -5 0 ] + nhpr [ 135 0 -0 ] + ] + sign [ + code [ "MM_sign1" ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.34 ] + scale [ 0.9 1 1 ] + kern [ 0.076044 ] + width [ 26.6262 ] + height [ 26.6262 ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.06 ] + scale [ 0.8 1 0.6 ] + width [ 28.1144 ] + height [ 28.1144 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 200 155 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.42 0.85 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 12.49 5.69 17.88 ] + nhpr [ 15 0 -0 ] + color [ 0.91 0.91 0.54 1 ] + ] + ] + ] + visgroup "4312" [ + vis [ "4312" "4311" "4310" "4309" "4315" "4318" "4313" "4314" "4322" "4323" "4344" ] + suit_edge [ 50 52 ] + suit_edge [ 52 53 ] + suit_edge [ 54 55 ] + suit_edge [ 55 48 ] + suit_edge [ 52 56 ] + suit_edge [ 56 52 ] + suit_edge [ 55 56 ] + suit_edge [ 56 55 ] + suit_edge [ 198 48 ] + suit_edge [ 48 198 ] + suit_edge [ 198 50 ] + suit_edge [ 50 198 ] + battle_cell [ 20 20 220 140 -0.5 ] + flat_building "tb9:random_DNARoot" [ + pos [ 240 135 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb12:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 200 128.8 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 1 1 ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 240 120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 240 160 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.44 1.51 19.59 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 200 120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 2 -2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 240 145 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 236.333 137.096 0 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4313" [ + vis [ "4313" "4312" "4311" "4310" "4309" "4314" "4315" "4322" "4343" "4318" "4323" "4344" ] + suit_edge [ 57 58 ] + suit_edge [ 53 57 ] + suit_edge [ 58 59 ] + suit_edge [ 59 60 ] + suit_edge [ 61 54 ] + suit_edge [ 62 61 ] + suit_edge [ 57 63 ] + suit_edge [ 63 57 ] + suit_edge [ 61 63 ] + suit_edge [ 63 61 ] + suit_edge [ 59 64 ] + suit_edge [ 64 59 ] + suit_edge [ 61 64 ] + suit_edge [ 64 61 ] + suit_edge [ 203 53 ] + suit_edge [ 53 203 ] + suit_edge [ 203 54 ] + suit_edge [ 54 203 ] + battle_cell [ 20 20 220 100 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 240 80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 200 80 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 34.68 -35.38 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 240 80 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.96 0.96 0.47 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 32.39 -11.16 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 200 110 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 220 80 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + landmark_building "tb17:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "The Ternary Pet Shop" ] + pos [ 200 95 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ -0.35 0 0 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.56 ] + scale [ 1.1 1 1.3 ] + kern [ 0.069452 ] + width [ 31.7048 ] + height [ 31.7048 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.25098 1 ] + pos [ 0.08 0 -0.18 ] + scale [ 1 1 0.8 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb19:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Yuki's Ukeleles" ] + pos [ 235 80 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 27.18 -2.2 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -2.42 -3.84 0 ] + nhpr [ 45 0 -0 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0 0 0.11 ] + scale [ 2 1 2.1 ] + width [ 31.1042 ] + height [ 31.1042 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0 0 -1.61 ] + scale [ 1.5 1 1.7 ] + kern [ 0.141599 ] + width [ 49.7339 ] + height [ 49.7339 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "4314" [ + vis [ "4314" "4313" "4312" "4311" "4310" "4309" "4315" "4318" "4319" "4320" "4322" "4323" "4343" "4344" ] + suit_edge [ 60 65 ] + suit_edge [ 65 66 ] + suit_edge [ 67 62 ] + suit_edge [ 68 67 ] + suit_edge [ 67 69 ] + suit_edge [ 69 67 ] + suit_edge [ 65 69 ] + suit_edge [ 69 65 ] + suit_edge [ 201 65 ] + suit_edge [ 65 201 ] + suit_edge [ 201 67 ] + suit_edge [ 67 201 ] + suit_edge [ 202 62 ] + suit_edge [ 62 202 ] + suit_edge [ 202 60 ] + suit_edge [ 60 202 ] + battle_cell [ 20 20 260 100 -0.5 ] + flat_building "tb29:random_DNARoot" [ + pos [ 270 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 255 80 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 280 80 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 5 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 240 80 -3.8147e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 270 80 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 5.61 4.59 11.33 ] + nhpr [ 15 0 -0 ] + color [ 0.7 0.76 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 240 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb29:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Pachelbel's Canonballs" ] + pos [ 250 120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.12 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.35 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 23 -4 0 ] + nhpr [ 180 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 249.117 85.2878 -3.8147e-005 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "4315" [ + vis [ "4315" "4314" "4313" "4312" "4343" "4318" "4319" "4320" "4322" "4323" "4324" "4325" ] + suit_edge [ 66 70 ] + suit_edge [ 70 71 ] + suit_edge [ 72 68 ] + battle_cell [ 20 20 325 100 -0.5 ] + street "street_courtyard_90_exit_DNARoot" [ + code [ "street_courtyard_90_exit" ] + pos [ 325 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_90_exit_DNARoot" [ + code [ "street_courtyard_90_exit" ] + pos [ 325 100 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_90_exit_DNARoot" [ + code [ "street_courtyard_90_exit" ] + pos [ 325 100 -3.8147e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_90_DNARoot" [ + code [ "street_courtyard_90" ] + pos [ 325 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 280 130 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 280 145 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 3.6 -0.97 -0.23 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.19 3.54 19.93 ] + nhpr [ 15 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 295 145 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 280 65 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 3 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -1.26 -14.32 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 21.64 -6.41 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 13 -12 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 280 55 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 345 145 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 355 145 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -3.11 -10.74 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 370 145 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 370 135 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.93 -8.41 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 21.62 -6.36 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 370 80 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -6.69 -6.26 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.24 -10.45 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 370 70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 295 55 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 305 55 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -6.74 -6.55 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 370 55 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_drums_flat_DNARoot" [ + code [ "prop_drums_flat" ] + pos [ 4.23 -1.47 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -366.17 -1981.81 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.26 4.31 18.55 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 360 55 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 21.72 -6.1 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 280 120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -6.56 -5.96 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 16 -11 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 354.656 127.934 -2.67029e-005 ] + nhpr [ -45 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_fightIdle" ] + pos [ 347.451 60.892 -3.05176e-005 ] + nhpr [ -150 0 0 ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_fightIdle" ] + pos [ 288.594 159.673 5.00002 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "4318" [ + vis [ "4318" "4343" "4315" "4322" "4314" "4313" "4312" "4321" "4320" "4319" "4325" "4326" "4327" "4341" ] + suit_edge [ 71 73 ] + suit_edge [ 73 74 ] + suit_edge [ 73 75 ] + suit_edge [ 75 73 ] + suit_edge [ 204 73 ] + suit_edge [ 73 204 ] + battle_cell [ 20 20 325 35 -0.5 ] + flat_building "tb35:random_DNARoot" [ + pos [ 345 55 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 345 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 305 10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 2 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 305 55 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + landmark_building "tb35:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Ursatz for Kool Katz" ] + pos [ 305 20 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.13 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 0.69 ] + scale [ 1.9 1 1 ] + kern [ 0.150881 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.501961 1 ] + scale [ 0.7 1 0.5 ] + width [ 23.8738 ] + height [ 23.8738 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 305 45 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ 345 45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idleIntoFight" ] + cell_id [ 0 ] + pos [ 338.672 26.6456 -3.05176e-005 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "4319" [ + vis [ "4319" "4318" "4343" "4315" "4314" "4322" "4320" "4321" "4324" "4325" "4326" "4327" "4341" "4323" ] + suit_edge [ 74 76 ] + suit_edge [ 76 77 ] + suit_edge [ 77 78 ] + suit_edge [ 76 79 ] + suit_edge [ 79 76 ] + suit_edge [ 77 80 ] + suit_edge [ 80 77 ] + suit_edge [ 205 74 ] + suit_edge [ 74 205 ] + battle_cell [ 20 20 325 -5 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 345 -25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb36:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Reggae Regalia" ] + pos [ 305 -15 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign3" ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.67 ] + width [ 26.1561 ] + height [ 26.1561 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.501961 0 0.25098 1 ] + scale [ 0.7 1 0.6 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + landmark_building "tb41:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Lyre, Lyre, Pants on Fire!" ] + pos [ 340 -25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign1" ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.3 ] + scale [ 0.9 1 0.9 ] + width [ 28.3342 ] + height [ 28.3342 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.03 ] + scale [ 1 1 0.7 ] + width [ 25.7447 ] + height [ 25.7447 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 306 -21 0 ] + nhpr [ 135 0 -0 ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 320 -25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 3 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -20.4 -35.21 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.47 -2.53 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 305 0 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.42 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 305 -25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + ] + ] + ] + visgroup "4320" [ + vis [ "4320" "4319" "4318" "4315" "4314" "4321" "4322" "4323" "4324" "4325" "4326" "4341" "4327" "4342" "4343" ] + suit_edge [ 78 81 ] + suit_edge [ 206 81 ] + suit_edge [ 81 206 ] + battle_cell [ 20 20 360 -5 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 345 -25 7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 355 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 12.47 -2.01 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.56 3.74 17.56 ] + nhpr [ -0 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 345 15 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 360 15 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 370 15 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 20.43 -4.99 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 385 -25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -5.5 -4.81 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 370 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 9 -8 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_fightIdle" ] + cell_id [ 0 ] + pos [ 361.525 10.3373 7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "4321" [ + vis [ "4321" "4322" "4323" "4324" "4325" "4326" "4327" "4342" "4341" "4320" "4319" "4318" "4315" ] + suit_edge [ 81 82 ] + suit_edge [ 82 83 ] + suit_edge [ 84 85 ] + suit_edge [ 85 86 ] + suit_edge [ 95 94 ] + suit_edge [ 96 95 ] + battle_cell [ 20 20 405 -5 -0.5 ] + street "street_4way_intersection_DNARoot" [ + code [ "street_4way_intersection" ] + pos [ 385 -25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + visgroup "4322" [ + vis [ "4322" "4341" "4342" "4323" "4324" "4325" "4321" "4320" "4315" "4314" "4313" "4319" "4318" "4343" "4312" ] + suit_edge [ 87 72 ] + suit_edge [ 88 87 ] + suit_edge [ 87 89 ] + suit_edge [ 89 87 ] + suit_edge [ 88 90 ] + suit_edge [ 90 88 ] + suit_edge [ 207 72 ] + suit_edge [ 72 207 ] + suit_edge [ 214 87 ] + suit_edge [ 87 214 ] + suit_edge [ 215 119 ] + suit_edge [ 119 215 ] + suit_edge [ 215 116 ] + suit_edge [ 116 215 ] + battle_cell [ 20 20 405 100 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 385 120 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 380 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb68:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 425 95 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 390 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 375 80 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 425 120 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 385 80 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 370 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 425 110 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.78 3.61 18.17 ] + nhpr [ 30 0 -0 ] + color [ 0.91 0.91 0.54 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 370 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 380 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 410 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + ] + landmark_building "tb38:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Kazoology School of Music" ] + pos [ 395 120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.1 ] + scale [ 1.7 1 1.8 ] + width [ 46.6723 ] + height [ 46.6723 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.34 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ 419.173 94.1617 7.62939e-006 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "4323" [ + vis [ "4323" "4322" "4315" "4314" "4312" "4324" "4325" "4321" "4320" "4341" "4342" "4343" "4313" ] + suit_edge [ 91 92 ] + suit_edge [ 92 88 ] + suit_edge [ 92 93 ] + suit_edge [ 93 92 ] + battle_cell [ 20 20 405 60 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 385 80 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 425 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 6 -6 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 385 55 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -3.15 -7.3 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 385 70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb68:random_DNARoot" [ + pos [ 385 40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + landmark_building "tb40:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Coda Pop Musical Beverages" ] + pos [ 425 60 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.79 0.49 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.89 0 -1.35 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 1.97 0 0.22 ] + scale [ 1.3 1 1.3 ] + kern [ 0.042272 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 2.08 0 -0.59 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + visgroup "4324" [ + vis [ "4324" "4323" "4322" "4315" "4321" "4320" "4319" "4325" "4326" "4327" "4341" "4342" "4343" "4318" ] + suit_edge [ 94 91 ] + suit_edge [ 209 91 ] + suit_edge [ 91 209 ] + battle_cell [ 20 20 405 30 -0.5 ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 385 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 385 15 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 385 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 385 25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 425 35 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_fightIdle" ] + cell_id [ 0 ] + pos [ 392.253 25.0723 0 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "4325" [ + vis [ "4325" "4341" "4342" "4324" "4319" "4320" "4321" "4318" "4315" "4322" "4323" "4326" "4327" "4328" "4329" "4330" ] + suit_edge [ 86 111 ] + suit_edge [ 111 112 ] + suit_edge [ 113 114 ] + suit_edge [ 114 96 ] + suit_edge [ 114 115 ] + suit_edge [ 115 114 ] + suit_edge [ 111 115 ] + suit_edge [ 115 111 ] + suit_edge [ 213 96 ] + suit_edge [ 96 213 ] + suit_edge [ 213 86 ] + suit_edge [ 86 213 ] + battle_cell [ 20 20 445 -5 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 425 -25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb42:random_DNARoot" [ + pos [ 435 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 15.58 -5.67 0 ] + nhpr [ -180 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.44 -1.33 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb42:random_DNARoot" [ + pos [ 455 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 12 -8 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb42:random_DNARoot" [ + pos [ 465 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + landmark_building "tb42:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "The Syncopation Corporation" ] + pos [ 445 15 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 1.27 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + scale [ 1.4 1 1.5 ] + kern [ 0.109795 ] + width [ 56.2683 ] + height [ 56.2683 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.27 ] + scale [ 1.4 1 1.4 ] + kern [ 0.136409 ] + width [ 36.0205 ] + height [ 36.0205 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + flat_building "tb42:random_DNARoot" [ + pos [ 435 15 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.32 3.57 18.41 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 3 -1 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb42:random_DNARoot" [ + pos [ 425 15 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -5.75 -5.49 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 451.696 -18.7725 0 ] + nhpr [ -180 0 0 ] + ] + ] + visgroup "4326" [ + vis [ "4326" "4325" "4324" "4321" "4320" "4319" "4318" "4341" "4327" "4328" "4329" "4330" "4323" ] + suit_edge [ 112 116 ] + suit_edge [ 116 117 ] + suit_edge [ 118 119 ] + suit_edge [ 119 113 ] + suit_edge [ 116 120 ] + suit_edge [ 120 116 ] + suit_edge [ 119 120 ] + suit_edge [ 120 119 ] + suit_edge [ 119 121 ] + suit_edge [ 121 119 ] + suit_edge [ 116 121 ] + suit_edge [ 121 116 ] + battle_cell [ 20 20 480 -12 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 465 15 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb49:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 505 0 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ 505 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb48:random_DNARoot" [ + pos [ 495 15 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb48:random_DNARoot" [ + pos [ 460 15 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 16.08 -1.28 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 502 10 0 ] + nhpr [ -45 -16.2703 -0 ] + ] + landmark_building "tb48:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Lotsa Lute Savings & Loan" ] + pos [ 480 15 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 -1.34 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.5 ] + scale [ 1.3 1 1.1 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.12 ] + scale [ 0.8 1 0.6 ] + width [ 24.7819 ] + height [ 24.7819 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 494.332 -5.43464 -7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "4327" [ + vis [ "4327" "4326" "4325" "4324" "4321" "4320" "4318" "4319" "4328" "4329" "4330" "4323" ] + suit_edge [ 117 122 ] + suit_edge [ 123 118 ] + suit_edge [ 216 117 ] + suit_edge [ 117 216 ] + suit_edge [ 216 118 ] + suit_edge [ 118 216 ] + suit_edge [ 217 123 ] + suit_edge [ 123 217 ] + suit_edge [ 217 122 ] + suit_edge [ 122 217 ] + battle_cell [ 20 20 485 -45 -0.5 ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 505 -65 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb50:random_DNARoot" [ + pos [ 465 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb50:random_DNARoot" [ + pos [ 465 -55 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ 505 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.42 4.46 17.63 ] + nhpr [ -0 0 -0 ] + color [ 0.97 0.47 0.67 1 ] + ] + ] + flat_building "tb50:random_DNARoot" [ + pos [ 465 -65 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 505 -55 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 505 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4328" [ + vis [ "4328" "4327" "4326" "4325" "4329" "4330" "4331" ] + suit_edge [ 122 124 ] + suit_edge [ 124 125 ] + suit_edge [ 126 127 ] + suit_edge [ 127 123 ] + suit_edge [ 124 128 ] + suit_edge [ 128 124 ] + suit_edge [ 127 128 ] + suit_edge [ 128 127 ] + suit_edge [ 127 129 ] + suit_edge [ 129 127 ] + suit_edge [ 124 129 ] + suit_edge [ 129 124 ] + battle_cell [ 20 20 485 -85 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 465 -65 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb50:random_DNARoot" [ + pos [ 465 -95 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.74 3.45 19.45 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 505 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 465 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.46 -7.52 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb53:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Leo's Fenders" ] + pos [ 505 -65 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.2 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ -0.41 0 0.9 ] + nhpr [ -0 0 -1 ] + scale [ 1.1 1 1 ] + kern [ 0.053911 ] + width [ 26.6035 ] + height [ 26.6035 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.04 ] + nhpr [ -0 0 -2 ] + scale [ 1 1 0.9 ] + kern [ 0.064575 ] + width [ 30.6786 ] + height [ 30.6786 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + landmark_building "tb50:toon_landmark_MM_B1_DNARoot" [ + code [ "toon_landmark_MM_B1" ] + title [ "The Borrowed Chord Pawn Shop" ] + pos [ 465 -80 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -2.49 -2.78 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 17.52 -4.3 0 ] + nhpr [ 150 0 -0 ] + ] + sign [ + code [ "MM_sign3" ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.51 ] + scale [ 0.7 1 1.3 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.22 ] + scale [ 1 1 0.8 ] + width [ 24.2848 ] + height [ 24.2848 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_fightIdle" ] + cell_id [ 0 ] + pos [ 499.523 -96.4141 -7.62939e-006 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "4329" [ + vis [ "4329" "4328" "4327" "4326" "4325" "4330" "4331" "4332" "4334" "4333" ] + suit_edge [ 130 126 ] + suit_edge [ 131 130 ] + suit_edge [ 125 132 ] + suit_edge [ 132 133 ] + suit_edge [ 132 134 ] + suit_edge [ 134 132 ] + suit_edge [ 130 134 ] + suit_edge [ 134 130 ] + suit_edge [ 132 135 ] + suit_edge [ 135 132 ] + suit_edge [ 130 135 ] + suit_edge [ 135 130 ] + suit_edge [ 218 125 ] + suit_edge [ 125 218 ] + suit_edge [ 218 126 ] + suit_edge [ 126 218 ] + suit_edge [ 219 133 ] + suit_edge [ 133 219 ] + suit_edge [ 219 131 ] + suit_edge [ 131 219 ] + battle_cell [ 20 20 492 -119.5 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 505 -145 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 465 -145 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 480 -145 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 2.39 -12.1 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -21.13 -36.03 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 465 -115 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 505 -145 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb52:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Flowery Flute Fleeces" ] + pos [ 465 -135 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.42 0.85 1 ] + ] + sign [ + code [ "MM_sign3" ] + pos [ 0 0 0.14 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ -0.06 0 0.91 ] + scale [ 0.8 1 0.8 ] + kern [ 0.03 ] + width [ 26.9651 ] + height [ 26.9651 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 0.1 ] + scale [ 0.8 1 0.8 ] + width [ 28.6041 ] + height [ 28.6041 ] + text [ + letters [ "(" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "!" ] + ] + text [ + letters [ ")" ] + ] + ] + ] + ] + landmark_building "tb54:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Wagner's Vocational Violin Videos" ] + pos [ 495 -145 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.99 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -0.15 ] + scale [ 0.9 1 0.9 ] + kern [ 0.064178 ] + width [ 25.6141 ] + height [ 25.6141 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -1 ] + scale [ 0.9 1 0.9 ] + kern [ 0.125802 ] + width [ 21.9457 ] + height [ 21.9457 ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 496.06 -139.26 7.62939e-006 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "4330" [ + vis [ "4333" "4330" "4331" "4332" "4329" "4328" "4327" "4326" "4325" "4334" "4335" ] + suit_edge [ 133 136 ] + suit_edge [ 136 137 ] + suit_edge [ 138 139 ] + suit_edge [ 139 131 ] + suit_edge [ 136 140 ] + suit_edge [ 140 136 ] + suit_edge [ 139 140 ] + suit_edge [ 140 139 ] + suit_edge [ 220 137 ] + suit_edge [ 137 220 ] + suit_edge [ 220 138 ] + suit_edge [ 138 220 ] + battle_cell [ 20 20 525 -125 -0.5 ] + flat_building "tb55:random_DNARoot" [ + pos [ 515 -145 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 515 -105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 530 -105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.62 4.61 17.14 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 505 -105 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 505 -145 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + landmark_building "tb55:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "The Teli-Caster Network" ] + pos [ 535 -145 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.28 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 0.85 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 0.9 ] + width [ 26.2158 ] + height [ 26.2158 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.501961 1 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.8 ] + width [ 31.109 ] + height [ 31.109 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 550 -145 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "4331" [ + vis [ "4331" "4330" "4329" "4328" "4332" "4333" "4334" "4335" ] + suit_edge [ 137 141 ] + suit_edge [ 141 142 ] + suit_edge [ 143 144 ] + suit_edge [ 144 138 ] + battle_cell [ 20 20 565 -125 -0.5 ] + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ 545 -145 2.28882e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 575 -155 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 595 -155 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 3.53 -0.74 -0.18 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 4.1 3.88 14.31 ] + nhpr [ -0 0 -0 ] + color [ 0.8 0.47 0.8 1 ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 595 -140 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 7.08 -20.57 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -31.11 -44.88 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 595 -125 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 585 -125 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 585 -115 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.61 -1.3 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 585 -105 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 565 -145 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 4 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 6.32 -1.21 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 565 -155 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.7 0.76 1 1 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 581.505 -131.939 2.28882e-005 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "4332" [ + vis [ "4332" "4331" "4330" "4329" "4333" "4334" "4335" "4345" ] + suit_edge [ 142 145 ] + suit_edge [ 145 146 ] + suit_edge [ 146 147 ] + suit_edge [ 148 149 ] + suit_edge [ 149 150 ] + suit_edge [ 150 143 ] + suit_edge [ 221 146 ] + suit_edge [ 146 221 ] + suit_edge [ 221 150 ] + suit_edge [ 150 221 ] + battle_cell [ 20 20 565 -75 -0.5 ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ 600 -85 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 545 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 545 -95 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 545 -85 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 530 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 7.02 -5.95 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 530 -55 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 585 -85 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.15 5.23 17.18 ] + nhpr [ -0 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 -85 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 13 -12 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 -65 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 585 -105 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 530 -85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 -50 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11.52 3.22 17.04 ] + nhpr [ -0 0 -0 ] + color [ 0.97 0.47 0.67 1 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 12.92 -6.23 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 579.925 -81.2803 7.62939e-006 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "4333" [ + vis [ "4333" "4332" "4331" "4330" "4334" "4335" "4336" "4337" "4338" "4345" ] + suit_edge [ 147 151 ] + suit_edge [ 151 152 ] + suit_edge [ 153 148 ] + suit_edge [ 154 153 ] + suit_edge [ 153 155 ] + suit_edge [ 155 153 ] + suit_edge [ 151 156 ] + suit_edge [ 156 151 ] + battle_cell [ 20 20 580 -25 -0.5 ] + landmark_building "tb56:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 530 -40 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + landmark_building "tb72:toon_landmark_MM_D1_DNARoot" [ + code [ "toon_landmark_MM_D1" ] + title [ "Fast Freddie's Fretless Fingerboards" ] + pos [ 600.833 -35.1853 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.752941 1 ] + pos [ 0 0 1.08 ] + scale [ 1.5 1 1.2 ] + kern [ 0.03 ] + width [ 44.6728 ] + height [ 44.6728 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.321569 0.203922 0.478431 1 ] + pos [ 0 0 -1.35 ] + scale [ 0.7 1 0.7 ] + width [ 41.2643 ] + height [ 41.2643 ] + text [ + letters [ "(" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "!" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ ")" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.733333 1 ] + pos [ 0 0 -0.43 ] + scale [ 1.4 1 1.5 ] + width [ 48.8902 ] + height [ 48.8902 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + node "streets" [ + street "street_divided_40x70_DNARoot" [ + code [ "street_divided_40x70" ] + pos [ 600 -45 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 620 -4.99999 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 640 -4.99998 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 660 -4.99999 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + ] + node "buildings" [ + flat_building "tb56:random_DNARoot" [ + pos [ 530 -15 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 620 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 645 -5 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 640 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 620 -25 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 660 -4.99999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.96 0.79 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 660 -25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 660 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 1.8478 -1.79199 7.62939e-006 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 9.99999 -5 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 27.4279 -4.81219 0 ] + nhpr [ 120 0 -0 ] + ] + ] + ] + ] + visgroup "4334" [ + vis [ "4334" "4333" "4332" "4331" "4330" "4335" "4336" "4337" "4338" "4345" ] + suit_edge [ 152 157 ] + suit_edge [ 157 158 ] + suit_edge [ 158 159 ] + suit_edge [ 160 161 ] + suit_edge [ 161 162 ] + suit_edge [ 162 154 ] + suit_edge [ 222 162 ] + suit_edge [ 162 222 ] + suit_edge [ 222 158 ] + suit_edge [ 158 222 ] + battle_cell [ 20 20 565 15 -0.5 ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ 530 35 1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 530 35 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 585 35 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 10 -24.9999 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 0 -10 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 530 15 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 7.9 1.77 19.26 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 9.99999 -9.99994 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -2 -8 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ 530 -5 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -4.99992 -34.9999 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -19.9999 -35 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -34.9999 -35 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 35 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 530 25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 600 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 548.826 20.8875 1.52588e-005 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "4335" [ + vis [ "4335" "4334" "4333" "4332" "4331" "4330" "4336" "4338" "4337" "4339" "4340" ] + suit_edge [ 159 163 ] + suit_edge [ 163 164 ] + suit_edge [ 164 165 ] + suit_edge [ 166 160 ] + suit_edge [ 167 166 ] + suit_edge [ 168 167 ] + suit_edge [ 166 169 ] + suit_edge [ 169 166 ] + suit_edge [ 163 169 ] + suit_edge [ 169 163 ] + suit_edge [ 223 167 ] + suit_edge [ 167 223 ] + suit_edge [ 223 164 ] + suit_edge [ 164 223 ] + battle_cell [ 20 20 565 70 -0.5 ] + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ 585 95 -1.52588e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 605 95 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 545 35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 545 65 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 7.00001 -4 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 545 75 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 550 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.43 -7.13 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 565 105 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 565 95 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 4.91 -1.35 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 595 95 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 605 55 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 585 55 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 585 35 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 535 90 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + landmark_building "tb70:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Ziggy's Zoo of Zigeunermusik" ] + pos [ 545 45 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.07 0 -1.4 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 2.05 0 1.03 ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 2.01 0 -0.09 ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 2.07 0 -1.01 ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "k" ] + ] + ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 535 75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.52 1.25 19.97 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 535 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.57 6.75 18.57 ] + nhpr [ -0 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb70:random_DNARoot" [ + pos [ 575 95 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_mailbox_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_mailbox" ] + anim [ "tt_a_ara_mml_mailbox_fightIdle" ] + cell_id [ 0 ] + pos [ 578.865 89.4285 -1.52588e-005 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "4336" [ + vis [ "4336" "4335" "4334" "4333" "4332" "4337" "4338" "4339" "4340" ] + suit_edge [ 165 170 ] + suit_edge [ 170 171 ] + suit_edge [ 172 173 ] + suit_edge [ 173 168 ] + battle_cell [ 20 20 619 81.5 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 645 95 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 85 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 95 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 645 70 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -8.41 -9.5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -20.5 -36.32 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 6.94 -1.21 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 625 55 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb72:random_DNARoot" [ + pos [ 645 55 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + ] + ] + visgroup "4337" [ + vis [ "4337" "4336" "4335" "4334" "4338" "4339" "4340" "4333" ] + suit_edge [ 171 175 ] + suit_edge [ 175 176 ] + suit_edge [ 177 178 ] + suit_edge [ 178 172 ] + suit_edge [ 175 179 ] + suit_edge [ 179 175 ] + suit_edge [ 178 179 ] + suit_edge [ 179 178 ] + battle_cell [ 20 20 625 115 -0.5 ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 125 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb71:random_DNARoot" [ + pos [ 605 95 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 605 115 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 605 135 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb71:random_DNARoot" [ + pos [ 605 110 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 1 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 135 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb71:random_DNARoot" [ + pos [ 605 125 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + landmark_building "tb62:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Quentin's Quintessential Quadrilles" ] + pos [ 645 110 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.7 0.78 1 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 18.72 -3.52 0 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -1.73 -4.11 0 ] + nhpr [ 45 0 -0 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -1.38 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.356863 0.180392 1 ] + pos [ 0 0 -0.58 ] + scale [ 0.8 1 0.9 ] + width [ 22.2767 ] + height [ 22.2767 ] + flags [ "b" ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_hydrant_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_hydrant" ] + anim [ "tt_a_ara_mml_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 612.056 124.133 0 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "4338" [ + vis [ "4338" "4337" "4336" "4335" "4339" "4340" "4333" "4334" "4332" ] + suit_edge [ 176 180 ] + suit_edge [ 181 177 ] + suit_edge [ 224 180 ] + suit_edge [ 180 224 ] + suit_edge [ 224 181 ] + suit_edge [ 181 224 ] + suit_edge [ 225 177 ] + suit_edge [ 177 225 ] + suit_edge [ 225 176 ] + suit_edge [ 176 225 ] + battle_cell [ 20 20 625 155 -0.5 ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 150 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 10.38 6.14 11 ] + nhpr [ -0 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 175 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb71:random_DNARoot" [ + pos [ 605 150 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + street "street_keyboard_20x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 605 155 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 605 175 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb62:random_DNARoot" [ + pos [ 645 165 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.97 0.87 0.47 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb71:random_DNARoot" [ + pos [ 605 135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 608.013 161.047 1.52588e-005 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "4339" [ + vis [ "4339" "4338" "4337" "4336" "4335" "4340" ] + suit_edge [ 180 182 ] + suit_edge [ 182 183 ] + suit_edge [ 184 185 ] + suit_edge [ 185 181 ] + suit_edge [ 181 186 ] + suit_edge [ 186 181 ] + suit_edge [ 180 186 ] + suit_edge [ 186 180 ] + suit_edge [ 185 187 ] + suit_edge [ 187 185 ] + suit_edge [ 182 187 ] + suit_edge [ 187 182 ] + suit_edge [ 226 184 ] + suit_edge [ 184 226 ] + battle_cell [ 20 20 632 189.5 -0.5 ] + street "street_curved_corner_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 605 175 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb67:random_DNARoot" [ + pos [ 605 180 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb67:random_DNARoot" [ + pos [ 605 195 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 3.4 -9.38 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ -14.99 -35.93 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb67:random_DNARoot" [ + pos [ 605 205 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + landmark_building "tb67:toon_landmark_MM_C1_DNARoot" [ + code [ "toon_landmark_MM_C1" ] + title [ "Mr. Costello's Yellow Cellos" ] + pos [ 613 215 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -1.63 0 0.34 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.356863 0 0.356863 1 ] + pos [ 2.02 0 0.52 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0.356863 0 0.356863 1 ] + pos [ 1.85 0 -0.65 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb71:toon_landmark_MM_A2_DNARoot" [ + code [ "toon_landmark_MM_A2" ] + title [ "Harry's House of Harmonious Humbuckers" ] + pos [ 605 165 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign4" ] + pos [ 0 0 -1.63 ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.43 0 1.01 ] + nhpr [ -0 0 -3 ] + kern [ 0.041104 ] + width [ 20.2951 ] + height [ 20.2951 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 0.04 ] + nhpr [ -0 0 -3 ] + kern [ 0.035773 ] + width [ 24.8182 ] + height [ 24.8182 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb67:random_DNARoot" [ + pos [ 630 215 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.42 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb67:random_DNARoot" [ + pos [ 605 215 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + ] + ] + visgroup "4340" [ + vis [ "4340" "4339" "4338" "4337" "4336" "4335" ] + suit_edge [ 183 188 ] + suit_edge [ 188 189 ] + suit_edge [ 189 184 ] + battle_cell [ 20 20 655 195 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 695 215 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 675 235 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 655 235 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 655 175 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 675 175 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 655 215 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ 655 215 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ 655 235 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.35 -8.6 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 27.34 -13.54 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ 675 235 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 5.94 9.43 19.44 ] + nhpr [ -0 0 -0 ] + color [ 0.7 0.76 1 1 ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ 655 175 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ 655 155 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ 675 155 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 11.6 -9.51 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ 695 155 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curtains_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ 695 235 0 ] + nhpr [ -90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 23.6 -1.89 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ 695 175.5 0 ] + nhpr [ -90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -3.24 -2.08 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 16.82 2.54 18.59 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ 645 215 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + prop "linktunnel_mm_4000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 694.9 215 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + pos [ 0 0 -2.13 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.443137 0.541176 0.941176 1 ] + pos [ 0 0 -0.81 ] + nhpr [ -0 0 2 ] + scale [ 1.5 1 1.5 ] + wiggle [ 2.60407 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.71 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -1.89 ] + nhpr [ -0 0 2 ] + scale [ 0.8 1 0.8 ] + width [ 45.4545 ] + height [ 45.4545 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "interactive_prop_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + cell_id [ 0 ] + pos [ 663.038 177.827 0 ] + nhpr [ 180 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 689.764 186.368 -0.500015 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "4341" [ + vis [ "4341" "4342" "4318" "4319" "4320" "4321" "4323" "4324" "4325" "4326" "4322" "4327" ] + suit_edge [ 83 97 ] + suit_edge [ 98 84 ] + suit_edge [ 210 97 ] + suit_edge [ 97 210 ] + suit_edge [ 210 98 ] + suit_edge [ 98 210 ] + suit_edge [ 211 104 ] + suit_edge [ 104 211 ] + battle_cell [ 20 20 405 -50 -0.5 ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 385 -65 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 425 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.11 2.48 19.33 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 425 -45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 425 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + street "street_keyboard_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 385 -25 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + texture [ "street_sidewalk_MM_keyboard_tex" ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 385 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 17.53 5.52 19.16 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 385 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 385 -75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + ] + visgroup "4342" [ + vis [ "4342" "4341" "4321" "4320" "4322" "4323" "4324" "4325" ] + suit_edge [ 97 99 ] + suit_edge [ 99 100 ] + suit_edge [ 100 101 ] + suit_edge [ 101 102 ] + suit_edge [ 102 103 ] + suit_edge [ 103 104 ] + suit_edge [ 104 105 ] + suit_edge [ 105 106 ] + suit_edge [ 106 107 ] + suit_edge [ 107 98 ] + suit_edge [ 101 108 ] + suit_edge [ 108 101 ] + suit_edge [ 103 109 ] + suit_edge [ 109 103 ] + suit_edge [ 105 110 ] + suit_edge [ 110 105 ] + suit_edge [ 212 106 ] + suit_edge [ 106 212 ] + battle_cell [ 20 20 405 -94 -0.5 ] + street "street_courtyard_70_exit_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ 405 -110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70" ] + pos [ 405 -110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70" ] + pos [ 405 -110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_courtyard_70_DNARoot" [ + code [ "street_courtyard_70" ] + pos [ 405 -110 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + landmark_building "tb43:toon_landmark_MM_E1_DNARoot" [ + code [ "toon_landmark_MM_E1" ] + title [ "" ] + pos [ 415 -145 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.7 0.78 1 1 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -3.08 -3.7 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 32.65 -3.07 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 370 -75 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 20.82 -6.93 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 370 -95 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_trashcan_MM_DNARoot" [ + code [ "prop_trashcan_MM" ] + pos [ 11.83 -7.99 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 4.07 4.7 14.82 ] + nhpr [ -0 0 -0 ] + color [ 0.97 0.47 0.67 1 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 370 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ 370 -145 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 10.29 -5.75 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ 390 -145 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ 425 -145 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ 440 -145 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 4.51 -0.56 -0.1 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3.84 4.96 18.78 ] + nhpr [ -0 0 -0 ] + color [ 1 0.7 0.7 1 ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 440 -115 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.41 2.25 17.87 ] + nhpr [ -0 0 -0 ] + color [ 0.97 0.47 0.67 1 ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 425 -75 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -21 -35 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -6.55 -7.37 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ 440 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 440 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.69 0.33 0.69 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_mailbox_MM_DNARoot" [ + code [ "prop_mailbox_MM" ] + pos [ 10 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb44:toon_landmark_MM_A1_DNARoot" [ + code [ "toon_landmark_MM_A1" ] + title [ "Con Moto Cycles" ] + pos [ 370 -125 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.7 0.78 1 1 ] + ] + sign [ + code [ "MM_sign2" ] + pos [ -2.41 0 -1.29 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 1.84 0 0.39 ] + scale [ 1.3 1 1.4 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0 0.627451 1 ] + pos [ 1.89 0 -1 ] + scale [ 1.8 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb45:toon_landmark_MM_B2_DNARoot" [ + code [ "toon_landmark_MM_B2" ] + title [ "Ellie's Elegant Elegies" ] + pos [ 440 -100 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "MM_sign1" ] + pos [ 0 0 -0.89 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "MM_Musicals" ] + color [ 0 0.384314 0.568627 1 ] + pos [ 0 0 -0.68 ] + scale [ 0.8 1 1 ] + kern [ 0.0406 ] + width [ 23.3585 ] + height [ 23.3585 ] + flags [ "b" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -17 -8 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb45:random_DNARoot" [ + pos [ 440 -75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + ] + visgroup "4343" [ + vis [ "4343" "4318" "4315" "4319" "4320" "4314" "4322" "4323" "4324" "4313" ] + battle_cell [ 20 20 325 175 -0.5 ] + street "street_stairs_40x10x5_DNARoot" [ + code [ "street_stairs_40x10x5" ] + pos [ 345 145 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 345 155 5 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 285 155 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 285 205 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ 3.47 -0.73 4.89 ] + nhpr [ 45 2 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.13 3.13 18.86 ] + nhpr [ 15 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 300 205 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb73:toon_landmark_hqMM_DNARoot" [ + code [ "toon_landmark_hqMM" ] + building_type [ "hq" ] + title [ "" ] + pos [ 326 172 5 ] + nhpr [ -180 0 -0 ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 345 195 5 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 305 205 5 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 305 185 5 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 365 205 5 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 365 185 5 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 285 165 5 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 345 165 5 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 305 145 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 5 -5 5 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 305 155 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 315 205 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 285 190 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 345 155 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 365 170 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 3.00001 -49 5 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 20 -25 5 ] + nhpr [ -0 2 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 365 190 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 16.5 -8.85 5 ] + nhpr [ 30 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 365 205 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 0.49 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 12.77 -18.47 5 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 350 205 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 330 205 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 365 155 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 31 -12 5 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 285 175 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_piano_DNARoot" [ + code [ "prop_piano" ] + pos [ 5.00002 -10 5 ] + nhpr [ -45 0 -0 ] + ] + ] + ] + visgroup "4344" [ + vis [ "4344" "4309" "4308" "4307" "4306" "4304" "4305" "4310" "4311" "4312" "4313" "4314" ] + battle_cell [ 20 20 180 260 -0.5 ] + street "street_sunken_40x40_DNARoot" [ + code [ "street_sunken_40x40" ] + pos [ 160 240 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 200 260 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 200 260 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 200 280 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.96 0.96 0.73 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ 2.6 -0.86 -5 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 175 280 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 190 280 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 160 240 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 160 260 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 14.74 3.18 18.68 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 160 280 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.79 1 1 ] + count [ 4 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 7.32001 -33.08 -4.95 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 32.32 -32.08 -4.97 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 175 290 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.56 0.8 0.65 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 190 280 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_idleBounce0" ] + pos [ 165.214 274.885 -4.99992 ] + nhpr [ 45 0 -0 ] + ] + ] + visgroup "4345" [ + vis [ "4345" "4334" "4333" "4332" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 748.6 -14.4 0 ] + nhpr [ 100 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 724.456 -3.10784 1.8323 ] + nhpr [ 135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 705.052 -26.4757 1.93412 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 705.399 -3.22262 1.93032 ] + nhpr [ -135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 725.294 -26.1615 1.92918 ] + nhpr [ 45 0 -0 ] + ] + ] + street "street_MM_pond_DNARoot" [ + code [ "street_MM_pond" ] + pos [ 714.998 -15.0019 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_MM_tex" ] + texture [ "street_sidewalk_MM_tex" ] + texture [ "street_curb_MM_tex" ] + ] + node "props" [ + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 706.435 -44.1919 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 724.063 14.7822 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 744.411 -6.13884 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 744.215 -23.8466 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 684.659 -6.34639 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 684.552 -23.4373 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 692.739 -14.8675 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 715 6.36464 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 714.935 -37.2866 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 724.141 -43.8418 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_trumpets_lamp" ] + pos [ 706.318 14.9642 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 768.622 -15.9713 -9.15527e-005 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 757.737 -34.5499 0.000656128 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 741.06 -52.7211 -9.15527e-005 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 715.094 -69.6694 -0.000106811 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 693.413 -54.1594 -9.15527e-005 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 675 -40 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 757.895 2.79545 -0.00012207 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 739.948 21.2931 -9.15527e-005 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 715.275 38.2677 -9.15527e-005 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 694.724 22.6005 -9.15527e-005 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 674.551 8.34234 0 ] + nhpr [ 150 0 -0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 718.17 64.7325 10.0141 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 785 -60.0025 12.1503 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 718.176 84.6762 10.2378 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.49 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.67 0.4 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 769.998 49.9981 10.4481 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 769.998 69.9981 10.4355 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 684.998 -85.0019 12.1995 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 789.863 -3.49114 9.81783 ] + nhpr [ -45 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 764.999 -60.0022 12.1714 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.91 0.91 0.54 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.69 0.33 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 684.998 -105.002 12.3563 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.43 0.32 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 799.846 13.7964 9.86125 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.79 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + anim_prop "animated_prop_generic_phase_6_models_char__mml_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_6_models_char__mml_trashcan" ] + anim [ "tt_a_ara_mml_trashcan_fightIdle" ] + pos [ 662.666 -7.33014 0 ] + nhpr [ 0 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/minnies_melody_land_sz.dna b/ttmodels/src/dna/minnies_melody_land_sz.dna new file mode 100644 index 00000000..fda63a6a --- /dev/null +++ b/ttmodels/src/dna/minnies_melody_land_sz.dna @@ -0,0 +1,1236 @@ +group "minniesMelodyLand" [ + visgroup "4000:safe_zone" [ + vis [ "4000:safe_zone" ] + group "streets" [ + ] + group "buildings" [ + flat_building "sz0:random_DNARoot" [ + pos [ 40 80 6.5 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.67 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.8 0.56 0.65 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -79.9 15 6.5 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -108.236 -55 6.5 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.42 0.42 0.85 1 ] + count [ 4 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 55 80 6.5 ] + nhpr [ 0 0 0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.58 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 0.6 -119.9 6.5 ] + nhpr [ 180 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.64 0.45 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.65 0.4 0.82 1 ] + count [ 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -29.65 -120.1 6.5 ] + nhpr [ 135 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_md_curtains_ul" ] + color [ 0.64 0.45 0.92 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -10 80 6.5 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.87 0.89 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ -54.0463 55.8937 6.5 ] + nhpr [ 45 0 0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.72549 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09 ] + width [ 11.1111 ] + height [ 11.1111 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.996078 0.254902 0.254902 1 ] + pos [ 0.27 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.22 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 70.37 -119.76 6.5 ] + nhpr [ 180 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.96 0.79 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.74 0.65 0.99 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 14.82 -119.74 6.5 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.65 0.4 0.82 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.68 0.22 0.8 1 ] + ] + ] + ] + prop "linktunnel_mm_4340_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -25 -209.95 -0.17 ] + nhpr [ 0 0 0 ] + sign [ + code [ "tunnel_sign_magenta" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.97 ] + scale [ 1.3 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -2 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 43.3426 ] + height [ 43.3426 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.68 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + ] + ] + prop "linktunnel_mm_4222_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -170.012 44.58 -0.5 ] + nhpr [ -90 0 0 ] + sign [ + code [ "tunnel_sign_magenta" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.21 ] + scale [ 1.4 1 0.9 ] + width [ 32.8677 ] + height [ 32.8677 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -2.02 ] + scale [ 0.8 1 0.8 ] + width [ 53.3903 ] + height [ 53.3903 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.81 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.18 ] + scale [ 1.4 1 1 ] + width [ 42.0274 ] + height [ 42.0274 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + prop "linktunnel_mm_4127_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 80 169.99 -0.17 ] + nhpr [ 180 0 0 ] + sign [ + code [ "tunnel_sign_magenta" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -0.94 ] + scale [ 1.4 1 1.4 ] + width [ 72.6216 ] + height [ 72.6216 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -1.78 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 33.2978 ] + height [ 33.2978 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.79 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -43.79 -105.96 6.5 ] + nhpr [ 135 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.7 0.7 1 ] + ] + ] + landmark_building "tb3:toon_landmark_MM_gag_shop_DNARoot" [ + code [ "toon_landmark_MM_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ -65.36 38.9231 6.5 ] + nhpr [ -135 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.79 0.49 1 ] + ] + ] + landmark_building "tb4:toon_landmark_hqMM_DNARoot" [ + code [ "toon_landmark_hqMM" ] + building_type [ "hq" ] + title [ "Toon Headquarters" ] + pos [ 76.8912 -13.6265 -13.4784 ] + nhpr [ 0 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -79.9 30 6.5 ] + nhpr [ 45 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.58 0.55 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_MM_clothes_shop_DNARoot" [ + code [ "toon_landmark_MM_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ -54.9522 -88.7614 6.5 ] + nhpr [ 131 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 1 0.64 0.74 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 0.74902 0.87451 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -30 80 6.5 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 1 0.98 0.65 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.79 0.49 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.81 0.3 0.51 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -32.8263 77.1134 6.5 ] + nhpr [ 45 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -61.1174 48.8226 6.5 ] + nhpr [ 45 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.97 0.47 0.67 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.97 0.87 0.47 1 ] + count [ 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -15 -119.9 6.5 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_rock_ur" ] + color [ 1 0.7 0.7 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.58 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.97 0.87 0.47 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -79.9 -0.6 6.5 ] + nhpr [ 90 0 0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_lg_rock_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.8 0.56 0.65 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.8 0.22 0.68 1 ] + ] + ] + ] + ] + group "props" [ + prop "minnies_melody_land" [ + code [ "minnies_melody_land" ] + pos [ 20 -20 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 61.65 63.07 6.53 ] + nhpr [ 0 0 0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -62.64 20.43 6.54 ] + nhpr [ 0 0 0 ] + ] + prop "prop_MM_flute_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -21.22 -102.71 6.52 ] + nhpr [ 0 0 0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -62.6 -60.56 6.53 ] + nhpr [ 0 0 0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ -21.09 62.97 6.55 ] + nhpr [ 0 0 0 ] + ] + prop "prop_MM_trumpets_lamp_DNARoot" [ + code [ "prop_MM_flute_lamp" ] + pos [ 61.97 -103.26 6.53 ] + nhpr [ 0 0 0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -28.9883 75.2548 6.5 ] + nhpr [ -180 0 0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -53.3392 53.7724 6.5 ] + nhpr [ 90 0 0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -41.5358 -102.53 6.5 ] + nhpr [ 180 0 0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ -78.2092 -88.138 6.51 ] + nhpr [ 270 0 0 ] + ] + prop "prop_trumpet_flat_DNARoot" [ + code [ "prop_trumpet_flat" ] + pos [ -1.41116 77.3762 6.5 ] + nhpr [ -45 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_cello_flat_DNARoot" [ + code [ "prop_cello_flat" ] + pos [ -24.7673 -116.716 6.5 ] + nhpr [ -165 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ -75.6574 10.201 6.5 ] + nhpr [ 180 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 6.76 62.54 6.5 ] + nhpr [ 180 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur_MM" ] + pos [ 8.74617 -103.038 6.50001 ] + nhpr [ -180 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 84.01 -61.13 -13.5 ] + nhpr [ -135 0 0 ] + ] + prop "prop_minnie_planter_DNARoot" [ + code [ "prop_minnie_planter" ] + pos [ 83.31 21.62 -13.5 ] + nhpr [ 135 0 0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ -42.59 -113.94 24.19 ] + nhpr [ 135 0 0 ] + color [ 0.97 0.47 0.67 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 59.8 -123.49 24.42 ] + nhpr [ -180 0 0 ] + color [ 0.97 0.47 0.67 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ -82.94 15.82 24.46 ] + nhpr [ 90 0 0 ] + color [ 0.7 0.76 1 1 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ -24.54 85.1 25.76 ] + nhpr [ 0 0 0 ] + color [ 0.97 0.47 0.67 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 50.5 80.92 26.28 ] + nhpr [ 0 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -44.11 68.08 26.88 ] + nhpr [ 45 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -9.2 -121.55 24.91 ] + nhpr [ 180 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -106.052 -62.6765 25.5799 ] + nhpr [ 90 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ -100.97 -42.1847 6.5 ] + nhpr [ 270 0 0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul_MM" ] + pos [ 80 -90 -13.5 ] + nhpr [ -90 0 0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 51.2461 -112.704 6.76006 ] + nhpr [ -180 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 18.42 -113.71 6.59 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ -73.6 -35.66 6.47 ] + nhpr [ 90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ -73.67 -4.15 6.48 ] + nhpr [ -90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 35.79 73.75 6.5 ] + nhpr [ 180 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 4.49 73.77 6.5 ] + nhpr [ 0 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + group "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -58.2 -59.2 -14.49 ] + nhpr [ -61 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 0.116032 -36.0211 -12.0961 ] + nhpr [ 0 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 15.0129 -19.8358 -12.0911 ] + nhpr [ 90 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -0.159901 -5.94525 -12.0341 ] + nhpr [ 180 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -15.5633 -19.8867 -12.1373 ] + nhpr [ -90 0 0 ] + ] + ] + landmark_building "tb8:toon_landmark_MM_pet_shop_DNARoot" [ + code [ "toon_landmark_MM_pet_shop" ] + building_type [ "petshop" ] + title [ "" ] + pos [ -11.6789 -118.281 6.5 ] + nhpr [ -178 0 0 ] + door [ + code [ "door_double_curved_ul" ] + color [ 0.7 0.78 1 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + color [ 1 1 0.501961 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.256555 ] + scale [ 1.49894 1 2.85691 ] + width [ 14.3268 ] + height [ 14.3268 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ -89.4911 -67.2785 6.51 ] + nhpr [ 120 1.10607e-006 0 ] + ] + prop "minnies_melody_land_ext_DNARoot" [ + code [ "minnies_melody_land_ext" ] + pos [ -81.9737 -72.8169 6.5 ] + nhpr [ 90 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -88.3944 -88.2447 6.51 ] + nhpr [ 120 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.62 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.69 0.58 0.96 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.84 0.55 0.98 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -76.4628 -95.1527 6.5 ] + nhpr [ 150 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.7 0.76 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.42 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -98.3008 -72.285 6.5 ] + nhpr [ 120 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.79 1 1 ] + count [ 2 ] + ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/outdoor_zone_sz.dna b/ttmodels/src/dna/outdoor_zone_sz.dna new file mode 100644 index 00000000..bcd51739 --- /dev/null +++ b/ttmodels/src/dna/outdoor_zone_sz.dna @@ -0,0 +1,207 @@ +group "daisysGarden" [ + visgroup "6000:safe_zone" [ + vis [ "6000:safe_zone" ] + group "props" [ + prop "outdoor_zone_DNARoot" [ + code [ "outdoor_zone" ] + pos [ -60 -20 0 ] + nhpr [ 0 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 94.71 174.42 10.54 ] + nhpr [ -143 0 0 ] + width [ 10 ] + wall [ + height [ 3 ] + code [ "wall_basement_rock_ur" ] + color [ 0.57 1 0.65 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_board_ur" ] + color [ 0.48 1 0.7 1 ] + windows [ + code [ "window_sm_pointed_DG_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + // chineseCheckers1 + node "game_table_1" [ + prop "prop_game_table_DNARoot" [ + code [ "prop_game_table" ] + pos [ 91.7 5.68547 1.2 ] + nhpr [ 30 1.45363 0 ] + ] + ] + //chineseCheckers2 + node "game_table_2" [ + prop "prop_game_table_DNARoot" [ + code [ "prop_game_table" ] + pos [ -75.439 62.507 0.55 ] + nhpr [ 90 -1.45363 0 ] + ] + ] + //chineseCheckers3 + node "game_table_3" [ + prop "prop_game_table_DNARoot" [ + code [ "prop_game_table" ] + pos [ 7.156 116.564 0.79 ] + nhpr [ 0 -1.45363 0 ] + ] + ] + // right + node "picnic_table_1" [ + prop "prop_picnic_table_DNARoot" [ + code [ "prop_picnic_table" ] + //pos [ -22.0614 -23.779 1.34649 ] + pos [ -22.0614 -23.779 1.45 ] + nhpr [ 0 0 0 ] + ] + ] + // middle + node "picnic_table_2" [ + prop "prop_picnic_table_DNARoot" [ + code [ "prop_picnic_table" ] + pos [ 35.4114 -35.0274 0.5 ] + nhpr [ 0 1.10906 0 ] + ] + ] + ] + node "buildings" [ + prop "linktunnel_gz_17000_DNARoot" [ + code [ "prop_chip_dale_enterance" ] + pos [ -264.137 -15.4392 0.227776 ] + nhpr [ 105 -0.422594 0.309814 ] + scale [ 1.0546 1.0546 1.0546 ] + ] + prop "linktunnel_dd_1000_DNARoot" [ + code [ "prop_outdoor_zone_entrance" ] + pos [ 86.7098 148.899 0.0205739 ] + nhpr [ 321.091 0 0 ] + sign [ + code [ "DD_sign2" ] + pos [ 0 0 0 ] + nhpr [ 0 0 -3.0 ] + scale [ 1.85 1 1.35 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.439216 0.247059 0.184314 1 ] + pos [ 0 0 -0.2 ] + scale [ 1.6 1 1.7 ] + wiggle [ 7 ] + stumble [ 0.1 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.439216 0.247059 0.184314 1 ] + pos [ 0 0 -1.4 ] + scale [ 1.2 1 1.2 ] + wiggle [ 3 ] + stomp [ 0.0367716 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + ] + ] + ] + ] + ] + prop "prop_golf_construction_sign_DNARoot" [ + code [ "prop_golf_construction_sign" ] + pos [ -48.1255 -136.145 0.0177824 ] + nhpr [ 180 0 0 ] + ] + prop "prop_outdoor_zone_entrance_DNARoot" [ + code [ "prop_outdoor_zone_entrance" ] + pos [ -47.8387 -143.259 0.1 ] + nhpr [ 180 0 0.1 ] + sign [ + pos [ 0 0 -0.65 ] + nhpr [ 0 0 -4 ] + scale [ 1.33009 1 0.849568 ] + ] + ] +] diff --git a/ttmodels/src/dna/storage_estate.dna b/ttmodels/src/dna/storage_estate.dna new file mode 100644 index 00000000..081e3167 --- /dev/null +++ b/ttmodels/src/dna/storage_estate.dna @@ -0,0 +1,51 @@ + +model "phase_5.5/models/estate/terrain" [ + store_node [ "prop" "terrain" "" ] + ] + +model "phase_5.5/models/estate/houseB" [ + store_node [ "prop" "houseB" "" ] + ] + +model "phase_5.5/models/estate/house" [ + store_node [ "prop" "house" "" ] + ] + +hood_model "phase_4/models/props/SZ_fish-mod" [ + store_node [ "prop" "animated_prop_FishAnimatedProp" "fish" ] + ] + +model "phase_4/models/props/piers_tt" [ + store_node [ "prop" "fishing_spot" "" ] + ] + +hood_model "phase_3.5/models/props/trees" [ + store_node [ "holiday_prop" "prop_tree_large_brickbox_ur" ] + store_node [ "holiday_prop" "prop_tree_large_brickbox_ul" ] + store_node [ "holiday_prop" "prop_tree_small_brickbox_ur" ] + store_node [ "holiday_prop" "prop_tree_small_brickbox_ul" ] + store_node [ "holiday_prop" "prop_tree_fat_brickbox_ur" ] + store_node [ "holiday_prop" "prop_tree_fat_brickbox_ul" ] + + store_node [ "holiday_prop" "prop_tree_large_woodbox_ur" ] + store_node [ "holiday_prop" "prop_tree_large_woodbox_ul" ] + store_node [ "holiday_prop" "prop_tree_small_woodbox_ur" ] + store_node [ "holiday_prop" "prop_tree_small_woodbox_ul" ] + + store_node [ "holiday_prop" "prop_tree_large_ur" "prop_tree_large_no_box_ur" ] + store_node [ "holiday_prop" "prop_tree_large_ul" "prop_tree_large_no_box_ul" ] + store_node [ "holiday_prop" "prop_tree_small_ur" "prop_tree_small_nobox_ur" ] + store_node [ "holiday_prop" "prop_tree_small_ul" "prop_tree_small_no_box_ul" ] + store_node [ "holiday_prop" "prop_tree_fat_ur" "prop_tree_fat_no_box_ur" ] + store_node [ "holiday_prop" "prop_tree_fat_ul" "prop_tree_fat_no_box_ul" ] + ] + +// We switched the interface font from impress to humanist +// Warning! This is overridden in PlayGame.py +store_font [ "font" "humanist" + "phase_3/models/fonts/ImpressBT.ttf" ] + +// Warning! This is overridden in PlayGame.py +store_font [ "font" "mickey" + "phase_3/models/fonts/MickeyFont" ] + diff --git a/ttmodels/src/dna/test.dna b/ttmodels/src/dna/test.dna new file mode 100644 index 00000000..510c45f8 --- /dev/null +++ b/ttmodels/src/dna/test.dna @@ -0,0 +1,19571 @@ +store_suit_point [ 0, STREET_POINT, 90 105 -0.5 ] +store_suit_point [ 1, STREET_POINT, 90 115 -0.5 ] +store_suit_point [ 2, STREET_POINT, 80 115 -0.5 ] +store_suit_point [ 3, STREET_POINT, 80 105 -0.5 ] +store_suit_point [ 4, STREET_POINT, 67.5 115 -0.5 ] +store_suit_point [ 5, STREET_POINT, 60 115 -0.5 ] +store_suit_point [ 6, STREET_POINT, 60 105 -0.5 ] +store_suit_point [ 7, STREET_POINT, 67.5 105 -0.5 ] +store_suit_point [ 11, STREET_POINT, 35 90 -0.5 ] +store_suit_point [ 12, STREET_POINT, 45 90 -0.5 ] +store_suit_point [ 13, STREET_POINT, 47.5 97.5 -0.5 ] +store_suit_point [ 14, STREET_POINT, 52.5 102.5 -0.5 ] +store_suit_point [ 15, STREET_POINT, 35 80 -0.5 ] +store_suit_point [ 19, STREET_POINT, 60 55 -0.5 ] +store_suit_point [ 20, STREET_POINT, 60 65 -0.5 ] +store_suit_point [ 21, STREET_POINT, 52.5 67.5 -0.5 ] +store_suit_point [ 22, STREET_POINT, 47.5 72.5 -0.5 ] +store_suit_point [ 23, STREET_POINT, 45 80 -0.5 ] +store_suit_point [ 24, STREET_POINT, 80 65 -0.5 ] +store_suit_point [ 27, STREET_POINT, 92.5 47.5 -0.5 ] +store_suit_point [ 28, STREET_POINT, 95 40 -0.5 ] +store_suit_point [ 29, STREET_POINT, 105 40 -0.5 ] +store_suit_point [ 34, STREET_POINT, 85.784 24.2157 -0.5 ] +store_suit_point [ 35, STREET_POINT, 83.284 11.7157 -0.5 ] +store_suit_point [ 36, STREET_POINT, 93.284 11.7157 -0.5 ] +store_suit_point [ 37, STREET_POINT, 103.284 29.2157 -0.5 ] +store_suit_point [ 42, STREET_POINT, 108.284 -13.2843 -0.5 ] +store_suit_point [ 43, STREET_POINT, 108.284 -3.2843 -0.5 ] +store_suit_point [ 44, STREET_POINT, 100.784 -0.7843 -0.5 ] +store_suit_point [ 45, STREET_POINT, 95.784 4.2157 -0.5 ] +store_suit_point [ 46, STREET_POINT, 125.784 -13.2843 -0.5 ] +store_suit_point [ 47, STREET_POINT, 148.284 -13.2843 -0.5 ] +store_suit_point [ 48, STREET_POINT, 148.284 -3.2843 -0.5 ] +store_suit_point [ 49, STREET_POINT, 125.784 -3.2843 -0.5 ] +store_suit_point [ 50, STREET_POINT, 163.284 11.7157 -0.5 ] +store_suit_point [ 51, STREET_POINT, 160.784 4.2157 -0.5 ] +store_suit_point [ 52, STREET_POINT, 155.784 -0.784298 -0.5 ] +store_suit_point [ 57, STREET_POINT, 173.284 11.7157 -0.5 ] +store_suit_point [ 58, STREET_POINT, 173.284 19.2157 -0.5 ] +store_suit_point [ 61, STREET_POINT, 163.284 16.7157 -0.5 ] +store_suit_point [ 62, STREET_POINT, 151.569 40 -0.5 ] +store_suit_point [ 63, STREET_POINT, 154.069 30 -0.5 ] +store_suit_point [ 64, STREET_POINT, 161.569 35 -0.5 ] +store_suit_point [ 65, STREET_POINT, 161.569 40 -0.5 ] +store_suit_point [ 66, STREET_POINT, 161.569 60 -0.5 ] +store_suit_point [ 67, STREET_POINT, 151.569 60 -0.5 ] +store_suit_point [ 68, STREET_POINT, 80 55 -0.5 ] +store_suit_point [ 69, STREET_POINT, 87.5 52.5 -0.5 ] +store_suit_point [ 70, STREET_POINT, 161.569 75 -0.5 ] +store_suit_point [ 71, STREET_POINT, 176.569 75 -0.5 ] +store_suit_point [ 72, STREET_POINT, 176.569 85 -0.5 ] +store_suit_point [ 73, STREET_POINT, 159.069 85 -0.5 ] +store_suit_point [ 74, STREET_POINT, 151.569 85 -0.5 ] +store_suit_point [ 75, STREET_POINT, 201.569 75 -0.5 ] +store_suit_point [ 76, STREET_POINT, 201.569 60 -0.5 ] +store_suit_point [ 77, STREET_POINT, 216.569 60 -0.5 ] +store_suit_point [ 78, STREET_POINT, 216.569 100 -0.5 ] +store_suit_point [ 79, STREET_POINT, 201.569 100 -0.5 ] +store_suit_point [ 80, STREET_POINT, 201.569 85 -0.5 ] +store_suit_point [ 81, STREET_POINT, 231.569 60 -0.5 ] +store_suit_point [ 82, STREET_POINT, 231.569 75 -0.5 ] +store_suit_point [ 83, STREET_POINT, 256.569 75 -0.5 ] +store_suit_point [ 84, STREET_POINT, 256.569 85 -0.5 ] +store_suit_point [ 85, STREET_POINT, 231.569 85 -0.5 ] +store_suit_point [ 86, STREET_POINT, 231.569 100 -0.5 ] +store_suit_point [ 87, STREET_POINT, 286.569 55 -0.5 ] +store_suit_point [ 88, STREET_POINT, 286.569 62.5 -0.5 ] +store_suit_point [ 89, STREET_POINT, 281.569 72.5 -0.5 ] +store_suit_point [ 90, STREET_POINT, 274.069 80 -0.5 ] +store_suit_point [ 91, STREET_POINT, 264.069 85 -0.5 ] +store_suit_point [ 94, STREET_POINT, 276.569 55 -0.5 ] +store_suit_point [ 95, STREET_POINT, 276.569 15 -0.5 ] +store_suit_point [ 96, STREET_POINT, 286.569 15 -0.5 ] +store_suit_point [ 97, STREET_POINT, 279.069 2.5 -0.5 ] +store_suit_point [ 98, STREET_POINT, 289.069 7.5 -0.5 ] +store_suit_point [ 99, STREET_POINT, 294.037 1.98663 -0.5 ] +store_suit_point [ 100, STREET_POINT, 289.037 -6.67362 -0.5 ] +store_suit_point [ 101, STREET_POINT, 302.027 -14.1736 -0.5 ] +store_suit_point [ 102, STREET_POINT, 294.527 -27.164 -0.5 ] +store_suit_point [ 103, STREET_POINT, 328.678 -18.0134 -0.5 ] +store_suit_point [ 104, STREET_POINT, 285.777 -42.3194 -0.5 ] +store_suit_point [ 105, STREET_POINT, 274.527 -61.805 -0.5 ] +store_suit_point [ 106, STREET_POINT, 372.47 -72.164 -0.5 ] +store_suit_point [ 107, STREET_POINT, 375.64 -56.6736 -0.5 ] +store_suit_point [ 108, STREET_POINT, 372.894 -46.4284 -0.5 ] +store_suit_point [ 109, STREET_POINT, 363.319 -38.0134 -0.5 ] +store_suit_point [ 110, STREET_POINT, 352.494 -31.7634 -0.5 ] +store_suit_point [ 111, STREET_POINT, 352.47 -106.805 -0.5 ] +store_suit_point [ 113, STREET_POINT, 283.678 -95.9557 -0.5 ] +store_suit_point [ 114, STREET_POINT, 318.319 -115.956 -0.5 ] +store_suit_point [ 115, STREET_POINT, 330.394 -120.041 -0.5 ] +store_suit_point [ 116, STREET_POINT, 344.055 -116.38 -0.5 ] +store_suit_point [ 117, STREET_POINT, 267.027 -74.7954 -0.5 ] +store_suit_point [ 118, STREET_POINT, 254.037 -67.2954 -0.5 ] +store_suit_point [ 119, STREET_POINT, 249.037 -75.9557 -0.5 ] +store_suit_point [ 120, STREET_POINT, 268.523 -87.2057 -0.5 ] +store_suit_point [ 121, STREET_POINT, 248.792 -61.3803 -0.5 ] +store_suit_point [ 122, STREET_POINT, 246.962 -54.5502 -0.5 ] +store_suit_point [ 123, STREET_POINT, 248.547 -46.805 -0.5 ] +store_suit_point [ 124, STREET_POINT, 239.886 -41.805 -0.5 ] +store_suit_point [ 125, STREET_POINT, 237.051 -51.7152 -0.5 ] +store_suit_point [ 126, STREET_POINT, 237.632 -60.7104 -0.5 ] +store_suit_point [ 127, STREET_POINT, 241.627 -68.7906 -0.5 ] +store_suit_point [ 128, STREET_POINT, 251.382 -36.8947 -0.5 ] +store_suit_point [ 129, STREET_POINT, 250.801 -27.8995 -0.5 ] +store_suit_point [ 130, STREET_POINT, 246.806 -19.8194 -0.5 ] +store_suit_point [ 131, STREET_POINT, 239.396 -12.6544 -0.5 ] +store_suit_point [ 132, STREET_POINT, 234.396 -21.3146 -0.5 ] +store_suit_point [ 133, STREET_POINT, 239.641 -27.2297 -0.5 ] +store_suit_point [ 134, STREET_POINT, 241.471 -34.0598 -0.5 ] +store_suit_point [ 135, STREET_POINT, 229.486 -9.81942 -0.5 ] +store_suit_point [ 136, STREET_POINT, 220.491 -10.3995 -0.5 ] +store_suit_point [ 137, STREET_POINT, 212.41 -14.3947 -0.5 ] +store_suit_point [ 138, STREET_POINT, 205.245 -21.805 -0.5 ] +store_suit_point [ 139, STREET_POINT, 213.906 -26.805 -0.5 ] +store_suit_point [ 140, STREET_POINT, 219.821 -21.5598 -0.5 ] +store_suit_point [ 141, STREET_POINT, 226.651 -19.7297 -0.5 ] +store_suit_point [ 142, STREET_POINT, 158.284 -10.7843 -0.5 ] +store_suit_point [ 143, STREET_POINT, 165.784 -5.78431 -0.5 ] +store_suit_point [ 144, STREET_POINT, 170.784 1.71569 -0.5 ] +store_suit_point [ 145, STREET_POINT, 85.784 1.7157 -0.5 ] +store_suit_point [ 146, STREET_POINT, 90.784 -5.7843 -0.5 ] +store_suit_point [ 147, STREET_POINT, 98.284 -10.7843 -0.5 ] +store_suit_point [ 148, STREET_POINT, 102.5 50 -0.5 ] +store_suit_point [ 149, STREET_POINT, 97.5 57.5 -0.5 ] +store_suit_point [ 150, STREET_POINT, 90 62.5 -0.5 ] +store_suit_point [ 151, STREET_POINT, 37.5 70 -0.5 ] +store_suit_point [ 152, STREET_POINT, 42.5 62.5 -0.5 ] +store_suit_point [ 153, STREET_POINT, 50 57.5 -0.5 ] +store_suit_point [ 154, STREET_POINT, 50 112.5 -0.5 ] +store_suit_point [ 155, STREET_POINT, 42.5 107.5 -0.5 ] +store_suit_point [ 156, STREET_POINT, 37.5 100 -0.5 ] +store_suit_point [ 157, STREET_POINT, 185.245 -56.446 -0.5 ] +store_suit_point [ 158, STREET_POINT, 193.906 -61.446 -0.5 ] +store_suit_point [ 159, STREET_POINT, 172.745 -78.0966 -0.5 ] +store_suit_point [ 160, STREET_POINT, 181.406 -83.0966 -0.5 ] +store_suit_point [ 161, STREET_POINT, 173.906 -96.087 -0.5 ] +store_suit_point [ 162, STREET_POINT, 182.566 -101.087 -0.5 ] +store_suit_point [ 163, STREET_POINT, 195.066 -79.4364 -0.5 ] +store_suit_point [ 164, STREET_POINT, 186.406 -74.4364 -0.5 ] +store_suit_point [ 165, STREET_POINT, 170.155 -102.582 -0.5 ] +store_suit_point [ 167, STREET_POINT, 183.056 -130.238 -0.5 ] +store_suit_point [ 168, STREET_POINT, 188.056 -121.577 -0.5 ] +store_suit_point [ 169, STREET_POINT, 175.066 -114.077 -0.5 ] +store_suit_point [ 170, STREET_POINT, 204.707 -142.738 -0.5 ] +store_suit_point [ 171, STREET_POINT, 209.707 -134.077 -0.5 ] +store_suit_point [ 172, STREET_POINT, 222.697 -141.577 -0.5 ] +store_suit_point [ 173, STREET_POINT, 227.697 -132.917 -0.5 ] +store_suit_point [ 174, STREET_POINT, 206.046 -120.417 -0.5 ] +store_suit_point [ 175, STREET_POINT, 201.046 -129.077 -0.5 ] +store_suit_point [ 176, STREET_POINT, 235.687 -149.077 -0.5 ] +store_suit_point [ 177, STREET_POINT, 228.187 -162.068 -0.5 ] +store_suit_point [ 178, STREET_POINT, 236.848 -167.068 -0.5 ] +store_suit_point [ 179, STREET_POINT, 245.598 -151.912 -0.5 ] +store_suit_point [ 180, STREET_POINT, 249.348 -145.417 -0.5 ] +store_suit_point [ 181, STREET_POINT, 240.687 -140.417 -0.5 ] +store_suit_point [ 182, STREET_POINT, 215.687 -183.718 -0.5 ] +store_suit_point [ 183, STREET_POINT, 224.348 -188.718 -0.5 ] +store_suit_point [ 184, STREET_POINT, 216.848 -201.709 -0.5 ] +store_suit_point [ 185, STREET_POINT, 225.508 -206.709 -0.5 ] +store_suit_point [ 186, STREET_POINT, 238.008 -185.058 -0.5 ] +store_suit_point [ 187, STREET_POINT, 229.348 -180.058 -0.5 ] +store_suit_point [ 188, STREET_POINT, 213.097 -208.204 -0.5 ] +store_suit_point [ 189, STREET_POINT, 206.847 -219.029 -0.5 ] +store_suit_point [ 190, STREET_POINT, 215.508 -224.029 -0.5 ] +store_suit_point [ 193, STREET_POINT, 200.508 -250.01 -0.5 ] +store_suit_point [ 230, STREET_POINT, 203.097 -225.524 -0.5 ] +store_suit_point [ 231, STREET_POINT, 191.847 -245.01 -0.5 ] +store_suit_point [ 232, STREET_POINT, 184.347 -258 -0.5 ] +store_suit_point [ 233, STREET_POINT, 177.852 -254.25 -0.5 ] +store_suit_point [ 234, STREET_POINT, 171.357 -250.5 -0.5 ] +store_suit_point [ 235, STREET_POINT, 166.357 -259.161 -0.5 ] +store_suit_point [ 236, STREET_POINT, 172.852 -262.911 -0.5 ] +store_suit_point [ 237, STREET_POINT, 188.008 -271.661 -0.5 ] +store_suit_point [ 238, STREET_POINT, 190.508 -267.331 -0.5 ] +store_suit_point [ 239, STREET_POINT, 149.706 -238 -0.5 ] +store_suit_point [ 240, STREET_POINT, 144.706 -246.661 -0.5 ] +store_suit_point [ 241, STREET_POINT, 131.716 -239.161 -0.5 ] +store_suit_point [ 242, STREET_POINT, 126.716 -247.821 -0.5 ] +store_suit_point [ 243, STREET_POINT, 148.367 -260.321 -0.5 ] +store_suit_point [ 244, STREET_POINT, 153.367 -251.661 -0.5 ] +store_suit_point [ 245, STREET_POINT, 97.075 -219.161 -0.5 ] +store_suit_point [ 246, STREET_POINT, 92.075 -227.821 -0.5 ] +store_suit_point [ 247, STREET_POINT, 92.9244 -176.35 -0.5 ] +store_suit_point [ 248, STREET_POINT, 82.9244 -193.67 -0.5 ] +store_suit_point [ 249, STREET_POINT, 91.5846 -198.67 -0.5 ] +store_suit_point [ 250, STREET_POINT, 101.585 -181.35 -0.5 ] +store_suit_point [ 252, STREET_POINT, 89.9997 -206.415 -0.5 ] +store_suit_point [ 253, STREET_POINT, 80.6904 -205.788 -0.5 ] +store_suit_point [ 254, STREET_POINT, 91.9942 -212.923 -0.5 ] +store_suit_point [ 255, STREET_POINT, 82.675 -219.027 -0.5 ] +store_suit_point [ 256, STREET_POINT, 112.835 -161.864 -0.5 ] +store_suit_point [ 257, STREET_POINT, 104.174 -156.864 -0.5 ] +store_suit_point [ 258, STREET_POINT, 114.957 -141.568 -0.5 ] +store_suit_point [ 259, STREET_POINT, 104.801 -141.698 -0.5 ] +store_suit_point [ 260, STREET_POINT, 112.392 -131.531 -0.5 ] +store_suit_point [ 261, STREET_POINT, 107.337 -123.769 -0.5 ] +store_suit_point [ 262, STREET_POINT, 99.8115 -119.075 -0.5 ] +store_suit_point [ 263, STREET_POINT, 89.8115 -116.575 -0.5 ] +store_suit_point [ 264, STREET_POINT, 89.8115 -126.575 -0.5 ] +store_suit_point [ 265, STREET_POINT, 97.3115 -129.075 -0.5 ] +store_suit_point [ 266, STREET_POINT, 102.312 -134.075 -0.5 ] +store_suit_point [ 267, STREET_POINT, 49.8115 -116.575 -0.5 ] +store_suit_point [ 268, STREET_POINT, 49.8115 -126.575 -0.5 ] +store_suit_point [ 272, STREET_POINT, 23.1203 -105.202 -0.5 ] +store_suit_point [ 273, STREET_POINT, 25.6947 -109.641 -0.5 ] +store_suit_point [ 274, STREET_POINT, 34.0186 -119.006 -0.5 ] +store_suit_point [ 275, STREET_POINT, 42.8091 -124.79 -0.5 ] +store_suit_point [ 276, STREET_POINT, 44.2516 -114.861 -0.5 ] +store_suit_point [ 279, STREET_POINT, 30.2953 -92.4957 -0.5 ] +store_suit_point [ 280, STREET_POINT, 32.0663 -85.8387 -0.5 ] +store_suit_point [ 281, STREET_POINT, 37.3115 -79.9236 -0.5 ] +store_suit_point [ 282, STREET_POINT, 32.3115 -71.2634 -0.5 ] +store_suit_point [ 283, STREET_POINT, 24.9013 -78.4284 -0.5 ] +store_suit_point [ 284, STREET_POINT, 20.9061 -86.5086 -0.5 ] +store_suit_point [ 285, STREET_POINT, 20.3259 -95.5037 -0.5 ] +store_suit_point [ 286, STREET_POINT, 36.9144 -108.876 -0.5 ] +store_suit_point [ 287, STREET_POINT, 31.8048 -100.424 -0.5 ] +store_suit_point [ 288, STREET_POINT, 44.7218 -72.7586 -0.5 ] +store_suit_point [ 289, STREET_POINT, 48.717 -64.6784 -0.5 ] +store_suit_point [ 290, STREET_POINT, 49.2971 -55.6832 -0.5 ] +store_suit_point [ 291, STREET_POINT, 46.4622 -45.773 -0.5 ] +store_suit_point [ 292, STREET_POINT, 37.8019 -50.773 -0.5 ] +store_suit_point [ 293, STREET_POINT, 39.3868 -58.5182 -0.5 ] +store_suit_point [ 294, STREET_POINT, 37.5567 -65.3483 -0.5 ] +store_suit_point [ 295, STREET_POINT, 42.7122 -39.2778 -0.5 ] +store_suit_point [ 296, STREET_POINT, 34.2971 -29.7025 -0.5 ] +store_suit_point [ 297, STREET_POINT, 26.217 -25.7073 -0.5 ] +store_suit_point [ 298, STREET_POINT, 17.2218 -25.1272 -0.5 ] +store_suit_point [ 299, STREET_POINT, 7.31152 -27.9621 -0.5 ] +store_suit_point [ 300, STREET_POINT, 12.3115 -36.6224 -0.5 ] +store_suit_point [ 301, STREET_POINT, 20.0567 -35.0374 -0.5 ] +store_suit_point [ 302, STREET_POINT, 26.8868 -36.8675 -0.5 ] +store_suit_point [ 303, STREET_POINT, 32.8019 -42.1127 -0.5 ] +store_suit_point [ 304, STREET_POINT, -0.433675 -29.547 -0.5 ] +store_suit_point [ 305, STREET_POINT, -7.2638 -27.7169 -0.5 ] +store_suit_point [ 306, STREET_POINT, -13.1789 -22.4717 -0.5 ] +store_suit_point [ 307, STREET_POINT, -21.8391 -27.4717 -0.5 ] +store_suit_point [ 308, STREET_POINT, -14.6741 -34.882 -0.5 ] +store_suit_point [ 309, STREET_POINT, -6.59393 -38.8772 -0.5 ] +store_suit_point [ 310, STREET_POINT, 2.40126 -39.4573 -0.5 ] +store_suit_point [ 311, STREET_POINT, -20.3439 -15.0617 -0.5 ] +store_suit_point [ 312, STREET_POINT, -28.4241 -11.0665 -0.5 ] +store_suit_point [ 313, STREET_POINT, -37.4192 -10.4864 -0.5 ] +store_suit_point [ 314, STREET_POINT, -47.3295 -13.3213 -0.5 ] +store_suit_point [ 315, STREET_POINT, -42.3295 -21.9816 -0.5 ] +store_suit_point [ 316, STREET_POINT, -34.5843 -20.3967 -0.5 ] +store_suit_point [ 317, STREET_POINT, -27.7542 -22.2268 -0.5 ] +store_suit_point [ 318, STREET_POINT, -66.8151 -24.5713 -0.5 ] +store_suit_point [ 319, STREET_POINT, -81.9705 -33.3213 -0.5 ] +store_suit_point [ 320, STREET_POINT, -76.9705 -41.9816 -0.5 ] +store_suit_point [ 321, STREET_POINT, -61.8151 -33.2316 -0.5 ] +store_suit_point [ 322, STREET_POINT, -103.621 -45.8213 -0.5 ] +store_suit_point [ 323, STREET_POINT, -98.6212 -54.4816 -0.5 ] +store_suit_point [ 326, FRONT_DOOR_POINT, 62 42 0, 41 ] +store_suit_point [ 327, FRONT_DOOR_POINT, 107 64 0, 4 ] +store_suit_point [ 329, FRONT_DOOR_POINT, 125.569 10 0, 27 ] +store_suit_point [ 330, FRONT_DOOR_POINT, 186.284 9.7157 0, 9 ] +store_suit_point [ 334, STREET_POINT, 266.569 72.5 -0.5 ] +store_suit_point [ 335, STREET_POINT, 274.069 65 -0.5 ] +store_suit_point [ 336, FRONT_DOOR_POINT, 274.069 105 0, 40 ] +store_suit_point [ 338, FRONT_DOOR_POINT, 266.569 3 0, 53 ] +store_suit_point [ 339, FRONT_DOOR_POINT, 359.994 -18.773 0, 10 ] +store_suit_point [ 340, STREET_POINT, 363.47 -87.7524 -0.5 ] +store_suit_point [ 346, FRONT_DOOR_POINT, 190.38 -17.5525 0, 12 ] +store_suit_point [ 348, STREET_POINT, 161.405 -117.738 -0.5 ] +store_suit_point [ 363, SIDE_DOOR_POINT, 45 40 0, 41 ] +store_suit_point [ 364, SIDE_DOOR_POINT, 114.534 24.2157 0, 4 ] +store_suit_point [ 365, SIDE_DOOR_POINT, 102.981 -25.4074 0, 36 ] +store_suit_point [ 366, SIDE_DOOR_POINT, 142.034 10.4657 0, 27 ] +store_suit_point [ 367, SIDE_DOOR_POINT, 136.569 57.5 0, 5 ] +store_suit_point [ 368, SIDE_DOOR_POINT, 178.336 -13.033 0, 9 ] +store_suit_point [ 369, SIDE_DOOR_POINT, 246.569 52.5 0, 6 ] +store_suit_point [ 370, SIDE_DOOR_POINT, 256.569 112.5 0, 55 ] +store_suit_point [ 371, SIDE_DOOR_POINT, 261.569 105 0, 40 ] +store_suit_point [ 372, SIDE_DOOR_POINT, 296.569 20 0, 7 ] +store_suit_point [ 373, SIDE_DOOR_POINT, 276.292 -13.7489 0, 53 ] +store_suit_point [ 375, SIDE_DOOR_POINT, 342.673 -8.77299 0, 10 ] +store_suit_point [ 376, SIDE_DOOR_POINT, 359.21 -125.13 0, 44 ] +store_suit_point [ 377, SIDE_DOOR_POINT, 323.809 -136.446 0, 25 ] +store_suit_point [ 378, SIDE_DOOR_POINT, 280.508 -111.446 0, 13 ] +store_suit_point [ 379, SIDE_DOOR_POINT, 262.051 -8.414 0, 37 ] +store_suit_point [ 380, SIDE_DOOR_POINT, 201.005 0.850543 0, 12 ] +store_suit_point [ 381, SIDE_DOOR_POINT, 199.306 -102.092 0, 16 ] +store_suit_point [ 382, SIDE_DOOR_POINT, 162.901 -130.148 0, 38 ] +store_suit_point [ 385, SIDE_DOOR_POINT, 204.437 -203.204 0, 59 ] +store_suit_point [ 386, SIDE_DOOR_POINT, 213.498 -257.51 0, 18 ] +store_suit_point [ 387, SIDE_DOOR_POINT, 112.386 -262.641 0, 17 ] +store_suit_point [ 388, SIDE_DOOR_POINT, 90.7352 -250.141 0, 15 ] +store_suit_point [ 389, SIDE_DOOR_POINT, 127.41 -161.619 0, 21 ] +store_suit_point [ 390, SIDE_DOOR_POINT, 20.003 -127.444 0, 20 ] +store_suit_point [ 391, SIDE_DOOR_POINT, 66.9525 -51.2634 0, 8 ] +store_suit_point [ 392, SIDE_DOOR_POINT, -74.3151 -11.581 0, 19 ] +store_suit_point [ 393, SIDE_DOOR_POINT, -47.8199 -42.472 0, 22 ] +store_suit_point [ 394, SIDE_DOOR_POINT, 65 90 0, 52 ] +store_suit_point [ 395, SIDE_DOOR_POINT, 19.9915 97.6679 0, 3 ] +store_suit_point [ 396, FRONT_DOOR_POINT, 81.5218 92.5417 0, 52 ] +store_suit_point [ 397, FRONT_DOOR_POINT, 21.0417 82.5813 0, 3 ] +store_suit_point [ 398, FRONT_DOOR_POINT, 72.0566 0.671583 0, 36 ] +store_suit_point [ 399, FRONT_DOOR_POINT, 161.515 99.8757 0, 5 ] +store_suit_point [ 400, FRONT_DOOR_POINT, 228.788 119.735 0, 55 ] +store_suit_point [ 401, FRONT_DOOR_POINT, 216.569 40 0, 6 ] +store_suit_point [ 402, FRONT_DOOR_POINT, 308.99 52.5254 0, 7 ] +store_suit_point [ 403, FRONT_DOOR_POINT, 374.963 -96.9129 0, 44 ] +store_suit_point [ 404, FRONT_DOOR_POINT, 309.266 -126.686 0, 25 ] +store_suit_point [ 405, FRONT_DOOR_POINT, 275.875 -39.3814 0, 11 ] +store_suit_point [ 406, SIDE_DOOR_POINT, 268.413 -52.292 0, 11 ] +store_suit_point [ 407, FRONT_DOOR_POINT, 256.741 -97.3037 0, 13 ] +store_suit_point [ 408, FRONT_DOOR_POINT, 233.369 6.8717 1.90735e-006, 37 ] +store_suit_point [ 409, FRONT_DOOR_POINT, 207.953 -86.9567 0, 16 ] +store_suit_point [ 410, FRONT_DOOR_POINT, 152.766 -92.6484 0, 38 ] +store_suit_point [ 411, FRONT_DOOR_POINT, 250.172 -129.107 0, 54 ] +store_suit_point [ 412, FRONT_DOOR_POINT, 259.205 -156.937 0, 14 ] +store_suit_point [ 413, SIDE_DOOR_POINT, 263.376 -136.311 0, 54 ] +store_suit_point [ 414, SIDE_DOOR_POINT, 253.578 -167.78 0, 14 ] +store_suit_point [ 415, FRONT_DOOR_POINT, 195.545 -218.358 0, 59 ] +store_suit_point [ 416, FRONT_DOOR_POINT, 201.751 -276.768 0, 18 ] +store_suit_point [ 417, FRONT_DOOR_POINT, 168.842 -277.858 0, 17 ] +store_suit_point [ 418, FRONT_DOOR_POINT, 67.9396 -219.613 0, 15 ] +store_suit_point [ 419, FRONT_DOOR_POINT, 129.721 -121.488 0, 21 ] +store_suit_point [ 420, FRONT_DOOR_POINT, 11.7506 -115.203 0, 20 ] +store_suit_point [ 421, FRONT_DOOR_POINT, 52.9857 -27.4682 0, 8 ] +store_suit_point [ 422, FRONT_DOOR_POINT, -57.196 -1.92617 0, 19 ] +store_suit_point [ 423, FRONT_DOOR_POINT, -65.1404 -52.472 0, 22 ] +group "donaldsDreamland" [ + visgroup "9201" [ + vis [ "9201" "9202" "9203" "9205" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 3 0 ] + suit_edge [ 396 3 ] + suit_edge [ 3 396 ] + suit_edge [ 396 2 ] + suit_edge [ 2 396 ] + battle_cell [ 20 20 100 110 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_full_corner" ] + pos [ 120 130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb52:random_DNARoot" [ + pos [ 120 90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 5.87923 -5.78159 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 130 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.453 -6.331 0 ] + nhpr [ 8.58077e-007 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.153 -32.8274 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb52:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Midnight Oil & Gas Company" ] + pos [ 89.0946 89.5081 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + pos [ 0 0 2.34429 ] + scale [ 1.06415 1 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.25098 1 ] + pos [ -0.224386 0 -1.13527 ] + scale [ 0.913338 1 1.47667 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 105 90 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 120 115 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 107.988 90.9562 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "linktunnel_dl_9000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 80 130 0 ] + nhpr [ -0 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0.00229422 0 -3.21825 ] + scale [ 1.32499 1 1.25185 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -0.50457 ] + scale [ 1.68159 1 1.14544 ] + width [ 39.247 ] + height [ 39.247 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + color [ 1 1 0.85098 1 ] + pos [ 0 0 1.55893 ] + scale [ 2 1 2 ] + graphic [ + code [ "donald_DL_SZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -1.61951 ] + scale [ 0.860896 1 1 ] + width [ 46.2492 ] + height [ 46.2492 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 107.562 123.285 -0.500004 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "9202" [ + vis [ "9202" "9201" "9203" "9205" "9206" ] + suit_edge [ 2 4 ] + suit_edge [ 4 5 ] + suit_edge [ 6 7 ] + suit_edge [ 7 3 ] + suit_edge [ 394 7 ] + suit_edge [ 7 394 ] + suit_edge [ 394 4 ] + suit_edge [ 4 394 ] + battle_cell [ 20 20 70 110 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 60 90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb52:random_DNARoot" [ + pos [ 75 90 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 17.7774 -5.11568 0 ] + nhpr [ 90 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 75 80 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 65 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 12.5226 -6.02246 0 ] + nhpr [ -90 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9203" [ + vis [ "9203" "9201" "9202" "9205" "9206" "9207" "9208" ] + suit_edge [ 12 13 ] + suit_edge [ 13 14 ] + suit_edge [ 14 6 ] + suit_edge [ 5 154 ] + suit_edge [ 154 155 ] + suit_edge [ 155 156 ] + suit_edge [ 156 11 ] + suit_edge [ 395 11 ] + suit_edge [ 11 395 ] + suit_edge [ 395 12 ] + suit_edge [ 12 395 ] + battle_cell [ 20 20 45.8702 103.805 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 20 90 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random_DNARoot" [ + pos [ 20 115 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 50 130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6.7547 -1.172 0 ] + nhpr [ -117 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0 0 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 90 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 24.3831 -13.5805 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.7731 -5.65945 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.869781 0.869781 0.869781 ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 5.9893 1.5871 19.7323 ] + nhpr [ 20 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 30 130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8.039 3.3404 18.5999 ] + nhpr [ 4.22897e-007 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 34.6341 124.667 -7.62939e-006 ] + nhpr [ 16.8891 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 29.3059 126.568 -2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "9204" [ + vis [ "9204" "9234" "9233" "9254" "9235" "9239" "9238" "9231" ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 144.396 -177.199 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 154.396 -159.878 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 155.736 -137.558 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 173.056 -147.558 -0.00250148 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb38:random_DNARoot" [ + pos [ 154.396 -159.879 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 146.896 -172.869 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.05881 0.0558861 0.00247096 ] + nhpr [ -1.47878e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 136.896 -190.189 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 6.04254 -10.728 18.4069 ] + nhpr [ 120 0 -0 ] + scale [ 2.13666 2.13666 2.13666 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 129.396 -203.18 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4.17367 0.0309821 0 ] + nhpr [ -1.47878e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 16.9905 -2.11049 6.66804e-006 ] + nhpr [ 180 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 159.886 -180.369 -0.00250148 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 174.037 -205.859 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 7.93277 -15.1099 5.5696 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 9.85883 -23.5 0.00250148 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.52089 -21.6224 0.00247096 ] + nhpr [ 150 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.52242 -21.1989 0.00248622 ] + nhpr [ 180 0 -0 ] + scale [ 1.28934 1.28934 1.28934 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 181.537 -192.869 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.55504 -22.0276 0.00249004 ] + nhpr [ -2.93375e-006 0 -0 ] + scale [ 1.17292 1.17292 1.17292 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 2.32529 -22.7295 0.00249004 ] + nhpr [ 60 0 -0 ] + scale [ 1.13837 1.13837 1.13837 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 164.217 -182.869 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 156.717 -195.859 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 184.706 -177.379 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.0702 -1.44443 0 ] + nhpr [ 135 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 16.0556 -3.62714 0 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 174.248 -165.526 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 187.239 -173.026 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 168.758 -145.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 151.437 -135.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.9854 -1.9056 -1.14441e-005 ] + nhpr [ -0 0 -0 ] + scale [ 1.19701 1.19701 1.19701 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 15.0204 -1.05402 1.52588e-005 ] + nhpr [ -75 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 166.257 -149.366 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 168.758 -145.035 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 183.578 -159.365 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 166.537 -218.849 -0.00250148 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.896 -181.529 -0.00250148 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 167.386 -167.378 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9205" [ + vis [ "9205" "9203" "9202" "9206" "9207" "9208" "9201" ] + suit_edge [ 11 15 ] + suit_edge [ 20 21 ] + suit_edge [ 21 22 ] + suit_edge [ 22 23 ] + suit_edge [ 23 12 ] + suit_edge [ 15 151 ] + suit_edge [ 151 152 ] + suit_edge [ 152 153 ] + suit_edge [ 153 19 ] + suit_edge [ 363 153 ] + suit_edge [ 153 363 ] + suit_edge [ 363 21 ] + suit_edge [ 21 363 ] + suit_edge [ 397 15 ] + suit_edge [ 15 397 ] + suit_edge [ 397 23 ] + suit_edge [ 23 397 ] + battle_cell [ 20 20 43.6687 68.7792 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 60 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_10x40" ] + pos [ 60 80 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb3:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Fly By Night Travel Agency" ] + pos [ 20 72.2654 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.501961 0.501961 0.752941 1 ] + pos [ 0.231055 0 -0.599743 ] + scale [ 0.929182 1 0.755584 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 0.25098 1 ] + pos [ -0.0785351 0 0.580809 ] + scale [ 0.882725 1 0.7 ] + width [ 31.307 ] + height [ 31.307 ] + flags [ "bd" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb52:random_DNARoot" [ + pos [ 55 90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 60 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.8134 -11.2214 2.28882e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 35 40 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.4128 -1.6481 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + scale [ 1.15792 1.15792 1.15792 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.4603 -4.9955 -1.52588e-005 ] + nhpr [ 105 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 1.4917 -1.4434 0 ] + nhpr [ 63 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 55 40 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 16.102 -12.8922 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.22957 1.22957 1.22957 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb3:random_DNARoot" [ + pos [ 20 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.1041 -2.5038 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + scale [ 1.24365 1.24365 1.24365 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.3301 2.3522 19.6677 ] + nhpr [ 12 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + node "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_fightIdle" ] + cell_id [ 0 ] + pos [ 54.9835 75.8832 0 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9206" [ + vis [ "9206" "9205" "9203" "9207" "9208" "9209" "9210" ] + suit_edge [ 24 20 ] + suit_edge [ 19 68 ] + suit_edge [ 326 19 ] + suit_edge [ 19 326 ] + suit_edge [ 326 20 ] + suit_edge [ 20 326 ] + battle_cell [ 20 20 70.3342 60.3614 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 60 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb41:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Don't Let The Bed Bugs Bite" ] + pos [ 69.078 40 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.615686 0.384314 0.176471 1 ] + pos [ 0 0 1.20196 ] + scale [ 0.845056 1 0.689816 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ -0.117016 0 0.499345 ] + scale [ 0.731638 1 1.35203 ] + width [ 33.704 ] + height [ 33.704 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 -0.292272 ] + width [ 31.6785 ] + height [ 31.6785 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "x" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 83.0726 40 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 55 80 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 17.9024 -2.3209 -1.52588e-005 ] + nhpr [ -105 0 -0 ] + scale [ 1.42144 1.42144 1.42144 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 17.6411 -1.5826 3.02221 ] + nhpr [ -117 0 -0 ] + scale [ 0.895142 0.895142 0.895142 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9207" [ + vis [ "9207" "9206" "9205" "9203" "9208" "9209" "9210" ] + suit_edge [ 27 28 ] + suit_edge [ 68 69 ] + suit_edge [ 69 27 ] + suit_edge [ 29 148 ] + suit_edge [ 148 149 ] + suit_edge [ 149 150 ] + suit_edge [ 150 24 ] + suit_edge [ 327 149 ] + suit_edge [ 149 327 ] + suit_edge [ 327 27 ] + suit_edge [ 27 327 ] + battle_cell [ 20 20 94.1752 53.5926 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb4:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Night Owl Pet Shop" ] + pos [ 103.149 71.1177 0 ] + nhpr [ -45 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.25 0.25 0.25 1 ] + pos [ -0.0117327 0 -4.1529 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0.0159257 0 1.21944 ] + scale [ 1.56921 1 1.07442 ] + width [ 16.7691 ] + height [ 16.7691 ] + flags [ "d" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "l" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.501961 0.752941 1 ] + scale [ 1.18026 1 1 ] + width [ 29.3039 ] + height [ 29.3039 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 80 80 0 ] + nhpr [ -15 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 94.4889 76.1177 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ -2.56707e-006 5.1963e-007 0 ] + nhpr [ 2.95756e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 113.756 60.5111 0 ] + nhpr [ -75 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 88.2103 75.5923 0 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 113.525 51.4232 -2.28882e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9208" [ + vis [ "9208" "9207" "9206" "9205" "9203" "9209" "9210" "9211" ] + suit_edge [ 28 34 ] + suit_edge [ 34 35 ] + suit_edge [ 36 37 ] + suit_edge [ 37 29 ] + suit_edge [ 364 37 ] + suit_edge [ 37 364 ] + suit_edge [ 364 34 ] + suit_edge [ 34 364 ] + battle_cell [ 20 20 94.5934 26.556 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 80 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random_DNARoot" [ + pos [ 117.638 46.0222 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 110.09 18.0876 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ 117.59 31.078 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.85074 -6.21302 0 ] + nhpr [ -1.70755e-006 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 19.7433 -15.0845 16.9895 ] + nhpr [ -60 0 -0 ] + scale [ 3.64421 3.64421 3.64421 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 69.8902 7.99806 0 ] + nhpr [ 85 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 12.8379 0.171509 0 ] + nhpr [ -0 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 9.45454 -1.74303 0 ] + nhpr [ -160 0 -0 ] + scale [ 1.30406 1.30406 1.30406 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.33692 -1.48641 0 ] + nhpr [ -130 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 59.9283 8.86962 0 ] + nhpr [ -5 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 69.9432 24.9347 0 ] + nhpr [ 49 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 116.223 38.6322 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9209" [ + vis [ "9209" "9208" "9207" "9206" "9210" "9211" "9212" ] + suit_edge [ 43 44 ] + suit_edge [ 44 45 ] + suit_edge [ 45 36 ] + suit_edge [ 35 145 ] + suit_edge [ 145 146 ] + suit_edge [ 146 147 ] + suit_edge [ 147 42 ] + suit_edge [ 365 42 ] + suit_edge [ 42 365 ] + suit_edge [ 365 43 ] + suit_edge [ 43 365 ] + suit_edge [ 398 145 ] + suit_edge [ 145 398 ] + suit_edge [ 398 45 ] + suit_edge [ 45 398 ] + battle_cell [ 20 20 93.5315 -1.40532 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 108.284 11.7157 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb36:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Dream Jobs Employment Agency" ] + pos [ 72.0413 -7.30968 0 ] + nhpr [ 105 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.501961 1 1 ] + pos [ -6.65536 0 -0.244865 ] + scale [ 0.752 1 0.842995 ] + kern [ 0.0774606 ] + wiggle [ 3.87772 ] + stomp [ -0.0714836 ] + width [ 87.6813 ] + height [ 87.6813 ] + flags [ "bd" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.14902 0.152941 0.34902 1 ] + pos [ -6.77414 0 -0.958666 ] + scale [ 0.609591 1 0.577503 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 92.7108 -23.651 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.70767 19.1875 3.81871 ] + nhpr [ 165 0 -0 ] + scale [ 1.25013 1.25013 1.25013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 14.1397 12.3662 0 ] + nhpr [ 165 0 -0 ] + scale [ 1.6521 1.6521 1.6521 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 112.407 -27.124 0 ] + nhpr [ 170 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 15.4082 -5.38501 -7.6294e-006 ] + nhpr [ 85 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 2.93017 -2.15756 2.58141 ] + nhpr [ 73 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.01389 -1.9586 0 ] + nhpr [ 70 0 -0 ] + scale [ 1.20735 1.20735 1.20735 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 92.7108 -23.6511 0 ] + nhpr [ -130 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 110.67 -36.9721 0 ] + nhpr [ 80 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 79.7223 -16.2973 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.97805 6.46513 0 ] + nhpr [ -165 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 79.3335 -10.3044 -7.62939e-006 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "9210" [ + vis [ "9210" "9209" "9208" "9207" "9206" "9211" "9212" "9213" "9214" "9215" ] + suit_edge [ 42 46 ] + suit_edge [ 46 47 ] + suit_edge [ 48 49 ] + suit_edge [ 49 43 ] + suit_edge [ 329 49 ] + suit_edge [ 49 329 ] + suit_edge [ 329 46 ] + suit_edge [ 46 329 ] + suit_edge [ 366 48 ] + suit_edge [ 48 366 ] + suit_edge [ 366 47 ] + suit_edge [ 47 366 ] + battle_cell [ 20 20 127.358 -8.25511 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 148.284 11.7157 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb36:random_DNARoot" [ + pos [ 131.992 -27.4068 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "donalds_dreamland_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3.2648 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0 0.568627 0 1 ] + pos [ 0 0 -0.635018 ] + scale [ 0.957308 1 1.1128 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 0 1 ] + pos [ -0.222942 0 1.35609 ] + scale [ 0.561101 1 0.557471 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.016 2.5666 19.2248 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 105.09 9.42734 0 ] + nhpr [ 5 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 131.788 10.7347 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 147.592 -27.4068 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 9.224 0.0889003 0 ] + nhpr [ 0.999998 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + landmark_building "tb27:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "You Snooze, You Lose" ] + pos [ 117.327 12.0756 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign3" ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.840175 ] + scale [ 0.885725 1 0.961833 ] + width [ 27.5946 ] + height [ 27.5946 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ ":" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.74902 1 0.74902 1 ] + pos [ 0 0 0.232379 ] + scale [ 0.68508 1 0.58438 ] + width [ 27.6927 ] + height [ 27.6927 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 146.534 -26.2855 0 ] + nhpr [ 180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 112.853 5.79618 0 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "9211" [ + vis [ "9211" "9210" "9209" "9208" "9212" "9213" "9214" "9215" ] + suit_edge [ 50 51 ] + suit_edge [ 51 52 ] + suit_edge [ 52 48 ] + suit_edge [ 47 142 ] + suit_edge [ 142 143 ] + suit_edge [ 143 144 ] + suit_edge [ 144 57 ] + suit_edge [ 330 57 ] + suit_edge [ 57 330 ] + suit_edge [ 330 50 ] + suit_edge [ 50 330 ] + suit_edge [ 368 143 ] + suit_edge [ 143 368 ] + suit_edge [ 368 52 ] + suit_edge [ 52 368 ] + battle_cell [ 20 20 163.078 -0.788414 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random_DNARoot" [ + pos [ 181.432 -8.92604 0 ] + nhpr [ -130 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 175.083 -16.4922 0 ] + nhpr [ -145 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + landmark_building "tb9:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Pipe Dream Plumbers" ] + pos [ 186.569 20.7867 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.913725 0.913725 0.913725 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0.518293 0 -0.328368 ] + scale [ 0.841201 1 0.529807 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0 1 1 ] + pos [ 0 0 0.417437 ] + scale [ 1.21361 1 1.62384 ] + width [ 19.644 ] + height [ 19.644 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 186.535 2.26785 0 ] + nhpr [ -115 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 12.7011 -0.0962933 19.7018 ] + nhpr [ 100 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 7.3794 -4.96446 0 ] + nhpr [ 85 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 166.911 -22.2304 0 ] + nhpr [ -165 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 5.8948 -4.60582 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.71949 1.919 18.3355 ] + nhpr [ -107 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 180.867 -6.35105 0 ] + nhpr [ 60 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9212" [ + vis [ "9212" "9211" "9210" "9209" "9208" "9213" "9214" "9215" "9216" ] + suit_edge [ 57 58 ] + suit_edge [ 61 50 ] + suit_edge [ 62 63 ] + suit_edge [ 63 61 ] + suit_edge [ 58 64 ] + suit_edge [ 64 65 ] + battle_cell [ 20 20 162.947 25.0846 -0.5 ] + group "streets" [ + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 148.284 11.7157 0 ] + nhpr [ -45 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_angle_45_DNARoot" [ + code [ "street_angle_45" ] + pos [ 176.569 40 0 ] + nhpr [ 135 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 151.788 10.7347 0 ] + nhpr [ 125 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 171.569 45 0 ] + nhpr [ -55 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.25848 -5.58958 2.28882e-005 ] + nhpr [ -95 0 -0 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 183.041 28.617 0 ] + nhpr [ -75 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 140.311 27.1125 0 ] + nhpr [ 105 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 0.409073 -2.21535 2.28882e-005 ] + nhpr [ -150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.3336 -1.62 -3.05176e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 11.3065 -1.29135 0 ] + nhpr [ 138 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9213" [ + vis [ "9212" "9211" "9213" "9210" "9214" "9215" "9216" "9217" ] + suit_edge [ 65 66 ] + suit_edge [ 67 62 ] + suit_edge [ 367 67 ] + suit_edge [ 67 367 ] + suit_edge [ 367 66 ] + suit_edge [ 66 367 ] + battle_cell [ 20 20 156.487 49.9005 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_20x40" ] + pos [ 176.569 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.686 -5.67 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 50 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 171.569 60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.6554 1.628 16.3103 ] + nhpr [ -89 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9214" [ + vis [ "9214" "9213" "9212" "9211" "9215" "9216" "9217" "9210" "9218" ] + suit_edge [ 66 70 ] + suit_edge [ 70 71 ] + suit_edge [ 72 73 ] + suit_edge [ 73 74 ] + suit_edge [ 74 67 ] + suit_edge [ 399 73 ] + suit_edge [ 73 399 ] + suit_edge [ 399 70 ] + suit_edge [ 70 399 ] + battle_cell [ 20 20 156.595 79.5709 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 136.569 60 2.28882e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 65 0 ] + nhpr [ 90 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 21.0066 -6.816 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.6911 2.007 18.4855 ] + nhpr [ 12 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 85.7 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 176.569 100 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.541 0.94099 18.2261 ] + nhpr [ -2 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 171.569 135 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 156.569 135 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Asleep At The Wheel Car Repair" ] + pos [ 154.387 100.141 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.11184 ] + scale [ 0.65292 1 0.60509 ] + baseline [ + code [ "humanist" ] + color [ 0.776471 0 0.388235 1 ] + pos [ 0 0 0.740916 ] + scale [ 0.994616 1 0.824829 ] + width [ 36.6613 ] + height [ 36.6613 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.658824 0.658824 1 ] + pos [ 0 0 -0.163427 ] + width [ 31.8524 ] + height [ 31.8524 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 166.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 136.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 27.223 -28.6328 26.4696 ] + nhpr [ -180 0 -0 ] + scale [ 3.21008 3.21008 3.21008 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 138.21 70.5923 0 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 173.503 95.8773 2.28882e-005 ] + nhpr [ -17.5006 0 -0 ] + ] + ] + visgroup "9215" [ + vis [ "9215" "9214" "9213" "9212" "9211" "9210" "9216" "9217" "9218" ] + suit_edge [ 71 75 ] + suit_edge [ 75 76 ] + suit_edge [ 76 77 ] + suit_edge [ 78 79 ] + suit_edge [ 79 80 ] + suit_edge [ 80 72 ] + battle_cell [ 20 20 196.165 80.1002 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 176.569 45 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb6:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Tooth Fairy Dentistry" ] + pos [ 225.044 39.8469 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.461693 0 0.903882 ] + baseline [ + code [ "DL_JiggeryPokery" ] + pos [ 0 0 0.227025 ] + scale [ 0.940191 1 0.7 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 1 0.0352941 1 ] + pos [ 0 0 1.13657 ] + scale [ 1.22391 1 1 ] + width [ 33.5926 ] + height [ 33.5926 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 176.569 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 135 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 115 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6.80299 -21.8678 2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.17101 -5.317 2.10126 ] + nhpr [ 135 0.0825656 -0.317094 ] + scale [ 0.726884 0.726884 0.726884 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.17599 -1.652 2.12898 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.62 -1.535 -1.52588e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.77 2.165 28.634 ] + nhpr [ 84 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 201.569 120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 186.569 100 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 115 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 206.569 130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 186.569 60 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 1.754 1.2418 19.2071 ] + nhpr [ 37 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.256 -6.41686 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.809653 0.809653 0.809653 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 186.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 26.7551 -6.767 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 7.7173 -2.08579e-006 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 226.569 40.821 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 1.99225 -31.7626 -0.521616 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 16.9303 -31.7689 -0.521595 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 16.9247 -46.7426 -0.512082 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 1.71529 -46.7582 -0.336 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -36.7263 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -41.7262 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03995 -46.7262 -0.543433 ] + nhpr [ 90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 7.0399 -46.7262 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 12.0399 -46.7263 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.0399 -46.7263 -0.543433 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.0399 -41.7263 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.04 -36.7263 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 17.04 -31.7262 -0.543433 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 2.03997 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 7.03995 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 12.04 -31.7263 -0.543433 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_mickey_on_horse" ] + pos [ 9.99999 -39.179 0 ] + nhpr [ 90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 37.723 -72.065 -1.52588e-005 ] + nhpr [ 120 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 37.896 -68.881 -1.52588e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 211.569 40 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.6663 -6.62086 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 202.463 113.743 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 213.098 109.023 -1.52588e-005 ] + nhpr [ -30 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 188.401 105.55 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "9216" [ + vis [ "9216" "9215" "9214" "9213" "9212" "9217" "9220" "9219" "9218" "9222" "9223" "9224" "9221" ] + suit_edge [ 77 81 ] + suit_edge [ 81 82 ] + suit_edge [ 82 83 ] + suit_edge [ 84 85 ] + suit_edge [ 85 86 ] + suit_edge [ 86 78 ] + suit_edge [ 369 81 ] + suit_edge [ 81 369 ] + suit_edge [ 370 86 ] + suit_edge [ 86 370 ] + suit_edge [ 400 86 ] + suit_edge [ 86 400 ] + suit_edge [ 401 77 ] + suit_edge [ 77 401 ] + battle_cell [ 20 20 236.702 79.9165 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_divided_transition_15" ] + pos [ 256.569 115 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb55:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Bedknobs & Broomsticks Movie House" ] + pos [ 218.565 120.173 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_marquee" ] + pos [ 10 1.41611 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 -1.58504 ] + scale [ 0.994707 1 1.45858 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "mickey" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 246.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 256.569 120 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.537 -2.06501 -1.52588e-005 ] + nhpr [ 30 0 -0 ] + scale [ 0.789565 0.789565 0.789566 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.738 -1.30401 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + scale [ 0.762505 0.762505 0.762505 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 261.569 65 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 246.569 65 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ 236.569 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 9.39101 0.052002 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 1.636 -9.33 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 3.327 -26.6292 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 246.569 40.821 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 18.547 -5.6525 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.757557 0.757557 0.757557 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 6.92199 -26.1606 2.28882e-005 ] + nhpr [ -1.00179e-005 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 247.009 97.0516 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + pos [ 231.034 51.6699 2.28882e-005 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "9217" [ + vis [ "9217" "9216" "9215" "9214" "9213" "9218" "9221" "9225" "9224" "9223" "9222" "9220" "9219" ] + suit_edge [ 87 88 ] + suit_edge [ 88 89 ] + suit_edge [ 89 90 ] + suit_edge [ 90 91 ] + suit_edge [ 91 84 ] + suit_edge [ 83 334 ] + suit_edge [ 335 94 ] + suit_edge [ 334 335 ] + suit_edge [ 336 90 ] + suit_edge [ 90 336 ] + suit_edge [ 336 334 ] + suit_edge [ 334 336 ] + suit_edge [ 371 91 ] + suit_edge [ 91 371 ] + suit_edge [ 371 83 ] + suit_edge [ 83 371 ] + battle_cell [ 20 20 273.213 73.5494 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner_15" ] + pos [ 256.569 95 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb40:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Hit The Sack Fencing School" ] + pos [ 266.569 105 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0.128269 0 -3.39044 ] + scale [ 1 1 0.855724 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ 0 0 1.93137 ] + scale [ 1.08701 1 1.33553 ] + width [ 3.87752 ] + height [ 3.87752 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.435294 0 0.435294 1 ] + pos [ 0 0 1.09553 ] + scale [ 0.644495 1 0.837536 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.443137 0.721569 1 ] + pos [ 0.0930186 0 -0.0319999 ] + scale [ 1.41824 1 1.42881 ] + width [ 362.828 ] + height [ 362.828 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 0.501961 1 ] + pos [ 0.07803 0 -1.64222 ] + scale [ 1.30426 1 1.86083 ] + stumble [ 0.091158 ] + width [ 46.0647 ] + height [ 46.0647 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 281.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 10.381 -4.818 0 ] + nhpr [ -57 0 -0 ] + scale [ 0.771722 0.771722 0.771722 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.621 -8.0131 0.128048 ] + nhpr [ -30 0 -0 ] + scale [ 0.765124 0.765124 0.765124 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 120 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 296.569 90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 311.569 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.569 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.82504 -1.35843 0 ] + nhpr [ 15 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.45706 -4.75485 0 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 311.569 90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 326.569 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 326.569 75 0 ] + nhpr [ -5 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 341.569 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 341.569 60 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ 256.569 105 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 3.07501 4.741 18.6026 ] + nhpr [ -179 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.569 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.61869 -5.95599 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -0.816708 -17.5436 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.0563 21.497 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.53829 1.53829 1.53829 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -3.873 -22.327 23.9689 ] + nhpr [ -90 0 -0 ] + scale [ 2.95259 2.95259 2.95259 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 286.569 102.5 0 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 302.708 82.6344 0 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "9218" [ + vis [ "9218" "9217" "9216" "9215" "9219" "9220" "9221" "9222" "9223" "9224" "9225" "9214" ] + suit_edge [ 94 95 ] + suit_edge [ 96 87 ] + suit_edge [ 372 96 ] + suit_edge [ 96 372 ] + suit_edge [ 372 95 ] + suit_edge [ 95 372 ] + suit_edge [ 402 87 ] + suit_edge [ 87 402 ] + suit_edge [ 402 94 ] + suit_edge [ 94 402 ] + battle_cell [ 20 20 281.532 34.8645 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 261.569 55 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 301.569 15 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb7:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Dawn's Yawn & Garden Center" ] + pos [ 309.106 59.2976 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 1 0.501961 1 ] + pos [ -6.86992 0 1.17077 ] + scale [ 1.2862 1 1.54342 ] + stomp [ 0.0926768 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.658824 0 1 ] + pos [ -6.81464 0 0 ] + scale [ 0.595161 1 1 ] + kern [ 0.028386 ] + wiggle [ -4.83405 ] + stomp [ 0.05502 ] + flags [ "d" ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 311.569 25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 262.886 10.0644 0 ] + nhpr [ 95 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 4.4178 -5.92057 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 261.569 25 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.0416 0.891997 20 ] + nhpr [ -0 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 246.569 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 296.569 25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 261.569 40 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 306.714 45 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 19.9628 0.226807 0 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 316.714 45 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 266.621 47.0541 -1.52588e-005 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "9219" [ + vis [ "9219" "9218" "9217" "9216" "9220" "9221" "9222" "9223" "9224" "9225" ] + suit_edge [ 95 97 ] + suit_edge [ 98 96 ] + suit_edge [ 99 98 ] + suit_edge [ 97 100 ] + suit_edge [ 338 97 ] + suit_edge [ 97 338 ] + suit_edge [ 338 98 ] + suit_edge [ 98 338 ] + suit_edge [ 373 100 ] + suit_edge [ 100 373 ] + suit_edge [ 373 99 ] + suit_edge [ 99 373 ] + battle_cell [ 20 20 284.556 5.11254 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_angle_60" ] + pos [ 301.569 15 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb53:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Moonbeam's Ice Creams" ] + pos [ 267.467 -6.80414 0 ] + nhpr [ 105 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.384314 0.384314 1 1 ] + pos [ 0.278437 0 -0.409452 ] + scale [ 0.906646 1 0.437504 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 1 1 1 ] + pos [ 0 0 1.10495 ] + scale [ 0.868682 1 1.00503 ] + width [ 26.0386 ] + height [ 26.0386 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + width [ 39.3878 ] + height [ 39.3878 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb53:random_DNARoot" [ + pos [ 285.899 -22.1411 0 ] + nhpr [ 135 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 15.9381 -22.4393 26.9205 ] + nhpr [ -150 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.3631 2.60985 22.1846 ] + nhpr [ -47 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 272.798 -7.73785 0 ] + nhpr [ -45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9220" [ + vis [ "9220" "9219" "9218" "9217" "9216" "9221" "9222" "9223" "9224" "9225" "9226" ] + suit_edge [ 100 101 ] + suit_edge [ 101 102 ] + suit_edge [ 103 99 ] + battle_cell [ 20 20 307.869 -13.4165 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 281.537 -19.664 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random_DNARoot" [ + pos [ 296.569 15 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 23.4532 1.96186 29.4658 ] + nhpr [ 114 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 318.22 2.5 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 318.889 5 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.63439 -1.78691 -1.52588e-005 ] + nhpr [ 15 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 13.485 -6.56077 2.28882e-005 ] + nhpr [ -90 -1.00179e-005 -6.56845e-013 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 313.032 4.10216 0 ] + nhpr [ 150 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9221" [ + vis [ "9221" "9220" "9219" "9218" "9217" "9216" "9222" "9223" "9224" "9225" "9226" ] + suit_edge [ 102 104 ] + suit_edge [ 104 105 ] + suit_edge [ 405 104 ] + suit_edge [ 104 405 ] + suit_edge [ 406 105 ] + suit_edge [ 105 406 ] + battle_cell [ 20 20 289.507 -46.1301 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 296.178 -74.305 -3.8147e-006 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb11:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Wake-Up Call Phone Company" ] + pos [ 272.135 -45.9607 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign3" ] + pos [ 0 0 1.34915 ] + scale [ 0.64845 1 0.566744 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0 1 ] + pos [ 0 0 0.541232 ] + nhpr [ -0 0 -0.337531 ] + scale [ 0.7 1 1.00801 ] + wiggle [ 1.25973 ] + stumble [ 0.0302791 ] + stomp [ -0.067041 ] + width [ 28.6372 ] + height [ 28.6372 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 278.399 -35.1315 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 263.399 -61.1123 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 284.182 -28.1167 -3.8147e-006 ] + nhpr [ 45 0 0 ] + ] + ] + visgroup "9222" [ + vis [ "9222" "9221" "9220" "9219" "9218" "9217" "9216" "9223" "9224" "9225" "9226" ] + suit_edge [ 106 107 ] + suit_edge [ 107 108 ] + suit_edge [ 108 109 ] + suit_edge [ 109 110 ] + suit_edge [ 110 103 ] + suit_edge [ 339 110 ] + suit_edge [ 110 339 ] + suit_edge [ 375 103 ] + suit_edge [ 103 375 ] + battle_cell [ 20 20 360.289 -42.0271 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 316.178 -39.664 1.52588e-005 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 370.819 -25.0229 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb10:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "REM Optometry" ] + pos [ 353.531 -15 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -1.01431 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.678466 ] + nhpr [ -0 0 1.69575 ] + scale [ 1.8012 1 1.78279 ] + width [ 28.4438 ] + height [ 28.4438 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.94902 1 0.34902 1 ] + pos [ -0.0993497 0 1.37372 ] + nhpr [ -0 0 1.35061 ] + scale [ 3.43584 1 1.22999 ] + kern [ 0.117277 ] + width [ 23.3532 ] + height [ 23.3532 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 383.841 -32.5 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.47746 2.79695 19.4272 ] + nhpr [ 114 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 392.502 -37.5 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 397.992 -57.9904 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2.09249 0.111097 -1.52588e-005 ] + nhpr [ 4.57536e-007 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 2.27233 -15.1472 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 392.992 -66.6506 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 9.99987 -2.96766 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.75 0.75 0.75 1 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -0.582935 ] + scale [ 0.909105 1 0.873139 ] + kern [ 0.0717778 ] + flags [ "bd" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 6.94618 2.33489 19.0268 ] + nhpr [ -88 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "animated_prop_SleepingHydrantAnimatedProp_DNARoot" [ + code [ "prop_DL_hydrant" ] + pos [ 14.8285 -8.31821 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 10.1733 -36.0779 2.28882e-005 ] + nhpr [ -90 1.00179e-005 6.56845e-013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 21.8615 -34.8954 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.10535 1.10535 1.10535 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 331.88 -2.5 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 17.0272 -5.78399 0 ] + nhpr [ 4.00117e-006 0 -0 ] + scale [ 0.691029 0.691029 0.691029 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ -1.62024 -33.7577 2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 0.438623 -45.7897 0 ] + nhpr [ 3.04139e-006 0 -0 ] + scale [ 1.2154 1.2154 1.2154 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 25.9743 -36.8208 0 ] + nhpr [ 2.95756e-006 0 -0 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 366.521 -22.5 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 11.9621 -5.69304 0 ] + nhpr [ -3.18633e-006 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 19.7891 0.0381873 -1.52588e-005 ] + nhpr [ -3.18633e-006 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 9.8798 -33.3543 29.0169 ] + nhpr [ -2.61839e-006 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 405.492 -45 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.4362 -1.77588 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.39085 -4.19687 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 349.668 -17.0469 1.52588e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "9223" [ + vis [ "9223" "9222" "9221" "9220" "9216" "9224" "9225" "9226" "9219" "9218" "9217" ] + suit_edge [ 340 106 ] + suit_edge [ 111 340 ] + suit_edge [ 403 340 ] + suit_edge [ 340 403 ] + battle_cell [ 20 20 357.426 -87.7625 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 365.46 -114.305 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 296.178 -74.305 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb44:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Rip Van Winkle's Wrinkle Cream" ] + pos [ 379.551 -89.9321 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.920151 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 1.04573 ] + scale [ 1.42699 1 0.7 ] + width [ 27.7316 ] + height [ 27.7316 ] + flags [ "d" ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.866667 0.866667 0 1 ] + pos [ 0 0 0.369075 ] + nhpr [ -0 0 -2.00602 ] + scale [ 1 1 0.67903 ] + wiggle [ 2.92587 ] + stomp [ 0.026077 ] + width [ 27.2015 ] + height [ 27.2015 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 372.992 -101.292 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.2228 0.0593651 -1.52588e-005 ] + nhpr [ -4.66511e-006 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.79169 -35.3987 0 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 19.5701 -35.8164 2.28882e-005 ] + nhpr [ -90 -1.00179e-005 -6.56845e-013 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 1.89525 -50.2161 -1.52588e-005 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 4.15393 -52.0632 -1.52588e-005 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.3951 -54.865 -1.52588e-005 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.24694 -5.38613 0 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + scale [ 0.83092 0.83092 0.83092 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 382.992 -83.9711 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + landmark_building "tb56:toon_landmark_hqDL_DNARoot" [ + code [ "toon_landmark_hqDL" ] + building_type [ "hq" ] + title [ "" ] + pos [ 322.91 -67.1147 0 ] + nhpr [ 60 0 -0 ] + ] + ] + ] + visgroup "9224" [ + vis [ "9224" "9223" "9222" "9221" "9220" "9219" "9218" "9217" "9216" "9225" "9226" "9227" "9228" ] + suit_edge [ 113 114 ] + suit_edge [ 114 115 ] + suit_edge [ 115 116 ] + suit_edge [ 116 111 ] + suit_edge [ 376 116 ] + suit_edge [ 116 376 ] + suit_edge [ 377 115 ] + suit_edge [ 115 377 ] + suit_edge [ 378 113 ] + suit_edge [ 113 378 ] + suit_edge [ 404 114 ] + suit_edge [ 114 404 ] + battle_cell [ 20 20 325.38 -113.262 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 365.46 -114.305 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_40x40" ] + pos [ 276.178 -108.946 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb44:random_DNARoot" [ + pos [ 355.492 -131.603 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.1706 2.25776 15.8763 ] + nhpr [ -88 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 14.694 -6.11876 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 345.492 -148.923 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ 362.992 -118.612 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 14.5745 -13.5097 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 289.2 -116.423 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 21.0146 -6.84239 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 21.6222 -33.2008 2.28882e-005 ] + nhpr [ 1.70755e-006 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 18.999 -44.9032 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.36985 1.36985 1.36985 ] + ] + ] + landmark_building "tb25:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Cat's Pajamas" ] + pos [ 317.522 -132.921 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.606069 0 -0.483425 ] + nhpr [ -0 0 1.93027 ] + scale [ 0.87025 1 0.517336 ] + baseline [ + code [ "humanist" ] + color [ 1 0.415686 0.133333 1 ] + pos [ -0.0975055 0 0.0766824 ] + scale [ 0.873244 1 3.11655 ] + width [ 22.5194 ] + height [ 22.5194 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "j" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 332.501 -141.423 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 302.191 -123.923 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 16.4379 0.102715 21.5426 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 16.9171 -5.39527 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 14.9344 -35.7371 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.31868 1.31868 1.31868 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 334.289 -137.412 -7.62939e-006 ] + nhpr [ 162.691 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 337.499 -142.202 7.62939e-006 ] + nhpr [ 150 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 348.605 -139.338 -7.62939e-006 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "9225" [ + vis [ "9225" "9224" "9223" "9222" "9221" "9220" "9219" "9218" "9217" "9226" "9227" "9228" ] + suit_edge [ 105 117 ] + suit_edge [ 117 118 ] + suit_edge [ 119 120 ] + suit_edge [ 120 113 ] + suit_edge [ 407 120 ] + suit_edge [ 120 407 ] + suit_edge [ 407 117 ] + suit_edge [ 117 407 ] + battle_cell [ 20 20 269.329 -80.88 -0.5 ] + group "streets" [ + street "street_40x20_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 296.178 -74.305 -1.14441e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb13:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Wynken, Blynken & Nod, Attorneys at Law" ] + pos [ 262.87 -102.106 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "tunnel_sign_blue" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -2.59545 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 1.50608 ] + scale [ 0.7 1 1.03617 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 0.409213 ] + scale [ 0.620069 1 1.18694 ] + kern [ 0.0260926 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.996078 0.65098 0.00392157 1 ] + pos [ 0 0 -1.40453 ] + scale [ 1.19181 1 1.50774 ] + kern [ 0.0797818 ] + width [ 92.9174 ] + height [ 92.9174 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 250.229 -93.9231 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 0.815625 -18.8387 16.9912 ] + nhpr [ -165 0 -0 ] + scale [ 3.05717 3.05717 3.05717 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 271.88 -106.423 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 248.745 -91.395 -1.52588e-005 ] + nhpr [ 150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 265.93 -59.9049 -1.14441e-005 ] + nhpr [ 30 0 0 ] + ] + ] + visgroup "9226" [ + vis [ "9226" "9227" "9228" "9225" "9224" "9223" "9222" "9221" "9220" ] + suit_edge [ 118 121 ] + suit_edge [ 121 122 ] + suit_edge [ 122 123 ] + suit_edge [ 124 125 ] + suit_edge [ 125 126 ] + suit_edge [ 126 127 ] + suit_edge [ 127 119 ] + battle_cell [ 20 20 242.424 -59.8799 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 241.537 -88.946 2.28882e-005 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random_DNARoot" [ + pos [ 237.239 -86.4231 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.38301 2.27452 18.2286 ] + nhpr [ 2.00001 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 228.579 -81.4231 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.01254 -12.2538 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 9.80536 -16.5254 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.9492 -2.12469 2.28882e-005 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 215.589 -73.9231 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 3 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 225.589 -56.6026 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 221.258 -54.1026 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 254.739 -56.1123 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 224.87 -52.7145 2.28882e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + visgroup "9227" [ + vis [ "9227" "9226" "9225" "9228" "9229" "9230" "9231" "9224" ] + suit_edge [ 123 128 ] + suit_edge [ 128 129 ] + suit_edge [ 129 130 ] + suit_edge [ 130 131 ] + suit_edge [ 132 133 ] + suit_edge [ 133 134 ] + suit_edge [ 134 124 ] + suit_edge [ 379 130 ] + suit_edge [ 130 379 ] + suit_edge [ 379 133 ] + suit_edge [ 133 379 ] + battle_cell [ 20 20 245.937 -28.3708 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 246.896 0.336018 -7.62939e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random_DNARoot" [ + pos [ 231.259 -36.7821 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 264.739 -38.7918 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 272.239 -25.8014 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.7965 -10.5987 2.28882e-005 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 272.909 -14.6412 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 263.578 -20.8014 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 268.578 -12.1411 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 251.258 -2.14112 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 267.909 -23.3014 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 262.922 -14.4087 -7.62939e-006 ] + nhpr [ -105.365 0 -0 ] + ] + ] + visgroup "9228" [ + vis [ "9228" "9227" "9226" "9225" "9224" "9229" "9230" "9231" "9232" ] + suit_edge [ 131 135 ] + suit_edge [ 135 136 ] + suit_edge [ 136 137 ] + suit_edge [ 137 138 ] + suit_edge [ 139 140 ] + suit_edge [ 140 141 ] + suit_edge [ 141 132 ] + suit_edge [ 380 137 ] + suit_edge [ 137 380 ] + suit_edge [ 380 140 ] + suit_edge [ 140 380 ] + suit_edge [ 408 135 ] + suit_edge [ 135 408 ] + suit_edge [ 408 140 ] + suit_edge [ 140 408 ] + battle_cell [ 20 20 221.801 -15.2379 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 192.255 -14.3049 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb37:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Waltzing Matilda's Dance School" ] + pos [ 226.872 12.4693 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 1.06581 ] + scale [ 0.702004 1 0.958468 ] + baseline [ + code [ "humanist" ] + color [ 0.501961 1 0.501961 1 ] + pos [ 0 0 0.639753 ] + scale [ 0.988508 1 0.904735 ] + kern [ 0.0632861 ] + wiggle [ -3.67194 ] + stomp [ 0.0546312 ] + width [ 29.8081 ] + height [ 29.8081 ] + flags [ "bd" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.701961 0.34902 1 ] + pos [ 0 0 -0.213058 ] + kern [ 0.0841751 ] + stomp [ 0.0627531 ] + width [ 25.3254 ] + height [ 25.3254 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 235.277 30.1794 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 212.287 20.3589 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.52499 9.57859 0 ] + nhpr [ 3.912e-006 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 207.287 11.6986 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 194.787 -9.95201 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 3 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 16.2495 0.0562993 -3.05176e-005 ] + nhpr [ -1.25001e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 7.99877 0.316833 31.1881 ] + nhpr [ 24 0 -0 ] + scale [ 1.57947 1.57947 1.57947 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 18.4558 -16.0227 2.28882e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 225.277 12.8589 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 15.253 -22.167 17.5977 ] + nhpr [ -150 0 -0 ] + scale [ 3.15622 3.15622 3.15622 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 238.267 5.35888 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 13.9461 -6.27329 0 ] + nhpr [ 2.12249e-006 0 -0 ] + scale [ 0.839676 0.839676 0.839676 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 220 15 0 ] + nhpr [ -30 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9229" [ + vis [ "9229" "9228" "9227" "9230" "9231" "9232" ] + suit_edge [ 138 157 ] + suit_edge [ 158 139 ] + suit_edge [ 346 138 ] + suit_edge [ 138 346 ] + suit_edge [ 346 139 ] + suit_edge [ 139 346 ] + battle_cell [ 20 20 198.766 -42.5383 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 206.896 -68.946 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random_DNARoot" [ + pos [ 214.428 -55.9327 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 11.4996 -5.47117 0 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 210.098 -53.4327 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb12:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Counting Sheep So You Don't Have To!" ] + pos [ 185.836 -25.1284 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0.303842 0 -0.245498 ] + scale [ 0.713734 1 0.769229 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0 1 1 ] + pos [ 0 0 0.982449 ] + nhpr [ -0 0 -1.13872 ] + scale [ 1.16895 1 0.981278 ] + width [ 24.3057 ] + height [ 24.3057 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.501961 0 1 1 ] + pos [ 0 0 0.352727 ] + nhpr [ -0 0 -0.926634 ] + scale [ 1.15864 1 0.471272 ] + width [ 26.2863 ] + height [ 26.2863 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 222.598 -31.7821 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 179.787 -35.9328 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 169.787 -53.2533 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.7116 -5.82453 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.778183 0.778183 0.778183 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 182.904 -32.4911 -1.52588e-005 ] + nhpr [ -120 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 179.267 -49.6409 -7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "9230" [ + vis [ "9230" "9229" "9228" "9227" "9231" "9232" "9233" "9234" ] + suit_edge [ 157 159 ] + suit_edge [ 159 160 ] + suit_edge [ 160 161 ] + suit_edge [ 162 163 ] + suit_edge [ 163 164 ] + suit_edge [ 164 158 ] + suit_edge [ 381 162 ] + suit_edge [ 162 381 ] + suit_edge [ 381 161 ] + suit_edge [ 161 381 ] + suit_edge [ 409 163 ] + suit_edge [ 163 409 ] + suit_edge [ 409 160 ] + suit_edge [ 160 409 ] + battle_cell [ 20 20 184.094 -78.9252 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 215.556 -73.946 3.05176e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 142.434 -60.5966 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb16:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Wet Blanket Party Planners" ] + pos [ 213.928 -80.856 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign1" ] + color [ 0.75 0.75 0.75 1 ] + pos [ 0 0 0.860739 ] + scale [ 0.877658 1 0.824789 ] + baseline [ + code [ "mickey" ] + color [ 0.541176 0.756863 1 1 ] + pos [ 0 0 0.355259 ] + scale [ 0.64796 1 1.51096 ] + kern [ 0.0534257 ] + width [ 22.3396 ] + height [ 22.3396 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 152.466 -43.2533 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 164.117 -73.0738 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.3305 -1.40717 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 11.0598 -1.35815 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 7.8076 -1.31717 -1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ -0.927475 11.9586 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 206.928 -68.9231 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 215.588 -73.9231 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.86966 -16.8034 2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 205.562 -91.2891 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 5.41865 -5.74656 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 26.3091 -6.60191 2.28882e-005 ] + nhpr [ -1.70755e-006 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.617 -86.0642 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.9998 0.000473022 0 ] + nhpr [ 90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 7.30262 -12.0325 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 139.296 -76.0641 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 142.466 -60.5738 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.02431 1.52438 19.959 ] + nhpr [ 42 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 5.19602 -5.24578 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.848496 0.848496 0.848496 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 14.6072 -1.99346 -1.52588e-005 ] + nhpr [ -180 0 -0 ] + scale [ 1.74349 1.74349 1.74349 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 18.6042 -7.29416 1.52588e-005 ] + nhpr [ -165 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 209.688 -76.4014 7.62939e-006 ] + nhpr [ -105 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 154.992 -46.6806 3.05176e-005 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "9231" [ + vis [ "9231" "9204" "9230" "9229" "9228" "9227" "9232" "9233" "9234" "9254" ] + suit_edge [ 161 165 ] + suit_edge [ 168 169 ] + suit_edge [ 169 162 ] + suit_edge [ 165 348 ] + suit_edge [ 348 167 ] + suit_edge [ 382 348 ] + suit_edge [ 348 382 ] + suit_edge [ 382 169 ] + suit_edge [ 169 382 ] + suit_edge [ 410 165 ] + suit_edge [ 165 410 ] + suit_edge [ 410 169 ] + suit_edge [ 169 410 ] + battle_cell [ 20 20 170.888 -115.505 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 175.556 -143.228 -8.39233e-005 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 155.915 -97.2464 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 140.915 -123.228 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 160.916 -88.5871 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb38:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "House of Zzzzzs" ] + pos [ 148.818 -97.5354 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + color [ 0.75 0.75 0.75 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0.647059 0.290196 1 1 ] + pos [ 0.120014 0 1.44206 ] + scale [ 1.46718 1 1.37518 ] + width [ 31.1293 ] + height [ 31.1293 ] + flags [ "d" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 128.595 -104.568 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 138.595 -87.2472 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.585 -112.068 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 145.947 -114.545 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 140.946 -123.206 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 136.585 -120.728 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 140.915 -123.228 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 135.915 -131.888 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 130.915 -140.549 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.49331 1.4753 29.6619 ] + nhpr [ 24 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 143.905 -148.049 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1852 -1.91149 2.89021 ] + nhpr [ -150 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.0149 -1.96248 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + scale [ 1.36864 1.36864 1.36864 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.04486 -1.30199 1.52588e-005 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.405 -152.379 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.928 -155.526 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 154.396 -159.878 -0.00250148 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 166.928 -138.205 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 179.918 -145.705 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1823 -4.96848 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.8197 -2.02436 -0.115376 ] + nhpr [ 150 0 -0 ] + scale [ 1.32933 1.32933 1.32933 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.98367 -1.50823 2.28882e-005 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.85418 -0.0495509 -3.05176e-005 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 156.437 -126.375 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 169.428 -133.875 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 10.1952 -0.658628 28.4781 ] + nhpr [ 93 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 6.52642 -20.2601 22.5043 ] + nhpr [ -180 0 -0 ] + scale [ 2.89054 2.89054 2.89054 ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 141.617 -112.045 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 156.805 -103.323 0 ] + nhpr [ 60 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 145.075 -110.779 -8.39233e-005 ] + nhpr [ 75 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 143.505 -145.365 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "9232" [ + vis [ "9232" "9231" "9230" "9229" "9228" "9233" "9234" "9235" "9236" "9237" ] + suit_edge [ 167 170 ] + suit_edge [ 170 171 ] + suit_edge [ 171 172 ] + suit_edge [ 173 174 ] + suit_edge [ 174 175 ] + suit_edge [ 175 168 ] + battle_cell [ 20 20 205.522 -131.216 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 200.556 -99.9268 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 227.877 -92.6062 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb54:random_DNARoot" [ + pos [ 193.088 -112.894 0 ] + nhpr [ -30 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 204.918 -102.404 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 209.918 -93.7436 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 219.248 -87.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 236.569 -97.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 245.229 -102.583 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 226.569 -114.904 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 245.229 -102.583 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 231.569 -106.244 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 197.418 -115.394 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.57409 2.63738 21.7657 ] + nhpr [ 24 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 217.909 -109.904 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 222.909 -101.244 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 188.578 -150.705 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 222.058 -152.715 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 213.399 -147.715 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 240.198 -111.266 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.3 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 205.899 -160.705 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 3.98742 -3.79238 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.625025 0.625025 0.625025 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 1.96904 -17.4285 -7.6294e-006 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 227.909 -92.5833 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.13852 -1.30198 1.52588e-005 ] + nhpr [ -75 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.25376 -4.12359 1.52588e-005 ] + nhpr [ -45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 182.805 -145.313 -1.52588e-005 ] + nhpr [ -30 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 230.763 -118.312 0 ] + nhpr [ 150 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 207.357 -152.328 0 ] + nhpr [ -170.155 0 -0 ] + ] + ] + visgroup "9233" [ + vis [ "9233" "9232" "9231" "9230" "9234" "9235" "9236" "9237" "9238" "9254" "9204" ] + suit_edge [ 172 176 ] + suit_edge [ 176 177 ] + suit_edge [ 178 179 ] + suit_edge [ 179 180 ] + suit_edge [ 180 181 ] + suit_edge [ 181 173 ] + suit_edge [ 411 181 ] + suit_edge [ 181 411 ] + suit_edge [ 411 176 ] + suit_edge [ 176 411 ] + suit_edge [ 412 179 ] + suit_edge [ 179 412 ] + suit_edge [ 412 176 ] + suit_edge [ 176 412 ] + suit_edge [ 413 180 ] + suit_edge [ 180 413 ] + suit_edge [ 413 176 ] + suit_edge [ 176 413 ] + suit_edge [ 414 178 ] + suit_edge [ 178 414 ] + suit_edge [ 414 177 ] + suit_edge [ 177 414 ] + battle_cell [ 20 20 240.128 -147.974 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 235.197 -119.927 1.52588e-005 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 269.838 -139.927 3.8147e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb54:random_DNARoot" [ + pos [ 279.87 -122.583 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 269.87 -139.904 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 287.191 -149.904 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 5.32555 -4.80613 0 ] + nhpr [ -1.25001e-006 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.46942 -6.45512 0 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 282.191 -158.564 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb54:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Sleepless in the Saddle- All Night Pony Rides" ] + pos [ 241.738 -123.637 0 ] + nhpr [ -30 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.75 0.75 0.75 1 ] + scale [ 0.693006 1 0.663482 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 1.02537 ] + scale [ 0.849423 1 0.883636 ] + kern [ 0.0297572 ] + width [ 25.7762 ] + height [ 25.7762 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.25098 0 0 1 ] + pos [ 0 0 0.206382 ] + scale [ 0.921691 1 0.756043 ] + width [ 27.5773 ] + height [ 27.5773 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb14:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Dreamboat Marine Supply" ] + pos [ 263.599 -150.906 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.71299 ] + nhpr [ -0 0 -3.94533 ] + scale [ 0.771886 1 0.570736 ] + baseline [ + code [ "mickey" ] + color [ 0.101961 0.65098 0.52549 1 ] + pos [ 0 0 -0.119258 ] + scale [ 0.713659 1 1.64076 ] + stomp [ 0.070094 ] + width [ 50.0356 ] + height [ 50.0356 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 235.229 -119.904 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 13.2419 -18.8217 21.8788 ] + nhpr [ -150 0 -0 ] + scale [ 2.97791 2.97791 2.97791 ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ 256.88 -132.404 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 257.339 -161.578 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 264.87 -148.564 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 277.327 -146.537 3.8147e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9234" [ + vis [ "9234" "9204" "9233" "9232" "9231" "9235" "9236" "9237" "9238" "9254" "9230" ] + suit_edge [ 177 182 ] + suit_edge [ 182 183 ] + suit_edge [ 183 184 ] + suit_edge [ 185 186 ] + suit_edge [ 186 187 ] + suit_edge [ 187 178 ] + battle_cell [ 20 20 226.706 -184.754 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 258.499 -179.568 1.52588e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 192.877 -153.228 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb59:random_DNARoot" [ + pos [ 210.687 -192.378 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10.151 -0.0860492 -3.05176e-005 ] + nhpr [ 1.00001 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -1.99925 -2.80321 2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 197.697 -184.879 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 200.229 -180.526 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 197.73 -184.856 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 212.058 -170.036 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 203.399 -165.035 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 186.078 -155.035 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 9.06302 -1.2206 0 ] + nhpr [ -15 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 6.26246 -1.89692 0 ] + nhpr [ -75 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.51445 -1.31977 0 ] + nhpr [ -120 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.1033 0.102358 -3.05176e-005 ] + nhpr [ -2.72879e-006 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 249.839 -174.568 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 258.5 -179.568 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 4.74964 -4.60861 0 ] + nhpr [ 45 0 -0 ] + scale [ 0.721365 0.721365 0.721365 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 6.88238 -17.0466 -7.6294e-006 ] + nhpr [ 1.70755e-006 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.7735 3.19359 27.4057 ] + nhpr [ -88 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 248.5 -196.889 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 251.147 -186.25 -7.62939e-006 ] + nhpr [ -117.749 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 208.258 -188.288 -7.62939e-006 ] + nhpr [ 135 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 195.194 -163.316 1.52588e-005 ] + nhpr [ -30 0 -0 ] + ] + ] + visgroup "9235" [ + vis [ "9235" "9234" "9233" "9232" "9236" "9237" "9238" "9204" "9231" "9254" ] + suit_edge [ 184 188 ] + suit_edge [ 188 189 ] + suit_edge [ 190 185 ] + suit_edge [ 385 188 ] + suit_edge [ 188 385 ] + suit_edge [ 385 185 ] + suit_edge [ 185 385 ] + battle_cell [ 20 20 216.299 -212.882 -0.5 ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 238.499 -214.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 228.499 -231.529 3.8147e-006 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 238.5 -214.209 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 245.819 -241.529 0 ] + nhpr [ 150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 7.3288 -0.979879 0 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.1215 0.147494 -0.00250148 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 198.187 -214.029 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.698 -23.2695 19.7752 ] + nhpr [ -90 0 -0 ] + scale [ 1.83063 1.83063 1.83063 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 231.925 -213.283 3.8147e-006 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "9236" [ + vis [ "9236" "9235" "9234" "9233" "9232" "9254" "9237" "9238" "9239" "9240" ] + suit_edge [ 193 190 ] + suit_edge [ 189 230 ] + suit_edge [ 230 231 ] + suit_edge [ 415 190 ] + suit_edge [ 190 415 ] + suit_edge [ 415 230 ] + suit_edge [ 230 415 ] + battle_cell [ 20 20 203.57 -234.581 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 213.498 -257.51 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random_DNARoot" [ + pos [ 233.319 -263.18 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 223.499 -240.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 240.819 -250.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 6.08912 -15.4527 5.17821 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 7.5575 -21.286 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 4.28016 -21.6055 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.82146 -22.9269 1.52588e-005 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 219.168 -237.689 0 ] + nhpr [ -30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 224.168 -229.029 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + landmark_building "tb59:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Sleeping Beauty Parlor" ] + pos [ 191.261 -225.502 0 ] + nhpr [ 60 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0 0 0.964002 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0 1 1 ] + pos [ 0 0 0.635299 ] + scale [ 1.14312 1 1.24159 ] + width [ 23.2937 ] + height [ 23.2937 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 180.687 -244.34 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9237" [ + vis [ "9237" "9236" "9235" "9234" "9233" "9232" "9238" "9239" "9240" "9241" ] + suit_edge [ 231 232 ] + suit_edge [ 232 233 ] + suit_edge [ 233 234 ] + suit_edge [ 235 236 ] + suit_edge [ 236 237 ] + suit_edge [ 237 238 ] + suit_edge [ 238 193 ] + suit_edge [ 386 193 ] + suit_edge [ 193 386 ] + suit_edge [ 386 231 ] + suit_edge [ 231 386 ] + suit_edge [ 416 238 ] + suit_edge [ 238 416 ] + suit_edge [ 416 232 ] + suit_edge [ 232 416 ] + suit_edge [ 417 236 ] + suit_edge [ 236 417 ] + suit_edge [ 417 233 ] + suit_edge [ 233 417 ] + battle_cell [ 20 20 185.209 -261.954 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 213.498 -257.51 -4.57764e-005 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 176.178 -282.151 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb17:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Baker's Dozin' Doughnuts" ] + pos [ 174.078 -283.228 0 ] + nhpr [ 150 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.403922 0.807843 1 ] + pos [ -5.47682 0 0.541302 ] + nhpr [ -0 0 -10.2483 ] + scale [ 0.892292 1 1.36301 ] + kern [ 0.0233887 ] + stomp [ 0.0784459 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.792157 0.733333 0 1 ] + pos [ -6.34794 0 -0.932006 ] + nhpr [ -0 0 -8.62625 ] + scale [ 0.813732 1 1.27783 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + landmark_building "tb18:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Sandman's Sandwiches" ] + pos [ 207.59 -267.926 0 ] + nhpr [ -120 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.501961 0.501961 0.501961 1 ] + pos [ 0.637283 0 -0.521565 ] + scale [ 1 1 0.545244 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 1 0.501961 1 ] + pos [ 0.188808 0 1.04059 ] + scale [ 1.52207 1 1.25926 ] + width [ 36.8658 ] + height [ 36.8658 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0.52549 0.0509804 1 ] + width [ 31.174 ] + height [ 31.174 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 174.838 -304.472 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 4.63733 0.0758512 29.5044 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 174.838 -304.472 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 215.999 -253.18 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 203.988 -303.981 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 190.998 -296.481 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.34 0.31 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 183.498 -309.472 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 210.999 -261.84 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 1.65883 -6.90921 -7.6294e-006 ] + nhpr [ -4.66511e-006 0 -0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 195.999 -287.821 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 195.998 -287.821 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 198.498 -283.491 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 184.838 -287.151 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 14.1379 -17.8217 12.505 ] + nhpr [ 30 0 -0 ] + scale [ 2.64577 2.64577 2.64577 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 155.688 -287.641 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 166.178 -299.472 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 180.74 -283.104 -1.52588e-005 ] + nhpr [ 150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + visgroup "9238" [ + vis [ "9238" "9237" "9236" "9239" "9240" "9241" "9253" "9204" "9235" "9234" ] + suit_edge [ 234 239 ] + suit_edge [ 239 240 ] + suit_edge [ 240 241 ] + suit_edge [ 242 243 ] + suit_edge [ 243 244 ] + suit_edge [ 244 235 ] + battle_cell [ 20 20 148.765 -249.277 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 144.216 -217.51 -7.62939e-006 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 136.536 -270.812 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb59:random_DNARoot" [ + pos [ 163.367 -234.34 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 143.546 -228.671 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 165.867 -230.01 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 154.527 -269.651 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 147.027 -282.642 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 151.357 -285.142 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 166.178 -299.472 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.34 0.31 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.25 0.25 0.25 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 143.857 -298.133 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 6.18412 -6.70527 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 13.1075 -2.22888 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 9.69866 -2.68661 2.76731 ] + nhpr [ 93 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 2.21785 -11.8635 -1.52588e-005 ] + nhpr [ -165 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.47316 -13.0878 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 135.196 -293.133 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 144.347 -327.283 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.33 0.34 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 11.7596 -14.2943 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.60446 1.60446 1.60446 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 127.027 -317.283 0 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.53664 1.8583 26.3331 ] + nhpr [ -48 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 114.036 -309.783 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.25 0.25 0.25 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 105.376 -304.783 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 125.376 -270.142 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.54192 3.49525 15 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 127.876 -265.812 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 136.536 -270.812 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 104.216 -286.792 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 112.876 -291.792 0 ] + nhpr [ 60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 20.1564 -10.6438 21.1804 ] + nhpr [ 120 0 -0 ] + scale [ 3.36024 3.36024 3.36024 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 12.7833 -20.2273 -0.00250148 ] + nhpr [ -30 0 -0 ] + scale [ 1.31617 1.31617 1.31617 ] + color [ 0.65 0.62 0.8 1 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 126.536 -288.132 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 163.187 -274.651 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 12.1642 -7.50893 -7.6294e-006 ] + nhpr [ 90 1.00179e-005 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 148.546 -220.01 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20.0008 -4.66244 -0.0757027 ] + nhpr [ 180 0.0286269 -0.000228887 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "post_brick2_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 5.0007 -4.99946 -0.124069 ] + nhpr [ -180 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.26575 -16.9604 -7.6294e-006 ] + nhpr [ -90 0 -0 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 5.79254 -5.04227 0.000415744 ] + nhpr [ 90 0 -0 ] + scale [ 1.09157 1.09157 1.09157 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "post_stuccobrick" ] + pos [ 14.1795 -4.54137 0.000415744 ] + nhpr [ 90 0 -0 ] + scale [ 1.10773 1.10773 1.10773 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 127.354 -262.827 0 ] + nhpr [ -30 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 159.751 -234.645 -7.62939e-006 ] + nhpr [ -30 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 135.386 -275.489 1.14441e-005 ] + nhpr [ 105 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 188.208 -298.126 0.000152588 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "9239" [ + vis [ "9239" "9204" "9238" "9237" "9236" "9240" "9241" "9242" "9253" "9243" ] + suit_edge [ 241 245 ] + suit_edge [ 246 242 ] + suit_edge [ 387 242 ] + suit_edge [ 242 387 ] + suit_edge [ 387 241 ] + suit_edge [ 241 387 ] + suit_edge [ 388 246 ] + suit_edge [ 246 388 ] + suit_edge [ 388 245 ] + suit_edge [ 245 388 ] + battle_cell [ 20 20 112.144 -233.552 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_40x40_15" ] + pos [ 141.716 -221.84 -0.00246429 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 134.396 -194.519 -0.00249481 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb38:random_DNARoot" [ + pos [ 104.575 -206.17 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 15.8909 -2.15184 -2.28882e-005 ] + nhpr [ 90 0 -0 ] + scale [ 1.56721 1.56721 1.56721 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 18.6401 -1.3036 0 ] + nhpr [ 90 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ -4.92553 -4.3645 -7.6294e-006 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 134.886 -223.671 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 119.216 -260.812 0 ] + nhpr [ -120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 116.716 -265.142 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 108.056 -260.142 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ -0.00927101 0.0420232 -0.00250148 ] + nhpr [ 1.70755e-006 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 103.726 -257.642 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.81247 2.55217 29.0433 ] + nhpr [ -48 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 6.70295 -10.2359 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 95.0654 -252.642 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 86.4051 -247.642 0 ] + nhpr [ 150 0 -0 ] + width [ 5 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.29 0.35 0.45 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ -0.0220795 -28.2036 15.0959 ] + nhpr [ 30 0 -0 ] + scale [ 3.29097 3.29097 3.29097 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 82.075 -245.142 0 ] + nhpr [ 60 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.34 0.31 0.42 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb38:random_DNARoot" [ + pos [ 121.895 -216.17 0 ] + nhpr [ 60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ 144.886 -206.349 -0.00250148 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_anvil_sign" ] + pos [ 9.97569 0.0875842 10.2422 ] + nhpr [ 90 -1.00179e-005 6.56845e-013 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9240" [ + vis [ "9240" "9239" "9204" "9238" "9237" "9236" "9241" "9242" "9243" "9253" ] + suit_edge [ 245 254 ] + suit_edge [ 254 252 ] + suit_edge [ 253 255 ] + suit_edge [ 255 246 ] + suit_edge [ 418 255 ] + suit_edge [ 255 418 ] + suit_edge [ 418 254 ] + suit_edge [ 254 418 ] + battle_cell [ 20 20 87.2769 -216.265 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_angle_60" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb15:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "First Security Blanket Bank" ] + pos [ 72.1032 -226.562 0 ] + nhpr [ 120 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 1.2801 ] + scale [ 0.721157 1 0.510664 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 0 0.843137 0 1 ] + pos [ 0 0 0.588464 ] + scale [ 0.976958 1 1.23074 ] + width [ 26.0105 ] + height [ 26.0105 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 82.075 -245.142 0 ] + nhpr [ 145 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.22 0.25 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 84.5749 -240.811 0 ] + nhpr [ 125 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 73.8835 -239.406 0 ] + nhpr [ 85 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 74.755 -229.444 0 ] + nhpr [ 120 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 66.8228 -213.767 0 ] + nhpr [ 105 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.31 0.29 0.36 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 6.8944 -1.1766 1.52588e-005 ] + nhpr [ 138 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 83.0878 -233.535 -5.72205e-006 ] + nhpr [ 150 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 157.351 -184.12 -0.00249481 ] + nhpr [ -120 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 137.781 -192.082 -0.00246429 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "9241" [ + vis [ "9241" "9242" "9243" "9240" "9239" "9253" "9238" "9237" ] + suit_edge [ 247 248 ] + suit_edge [ 249 250 ] + suit_edge [ 252 249 ] + suit_edge [ 248 253 ] + battle_cell [ 20 20 89.631 -192.05 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_angle_30" ] + pos [ 104.575 -206.171 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random_DNARoot" [ + pos [ 64.7045 -205.861 0 ] + nhpr [ 75 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.93489 1.43858 18.9456 ] + nhpr [ 9 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 112.075 -193.18 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.85305 0.0202554 -0.00249385 ] + nhpr [ -4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 69.934 -186.171 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 7.51429 0.898873 19.8424 ] + nhpr [ 28 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.69953 2.3022 18.0917 ] + nhpr [ 92 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9242" [ + vis [ "9242" "9243" "9244" "9245" "9241" "9240" "9239" "9253" ] + suit_edge [ 258 260 ] + suit_edge [ 261 262 ] + suit_edge [ 262 263 ] + suit_edge [ 260 261 ] + suit_edge [ 264 265 ] + suit_edge [ 265 266 ] + suit_edge [ 266 259 ] + suit_edge [ 419 261 ] + suit_edge [ 261 419 ] + suit_edge [ 419 265 ] + suit_edge [ 265 419 ] + battle_cell [ 20 20 103.866 -127.665 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 89.811 -101.575 5.34058e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb21:toon_landmark_DL_D1_DNARoot" [ + code [ "toon_landmark_DL_D1" ] + title [ "Snug As A Bug Rug Dealer" ] + pos [ 130.109 -113.198 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign4" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 0.637629 ] + scale [ 0.827096 1 0.719216 ] + baseline [ + code [ "humanist" ] + color [ 1 0.501961 0.752941 1 ] + pos [ -0.225556 0 0.199956 ] + scale [ 0.913242 1 1.63477 ] + kern [ 0.012469 ] + wiggle [ 4.54921 ] + stumble [ 0.0133593 ] + stomp [ -0.0559178 ] + width [ 31.0299 ] + height [ 31.0299 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 89.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -2.939 0 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.591318 ] + scale [ 0.822291 1 1.26575 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 22.7745 -14.447 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 109.811 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 5.201 -2.04401 2.09568 ] + nhpr [ 60 0 -0 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.736 -2.056 0 ] + nhpr [ 75 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.437 -2.208 -9.09495e-013 ] + nhpr [ 45 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 16.37 9.65989 5.34058e-005 ] + nhpr [ -45 0 -0 ] + scale [ 1.72331 1.72331 1.72331 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 109.812 -101.575 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -101.575 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -126.575 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 21.61 0.097998 29.4962 ] + nhpr [ 90 1.00179e-005 -6.56845e-013 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 3.08 -18.994 21.593 ] + nhpr [ -90 0 -0 ] + scale [ 3.31608 3.31608 3.31608 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 128.455 -135.584 0 ] + nhpr [ -90 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + visgroup "9243" [ + vis [ "9243" "9244" "9245" "9246" "9247" "9242" "9241" "9240" "9239" "9253" ] + suit_edge [ 263 267 ] + suit_edge [ 268 264 ] + battle_cell [ 20 20 68.8552 -121.728 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ 89.8115 -101.575 5.34058e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random_DNARoot" [ + pos [ 79.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.8877 0.0459976 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 69.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 89.8115 -141.575 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.1032 0.0239942 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 74.8115 -141.575 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 64.8115 -141.575 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.32 0.45 0.3 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 49.8115 -101.575 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 3.45 -5.246 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.828018 0.828018 0.828017 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 63.8351 -136.846 5.34058e-005 ] + nhpr [ 180 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 125.878 -104.191 0.043129 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "9244" [ + vis [ "9244" "9243" "9242" "9253" "9245" "9246" "9247" ] + suit_edge [ 272 273 ] + suit_edge [ 273 274 ] + suit_edge [ 274 275 ] + suit_edge [ 275 268 ] + suit_edge [ 267 276 ] + suit_edge [ 276 286 ] + suit_edge [ 286 287 ] + suit_edge [ 390 274 ] + suit_edge [ 274 390 ] + suit_edge [ 390 286 ] + suit_edge [ 286 390 ] + suit_edge [ 420 287 ] + suit_edge [ 287 420 ] + suit_edge [ 420 273 ] + suit_edge [ 273 420 ] + battle_cell [ 20 20 35.1938 -114.611 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_angle_60" ] + pos [ 49.8115 -101.575 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 49.8115 -101.575 0 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb20:toon_landmark_DL_B1_DNARoot" [ + code [ "toon_landmark_DL_B1" ] + title [ "Talking In Your Sleep Voice Training" ] + pos [ 15.178 -121.587 0 ] + nhpr [ 120 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -4.1022 ] + baseline [ + code [ "humanist" ] + color [ 0 1 1 1 ] + pos [ 0 0 1.03687 ] + scale [ 0.7 1 1.0159 ] + width [ 33.7893 ] + height [ 33.7893 ] + flags [ "bd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.623529 0.92549 1 ] + pos [ -0.0751857 0 -0.0854465 ] + scale [ 0.903799 1 0.89451 ] + flags [ "d" ] + text [ + letters [ "V" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 44.8115 -92.9143 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 4.93966 -7.79564 -7.6294e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 49.8115 -141.575 0 ] + nhpr [ 165 0 -0 ] + width [ 20.7 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 29.8168 -136.217 0 ] + nhpr [ 135 0 -0 ] + width [ 5 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.33 0.25 0.23 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 26.2965 -132.699 0 ] + nhpr [ 135 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.2495 1.43947 17.6114 ] + nhpr [ -47 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9245" [ + vis [ "9245" "9244" "9243" "9242" "9253" "9246" "9247" ] + suit_edge [ 279 280 ] + suit_edge [ 280 281 ] + suit_edge [ 282 283 ] + suit_edge [ 283 284 ] + suit_edge [ 284 285 ] + suit_edge [ 285 272 ] + suit_edge [ 287 279 ] + battle_cell [ 20 20 25.5068 -87.5754 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 10.1705 -112.914 0 ] + nhpr [ 30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random_DNARoot" [ + pos [ 0.170475 -95.5938 0 ] + nhpr [ 30 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 4.5006 -93.0938 0 ] + nhpr [ 120 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 8.43712 13.8129 0 ] + nhpr [ 150 0 -0 ] + scale [ 1.32039 1.32039 1.32039 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 15.1373 5.1925 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -2.9994 -80.1034 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 9.99098 -72.6034 0 ] + nhpr [ 120 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -27.15 -88.2732 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.26 0.19 0.13 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -14.1597 -80.7732 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 0.170475 -95.5938 0 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 7.6705 -108.584 0 ] + nhpr [ 120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 18.5126 -1.53657 0 ] + nhpr [ 90 1.00179e-005 -1.52006e-013 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 7.12586 0.0203449 -0.00248622 ] + nhpr [ 4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 7.49098 -68.2732 0 ] + nhpr [ 30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 5.6396 -5.24996 0 ] + nhpr [ -145 0 -0 ] + scale [ 1.31097 1.31097 1.31097 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 21.0405 -6.58704 -7.6294e-006 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 17.4696 1.87872 29.0009 ] + nhpr [ 58 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 11.2366 -22.0998 21.9665 ] + nhpr [ 150 0 -0 ] + scale [ 3.8569 3.8569 3.8569 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 1.27769 -80.1102 0 ] + nhpr [ 30 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 14.6238 -77.2247 7.62939e-006 ] + nhpr [ 45 0 -0 ] + ] + ] + visgroup "9246" [ + vis [ "9246" "9245" "9244" "9243" "9247" "9248" "9249" "9250" "9251" ] + suit_edge [ 281 288 ] + suit_edge [ 288 289 ] + suit_edge [ 289 290 ] + suit_edge [ 290 291 ] + suit_edge [ 292 293 ] + suit_edge [ 293 294 ] + suit_edge [ 294 282 ] + suit_edge [ 391 290 ] + suit_edge [ 290 391 ] + suit_edge [ 391 293 ] + suit_edge [ 293 391 ] + battle_cell [ 20 20 44.1514 -62.1454 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 59.4525 -38.2732 0 ] + nhpr [ -150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random_DNARoot" [ + pos [ 69.4525 -55.5938 0 ] + nhpr [ -60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 18.5716 -5.83116 0 ] + nhpr [ 105 0 -0 ] + scale [ 0.930079 0.930079 0.930079 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0.383372 0.020216 -0.00248622 ] + nhpr [ -1.70755e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 79.4525 -72.9143 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 64.4525 -46.9335 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 56.9525 -33.9432 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_shutteredDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 65.6129 -28.9434 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 62.132 -82.9143 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 4.11083 -8.59504 0 ] + nhpr [ 120 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_mailbox" ] + anim [ "tt_a_ara_ddl_mailbox_idleSleep0" ] + cell_id [ 0 ] + pos [ 60.1544 -49.6795 0 ] + nhpr [ -60 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 74.1863 -69.9014 2.28882e-005 ] + nhpr [ -45 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ 77.0436 -72.2915 0.000137329 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "9247" [ + vis [ "9247" "9246" "9245" "9244" "9243" "9248" "9249" "9250" "9251" "9252" ] + suit_edge [ 291 295 ] + suit_edge [ 295 296 ] + suit_edge [ 296 297 ] + suit_edge [ 297 298 ] + suit_edge [ 298 299 ] + suit_edge [ 300 301 ] + suit_edge [ 301 302 ] + suit_edge [ 302 303 ] + suit_edge [ 303 292 ] + suit_edge [ 421 296 ] + suit_edge [ 296 421 ] + suit_edge [ 421 303 ] + suit_edge [ 303 421 ] + battle_cell [ 20 20 26.5369 -31.1038 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 19.8115 -49.613 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -0.188519 -14.972 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb8:toon_landmark_DL_E1_DNARoot" [ + code [ "toon_landmark_DL_E1" ] + title [ "Bed Of Roses Florist" ] + pos [ 49.9152 -20.1464 0 ] + nhpr [ -60 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + color [ 0.5 0.5 0.5 1 ] + baseline [ + code [ "DL_JiggeryPokery" ] + color [ 1 0.501961 1 1 ] + pos [ 0.572069 0 1.70929 ] + scale [ 0.851944 1 0.897218 ] + stomp [ 0.0314333 ] + width [ 27.8054 ] + height [ 27.8054 ] + flags [ "bd" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 24.8115 -58.2732 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -0.188511 -14.972 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.25 0.24 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 12.9413 -7.9996 0 ] + nhpr [ -105 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.94122 2.5864 17.9567 ] + nhpr [ 72 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 20.5595 6.5414 5.47839 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 25.7923 0.0280228 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_flat_owl_DNARoot" [ + code [ "prop_DL_flat_owl" ] + pos [ 6.10518 -4.98263 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 20.4075 -12.1685 18.9846 ] + nhpr [ -120 0 -0 ] + scale [ 3.5236 3.5236 3.5236 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 33.0585 -29.1605 -7.6294e-006 ] + nhpr [ 1.47878e-006 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 12.8019 -7.47198 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 13.2923 21.6787 0 ] + nhpr [ -60 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 12.8019 -7.47198 0 ] + nhpr [ 120 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 30.7923 -8.63223 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 39.4525 -3.63224 0 ] + nhpr [ -60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_DL_DNARoot" [ + code [ "neighborhood_sign_DL" ] + pos [ 42.6224 -19.1227 0 ] + nhpr [ -60 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ 25.0549 -13.9104 0 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "9248" [ + vis [ "9248" "9247" "9246" "9249" "9250" "9251" "9252" ] + suit_edge [ 299 304 ] + suit_edge [ 304 305 ] + suit_edge [ 305 306 ] + suit_edge [ 307 308 ] + suit_edge [ 308 309 ] + suit_edge [ 309 310 ] + suit_edge [ 310 300 ] + battle_cell [ 20 20 -6.33573 -33.6642 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ 19.8115 -49.613 -2.28882e-005 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random_DNARoot" [ + pos [ -29.8295 -43.6322 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -19.8295 -60.9528 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1.71478 0.0222962 -0.00248622 ] + nhpr [ 4.66511e-006 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -14.8295 -69.613 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.39 0.4 0.32 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 2.49099 -59.613 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 0.0375563 -11.1996 0 ] + nhpr [ 60 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -24.8295 -52.2925 0 ] + nhpr [ 120 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 5.33228 1.57797 18.9821 ] + nhpr [ -32 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 19.8115 -49.613 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + cell_id [ 0 ] + pos [ -11.9112 -56.6274 -2.28882e-005 ] + nhpr [ 144.829 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ -9.24541 -64.4177 -2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__ddl_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__ddl_trashcan" ] + anim [ "tt_a_ara_ddl_trashcan_idleSleep0" ] + pos [ -13.9491 -66.4154 -2.28882e-005 ] + nhpr [ -150 0 -0 ] + ] + ] + visgroup "9249" [ + vis [ "9249" "9250" "9251" "9248" "9247" "9246" "9252" ] + suit_edge [ 306 311 ] + suit_edge [ 311 312 ] + suit_edge [ 312 313 ] + suit_edge [ 313 314 ] + suit_edge [ 315 316 ] + suit_edge [ 316 317 ] + suit_edge [ 317 307 ] + battle_cell [ 20 20 -30.3799 -15.8859 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_curved_corner" ] + pos [ -54.8295 -0.330963 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random_DNARoot" [ + pos [ -20.1885 19.669 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 0.17 0.31 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.39 0.3 0.25 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_DL_A1_DNARoot" [ + code [ "toon_landmark_DL_A1" ] + title [ "Armadillo Pillow Company" ] + pos [ -65.4581 -6.3344 0 ] + nhpr [ 30 0 -0 ] + door [ + code [ "door_double_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + sign [ + code [ "DL_sign3" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0 0 -0.808214 ] + scale [ 1 1 0.75921 ] + baseline [ + code [ "mickey" ] + color [ 0.647059 0.54902 0.352941 1 ] + pos [ 0 0 0.115294 ] + scale [ 0.7 1 1.80567 ] + width [ 28.1902 ] + height [ 28.1902 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -50.4994 2.16904 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -41.8391 7.16904 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.37 0.27 0.36 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.29 0.25 0.31 1 ] + ] + ] + prop "post_brick2_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3.65095 0.324423 21.781 ] + nhpr [ 33 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 2.10648 -8.96329 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 25.0481 -5.03322 -0.00248622 ] + nhpr [ -90 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 23.1562 -2.25762 -0.00100327 ] + nhpr [ -147 0 -0 ] + scale [ 1.80429 1.80429 1.80429 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -12.6885 6.67866 0 ] + nhpr [ -60 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 3.59545 -1.77122 0 ] + nhpr [ 105 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_crate_DNARoot" [ + code [ "prop_crate" ] + pos [ 6.49377 -1.44567 7.62939e-006 ] + nhpr [ 60 0 -0 ] + scale [ 0.82312 0.82312 0.82312 ] + color [ 0.65 0.62 0.8 1 ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 2.03311 -16.1446 -7.6294e-006 ] + nhpr [ -45 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ -10.3332 -11.3436 7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "9250" [ + vis [ "9250" "9249" "9248" "9247" "9246" "9251" "9252" ] + suit_edge [ 314 318 ] + suit_edge [ 318 319 ] + suit_edge [ 320 321 ] + suit_edge [ 321 315 ] + suit_edge [ 392 318 ] + suit_edge [ 318 392 ] + suit_edge [ 392 321 ] + suit_edge [ 321 392 ] + suit_edge [ 393 321 ] + suit_edge [ 321 393 ] + suit_edge [ 393 318 ] + suit_edge [ 318 393 ] + suit_edge [ 422 314 ] + suit_edge [ 314 422 ] + suit_edge [ 422 315 ] + suit_edge [ 315 422 ] + suit_edge [ 423 320 ] + suit_edge [ 320 423 ] + suit_edge [ 423 319 ] + suit_edge [ 319 423 ] + battle_cell [ 20 20 -63.1606 -28.1892 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -54.8295 -0.330963 0 ] + nhpr [ -150 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb22:toon_landmark_DL_C1_DNARoot" [ + code [ "toon_landmark_DL_C1" ] + title [ "Dream On Talent Agency" ] + pos [ -58.1102 -49.3521 0 ] + nhpr [ -150 0 -0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + sign [ + code [ "DL_sign2" ] + color [ 0.5 0.5 0.5 1 ] + pos [ 0.247483 0 1.43655 ] + scale [ 0.877563 1 0.526318 ] + baseline [ + code [ "humanist" ] + color [ 1 1 0 1 ] + pos [ 0 0 0.435572 ] + nhpr [ -0 0 -2.05138 ] + scale [ 0.554214 1 2.13468 ] + width [ 30.2924 ] + height [ 30.2924 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -34.8295 -34.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 8.97771 -4.70316 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -43.4898 -39.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.39 0.42 0.3 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31 0.27 0.27 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -85.1404 -17.831 0 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 20.4498 1.53528 19.1585 ] + nhpr [ 58 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -98.1307 -25.331 0 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -52.15 -44.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 0.326088 0.00560557 -0.00248622 ] + nhpr [ -0 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_hydrant_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 7.19837 -1.58966 0 ] + nhpr [ -0 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -69.4706 -54.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_lg_brick_ur" ] + color [ 0.3 0.23 0.14 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ -64.354 -7.20855 0 ] + nhpr [ -150 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -81.4582 -21.9902 3.8147e-006 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "9251" [ + vis [ "9251" "9250" "9249" "9248" "9247" "9246" "9252" ] + suit_edge [ 319 322 ] + suit_edge [ 322 323 ] + suit_edge [ 323 320 ] + battle_cell [ 20 20 -93.9857 -45.8716 -0.5 ] + group "streets" [ + street "street_80x40_DNARoot" [ + code [ "street_keyboard_40x40" ] + pos [ -104.112 -74.972 0 ] + nhpr [ 30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random_DNARoot" [ + pos [ -126.252 -116.623 4.36375 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.31 0.25 0.24 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -81.6116 -113.943 5.01076 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -136.603 -18.6937 4.47683 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -161.244 -56.0142 4.43805 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build5_ur" ] + color [ 0.25 0.25 0.25 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build5_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -115.452 -35.331 0 ] + nhpr [ 30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 13.7601 -10.3428 23.0431 ] + nhpr [ 150 0 -0 ] + scale [ 4.44793 4.44793 4.44793 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -124.112 -40.331 0 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -78.1308 -59.972 0 ] + nhpr [ -150 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -95.4513 -69.972 0 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -151.959 -3.59358 19.2544 ] + nhpr [ 30 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -130.308 8.90644 19.2544 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -112.772 -15.821 3.19589 ] + nhpr [ 30 0 -0 ] + ] + ] + ] + visgroup "9252" [ + vis [ "9252" "9251" "9250" "9249" "9248" "9247" ] + group "streets" [ + street "street_10x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -91.6116 -96.6226 4.43199 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_stairs_40x10x5" ] + pos [ -136.199 -99.3953 -0.578773 ] + nhpr [ -60 -5.47327e-009 -9.48005e-009 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_4way_intersection" ] + pos [ -104.112 -74.972 0 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x40" ] + pos [ -163.753 -51.6707 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_stairs_40x10x5" ] + pos [ -126.656 -35.9218 -0.561953 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -131.603 -27.3539 4.43805 ] + nhpr [ 120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x40" ] + pos [ -138.753 -94.972 0 ] + nhpr [ -60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ -139.914 -115.865 23.5799 ] + nhpr [ 120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -149.914 -98.544 23.5799 ] + nhpr [ -150 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -159.459 9.39679 19.2544 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -113.262 -109.123 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -104.602 -104.123 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -91.6116 -96.6226 4.43199 ] + nhpr [ -150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -171.244 -38.6937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -158.254 -31.1937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -149.593 -26.1937 4.43805 ] + nhpr [ 30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_suit_build1_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -136.611 -18.6803 -0.561953 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ -131.611 -27.3405 -0.561953 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -104.112 -74.972 0 ] + nhpr [ -60 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ -99.1116 -83.6322 0 ] + nhpr [ -60 0 -0 ] + width [ 15 ] + wall [ + height [ 12 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + ] + group "props" [ + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -169.912 -61.0008 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.782119 0.782119 0.782119 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ -177.412 -48.0104 0 ] + nhpr [ 120 0 -0 ] + scale [ 0.789164 0.789164 0.789164 ] + ] + prop "linktunnel_cashhq_12000_DNARoot" [ + code [ "prop_cog_tunnel" ] + pos [ -146.735 -76.4866 -0.496864 ] + nhpr [ -60 0 -0 ] + sign [ + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0 0 -0.454734 ] + scale [ 1.94135 1 1.34943 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ -0.145453 0 -1.58779 ] + scale [ 2.00652 1 1.22781 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Q" ] + ] + ] + ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -137.39 -36.1215 4.4691 ] + nhpr [ -60 0 -0 ] + scale [ 0.491224 0.491224 0.491224 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -106.525 -89.0184 4.45267 ] + nhpr [ 30 0 -0 ] + scale [ 0.558264 0.558264 0.558264 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -126.059 -100.162 5.00001 ] + nhpr [ 30 0 -0 ] + scale [ 0.620002 0.620002 0.620002 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ -157.564 -46.1268 4.62218 ] + nhpr [ -60 0 -0 ] + scale [ 0.738382 0.738382 0.738382 ] + ] + ] + ] + visgroup "9253" [ + vis [ "9253" "9239" "9238" "9240" "9241" "9242" "9243" "9244" "9245" ] + suit_edge [ 250 256 ] + suit_edge [ 257 247 ] + suit_edge [ 256 258 ] + suit_edge [ 259 257 ] + suit_edge [ 389 256 ] + suit_edge [ 256 389 ] + suit_edge [ 389 257 ] + suit_edge [ 257 389 ] + battle_cell [ 20 20 107.797 -160.508 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 114.575 -188.85 0 ] + nhpr [ 60 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 89.8115 -141.575 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_angle_30" ] + pos [ 89.934 -151.53 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random_DNARoot" [ + pos [ 79.934 -168.85 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 12 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_bricks_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.36 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 119.575 -180.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.25 0.25 0.25 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 124.575 -171.529 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.3 0.23 0.14 1 ] + windows [ + code [ "window_sm_squareDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -141.575 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_shutteredDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 129.811 -151.575 0 ] + nhpr [ -104.75 0 -0 ] + width [ 20.7 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 89.8115 -151.575 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 12 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + prop "prop_DL_post_one_light_DNARoot" [ + code [ "prop_DL_post_one_light" ] + pos [ 15.217 -4.623 -7.6294e-006 ] + nhpr [ 135 0 -0 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_cashBotHQ_DNARoot" [ + code [ "neighborhood_sign_cashBotHQ" ] + pos [ 89.1286 -155.976 0 ] + nhpr [ 60 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__ddl_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__ddl_hydrant" ] + anim [ "tt_a_ara_ddl_hydrant_idle0" ] + cell_id [ 0 ] + pos [ 96.7505 -145.687 0 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "9254" [ + vis [ "9254" "9255" "9236" "9235" "9234" "9204" "9231" ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 260.461 -296.17 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 290.461 -244.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 273.14 -234.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 255.819 -224.209 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + street "street_80x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 280.461 -261.529 0 ] + nhpr [ -120 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 255.82 -224.209 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 4 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 268.81 -231.709 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 286.131 -241.709 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.5 0.5 0.5 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.47 0.36 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 297.782 -271.53 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 292.782 -280.19 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_md_curved2DL_ul" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.26 0.21 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 285.282 -293.18 0 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 253.14 -268.85 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 13.6578 -9.82202 0 ] + nhpr [ 165 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 13.3641 -21.8873 1.52588e-005 ] + nhpr [ 135 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 17.6185 -21.8802 1.52588e-005 ] + nhpr [ 135 0 -0 ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 270.461 -278.85 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 16.5267 5.3328 24.1876 ] + nhpr [ 2 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 8.74204 -14.0377 6.9345 ] + nhpr [ 165 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 263.14 -251.529 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 280.461 -261.529 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.29 0.35 0.45 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 240.819 -250.19 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 235.819 -258.85 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_blank_dr" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 270.461 -278.85 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 275.461 -270.19 0 ] + nhpr [ 60 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 0.4 0.42 0.35 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 260.461 -296.17 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 294.791 -246.709 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 307.782 -254.209 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + prop "prop_DL_weathervane_DNARoot" [ + code [ "prop_DL_weathervane" ] + pos [ 15.7582 -0.417932 29.5059 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_DL_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 4.70688 -1.55255 0 ] + nhpr [ 45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "9255" [ + vis [ "9255" "9254" ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 277.782 -306.171 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.37 0.27 0.36 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 325.412 -333.67 0 ] + nhpr [ -120 0 -0 ] + width [ 25 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 312.732 -395.631 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 307.732 -404.292 0 ] + nhpr [ -120 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curved2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 255.591 -414.603 6.27553 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_squareDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 312.912 -355.32 0 ] + nhpr [ -30 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_blank_ur" ] + color [ 0.26 0.19 0.13 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_roundDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 295.412 -385.631 0 ] + nhpr [ -120 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 290.412 -394.292 0 ] + nhpr [ -30 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_roundDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 184.659 -327.462 0 ] + nhpr [ 150 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.31 0.16 0.29 1 ] + windows [ + code [ "window_sm_curvedDL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 183.319 -349.782 0 ] + nhpr [ 150 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.4 0.32 0.23 1 ] + windows [ + code [ "window_md_curvedDL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 199.076 -376.14 7.98505 ] + nhpr [ 150 0 -0 ] + width [ 15 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.34 0.25 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 251.8 -291.17 0 ] + nhpr [ -30 0 -0 ] + width [ 10 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_curved2DL_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 174.659 -344.782 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 0.25 0.35 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_curvedDL_ur" ] + color [ 0.75 0.75 0.75 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 173.319 -367.103 0 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.33 0.3 0.29 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + ] + wall [ + height [ 8 ] + code [ "wall_md_dental_ur" ] + color [ 0.25 0.2 0.15 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 189.076 -393.46 7.98505 ] + nhpr [ 60 0 -0 ] + width [ 20 ] + wall [ + height [ 13 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 9 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 8 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.17 0.25 1 ] + windows [ + code [ "window_md_curvedDL_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.22 0.27 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 242.601 -407.103 6.27553 ] + nhpr [ -120 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.33 0.34 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.47 0.38 0.32 1 ] + windows [ + code [ "window_sm_round2DL_ul" ] + color [ 0.75 0.75 0.75 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + ] + ] + group "props" [ + prop "prop_DL_flat_pillows_DNARoot" [ + code [ "prop_DL_flat_pillows" ] + pos [ 272.633 -353.991 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 271.848 -365.359 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 268.037 -328.627 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 216.677 -331.813 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 217.599 -365.147 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 246.446 -380.799 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 170.979 -360.877 23.5552 ] + nhpr [ 88 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 190.132 -372.085 37.4265 ] + nhpr [ 105 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 249.292 -415.061 34.122 ] + nhpr [ 150 0 -0 ] + color [ 0.25 0.25 0.25 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 308.211 -395.555 28.9794 ] + nhpr [ 102 0 -0 ] + color [ 0.47 0.49 0.66 1 ] + ] + prop "prop_DL_post_three_light_DNARoot" [ + code [ "prop_DL_post_three_light" ] + pos [ 246.519 -316.479 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 259.782 -307.881 13.4624 ] + nhpr [ 180 0 -0 ] + scale [ 3.12946 3.12946 3.12946 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 221.433 -330.528 15.6962 ] + nhpr [ -165 0 -0 ] + scale [ 3.33391 3.33391 3.33391 ] + ] + prop "prop_DL_clouds_DNARoot" [ + code [ "prop_DL_clouds" ] + pos [ 281.174 -383.107 22.4562 ] + nhpr [ 180 0 -0 ] + scale [ 3.34531 3.34531 3.34531 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 286.426 -343.986 0 ] + nhpr [ -45 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 244.027 -304.278 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 205.138 -341.814 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 216.082 -351.831 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 255.46 -392.574 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.66155 1.66155 1.66155 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 262.942 -362.022 0 ] + nhpr [ -45 0 -0 ] + color [ 0.6 0.75 0.75 1 ] + ] + prop "prop_tree_DL_brickbox_ul_DNARoot" [ + code [ "prop_tree_DL_brickbox_ul" ] + pos [ 265.485 -345.153 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_tree_DL_brickbox_ur_DNARoot" [ + code [ "prop_tree_DL_brickbox_ur" ] + pos [ 218.945 -382.68 0 ] + nhpr [ -30 0 -0 ] + scale [ 2.16795 2.16795 2.16795 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 276.666 -349.42 0 ] + nhpr [ 105 0 -0 ] + scale [ 1.79907 1.79907 1.79907 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "DD_barrel" ] + pos [ 273.794 -348.102 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.79906 1.79906 1.79907 ] + ] + prop "DD_barrel_DNARoot" [ + code [ "prop_crate" ] + pos [ 272.469 -360.821 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.79906 1.79906 1.79907 ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 259.3 -353 0.025 ] + nhpr [ 24 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 239.646 -330.58 0.347881 ] + nhpr [ -165 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 227.949 -344.654 0.347881 ] + nhpr [ -95 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 232.738 -360.966 0.547134 ] + nhpr [ -35 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 248.693 -365.617 0.347881 ] + nhpr [ 25 0 -0 ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + street "street_80x40_DNARoot" [ + code [ "street_DL_pond" ] + pos [ 245.541 -348.608 0 ] + nhpr [ -30 0 -0 ] + texture [ "street_street_DL_tex" ] + texture [ "street_sidewalk_DL_tex" ] + texture [ "street_curb_DL_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/the_burrrgh_3100.dna b/ttmodels/src/dna/the_burrrgh_3100.dna new file mode 100644 index 00000000..ee19ff91 --- /dev/null +++ b/ttmodels/src/dna/the_burrrgh_3100.dna @@ -0,0 +1,10285 @@ +store_suit_point [ 25, STREET_POINT, 365 157 -0.5 ] +store_suit_point [ 26, STREET_POINT, 365 150 -0.5 ] +store_suit_point [ 32, STREET_POINT, 375 190 -0.5 ] +store_suit_point [ 47, STREET_POINT, 365 110 -0.5 ] +store_suit_point [ 48, STREET_POINT, 375 110 -0.5 ] +store_suit_point [ 49, STREET_POINT, 375 125 -0.5 ] +store_suit_point [ 50, STREET_POINT, 375 150 -0.5 ] +store_suit_point [ 60, STREET_POINT, 365 70 -0.5 ] +store_suit_point [ 71, STREET_POINT, 365 65 -0.5 ] +store_suit_point [ 72, STREET_POINT, 365 30 -0.5 ] +store_suit_point [ 73, STREET_POINT, 375 30 -0.5 ] +store_suit_point [ 74, STREET_POINT, 375 65 -0.5 ] +store_suit_point [ 82, STREET_POINT, 365 15 -0.5 ] +store_suit_point [ 83, STREET_POINT, 350 15 -0.5 ] +store_suit_point [ 95, STREET_POINT, 350 5 -0.5 ] +store_suit_point [ 106, STREET_POINT, 305 30 -0.5 ] +store_suit_point [ 109, STREET_POINT, 310 5 -0.5 ] +store_suit_point [ 115, STREET_POINT, 311 15 -0.5 ] +store_suit_point [ 116, FRONT_DOOR_POINT, 311 -6 0, 8 ] +store_suit_point [ 119, STREET_POINT, 305 37 -0.5 ] +store_suit_point [ 120, STREET_POINT, 305 60 -0.5 ] +store_suit_point [ 131, STREET_POINT, 305 68 -0.5 ] +store_suit_point [ 132, STREET_POINT, 305 85 -0.5 ] +store_suit_point [ 133, STREET_POINT, 294 85 -0.5 ] +store_suit_point [ 134, STREET_POINT, 280 85 -0.5 ] +store_suit_point [ 135, STREET_POINT, 280 75 -0.5 ] +store_suit_point [ 136, STREET_POINT, 295 75 -0.5 ] +store_suit_point [ 137, STREET_POINT, 295 68 -0.5 ] +store_suit_point [ 138, STREET_POINT, 295 60 -0.5 ] +store_suit_point [ 153, STREET_POINT, 253 75 -0.5 ] +store_suit_point [ 159, STREET_POINT, 245 100 -0.5 ] +store_suit_point [ 160, STREET_POINT, 245 75 -0.5 ] +store_suit_point [ 174, STREET_POINT, 245 110 -0.5 ] +store_suit_point [ 176, STREET_POINT, 255 100 -0.5 ] +store_suit_point [ 177, STREET_POINT, 255 110 -0.5 ] +store_suit_point [ 182, STREET_POINT, 255 117 -0.5 ] +store_suit_point [ 202, STREET_POINT, 255 165 -0.5 ] +store_suit_point [ 204, STREET_POINT, 230 165 -0.5 ] +store_suit_point [ 211, FRONT_DOOR_POINT, 251 176 0, 15 ] +store_suit_point [ 212, STREET_POINT, 251 165 -0.5 ] +store_suit_point [ 216, STREET_POINT, 230 155 -0.5 ] +store_suit_point [ 217, STREET_POINT, 245 155 -0.5 ] +store_suit_point [ 219, STREET_POINT, 245 140 -0.5 ] +store_suit_point [ 224, STREET_POINT, 190 165 -0.5 ] +store_suit_point [ 225, STREET_POINT, 190 155 -0.5 ] +store_suit_point [ 236, STREET_POINT, 165 165 -0.5 ] +store_suit_point [ 237, STREET_POINT, 165 157 -0.5 ] +store_suit_point [ 238, STREET_POINT, 165 140 -0.5 ] +store_suit_point [ 247, STREET_POINT, 175 140 -0.5 ] +store_suit_point [ 369, STREET_POINT, 350 -35 -0.5 ] +store_suit_point [ 370, STREET_POINT, 350 -25 -0.5 ] +store_suit_point [ 373, STREET_POINT, 365 -50 -0.5 ] +store_suit_point [ 374, STREET_POINT, 375 -50 -0.5 ] +store_suit_point [ 376, STREET_POINT, 365 -58 -0.5 ] +store_suit_point [ 377, STREET_POINT, 375 -58 -0.5 ] +store_suit_point [ 378, STREET_POINT, 365 -84 -0.5 ] +store_suit_point [ 379, STREET_POINT, 365 -90 -0.5 ] +store_suit_point [ 380, STREET_POINT, 375 -90 -0.5 ] +store_suit_point [ 381, STREET_POINT, 375 -84 -0.5 ] +store_suit_point [ 382, FRONT_DOOR_POINT, 386 -58 0, 27 ] +store_suit_point [ 383, FRONT_DOOR_POINT, 354 -84 0, 29 ] +store_suit_point [ 384, STREET_POINT, 375 -115 -0.5 ] +store_suit_point [ 385, STREET_POINT, 365 -115 -0.5 ] +store_suit_point [ 386, STREET_POINT, 365 -130 -0.5 ] +store_suit_point [ 387, STREET_POINT, 375 -130 -0.5 ] +store_suit_point [ 388, FRONT_DOOR_POINT, 386 -115 0, 43 ] +store_suit_point [ 389, STREET_POINT, 365 -145 -0.5 ] +store_suit_point [ 390, STREET_POINT, 350 -145 -0.5 ] +store_suit_point [ 391, STREET_POINT, 350 -155 -0.5 ] +store_suit_point [ 392, STREET_POINT, 368 -155 -0.5 ] +store_suit_point [ 393, STREET_POINT, 375 -155 -0.5 ] +store_suit_point [ 394, FRONT_DOOR_POINT, 368 -166 0, 30 ] +store_suit_point [ 395, STREET_POINT, 310 -145 -0.5 ] +store_suit_point [ 396, STREET_POINT, 310 -155 -0.5 ] +store_suit_point [ 397, STREET_POINT, 284 -145 -0.5 ] +store_suit_point [ 400, STREET_POINT, 284 -155 -0.5 ] +store_suit_point [ 401, FRONT_DOOR_POINT, 282 -133 0, 44 ] +store_suit_point [ 402, FRONT_DOOR_POINT, 287 -166 0, 53 ] +store_suit_point [ 403, STREET_POINT, 270 -145 -0.5 ] +store_suit_point [ 404, STREET_POINT, 253 -145 -0.5 ] +store_suit_point [ 405, STREET_POINT, 230 -145 -0.5 ] +store_suit_point [ 406, STREET_POINT, 253 -155 -0.5 ] +store_suit_point [ 407, STREET_POINT, 270 -155 -0.5 ] +store_suit_point [ 408, STREET_POINT, 230 -155 -0.5 ] +store_suit_point [ 409, FRONT_DOOR_POINT, 253 -166 0, 47 ] +store_suit_point [ 410, STREET_POINT, 215 -145 -0.5 ] +store_suit_point [ 411, STREET_POINT, 215 -130 -0.5 ] +store_suit_point [ 412, STREET_POINT, 205 -130 -0.5 ] +store_suit_point [ 413, STREET_POINT, 205 -155 -0.5 ] +store_suit_point [ 414, STREET_POINT, 210 -155 -0.5 ] +store_suit_point [ 415, FRONT_DOOR_POINT, 210 -166 0, 34 ] +store_suit_point [ 416, STREET_POINT, 215 -122 -0.5 ] +store_suit_point [ 417, STREET_POINT, 215 -85 -0.5 ] +store_suit_point [ 418, STREET_POINT, 215 -80 -0.5 ] +store_suit_point [ 419, STREET_POINT, 205 -80 -0.5 ] +store_suit_point [ 420, STREET_POINT, 205 -85 -0.5 ] +store_suit_point [ 421, STREET_POINT, 205 -122 -0.5 ] +store_suit_point [ 422, FRONT_DOOR_POINT, 194 -122 0, 35 ] +store_suit_point [ 423, FRONT_DOOR_POINT, 226 -85 0, 36 ] +store_suit_point [ 425, STREET_POINT, 215 -55 -0.5 ] +store_suit_point [ 426, STREET_POINT, 205 -55 -0.5 ] +store_suit_point [ 428, STREET_POINT, 390 205 -0.5 ] +store_suit_point [ 429, STREET_POINT, 402 205 -0.5 ] +store_suit_point [ 430, STREET_POINT, 407 205 -0.5 ] +store_suit_point [ 431, STREET_POINT, 407 215 -0.5 ] +store_suit_point [ 432, STREET_POINT, 402 215 -0.5 ] +store_suit_point [ 433, FRONT_DOOR_POINT, 402 226 0, 1 ] +store_suit_point [ 434, STREET_POINT, 375 205 -0.5 ] +store_suit_point [ 435, STREET_POINT, 390 215 -0.5 ] +store_suit_point [ 436, STREET_POINT, 365 215 -0.5 ] +store_suit_point [ 437, STREET_POINT, 365 190 -0.5 ] +store_suit_point [ 440, FRONT_DOOR_POINT, 374 -6 0, 7 ] +store_suit_point [ 444, STREET_POINT, 365 168 -0.5 ] +store_suit_point [ 445, STREET_POINT, 375 168 -0.5 ] +store_suit_point [ 446, FRONT_DOOR_POINT, 386 168 0, 2 ] +store_suit_point [ 447, STREET_POINT, 375 157 -0.5 ] +store_suit_point [ 448, FRONT_DOOR_POINT, 354 157 0, 5 ] +store_suit_point [ 449, STREET_POINT, 365 125 -0.5 ] +store_suit_point [ 450, FRONT_DOOR_POINT, 386 125 0, 38 ] +store_suit_point [ 452, STREET_POINT, 375 105 -0.5 ] +store_suit_point [ 453, STREET_POINT, 375 70 -0.5 ] +store_suit_point [ 454, FRONT_DOOR_POINT, 354 102 0, 48 ] +store_suit_point [ 455, FRONT_DOOR_POINT, 386 63 0, 49 ] +store_suit_point [ 456, STREET_POINT, 375 5 -0.5 ] +store_suit_point [ 457, STREET_POINT, 320 15 -0.5 ] +store_suit_point [ 458, STREET_POINT, 320 5 -0.5 ] +store_suit_point [ 459, STREET_POINT, 305 15 -0.5 ] +store_suit_point [ 461, STREET_POINT, 295 37 -0.5 ] +store_suit_point [ 462, STREET_POINT, 295 30 -0.5 ] +store_suit_point [ 463, STREET_POINT, 295 5 -0.5 ] +store_suit_point [ 464, FRONT_DOOR_POINT, 283 37 0, 50 ] +store_suit_point [ 465, FRONT_DOOR_POINT, 316 68 0, 10 ] +store_suit_point [ 466, FRONT_DOOR_POINT, 294 96 0, 11 ] +store_suit_point [ 467, STREET_POINT, 255 85 -0.5 ] +store_suit_point [ 468, FRONT_DOOR_POINT, 258 64 0, 12 ] +store_suit_point [ 469, FRONT_DOOR_POINT, 234 110 0, 13 ] +store_suit_point [ 470, STREET_POINT, 245 117 -0.5 ] +store_suit_point [ 471, FRONT_DOOR_POINT, 266 117 0, 14 ] +store_suit_point [ 472, STREET_POINT, 255 140 -0.5 ] +store_suit_point [ 473, STREET_POINT, 208 165 -0.5 ] +store_suit_point [ 474, STREET_POINT, 208 155 -0.5 ] +store_suit_point [ 475, FRONT_DOOR_POINT, 203 176 0, 51 ] +store_suit_point [ 476, STREET_POINT, 175 155 -0.5 ] +store_suit_point [ 477, FRONT_DOOR_POINT, 154 157 0, 17 ] +store_suit_point [ 479, STREET_POINT, 165 100 -0.5 ] +store_suit_point [ 484, STREET_POINT, 165 85 -0.5 ] +store_suit_point [ 488, STREET_POINT, 174.794 99.866 -0.5 ] +store_suit_point [ 489, STREET_POINT, 175 90 -0.5 ] +store_suit_point [ 490, STREET_POINT, 174.794 59.866 -0.5 ] +store_suit_point [ 494, STREET_POINT, 175 25.0001 -0.5 ] +store_suit_point [ 495, STREET_POINT, 190 25 -0.5 ] +store_suit_point [ 499, STREET_POINT, 169 15 -0.5 ] +store_suit_point [ 500, FRONT_DOOR_POINT, 168.794 3.866 0, 20 ] +store_suit_point [ 501, STREET_POINT, 189.794 14.866 -0.5 ] +store_suit_point [ 502, STREET_POINT, 208.794 24.866 -0.5 ] +store_suit_point [ 503, STREET_POINT, 208.794 14.866 -0.5 ] +store_suit_point [ 504, FRONT_DOOR_POINT, 208.794 35.866 0, 22 ] +store_suit_point [ 505, STREET_POINT, 230 14.9999 -0.5 ] +store_suit_point [ 506, STREET_POINT, 230 24.9999 -0.5 ] +store_suit_point [ 507, STREET_POINT, 252 24.9999 -0.5 ] +store_suit_point [ 508, STREET_POINT, 245 14.9999 -0.5 ] +store_suit_point [ 509, FRONT_DOOR_POINT, 252 35.9999 0, 23 ] +store_suit_point [ 510, STREET_POINT, 245 0 -0.5 ] +store_suit_point [ 511, STREET_POINT, 255 24.9999 -0.5 ] +store_suit_point [ 512, STREET_POINT, 255 -0.000100275 -0.5 ] +store_suit_point [ 513, STREET_POINT, 255 -25.0001 -0.5 ] +store_suit_point [ 514, STREET_POINT, 270 -25 -0.5 ] +store_suit_point [ 516, STREET_POINT, 270 -35 -0.5 ] +store_suit_point [ 517, STREET_POINT, 245 -35.0001 -0.5 ] +store_suit_point [ 518, FRONT_DOOR_POINT, 245 -46.0001 0, 24 ] +store_suit_point [ 520, FRONT_DOOR_POINT, 185 90 0, 41 ] +store_suit_point [ 524, STREET_POINT, 295 -25 -0.5 ] +store_suit_point [ 525, STREET_POINT, 310 -35 -0.5 ] +store_suit_point [ 526, STREET_POINT, 310 -25 -0.5 ] +store_suit_point [ 527, STREET_POINT, 295 -35 -0.5 ] +store_suit_point [ 528, FRONT_DOOR_POINT, 294.5 -46.5 0, 25 ] +store_suit_point [ 529, STREET_POINT, 337 -25 -0.5 ] +store_suit_point [ 530, STREET_POINT, 337 -35 -0.5 ] +store_suit_point [ 533, FRONT_DOOR_POINT, 337 -14 0, 42 ] +store_suit_point [ 534, STREET_POINT, 375 -25 -0.5 ] +store_suit_point [ 535, STREET_POINT, 365 -35 -0.5 ] +store_suit_point [ 536, FRONT_DOOR_POINT, 212 -44 0, 37 ] +store_suit_point [ 538, STREET_POINT, 365 105 -0.5 ] +store_suit_point [ 539, SIDE_DOOR_POINT, 383 230 0, 1 ] +store_suit_point [ 540, SIDE_DOOR_POINT, 390 183 0, 2 ] +store_suit_point [ 541, SIDE_DOOR_POINT, 350 135 0, 5 ] +store_suit_point [ 542, SIDE_DOOR_POINT, 390 98 0, 38 ] +store_suit_point [ 543, SIDE_DOOR_POINT, 350 65 0, 48 ] +store_suit_point [ 544, SIDE_DOOR_POINT, 390 12 0, 49 ] +store_suit_point [ 545, SIDE_DOOR_POINT, 390 -2 0, 7 ] +store_suit_point [ 546, SIDE_DOOR_POINT, 325 -10 0, 8 ] +store_suit_point [ 547, SIDE_DOOR_POINT, 280 7 0, 50 ] +store_suit_point [ 548, SIDE_DOOR_POINT, 320 50 0, 10 ] +store_suit_point [ 549, SIDE_DOOR_POINT, 277 100 0, 11 ] +store_suit_point [ 550, SIDE_DOOR_POINT, 230 77 0, 12 ] +store_suit_point [ 551, SIDE_DOOR_POINT, 230 130 0, 13 ] +store_suit_point [ 552, SIDE_DOOR_POINT, 270 133 0, 14 ] +store_suit_point [ 553, SIDE_DOOR_POINT, 270 157 0, 15 ] +store_suit_point [ 554, SIDE_DOOR_POINT, 220 180 0, 51 ] +store_suit_point [ 557, SIDE_DOOR_POINT, 190 70 0, 41 ] +store_suit_point [ 559, SIDE_DOOR_POINT, 185 0 0, 20 ] +store_suit_point [ 560, SIDE_DOOR_POINT, 195 40 0, 22 ] +store_suit_point [ 561, SIDE_DOOR_POINT, 270 -5 0, 23 ] +store_suit_point [ 562, SIDE_DOOR_POINT, 263 -50 0, 24 ] +store_suit_point [ 563, SIDE_DOOR_POINT, 328 -50 0, 25 ] +store_suit_point [ 564, SIDE_DOOR_POINT, 315 -10 0, 42 ] +store_suit_point [ 565, SIDE_DOOR_POINT, 390 -78 0, 27 ] +store_suit_point [ 566, SIDE_DOOR_POINT, 350 -113 0, 29 ] +store_suit_point [ 567, SIDE_DOOR_POINT, 390 -150 0, 43 ] +store_suit_point [ 568, SIDE_DOOR_POINT, 337 -170 0, 30 ] +store_suit_point [ 569, SIDE_DOOR_POINT, 332 -130 0, 53 ] +store_suit_point [ 570, SIDE_DOOR_POINT, 295 -130 0, 44 ] +store_suit_point [ 571, SIDE_DOOR_POINT, 303 -170 0, 53 ] +store_suit_point [ 572, SIDE_DOOR_POINT, 273 -170 0, 47 ] +store_suit_point [ 573, SIDE_DOOR_POINT, 198 -170 0, 34 ] +store_suit_point [ 574, SIDE_DOOR_POINT, 190 -138 0, 35 ] +store_suit_point [ 575, SIDE_DOOR_POINT, 230 -103 0, 36 ] +store_suit_point [ 576, SIDE_DOOR_POINT, 230 -70 0, 37 ] +store_suit_point [ 577, STREET_POINT, 150 15 -0.5 ] +store_suit_point [ 579, STREET_POINT, 105 15 -0.5 ] +store_suit_point [ 580, STREET_POINT, 105 60 -0.5 ] +store_suit_point [ 581, FRONT_DOOR_POINT, 94 27 0, 21 ] +store_suit_point [ 582, STREET_POINT, 105 84 -0.5 ] +store_suit_point [ 583, STREET_POINT, 175 119 -0.5 ] +store_suit_point [ 584, STREET_POINT, 165 119 -0.5 ] +store_suit_point [ 585, SIDE_DOOR_POINT, 151 105 0, 18 ] +store_suit_point [ 586, FRONT_DOOR_POINT, 154 119 0, 18 ] +store_suit_point [ 587, SIDE_DOOR_POINT, 150 135 0, 17 ] +store_suit_point [ 588, SIDE_DOOR_POINT, 158 0.999984 0, 21 ] +group "theBurrrgh" [ + visgroup "3101" [ + vis [ "3101" "3102" "3103" "3127" "3128" "3129" "3105" "3104" ] + suit_edge [ 428 429 ] + suit_edge [ 429 430 ] + suit_edge [ 431 432 ] + suit_edge [ 432 433 ] + suit_edge [ 433 432 ] + suit_edge [ 429 433 ] + suit_edge [ 433 429 ] + suit_edge [ 430 431 ] + suit_edge [ 432 435 ] + battle_cell [ 20 20 400 210 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 440 230 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 400 230 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 410 190 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 425 190 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 6.64 -7.42 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 440 190 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 415 230 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 20.3 -7.98 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 25 0 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 24.72 -39.62 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + landmark_building "tb1:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Northern Lights Electric Company" ] + pos [ 390 230 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -1.04 ] + scale [ 1.3 1 1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.00392157 0.494118 0.384314 1 ] + pos [ -0.05 0 -1.09 ] + scale [ 1.5 1 2 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.00392157 0.494118 0.384314 1 ] + pos [ 0 0 -2.44 ] + scale [ 1.7 1 1.9 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -3.48 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + prop "linktunnel_dd_1329_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 440 210 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + scale [ 1.6 1 1.6 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.51 ] + scale [ 1.5 1 1.1 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + pos [ 0 0 1.6 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.4 ] + scale [ 1.5 1 1 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2.05 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 31.25 ] + height [ 31.25 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 418.745 224.279 -7.62939e-006 ] + nhpr [ -30 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 435.541 201.606 -0.5 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "3102" [ + vis [ "3101" "3102" "3103" "3127" "3128" "3129" "3104" "3105" ] + suit_edge [ 434 428 ] + suit_edge [ 435 436 ] + suit_edge [ 436 437 ] + suit_edge [ 32 434 ] + suit_edge [ 539 435 ] + suit_edge [ 435 539 ] + suit_edge [ 539 428 ] + suit_edge [ 428 539 ] + battle_cell [ 20 20 370 210 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 350 190 -0.00012207 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random20_DNARoot" [ + pos [ 365 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 350 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.376471 0.866667 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 5.2 -5.19 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 14.86 -7.72 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 13.06 -3.92 0 ] + nhpr [ -75 0 -0 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 350 215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.423529 0.984314 0.741176 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.79 2.76 18.15 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 1.75 -1.24 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 350 200 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 375 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.61 1.56 19.33 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 350 190 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5.38 -33.71 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 358.34 202.54 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 355.592 209.07 -0.00012207 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "3103" [ + vis [ "3102" "3103" "3104" "3105" "3106" "3101" "3127" "3128" "3129" ] + suit_edge [ 25 26 ] + suit_edge [ 444 445 ] + suit_edge [ 445 32 ] + suit_edge [ 445 446 ] + suit_edge [ 446 445 ] + suit_edge [ 444 446 ] + suit_edge [ 446 444 ] + suit_edge [ 447 445 ] + suit_edge [ 50 447 ] + suit_edge [ 437 444 ] + suit_edge [ 444 25 ] + suit_edge [ 447 448 ] + suit_edge [ 448 447 ] + suit_edge [ 25 448 ] + suit_edge [ 448 25 ] + suit_edge [ 540 32 ] + suit_edge [ 32 540 ] + suit_edge [ 540 437 ] + suit_edge [ 437 540 ] + battle_cell [ 20 20 370 170 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb5t" [ + pos [ 350 170 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 390 160 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 350 180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 7.87 -5.7 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 390 190 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb2:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Nor'easter Bonnets" ] + pos [ 390 175 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.28 0 3.64 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.93 ] + scale [ 2 1 2.8 ] + kern [ 0.061829 ] + width [ 40.5663 ] + height [ 40.5663 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.658824 1 ] + pos [ 0 0 -4.82 ] + scale [ 2 1 2 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "tb5:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "" ] + pos [ 350 145 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + sign [ + pos [ -0.15 0 2.78 ] + scale [ 1 1 0.7 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 13 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ 350 170 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 390 150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 384.494 176.234 7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "3104" [ + vis [ "3103" "3104" "3105" "3102" "3106" "3107" "3127" "3128" "3129" "3108" "3101" "3136" ] + suit_edge [ 82 83 ] + suit_edge [ 440 82 ] + suit_edge [ 72 82 ] + suit_edge [ 456 73 ] + suit_edge [ 95 456 ] + suit_edge [ 456 440 ] + suit_edge [ 440 456 ] + suit_edge [ 544 456 ] + suit_edge [ 456 544 ] + suit_edge [ 544 82 ] + suit_edge [ 82 544 ] + suit_edge [ 545 456 ] + suit_edge [ 456 545 ] + suit_edge [ 545 82 ] + suit_edge [ 82 545 ] + battle_cell [ 20 20 370 10 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 390 30 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ 390 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 360 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 390 5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.22 0.83 0.83 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 15 -5 0 ] + nhpr [ -45 0 -0 ] + ] + ] + landmark_building "tb7:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "The Blizzard Wizard" ] + pos [ 385 -10 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -3.82 ] + nhpr [ -0 0 -1 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -0.14 0 0.5 ] + nhpr [ -0 0 4 ] + scale [ 1.2 1 1.2 ] + kern [ 0.035096 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.54 ] + scale [ 2 1 2 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -0.3 0 -3.38 ] + scale [ 2 1 2 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 24 -8 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.48 -0.72 24.29 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 390 20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3.71 7.17001 19.73 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 410 10 0 ] + nhpr [ 90 -0.104869 -1.51283e-009 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 410 20 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 384.474 17.3028 3.8147e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "3105" [ + vis [ "3102" "3103" "3104" "3105" "3106" "3107" "3108" "3109" "3110" "3111" "3127" "3128" "3129" "3101" "3112" "3136" ] + suit_edge [ 83 457 ] + suit_edge [ 458 95 ] + suit_edge [ 546 458 ] + suit_edge [ 458 546 ] + suit_edge [ 546 457 ] + suit_edge [ 457 546 ] + battle_cell [ 20 20 335 10 -0.5 ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 350 30 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random20_DNARoot" [ + pos [ 320 30 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 5 -5 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 330 30 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 9.51 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 330 40 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 330 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 20 -9 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_snowman_flat_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 14.2 -22.1 0 ] + nhpr [ -165 0 -0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 12.16 -15.7 0 ] + nhpr [ -150 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 350 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 3.25 -6.14 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ 340 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 330 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.498039 0.639216 0.847059 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 327.534 -3.51238 0 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "3106" [ + vis [ "3104" "3105" "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3129" "3136" ] + suit_edge [ 115 116 ] + suit_edge [ 116 115 ] + suit_edge [ 457 115 ] + suit_edge [ 109 458 ] + suit_edge [ 115 459 ] + suit_edge [ 459 106 ] + suit_edge [ 109 116 ] + suit_edge [ 116 109 ] + suit_edge [ 462 463 ] + suit_edge [ 463 109 ] + suit_edge [ 547 463 ] + suit_edge [ 463 547 ] + suit_edge [ 547 459 ] + suit_edge [ 459 547 ] + battle_cell [ 20 20 300 10 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 320 -10 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random20_DNARoot" [ + pos [ 280 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.67 -6.84 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 11 -8 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 8.08 -10.6 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 305 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.686275 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 24.83 -0.59 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 9.05 -1.26 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb50:random20_DNARoot" [ + pos [ 280 15 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 9 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb50:random20_DNARoot" [ + pos [ 280 0 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 15 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.06 2.34 17.91 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb8:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Nothing to Luge" ] + pos [ 320 -10 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 1.34 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -2.29 ] + scale [ 2.3 1 1.7 ] + kern [ 0.111081 ] + width [ 45.3803 ] + height [ 45.3803 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -4.72 ] + scale [ 2 1 1.6 ] + kern [ 0.181483 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -3.37 ] + scale [ 1.7 1 1 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 314.691 24.8183 7.62939e-006 ] + nhpr [ -45 0 0 ] + ] + ] + visgroup "3107" [ + vis [ "3105" "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3104" "3136" ] + suit_edge [ 119 120 ] + suit_edge [ 106 119 ] + suit_edge [ 461 462 ] + suit_edge [ 138 461 ] + suit_edge [ 461 464 ] + suit_edge [ 464 461 ] + suit_edge [ 119 464 ] + suit_edge [ 464 119 ] + suit_edge [ 548 119 ] + suit_edge [ 119 548 ] + suit_edge [ 548 461 ] + suit_edge [ 461 548 ] + battle_cell [ 20 20 300 45 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 320 30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ 320 45 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb50:random20_DNARoot" [ + pos [ 280 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 4 1 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 320 55 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb50:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Antarctic Antiques" ] + pos [ 280 30 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -0.18 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.42 ] + scale [ 1.5 1 1.5 ] + width [ 13.6986 ] + height [ 13.6986 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.93 ] + scale [ 1.3 1 1.3 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 285.183 56.0119 0 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3108" [ + vis [ "3105" "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3104" ] + suit_edge [ 131 132 ] + suit_edge [ 132 133 ] + suit_edge [ 133 134 ] + suit_edge [ 135 136 ] + suit_edge [ 136 137 ] + suit_edge [ 137 138 ] + suit_edge [ 120 131 ] + suit_edge [ 131 465 ] + suit_edge [ 465 131 ] + suit_edge [ 137 465 ] + suit_edge [ 465 137 ] + suit_edge [ 136 466 ] + suit_edge [ 466 136 ] + suit_edge [ 133 466 ] + suit_edge [ 466 133 ] + battle_cell [ 20 20 300 80 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 280 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ 300 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 8.82 -0.02 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 320 100 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 5.5 -5.96 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15.4 -6.99 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 12.7 3.66 20.22 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb11:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Mr. Cow's Snow Plows" ] + pos [ 285 100 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ -0.1 0 6.5 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ 0.03 0 -1.28 ] + scale [ 1.8 1 1 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.51 ] + scale [ 2.3 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 8 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 1.36 -32.92 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb10:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Mike's Massive Mukluk Mart" ] + pos [ 320 80 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 -0.38 ] + nhpr [ -0 0 -2 ] + scale [ 1.3 1 1.2 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.162459 0 -0.791585 ] + kern [ 0.0643727 ] + flags [ "b" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.440823 0 -2.43758 ] + scale [ 2.5 1 2.25 ] + kern [ 0.156476 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0.0901733 0 -3.51874 ] + kern [ 0.111106 ] + flags [ "b" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 281.14 90.52 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 236.713 87.0168 -1.52588e-005 ] + nhpr [ 75 0 0 ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_fightIdle" ] + pos [ 269.746 67.2911 -2.28882e-005 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "3109" [ + vis [ "3106" "3107" "3108" "3109" "3110" "3111" "3105" "3104" "3112" ] + suit_edge [ 159 160 ] + suit_edge [ 134 467 ] + suit_edge [ 467 176 ] + suit_edge [ 153 135 ] + suit_edge [ 153 468 ] + suit_edge [ 468 153 ] + suit_edge [ 467 468 ] + suit_edge [ 468 467 ] + suit_edge [ 160 153 ] + suit_edge [ 549 134 ] + suit_edge [ 134 549 ] + suit_edge [ 549 135 ] + suit_edge [ 135 549 ] + suit_edge [ 550 160 ] + suit_edge [ 160 550 ] + suit_edge [ 550 467 ] + suit_edge [ 467 550 ] + battle_cell [ 20 20 250 80 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 270 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 270 60 -1.52588e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random20_DNARoot" [ + pos [ 230 85 0 ] + nhpr [ 90 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 9 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb12:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Igloo Design" ] + pos [ 270 60 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -1.44 ] + scale [ 1.6 1 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.15 ] + scale [ 2 1 2 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -3.15 ] + kern [ 0.04 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "." ] + ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 245 60 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 7.62 -1.11 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 15.71 -4.29 0 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ 270 100 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 0 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -7.94 -8.45 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 280 60 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 8.56 0.19 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 230 60 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 230 70 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.12 3.46 17.29 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -1.8 0 0.24 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 16.2 -1 0.24 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3110" [ + vis [ "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3105" "3113" "3104" ] + suit_edge [ 176 177 ] + suit_edge [ 174 159 ] + suit_edge [ 174 469 ] + suit_edge [ 469 174 ] + suit_edge [ 177 469 ] + suit_edge [ 469 177 ] + suit_edge [ 470 174 ] + suit_edge [ 177 182 ] + suit_edge [ 182 471 ] + suit_edge [ 471 182 ] + suit_edge [ 470 471 ] + suit_edge [ 471 470 ] + suit_edge [ 219 470 ] + suit_edge [ 182 472 ] + suit_edge [ 551 219 ] + suit_edge [ 219 551 ] + suit_edge [ 551 472 ] + suit_edge [ 472 551 ] + suit_edge [ 552 472 ] + suit_edge [ 472 552 ] + suit_edge [ 552 219 ] + suit_edge [ 219 552 ] + battle_cell [ 20 20 250 120 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 270 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 270 110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 5.69 -6.12 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb13:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Ice Cycle Bikes" ] + pos [ 230 100 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + pos [ 0 0 2.2 ] + scale [ 1 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -1.01 ] + scale [ 1.3 1 1.3 ] + kern [ 0.140627 ] + width [ 27.0387 ] + height [ 27.0387 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.388235 0.776471 1 ] + pos [ 0 0 -3.37 ] + scale [ 2 1 2 ] + kern [ 0.248868 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 270 140 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 230 120 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb14:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Snowflakes Cereal Company" ] + pos [ 270 125 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.19 0 4.76 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -3.2 ] + scale [ 1.8 1 1.4 ] + width [ 17.9468 ] + height [ 17.9468 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.505882 0.505882 0.505882 1 ] + pos [ 0 0 -4.73 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "." ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.08 ] + scale [ 1.7 1 1.5 ] + width [ 14.1345 ] + height [ 14.1345 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 237.125 125.523 -1.52588e-005 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "3111" [ + vis [ "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3113" "3114" "3105" "3130" "3115" ] + suit_edge [ 211 212 ] + suit_edge [ 216 217 ] + suit_edge [ 472 202 ] + suit_edge [ 202 212 ] + suit_edge [ 212 204 ] + suit_edge [ 212 211 ] + suit_edge [ 217 211 ] + suit_edge [ 211 217 ] + suit_edge [ 217 219 ] + suit_edge [ 553 472 ] + suit_edge [ 472 553 ] + suit_edge [ 553 219 ] + suit_edge [ 219 553 ] + battle_cell [ 20 20 250 160 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 230 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ 270 180 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.1 0.26 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 270 150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 270 165 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 20.08 -36.47 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 21.01 -32.61 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 20.1 -31.48 1.8 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 19.13 -31.02 0 ] + nhpr [ 165 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8.79 3.34 17.66 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 230 180 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 3.7 -5.61 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 265 180 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + ] + ] + landmark_building "tb15:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Fried Baked Alaskas" ] + pos [ 240 180 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 0.49 9.25 21.52 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -2.28 ] + scale [ 1.4 1 1.3 ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0 1 ] + pos [ 0 0 1.19 ] + scale [ 1.1 1 1.1 ] + wiggle [ 3.89526 ] + stumble [ 0.017738 ] + stomp [ 0.040148 ] + width [ 3.77696 ] + height [ 3.77696 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.25098 0 1 ] + pos [ 0 0 -0.75 ] + scale [ 1.4 1 1.4 ] + kern [ 0.115129 ] + wiggle [ 3 ] + stomp [ 0.037622 ] + width [ 32.7397 ] + height [ 32.7397 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 265.23 163.718 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "3112" [ + vis [ "3106" "3107" "3108" "3109" "3110" "3111" "3112" "3113" "3105" "3114" "3130" "3131" "3115" ] + suit_edge [ 204 473 ] + suit_edge [ 473 224 ] + suit_edge [ 225 474 ] + suit_edge [ 474 216 ] + suit_edge [ 473 475 ] + suit_edge [ 475 473 ] + suit_edge [ 474 475 ] + suit_edge [ 475 474 ] + suit_edge [ 554 204 ] + suit_edge [ 204 554 ] + suit_edge [ 554 216 ] + suit_edge [ 216 554 ] + battle_cell [ 20 20 210 160 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 230 180 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 190 120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb41:random20_DNARoot" [ + pos [ 210 120 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 12.56 0.03 -0.24 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 210 130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 11.57 -2.85 -0.04 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 210 140 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ -3.2 -13.63 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 230 140 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 20.57 -8.09 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb51:random20_DNARoot" [ + pos [ 210 180 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb51:random20_DNARoot" [ + pos [ 190 180 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 8 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb51:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Frosty Freddy's Frozen Frankfurters" ] + pos [ 196 180 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.26 0 0.2 ] + scale [ 0.6 1 0.5 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.47 ] + scale [ 1.3 1 1.3 ] + flags [ "b" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -3.03 ] + scale [ 1.3 1 1.3 ] + flags [ "b" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 209.78 173.988 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "3113" [ + vis [ "3112" "3113" "3114" "3115" "3130" "3111" "3110" "3131" "3116" ] + suit_edge [ 236 237 ] + suit_edge [ 237 238 ] + suit_edge [ 476 225 ] + suit_edge [ 247 476 ] + suit_edge [ 237 477 ] + suit_edge [ 477 237 ] + suit_edge [ 476 477 ] + suit_edge [ 477 476 ] + suit_edge [ 224 236 ] + battle_cell [ 20 20 170 160 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 150 140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ 150 140 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 150 170 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb51:random20_DNARoot" [ + pos [ 175 180 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 12.77 -6.66 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb51:random20_DNARoot" [ + pos [ 160 180 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ -0.17 2.52 20.63 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 7.2 -1.12 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 150 180 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snowman_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 8 -6 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.2 0.11 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + ] + landmark_building "tb17:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Cold Air Balloon Rides" ] + pos [ 150 145 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 0.83 -34.23 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ -0.3 0 -2.34 ] + scale [ 1.4 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.34902 0 0.701961 1 ] + pos [ 0 0 -3.29 ] + scale [ 0.9 1 0.9 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.23 0 -2.2 ] + scale [ 2.2 1 3 ] + kern [ 0.024061 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 179.73 171.87 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 177.37 185.89 18.99 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 174.646 174.884 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "3114" [ + vis [ "3112" "3113" "3114" "3111" "3130" "3131" "3115" "3116" ] + suit_edge [ 488 583 ] + suit_edge [ 583 247 ] + suit_edge [ 238 584 ] + suit_edge [ 584 479 ] + suit_edge [ 479 585 ] + suit_edge [ 585 479 ] + suit_edge [ 488 585 ] + suit_edge [ 585 488 ] + suit_edge [ 584 586 ] + suit_edge [ 586 584 ] + suit_edge [ 583 586 ] + suit_edge [ 586 583 ] + suit_edge [ 238 587 ] + suit_edge [ 587 238 ] + suit_edge [ 247 587 ] + suit_edge [ 587 247 ] + battle_cell [ 20 20 170 115 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb41:random20_DNARoot" [ + pos [ 190 120 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 17.69 -5.48 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 17.92 -8.36 0 ] + nhpr [ 150 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 5.08 0.68 -0.24 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + landmark_building "tb18:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Snow Big Deal! Crisis Management" ] + pos [ 150 109 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.23 0 1.06 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.79 ] + scale [ 1.5 1 2.2 ] + kern [ 0.029835 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -2.99 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 150 120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 150 130 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 10.12 -35.42 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 18 -4 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 157.4 84.24 0 ] + nhpr [ -90 0 -0 ] + ] + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 190 100 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 155.688 111.242 -7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "3115" [ + vis [ "3112" "3113" "3114" "3115" "3116" "3117" "3118" "3119" "3120" "3130" "3131" "3132" "3121" "3111" ] + suit_edge [ 495 494 ] + suit_edge [ 499 500 ] + suit_edge [ 500 499 ] + suit_edge [ 494 500 ] + suit_edge [ 500 494 ] + suit_edge [ 499 501 ] + suit_edge [ 559 501 ] + suit_edge [ 501 559 ] + suit_edge [ 559 495 ] + suit_edge [ 495 559 ] + suit_edge [ 579 577 ] + suit_edge [ 580 579 ] + suit_edge [ 579 581 ] + suit_edge [ 581 579 ] + battle_cell [ 20 20 110 20 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 130 0 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 90 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 150 40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 150 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random20_DNARoot" [ + pos [ 90 0 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.219608 0.827451 0.827451 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 3 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 11 -7 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7.13 -7.55 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb21:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "The Melting Ice Cream Bar" ] + pos [ 90 15 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.69 1 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -1.55 ] + scale [ 1.3 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.3 0 0.42 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.207843 0.384314 0.792157 1 ] + pos [ 0 0 -1.35 ] + scale [ 2 1 1.5 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.247059 0.0117647 0.560784 1 ] + pos [ 0 0 -3.25 ] + scale [ 3 1 2.5 ] + kern [ 0.408203 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.4 0 1.24 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 105 0 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 14.83 -0.03 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 120 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 140 0 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 3.68483 -5.61621 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 150 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:20_DNARoot" [ + pos [ 90 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 12.4063 -5.73454 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb54:toon_landmark_hqBR_DNARoot" [ + code [ "toon_landmark_hqBR" ] + building_type [ "hq" ] + title [ "" ] + pos [ 129.737 51.9612 0 ] + nhpr [ 90 0 -0 ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ -15.4494 -1.93094 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 165 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3116" [ + vis [ "3114" "3115" "3116" "3117" "3118" "3119" "3113" "3130" "3131" "3132" "3121" "3120" ] + suit_edge [ 502 495 ] + suit_edge [ 501 503 ] + suit_edge [ 503 504 ] + suit_edge [ 504 503 ] + suit_edge [ 502 504 ] + suit_edge [ 504 502 ] + suit_edge [ 503 505 ] + suit_edge [ 506 502 ] + suit_edge [ 560 495 ] + suit_edge [ 495 560 ] + suit_edge [ 560 501 ] + suit_edge [ 501 560 ] + battle_cell [ 20 20 210 20.0001 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 190 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 210 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 230 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 230 -40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ 210 -40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 215 40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 6.61 -6.89 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 210 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.247059 0.639216 0.909804 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 190 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 7.55 -7.56 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 12 -15 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 25.98 -32.62 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 15 -35 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.1 1.1 1.1 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 14.62 0.44 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 190 40 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + ] + landmark_building "tb22:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "" ] + pos [ 200 40 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 8 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + sign [ + pos [ 0 0 7.15 ] + nhpr [ -0 0 -1 ] + scale [ 0.9 1 0.6 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 230 -40 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 10 -15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 8.28 0.31 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 218.42 31.76 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + visgroup "3117" [ + vis [ "3116" "3117" "3118" "3119" "3120" "3121" "3115" "3130" "3131" "3132" ] + suit_edge [ 507 506 ] + suit_edge [ 505 508 ] + suit_edge [ 507 509 ] + suit_edge [ 509 507 ] + suit_edge [ 508 509 ] + suit_edge [ 509 508 ] + suit_edge [ 508 510 ] + suit_edge [ 511 507 ] + suit_edge [ 512 511 ] + battle_cell [ 20 20 250 20.0001 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 230 40 0.000167847 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ 270 10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.266667 1 0.847059 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 4.58 -4.41 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 270 25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.61 1.85 22.47 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 270 40 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 13.05 -1.27 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 230 40 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 4.82 -1.11 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 265 40 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + ] + ] + landmark_building "tb23:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "The Mostly Toasty Bread Company" ] + pos [ 240 40 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 23.81 -7.66 0 ] + nhpr [ -90 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -1.92 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.2 ] + scale [ 1.3 1 0.9 ] + kern [ 0.131654 ] + stumble [ 0.05 ] + width [ 42.6639 ] + height [ 42.6639 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "." ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 1.16 ] + scale [ 1.2 1 0.8 ] + width [ 5.67466 ] + height [ 5.67466 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.32 ] + scale [ 1.6 1 1.3 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 264.639 15.033 0.000167847 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "3118" [ + vis [ "3116" "3117" "3118" "3119" "3120" "3115" "3130" "3131" "3121" "3132" ] + suit_edge [ 513 512 ] + suit_edge [ 514 513 ] + suit_edge [ 510 517 ] + suit_edge [ 517 516 ] + suit_edge [ 517 518 ] + suit_edge [ 518 517 ] + suit_edge [ 513 518 ] + suit_edge [ 518 513 ] + suit_edge [ 561 512 ] + suit_edge [ 512 561 ] + suit_edge [ 561 510 ] + suit_edge [ 510 561 ] + suit_edge [ 562 516 ] + suit_edge [ 516 562 ] + suit_edge [ 562 514 ] + suit_edge [ 514 562 ] + battle_cell [ 20 20 250 -29.9999 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 270 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 270 -50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ 240 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 5 -35 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb24:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Subzero Sandwich Shop" ] + pos [ 255 -50 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 0.46 ] + scale [ 0.6 1 0.5 ] + baseline [ + code [ "mickey" ] + color [ 0 1 1 1 ] + pos [ 0 0 -2.05 ] + scale [ 2 1 2 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.4 0.2 1 ] + pos [ 0 0 -3.4 ] + wiggle [ 3 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 270 0 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 270 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 230 -50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.61 0.55 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 236.502 -29.7729 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "3119" [ + vis [ "3116" "3117" "3118" "3119" "3120" "3115" "3131" "3130" "3132" "3121" ] + suit_edge [ 524 514 ] + suit_edge [ 526 524 ] + suit_edge [ 516 527 ] + suit_edge [ 527 525 ] + suit_edge [ 527 528 ] + suit_edge [ 528 527 ] + suit_edge [ 524 528 ] + suit_edge [ 528 524 ] + battle_cell [ 20 20 290 -30 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb42:random20_DNARoot" [ + pos [ 285 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 19.94 -7.9 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 9.81 -0.07 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ 285 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + flat_building "tb42:20_DNARoot" [ + pos [ 270 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ 310 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.486275 0.686275 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Auntie Freeze's Radiator Supply" ] + pos [ 305 -50 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.17 ] + nhpr [ -0 0 -2 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.51 ] + scale [ 1.2 1 1.3 ] + kern [ 0.127606 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.13 ] + scale [ 1.2 1 0.8 ] + kern [ 0.035792 ] + width [ 31.738 ] + height [ 31.738 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 270 -50 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 277.476 -15.3191 0 ] + nhpr [ 45 0 0 ] + ] + ] + visgroup "3120" [ + vis [ "3120" "3121" "3122" "3115" "3116" "3117" "3118" "3119" "3132" "3133" "3123" ] + suit_edge [ 374 534 ] + suit_edge [ 534 370 ] + suit_edge [ 369 535 ] + suit_edge [ 535 373 ] + suit_edge [ 530 369 ] + battle_cell [ 20 20 370 -30 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 350 -10 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb27:random20_DNARoot" [ + pos [ 390 -35 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.87 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 10.25 -6.77 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 8.5 -39.06 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 390 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.34 1.43 20.67 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 2.48 -1.12 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 390 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 5.44 -8.05 0 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7.69 -13.74 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 25.88 -6.99 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 25.15 -5.75 1.88 ] + nhpr [ 45 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 24.58 -4.89 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_snowman_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 3.91 0.75 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb42:random20_DNARoot" [ + pos [ 365 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 1.86 0.6 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb42:random20_DNARoot" [ + pos [ 350 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 7 33 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 393.65 -36.57 19.74 ] + nhpr [ -105 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 355.166 -16.6593 7.62939e-006 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "3121" [ + vis [ "3116" "3117" "3118" "3119" "3120" "3121" "3122" "3115" "3132" "3133" "3123" "3131" ] + suit_edge [ 373 376 ] + suit_edge [ 377 374 ] + suit_edge [ 376 378 ] + suit_edge [ 378 379 ] + suit_edge [ 380 381 ] + suit_edge [ 381 377 ] + suit_edge [ 377 382 ] + suit_edge [ 382 377 ] + suit_edge [ 376 382 ] + suit_edge [ 382 376 ] + suit_edge [ 378 383 ] + suit_edge [ 383 378 ] + suit_edge [ 381 383 ] + suit_edge [ 383 381 ] + suit_edge [ 565 381 ] + suit_edge [ 381 565 ] + suit_edge [ 565 378 ] + suit_edge [ 378 565 ] + battle_cell [ 20 20 370 -70 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ 350 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb29:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Pea Soup Cafe" ] + pos [ 350 -95 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 12 -9 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 2.33 ] + scale [ 1.2 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.21 ] + scale [ 1.8 1 1.3 ] + kern [ 0.1 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.333333 0 0.666667 1 ] + pos [ 0 0 -1.18 ] + scale [ 1.7 1 1 ] + kern [ 0.4 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ 390 -65 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 24.8 -6.06 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 350 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.498039 0.639216 0.847059 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.498039 0.639216 0.847059 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 12.45 -6.56 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb27:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "St. Bernard Kennel Club" ] + pos [ 390 -50 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 20.71 -6.77 0 ] + nhpr [ -180 0 -0 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ -0.17 0 4.87 ] + scale [ 0.9 1 1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.25 ] + scale [ 2 1 3 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.34902 0.176471 1 ] + pos [ -0.16 0 -3.34 ] + scale [ 2 1 1.3 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 359.43 -106.62 0 ] + nhpr [ 90 0 -0 ] + ] + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 350 -50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + visgroup "3122" [ + vis [ "3122" "3123" "3124" "3134" "3135" "3125" "3121" "3133" "3132" "3120" ] + suit_edge [ 386 389 ] + suit_edge [ 389 390 ] + suit_edge [ 391 392 ] + suit_edge [ 392 393 ] + suit_edge [ 393 387 ] + suit_edge [ 392 394 ] + suit_edge [ 394 392 ] + suit_edge [ 389 394 ] + suit_edge [ 394 389 ] + suit_edge [ 567 393 ] + suit_edge [ 393 567 ] + suit_edge [ 567 389 ] + suit_edge [ 389 567 ] + battle_cell [ 20 20 370 -150 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 390 -130 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ 355 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 390 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + ] + prop "prop_skates_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 5.03 0.4 0 ] + nhpr [ 45 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 390 -155 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7.37 -6.68 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 3.05 -6.94 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ 390 -125 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 0.92 0.61 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 8.57 -35.95 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ 390 -145 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 5.69 3.1 18.99 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ -4.53 -5.12 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb30:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Icy London, Icy France Travel Agency" ] + pos [ 380 -170 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.37 0.07 24.06 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ -0.67 0 -1.13 ] + scale [ 1.3 1 1.1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ -0.25 0 -0.31 ] + scale [ 1 1 1.3 ] + kern [ 0.014634 ] + width [ 34.4021 ] + height [ 34.4021 ] + flags [ "cd" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.16 ] + kern [ 0.079337 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "cd" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 383.272 -134.835 0 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "3123" [ + vis [ "3120" "3121" "3122" "3123" "3124" "3133" "3134" "3135" "3125" ] + suit_edge [ 390 395 ] + suit_edge [ 396 391 ] + suit_edge [ 568 391 ] + suit_edge [ 391 568 ] + suit_edge [ 568 390 ] + suit_edge [ 390 568 ] + suit_edge [ 569 390 ] + suit_edge [ 390 569 ] + suit_edge [ 569 391 ] + suit_edge [ 391 569 ] + battle_cell [ 20 20 330 -150 -0.5 ] + group "streets" [ + group "streets" [ + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 340 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb53:random20_DNARoot" [ + pos [ 310 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb53:random20_DNARoot" [ + pos [ 325 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.05 1.74 20.89 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "buildings" [ + flat_building "tb53:random20_DNARoot" [ + pos [ 325 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8.9 3.9 20.74 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -0.03 -0.03 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 350 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 3 -5 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 350 -130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 324.483 -135.173 -2.67029e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "3124" [ + vis [ "3123" "3124" "3125" "3122" "3133" "3134" "3135" "3126" ] + suit_edge [ 405 410 ] + suit_edge [ 410 411 ] + suit_edge [ 412 413 ] + suit_edge [ 413 414 ] + suit_edge [ 414 408 ] + suit_edge [ 414 415 ] + suit_edge [ 415 414 ] + suit_edge [ 410 415 ] + suit_edge [ 415 410 ] + suit_edge [ 573 413 ] + suit_edge [ 413 573 ] + suit_edge [ 573 410 ] + suit_edge [ 410 573 ] + suit_edge [ 574 412 ] + suit_edge [ 412 574 ] + suit_edge [ 574 411 ] + suit_edge [ 411 574 ] + battle_cell [ 20 20 210 -150 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 230 -170 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb34:random20_DNARoot" [ + pos [ 190 -160 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.69 2.43 18.26 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 8 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 190 -170 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb34:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Easy Chair Lifts" ] + pos [ 220 -170 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.56 ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.72 ] + scale [ 1.3 1 1.3 ] + kern [ 0.094005 ] + wiggle [ 4.07784 ] + stomp [ 0.05 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 205 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8 -11 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 16.37 -4.99 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 190 -145 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 2 -7.99998 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 230 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 2.79 -5.81 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 5.39 -7.31 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 5 -35 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 6.97 -1.13 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 223.06 -161.64 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 185.33 -157.84 18.54 ] + nhpr [ 90 0 -0 ] + color [ 0.22 0.83 0.83 1 ] + ] + ] + ] + visgroup "3125" [ + vis [ "3124" "3125" "3126" "3123" "3135" "3134" "3122" ] + suit_edge [ 411 416 ] + suit_edge [ 416 417 ] + suit_edge [ 417 418 ] + suit_edge [ 419 420 ] + suit_edge [ 420 421 ] + suit_edge [ 421 412 ] + suit_edge [ 421 422 ] + suit_edge [ 422 421 ] + suit_edge [ 416 422 ] + suit_edge [ 422 416 ] + suit_edge [ 417 423 ] + suit_edge [ 423 417 ] + suit_edge [ 420 423 ] + suit_edge [ 423 420 ] + suit_edge [ 575 416 ] + suit_edge [ 416 575 ] + suit_edge [ 575 421 ] + suit_edge [ 421 575 ] + battle_cell [ 20 20 210 -105 -0.5 ] + group "buildings" [ + flat_building "tb36:random20_DNARoot" [ + pos [ 230 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 240 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 190 -104.9 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 7.42 -6.59 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 15.21 -5.61998 -7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 9.74 -8.12 0 ] + nhpr [ -135 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 190 -114.9 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.1 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 250 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 7.03 -21.72 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 8.01 -9.25 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb35:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Used Firewood" ] + pos [ 190 -130 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.33 0 3.18 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0.215686 0.635294 0.941176 1 ] + pos [ 0 0 -2.26 ] + scale [ 1.2 1 1.8 ] + kern [ 0.031377 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 230 -95 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb36:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Affordable Goosebumps" ] + pos [ 230 -75 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + pos [ 0 0 2.23 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.690196 1 0.847059 1 ] + pos [ 0 0 -3.42 ] + scale [ 1.2 1 1.8 ] + kern [ 0.05 ] + wiggle [ 4.8546 ] + stomp [ 0.05 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.317647 0.317647 1 ] + pos [ 0 0 -1.77 ] + text [ + letters [ "a" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + group "props" [ + ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 230 -130 -7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 230 -90 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 230 -130 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 225.161 -99.822 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "3126" [ + vis [ "3125" "3126" "3135" "3134" "3124" ] + suit_edge [ 425 426 ] + suit_edge [ 418 425 ] + suit_edge [ 426 419 ] + suit_edge [ 425 536 ] + suit_edge [ 536 425 ] + suit_edge [ 576 418 ] + suit_edge [ 418 576 ] + suit_edge [ 576 419 ] + suit_edge [ 419 576 ] + battle_cell [ 20 20 210 -60 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 190 -40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 190 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 180 -40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + prop "linktunnel_br_3000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 175 -80 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 -1.19 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.06 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.96 ] + scale [ 0.8 1 0.8 ] + width [ 23.8886 ] + height [ 23.8886 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + ] + ] + ] + group "buildings" [ + flat_building "tb37:random20_DNARoot" [ + pos [ 175 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0 0.08 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 230 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.09 -8.13 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 17.43 0.67 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 190 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 190 -79.9 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 15.3 -0.11 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 225 -40 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 230 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 1 -7 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 15 -35 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb37:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Kate's Skates" ] + pos [ 200 -40 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.63 1.09 24.24 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 -0.4 ] + scale [ 1.2 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -2.95 ] + scale [ 2 1 2 ] + kern [ 0.138036 ] + wiggle [ 2.31109 ] + stomp [ 0.111645 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -4.84 ] + scale [ 1.8 1 1.8 ] + kern [ 0.081751 ] + wiggle [ 3.20472 ] + stumble [ 0.040764 ] + stomp [ 0.044064 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ 198.659 -45.8334 6.48499e-005 ] + nhpr [ 15 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 181.377 -51.4471 -0.500004 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "3127" [ + vis [ "3127" "3104" "3128" "3129" "3105" "3103" "3102" "3101" ] + suit_edge [ 48 49 ] + suit_edge [ 49 50 ] + suit_edge [ 26 449 ] + suit_edge [ 449 47 ] + suit_edge [ 49 450 ] + suit_edge [ 450 49 ] + suit_edge [ 449 450 ] + suit_edge [ 450 449 ] + suit_edge [ 541 449 ] + suit_edge [ 449 541 ] + suit_edge [ 541 49 ] + suit_edge [ 49 541 ] + battle_cell [ 20 20 370 130 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 390 110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb38:20_DNARoot" [ + pos [ 390 115 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb38:20_DNARoot" [ + pos [ 390 150 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 2.79 -6.77 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 10.99 -8.46 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 9.63 -8.07 1.95 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 8.37 -8.18 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb48:20_DNARoot" [ + pos [ 350 110 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 8.7 -4.64 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ 350 125 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2 3.77 20.98 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb38:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Toboggan or Not Toboggan" ] + pos [ 390 135 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + pos [ 0 0 1.95 ] + scale [ 1.5 1 1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.15 ] + scale [ 1.3 1 2.1 ] + width [ 7.97563 ] + height [ 7.97563 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.34 0 -3.9 ] + nhpr [ -0 0 5 ] + scale [ 1.3 1 2.2 ] + kern [ 0.189985 ] + width [ -12.7479 ] + height [ -12.7479 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 1 1 1 ] + pos [ 0 0 -1.69 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + ] + visgroup "3128" [ + vis [ "3128" "3127" "3103" "3102" "3101" "3104" "3129" "3105" "3106" "3136" ] + suit_edge [ 452 48 ] + suit_edge [ 453 452 ] + suit_edge [ 452 454 ] + suit_edge [ 454 452 ] + suit_edge [ 47 538 ] + suit_edge [ 538 60 ] + suit_edge [ 538 454 ] + suit_edge [ 454 538 ] + suit_edge [ 542 452 ] + suit_edge [ 452 542 ] + suit_edge [ 542 538 ] + suit_edge [ 538 542 ] + battle_cell [ 20 20 370 90 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 390 70 3.8147e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb48:20_DNARoot" [ + pos [ 350 85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb48:20_DNARoot" [ + pos [ 350 70 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 2 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ 390 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.3 -6.16 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb38:20_DNARoot" [ + pos [ 390 105 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb48:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Instant Ice" ] + pos [ 350 95 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.69 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.33 0 1.35 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.01 ] + scale [ 2 1 2 ] + kern [ 0.1 ] + stumble [ 0.001279 ] + flags [ "d" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.176471 0.517647 0.388235 1 ] + pos [ 0 0 -3.14 ] + scale [ 0.8 1 0.8 ] + flags [ "d" ] + text [ + letters [ "(" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "!" ] + ] + text [ + letters [ ")" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 386.098 104.234 3.8147e-006 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "3129" [ + vis [ "3129" "3128" "3127" "3103" "3102" "3104" "3105" "3106" "3101" "3136" ] + suit_edge [ 71 72 ] + suit_edge [ 73 74 ] + suit_edge [ 60 71 ] + suit_edge [ 74 453 ] + suit_edge [ 74 455 ] + suit_edge [ 455 74 ] + suit_edge [ 71 455 ] + suit_edge [ 455 71 ] + suit_edge [ 543 71 ] + suit_edge [ 71 543 ] + suit_edge [ 543 74 ] + suit_edge [ 74 543 ] + battle_cell [ 20 20 370 50 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 390 30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb48:20_DNARoot" [ + pos [ 350 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 1.82 -7.07 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 5 -7 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb48:20_DNARoot" [ + pos [ 350 60 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 4.84 2.94 13.23 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb49:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Hambrrrgers" ] + pos [ 390 75 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.69 1 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.94 0 -0.26 ] + nhpr [ -0 0 -4 ] + scale [ 1.3 1 1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -3.76 ] + scale [ 1.5 1 3 ] + kern [ 0.064604 ] + wiggle [ 2.00822 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ 390 50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 7.21745 -6.87241 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 410 40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ 409.43 40.2035 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_skates_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 11.4201 -3.09 -0.512608 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snowman_flat_DNARoot" [ + code [ "prop_snowman_flat" ] + pos [ 15.9397 -9.939 -0.512608 ] + nhpr [ -45 0 -0 ] + ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ 390 40.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 357.062 59.6615 0 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3130" [ + vis [ "3130" "3131" "3115" "3116" "3118" "3119" "3114" "3113" "3112" "3111" ] + suit_edge [ 479 484 ] + suit_edge [ 489 488 ] + suit_edge [ 490 489 ] + suit_edge [ 520 489 ] + suit_edge [ 489 520 ] + suit_edge [ 520 484 ] + suit_edge [ 484 520 ] + suit_edge [ 557 490 ] + suit_edge [ 490 557 ] + suit_edge [ 484 582 ] + suit_edge [ 582 580 ] + battle_cell [ 20 20 140 80 -0.5 ] + flat_building "tb18:20_DNARoot" [ + pos [ 90 60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 3 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 3 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 1.52 4.42 8.98 ] + nhpr [ -0 0 -0 ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb41:20_DNARoot" [ + pos [ 190 80 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 1 -8 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 5.99 0.17 0 ] + nhpr [ 30 0 -0 ] + ] + ] + landmark_building "tb41:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Fred's Red Sled Beds" ] + pos [ 190 100 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + pos [ 0 0 3.62 ] + baseline [ + code [ "mickey" ] + color [ 0 1 1 1 ] + pos [ 0 0 -3.56 ] + scale [ 2 1 2 ] + kern [ -0.107308 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.0235294 0.529412 0.901961 1 ] + pos [ 0 0 -5.21 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 150 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 90 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ 150 100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 150 100 -2.28882e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 135 100 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 125 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 105 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 4 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 7.71204 -6.18822 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 51.6467 -33.6015 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 51.9237 -66.7735 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 90 100 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 90 80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 20.2094 0.0745544 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 126.359 93.5269 -2.28882e-005 ] + nhpr [ 30 0 0 ] + ] + ] + visgroup "3131" [ + vis [ "3131" "3130" "3114" "3113" "3112" "3115" "3116" "3117" "3118" "3119" "3132" "3120" "3121" ] + suit_edge [ 494 490 ] + suit_edge [ 577 499 ] + suit_edge [ 577 588 ] + suit_edge [ 588 577 ] + battle_cell [ 20 20 170 30 -0.5 ] + flat_building "tb41:20_DNARoot" [ + pos [ 190 60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 150 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 190 40 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ 190 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + ] + landmark_building "tb20:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Skiing Clinic" ] + pos [ 180 0 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.26 0 1.24 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.94 ] + nhpr [ -0 0 1 ] + scale [ 1.8 1 2.5 ] + kern [ 0.085111 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -3.34 ] + kern [ 0.061894 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 178.573 5.5727 1.52588e-005 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "3132" [ + vis [ "3132" "3119" "3118" "3117" "3116" "3115" "3131" "3130" "3120" "3121" "3122" "3133" ] + suit_edge [ 529 526 ] + suit_edge [ 525 530 ] + suit_edge [ 529 533 ] + suit_edge [ 533 529 ] + suit_edge [ 530 533 ] + suit_edge [ 533 530 ] + suit_edge [ 370 529 ] + suit_edge [ 563 530 ] + suit_edge [ 530 563 ] + suit_edge [ 563 529 ] + suit_edge [ 529 563 ] + suit_edge [ 564 526 ] + suit_edge [ 526 564 ] + suit_edge [ 564 525 ] + suit_edge [ 525 564 ] + battle_cell [ 20 20 335 -30 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 310 -50 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 320 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 3 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 6 -5 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 350 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb42:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Eye of the Storm Optics" ] + pos [ 325 -10 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.5 0 -0.56 ] + scale [ 1.3 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.07 0 -2.24 ] + scale [ 1.3 1 1.1 ] + kern [ 0.068106 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -4.2 ] + scale [ 2 1 2 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "M" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.690196 0.737255 0.815686 1 ] + pos [ 0 0 -5.25 ] + scale [ 1.2 1 1 ] + kern [ 0.5 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 33.09 -1.22 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb25:20_DNARoot" [ + pos [ 335 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.5 2.45 20.83 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb42:20_DNARoot" [ + pos [ 305 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 15 -5 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 17.68 -7.32 0 ] + nhpr [ -15 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 337.187 -45.1048 0 ] + nhpr [ -180 0 0 ] + ] + ] + visgroup "3133" [ + vis [ "3133" "3132" "3121" "3120" "3122" "3123" "3124" "3134" "3135" ] + suit_edge [ 384 380 ] + suit_edge [ 379 385 ] + suit_edge [ 385 386 ] + suit_edge [ 387 384 ] + suit_edge [ 384 388 ] + suit_edge [ 388 384 ] + suit_edge [ 385 388 ] + suit_edge [ 388 385 ] + suit_edge [ 566 385 ] + suit_edge [ 385 566 ] + suit_edge [ 566 384 ] + suit_edge [ 384 566 ] + battle_cell [ 20 20 370 -110 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 350 -90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb43:20_DNARoot" [ + pos [ 390 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 350 -130 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 350 -105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb43:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Snowball Hall" ] + pos [ 390 -105 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + pos [ 0 0 3.22 ] + scale [ 1.1 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -2.94 ] + scale [ 2.3 1 2.5 ] + width [ 31.9611 ] + height [ 31.9611 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -4.81 ] + scale [ 2.3 1 2.3 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ 350 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + visgroup "3134" [ + vis [ "3134" "3123" "3122" "3133" "3124" "3135" "3125" "3126" ] + suit_edge [ 400 396 ] + suit_edge [ 395 397 ] + suit_edge [ 397 401 ] + suit_edge [ 401 397 ] + suit_edge [ 400 401 ] + suit_edge [ 401 400 ] + suit_edge [ 400 402 ] + suit_edge [ 402 400 ] + suit_edge [ 397 402 ] + suit_edge [ 402 397 ] + suit_edge [ 407 400 ] + suit_edge [ 397 403 ] + suit_edge [ 570 397 ] + suit_edge [ 397 570 ] + suit_edge [ 570 400 ] + suit_edge [ 400 570 ] + suit_edge [ 571 400 ] + suit_edge [ 400 571 ] + suit_edge [ 571 397 ] + suit_edge [ 397 571 ] + suit_edge [ 572 407 ] + suit_edge [ 407 572 ] + suit_edge [ 572 403 ] + suit_edge [ 403 572 ] + battle_cell [ 20 20 290 -150 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 310 -130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ 300 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 10 -6 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.15 3.65 14.26 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb53:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Ice House Jewelry" ] + pos [ 294.929 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.46 0 0.49 ] + scale [ 0.6 1 0.6 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.82 ] + scale [ 2.5 1 2.5 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -3.2 ] + scale [ 2.4 1 1.5 ] + kern [ 0.119681 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ 290 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + landmark_building "tb44:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Melted Ice Cubes" ] + pos [ 274 -130 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -1.59 -8.37 0 ] + nhpr [ 180 0 -0 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 4.1 ] + scale [ 0.9 1 0.8 ] + baseline [ + code [ "humanist" ] + color [ 0 0.368627 0.541176 1 ] + pos [ 0 0 -2.22 ] + scale [ 1.3 1 1.3 ] + kern [ 0.055524 ] + wiggle [ 2 ] + stomp [ 0.026896 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.368627 0.541176 1 ] + pos [ 0 0 -4.39 ] + scale [ 2.1 1 2.3 ] + kern [ 0.108156 ] + wiggle [ 3.30885 ] + stomp [ 0.026896 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ 270 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ 310 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 4.34 -6.09 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ 280.809 -170 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 14 -8 0 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_fightCheer" ] + cell_id [ 0 ] + pos [ 296.709 -163.161 -7.62939e-006 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "3135" [ + vis [ "3135" "3134" "3133" "3123" "3122" "3124" "3125" "3126" ] + suit_edge [ 403 404 ] + suit_edge [ 404 405 ] + suit_edge [ 406 407 ] + suit_edge [ 408 406 ] + suit_edge [ 406 409 ] + suit_edge [ 409 406 ] + suit_edge [ 404 409 ] + suit_edge [ 409 404 ] + battle_cell [ 20 20 250 -150 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 230 -170 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb47:20_DNARoot" [ + pos [ 240 -170 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 5.45999 -6.46999 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb44:20_DNARoot" [ + pos [ 250 -130 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 15.68 -6.12 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb47:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "The Sanguine Penguin Tuxedo Shop" ] + pos [ 265.173 -170 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.38 0.63 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ -0.96 0 -0.62 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.45 ] + scale [ 1.3 1 1.3 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.48 ] + scale [ 2 1 1.5 ] + kern [ 0.076654 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.6 ] + scale [ 2 1 1.5 ] + kern [ 0.122725 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -3.5 ] + scale [ 1.5 1 1 ] + kern [ 0.049109 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 238.969 -135.462 9.91821e-005 ] + nhpr [ 30 0 -0 ] + ] + ] + visgroup "3136" [ + vis [ "3136" "3104" "3105" "3106" "3107" "3129" "3128" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 488 36 0.1 ] + nhpr [ 101 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 455.445 15.6579 0.376913 ] + nhpr [ -0 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 455.558 45.327 0.296576 ] + nhpr [ 180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 464.084 45.4443 0.42244 ] + nhpr [ -180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 463.995 15.5894 0.54212 ] + nhpr [ -0 0 -0 ] + ] + ] + group "props" [ + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 410 14.0042 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 498.016 -0.581028 -0.512608 ] + nhpr [ 75 0 -0 ] + scale [ 0.728894 0.728894 0.728894 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 457.737 -15.8142 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 465.529 94.6672 -0.51302 ] + nhpr [ 74.9902 2.12323 0.71573 ] + scale [ 1.39823 1.39823 1.39823 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 491.105 48.6136 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 472.585 47.7973 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 472.497 12.3519 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 448.635 12.4866 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 448.522 47.8725 -1.49012e-008 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 470.811 -33.6567 0 ] + nhpr [ 75 2.87986 4.92213e-007 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 520.37 69.6288 8.95162 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 525.408 36.1798 5.35578 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 499.198 19.4414 0 ] + nhpr [ 75 0 -0 ] + scale [ 1.43474 1.43474 1.43474 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 474.085 67.096 0 ] + nhpr [ 75 0 -0 ] + scale [ 0.676388 0.676388 0.676388 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 422.577 3.84422 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 480.62 -1.18814 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 432.188 61.9848 0 ] + nhpr [ 75 0 -0 ] + scale [ 0.830498 0.830498 0.830498 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 422.801 55.3768 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 477.162 44.5271 0.100769 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 459.689 7.89565 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 441.362 -1.0805 0 ] + nhpr [ 75 0 -0 ] + scale [ 0.704902 0.704902 0.704902 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 455.475 69.7023 7.62939e-006 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 517.897 3.46941 13.4504 ] + nhpr [ 75 0 -0 ] + ] + ] + street "street_BR_pond_DNARoot" [ + code [ "street_BR_pond" ] + pos [ 460 30 0 ] + nhpr [ 90 -0.179523 -8.95115e-009 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + anim_prop "animated_prop_generic_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + pos [ 484.502 21.2609 0.0767517 ] + nhpr [ -120 0 -0 ] + ] + ] +] diff --git a/ttmodels/src/dna/the_burrrgh_3200.dna b/ttmodels/src/dna/the_burrrgh_3200.dna new file mode 100644 index 00000000..c3783abb --- /dev/null +++ b/ttmodels/src/dna/the_burrrgh_3200.dna @@ -0,0 +1,9553 @@ +store_suit_point [ 0, STREET_POINT, 175 360 -0.5 ] +store_suit_point [ 2, STREET_POINT, 185 360 -0.5 ] +store_suit_point [ 9, STREET_POINT, 185 350 -0.5 ] +store_suit_point [ 10, STREET_POINT, 175 350 -0.5 ] +store_suit_point [ 11, STREET_POINT, 175 336 -0.5 ] +store_suit_point [ 12, STREET_POINT, 185 336 -0.5 ] +store_suit_point [ 13, STREET_POINT, 175 315 -0.5 ] +store_suit_point [ 14, STREET_POINT, 200 315 -0.5 ] +store_suit_point [ 15, STREET_POINT, 200 325 -0.5 ] +store_suit_point [ 16, STREET_POINT, 185 325 -0.5 ] +store_suit_point [ 17, FRONT_DOOR_POINT, 164 336 0, 2 ] +store_suit_point [ 18, STREET_POINT, 220 325 -0.5 ] +store_suit_point [ 19, STREET_POINT, 220 315 -0.5 ] +store_suit_point [ 20, STREET_POINT, 233 315 -0.5 ] +store_suit_point [ 21, STREET_POINT, 240 315 -0.5 ] +store_suit_point [ 22, STREET_POINT, 240 325 -0.5 ] +store_suit_point [ 23, STREET_POINT, 233 325 -0.5 ] +store_suit_point [ 24, FRONT_DOOR_POINT, 220 336 0, 37 ] +store_suit_point [ 25, FRONT_DOOR_POINT, 233 304 0, 3 ] +store_suit_point [ 36, STREET_POINT, 260 315 -0.5 ] +store_suit_point [ 37, STREET_POINT, 282 315 -0.5 ] +store_suit_point [ 38, STREET_POINT, 285 315 -0.5 ] +store_suit_point [ 39, STREET_POINT, 285 340 -0.5 ] +store_suit_point [ 40, STREET_POINT, 275 325 -0.5 ] +store_suit_point [ 41, STREET_POINT, 260 325 -0.5 ] +store_suit_point [ 42, STREET_POINT, 275 340 -0.5 ] +store_suit_point [ 43, STREET_POINT, 275 361 -0.5 ] +store_suit_point [ 44, STREET_POINT, 285 365 -0.5 ] +store_suit_point [ 45, STREET_POINT, 300 365 -0.5 ] +store_suit_point [ 46, STREET_POINT, 300 375 -0.5 ] +store_suit_point [ 47, STREET_POINT, 275 375 -0.5 ] +store_suit_point [ 48, FRONT_DOOR_POINT, 264 361 0, 6 ] +store_suit_point [ 49, STREET_POINT, 311 375 -0.5 ] +store_suit_point [ 50, STREET_POINT, 311 365 -0.5 ] +store_suit_point [ 51, STREET_POINT, 324 365 -0.5 ] +store_suit_point [ 52, STREET_POINT, 324 375 -0.5 ] +store_suit_point [ 53, STREET_POINT, 339.999 365 -0.5 ] +store_suit_point [ 54, STREET_POINT, 339.999 375 -0.5 ] +store_suit_point [ 55, FRONT_DOOR_POINT, 311 386 0, 8 ] +store_suit_point [ 56, FRONT_DOOR_POINT, 324 354 0, 7 ] +store_suit_point [ 57, STREET_POINT, 360 365 -0.5 ] +store_suit_point [ 59, STREET_POINT, 385 375 -0.5 ] +store_suit_point [ 61, STREET_POINT, 385 350 -0.5 ] +store_suit_point [ 63, STREET_POINT, 375 365 -0.5 ] +store_suit_point [ 64, STREET_POINT, 375 350 -0.5 ] +store_suit_point [ 66, FRONT_DOOR_POINT, 396 372 0, 36 ] +store_suit_point [ 67, STREET_POINT, 375 326 -0.5 ] +store_suit_point [ 68, STREET_POINT, 375 310 -0.5 ] +store_suit_point [ 69, STREET_POINT, 385 310 -0.5 ] +store_suit_point [ 70, STREET_POINT, 385 326 -0.5 ] +store_suit_point [ 71, FRONT_DOOR_POINT, 364 326 0, 11 ] +store_suit_point [ 72, FRONT_DOOR_POINT, 396 326 0, 10 ] +store_suit_point [ 73, STREET_POINT, 375 290 -0.5 ] +store_suit_point [ 74, STREET_POINT, 385 290 -0.5 ] +store_suit_point [ 75, STREET_POINT, 385 265.001 -0.5 ] +store_suit_point [ 76, STREET_POINT, 375 275 -0.5 ] +store_suit_point [ 77, STREET_POINT, 360 275 -0.5 ] +store_suit_point [ 78, STREET_POINT, 360 265.001 -0.5 ] +store_suit_point [ 79, FRONT_DOOR_POINT, 396 265.001 0, 12 ] +store_suit_point [ 80, STREET_POINT, 320 275 -0.5 ] +store_suit_point [ 81, STREET_POINT, 320 265.001 -0.5 ] +store_suit_point [ 82, STREET_POINT, 293 275 -0.5 ] +store_suit_point [ 83, STREET_POINT, 280 275 -0.5 ] +store_suit_point [ 84, STREET_POINT, 293 265.001 -0.5 ] +store_suit_point [ 85, STREET_POINT, 280 265 -0.5 ] +store_suit_point [ 86, FRONT_DOOR_POINT, 293 286 0, 35 ] +store_suit_point [ 87, STREET_POINT, 255 275 -0.5 ] +store_suit_point [ 88, STREET_POINT, 255 250 -0.5 ] +store_suit_point [ 89, STREET_POINT, 265 265 -0.5 ] +store_suit_point [ 90, STREET_POINT, 265 250 -0.5 ] +store_suit_point [ 91, FRONT_DOOR_POINT, 244 272 0, 15 ] +store_suit_point [ 93, STREET_POINT, 240 225 -0.5 ] +store_suit_point [ 96, STREET_POINT, 265 220 -0.5 ] +store_suit_point [ 97, STREET_POINT, 255 225 -0.5 ] +store_suit_point [ 98, FRONT_DOOR_POINT, 276 220 0, 16 ] +store_suit_point [ 99, STREET_POINT, 220 225 -0.5 ] +store_suit_point [ 102, STREET_POINT, 205 225 -0.5 ] +store_suit_point [ 103, STREET_POINT, 205 250 -0.5 ] +store_suit_point [ 104, STREET_POINT, 195 250 -0.5 ] +store_suit_point [ 105, STREET_POINT, 195 222 -0.5 ] +store_suit_point [ 109, FRONT_DOOR_POINT, 184 222 0, 18 ] +store_suit_point [ 116, STREET_POINT, 180 275 -0.5 ] +store_suit_point [ 117, STREET_POINT, 173 275 -0.5 ] +store_suit_point [ 118, STREET_POINT, 140 275 -0.5 ] +store_suit_point [ 119, STREET_POINT, 140 265 -0.5 ] +store_suit_point [ 120, STREET_POINT, 173 265 -0.5 ] +store_suit_point [ 121, STREET_POINT, 180 265 -0.5 ] +store_suit_point [ 122, FRONT_DOOR_POINT, 173 286 0, 21 ] +store_suit_point [ 123, STREET_POINT, 130 275 -0.5 ] +store_suit_point [ 124, STREET_POINT, 125 275 -0.5 ] +store_suit_point [ 125, STREET_POINT, 125 300 -0.5 ] +store_suit_point [ 127, STREET_POINT, 115 270 -0.5 ] +store_suit_point [ 128, STREET_POINT, 115 300 -0.5 ] +store_suit_point [ 129, STREET_POINT, 130 265 -0.5 ] +store_suit_point [ 130, STREET_POINT, 115 265 -0.5 ] +store_suit_point [ 131, FRONT_DOOR_POINT, 134 254 0, 34 ] +store_suit_point [ 132, FRONT_DOOR_POINT, 104 270 0, 22 ] +store_suit_point [ 133, STREET_POINT, 125 307 -0.5 ] +store_suit_point [ 134, STREET_POINT, 125 325 -0.5 ] +store_suit_point [ 135, STREET_POINT, 100 325 -0.5 ] +store_suit_point [ 136, STREET_POINT, 100 315 -0.5 ] +store_suit_point [ 137, STREET_POINT, 115 315 -0.5 ] +store_suit_point [ 138, STREET_POINT, 115 307 -0.5 ] +store_suit_point [ 139, FRONT_DOOR_POINT, 136 307 0, 23 ] +store_suit_point [ 140, STREET_POINT, 90 325 -0.5 ] +store_suit_point [ 141, STREET_POINT, 72 325 -0.5 ] +store_suit_point [ 142, STREET_POINT, 60 325 -0.5 ] +store_suit_point [ 143, STREET_POINT, 60 315 -0.5 ] +store_suit_point [ 144, STREET_POINT, 72 315 -0.5 ] +store_suit_point [ 145, STREET_POINT, 90 315 -0.5 ] +store_suit_point [ 146, FRONT_DOOR_POINT, 90 336 0, 25 ] +store_suit_point [ 147, FRONT_DOOR_POINT, 72 304 0, 24 ] +store_suit_point [ 148, STREET_POINT, 40 325 -0.5 ] +store_suit_point [ 149, STREET_POINT, 40 315 -0.5 ] +store_suit_point [ 150, STREET_POINT, 33 325 -0.5 ] +store_suit_point [ 151, STREET_POINT, 15 325 -0.5 ] +store_suit_point [ 152, STREET_POINT, 15 300 -0.5 ] +store_suit_point [ 153, STREET_POINT, 25 300 -0.5 ] +store_suit_point [ 154, STREET_POINT, 25 315 -0.5 ] +store_suit_point [ 155, STREET_POINT, 33 315 -0.5 ] +store_suit_point [ 156, FRONT_DOOR_POINT, 33 336 0, 26 ] +store_suit_point [ 157, STREET_POINT, 25 295 -0.5 ] +store_suit_point [ 158, STREET_POINT, 15 295 -0.5 ] +store_suit_point [ 159, STREET_POINT, 25 263 -0.5 ] +store_suit_point [ 160, STREET_POINT, 25 260 -0.5 ] +store_suit_point [ 161, STREET_POINT, 15 263 -0.5 ] +store_suit_point [ 162, STREET_POINT, 15 260 -0.5 ] +store_suit_point [ 163, FRONT_DOOR_POINT, 4.00002 292 0, 38 ] +store_suit_point [ 164, FRONT_DOOR_POINT, 36 263 0, 29 ] +store_suit_point [ 165, STREET_POINT, 25 237 -0.5 ] +store_suit_point [ 166, STREET_POINT, 25 220 -0.5 ] +store_suit_point [ 167, STREET_POINT, 15 237 -0.5 ] +store_suit_point [ 168, STREET_POINT, 15 220 -0.5 ] +store_suit_point [ 169, FRONT_DOOR_POINT, 4.00002 237 0, 28 ] +store_suit_point [ 170, STREET_POINT, 15 195 -0.5 ] +store_suit_point [ 171, STREET_POINT, 40 195 -0.5 ] +store_suit_point [ 172, STREET_POINT, 40 205 -0.5 ] +store_suit_point [ 173, STREET_POINT, 25 205 -0.5 ] +store_suit_point [ 174, FRONT_DOOR_POINT, 13 184 0, 30 ] +store_suit_point [ 175, STREET_POINT, 58 205 -0.5 ] +store_suit_point [ 176, STREET_POINT, 58 195 -0.5 ] +store_suit_point [ 177, STREET_POINT, 80 195 -0.5 ] +store_suit_point [ 178, STREET_POINT, 80 205 -0.5 ] +store_suit_point [ 179, FRONT_DOOR_POINT, 58 184 0, 31 ] +store_suit_point [ 180, STREET_POINT, 95 195 -0.5 ] +store_suit_point [ 181, STREET_POINT, 95 180 -0.5 ] +store_suit_point [ 182, STREET_POINT, 105 180 -0.5 ] +store_suit_point [ 183, STREET_POINT, 105 195 -0.5 ] +store_suit_point [ 184, STREET_POINT, 105 205 -0.5 ] +store_suit_point [ 185, FRONT_DOOR_POINT, 116 195 0, 32 ] +store_suit_point [ 192, FRONT_DOOR_POINT, 282 304 0, 5 ] +store_suit_point [ 193, STREET_POINT, 360 375 -0.5 ] +store_suit_point [ 194, STREET_POINT, 205 268 -0.5 ] +store_suit_point [ 195, STREET_POINT, 205 275 -0.5 ] +store_suit_point [ 197, STREET_POINT, 195 265 -0.5 ] +store_suit_point [ 198, FRONT_DOOR_POINT, 216 268 0, 19 ] +store_suit_point [ 199, SIDE_DOOR_POINT, 160 307 0, 2 ] +store_suit_point [ 200, SIDE_DOOR_POINT, 200 347 0, 37 ] +store_suit_point [ 201, SIDE_DOOR_POINT, 190 300 0, 3 ] +store_suit_point [ 202, SIDE_DOOR_POINT, 252 340 0, 37 ] +store_suit_point [ 204, SIDE_DOOR_POINT, 267 300 0, 5 ] +store_suit_point [ 205, SIDE_DOOR_POINT, 287 390 0, 6 ] +store_suit_point [ 206, SIDE_DOOR_POINT, 355 390 0, 8 ] +store_suit_point [ 207, SIDE_DOOR_POINT, 300 345 0, 7 ] +store_suit_point [ 208, SIDE_DOOR_POINT, 382 390 0, 36 ] +store_suit_point [ 209, SIDE_DOOR_POINT, 360 345 0, 11 ] +store_suit_point [ 210, SIDE_DOOR_POINT, 400 343 0, 10 ] +store_suit_point [ 211, SIDE_DOOR_POINT, 393 250 0, 12 ] +store_suit_point [ 212, SIDE_DOOR_POINT, 270 290 0, 35 ] +store_suit_point [ 213, SIDE_DOOR_POINT, 288 250 0, 16 ] +store_suit_point [ 214, SIDE_DOOR_POINT, 230 240 0, 15 ] +store_suit_point [ 216, SIDE_DOOR_POINT, 180 242 0, 18 ] +store_suit_point [ 217, SIDE_DOOR_POINT, 220 248 0, 19 ] +store_suit_point [ 218, SIDE_DOOR_POINT, 145 290 0, 21 ] +store_suit_point [ 219, SIDE_DOOR_POINT, 145 250 0, 34 ] +store_suit_point [ 221, SIDE_DOOR_POINT, 140 320 0, 23 ] +store_suit_point [ 222, SIDE_DOOR_POINT, 120 340 0, 25 ] +store_suit_point [ 223, SIDE_DOOR_POINT, 62.0001 340 0, 26 ] +store_suit_point [ 224, SIDE_DOOR_POINT, 40.0001 287 0, 24 ] +store_suit_point [ 225, SIDE_DOOR_POINT, 0 304 0, 38 ] +store_suit_point [ 226, SIDE_DOOR_POINT, 40 245 0, 29 ] +store_suit_point [ 227, SIDE_DOOR_POINT, 0 215 0, 28 ] +store_suit_point [ 228, SIDE_DOOR_POINT, 27 180 0, 30 ] +store_suit_point [ 229, SIDE_DOOR_POINT, 75 180 0, 31 ] +store_suit_point [ 230, SIDE_DOOR_POINT, 102 220 0, 32 ] +store_suit_point [ 231, SIDE_DOOR_POINT, 92.2813 300.022 0, 22 ] +store_suit_point [ 232, STREET_POINT, 195 200 -0.5 ] +store_suit_point [ 235, STREET_POINT, 265 200 -0.5 ] +store_suit_point [ 236, STREET_POINT, 265 155 -0.5 ] +store_suit_point [ 237, STREET_POINT, 240 155 -0.5 ] +store_suit_point [ 238, STREET_POINT, 212 155 -0.5 ] +store_suit_point [ 239, STREET_POINT, 195 155 -0.5 ] +store_suit_point [ 240, FRONT_DOOR_POINT, 212 144 0, 17 ] +store_suit_point [ 241, SIDE_DOOR_POINT, 243 141 0, 17 ] +group "theBurrrgh" [ + visgroup "3201" [ + vis [ "3201" "3202" "3203" "3204" "3225" ] + suit_edge [ 2 0 ] + suit_edge [ 9 2 ] + suit_edge [ 0 10 ] + battle_cell [ 20 20 180 360 -0.5 ] + group "streets" [ + street "street_5x40_DNARoot" [ + code [ "street_5x40" ] + pos [ 155 350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 160 390 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 160 350 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.407843 0.576471 0.847059 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 180 390 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.41 0.77 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.24 1.87 18.99 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 200 390 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 14 -6 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 9.17 -9.05 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 6.39 -8.74 0 ] + nhpr [ -165 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 200 375 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 8.99 -7.07 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + prop "linktunnel_mm_4201_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 155 370 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.46 ] + nhpr [ -0 0 1 ] + scale [ 1.5 1 1.1 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.47 ] + nhpr [ -0 0 1 ] + scale [ 1.5 1 1 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.67 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -2.14 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb37:random_DNARoot" [ + pos [ 155 390 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 3 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -0.39 -4.52 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 12.23 -35.61 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 170 390 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 8.94 -6.98 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -1.77 0.47 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 193.97 353.221 7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 161.29 378.271 -0.500015 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3202" [ + vis [ "3201" "3202" "3203" "3204" "3205" "3206" "3207" "3225" "3226" ] + suit_edge [ 10 11 ] + suit_edge [ 12 9 ] + suit_edge [ 11 13 ] + suit_edge [ 13 14 ] + suit_edge [ 15 16 ] + suit_edge [ 16 12 ] + suit_edge [ 11 17 ] + suit_edge [ 17 11 ] + suit_edge [ 12 17 ] + suit_edge [ 17 12 ] + suit_edge [ 199 13 ] + suit_edge [ 13 199 ] + suit_edge [ 199 16 ] + suit_edge [ 16 199 ] + suit_edge [ 200 9 ] + suit_edge [ 9 200 ] + suit_edge [ 200 10 ] + suit_edge [ 10 200 ] + suit_edge [ 201 14 ] + suit_edge [ 14 201 ] + suit_edge [ 201 15 ] + suit_edge [ 15 201 ] + battle_cell [ 20 20 180 320 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 160 350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 200 300 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 180 300 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.78 2.81 17.43 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 3.15 -7.46 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 160 315 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 6.43 -6.25 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 160 345 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + landmark_building "tb2:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Winter Storage" ] + pos [ 160 325 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0.31 0 -0.1 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.54 ] + scale [ 1.3 1 1.3 ] + width [ 28.4131 ] + height [ 28.4131 ] + flags [ "b" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 160 300 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11 3 18 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.27 1 0.85 1 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.31 0.38 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 200 300 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 200 355 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 19.61 -5.54 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + ] + group "props" [ + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 160 303 19 ] + nhpr [ 120 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 168.968 304.444 7.62939e-006 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "3203" [ + vis [ "3201" "3202" "3203" "3204" "3205" "3206" "3207" "3225" "3226" ] + suit_edge [ 18 15 ] + suit_edge [ 14 19 ] + suit_edge [ 19 20 ] + suit_edge [ 20 21 ] + suit_edge [ 22 23 ] + suit_edge [ 23 18 ] + suit_edge [ 18 24 ] + suit_edge [ 24 18 ] + suit_edge [ 19 24 ] + suit_edge [ 24 19 ] + suit_edge [ 20 25 ] + suit_edge [ 25 20 ] + suit_edge [ 23 25 ] + suit_edge [ 25 23 ] + battle_cell [ 20 20 220 320 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 200 300 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb3:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "" ] + pos [ 245 300 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 12.74 -9.03 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 224.5 340 0 ] + nhpr [ -0 0 -0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 9.5 0 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 5.08 0.32 0 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 200 340 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 6.48 1.19 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5.26 -7.86 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 225 300 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.156863 0.666667 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 16.06 -7.31 1.9 ] + nhpr [ -60 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 15 -8.38 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 16.8 -6.56 0 ] + nhpr [ -60 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 229.55 331.86 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb37:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Downhill Diner" ] + pos [ 210 340 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0 0.87 0.69 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0.34 0 -0.1 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.74 ] + scale [ 1.5 1 1.5 ] + width [ 28.9478 ] + height [ 28.9478 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.93 ] + kern [ 0.093566 ] + width [ 4.19801 ] + height [ 4.19801 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + visgroup "3204" [ + vis [ "3201" "3202" "3203" "3204" "3205" "3206" "3207" "3225" "3226" ] + suit_edge [ 36 37 ] + suit_edge [ 37 38 ] + suit_edge [ 38 39 ] + suit_edge [ 40 41 ] + suit_edge [ 42 40 ] + suit_edge [ 37 192 ] + suit_edge [ 192 37 ] + suit_edge [ 40 192 ] + suit_edge [ 192 40 ] + suit_edge [ 204 36 ] + suit_edge [ 36 204 ] + suit_edge [ 204 41 ] + suit_edge [ 41 204 ] + battle_cell [ 20 20 280 320 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 300 340 2.28882e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ 300 340 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 3.14 -6.51 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 300 325 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.54 1.8 22.28 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 10.74 -6.12 0 ] + nhpr [ 15 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 13 -8 0 ] + nhpr [ -30 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 3.56 -1.27 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 300 310 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 0 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 2.57 -7.02 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 275 300 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 300 300 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Icicles Built for Two" ] + pos [ 290 300 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.42 0 5.57 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -3.05 ] + scale [ 3 1 3 ] + kern [ 0.158845 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -4.8 ] + scale [ 1.5 1 2 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 294.995 327.629 2.28882e-005 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "3205" [ + vis [ "3202" "3203" "3204" "3205" "3206" "3207" "3208" "3225" "3226" ] + suit_edge [ 43 42 ] + suit_edge [ 39 44 ] + suit_edge [ 44 45 ] + suit_edge [ 46 47 ] + suit_edge [ 47 43 ] + suit_edge [ 43 48 ] + suit_edge [ 48 43 ] + suit_edge [ 44 48 ] + suit_edge [ 48 44 ] + suit_edge [ 205 44 ] + suit_edge [ 44 205 ] + suit_edge [ 205 47 ] + suit_edge [ 47 205 ] + suit_edge [ 207 39 ] + suit_edge [ 39 207 ] + suit_edge [ 207 42 ] + suit_edge [ 42 207 ] + battle_cell [ 20 20 280 370 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 300 340 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 260 350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random20_DNARoot" [ + pos [ 295 390 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ 260 390 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 16.16 -7.9 0 ] + nhpr [ 60 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.61 -6.46 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.37 1.9 19.04 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -0.21 0.42 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb6:random30_DNARoot" [ + pos [ 260 365 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 8.94 -6.56 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ 280 390 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.266667 1 0.847059 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ 300 350 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.27 1 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ 260 340 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 5.91 -7 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 12.19 -6.68 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 15.8 -35.1 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb6:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Shiverin' Shakes Malt Shop" ] + pos [ 260 350 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0 1 ] + pos [ 0 0 -0.43 ] + scale [ 1.2 1 1.3 ] + kern [ 0.100637 ] + width [ 50 ] + height [ 50 ] + flags [ "c" ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.15 ] + scale [ 1.6 1 1.1 ] + kern [ 0.021865 ] + width [ 60.0204 ] + height [ 60.0204 ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 263.89 395.82 17.92 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 292.129 384.106 -2.28882e-005 ] + nhpr [ -30 0 0 ] + ] + ] + visgroup "3206" [ + vis [ "3202" "3203" "3204" "3205" "3206" "3207" "3208" "3209" "3225" "3226" "3227" "3236" ] + suit_edge [ 49 46 ] + suit_edge [ 45 50 ] + suit_edge [ 50 51 ] + suit_edge [ 52 49 ] + suit_edge [ 51 53 ] + suit_edge [ 54 52 ] + suit_edge [ 49 55 ] + suit_edge [ 55 49 ] + suit_edge [ 50 55 ] + suit_edge [ 55 50 ] + suit_edge [ 51 56 ] + suit_edge [ 56 51 ] + suit_edge [ 52 56 ] + suit_edge [ 56 52 ] + battle_cell [ 20 20 320 370 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 300 350 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ 315 350 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -0.8 -8.71 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 8.81 -2.02 0 ] + nhpr [ 30 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + landmark_building "tb8:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Pluto's Place" ] + pos [ 300 390 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ -0.47 0 -2.05 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.58 0 -1.49 ] + scale [ 1.7 1 1.7 ] + flags [ "bd" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 1.29 0 -3.21 ] + scale [ 1.7 1 1.7 ] + flags [ "bd" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + landmark_building "tb7:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Snowplace Like Home" ] + pos [ 335 350 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.25 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -0.4 ] + scale [ 1.1 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.15 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 320 390 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ 330 410 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 330 390 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 330 430 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.23 0.85 0.6 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 9.63785 -3.97998 0 ] + nhpr [ 60 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb7:20_DNARoot" [ + pos [ 340 350 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 330.098 383.722 -7.62939e-006 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "3207" [ + vis [ "3202" "3203" "3204" "3205" "3206" "3207" "3208" "3209" "3210" "3225" "3226" "3227" "3230" "3236" ] + suit_edge [ 61 59 ] + suit_edge [ 63 64 ] + suit_edge [ 59 66 ] + suit_edge [ 66 59 ] + suit_edge [ 63 66 ] + suit_edge [ 66 63 ] + suit_edge [ 57 63 ] + suit_edge [ 59 193 ] + suit_edge [ 208 59 ] + suit_edge [ 59 208 ] + suit_edge [ 208 63 ] + suit_edge [ 63 208 ] + battle_cell [ 20 20 380 370 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 360 390 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + group "group=1" [ + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 360 390 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 3 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 4.76 -4.07 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.72549 0.913725 0.94902 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.16 -32.05 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.13 2.13 19.13 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 390 390 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 1.38 -1.17 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 8.58 -26.84 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 400 370 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 15.02 0.79 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 17.9 -5.91 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 375 390 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 14 -6 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10 3 18 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 400 390 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 3.72 0.99 -0.11 ] + nhpr [ 45 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 378.7 395.7 19.45 ] + nhpr [ -30 0 -0 ] + ] + ] + landmark_building "tb36:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Diced Ice at a Nice Price" ] + pos [ 400 382 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0 0.87 0.69 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.15 0 1.33 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.0235294 0.513726 1 1 ] + pos [ 0 0 -3.47 ] + scale [ 2.4 1 3.4 ] + kern [ 0.085769 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.29 0 -4.95 ] + scale [ 1.3 1 1.4 ] + kern [ 0.04 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 371.592 384.79 -7.62939e-006 ] + nhpr [ 15 0 0 ] + ] + ] + visgroup "3208" [ + vis [ "3205" "3206" "3207" "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3226" "3227" "3228" "3230" "3236" ] + suit_edge [ 64 67 ] + suit_edge [ 67 68 ] + suit_edge [ 69 70 ] + suit_edge [ 70 61 ] + suit_edge [ 67 71 ] + suit_edge [ 71 67 ] + suit_edge [ 70 71 ] + suit_edge [ 71 70 ] + suit_edge [ 70 72 ] + suit_edge [ 72 70 ] + suit_edge [ 67 72 ] + suit_edge [ 72 67 ] + suit_edge [ 209 64 ] + suit_edge [ 64 209 ] + suit_edge [ 209 61 ] + suit_edge [ 61 209 ] + suit_edge [ 210 61 ] + suit_edge [ 61 210 ] + suit_edge [ 210 64 ] + suit_edge [ 64 210 ] + battle_cell [ 20 20 380 330 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 360 350 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ 360 305 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 2.75 -4.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 400 319.8 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb11:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "" ] + pos [ 360 315 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 12 -9 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ 400 350 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.59 0.85 0.69 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 13 -8 0 ] + nhpr [ 105 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ 360 340 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.38 0.63 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb10:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Dropping Degrees Diner" ] + pos [ 400 335 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.59 1 0.92 1 ] + ] + prop "prop_post_sign_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 21.46 -7.42 0 ] + nhpr [ -180 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + nhpr [ -0 0 -4 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.44 ] + scale [ 1.2 1 1.6 ] + kern [ 0.099215 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -1.23 ] + scale [ 1.5 1 1 ] + kern [ 0.315558 ] + width [ 39.7393 ] + height [ 39.7393 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 368.182 339.019 -1.52588e-005 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3209" [ + vis [ "3206" "3207" "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3226" "3227" "3228" "3229" "3230" "3236" ] + suit_edge [ 75 74 ] + suit_edge [ 73 76 ] + suit_edge [ 76 77 ] + suit_edge [ 78 75 ] + suit_edge [ 75 79 ] + suit_edge [ 79 75 ] + suit_edge [ 76 79 ] + suit_edge [ 79 76 ] + suit_edge [ 211 75 ] + suit_edge [ 75 211 ] + suit_edge [ 211 76 ] + suit_edge [ 76 211 ] + battle_cell [ 20 20 380 270 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 400 290 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random20_DNARoot" [ + pos [ 375 250 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 9.92 -5.45 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 385 250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 4.86 0.38 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -3.71 1.9 19.07 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 400 255 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 400 290 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 8.95 -3.91 1.95 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 10.13 -3.87 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 7.71 -3.98 0 ] + nhpr [ -60 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 2.65 -6.09 0 ] + nhpr [ 105 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.42 -31.81 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 400 250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.38 0.63 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 1.82 2.07 0.02 ] + nhpr [ 75.0069 1.03406 -0.258849 ] + ] + ] + landmark_building "tb12:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Go With the Floe" ] + pos [ 400 275 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 2.11996 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ -4.57591 0 -2.05277 ] + scale [ 2 1 2.40139 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ -0.813266 0 -1.64411 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 3.7656 0 -2.08841 ] + scale [ 2 1 2.4 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -3.34693 ] + kern [ 0.106287 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 377.807 255.791 -1.52588e-005 ] + nhpr [ -180 0 0 ] + ] + ] + visgroup "3210" [ + vis [ "3207" "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3227" "3228" "3229" "3230" "3234" ] + suit_edge [ 77 80 ] + suit_edge [ 81 78 ] + battle_cell [ 20 20 340 270 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ 340 290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ -3.58 -0.81 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ -1.03 -1.4 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 7.42 -6.72 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ 350 290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 320 250 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 323.307 255.208 0 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "3211" [ + vis [ "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3229" "3230" "3228" "3227" "3235" "3234" ] + suit_edge [ 83 87 ] + suit_edge [ 87 88 ] + suit_edge [ 89 85 ] + suit_edge [ 90 89 ] + suit_edge [ 87 91 ] + suit_edge [ 91 87 ] + suit_edge [ 89 91 ] + suit_edge [ 91 89 ] + suit_edge [ 212 87 ] + suit_edge [ 87 212 ] + suit_edge [ 212 89 ] + suit_edge [ 89 212 ] + battle_cell [ 20 20 260 260 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 240 250 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ 240 255 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 3.14 -31.88 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 0.81 -1.3 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 240 290 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.77 -7.64 0 ] + nhpr [ 90 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 18.51 -1.3 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb15:random20_DNARoot" [ + pos [ 240 285 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb15:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Aunt Arctic's Soup Shop" ] + pos [ 240 260 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 1.75 7.83 17.91 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -3.46 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.392157 1 ] + pos [ 0.34 0 -1.21 ] + nhpr [ -0 0 1 ] + scale [ 1.9 1 1.1 ] + kern [ 0.196716 ] + width [ 35.5341 ] + height [ 35.5341 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 0.64 ] + scale [ 1.5 1 1.2 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0.09 0 0.6 ] + scale [ 1.3 1 2 ] + kern [ 0.072941 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.38 ] + scale [ 1.5 1 1.4 ] + kern [ 0.171755 ] + width [ 48.9524 ] + height [ 48.9524 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 260 290 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 18 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.68 1.32 19.6 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 249.31 259.57 0 ] + nhpr [ 90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 254.329 283.788 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "3212" [ + vis [ "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3228" "3229" "3227" "3235" "3234" ] + suit_edge [ 96 90 ] + suit_edge [ 88 97 ] + suit_edge [ 97 93 ] + suit_edge [ 96 98 ] + suit_edge [ 98 96 ] + suit_edge [ 97 98 ] + suit_edge [ 98 97 ] + suit_edge [ 235 96 ] + battle_cell [ 20 20 256 221 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 240 250 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 240 240 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ 240 240 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ -6.94 -7.54 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 4.48 -4.48 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 280 215 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 280 250 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.87 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.87 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 8.66 -6.78 0 ] + nhpr [ 150 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.4 4.4 17.34 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Road Salt and Pepper" ] + pos [ 280 230 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 0.52 ] + nhpr [ -0 0 -1 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.592157 0.592157 1 ] + pos [ 0 0 -2.01 ] + scale [ 2 1 2.6 ] + kern [ 0.04201 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -3.13 ] + scale [ 1.3 1 1 ] + kern [ 0.170548 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 273.752 231.31 9.91821e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "3213" [ + vis [ "3209" "3210" "3211" "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3228" "3229" "3208" "3227" "3220" "3231" "3235" "3234" ] + suit_edge [ 93 99 ] + suit_edge [ 214 93 ] + suit_edge [ 93 214 ] + battle_cell [ 20 20 230 220 -0.5 ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 240 240 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb15:random20_DNARoot" [ + pos [ 220 240 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 3 -6 0 ] + nhpr [ 60 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb39:toon_landmark_hqBR_DNARoot" [ + code [ "toon_landmark_hqBR" ] + building_type [ "hq" ] + title [ "" ] + pos [ 230 200 0 ] + nhpr [ -0 0 -0 ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 15 5 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -15 5 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "3214" [ + vis [ "3208" "3209" "3210" "3211" "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3229" "3227" "3228" "3220" "3231" "3235" "3234" ] + suit_edge [ 102 103 ] + suit_edge [ 104 105 ] + suit_edge [ 105 109 ] + suit_edge [ 109 105 ] + suit_edge [ 102 109 ] + suit_edge [ 109 102 ] + suit_edge [ 216 104 ] + suit_edge [ 104 216 ] + suit_edge [ 216 103 ] + suit_edge [ 103 216 ] + suit_edge [ 217 103 ] + suit_edge [ 103 217 ] + suit_edge [ 217 104 ] + suit_edge [ 104 217 ] + suit_edge [ 99 102 ] + suit_edge [ 105 232 ] + battle_cell [ 20 20 200 230 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 220 240 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 220 200 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb18:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Designer Inner Tubes" ] + pos [ 180 210 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -2.14 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.76 ] + scale [ 0.8 1 0.9 ] + width [ 34.0182 ] + height [ 34.0182 ] + flags [ "b" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 180 235 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 14 -4 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 180 200 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0 0.87 0.69 1 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 200.04 208.43 0 ] + nhpr [ -90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 186.048 232.245 7.62939e-006 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "3215" [ + vis [ "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3220" "3231" "3235" "3234" ] + suit_edge [ 103 194 ] + suit_edge [ 194 195 ] + suit_edge [ 195 116 ] + suit_edge [ 197 104 ] + suit_edge [ 194 198 ] + suit_edge [ 198 194 ] + suit_edge [ 197 198 ] + suit_edge [ 198 197 ] + suit_edge [ 121 197 ] + battle_cell [ 20 20 200 265 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 180 290 -3.8147e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random20_DNARoot" [ + pos [ 180 290 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.376471 0.627451 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 185 290 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -4.11 0.59 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.46 1.8 19.47 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 210 290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 3.37 -4.06 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 220 290 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb19:random20_DNARoot" [ + pos [ 220.01 255 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Ice Cube on a Stick" ] + pos [ 220 280 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.69 1 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 24.39 -34.9 0 ] + nhpr [ 90 0 -0 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 -2.2 ] + scale [ 1.3 1 1.2 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.99 ] + scale [ 2.8 1 2.3 ] + wiggle [ 3.35466 ] + stomp [ 0.050493 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -3.21 ] + scale [ 1.8 1 1 ] + kern [ 0.120946 ] + wiggle [ 4.26073 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 196.16 297.63 19.7 ] + nhpr [ -45 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 198.818 284.199 -3.8147e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "3216" [ + vis [ "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3220" "3231" "3235" "3234" ] + suit_edge [ 116 117 ] + suit_edge [ 117 118 ] + suit_edge [ 119 120 ] + suit_edge [ 120 121 ] + suit_edge [ 117 122 ] + suit_edge [ 122 117 ] + suit_edge [ 120 122 ] + suit_edge [ 122 120 ] + suit_edge [ 218 118 ] + suit_edge [ 118 218 ] + suit_edge [ 218 119 ] + suit_edge [ 119 218 ] + suit_edge [ 219 119 ] + suit_edge [ 119 219 ] + suit_edge [ 219 118 ] + suit_edge [ 118 219 ] + battle_cell [ 20 20 160 270 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 180 290 1.52588e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random20_DNARoot" [ + pos [ 150 290 1.52588e-005 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 1.17 3.79 16.18 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 180 250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 5 -5 0 ] + nhpr [ 105 0 -0 ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 165 250 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.686275 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 11.27 -3.85 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 9.15 -5.45 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ -0.08 -7.31 0 ] + nhpr [ -165 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.05 2.1 22.25 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb21:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Noggin's Toboggan Bargains" ] + pos [ 165 290 1.52588e-005 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 3.29 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.37 ] + scale [ 2 1 1.8 ] + wiggle [ 2.95214 ] + stumble [ 0.035687 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -3.77 ] + scale [ 2 1 1.8 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -5.12 ] + scale [ 2 1 1.5 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 140 290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.38 0.63 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 150 250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 160.761 285.462 1.52588e-005 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "3217" [ + vis [ "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3220" "3231" "3235" "3234" ] + suit_edge [ 118 123 ] + suit_edge [ 123 124 ] + suit_edge [ 124 125 ] + suit_edge [ 128 127 ] + suit_edge [ 129 119 ] + suit_edge [ 127 130 ] + suit_edge [ 130 129 ] + suit_edge [ 129 131 ] + suit_edge [ 131 129 ] + suit_edge [ 123 131 ] + suit_edge [ 131 123 ] + suit_edge [ 127 132 ] + suit_edge [ 132 127 ] + suit_edge [ 124 132 ] + suit_edge [ 132 124 ] + battle_cell [ 20 20 120 275 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 140 250 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 140 290 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random20_DNARoot" [ + pos [ 100 280 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.498039 0.639216 0.847059 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 12.82 -7.13 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 4.48 -1.25 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 100 250 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.32 -7.65 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.82 2.13 20.78 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 11.47 -3.19 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 115 250 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 1.42 -1.42 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb22:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Snow Bunny Ski Shop" ] + pos [ 100 260 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 30 0 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + pos [ 0 0 2.77 ] + scale [ 1.2 1 1.1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0.28 0 -1.37 ] + scale [ 2.2 1 2 ] + kern [ 0.117949 ] + wiggle [ 2.63175 ] + stumble [ 0.054114 ] + stomp [ 0.043867 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0.2 0 -4.1 ] + scale [ 1.3 1 1.2 ] + kern [ 0.018235 ] + wiggle [ 3.36352 ] + stumble [ 0.020428 ] + stomp [ 0.015849 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -2.92 ] + scale [ 2.4 1 2 ] + kern [ 0.157401 ] + wiggle [ 3.46448 ] + stumble [ 0.075952 ] + stomp [ 0.045756 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 140 300 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0 0.87 0.69 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.486275 0.686275 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 14.56 -5.77 0 ] + nhpr [ 150 0 -0 ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 131.8 282.41 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb34:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Icy Fine, Do You? Optometry" ] + pos [ 141 250 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.48 0 1.56 ] + scale [ 0.7 1 0.5 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.317647 0.317647 0.635294 1 ] + pos [ 0 0 -3.1 ] + scale [ 1.3 1 2.6 ] + kern [ 0.05 ] + wiggle [ 2 ] + stomp [ 0.03 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -4.56 ] + scale [ 1.6 1 1.7 ] + kern [ 0.090428 ] + wiggle [ 3.01825 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ 130 250 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 5.34 -6.82 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.4 0.4 0.4 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 106.145 262.824 -2.28882e-005 ] + nhpr [ 120 0 0 ] + ] + ] + visgroup "3218" [ + vis [ "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3220" "3221" "3231" "3235" "3234" ] + suit_edge [ 125 133 ] + suit_edge [ 133 134 ] + suit_edge [ 134 135 ] + suit_edge [ 136 137 ] + suit_edge [ 137 138 ] + suit_edge [ 138 128 ] + suit_edge [ 133 139 ] + suit_edge [ 139 133 ] + suit_edge [ 138 139 ] + suit_edge [ 139 138 ] + suit_edge [ 221 134 ] + suit_edge [ 134 221 ] + suit_edge [ 221 137 ] + suit_edge [ 137 221 ] + suit_edge [ 222 134 ] + suit_edge [ 134 222 ] + suit_edge [ 222 137 ] + suit_edge [ 137 222 ] + battle_cell [ 20 20 120 320 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 100 340 1.14441e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ 130 340 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 140 340 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 7.05 -5.84 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 8.26 3.43 18.87 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 140 325 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.38 0.63 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ 110 340 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.97 4.64 18.14 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ 100 340 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.266667 1 0.847059 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb23:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Shakey's Snow Globes" ] + pos [ 140 315 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.81 -31.65 0 ] + nhpr [ 90 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 5.52 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.47 ] + scale [ 2.3 1 1.3 ] + kern [ 0.165175 ] + wiggle [ 3.08721 ] + stumble [ 0.001089 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.24 ] + scale [ 1.2 1 1 ] + kern [ 0.041079 ] + width [ 48.95 ] + height [ 48.95 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 109.992 334.143 1.14441e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "3219" [ + vis [ "3212" "3213" "3214" "3215" "3216" "3217" "3218" "3219" "3220" "3221" "3222" "3231" "3232" "3235" "3234" ] + suit_edge [ 135 140 ] + suit_edge [ 140 141 ] + suit_edge [ 141 142 ] + suit_edge [ 143 144 ] + suit_edge [ 144 145 ] + suit_edge [ 145 136 ] + suit_edge [ 140 146 ] + suit_edge [ 146 140 ] + suit_edge [ 145 146 ] + suit_edge [ 146 145 ] + suit_edge [ 144 147 ] + suit_edge [ 147 144 ] + suit_edge [ 141 147 ] + suit_edge [ 147 141 ] + suit_edge [ 223 141 ] + suit_edge [ 141 223 ] + suit_edge [ 223 144 ] + suit_edge [ 144 223 ] + suit_edge [ 231 145 ] + suit_edge [ 145 231 ] + suit_edge [ 231 140 ] + suit_edge [ 140 231 ] + battle_cell [ 20 20 80 320 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 100 340 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ 60 300 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.266667 1 0.847059 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.266667 1 0.847059 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + ] + landmark_building "tb24:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "The Chattering Chronicle" ] + pos [ 85 300 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -1.85 ] + scale [ 1.5 1 1.3 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + scale [ 1.3 1 1 ] + kern [ 0.1 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.99 ] + scale [ 1.3 1 1 ] + kern [ 0.130636 ] + width [ 35.6913 ] + height [ 35.6913 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 55 340 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 5 -5 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.24 2.56 18.26 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ 70 340 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb25:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "You Sleigh Me" ] + pos [ 80 340 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0 0.87 0.69 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 16.19 -8.05 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.28 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ -0.09 0 -0.25 ] + scale [ 1.5 1 1.5 ] + kern [ 0.078871 ] + wiggle [ 3.25147 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0.16 0 -0.13 ] + nhpr [ -0 0 2 ] + scale [ 1.3 1 1.6 ] + kern [ 0.167314 ] + wiggle [ 4.57128 ] + width [ 19.3498 ] + height [ 19.3498 ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0.15 0 -0.15 ] + scale [ 1.4 1 1.6 ] + kern [ -0.098113 ] + width [ 28.0623 ] + height [ 28.0623 ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.11 ] + scale [ 1.1 1 2.6 ] + kern [ 0.175185 ] + width [ 12.4552 ] + height [ 12.4552 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "I" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.627451 1 ] + pos [ -0.16 0 -1.03 ] + scale [ 1.1 1 1 ] + kern [ 0.04268 ] + width [ 27.4168 ] + height [ 27.4168 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 100 300 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3220" [ + vis [ "3215" "3216" "3217" "3218" "3219" "3220" "3221" "3222" "3223" "3232" "3231" ] + suit_edge [ 148 150 ] + suit_edge [ 150 151 ] + suit_edge [ 151 152 ] + suit_edge [ 153 154 ] + suit_edge [ 154 155 ] + suit_edge [ 155 149 ] + suit_edge [ 150 156 ] + suit_edge [ 156 150 ] + suit_edge [ 155 156 ] + suit_edge [ 156 155 ] + suit_edge [ 225 152 ] + suit_edge [ 152 225 ] + suit_edge [ 225 153 ] + suit_edge [ 153 225 ] + battle_cell [ 20 20 20 320 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -1.14441e-005 300 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random20_DNARoot" [ + pos [ 0 325 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.87 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 2.4 -5.32 0.26 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 0 340 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.82 1.66 22.79 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 18.3 -1.29 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 15 340 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.247059 0.639216 0.909804 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -8.02 -7.3 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 19.27 -34.32 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 0 310 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.886275 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 6.68 -1.25 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.74 3.76 22.04 ] + nhpr [ -15 0 -0 ] + ] + ] + landmark_building "tb26:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Solar Powered Blankets" ] + pos [ 25 340 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0.14 0 3.35 ] + scale [ 1 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -1.6 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.85 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 0 300 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.686275 0.686275 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 9.63 305.65 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ -5.88 326.92 19.14 ] + nhpr [ 90 0 -0 ] + color [ 0.59 1 0.92 1 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 4.48516 311.026 0 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "3221" [ + vis [ "3218" "3219" "3220" "3221" "3222" "3223" "3224" "3231" "3232" "3233" ] + suit_edge [ 157 153 ] + suit_edge [ 152 158 ] + suit_edge [ 159 157 ] + suit_edge [ 160 159 ] + suit_edge [ 158 161 ] + suit_edge [ 161 162 ] + suit_edge [ 158 163 ] + suit_edge [ 163 158 ] + suit_edge [ 157 163 ] + suit_edge [ 163 157 ] + suit_edge [ 159 164 ] + suit_edge [ 164 159 ] + suit_edge [ 161 164 ] + suit_edge [ 164 161 ] + suit_edge [ 224 157 ] + suit_edge [ 157 224 ] + suit_edge [ 224 158 ] + suit_edge [ 158 224 ] + battle_cell [ 20 20 20 280 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb38:random20_DNARoot" [ + pos [ 0 260 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 0.41 -4.01 1.88 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ -0.47 -4.47 0 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 1.64 -3.07 0 ] + nhpr [ -15 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 10.15 3.75 13.68 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.27 1 0.85 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 40 300 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb29:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "" ] + pos [ 40 275 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 12 -8.5 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + pos [ 0 0 1.67 ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ 0 275 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 1.41 -7.24 0 ] + nhpr [ 75 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 0 300 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + landmark_building "tb38:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Heat-Get It While It's Hot" ] + pos [ 0 285 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 2.09 ] + scale [ 0.6 1 0.5 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2.84 ] + scale [ 4 1 2.5 ] + kern [ 0.314087 ] + stumble [ 0.007787 ] + stomp [ 0.021485 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -4.16 ] + scale [ 2.1 1 1.3 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -5.2 ] + scale [ 2.3 1 1.4 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + ] + visgroup "3222" [ + vis [ "3219" "3220" "3221" "3222" "3223" "3224" "3232" "3233" "3231" ] + suit_edge [ 168 170 ] + suit_edge [ 170 171 ] + suit_edge [ 172 173 ] + suit_edge [ 173 166 ] + suit_edge [ 170 174 ] + suit_edge [ 174 170 ] + suit_edge [ 173 174 ] + suit_edge [ 174 173 ] + suit_edge [ 227 168 ] + suit_edge [ 168 227 ] + suit_edge [ 227 166 ] + suit_edge [ 166 227 ] + suit_edge [ 228 171 ] + suit_edge [ 171 228 ] + suit_edge [ 228 172 ] + suit_edge [ 172 228 ] + battle_cell [ 20 20 20 200 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 40 180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ 5 180 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0 0.87 0.69 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ 0 190 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.486275 1 1 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.82 1.92 19.01 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 14 -7 0 ] + nhpr [ 75 0 -0 ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 24.46 -37.48 0 ] + nhpr [ 30 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 35 180 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 0 180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb30:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Snowmen Bought & Sold" ] + pos [ 20 180 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 14.19 -6.63 0 ] + nhpr [ -0 0 -0 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 5.12 ] + scale [ 1 1 0.9 ] + baseline [ + code [ "humanist" ] + color [ 0 0.301961 0.443137 1 ] + pos [ 0 0 -3.3 ] + scale [ 1.8 1 2.4 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.301961 0.443137 1 ] + pos [ 0 0 -4.84 ] + scale [ 1.1 1 1 ] + kern [ 0.042745 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 29.44 189.02 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 0 210 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + ] + visgroup "3223" [ + vis [ "3220" "3221" "3222" "3223" "3224" "3232" "3233" ] + suit_edge [ 175 172 ] + suit_edge [ 171 176 ] + suit_edge [ 176 177 ] + suit_edge [ 178 175 ] + suit_edge [ 176 179 ] + suit_edge [ 179 176 ] + suit_edge [ 175 179 ] + suit_edge [ 179 175 ] + suit_edge [ 229 177 ] + suit_edge [ 177 229 ] + suit_edge [ 229 178 ] + suit_edge [ 178 229 ] + battle_cell [ 20 20 60 200 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 40 180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb31:random20_DNARoot" [ + pos [ 50 180 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 70 220 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.73 2.68 20.76 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_sign_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5.79 -5.87 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 60 220 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb31:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Portable Fireplaces" ] + pos [ 70 180 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -2.11 ] + scale [ 1.4 1 1.2 ] + baseline [ + code [ "humanist" ] + color [ 0 0.384314 0.568627 1 ] + pos [ 0 0 1.26 ] + scale [ 0.7 1 0.7 ] + wiggle [ 7.18229 ] + stomp [ 0.022606 ] + width [ 5.05347 ] + height [ 5.05347 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.607843 0.607843 1 ] + pos [ 0 0 -0.78 ] + scale [ 1.5 1 1.5 ] + kern [ 0.312191 ] + wiggle [ 8.39767 ] + stumble [ 0.144406 ] + stomp [ 0.038652 ] + width [ 37.3162 ] + height [ 37.3162 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 180 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 67.5997 186.498 0 ] + nhpr [ -150 0 0 ] + ] + ] + visgroup "3224" [ + vis [ "3221" "3222" "3223" "3224" "3232" "3233" ] + suit_edge [ 177 180 ] + suit_edge [ 180 181 ] + suit_edge [ 182 183 ] + suit_edge [ 183 184 ] + suit_edge [ 184 178 ] + suit_edge [ 183 185 ] + suit_edge [ 185 183 ] + suit_edge [ 180 185 ] + suit_edge [ 185 180 ] + suit_edge [ 181 182 ] + suit_edge [ 230 184 ] + suit_edge [ 184 230 ] + suit_edge [ 230 180 ] + suit_edge [ 180 230 ] + battle_cell [ 20 20 100 200 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 80 220 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb32:random20_DNARoot" [ + pos [ 120 220 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.886275 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.42 2.67 22.74 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 7.8 -5.55 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 110 220 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 80 220 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 95 220 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.266667 1 0.847059 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.77 1.59 21.11 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb32:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "The Frozen Nose" ] + pos [ 120 205 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 22 -8 0 ] + nhpr [ 180 0 -0 ] + ] + sign [ + pos [ 0 0 15.64 ] + scale [ 1.2 1 1.3 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0.41 0 -10.84 ] + scale [ 1.5 1 1.5 ] + kern [ 0.067503 ] + wiggle [ 3.58419 ] + stumble [ 0.014918 ] + stomp [ 0.044649 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0.18 0 -12.37 ] + scale [ 2 1 2 ] + kern [ 0.135079 ] + wiggle [ 3.67678 ] + stomp [ 0.057192 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -13.99 ] + scale [ 2.1 1 2.2 ] + kern [ 0.199976 ] + wiggle [ 4.9908 ] + stumble [ 0.036186 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + group "props" [ + prop "prop_mailbox_DNARoot" [ + code [ "prop_mailbox" ] + pos [ 89.36 161.05 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 98.75 225.92 21.76 ] + nhpr [ -30 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 113.569 204.084 7.62939e-006 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "3225" [ + vis [ "3225" "3201" "3202" "3203" "3204" "3205" "3206" "3207" "3226" ] + suit_edge [ 41 22 ] + suit_edge [ 21 36 ] + suit_edge [ 202 22 ] + suit_edge [ 22 202 ] + suit_edge [ 21 202 ] + suit_edge [ 202 21 ] + battle_cell [ 20 20 250 320 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 240 300 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 260 300 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 7 -4 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 245 340 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + visgroup "3226" [ + vis [ "3226" "3227" "3209" "3208" "3207" "3206" "3205" "3204" "3203" "3225" "3202" "3236" ] + suit_edge [ 53 57 ] + suit_edge [ 193 54 ] + suit_edge [ 206 193 ] + suit_edge [ 193 206 ] + suit_edge [ 206 57 ] + suit_edge [ 57 206 ] + battle_cell [ 20 20 350 370 -0.5 ] + node "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 410 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 340 350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 429.999 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + node "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ 360 350 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:20_DNARoot" [ + pos [ 350 350 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 10.5989 -7.68268 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.895652 0.895652 0.895652 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 350 390 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.227451 0.847059 0.6 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 2.49664 -7.42111 0 ] + nhpr [ -120 0 -0 ] + ] + ] + flat_building "tb36:20_DNARoot" [ + pos [ 350 410 -0.516713 ] + nhpr [ -90 -0.133054 -2.88691e-009 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 350 430 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 19.434 0.0910048 -0.516713 ] + nhpr [ 1.56187e-006 0 -0 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 360 430 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 4.66898 -0.389801 0 ] + nhpr [ 30 0 -0 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 355.766 355.611 -1.14441e-005 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "3227" [ + vis [ "3227" "3226" "3209" "3210" "3230" "3228" "3208" "3207" "3206" "3236" ] + suit_edge [ 68 73 ] + suit_edge [ 74 69 ] + battle_cell [ 20 20 380 300 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 360 310 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ 399.98 304.81 -0.03 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 4.63 -4.65 0 ] + nhpr [ -165 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 1.71 3.54 15.1 ] + nhpr [ -0 0 -0 ] + color [ 0.49 0.89 1 1 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ 360 290 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + visgroup "3228" [ + vis [ "3228" "3229" "3230" "3227" "3209" "3210" "3211" "3212" "3213" "3214" "3208" "3235" "3234" ] + suit_edge [ 80 82 ] + suit_edge [ 82 83 ] + suit_edge [ 84 81 ] + suit_edge [ 85 84 ] + suit_edge [ 82 86 ] + suit_edge [ 86 82 ] + suit_edge [ 84 86 ] + suit_edge [ 86 84 ] + suit_edge [ 213 84 ] + suit_edge [ 84 213 ] + suit_edge [ 213 82 ] + suit_edge [ 82 213 ] + battle_cell [ 20 20 300 270 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 280 250 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 305 250 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ -5 -5 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ -9.38 0.13 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.2 1.2 1.2 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 280 290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 295 250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.9 2.51 17.53 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 295 290 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.486275 0.686275 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.686275 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.137255 0.419608 0.847059 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 9.9 0.62 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.12 3.26 18.29 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 315 250 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.686275 0.686275 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb35:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Polar Ice Caps" ] + pos [ 285 290 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0 0.87 0.69 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.32 ] + nhpr [ -0 0 -2 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.29 0 -0.86 ] + scale [ 1.5 1 2.2 ] + width [ 29.9186 ] + height [ 29.9186 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 299.291 284.424 0 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "3229" [ + vis [ "3229" "3230" "3228" "3227" "3209" "3210" "3211" "3212" "3213" "3214" ] + battle_cell [ 20 20 330 300 -0.5 ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 340 310 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ 340 310 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 320 290 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.25 0.64 0.91 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 320 310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snowman_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 3.61 1.01 0 ] + nhpr [ 45 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 330 310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 4.5 -4.92 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 5 -15 0 ] + nhpr [ 135 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ 320 300 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "3230" [ + vis [ "3230" "3229" "3228" "3227" "3209" "3210" "3208" "3211" "3207" ] + battle_cell [ 20 20 335 230 -0.5 ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 355 250 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 315 235 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 11.58 -13.08 0 ] + nhpr [ -150 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 10.11 -14.85 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 315 210 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.866667 0.686275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.337255 0.898039 0.870588 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 15 -10 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 25 -15 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 16.81 6.42 12.41 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 330 210 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.59 2.12 22.61 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ -28 -7 10.08 ] + nhpr [ 90 0 -0 ] + color [ 0.22 0.83 0.83 1 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 355 225 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 355 240 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 12.65 -9.27 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 355 250 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 7.12 0.15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.4 1.4 1.4 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ 355 210 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb13:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Chattering Teeth, Subzero Dentist" ] + pos [ 345 210 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 4.99 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.11 ] + scale [ 1.6 1 1.7 ] + kern [ 0.134768 ] + wiggle [ 3.77485 ] + stomp [ 0.077945 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.53 ] + scale [ 1.7 1 1.7 ] + kern [ 0.177004 ] + wiggle [ 4.78415 ] + stomp [ 0.031791 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -3.51 ] + scale [ 1.2 1 1 ] + kern [ 0.099261 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 351.247 214.758 7.62939e-006 ] + nhpr [ -150 0 0 ] + ] + ] + visgroup "3231" [ + vis [ "3231" "3220" "3221" "3222" "3232" "3219" "3218" "3217" "3216" "3215" "3214" "3213" "3212" ] + suit_edge [ 142 148 ] + suit_edge [ 149 143 ] + battle_cell [ 20 20 50 320 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 60 340 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ 40 340 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ul" ] + pos [ 9.96 -6.54 0 ] + nhpr [ 165 0 -0 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 55 300 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 4.62 -6.36 0 ] + nhpr [ -120 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 7.5 -7.33 0 ] + nhpr [ -75 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.09 5.25 20.75 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "3232" [ + vis [ "3232" "3233" "3222" "3223" "3224" "3221" "3220" "3219" "3231" ] + suit_edge [ 165 160 ] + suit_edge [ 166 165 ] + suit_edge [ 162 167 ] + suit_edge [ 167 168 ] + suit_edge [ 167 169 ] + suit_edge [ 169 167 ] + suit_edge [ 165 169 ] + suit_edge [ 169 165 ] + suit_edge [ 226 165 ] + suit_edge [ 165 226 ] + suit_edge [ 226 167 ] + suit_edge [ 167 226 ] + battle_cell [ 20 20 20 240 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 1.90735e-006 260 1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 60 220 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 60 240 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 20 -8 0 ] + nhpr [ 90 0 -0 ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 13 -11 0 ] + nhpr [ -135 0 -0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 6 -20 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 40 240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ 0 220 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb28:20_DNARoot" [ + pos [ 0 250 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 40 249.91 -0.04 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 50 240 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + landmark_building "tb28:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Lowbrow Snowplows" ] + pos [ 0 225 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_post_sign_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 0.34 -32.91 0 ] + nhpr [ -90 0 -0 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 -2.14 ] + scale [ 1.1 1 0.9 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.29 ] + nhpr [ -0 0 1 ] + scale [ 2.3 1 1.5 ] + kern [ 0.152642 ] + width [ 35.1099 ] + height [ 35.1099 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.294118 0.592157 1 ] + pos [ 0 0 -1.17 ] + scale [ 1.3 1 1 ] + width [ 28.4625 ] + height [ 28.4625 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 6.44725 227.705 1.52588e-005 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "3233" [ + vis [ "3233" "3223" "3224" "3222" "3221" "3220" "3232" ] + battle_cell [ 20 20 100 165 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 80 180 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 119.9 170 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.247059 0.639216 0.909804 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 5.85992 -6.26996 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ 119.9 185 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 0.92 0.61 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 150 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.588235 1 0.917647 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 0 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.9 1.9 1.9 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 80 165 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.239216 0.756863 0.886275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.22 0.83 0.83 1 ] + count [ 2 ] + ] + ] + ] + prop "linktunnel_br_3000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 120 150 0 ] + nhpr [ -180 0 -0 ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 -1.54 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.1 ] + scale [ 1.5 1 1.5 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -1.91 ] + scale [ 0.8 1 0.8 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 91.4296 154.28 -0.499992 ] + nhpr [ 165 0 0 ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 85.3314 173.3 7.62939e-006 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3234" [ + vis [ "3234" "3235" "3218" "3217" "3216" "3215" "3214" "3213" "3212" "3211" "3228" ] + battle_cell [ 20 20 200 165 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 220 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 240 180 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 205 140 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 195 140 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.486275 0.686275 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.2 0.53 0.46 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 10 -4.99999 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ -3.4 -8.59 0 ] + nhpr [ -30 0 -0 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 235 140 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 0.55 3.56 13.83 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.49 0.69 1 1 ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 220 180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 220 180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 180 140 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 180 155 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 180 170 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ -0.999939 -6.99994 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 180 185 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 5.99988 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb17:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Juneau What I Mean?" ] + pos [ 220 140 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ -2.26 -6.97 0.01 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 1.24 -7.01 0.01 ] + nhpr [ -120 0 -0 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 3.71 ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -1.48538 ] + scale [ 1.2 1 2 ] + kern [ 0.0428463 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -2.62171 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "p" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 -3.48881 ] + scale [ 1.5 1 1.5 ] + kern [ 0.0557608 ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + visgroup "3235" [ + vis [ "3235" "3234" "3217" "3216" "3215" "3214" "3213" "3212" "3211" "3228" "3218" "3219" "3231" "3220" ] + suit_edge [ 236 235 ] + suit_edge [ 237 236 ] + suit_edge [ 238 237 ] + suit_edge [ 239 238 ] + suit_edge [ 232 239 ] + suit_edge [ 238 240 ] + suit_edge [ 240 238 ] + suit_edge [ 237 241 ] + suit_edge [ 241 237 ] + battle_cell [ 20 20 260 175 -0.5 ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 280 180 0.0250397 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 280 140 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.52 -6.74 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0.37 0.51 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 11.57 -7.17 1.95 ] + nhpr [ -60 0 -0 ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 10.99 -8.27 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 12.7 -6.11 0 ] + nhpr [ -60 0 -0 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ 265 140 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.55 2.38 18.56 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 14.47 0.83 0 ] + nhpr [ -0 0 -0 ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ -10.9999 -31 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ 250 140 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.219608 0.827451 0.827451 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 15 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 280 180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 280 200 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 7.99994 -5.99997 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 280 180 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 280 165 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 280 150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 245.454 174.258 0.0250549 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "3236" [ + vis [ "3236" "3226" "3227" "3206" "3207" "3208" "3209" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 360 458 0 ] + nhpr [ 56 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 322.615 479.904 0.406348 ] + nhpr [ -90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 339.987 497.248 0.42235 ] + nhpr [ -180 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 340.009 462.856 0.415845 ] + nhpr [ -0 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 356.704 479.951 0.396853 ] + nhpr [ 90 0 -0 ] + ] + ] + street "street_BR_pond_DNARoot" [ + code [ "street_BR_pond" ] + pos [ 340 480 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + node "props" [ + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 348.529 501.108 0 ] + nhpr [ -45 0 -0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 328.289 507.877 0.0698318 ] + nhpr [ 30 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 358.201 468.89 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 358.571 492.942 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 321.768 468.815 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 321.874 492.169 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 374.686 554.298 5.96492 ] + nhpr [ -45 0 -0 ] + scale [ 1.29794 1.29794 1.29794 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 274.695 520.56 6.43968 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 285.202 577.811 -0.516713 ] + nhpr [ -30 0 -0 ] + scale [ 1.62476 1.62476 1.62476 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 409.361 497.258 4.32947 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 328.879 542.602 -0.516713 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 290.436 471.974 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 384.566 464.812 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 322.893 512.781 0 ] + nhpr [ -30 0 -0 ] + scale [ 1.19363 1.19363 1.19363 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 375.392 500.51 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.623452 0.623452 0.623452 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 360.634 445.983 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.77515 0.77515 0.77515 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 307.709 456.239 0 ] + nhpr [ -30 0 -0 ] + scale [ 0.865058 0.865058 0.865058 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 356.009 519.751 0 ] + nhpr [ -30 0 -0 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 335.605 501.858 0 ] + nhpr [ -120 0 -0 ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/the_burrrgh_3300.dna b/ttmodels/src/dna/the_burrrgh_3300.dna new file mode 100644 index 00000000..79507907 --- /dev/null +++ b/ttmodels/src/dna/the_burrrgh_3300.dna @@ -0,0 +1,8889 @@ +store_suit_point [ 0, STREET_POINT, 55 240 -0.5 ] +store_suit_point [ 1, STREET_POINT, 55 225 -0.5 ] +store_suit_point [ 2, STREET_POINT, 65 225 -0.5 ] +store_suit_point [ 3, STREET_POINT, 65 240 -0.5 ] +store_suit_point [ 4, STREET_POINT, 80 265 -0.5 ] +store_suit_point [ 5, STREET_POINT, 55 265 -0.5 ] +store_suit_point [ 6, STREET_POINT, 65 255 -0.5 ] +store_suit_point [ 7, STREET_POINT, 80 255 -0.5 ] +store_suit_point [ 8, STREET_POINT, 120 265 -0.5 ] +store_suit_point [ 9, STREET_POINT, 100 265 -0.5 ] +store_suit_point [ 10, STREET_POINT, 100 255 -0.5 ] +store_suit_point [ 11, STREET_POINT, 120 255 -0.5 ] +store_suit_point [ 12, STREET_POINT, 135 255 -0.5 ] +store_suit_point [ 13, STREET_POINT, 135 240 -0.5 ] +store_suit_point [ 14, STREET_POINT, 145 240 -0.5 ] +store_suit_point [ 15, STREET_POINT, 145 265 -0.5 ] +store_suit_point [ 16, STREET_POINT, 135 265 -0.5 ] +store_suit_point [ 17, STREET_POINT, 65 265 -0.5 ] +store_suit_point [ 18, STREET_POINT, 135 220 -0.5 ] +store_suit_point [ 19, STREET_POINT, 135 200 -0.5 ] +store_suit_point [ 20, STREET_POINT, 145 200 -0.5 ] +store_suit_point [ 21, STREET_POINT, 145 220 -0.5 ] +store_suit_point [ 22, STREET_POINT, 135 190 -0.5 ] +store_suit_point [ 23, STREET_POINT, 135 175 -0.5 ] +store_suit_point [ 24, STREET_POINT, 160 175 -0.5 ] +store_suit_point [ 25, STREET_POINT, 160 185 -0.5 ] +store_suit_point [ 26, STREET_POINT, 145 185 -0.5 ] +store_suit_point [ 27, STREET_POINT, 180 175 -0.5 ] +store_suit_point [ 28, STREET_POINT, 200 175 -0.5 ] +store_suit_point [ 29, STREET_POINT, 200 185 -0.5 ] +store_suit_point [ 30, STREET_POINT, 180 185 -0.5 ] +store_suit_point [ 31, STREET_POINT, 220 175 -0.5 ] +store_suit_point [ 32, STREET_POINT, 240 175 -0.5 ] +store_suit_point [ 33, STREET_POINT, 215 200 -0.5 ] +store_suit_point [ 34, STREET_POINT, 215 185 -0.5 ] +store_suit_point [ 35, STREET_POINT, 215 240 -0.5 ] +store_suit_point [ 36, STREET_POINT, 215 220 -0.5 ] +store_suit_point [ 37, STREET_POINT, 240 265 -0.5 ] +store_suit_point [ 38, STREET_POINT, 215 265 -0.5 ] +store_suit_point [ 39, STREET_POINT, 280 265 -0.5 ] +store_suit_point [ 40, STREET_POINT, 255 265 -0.5 ] +store_suit_point [ 41, STREET_POINT, 280 175 -0.5 ] +store_suit_point [ 42, STREET_POINT, 295 175 -0.5 ] +store_suit_point [ 43, STREET_POINT, 305 175 -0.5 ] +store_suit_point [ 44, STREET_POINT, 305 200 -0.5 ] +store_suit_point [ 45, STREET_POINT, 305 215 -0.5 ] +store_suit_point [ 46, STREET_POINT, 305 240 -0.5 ] +store_suit_point [ 47, STREET_POINT, 320 265 -0.5 ] +store_suit_point [ 48, STREET_POINT, 295 265 -0.5 ] +store_suit_point [ 49, STREET_POINT, 305 255 -0.5 ] +store_suit_point [ 50, STREET_POINT, 320 255 -0.5 ] +store_suit_point [ 51, STREET_POINT, 355 240 -0.5 ] +store_suit_point [ 52, STREET_POINT, 355 265 -0.5 ] +store_suit_point [ 53, STREET_POINT, 340 265 -0.5 ] +store_suit_point [ 54, STREET_POINT, 345 255 -0.5 ] +store_suit_point [ 55, STREET_POINT, 345 240 -0.5 ] +store_suit_point [ 56, STREET_POINT, 345 220 -0.5 ] +store_suit_point [ 57, STREET_POINT, 345 205 -0.5 ] +store_suit_point [ 58, STREET_POINT, 370 205 -0.5 ] +store_suit_point [ 59, STREET_POINT, 370 215 -0.5 ] +store_suit_point [ 60, STREET_POINT, 355 215 -0.5 ] +store_suit_point [ 61, STREET_POINT, 395 205 -0.5 ] +store_suit_point [ 62, STREET_POINT, 415 205 -0.5 ] +store_suit_point [ 63, STREET_POINT, 415 230 -0.5 ] +store_suit_point [ 64, STREET_POINT, 405 230 -0.5 ] +store_suit_point [ 65, STREET_POINT, 405 215 -0.5 ] +store_suit_point [ 66, STREET_POINT, 395 270 -0.5 ] +store_suit_point [ 67, STREET_POINT, 395 260 -0.5 ] +store_suit_point [ 68, STREET_POINT, 395 245 -0.5 ] +store_suit_point [ 69, STREET_POINT, 405 245 -0.5 ] +store_suit_point [ 70, STREET_POINT, 415 245 -0.5 ] +store_suit_point [ 71, STREET_POINT, 415 255 -0.5 ] +store_suit_point [ 72, STREET_POINT, 405 255 -0.5 ] +store_suit_point [ 73, STREET_POINT, 405 270 -0.5 ] +store_suit_point [ 74, STREET_POINT, 385 310 -0.5 ] +store_suit_point [ 75, STREET_POINT, 385 295 -0.5 ] +store_suit_point [ 76, STREET_POINT, 385 285 -0.5 ] +store_suit_point [ 77, STREET_POINT, 395 285 -0.5 ] +store_suit_point [ 78, STREET_POINT, 405 295 -0.5 ] +store_suit_point [ 79, STREET_POINT, 395 295 -0.5 ] +store_suit_point [ 80, STREET_POINT, 395 310 -0.5 ] +store_suit_point [ 81, STREET_POINT, 375 350 -0.5 ] +store_suit_point [ 82, STREET_POINT, 375 335 -0.5 ] +store_suit_point [ 83, STREET_POINT, 375 325 -0.5 ] +store_suit_point [ 84, STREET_POINT, 385 325 -0.5 ] +store_suit_point [ 85, STREET_POINT, 395 325 -0.5 ] +store_suit_point [ 86, STREET_POINT, 395 335 -0.5 ] +store_suit_point [ 87, STREET_POINT, 385 335 -0.5 ] +store_suit_point [ 88, STREET_POINT, 385 350 -0.5 ] +store_suit_point [ 89, STREET_POINT, 385 365 -0.5 ] +store_suit_point [ 90, STREET_POINT, 385 375 -0.5 ] +store_suit_point [ 91, STREET_POINT, 350 375 -0.5 ] +store_suit_point [ 92, STREET_POINT, 350 365 -0.5 ] +store_suit_point [ 93, STREET_POINT, 375 365 -0.5 ] +store_suit_point [ 94, STREET_POINT, 340 375 -0.5 ] +store_suit_point [ 95, STREET_POINT, 325 375 -0.5 ] +store_suit_point [ 96, STREET_POINT, 325 340 -0.5 ] +store_suit_point [ 97, STREET_POINT, 335 340 -0.5 ] +store_suit_point [ 98, STREET_POINT, 335 365 -0.5 ] +store_suit_point [ 99, STREET_POINT, 325 325 -0.5 ] +store_suit_point [ 100, STREET_POINT, 300 325 -0.5 ] +store_suit_point [ 101, STREET_POINT, 300 315 -0.5 ] +store_suit_point [ 102, STREET_POINT, 335 315 -0.5 ] +store_suit_point [ 103, STREET_POINT, 285 325 -0.5 ] +store_suit_point [ 104, STREET_POINT, 285 340 -0.5 ] +store_suit_point [ 105, STREET_POINT, 275 340 -0.5 ] +store_suit_point [ 106, STREET_POINT, 275 315 -0.5 ] +store_suit_point [ 107, STREET_POINT, 285 360 -0.5 ] +store_suit_point [ 108, STREET_POINT, 285 375 -0.5 ] +store_suit_point [ 109, STREET_POINT, 275 375 -0.5 ] +store_suit_point [ 110, STREET_POINT, 260 375 -0.5 ] +store_suit_point [ 111, STREET_POINT, 260 365 -0.5 ] +store_suit_point [ 112, STREET_POINT, 275 365 -0.5 ] +store_suit_point [ 113, STREET_POINT, 275 355 -0.5 ] +store_suit_point [ 114, STREET_POINT, 240 375 -0.5 ] +store_suit_point [ 115, STREET_POINT, 240 365 -0.5 ] +store_suit_point [ 116, FRONT_DOOR_POINT, 43 228 -0.5, 10 ] +store_suit_point [ 117, FRONT_DOOR_POINT, 67 277 -0.5, 6 ] +store_suit_point [ 118, FRONT_DOOR_POINT, 98 243 -0.5, 30 ] +store_suit_point [ 119, FRONT_DOOR_POINT, 132 277 -0.5, 28 ] +store_suit_point [ 120, FRONT_DOOR_POINT, 157 220 -0.5, 12 ] +store_suit_point [ 121, FRONT_DOOR_POINT, 114 180 -0.5, 21 ] +store_suit_point [ 123, FRONT_DOOR_POINT, 222 163 -0.5, 26 ] +store_suit_point [ 124, FRONT_DOOR_POINT, 203 222 -0.5, 23 ] +store_suit_point [ 125, FRONT_DOOR_POINT, 204 260 -0.5, 29 ] +store_suit_point [ 126, FRONT_DOOR_POINT, 255 277 -0.5, 13 ] +store_suit_point [ 127, FRONT_DOOR_POINT, 295 164 -0.5, 16 ] +store_suit_point [ 128, FRONT_DOOR_POINT, 317 218 -0.5, 8 ] +store_suit_point [ 129, FRONT_DOOR_POINT, 342 277 -0.5, 25 ] +store_suit_point [ 130, FRONT_DOOR_POINT, 398 193 -0.5, 14 ] +store_suit_point [ 131, FRONT_DOOR_POINT, 383 243 -0.5, 18 ] +store_suit_point [ 132, FRONT_DOOR_POINT, 417 293 -0.5, 7 ] +store_suit_point [ 133, FRONT_DOOR_POINT, 363 335 -0.5, 19 ] +store_suit_point [ 134, FRONT_DOOR_POINT, 396 365 -0.5, 17 ] +store_suit_point [ 136, FRONT_DOOR_POINT, 328 387 -0.5, 11 ] +store_suit_point [ 137, FRONT_DOOR_POINT, 328 303 -0.5, 9 ] +store_suit_point [ 138, FRONT_DOOR_POINT, 263 325 -0.5, 27 ] +store_suit_point [ 139, FRONT_DOOR_POINT, 297 358 -0.5, 20 ] +store_suit_point [ 140, FRONT_DOOR_POINT, 277 387 -0.5, 24 ] +store_suit_point [ 141, FRONT_DOOR_POINT, 173 153 -0.5, 15 ] +store_suit_point [ 144, SIDE_DOOR_POINT, 115 240 -0.5, 30 ] +store_suit_point [ 145, SIDE_DOOR_POINT, 143 280 -0.5, 28 ] +store_suit_point [ 146, SIDE_DOOR_POINT, 160 240 -0.5, 12 ] +store_suit_point [ 147, SIDE_DOOR_POINT, 110 195 -0.5, 21 ] +store_suit_point [ 149, SIDE_DOOR_POINT, 187 150 -0.5, 15 ] +store_suit_point [ 150, SIDE_DOOR_POINT, 240 160 -0.5, 26 ] +store_suit_point [ 152, SIDE_DOOR_POINT, 200 242 -0.5, 29 ] +store_suit_point [ 158, SIDE_DOOR_POINT, 380 260 -0.5, 18 ] +store_suit_point [ 159, SIDE_DOOR_POINT, 420 275 -0.5, 7 ] +store_suit_point [ 160, SIDE_DOOR_POINT, 360 318 -0.5, 19 ] +store_suit_point [ 162, SIDE_DOOR_POINT, 342 390 -0.5, 11 ] +store_suit_point [ 163, SIDE_DOOR_POINT, 350 323 -0.5, 9 ] +store_suit_point [ 164, SIDE_DOOR_POINT, 260 335 -0.5, 27 ] +store_suit_point [ 165, SIDE_DOOR_POINT, 300 348 -0.5, 20 ] +store_suit_point [ 166, SIDE_DOOR_POINT, 258 390 -0.5, 24 ] +store_suit_point [ 167, SIDE_DOOR_POINT, 85 280 -0.5, 6 ] +store_suit_point [ 168, SIDE_DOOR_POINT, 230 280 -0.5, 13 ] +store_suit_point [ 169, SIDE_DOOR_POINT, 320 280 -0.5, 25 ] +store_suit_point [ 170, SIDE_DOOR_POINT, 372.484 189.666 -0.5, 14 ] +store_suit_point [ 171, SIDE_DOOR_POINT, 39.5371 242.552 -0.5, 10 ] +store_suit_point [ 172, SIDE_DOOR_POINT, 199.844 205.009 -0.5, 23 ] +store_suit_point [ 173, SIDE_DOOR_POINT, 277.649 159.575 -0.5 ] +store_suit_point [ 174, SIDE_DOOR_POINT, 320.056 197.653 -0.5, 8 ] +store_suit_point [ 175, SIDE_DOOR_POINT, 400.148 350.016 -0.5, 17 ] +group "theBurrrgh" [ + visgroup "3301" [ + vis [ "3301" "3302" "3303" "3304" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 2 3 ] + suit_edge [ 116 1 ] + suit_edge [ 1 116 ] + suit_edge [ 116 3 ] + suit_edge [ 3 116 ] + suit_edge [ 116 0 ] + suit_edge [ 0 116 ] + suit_edge [ 171 0 ] + suit_edge [ 0 171 ] + suit_edge [ 171 3 ] + suit_edge [ 3 171 ] + battle_cell [ 20 20 60 232 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 80 200 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb10:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "A Better Built Quilt" ] + pos [ 40 220 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ -0.0441061 0 3.23482 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0 1 1 ] + pos [ -0.0553396 0 0.714799 ] + scale [ 1.42449 1 1.19366 ] + flags [ "b" ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.501961 0 1 1 ] + pos [ -0.0426436 0 -0.715311 ] + scale [ 1.39408 1 1.66226 ] + width [ 12.2127 ] + height [ 12.2127 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 1 0 1 1 ] + pos [ 0 0 -2.77472 ] + scale [ 2.17559 1 2.24281 ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 40 200 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 80 210 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 80 225 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 80 240 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 40 235 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.59 0.85 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "linktunnel_br_3000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 80 200 0 ] + nhpr [ -180 0 0 ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0.447265 0 -3.37866 ] + scale [ 1.4059 1 1.29715 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.631843 ] + scale [ 1.56956 1 1.48408 ] + kern [ 0.0754488 ] + width [ 29.8228 ] + height [ 29.8228 ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + pos [ 0 0 1.57597 ] + scale [ 2.51314 1 2.02763 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.376471 0.74902 1 ] + pos [ 0 0 -1.76694 ] + width [ 30.7672 ] + height [ 30.7672 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 75.8168 225.281 7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 51.3094 205.7 -0.499985 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "3302" [ + vis [ "3302" "3301" "3303" "3304" "3305" ] + suit_edge [ 4 5 ] + suit_edge [ 5 0 ] + suit_edge [ 3 6 ] + suit_edge [ 6 7 ] + suit_edge [ 4 17 ] + suit_edge [ 17 5 ] + suit_edge [ 117 17 ] + suit_edge [ 17 117 ] + suit_edge [ 117 6 ] + suit_edge [ 6 117 ] + suit_edge [ 167 4 ] + suit_edge [ 4 167 ] + suit_edge [ 167 7 ] + suit_edge [ 7 167 ] + battle_cell [ 20 20 60 259 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 40 240 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb6:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Alpine Chow Line" ] + pos [ 55 280 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ -0.0764476 0 -2.64221 ] + scale [ 1.28405 1 0.681984 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.588235 1 1 ] + pos [ 0 0 -3.53585 ] + scale [ 1.54534 1 3.09496 ] + wiggle [ -0.0267324 ] + stomp [ 0.229848 ] + width [ 33.3421 ] + height [ 33.3421 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 40 250 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ 40 265 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 10 -5 0 ] + nhpr [ -90 0 0 ] + scale [ 0.674223 0.674223 0.674223 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 40 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 80 280 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ -5 -5 0 ] + nhpr [ 180 0 0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 44.5534 251.459 7.62939e-006 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "3303" [ + vis [ "3303" "3301" "3302" "3304" "3305" "3306" "3307" "3328" "3308" ] + suit_edge [ 8 9 ] + suit_edge [ 9 4 ] + suit_edge [ 7 10 ] + suit_edge [ 10 11 ] + suit_edge [ 118 10 ] + suit_edge [ 10 118 ] + suit_edge [ 118 9 ] + suit_edge [ 9 118 ] + suit_edge [ 144 11 ] + suit_edge [ 11 144 ] + suit_edge [ 144 8 ] + suit_edge [ 8 144 ] + battle_cell [ 20 20 100 260 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 80 240 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb30:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Wait and See Goggle Defogging" ] + pos [ 110 240 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 -2.99008 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.486275 0.188235 0.686275 1 ] + pos [ 0 0 -0.843065 ] + scale [ 1.00676 1 1.59375 ] + width [ 20.4595 ] + height [ 20.4595 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.717647 0.494118 0.862745 1 ] + pos [ 0 0 -2.87769 ] + scale [ 1.40018 1 2.61193 ] + kern [ 0.0575017 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ 90 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 105 280 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.59 1 0.92 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.59 1 0.92 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.762 3.66599 21.1813 ] + nhpr [ 0 0 0 ] + scale [ 1.64599 1.64599 1.64599 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 85 240 0 ] + nhpr [ -180 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 10 -5.00001 0 ] + nhpr [ -180 0 0 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 120 240 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.38 0.63 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 119.452 277.488 0 ] + nhpr [ 180 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 101.583 275.997 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "3304" [ + vis [ "3304" "3302" "3301" "3303" "3305" "3306" "3307" "3308" "3310" "3328" "3326" ] + suit_edge [ 11 12 ] + suit_edge [ 12 13 ] + suit_edge [ 14 15 ] + suit_edge [ 15 16 ] + suit_edge [ 16 8 ] + suit_edge [ 119 12 ] + suit_edge [ 12 119 ] + suit_edge [ 119 16 ] + suit_edge [ 16 119 ] + suit_edge [ 145 15 ] + suit_edge [ 15 145 ] + suit_edge [ 145 12 ] + suit_edge [ 12 145 ] + battle_cell [ 20 20 138 257 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 120 280 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 160 280 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 170 290 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb28:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Snowman's Land" ] + pos [ 125 280 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 1.18065 ] + scale [ 1 1 0.647138 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -2.58719 ] + scale [ 1.70556 1 3.05491 ] + stumble [ -0.0264881 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 135 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 13.112 -7.991 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 150 280 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 150 290 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 150 300 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + scale [ 1.68849 1.68849 1.68849 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 6.505 -1.85699 -0.020872 ] + nhpr [ 15 0.115237 -0.202839 ] + color [ 0.22 0.83 0.83 1 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 9.411 -1.04099 -0.000286102 ] + nhpr [ -15 0 0 ] + color [ 0.49 0.89 1 1 ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 165 300 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.16 0.67 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 260 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 7.19099 -6.28599 0 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 280 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 290 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 170 290 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3305" [ + vis [ "3305" "3302" "3303" "3304" "3306" "3307" "3308" "3328" "3312" "3313" ] + suit_edge [ 13 18 ] + suit_edge [ 18 19 ] + suit_edge [ 20 21 ] + suit_edge [ 21 14 ] + suit_edge [ 120 21 ] + suit_edge [ 21 120 ] + suit_edge [ 120 18 ] + suit_edge [ 18 120 ] + suit_edge [ 146 14 ] + suit_edge [ 14 146 ] + suit_edge [ 146 13 ] + suit_edge [ 13 146 ] + battle_cell [ 20 20 140 229 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 160 200 8.39233e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 120 220 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb12:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Mittens for Kittens" ] + pos [ 160 229.969 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 0.00862136 ] + scale [ 0.822516 1 0.777783 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 1.19084 ] + scale [ 0.963997 1 1.50637 ] + width [ 4.02619 ] + height [ 4.02619 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.160784 1 0.490196 1 ] + pos [ 0 0 -0.155682 ] + scale [ 1 1 1.49022 ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.439216 0.290196 0.701961 1 ] + pos [ 0 0 -1.70051 ] + scale [ 2.04568 1 1.73158 ] + width [ 32.8395 ] + height [ 32.8395 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 120 220 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 110 220 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 110 200 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 20 -1.98711e-006 0 ] + nhpr [ -90 0 0 ] + scale [ 1.98074 1.98074 1.98074 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ -0.592001 -13.287 0 ] + nhpr [ -90 0 0 ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 4.51204 -4.01163 0 ] + nhpr [ 180 0 0 ] + scale [ 0.604883 0.604883 0.604883 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 220 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 250 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 157.74 234.32 0 ] + nhpr [ -90 0 0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 119.305 216.406 0 ] + nhpr [ 90 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 153.93 206.554 8.39233e-005 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "3306" [ + vis [ "3306" "3305" "3304" "3303" "3307" "3308" "3309" "3311" "3312" "3313" "3314" "3315" "3316" "3328" ] + suit_edge [ 19 22 ] + suit_edge [ 22 23 ] + suit_edge [ 23 24 ] + suit_edge [ 25 26 ] + suit_edge [ 26 20 ] + suit_edge [ 121 22 ] + suit_edge [ 22 121 ] + suit_edge [ 121 26 ] + suit_edge [ 26 121 ] + suit_edge [ 147 22 ] + suit_edge [ 22 147 ] + suit_edge [ 147 26 ] + suit_edge [ 26 147 ] + battle_cell [ 20 20 140 180 -0.5 ] + group "streets" [ + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 110 180 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_double_corner" ] + pos [ 120 200 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 135 140 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 135 120 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb21:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Hibernation Vacations" ] + pos [ 110 169.969 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + pos [ 0 0 0.237495 ] + baseline [ + code [ "mickey" ] + color [ 0 1 0.501961 1 ] + pos [ 0 0 -0.664043 ] + scale [ 0.845095 1 1.60399 ] + width [ 29.3624 ] + height [ 29.3624 ] + flags [ "d" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 110 190 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 110 150 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -4.80825e-006 1.07269e-006 0 ] + nhpr [ 2.0326e-014 0 0 ] + scale [ 2.89083 2.89083 2.89083 ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 15 -5 0 ] + nhpr [ 120 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 23.0267 -18.097 0 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 135 150 0 ] + nhpr [ -180 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.27 1 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ -0.135315 -16.6179 0 ] + nhpr [ 90 0 0 ] + scale [ 0.81428 0.81428 0.81428 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 135 125 0 ] + nhpr [ 90 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0 0.87 0.69 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 155 150 0 ] + nhpr [ -90 0 0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 9.99999 -6.11959e-006 0 ] + nhpr [ -5.87031e-014 0 0 ] + scale [ 2.14561 2.14561 2.14561 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 5.26299 -1.56701 2.36977 ] + nhpr [ 90 -19.5647 0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 126.305 192.359 7.62939e-006 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "3307" [ + vis [ "3307" "3328" "3306" "3305" "3304" "3303" "3308" "3309" "3310" "3311" "3312" "3313" "3314" "3315" "3316" ] + suit_edge [ 24 27 ] + suit_edge [ 27 28 ] + suit_edge [ 29 30 ] + suit_edge [ 30 25 ] + suit_edge [ 141 24 ] + suit_edge [ 24 141 ] + suit_edge [ 141 25 ] + suit_edge [ 25 141 ] + suit_edge [ 149 27 ] + suit_edge [ 27 149 ] + suit_edge [ 149 30 ] + suit_edge [ 30 149 ] + battle_cell [ 20 20 180 180 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 160 160 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 155 160 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb15:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "The Toupee Chalet" ] + pos [ 180 149.969 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 1.60593 ] + scale [ 1 1 0.674393 ] + baseline [ + code [ "humanist" ] + color [ 0.65098 0.376471 0.835294 1 ] + pos [ -0.183562 0 1.4864 ] + scale [ 1.12592 1 1.97781 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.360784 0.137255 0.513726 1 ] + pos [ 0 0 -0.545369 ] + scale [ 2.54108 1 1.92412 ] + width [ 13.1984 ] + height [ 13.1984 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.580392 0.25098 0.8 1 ] + pos [ 0 0 -2.94423 ] + scale [ 1.4448 1 2.27392 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ 160 200 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 0.936005 -4.261 0 ] + nhpr [ 0 0 0 ] + scale [ 0.559027 0.559027 0.559027 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 175 200 0 ] + nhpr [ 0 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 15 -5 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 195 150 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 167 150 0 ] + nhpr [ -180 0 0 ] + width [ 12 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 195 160 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 158.643 150.78 0 ] + nhpr [ 0 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 192.588 165.727 0 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "3308" [ + vis [ "3308" "3309" "3310" "3311" "3312" "3313" "3314" "3315" "3316" "3307" "3306" "3305" ] + suit_edge [ 28 31 ] + suit_edge [ 31 32 ] + suit_edge [ 33 34 ] + suit_edge [ 34 29 ] + suit_edge [ 123 31 ] + suit_edge [ 31 123 ] + suit_edge [ 123 34 ] + suit_edge [ 34 123 ] + suit_edge [ 150 32 ] + suit_edge [ 32 150 ] + battle_cell [ 20 20 220 180 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 240 200 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb26:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Oh My Galoshes!" ] + pos [ 230 160 0 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 1 1 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 4.4382 ] + scale [ 1 1 0.866148 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.25098 1 ] + pos [ 0 0 -3.41883 ] + scale [ 1.49589 1 3.08331 ] + kern [ 0.0824874 ] + wiggle [ -2.43832 ] + stomp [ 0.232716 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 205 160 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 5.058 -4.992 2.0504e-005 ] + nhpr [ 180 0 0 ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 215 160 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb26:random_DNARoot" [ + pos [ 250 160 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15 -35 0 ] + nhpr [ -180 0 0 ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 10 -5.00001 0 ] + nhpr [ -2.89091e-014 0 0 ] + scale [ 0.857236 0.857236 0.857236 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3309" [ + vis [ "3309" "3310" "3311" "3312" "3313" "3314" "3315" "3316" "3308" "3307" "3306" ] + suit_edge [ 35 36 ] + suit_edge [ 36 33 ] + suit_edge [ 124 36 ] + suit_edge [ 36 124 ] + suit_edge [ 172 33 ] + suit_edge [ 33 172 ] + battle_cell [ 20 20 220 225 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 240 200 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb23:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Precipitation Foundation" ] + pos [ 200 210 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ -0.199703 0 -1.41514 ] + scale [ 1.38881 1 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ -0.164432 0 1.10844 ] + scale [ 0.874213 1 1.93831 ] + width [ 7.33298 ] + height [ 7.33298 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 1 1 ] + pos [ -0.120163 0 -1.63209 ] + scale [ 0.94097 1 2.74356 ] + width [ 26.1313 ] + height [ 26.1313 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 200 200 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.27 1 0.85 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_mailbox_DNARoot" [ + code [ "BR_mailbox" ] + pos [ 15.259 -32.617 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 37.386 -41.87 0 ] + nhpr [ 135 0 0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 32.778 -49.141 0 ] + nhpr [ -45 0 0 ] + scale [ 2.57103 2.57103 2.57103 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 203.971 233.197 0 ] + nhpr [ -90 0 0 ] + ] + ] + ] + visgroup "3310" [ + vis [ "3310" "3309" "3308" "3307" "3311" "3312" "3313" "3314" "3315" "3316" "3326" "3306" "3304" "3317" "3318" ] + suit_edge [ 37 38 ] + suit_edge [ 38 35 ] + suit_edge [ 125 38 ] + suit_edge [ 38 125 ] + suit_edge [ 152 35 ] + suit_edge [ 35 152 ] + battle_cell [ 20 20 223 257 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 200 240 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 220 300 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 230 300 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 210 290 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb29:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Pinecone Zone" ] + pos [ 200 250 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign4" ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.34902 0.690196 0 1 ] + pos [ 0 0 -0.896444 ] + scale [ 1.68341 1 1.94752 ] + width [ 29.6092 ] + height [ 29.6092 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 180 300 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 200 300 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 210 300 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ 210 310 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_pink_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 5 0 0 ] + nhpr [ 0 0 0 ] + scale [ 1.3833 1.3833 1.3833 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 200 235 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 1 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 200 270 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 200 280 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + scale [ 1.88568 1.88568 1.88568 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 210 280 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 7.90398 -1.317 0 ] + nhpr [ -105 0 0 ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 210 290 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.27 1 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 190 290 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 220 300 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 235 300 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3311" [ + vis [ "3311" "3310" "3312" "3309" "3308" "3313" "3314" "3315" "3316" "3317" "3318" "3307" "3306" ] + suit_edge [ 39 40 ] + suit_edge [ 40 37 ] + suit_edge [ 126 40 ] + suit_edge [ 40 126 ] + suit_edge [ 168 37 ] + suit_edge [ 37 168 ] + battle_cell [ 20 20 260 260 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 240 240 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb13:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Snowshoes You Can't Refuse" ] + pos [ 245 280 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "tunnel_sign_blue" ] + color [ 0.576471 1 0.8 1 ] + scale [ 1 1 0.849413 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.545098 0.133333 1 1 ] + pos [ 0 0 -1.47482 ] + scale [ 0.887767 1 1.99657 ] + kern [ 0.027611 ] + stomp [ 0.112074 ] + width [ 39.3411 ] + height [ 39.3411 ] + flags [ "b" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 240 280 0 ] + nhpr [ 0 0 0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 260 280 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_icecube_sunglasses_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ -14.19 -7.841 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 0.822998 -38.274 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb13:random_DNARoot" [ + pos [ 220 280 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_hydrant_DNARoot" [ + code [ "BR_hydrant" ] + pos [ 0 -8.155 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15 -35 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 6.5787 5.0668 15.0634 ] + nhpr [ -75 0 0 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 264 278.853 0 ] + nhpr [ 0 0 0 ] + ] + ] + ] + visgroup "3312" [ + vis [ "3312" "3311" "3310" "3309" "3308" "3307" "3306" "3305" "3313" "3314" "3315" "3316" ] + suit_edge [ 32 41 ] + battle_cell [ 20 20 260 180 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 240 160 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 280 200 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random_DNARoot" [ + pos [ 270 160 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ul" ] + pos [ 0.705004 -35.08 0 ] + nhpr [ -180 0 0 ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ -8.42665 -64.2849 0 ] + nhpr [ -180 0 0 ] + ] + ] + ] + group "props" [ + landmark_building "tb1:toon_landmark_hqBR_DNARoot" [ + code [ "toon_landmark_hqBR" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ 268.052 228.052 0 ] + nhpr [ -45 0 0 ] + ] + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 260 165 0 ] + nhpr [ -180 0 0 ] + ] + ] + ] + visgroup "3313" [ + vis [ "3313" "3312" "3314" "3311" "3310" "3309" "3308" "3307" "3306" "3305" "3315" "3316" ] + suit_edge [ 41 42 ] + suit_edge [ 42 43 ] + suit_edge [ 43 44 ] + suit_edge [ 127 42 ] + suit_edge [ 42 127 ] + suit_edge [ 173 41 ] + suit_edge [ 41 173 ] + battle_cell [ 20 20 299 181 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 320 200 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 340 160 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb16:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Just So Mistletoe" ] + pos [ 305 160 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + color [ 0.780392 1 0.858824 1 ] + pos [ 0 0 0.304677 ] + scale [ 1 1 0.866982 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0 1 ] + pos [ 0 0 0.640689 ] + scale [ 1.17367 1 2.30679 ] + width [ 13.8913 ] + height [ 13.8913 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "o" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.36547 ] + scale [ 2.86014 1 2.15521 ] + width [ 44.971 ] + height [ 44.971 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 310 160 0 ] + nhpr [ 180 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 325 160 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15 -8.01601 0 ] + nhpr [ 180 0 0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 340 160 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 320 190 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.59 1 0.92 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -5 -35 0 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 320 180 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 330 180 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 340 180 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 20 -6.99382e-006 0 ] + nhpr [ -90 0 0 ] + scale [ 2.43601 2.43601 2.43601 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 7.51 -8.68601 0 ] + nhpr [ 135 0 0 ] + ] + prop "prop_skates_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 20.9262 -16.7673 -0.0133596 ] + nhpr [ -45 1.11016 2.90871e-006 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 285 160 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.24 0.76 0.89 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3314" [ + vis [ "3314" "3313" "3312" "3311" "3310" "3309" "3307" "3306" "3315" "3316" "3308" ] + suit_edge [ 44 45 ] + suit_edge [ 45 46 ] + suit_edge [ 128 45 ] + suit_edge [ 45 128 ] + suit_edge [ 174 44 ] + suit_edge [ 44 174 ] + battle_cell [ 20 20 300 220 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 320 200 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb8:random_DNARoot" [ + pos [ 320 205 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.69 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 10.799 1.77499 14.6633 ] + nhpr [ -15 0 0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 320 240 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.69 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 5 -5.00001 0 ] + nhpr [ 120 0 0 ] + ] + ] + landmark_building "tb8:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "The Sweater Lodge" ] + pos [ 320 230 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -0.977532 ] + scale [ 1.44932 1 1.18899 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 1 0.501961 1 1 ] + pos [ 0.266909 0 -1.11596 ] + scale [ 2.50378 1 2.1768 ] + width [ 23.8559 ] + height [ 23.8559 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 1 0.501961 1 1 ] + pos [ 0 0 -3.32028 ] + scale [ 1.9622 1 2.64743 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 315.33 205.374 0 ] + nhpr [ 90 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 285.926 206.708 -1.52588e-005 ] + nhpr [ 120 0 0 ] + ] + ] + visgroup "3315" [ + vis [ "3315" "3314" "3313" "3312" "3311" "3310" "3309" "3308" "3307" "3306" "3316" "3318" "3317" ] + suit_edge [ 47 48 ] + suit_edge [ 48 39 ] + suit_edge [ 46 49 ] + suit_edge [ 49 50 ] + battle_cell [ 20 20 300 260 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 280 240 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb13:random_DNARoot" [ + pos [ 270 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 0.92 0.61 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 285 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 300 280 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + ] + group "props" [ + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 285 245 0 ] + nhpr [ 0 0 0 ] + ] + ] + ] + visgroup "3316" [ + vis [ "3316" "3315" "3314" "3313" "3312" "3311" "3310" "3309" "3308" "3307" "3306" "3317" "3318" ] + suit_edge [ 51 52 ] + suit_edge [ 52 53 ] + suit_edge [ 53 47 ] + suit_edge [ 50 54 ] + suit_edge [ 54 55 ] + suit_edge [ 129 53 ] + suit_edge [ 53 129 ] + suit_edge [ 129 54 ] + suit_edge [ 54 129 ] + suit_edge [ 169 47 ] + suit_edge [ 47 169 ] + suit_edge [ 169 50 ] + suit_edge [ 50 169 ] + battle_cell [ 20 20 350 260 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 330 280 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 330 280 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb25:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Cool Cat Hats" ] + pos [ 330 280 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 -2.72992 ] + scale [ 0.784098 1 1.13692 ] + baseline [ + code [ "mickey" ] + color [ 0.658824 1 1 1 ] + pos [ 0 0 -0.831927 ] + scale [ 2.61321 1 1.76149 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.819608 1 1 ] + pos [ 0 0 -2.16643 ] + scale [ 3.83953 1 1.58897 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0 1 1 ] + pos [ 0 0 -3.47043 ] + scale [ 3.34507 1 1.53987 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ 330 240 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_brickbox_ur" ] + pos [ 10.166 -5.86501 0 ] + nhpr [ 180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -7.287 -7.046 0 ] + nhpr [ 1.00179e-005 0 0 ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 370 280 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 355 280 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 370 265 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 370 255 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 310 280 0 ] + nhpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 10 -5 0 ] + nhpr [ 0 0 0 ] + scale [ 0.829536 0.829536 0.829536 ] + color [ 0.59 1 0.92 1 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 350 275 0 ] + nhpr [ 180 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 330.848 274.351 -3.8147e-006 ] + nhpr [ 30 0 0 ] + ] + ] + visgroup "3317" [ + vis [ "3317" "3316" "3315" "3311" "3318" "3319" "3310" "3327" ] + suit_edge [ 55 56 ] + suit_edge [ 56 57 ] + suit_edge [ 57 58 ] + suit_edge [ 59 60 ] + suit_edge [ 60 51 ] + battle_cell [ 20 20 350 210 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 370 190 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_10x40" ] + pos [ 370 230 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random_DNARoot" [ + pos [ 365 190 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 350 190 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 12.2881 -7.19106 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 335 230 0 ] + nhpr [ -180 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 330 230 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 330 190 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 330 205 0 ] + nhpr [ 0 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ 370 245 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.69 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 22.144 -6.16502 0 ] + nhpr [ -90 0 0 ] + scale [ 0.683598 0.683598 0.683598 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 335 205 0 ] + nhpr [ 90 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 365.799 191.403 3.05176e-005 ] + nhpr [ -180 0 0 ] + ] + ] + ] + visgroup "3318" [ + vis [ "3318" "3317" "3316" "3319" "3320" "3321" "3327" "3315" "3311" "3322" "3330" ] + suit_edge [ 58 61 ] + suit_edge [ 61 62 ] + suit_edge [ 62 63 ] + suit_edge [ 64 65 ] + suit_edge [ 65 59 ] + suit_edge [ 130 61 ] + suit_edge [ 61 130 ] + suit_edge [ 130 65 ] + suit_edge [ 65 130 ] + suit_edge [ 170 58 ] + suit_edge [ 58 170 ] + suit_edge [ 170 59 ] + suit_edge [ 59 170 ] + battle_cell [ 20 20 385 210 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_double_corner" ] + pos [ 390 190 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 390 230 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 380 230 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb14:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Malt in Your Mouth Soda Fountain" ] + pos [ 405 190 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.27 1 0.85 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 0 0.819608 1 1 ] + baseline [ + code [ "humanist" ] + color [ 1 0.501961 1 1 ] + pos [ 0 0 0.911482 ] + scale [ 0.818393 1 2.06772 ] + width [ 30.7584 ] + height [ 30.7584 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.960784 0.219608 1 1 ] + pos [ 0 0 -0.778385 ] + scale [ 2.06785 1 1.88193 ] + width [ 34.3695 ] + height [ 34.3695 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 395 190 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 410 190 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 425 180 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 440 180 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 17.351 -6.584 0 ] + nhpr [ -15 -0.010052 -0.271664 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -1.48619e-005 -3.05176e-005 0 ] + nhpr [ 1.22834e-013 0 0 ] + scale [ 3.68443 3.68443 3.68443 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 4.81501 1.50501 3.3211 ] + nhpr [ 60 0 0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 9.099e-006 -15 0 ] + nhpr [ 90 0 0 ] + scale [ 2.25741 2.25741 2.25741 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 5.00001 -20 0 ] + nhpr [ 165 0 0 ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 410 180 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 370 230 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 430 225 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.181 2.22899 21.9225 ] + nhpr [ 15 0 0 ] + scale [ 1.28911 1.28911 1.28911 ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 2.141 -33.472 0 ] + nhpr [ 90 0 0 ] + scale [ 0.757535 0.757535 0.757535 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 440 195 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 440 210 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 430 210 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb14:random_DNARoot" [ + pos [ 380 190 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 428.321 221.733 3.05176e-005 ] + nhpr [ 90 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 408.469 195.134 -7.62939e-006 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "3319" [ + vis [ "3319" "3318" "3320" "3321" "3322" "3327" "3317" "3330" ] + suit_edge [ 66 67 ] + suit_edge [ 67 68 ] + suit_edge [ 68 69 ] + suit_edge [ 69 64 ] + suit_edge [ 63 70 ] + suit_edge [ 70 71 ] + suit_edge [ 71 72 ] + suit_edge [ 72 73 ] + suit_edge [ 131 68 ] + suit_edge [ 68 131 ] + suit_edge [ 131 72 ] + suit_edge [ 72 131 ] + suit_edge [ 158 67 ] + suit_edge [ 67 158 ] + suit_edge [ 158 72 ] + suit_edge [ 72 158 ] + battle_cell [ 20 20 405 249 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 430 270 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb18:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "The Shovel Hovel" ] + pos [ 380 235 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign4" ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.25098 0.25098 1 ] + pos [ 0 0 0.854767 ] + scale [ 1.23371 1 1.07842 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.65098 0.211765 0 1 ] + pos [ -0.0678335 0 -0.664107 ] + scale [ 1.49651 1 1.57691 ] + width [ 33.2221 ] + height [ 33.2221 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 380 230 0 ] + nhpr [ 90 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 7.90198 -17.5581 3.05176e-005 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 380 250 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + prop "prop_BR_roman_entrance_DNARoot" [ + code [ "prop_BR_roman_entrance" ] + pos [ 10 -5 0 ] + nhpr [ 0 0 0 ] + scale [ 0.859791 0.859791 0.859791 ] + color [ 0.59 1 0.92 1 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 420 270 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 430 270 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 7.54902 -16.877 0 ] + nhpr [ -90 0 0 ] + scale [ 0.719658 0.719658 0.719658 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 430 255 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 1 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 430 240 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 8.26199 -6.482 0 ] + nhpr [ -90 0 0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 424.098 240.646 7.62939e-006 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "3320" [ + vis [ "3320" "3319" "3318" "3321" "3322" "3327" "3330" ] + suit_edge [ 81 82 ] + suit_edge [ 82 83 ] + suit_edge [ 83 84 ] + suit_edge [ 84 74 ] + suit_edge [ 80 85 ] + suit_edge [ 85 86 ] + suit_edge [ 86 87 ] + suit_edge [ 87 88 ] + suit_edge [ 133 82 ] + suit_edge [ 82 133 ] + suit_edge [ 133 87 ] + suit_edge [ 87 133 ] + suit_edge [ 160 84 ] + suit_edge [ 84 160 ] + suit_edge [ 160 87 ] + suit_edge [ 87 160 ] + battle_cell [ 20 20 388 327 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 360 310 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random_DNARoot" [ + pos [ 410 320 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 370 310 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 6.47574 -1.14441e-005 3.05176e-005 ] + nhpr [ 0 0 0 ] + scale [ 1.66662 1.66662 1.66662 ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 360 310 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.2 0.53 0.46 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 360 340 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 410 335 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.80101 -7.26402 0 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 410 345 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 1.46303 -16.439 0 ] + nhpr [ -90 0 0 ] + scale [ 0.623104 0.623104 0.623104 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 400 345 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + landmark_building "tb19:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Clean Sweep Chimney Service" ] + pos [ 360 325 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.49 0.89 1 1 ] + ] + sign [ + code [ "TB_sign2" ] + pos [ 0 0 6.18635 ] + scale [ 1 1 1.1692 ] + baseline [ + code [ "mickey" ] + color [ 0.360784 0.360784 0.658824 1 ] + pos [ 0 0 -0.809899 ] + scale [ 0.886915 1 1.56538 ] + kern [ 0.0964781 ] + width [ 15.6133 ] + height [ 15.6133 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.360784 0.360784 0.458824 1 ] + pos [ 0 0 -3.05162 ] + scale [ 1.08623 1 2.07801 ] + kern [ 0.11246 ] + stomp [ 0.0453338 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_trashcan_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_trashcan" ] + anim [ "tt_a_ara_tbr_trashcan_idle0" ] + cell_id [ 0 ] + pos [ 376.896 314.497 0 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "3321" [ + vis [ "3321" "3320" "3319" "3318" "3327" "3322" "3323" "3324" "3330" ] + suit_edge [ 88 89 ] + suit_edge [ 89 90 ] + suit_edge [ 90 91 ] + suit_edge [ 92 93 ] + suit_edge [ 93 81 ] + suit_edge [ 134 89 ] + suit_edge [ 89 134 ] + suit_edge [ 134 93 ] + suit_edge [ 93 134 ] + suit_edge [ 175 88 ] + suit_edge [ 88 175 ] + suit_edge [ 175 81 ] + suit_edge [ 81 175 ] + battle_cell [ 20 20 370 370 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 360 390 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 360 390 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb17:toon_landmark_BR_C1_DNARoot" [ + code [ "toon_landmark_BR_C1" ] + title [ "Winter Wonderland Walking Club" ] + pos [ 400 375 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign4" ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 0.530381 ] + scale [ 1.29256 1 1.6618 ] + width [ 10.5089 ] + height [ 10.5089 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.866274 ] + scale [ 1 1 1.76105 ] + width [ 29.7235 ] + height [ 29.7235 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "b" ] + ] + ] + ] + ] + flat_building "tb19:random_DNARoot" [ + pos [ 360 350 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 400 395 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 350 390 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 8.27899 3.91299 19.2972 ] + nhpr [ 0 0 0 ] + scale [ 1.29765 1.29765 1.29765 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 400 355 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ -1.64902 -32.0929 3.05176e-005 ] + nhpr [ -90 0 0 ] + scale [ 0.730693 0.730693 0.730693 ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 357.552 388.647 0 ] + nhpr [ 0 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 394.503 377.436 7.62939e-006 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "3322" [ + vis [ "3322" "3321" "3320" "3319" "3323" "3324" "3327" "3318" "3330" ] + suit_edge [ 91 94 ] + suit_edge [ 94 95 ] + suit_edge [ 95 96 ] + suit_edge [ 97 98 ] + suit_edge [ 98 92 ] + suit_edge [ 136 95 ] + suit_edge [ 95 136 ] + suit_edge [ 136 98 ] + suit_edge [ 98 136 ] + suit_edge [ 162 94 ] + suit_edge [ 94 162 ] + suit_edge [ 162 98 ] + suit_edge [ 98 162 ] + battle_cell [ 20 20 330 350 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 310 350 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 350 340 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb11:toon_landmark_BR_B1_DNARoot" [ + code [ "toon_landmark_BR_B1" ] + title [ "Your Snow Angel" ] + pos [ 320 390 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + sign [ + code [ "TB_sign3" ] + pos [ 0 0 4.26947 ] + scale [ 0.845819 1 1 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 1 0.658824 1 1 ] + pos [ -2.85562 0 -2.06123 ] + scale [ 1.99133 1 2.08075 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + pos [ 0 0 -3.49844 ] + scale [ 2.20549 1 1.90112 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0.423529 0.8 1 1 ] + pos [ 2.38777 0 -4.99093 ] + scale [ 2.17617 1 1.97732 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 310 355 0 ] + nhpr [ -180 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_BR_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 350 350 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 335 390 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.89 1 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 14.64 -8.02701 0 ] + nhpr [ 0 0 0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 310 390 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.24 0.76 0.89 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 6.28101 -6.53799 3.05176e-005 ] + nhpr [ -180 0 0 ] + scale [ 0.823931 0.823931 0.823931 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 310 370 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 310 355 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 15 1.43444e-005 0 ] + nhpr [ 9.5792e-014 0 0 ] + scale [ 2.02911 2.02911 2.02911 ] + ] + prop "prop_icecube_glove_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 4.99999 -4.99999 0 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 310 340 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.59 1 0.92 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 344.348 355.649 2.28882e-005 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "3323" [ + vis [ "3323" "3322" "3321" "3324" "3325" "3326" "3330" ] + suit_edge [ 96 99 ] + suit_edge [ 99 100 ] + suit_edge [ 101 102 ] + suit_edge [ 102 97 ] + suit_edge [ 137 102 ] + suit_edge [ 102 137 ] + suit_edge [ 137 99 ] + suit_edge [ 99 137 ] + suit_edge [ 163 102 ] + suit_edge [ 102 163 ] + suit_edge [ 163 99 ] + suit_edge [ 99 163 ] + battle_cell [ 20 20 313 320 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 350 340 1.52588e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 310 340 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random_DNARoot" [ + pos [ 350 300 0 ] + nhpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 315 300 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 350 315 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 350 330 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.49 0.69 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 350 340 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 300 340 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 16.758 -6.99301 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_icecube_ear_protection_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 0.95401 -2.46701 0 ] + nhpr [ 0 0 0 ] + ] + ] + landmark_building "tb9:toon_landmark_BR_A2_DNARoot" [ + code [ "toon_landmark_BR_A2" ] + title [ "Ice Saw It Too" ] + pos [ 340 300 0 ] + nhpr [ -180 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -3.48868 ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.18537 ] + scale [ 1.92218 1 2.66957 ] + width [ 23.5517 ] + height [ 23.5517 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + color [ 0 0.501961 1 1 ] + pos [ -0.13501 0 -3.18513 ] + scale [ 2.26089 1 2.57248 ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 337.744 305 0 ] + nhpr [ 180 0 0 ] + ] + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_mailbox_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_mailbox" ] + anim [ "tt_a_ara_tbr_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 309.239 304.011 1.52588e-005 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "3324" [ + vis [ "3324" "3323" "3322" "3321" "3325" "3326" "3330" ] + suit_edge [ 100 103 ] + suit_edge [ 103 104 ] + suit_edge [ 105 106 ] + suit_edge [ 106 101 ] + suit_edge [ 138 106 ] + suit_edge [ 106 138 ] + suit_edge [ 138 103 ] + suit_edge [ 103 138 ] + suit_edge [ 164 105 ] + suit_edge [ 105 164 ] + suit_edge [ 164 104 ] + suit_edge [ 104 164 ] + battle_cell [ 20 20 280 330 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 300 300 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb27:toon_landmark_BR_B2_DNARoot" [ + code [ "toon_landmark_BR_B2" ] + title [ "Choral Wreaths" ] + pos [ 260 315 0 ] + nhpr [ 90 0 0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "tunnel_sign_green" ] + color [ 0.317647 0.882353 0.811765 1 ] + pos [ 0.0346865 0 0.245197 ] + scale [ 0.785685 1 0.735827 ] + baseline [ + code [ "humanist" ] + color [ 0.780392 0.956863 0.701961 1 ] + pos [ 0 0 0.795478 ] + scale [ 1.03281 1 1.80589 ] + wiggle [ 0.702277 ] + width [ 6.14065 ] + height [ 6.14065 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.50822 ] + scale [ 2.44299 1 2.17664 ] + wiggle [ -4.51198 ] + width [ 38.6609 ] + height [ 38.6609 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 300 300 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.5 0.64 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 260 300 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 270 300 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 290 300 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.49 0.69 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.49 0.69 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 1.99301 -5.24099 3.63798e-012 ] + nhpr [ -90 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 21.902 -9.99999 0 ] + nhpr [ -180 0 0 ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ 260 330 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.85 0.6 1 ] + count [ 1 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.27 1 0.85 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + ] + ] + ] + group "props" [ + prop "neighborhood_sign_BR_DNARoot" [ + code [ "neighborhood_sign_BR" ] + pos [ 275.472 301.575 0 ] + nhpr [ 0 0 0 ] + ] + ] + ] + visgroup "3325" [ + vis [ "3325" "3324" "3323" "3326" ] + suit_edge [ 104 107 ] + suit_edge [ 107 108 ] + suit_edge [ 108 109 ] + suit_edge [ 109 110 ] + suit_edge [ 111 112 ] + suit_edge [ 112 113 ] + suit_edge [ 113 105 ] + suit_edge [ 139 113 ] + suit_edge [ 113 139 ] + suit_edge [ 139 107 ] + suit_edge [ 107 139 ] + suit_edge [ 140 109 ] + suit_edge [ 109 140 ] + suit_edge [ 140 112 ] + suit_edge [ 112 140 ] + suit_edge [ 165 105 ] + suit_edge [ 105 165 ] + suit_edge [ 165 104 ] + suit_edge [ 104 165 ] + suit_edge [ 166 110 ] + suit_edge [ 110 166 ] + suit_edge [ 166 111 ] + suit_edge [ 111 166 ] + battle_cell [ 20 20 280 370 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_keyboard_10x40" ] + pos [ 260 350 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_full_corner" ] + pos [ 260 390 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ 260 340 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 1.80199 -3.31102 0 ] + nhpr [ -90 0 0 ] + ] + ] + landmark_building "tb20:toon_landmark_BR_B3_DNARoot" [ + code [ "toon_landmark_BR_B3" ] + title [ "Snow Whitening" ] + pos [ 300 365 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign3" ] + color [ 0.780392 0.878431 1 1 ] + pos [ 0 0 1.96624 ] + scale [ 1.1109 1 0.695632 ] + baseline [ + code [ "BR_Aftershock" ] + pos [ 0 0 -2.60512 ] + scale [ 2.40648 1 1.96771 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + ] + baseline [ + code [ "BR_Aftershock" ] + pos [ 0 0 -4.37328 ] + scale [ 2.2335 1 2.26411 ] + kern [ 0.0914122 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + landmark_building "tb24:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Open Fire Chestnut Roasting" ] + pos [ 265 390 0 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.22 0.83 0.83 1 ] + ] + sign [ + code [ "TB_sign2" ] + baseline [ + code [ "mickey" ] + color [ 0.792157 0.258824 0 1 ] + pos [ 0 0 -1.06868 ] + scale [ 1.03941 1 1.57878 ] + kern [ 0.107861 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.494118 0.215686 0.145098 1 ] + pos [ 0 0 -3.07695 ] + scale [ 1 1 2.07772 ] + kern [ 0.0747962 ] + stomp [ 0.0821735 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 300 355 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.59 1 0.92 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.59 1 0.92 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 300 375 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ 300 390 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 11.853 -7.644 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7.93099 -16.363 3.05176e-005 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 290 390 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 250 390 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 1.29602 -3.181 0 ] + nhpr [ 105 0 0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_8_models_char__tbr_hydrant_DNARoot" [ + code [ "interactive_prop_phase_8_models_char__tbr_hydrant" ] + anim [ "tt_a_ara_tbr_hydrant_idleRubNose0" ] + cell_id [ 0 ] + pos [ 264.169 355.234 7.62939e-006 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "3326" [ + vis [ "3326" "3325" "3324" "3323" "3310" "3304" ] + suit_edge [ 110 114 ] + suit_edge [ 114 115 ] + suit_edge [ 115 111 ] + battle_cell [ 20 20 250 370 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 240 350 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 240 395 0 ] + nhpr [ -180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 250 350 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 250 300 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_4way_intersection_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 200 405 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 240 335 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_20x40_15" ] + pos [ 220 395 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ 203.722 405 0 ] + nhpr [ 0 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build5_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_cog_water_tower_DNARoot" [ + code [ "prop_cog_water_tower" ] + pos [ 6.278 -5 0 ] + nhpr [ 0 0 0 ] + scale [ 0.583377 0.583377 0.583377 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 219.3 405 0 ] + nhpr [ 0 0 0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 390 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 405 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 0.25 0.25 0.25 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 335 0 ] + nhpr [ 180 0 0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 224.4 335 0 ] + nhpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ 6.90399 12.315 0 ] + nhpr [ -180 0 0 ] + scale [ 0.577711 0.577711 0.577711 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ 32.758 -2.48799 0 ] + nhpr [ -180 0 0 ] + scale [ 0.749274 0.749274 0.749274 ] + ] + prop "prop_cog_smoke_stack_DNARoot" [ + code [ "prop_cog_smoke_stack" ] + pos [ 61.358 -23.683 0 ] + nhpr [ -180 0 0 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 340 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 350 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 260 350 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build3_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 405 0 ] + nhpr [ 90 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 230 310 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 310 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 240 325 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_suit_build4_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 325 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build4_ur" ] + color [ 0.5 0.5 0.5 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 315 0 ] + nhpr [ -90 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_suit_build5_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 0.92 0.61 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build5_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 310 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build1_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.571 -0.835005 0 ] + nhpr [ 45 0 0 ] + color [ 0.5 0.64 0.85 1 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 5.614 -1.323 0 ] + nhpr [ 75 0 0 ] + color [ 0.59 1 0.92 1 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 8.17898 -2.757 0 ] + nhpr [ 75 0 0 ] + color [ 0.25 0.64 0.91 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 250 300 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_suit_build2_ur" ] + color [ 0.75 0.75 0.75 1 ] + ] + ] + ] + group "props" [ + prop "linktunnel_lawhq_13000_DNARoot" [ + code [ "prop_cog_tunnel" ] + pos [ 205.292 370 -0.414477 ] + nhpr [ -90 0 0 ] + color [ 0.75 0.75 0.75 1 ] + sign [ + color [ 0.752941 0.752941 0.752941 1 ] + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0 0 -0.649009 ] + scale [ 2.08438 1 1.50901 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "suit" ] + color [ 0.752941 0.752941 0.752941 1 ] + pos [ 0 0 -1.81582 ] + scale [ 2.35727 1 1.47138 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "Q" ] + ] + ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 226.921 378.492 -0.500034 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "3327" [ + vis [ "3327" "3324" "3323" "3322" "3321" "3320" "3319" "3318" "3330" "3317" ] + suit_edge [ 74 75 ] + suit_edge [ 75 76 ] + suit_edge [ 76 77 ] + suit_edge [ 77 66 ] + suit_edge [ 73 78 ] + suit_edge [ 78 79 ] + suit_edge [ 79 80 ] + suit_edge [ 132 78 ] + suit_edge [ 78 132 ] + suit_edge [ 132 77 ] + suit_edge [ 77 132 ] + suit_edge [ 159 73 ] + suit_edge [ 73 159 ] + suit_edge [ 159 66 ] + suit_edge [ 66 159 ] + battle_cell [ 20 20 390 295 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 420 310 0 ] + nhpr [ 180 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb19:random_DNARoot" [ + pos [ 370 290 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.27 1 0.85 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_icecube_shoe_h_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 17.952 -3.58403 -1.90735e-006 ] + nhpr [ -90 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 5.25902 -8.38801 0 ] + nhpr [ 90 0 0 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 420 310 0 ] + nhpr [ -90 0 0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ur" ] + pos [ 7.106 -16.607 0 ] + nhpr [ -90 0 0 ] + scale [ 0.813176 0.813176 0.813176 ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 420 280 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.49 0.69 1 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ 410 310 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 0.89 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + landmark_building "tb7:toon_landmark_BR_A1_DNARoot" [ + code [ "toon_landmark_BR_A1" ] + title [ "Used Groundhog Shadows" ] + pos [ 420 305 0 ] + nhpr [ -90 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.59 1 0.92 1 ] + ] + sign [ + code [ "TB_sign1" ] + pos [ 0 0 -3.19582 ] + scale [ 1.3556 1 0.765398 ] + baseline [ + code [ "mickey" ] + color [ 0 0.568627 0.741176 1 ] + scale [ 0.798227 1 2.68885 ] + width [ 19.3021 ] + height [ 19.3021 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -2.71353 ] + scale [ 0.786754 1 2.82027 ] + kern [ 0.0318574 ] + stumble [ 0.0235777 ] + stomp [ -0.162526 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 380 270 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.59 1 0.92 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.34 0.9 0.87 1 ] + ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 370 270 0 ] + nhpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.5 0.64 0.85 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + prop "prop_snow_tree_small_woodbox_ul_DNARoot" [ + code [ "prop_snow_tree_small_woodbox_ul" ] + pos [ 7.90851 -17.1989 -3.63798e-012 ] + nhpr [ -90 0 0 ] + scale [ 0.63084 0.63084 0.63084 ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 1.43444e-005 -1.18021e-005 0 ] + nhpr [ 1.61613e-014 0 0 ] + scale [ 2.28399 2.28399 2.28399 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3328" [ + vis [ "3328" "3306" "3305" "3304" "3303" "3307" "3329" ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 135 100 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 135 80 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 115 80 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 95 80 0 ] + nhpr [ 0 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random_DNARoot" [ + pos [ 135 115 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 135 100 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 120 100 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_BR_sm_curved_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.27 1 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 110 100 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 95 100 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 155 125 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 155 110 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 155 100 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 155 80 0 ] + nhpr [ 180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.69 1 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ -6.99382e-006 -1.70826e-006 0 ] + nhpr [ -1.00179e-005 0 0 ] + scale [ 2.47185 2.47185 2.47185 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 1.298 -7.0169 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 3.688 5.0016 18.5299 ] + nhpr [ -1.00179e-005 0 0 ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 135 80 0 ] + nhpr [ 180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 120 80 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 110 80 0 ] + nhpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.63 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 10 -20 0 ] + nhpr [ -180 0 0 ] + scale [ 2.29573 2.29573 2.29573 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "3329" [ + vis [ "3329" "3328" ] + group "streets" [ + street "street_BR_pond_DNARoot" [ + code [ "street_BR_pond" ] + pos [ 45 90 0 ] + nhpr [ -90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random_DNARoot" [ + pos [ 230 160 0 ] + nhpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 95 110 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.59 1 0.92 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb15:random_DNARoot" [ + pos [ 95 80 0 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + ] + group "props" [ + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 22.2722 20.8878 0 ] + nhpr [ 0 0 0 ] + scale [ 1.72673 1.72673 1.72673 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 53.7876 46.8419 0 ] + nhpr [ 0 0 0 ] + scale [ 1.52413 1.52413 1.52413 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 74.3929 64.9879 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 7.20953 53.5139 0 ] + nhpr [ 0 0 0 ] + scale [ 0.829605 0.829605 0.829605 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 45 61.7265 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 18.5322 81.2408 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 0 90 0 ] + nhpr [ 0 0 0 ] + scale [ 1.10456 1.10456 1.10456 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 15 120 0 ] + nhpr [ 45 0 0 ] + scale [ 4.4714 4.4714 4.4714 ] + ] + prop "prop_ski_flat_DNARoot" [ + code [ "prop_ski_flat" ] + pos [ 21.2826 123.402 7.42501 ] + nhpr [ 45 0 0 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 50.6973 129.908 0.00050354 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 72.5537 124.292 0 ] + nhpr [ 0 0 0 ] + scale [ 1.323 1.323 1.323 ] + ] + prop "prop_snowman_flat_DNARoot" [ + code [ "prop_snowman_flat" ] + pos [ 93.2215 112.769 3.05176e-005 ] + nhpr [ -45 0 0 ] + ] + prop "prop_skates_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 91.401 69.5612 -3.8147e-006 ] + nhpr [ -120 0 0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ -24.5343 118.233 0 ] + nhpr [ -15 0 0 ] + scale [ 1.89312 1.89312 1.89312 ] + ] + prop "prop_snow_tree_large_ur_DNARoot" [ + code [ "prop_snow_tree_large_ur" ] + pos [ 12.3396 132.442 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snow_tree_large_ul_DNARoot" [ + code [ "prop_snow_tree_large_ul" ] + pos [ 4.6019 119.989 0 ] + nhpr [ 0 0 0 ] + scale [ 0.705795 0.705795 0.705795 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 45 117.533 0 ] + nhpr [ 0 0 0 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 5 80 0 ] + nhpr [ -90 0 0 ] + ] + ] + node "fishing_pond_2" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 22.78 93.52 0.025 ] + nhpr [ -94 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 54.1624 105.511 0.535538 ] + nhpr [ 150 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 35 105 0.625626 ] + nhpr [ -150 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 35 75 0.177811 ] + nhpr [ -30 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 54.17 75.405 0.141113 ] + nhpr [ 30 0 0 ] + ] + ] + ] + visgroup "3330" [ + vis [ "3330" "3327" "3324" "3323" "3322" "3321" "3320" "3319" "3318" ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 400 390 0 ] + nhpr [ 90 0 0 ] + texture [ "street_street_BR_tex" ] + texture [ "street_sidewalk_BR_tex" ] + texture [ "street_curb_BR_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random_DNARoot" [ + pos [ 400 415 0 ] + nhpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_sm_curved_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_BR_porthole_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 17.629 -13.937 0 ] + nhpr [ 30 0 0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 13.585 -8.39598 0 ] + nhpr [ 45 0 0 ] + scale [ 3.05051 3.05051 3.05051 ] + ] + prop "prop_snow_tree_small_ur_DNARoot" [ + code [ "prop_snow_tree_small_ur" ] + pos [ 5.74602 -5.709 0 ] + nhpr [ 90 0 0 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ -8.57198 -6.174 0 ] + nhpr [ 75 0 0 ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 400 430 0 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_BR_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.16 0.67 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "tb17:random_DNARoot" [ + pos [ 390 430 0 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.24 0.76 0.89 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 375 430 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.14 0.42 0.85 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 360 430 0 ] + nhpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 360 415 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_pile_quarter_DNARoot" [ + code [ "prop_snow_pile_quarter" ] + pos [ 15 1.17217e-005 0 ] + nhpr [ -90 0 0 ] + scale [ 3.56638 3.56638 3.56638 ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 7.36 -14.45 0 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 360 405 0 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "prop_snow_tree_small_ul_DNARoot" [ + code [ "prop_snow_tree_small_ul" ] + pos [ 4.99994 -4.99994 0 ] + nhpr [ -90 0 0 ] + ] + ] + flat_building "tb11:random_DNARoot" [ + pos [ 360 390 0 ] + nhpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.63 1 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + prop "BR_potbelly_stove_DNARoot" [ + code [ "BR_potbelly_stove" ] + pos [ 6.12102 -3.07799 0.000267029 ] + nhpr [ 60 0 0 ] + ] + prop "prop_snow_pile_full_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ 13.295 -8.43797 -0.000534058 ] + nhpr [ -60 0 0 ] + scale [ 2.13923 2.13923 2.13923 ] + ] + ] + ] + group "props" [ + ] + ] +] diff --git a/ttmodels/src/dna/the_burrrgh_sz.dna b/ttmodels/src/dna/the_burrrgh_sz.dna new file mode 100644 index 00000000..4a3a6f85 --- /dev/null +++ b/ttmodels/src/dna/the_burrrgh_sz.dna @@ -0,0 +1,1414 @@ +group "theBurrrgh" [ + visgroup "3000:safe_zone" [ + vis [ "3000:safe_zone" ] + group "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -120.5 -35 7.49 ] + nhpr [ -70 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -46.0011 -32.263 2.92099 ] + nhpr [ 60 0 0 ] + color [ 0.59 1 0.92 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -54.4225 -15.2784 2.5 ] + nhpr [ 146 0 0 ] + color [ 0.59 1 0.92 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -66.3804 -33.1704 2.5 ] + nhpr [ -40 0 0 ] + color [ 0.59 1 0.92 1 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -70.3812 -16.1536 2.5 ] + nhpr [ -121 0 0 ] + color [ 0.59 1 0.92 1 ] + ] + ] + group "streets" [ + ] + group "buildings" [ + flat_building "sz0:random_DNARoot" [ + pos [ 69.87 -40.77 6.15 ] + nhpr [ -104 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0 0.69 0.69 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.98 0.74 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 67.28 8.18 6.15 ] + nhpr [ -84 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.49 1 1 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.59 1 0.92 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 35.95 -102.69 6.15 ] + nhpr [ -121 0 0 ] + width [ 5 ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -71.9 134.6 6.15 ] + nhpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -71.9 119.7 6.15 ] + nhpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 0.62 0.78 0.9 1 ] + ] + ] + ] + flat_building "sz0:10_10_10_DNARoot" [ + pos [ -62 119.7 6.15 ] + nhpr [ -8 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:10_20_DNARoot" [ + pos [ -12.91 112.32 6.15 ] + nhpr [ 75 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 29.12 81.83 6.15 ] + nhpr [ -48 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 0.23 0.85 0.6 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.59 0.85 0.69 1 ] + count [ 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 19.08 92.98 6.15 ] + nhpr [ -48 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.49 0.89 1 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0 0.69 0.69 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 39.15 70.68 6.15 ] + nhpr [ -48 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 62.76 27.61 6.15 ] + nhpr [ -77 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 84.97 -62.06 6.15 ] + nhpr [ 175 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 32.03 -120.2 6.15 ] + nhpr [ -133 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 47.76 -100.77 6.15 ] + nhpr [ -129 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_BR_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -35.29 -155.48 6.15 ] + nhpr [ -171 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.24 0.76 0.89 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -20.4 -153.65 6.15 ] + nhpr [ -173 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.14 0.42 0.85 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ 52.5 55.8 6.15 ] + nhpr [ -70 0 0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.909804 0.909804 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09 ] + width [ 11.1111 ] + height [ 11.1111 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.603922 0.870588 1 ] + pos [ 0.29 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.22 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "sz0:10_20_DNARoot" [ + pos [ -22.56 114.96 6.15 ] + nhpr [ -15 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_blue_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.49 1 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0 0.87 0.69 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.23 0.71 0.84 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0 0.34 0.58 1 ] + ] + ] + ] + flat_building "sz0:10_20_DNARoot" [ + pos [ -42.26 116.91 6.15 ] + nhpr [ -6 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -50.11 -157.83 6.15 ] + nhpr [ -172 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -64.96 -159.91 6.15 ] + nhpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -16.54 -168.13 6.15 ] + nhpr [ 105 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.5 0.64 0.85 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 14.98 -138.48 6.15 ] + nhpr [ -45 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 42.56 -130.7 6.15 ] + nhpr [ 135 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_bricks_ur" ] + color [ 0.59 1 0.92 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.49 0.89 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.22 0.83 0.83 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.38 0.87 1 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_ice_ur" ] + color [ 1 1 1 1 ] + ] + ] + ] + prop "linktunnel_br_3126_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 160.26 -80.77 -0.62 ] + nhpr [ 90 0 0 ] + sign [ + code [ "tunnel_sign_blue" ] + scale [ 1.6 1 1.6 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.92 ] + scale [ 1.4 1 1.5 ] + width [ 49.7314 ] + height [ 49.7314 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2 ] + nhpr [ 0 0 2 ] + scale [ 0.8 1 0.8 ] + width [ 45.7101 ] + height [ 45.7101 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + pos [ 0 0 1.78 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + ] + ] + prop "linktunnel_br_3233_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -22.77 -253.67 -0.85 ] + nhpr [ 23 0 0 ] + sign [ + code [ "tunnel_sign_blue" ] + scale [ 1.6 1 1.6 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.91 ] + nhpr [ 0 0 2 ] + scale [ 1.5 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.93 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 31.6636 ] + height [ 31.6636 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + pos [ 0 0 1.8 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ 65.03 -60.18 6.15 ] + nhpr [ -105 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.64 0.91 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.23 0.71 0.84 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.38 0.63 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.38 0.87 1 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.41 0.58 0.85 1 ] + ] + ] + ] + landmark_building "tb7:toon_landmark_BR_gag_shop_DNARoot" [ + code [ "toon_landmark_BR_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ 47.5386 -89.3392 6.16664 ] + nhpr [ 60 0 0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.23 0.85 0.6 1 ] + ] + ] + landmark_building "tb8:toon_landmark_hqBR_DNARoot" [ + code [ "toon_landmark_hqBR" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ -94.2041 58.7136 6.16669 ] + nhpr [ -90 0 0 ] + ] + landmark_building "tb9:toon_landmark_BR_clothes_shop_DNARoot" [ + code [ "toon_landmark_BR_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ -127.028 -116.91 6.16666 ] + nhpr [ 130 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0 0.87 0.69 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.5 1 1.5 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "linktunnel_br_3301_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 100.11 152.01 -0.54 ] + nhpr [ 150 0 0 ] + sign [ + code [ "tunnel_sign_blue" ] + pos [ 0 0 -0.830334 ] + scale [ 1.18118 1 1.20103 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0.0633007 0 -0.559566 ] + scale [ 1.68608 1 1.31726 ] + kern [ -0.00178057 ] + stomp [ 0.0262698 ] + width [ 37.081 ] + height [ 37.081 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0.11 0 -1.85129 ] + scale [ 1.04591 1 1.17771 ] + kern [ 0.02 ] + wiggle [ 0.30413 ] + stumble [ 0.004736 ] + stomp [ 0.04 ] + width [ 37.4411 ] + height [ 37.4411 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + ] + baseline [ + pos [ 0 0 1.61849 ] + scale [ 2.8058 1 2.25258 ] + graphic [ + code [ "plutoSZ" ] + ] + ] + ] + ] + ] + group "props" [ + prop "the_burrrgh" [ + code [ "the_burrrgh" ] + pos [ -50 -20 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -13.55 79.14 6 ] + nhpr [ 22 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -4.96 67.04 6 ] + nhpr [ 22 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 38.25 -21.35 6 ] + nhpr [ 22 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -9.7 -113.46 6 ] + nhpr [ 22 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -27.32 -127.71 6 ] + nhpr [ 22 0 0 ] + ] + prop "prop_snowman_DNARoot" [ + code [ "prop_snowman" ] + pos [ 18.19 0.16 6.28 ] + nhpr [ -45 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 30.95 83.01 26.06 ] + nhpr [ -45 0 0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 35.88 -118.24 25.8 ] + nhpr [ -135 0 0 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -22.46 114.83 6.17 ] + nhpr [ -10 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -63.76 121.19 6.17 ] + nhpr [ -10 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 24.24 87.23 6.15 ] + nhpr [ -48 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 68.99 4.81 6.17 ] + nhpr [ -75 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 48.33 61.59 6.15 ] + nhpr [ -47 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 62.95 -68.48 6.15 ] + nhpr [ -105 0 0 ] + scale [ 1.8 1.8 1.8 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 39.9 -111.79 6.15 ] + nhpr [ -130 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 69.35 -44.61 6.15 ] + nhpr [ -104 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ -53.78 -159.02 6.17 ] + nhpr [ -175 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_full" ] + pos [ -26.07 -152.67 6.17 ] + nhpr [ -155 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_snow_pile_half_DNARoot" [ + code [ "prop_snow_pile_half" ] + pos [ 19.25 -136.82 6.15 ] + nhpr [ -160 0 0 ] + scale [ 1.7 1.7 1.7 ] + ] + prop "prop_skates_flat_DNARoot" [ + code [ "prop_skates_flat" ] + pos [ 43.06 -105.08 6.15 ] + nhpr [ -105 0 0 ] + ] + prop "prop_BR_trashcan_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 38.24 -6.78 6.15 ] + nhpr [ 60 0 0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 71.98 14.49 24.15 ] + nhpr [ -75 0 0 ] + color [ 0.49 0.89 1 1 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ -44.29 108.41 6.17 ] + nhpr [ 165 0 0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 20.95 78.52 6.15 ] + nhpr [ 140 0 0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 57.63 10.23 6.15 ] + nhpr [ 100 0 0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 55.2 -60.37 6.15 ] + nhpr [ 70 0 0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ 15.21 -121.98 6.15 ] + nhpr [ 40 0 0 ] + ] + prop "prop_snow_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_snow_tree_large_brickbox_ur" ] + pos [ -46.56 -149.33 6.15 ] + nhpr [ 5 0 0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_v" ] + pos [ 38.49 -101.61 6.17 ] + nhpr [ 5 0 0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_sunglasses" ] + pos [ 35.55 -102.39 6.15 ] + nhpr [ 70 0 0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_ear_protection" ] + pos [ 37.48 -101.76 8.13 ] + nhpr [ 40 0 0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_shoe_h" ] + pos [ 13.15 85.79 6.17 ] + nhpr [ 40 0 0 ] + ] + prop "prop_icecube_shoe_v_DNARoot" [ + code [ "prop_icecube_glove" ] + pos [ 10.86 88.67 6.17 ] + nhpr [ 65 0 0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 64.05 -5.26 6.16 ] + nhpr [ -90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 64.06 -36.54 6.26 ] + nhpr [ 90 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 9.43 -135.37 6.19 ] + nhpr [ -156 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ -19.44 -147.56 6.19 ] + nhpr [ 24 0 0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb11:toon_landmark_BR_pet_shop_DNARoot" [ + code [ "toon_landmark_BR_pet_shop" ] + building_type [ "petshop" ] + title [ "" ] + pos [ -161.461 -2.53207 6.09575 ] + nhpr [ 93 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.59 1 0.92 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.501961 1 1 1 ] + pos [ 0 0 0.0852519 ] + scale [ 1.31814 1 3.0045 ] + width [ 13.5458 ] + height [ 13.5458 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ 11.2916 92.378 6.18851 ] + nhpr [ 150 0 0 ] + ] + prop "neighborhood_sign_lawBotHQ_DNARoot" [ + code [ "neighborhood_sign_lawBotHQ" ] + pos [ -11.2839 104.749 6.17428 ] + nhpr [ -30 0 0 ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ -142.689 36.0939 6.19787 ] + nhpr [ 59.0362 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/toontown_central_2100.dna b/ttmodels/src/dna/toontown_central_2100.dna new file mode 100644 index 00000000..dfd7fc0a --- /dev/null +++ b/ttmodels/src/dna/toontown_central_2100.dna @@ -0,0 +1,14822 @@ +store_suit_point [ 6, STREET_POINT, -130 -155 -0.5 ] +store_suit_point [ 9, STREET_POINT, -130 -165 -0.5 ] +store_suit_point [ 11, STREET_POINT, -115 -155 -0.5 ] +store_suit_point [ 17, STREET_POINT, -210 -155 -0.5 ] +store_suit_point [ 18, STREET_POINT, -225 -155 -0.5 ] +store_suit_point [ 19, STREET_POINT, -225 -140 -0.5 ] +store_suit_point [ 20, STREET_POINT, -235 -140 -0.5 ] +store_suit_point [ 22, STREET_POINT, -235 -165 -0.5 ] +store_suit_point [ 23, STREET_POINT, -210 -165 -0.5 ] +store_suit_point [ 24, STREET_POINT, -225 -115 -0.5 ] +store_suit_point [ 25, STREET_POINT, -237 -115 -0.5 ] +store_suit_point [ 26, STREET_POINT, -250 -115 -0.5 ] +store_suit_point [ 27, STREET_POINT, -250 -125 -0.5 ] +store_suit_point [ 29, STREET_POINT, -235 -125 -0.5 ] +store_suit_point [ 30, FRONT_DOOR_POINT, -238 -94 0, 4 ] +store_suit_point [ 31, STREET_POINT, -290 -115 -0.5 ] +store_suit_point [ 32, STREET_POINT, -290 -125 -0.5 ] +store_suit_point [ 33, STREET_POINT, -315 -115 -0.5 ] +store_suit_point [ 34, STREET_POINT, -315 -140 -0.5 ] +store_suit_point [ 35, STREET_POINT, -305 -140 -0.5 ] +store_suit_point [ 36, STREET_POINT, -305 -125 -0.5 ] +store_suit_point [ 37, STREET_POINT, -315 -162 -0.5 ] +store_suit_point [ 40, STREET_POINT, -305 -200 -0.5 ] +store_suit_point [ 41, STREET_POINT, -305 -162 -0.5 ] +store_suit_point [ 42, FRONT_DOOR_POINT, -327 -162 0, 5 ] +store_suit_point [ 45, STREET_POINT, -290 -225 -0.5 ] +store_suit_point [ 46, STREET_POINT, -290 -215 -0.5 ] +store_suit_point [ 47, STREET_POINT, -305 -215 -0.5 ] +store_suit_point [ 48, FRONT_DOOR_POINT, -312 -246 0, 6 ] +store_suit_point [ 51, STREET_POINT, -265 -225 -0.5 ] +store_suit_point [ 54, STREET_POINT, -257 -215 -0.5 ] +store_suit_point [ 55, FRONT_DOOR_POINT, -253 -251 0, 7 ] +store_suit_point [ 67, STREET_POINT, -129 -215 -0.5 ] +store_suit_point [ 69, STREET_POINT, -135 -225 -0.5 ] +store_suit_point [ 71, STREET_POINT, -125 -215 -0.5 ] +store_suit_point [ 72, STREET_POINT, -150 -225 -0.5 ] +store_suit_point [ 75, FRONT_DOOR_POINT, -133 -194 0, 10 ] +store_suit_point [ 76, STREET_POINT, -135 -277 -0.5 ] +store_suit_point [ 77, STREET_POINT, -135 -285 -0.5 ] +store_suit_point [ 78, STREET_POINT, -110 -285 -0.5 ] +store_suit_point [ 79, STREET_POINT, -110 -275 -0.5 ] +store_suit_point [ 80, STREET_POINT, -125 -275 -0.5 ] +store_suit_point [ 83, FRONT_DOOR_POINT, -146 -277 0, 11 ] +store_suit_point [ 85, STREET_POINT, -50 -285 -0.5 ] +store_suit_point [ 86, STREET_POINT, -40 -285 -0.5 ] +store_suit_point [ 87, STREET_POINT, -40 -275 -0.5 ] +store_suit_point [ 88, STREET_POINT, -50 -275 -0.5 ] +store_suit_point [ 94, FRONT_DOOR_POINT, -50 -264 0, 62 ] +store_suit_point [ 95, STREET_POINT, -25 -285 -0.5 ] +store_suit_point [ 96, STREET_POINT, -25 -300 -0.5 ] +store_suit_point [ 97, STREET_POINT, -15 -300 -0.5 ] +store_suit_point [ 98, STREET_POINT, -15 -275 -0.5 ] +store_suit_point [ 100, STREET_POINT, -25 -353 -0.5 ] +store_suit_point [ 103, FRONT_DOOR_POINT, 6 -351 0, 64 ] +store_suit_point [ 105, STREET_POINT, -15 -353 -0.5 ] +store_suit_point [ 106, STREET_POINT, -15 -370 -0.5 ] +store_suit_point [ 107, STREET_POINT, -15 -395 -0.5 ] +store_suit_point [ 109, STREET_POINT, -40 -395 -0.5 ] +store_suit_point [ 110, STREET_POINT, -23 -395 -0.5 ] +store_suit_point [ 111, STREET_POINT, -25 -385 -0.5 ] +store_suit_point [ 112, STREET_POINT, -40 -385 -0.5 ] +store_suit_point [ 113, STREET_POINT, -25 -370 -0.5 ] +store_suit_point [ 116, FRONT_DOOR_POINT, -23 -415 0, 16 ] +store_suit_point [ 118, STREET_POINT, -70 -385 -0.5 ] +store_suit_point [ 119, STREET_POINT, -70 -395 -0.5 ] +store_suit_point [ 122, STREET_POINT, -85 -350 -0.5 ] +store_suit_point [ 123, STREET_POINT, -95 -350 -0.5 ] +store_suit_point [ 127, STREET_POINT, -85 -330 -0.5 ] +store_suit_point [ 128, STREET_POINT, -85 -325 -0.5 ] +store_suit_point [ 130, STREET_POINT, -130 -325 -0.5 ] +store_suit_point [ 131, STREET_POINT, -130 -335 -0.5 ] +store_suit_point [ 133, STREET_POINT, -95 -335 -0.5 ] +store_suit_point [ 136, FRONT_DOOR_POINT, -114 -314 0, 70 ] +store_suit_point [ 138, STREET_POINT, -155 -325 -0.5 ] +store_suit_point [ 139, STREET_POINT, -155 -350 -0.5 ] +store_suit_point [ 140, STREET_POINT, -145 -350 -0.5 ] +store_suit_point [ 141, STREET_POINT, -145 -335 -0.5 ] +store_suit_point [ 143, FRONT_DOOR_POINT, -166 -325 0, 21 ] +store_suit_point [ 145, STREET_POINT, -145 -397 -0.5 ] +store_suit_point [ 146, STREET_POINT, -145 -402 -0.5 ] +store_suit_point [ 147, STREET_POINT, -145 -430 -0.5 ] +store_suit_point [ 148, STREET_POINT, -155 -430 -0.5 ] +store_suit_point [ 149, STREET_POINT, -155 -402 -0.5 ] +store_suit_point [ 150, STREET_POINT, -155 -397 -0.5 ] +store_suit_point [ 151, FRONT_DOOR_POINT, -134 -402 0, 66 ] +store_suit_point [ 152, FRONT_DOOR_POINT, -166 -397 0, 65 ] +store_suit_point [ 153, STREET_POINT, -155 -455 -0.5 ] +store_suit_point [ 154, STREET_POINT, -130 -455 -0.5 ] +store_suit_point [ 155, STREET_POINT, -130 -445 -0.5 ] +store_suit_point [ 156, STREET_POINT, -145 -445 -0.5 ] +store_suit_point [ 158, FRONT_DOOR_POINT, -160 -475 0, 24 ] +store_suit_point [ 160, STREET_POINT, -117 -455 -0.5 ] +store_suit_point [ 161, STREET_POINT, -90 -455 -0.5 ] +store_suit_point [ 162, STREET_POINT, -90 -445 -0.5 ] +store_suit_point [ 163, STREET_POINT, -117 -445 -0.5 ] +store_suit_point [ 164, FRONT_DOOR_POINT, -117 -466 0, 25 ] +store_suit_point [ 165, STREET_POINT, -71 -445 -0.5 ] +store_suit_point [ 166, STREET_POINT, -65 -445 -0.5 ] +store_suit_point [ 167, STREET_POINT, -65 -470 -0.5 ] +store_suit_point [ 168, STREET_POINT, -75 -455 -0.5 ] +store_suit_point [ 170, STREET_POINT, -75 -470 -0.5 ] +store_suit_point [ 171, FRONT_DOOR_POINT, -71 -434 0, 26 ] +store_suit_point [ 172, STREET_POINT, -75 -510 -0.5 ] +store_suit_point [ 178, STREET_POINT, -65 -510 -0.5 ] +store_suit_point [ 180, STREET_POINT, -75 -585 -0.5 ] +store_suit_point [ 181, STREET_POINT, -100 -585 -0.5 ] +store_suit_point [ 182, STREET_POINT, -100 -595 -0.5 ] +store_suit_point [ 183, STREET_POINT, -73 -595 -0.5 ] +store_suit_point [ 184, STREET_POINT, -65 -595 -0.5 ] +store_suit_point [ 186, FRONT_DOOR_POINT, -73 -626 0, 29 ] +store_suit_point [ 187, STREET_POINT, -117 -585 -0.5 ] +store_suit_point [ 188, STREET_POINT, -140 -585 -0.5 ] +store_suit_point [ 189, STREET_POINT, -140 -595 -0.5 ] +store_suit_point [ 190, STREET_POINT, -117 -595 -0.5 ] +store_suit_point [ 191, FRONT_DOOR_POINT, -123 -564 0, 32 ] +store_suit_point [ 198, STREET_POINT, -205 -585 -0.5 ] +store_suit_point [ 199, STREET_POINT, -205 -560 -0.5 ] +store_suit_point [ 200, STREET_POINT, -215 -560 -0.5 ] +store_suit_point [ 201, STREET_POINT, -215 -595 -0.5 ] +store_suit_point [ 205, FRONT_DOOR_POINT, -213 -626 0, 33 ] +store_suit_point [ 206, STREET_POINT, -205 -530 -0.5 ] +store_suit_point [ 207, STREET_POINT, -215 -530 -0.5 ] +store_suit_point [ 208, STREET_POINT, -215 -518 -0.5 ] +store_suit_point [ 209, STREET_POINT, -205 -518 -0.5 ] +store_suit_point [ 212, STREET_POINT, -205 -490 -0.5 ] +store_suit_point [ 214, STREET_POINT, -215 -450 -0.5 ] +store_suit_point [ 215, STREET_POINT, -215 -490 -0.5 ] +store_suit_point [ 216, FRONT_DOOR_POINT, -184 -491 0, 55 ] +store_suit_point [ 218, FRONT_DOOR_POINT, -236 -518 0, 54 ] +store_suit_point [ 220, STREET_POINT, -205 -450 -0.5 ] +store_suit_point [ 221, STREET_POINT, -205 -440 -0.5 ] +store_suit_point [ 222, STREET_POINT, -205 -410 -0.5 ] +store_suit_point [ 223, STREET_POINT, -215 -410 -0.5 ] +store_suit_point [ 224, STREET_POINT, -215 -440 -0.5 ] +store_suit_point [ 225, FRONT_DOOR_POINT, -226 -440 0, 56 ] +store_suit_point [ 226, STREET_POINT, -205 -370 -0.5 ] +store_suit_point [ 227, STREET_POINT, -215 -370 -0.5 ] +store_suit_point [ 228, STREET_POINT, -205 -362 -0.5 ] +store_suit_point [ 229, STREET_POINT, -215 -362 -0.5 ] +store_suit_point [ 230, STREET_POINT, -205 -345 -0.5 ] +store_suit_point [ 231, STREET_POINT, -212 -345 -0.5 ] +store_suit_point [ 232, STREET_POINT, -230 -345 -0.5 ] +store_suit_point [ 233, STREET_POINT, -230 -355 -0.5 ] +store_suit_point [ 234, STREET_POINT, -215 -355 -0.5 ] +store_suit_point [ 236, FRONT_DOOR_POINT, -218 -334 0, 38 ] +store_suit_point [ 237, FRONT_DOOR_POINT, -194 -362 0, 57 ] +store_suit_point [ 238, STREET_POINT, -270 -345 -0.5 ] +store_suit_point [ 239, STREET_POINT, -270 -355 -0.5 ] +store_suit_point [ 240, STREET_POINT, -276 -345 -0.5 ] +store_suit_point [ 241, STREET_POINT, -302 -345 -0.5 ] +store_suit_point [ 242, STREET_POINT, -323 -345 -0.5 ] +store_suit_point [ 243, STREET_POINT, -340 -345 -0.5 ] +store_suit_point [ 244, STREET_POINT, -340 -355 -0.5 ] +store_suit_point [ 245, STREET_POINT, -323 -355 -0.5 ] +store_suit_point [ 246, STREET_POINT, -302 -355 -0.5 ] +store_suit_point [ 247, STREET_POINT, -276 -355 -0.5 ] +store_suit_point [ 248, FRONT_DOOR_POINT, -277 -324 0, 39 ] +store_suit_point [ 249, FRONT_DOOR_POINT, -302 -366 0, 59 ] +store_suit_point [ 250, FRONT_DOOR_POINT, -325 -325 0, 69 ] +store_suit_point [ 251, STREET_POINT, -365 -345 -0.5 ] +store_suit_point [ 252, STREET_POINT, -365 -351 -0.5 ] +store_suit_point [ 253, STREET_POINT, -365 -355 -0.5 ] +store_suit_point [ 254, FRONT_DOOR_POINT, -377 -351 0, 43 ] +store_suit_point [ 261, STREET_POINT, -170 -155 -0.5 ] +store_suit_point [ 262, STREET_POINT, -170 -165 -0.5 ] +store_suit_point [ 272, STREET_POINT, -305 -180 -0.5 ] +store_suit_point [ 331, STREET_POINT, -110 -325 -0.5 ] +store_suit_point [ 332, STREET_POINT, -110 -335 -0.5 ] +store_suit_point [ 338, STREET_POINT, -155 -390 -0.5 ] +store_suit_point [ 339, STREET_POINT, -145 -390 -0.5 ] +store_suit_point [ 379, STREET_POINT, -310 -345 -0.5 ] +store_suit_point [ 380, STREET_POINT, -310 -355 -0.5 ] +store_suit_point [ 382, STREET_POINT, -180 -595 -0.5 ] +store_suit_point [ 383, STREET_POINT, -180 -585 -0.5 ] +store_suit_point [ 384, STREET_POINT, -147 -595 -0.5 ] +store_suit_point [ 385, STREET_POINT, -147 -585 -0.5 ] +store_suit_point [ 386, STREET_POINT, -95 -370 -0.5 ] +store_suit_point [ 387, STREET_POINT, -85 -370 -0.5 ] +store_suit_point [ 388, STREET_POINT, -95 -373 -0.5 ] +store_suit_point [ 389, STREET_POINT, -85 -373 -0.5 ] +store_suit_point [ 390, STREET_POINT, -85 -385 -0.5 ] +store_suit_point [ 391, STREET_POINT, -90 -395 -0.5 ] +store_suit_point [ 392, STREET_POINT, -95 -395 -0.5 ] +store_suit_point [ 393, FRONT_DOOR_POINT, -106 -373 0, 18 ] +store_suit_point [ 394, FRONT_DOOR_POINT, -88 -406 0, 17 ] +store_suit_point [ 396, STREET_POINT, -25 -350 -0.5 ] +store_suit_point [ 397, STREET_POINT, -15 -350 -0.5 ] +store_suit_point [ 401, STREET_POINT, -70 -285 -0.5 ] +store_suit_point [ 402, STREET_POINT, -70 -275 -0.5 ] +store_suit_point [ 403, FRONT_DOOR_POINT, -67 -296 0, 63 ] +store_suit_point [ 404, STREET_POINT, -125 -260 -0.5 ] +store_suit_point [ 405, STREET_POINT, -135 -260 -0.5 ] +store_suit_point [ 406, STREET_POINT, -125 -240 -0.5 ] +store_suit_point [ 407, STREET_POINT, -135 -240 -0.5 ] +store_suit_point [ 408, STREET_POINT, -170 -225 -0.5 ] +store_suit_point [ 409, STREET_POINT, -150 -215 -0.5 ] +store_suit_point [ 410, STREET_POINT, -170 -215 -0.5 ] +store_suit_point [ 412, STREET_POINT, -195 -225 -0.5 ] +store_suit_point [ 413, STREET_POINT, -203 -215 -0.5 ] +store_suit_point [ 416, FRONT_DOOR_POINT, -195 -250 0, 60 ] +store_suit_point [ 418, STREET_POINT, -315 -200 -0.5 ] +store_suit_point [ 419, STREET_POINT, -315 -180 -0.5 ] +store_suit_point [ 420, STREET_POINT, -105 -115 -0.5 ] +store_suit_point [ 421, STREET_POINT, -115 -115 -0.5 ] +store_suit_point [ 422, FRONT_DOOR_POINT, -135 -115 0, 44 ] +store_suit_point [ 423, STREET_POINT, -105 -140 -0.5 ] +store_suit_point [ 424, STREET_POINT, -115 -140 -0.5 ] +store_suit_point [ 425, STREET_POINT, -105 -165 -0.5 ] +store_suit_point [ 426, STREET_POINT, -153 -165 -0.5 ] +store_suit_point [ 427, STREET_POINT, -153 -155 -0.5 ] +store_suit_point [ 428, FRONT_DOOR_POINT, -153 -176 0, 2 ] +store_suit_point [ 429, FRONT_DOOR_POINT, -168 -144 0, 1 ] +store_suit_point [ 430, STREET_POINT, -75 -535 -0.5 ] +store_suit_point [ 431, STREET_POINT, -75 -560 -0.5 ] +store_suit_point [ 433, STREET_POINT, -65 -535 -0.5 ] +store_suit_point [ 434, FRONT_DOOR_POINT, -43 -535 0, 61 ] +store_suit_point [ 435, FRONT_DOOR_POINT, -96 -538 0, 67 ] +store_suit_point [ 436, STREET_POINT, -65 -560 -0.5 ] +store_suit_point [ 437, FRONT_DOOR_POINT, -148 -616 0, 52 ] +store_suit_point [ 438, STREET_POINT, -315 -225 -0.5 ] +store_suit_point [ 439, STREET_POINT, -114 -335 -0.5 ] +store_suit_point [ 440, STREET_POINT, -114 -325 -0.5 ] +store_suit_point [ 441, SIDE_DOOR_POINT, -90 -130 0, 44 ] +store_suit_point [ 443, SIDE_DOOR_POINT, -125 -180 0, 2 ] +store_suit_point [ 445, SIDE_DOOR_POINT, -190 -140 0, 1 ] +store_suit_point [ 446, SIDE_DOOR_POINT, -238 -180 0, 3 ] +store_suit_point [ 448, SIDE_DOOR_POINT, -330 -132 0, 5 ] +store_suit_point [ 449, SIDE_DOOR_POINT, -339 -208 0, 6 ] +store_suit_point [ 450, SIDE_DOOR_POINT, -270 -255 0, 7 ] +store_suit_point [ 451, SIDE_DOOR_POINT, -160 -240 0, 60 ] +store_suit_point [ 453, SIDE_DOOR_POINT, -91 -233 0, 10 ] +store_suit_point [ 454, SIDE_DOOR_POINT, -150 -247 0, 11 ] +store_suit_point [ 455, SIDE_DOOR_POINT, -122 -300 0, 63 ] +store_suit_point [ 456, SIDE_DOOR_POINT, -33 -260 0, 62 ] +store_suit_point [ 459, SIDE_DOOR_POINT, -60 -410 0, 16 ] +store_suit_point [ 460, SIDE_DOOR_POINT, -102 -410 0, 17 ] +store_suit_point [ 461, SIDE_DOOR_POINT, -110 -355 0, 18 ] +store_suit_point [ 463, SIDE_DOOR_POINT, -93 -310 0, 70 ] +store_suit_point [ 464, SIDE_DOOR_POINT, -170 -358 0, 21 ] +store_suit_point [ 466, SIDE_DOOR_POINT, -179 -450 0, 24 ] +store_suit_point [ 467, SIDE_DOOR_POINT, -97 -470 0, 25 ] +store_suit_point [ 468, SIDE_DOOR_POINT, -98 -430 0, 26 ] +store_suit_point [ 469, SIDE_DOOR_POINT, -41 -517 0, 61 ] +store_suit_point [ 470, SIDE_DOOR_POINT, -99 -503 0, 67 ] +store_suit_point [ 471, SIDE_DOOR_POINT, -55 -629 0, 29 ] +store_suit_point [ 472, SIDE_DOOR_POINT, -105 -561 0, 32 ] +store_suit_point [ 473, SIDE_DOOR_POINT, -120 -619 0, 52 ] +store_suit_point [ 475, SIDE_DOOR_POINT, -249 -588 0, 54 ] +store_suit_point [ 477, SIDE_DOOR_POINT, -190 -452 0, 55 ] +store_suit_point [ 478, SIDE_DOOR_POINT, -230 -455 0, 56 ] +store_suit_point [ 479, SIDE_DOOR_POINT, -190 -417 0, 57 ] +store_suit_point [ 480, SIDE_DOOR_POINT, -238 -330 0, 38 ] +store_suit_point [ 482, SIDE_DOOR_POINT, -263 -321 0, 39 ] +store_suit_point [ 483, SIDE_DOOR_POINT, -333 -370 0, 59 ] +store_suit_point [ 484, SIDE_DOOR_POINT, -355 -330 0, 69 ] +store_suit_point [ 485, SIDE_DOOR_POINT, -380 -337 0, 43 ] +store_suit_point [ 486, SIDE_DOOR_POINT, -130 -357 0, 66 ] +store_suit_point [ 487, FRONT_DOOR_POINT, -260 -176 0, 3 ] +store_suit_point [ 489, SIDE_DOOR_POINT, 0 -300 0, 64 ] +store_suit_point [ 490, SIDE_DOOR_POINT, -170 -420 0, 65 ] +store_suit_point [ 491, SIDE_DOOR_POINT, -144 -561 0, 53 ] +store_suit_point [ 494, STREET_POINT, -265 -240 -0.5 ] +store_suit_point [ 495, STREET_POINT, -250 -240 -0.5 ] +store_suit_point [ 498, STREET_POINT, -210 -240 -0.5 ] +store_suit_point [ 500, STREET_POINT, -195 -240 -0.5 ] +store_suit_point [ 501, FRONT_DOOR_POINT, -207 -188 0, 49 ] +store_suit_point [ 502, SIDE_DOOR_POINT, -195 -185 0, 49 ] +store_suit_point [ 503, STREET_POINT, -203 -230 -0.5 ] +store_suit_point [ 504, STREET_POINT, -210 -230 -0.5 ] +store_suit_point [ 505, STREET_POINT, -250 -231 -0.5 ] +store_suit_point [ 506, STREET_POINT, -257 -231 -0.5 ] +store_suit_point [ 507, SIDE_DOOR_POINT, -218 -90 0, 4 ] +store_suit_point [ 508, FRONT_DOOR_POINT, -153 -537 0, 53 ] +store_suit_point [ 509, SIDE_DOOR_POINT, -180 -629 0, 33 ] +group "toontownCentral" [ + visgroup "2101" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2132" "2144" "2155" ] + suit_edge [ 11 6 ] + suit_edge [ 9 425 ] + suit_edge [ 425 423 ] + suit_edge [ 424 11 ] + suit_edge [ 443 9 ] + suit_edge [ 9 443 ] + suit_edge [ 443 6 ] + suit_edge [ 6 443 ] + battle_cell [ 20 20 -110 -160 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -90 -140 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ -120 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.94 0.71 0.66 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ -24 -8 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -90 -140 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -90 -160 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -90 -160 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -90 -170 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -90 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -100 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -110 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 0 10 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ -120 -190 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.75 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.75 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -95.6682 -155.582 3.8147e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2102" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2132" "2144" "2155" ] + suit_edge [ 262 426 ] + suit_edge [ 426 9 ] + suit_edge [ 6 427 ] + suit_edge [ 427 261 ] + suit_edge [ 426 428 ] + suit_edge [ 428 426 ] + suit_edge [ 427 428 ] + suit_edge [ 428 427 ] + suit_edge [ 261 429 ] + suit_edge [ 429 261 ] + suit_edge [ 262 429 ] + suit_edge [ 429 262 ] + battle_cell [ 20 20 -145 -160 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ -130 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ -160 -180 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 12 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + landmark_building "tb1:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "All Smiles Tooth Repair" ] + pos [ -180 -140 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.690196 0.00784314 0.0941176 1 ] + pos [ 0.05 0 0.71 ] + scale [ 1.3 1 1.2 ] + width [ 276.707 ] + height [ 276.707 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.58 ] + scale [ 1.2 1 1.2 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_dentist_DNARoot" [ + code [ "prop_dentist" ] + pos [ 12.6 -2.98 11 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ -155 -140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + ] + ] + ] + landmark_building "tb2:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "" ] + pos [ -145 -180 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_post_office_sign_DNARoot" [ + code [ "prop_post_office_sign" ] + pos [ 7.79 -2.96 11.07 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ -140 -140 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -170 -180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -143.024 -173.687 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "2103" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2108" "2132" "2144" "2155" ] + suit_edge [ 17 18 ] + suit_edge [ 18 19 ] + suit_edge [ 20 22 ] + suit_edge [ 22 23 ] + suit_edge [ 446 22 ] + suit_edge [ 22 446 ] + suit_edge [ 446 18 ] + suit_edge [ 18 446 ] + suit_edge [ 20 487 ] + suit_edge [ 487 20 ] + suit_edge [ 19 487 ] + suit_edge [ 487 19 ] + battle_cell [ 20 20 -225 -160 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -210 -180 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ -250 -140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random20_DNARoot" [ + pos [ -270 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 14.66 -8.44 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 9.75 -28.23 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -210 -180 0 ] + nhpr [ -180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 1 -7.27 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ -225.5 -180 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 41.5 -13 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb3:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "One-Liner Miners" ] + pos [ -250 -180 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_TT_safe_DNARoot" [ + code [ "prop_TT_safe" ] + pos [ 7 -27 0 ] + nhpr [ -105 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 7 -33 0 ] + nhpr [ -90 0 -0 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.62 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.46 ] + scale [ 1.7 1 1.7 ] + kern [ 0.148191 ] + wiggle [ 3.52817 ] + stumble [ 0.049758 ] + stomp [ 0.03343 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.84 ] + scale [ 1.4 1 1.3 ] + kern [ 0.163083 ] + wiggle [ 3.8979 ] + stomp [ -0.001083 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -226.56 -174.344 1.14441e-005 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "2104" [ + vis [ "2103" "2104" "2105" "2106" "2107" "2144" "2102" "2101" "2108" "2155" ] + suit_edge [ 19 24 ] + suit_edge [ 24 25 ] + suit_edge [ 25 26 ] + suit_edge [ 29 20 ] + suit_edge [ 25 30 ] + suit_edge [ 30 25 ] + suit_edge [ 27 29 ] + suit_edge [ 29 30 ] + suit_edge [ 30 29 ] + suit_edge [ 24 507 ] + suit_edge [ 507 24 ] + suit_edge [ 29 507 ] + suit_edge [ 507 29 ] + battle_cell [ 20 20 -230 -125 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -250 -100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -200 -90 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -260 -90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -220 -90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ -200 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb4:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Hogwash & Dry" ] + pos [ -250 -90 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 5 -44.9989 0 ] + nhpr [ -180 0 -0 ] + ] + sign [ + code [ "tunnel_sign_green" ] + color [ 1 0.88 0.56 1 ] + scale [ 1.1 1 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.58 ] + scale [ 1.6 1 1.6 ] + wiggle [ 1.49805 ] + width [ 35.3382 ] + height [ 35.3382 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.79 ] + scale [ 1.2 1 1.3 ] + wiggle [ 0.45961 ] + stumble [ -0.01362 ] + width [ 24.4051 ] + height [ 24.4051 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.78 ] + scale [ 1.6 1 1.5 ] + kern [ 0.110032 ] + width [ 13.2508 ] + height [ 13.2508 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 21.5237 -3.61752 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_1_DNARoot" [ + code [ "cloth_1" ] + pos [ 21.2142 -4.21594 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 2.53918 -3.81876 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 1.76111 -3.92044 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -210 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 4.99998 -1.99998 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -210 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 0.391785 -9.42938 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -200 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_c" ] + pos [ 9.48856 -2.76961 0 ] + nhpr [ -0 0 -0 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 9.30518 -3.04431 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -200 -130 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -225 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 15.3961 -3.4534 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2105" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2108" "2144" "2155" ] + suit_edge [ 26 31 ] + suit_edge [ 32 27 ] + battle_cell [ 20 20 -265 -120 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -250 -100 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ -260 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 6.97998 -14.504 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -280 -100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 14.72 6.32 17.77 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + pos [ 0 0 0.39 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.08 ] + scale [ 0.8 1 1 ] + flags [ "c" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.18 0 0.9 ] + scale [ 0.6 1 0.6 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -295 -100 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -260 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.32 0.54 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.89 0.95 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -330 -125 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -283.922 -133.868 2.28882e-005 ] + nhpr [ 170.104 0 -0 ] + ] + ] + visgroup "2106" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2108" "2109" "2144" "2155" ] + suit_edge [ 31 33 ] + suit_edge [ 33 34 ] + suit_edge [ 35 36 ] + suit_edge [ 36 32 ] + suit_edge [ 448 34 ] + suit_edge [ 34 448 ] + suit_edge [ 448 35 ] + suit_edge [ 35 448 ] + battle_cell [ 20 20 -310 -120 -0.5 ] + group "streets" [ + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -340 -90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -340 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -340 -130 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random20_DNARoot" [ + pos [ -340 -125 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 20 -5 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 6 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -330 -140 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 1.54 4.33 19.41 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -340 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.69 0.51 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -340 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -330 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 7 -3.99951 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.52259 1.52259 1.52259 ] + ] + prop "art_store_DNARoot" [ + code [ "art_store" ] + pos [ 6.82608 -4.96704 2.49765 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -315 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -305 -100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 11.63 2.28187 18.95 ] + nhpr [ -0 0 -0 ] + color [ 1 0.88 0.8 1 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 10 -35 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb5:random_DNARoot" [ + pos [ -305 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -330 -140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -309.922 -106.217 3.43323e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2107" [ + vis [ "2101" "2102" "2103" "2104" "2105" "2106" "2107" "2108" "2109" "2110" "2132" "2133" "2134" "2144" "2145" "2155" ] + suit_edge [ 34 37 ] + suit_edge [ 41 35 ] + suit_edge [ 37 42 ] + suit_edge [ 42 41 ] + suit_edge [ 42 37 ] + suit_edge [ 272 41 ] + suit_edge [ 37 419 ] + battle_cell [ 20 20 -310 -155 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -330 -140 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb5:random20_DNARoot" [ + pos [ -330 -180 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -330 -155 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.94 0.71 0.66 1 ] + ] + ] + prop "prop_post_sign_DNARoot" [ + code [ "prop_post_sign" ] + pos [ 5 -5 0 ] + nhpr [ 90 0 -0 ] + ] + ] + anim_building "tb5:animated_building_phase_5_models_char__ttc_B2_DNARoot" [ + code [ "animated_building_phase_5_models_char__ttc_B2" ] + building_type [ "animbldg" ] + title [ "Toontown Sign Factory" ] + anim [ "tt_a_ara_ttc_B2_dance" ] + pos [ -331.374 -162 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.87 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.709804 0.00784314 0.0941176 1 ] + pos [ 0 0 0.61 ] + scale [ 1.5 1 1.2 ] + kern [ 0.122954 ] + wiggle [ 4.88131 ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.607843 0 1 ] + pos [ 0 0 -0.67 ] + kern [ 0.220758 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -325.295 -144.489 7.62939e-006 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "2108" [ + vis [ "2107" "2108" "2109" "2134" "2133" "2145" "2110" "2146" "2104" "2105" "2106" "2103" "2155" ] + suit_edge [ 46 47 ] + suit_edge [ 47 40 ] + suit_edge [ 48 47 ] + suit_edge [ 47 48 ] + suit_edge [ 438 48 ] + suit_edge [ 48 438 ] + suit_edge [ 438 45 ] + suit_edge [ 418 438 ] + suit_edge [ 449 418 ] + suit_edge [ 418 449 ] + suit_edge [ 449 40 ] + suit_edge [ 40 449 ] + battle_cell [ 20 20 -310 -215 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -290 -240 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -340 -240 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -290 -250 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -340 -250 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb6:random20_DNARoot" [ + pos [ -340 -225 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -290 -250 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.419608 0.266667 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6 -44 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -340 -240 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 3 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 7.99989 -2.99973 0 ] + nhpr [ -0 0 -0 ] + ] + prop "music_inst_DNARoot" [ + code [ "music_inst" ] + pos [ 7.67603 -2.97015 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11.858 2.30066 19.66 ] + nhpr [ 90 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -325 -250 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb6:random20_DNARoot" [ + pos [ -340 -215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.81 0.61 0.48 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.944882 0.711441 0.559518 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 1.88 0.13 21.54 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 0.25 0.25 0.25 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.623529 0 0 1 ] + pos [ 0 0 1.16 ] + nhpr [ -0 0 -5 ] + scale [ 0.9 1 0.9 ] + width [ 28.6 ] + height [ 28.6 ] + flags [ "d" ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 1 1 ] + nhpr [ -0 0 -4 ] + scale [ 1.1 1 1.1 ] + width [ 34.1705 ] + height [ 34.1705 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 1 1 ] + pos [ 0 0 -0.91 ] + nhpr [ -0 0 -4 ] + scale [ 1.1 1 1.1 ] + width [ 18.9858 ] + height [ 18.9858 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -2.15 ] + nhpr [ -0 0 -4 ] + scale [ 0.9 1 0.9 ] + width [ 44.48 ] + height [ 44.48 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 0.320007 -7.48996 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ -340 -250 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ -340 -200 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + landmark_building "tb6:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "" ] + pos [ -300 -250 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.745098 0.792157 0.552941 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 12 -10 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.1 1.1 1.1 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -326.337 -229.253 3.43323e-005 ] + nhpr [ 120 0 -0 ] + ] + ] + visgroup "2109" [ + vis [ "2106" "2107" "2108" "2109" "2110" "2133" "2134" "2145" "2146" "2155" "2105" "2114" "2113" "2147" "2112" "2111" ] + suit_edge [ 54 46 ] + suit_edge [ 45 51 ] + suit_edge [ 51 55 ] + suit_edge [ 55 54 ] + suit_edge [ 55 51 ] + suit_edge [ 54 55 ] + suit_edge [ 450 51 ] + suit_edge [ 51 450 ] + suit_edge [ 450 54 ] + suit_edge [ 54 450 ] + suit_edge [ 51 494 ] + suit_edge [ 494 495 ] + suit_edge [ 505 506 ] + suit_edge [ 506 54 ] + battle_cell [ 20 20 -275 -220 -0.5 ] + group "streets" [ + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ -290 -255 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb7:random20_DNARoot" [ + pos [ -290 -200 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 15.9999 -7 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.824743 0.824743 0.824743 ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -280 -240 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + ] + ] + flat_building "tb7:random20_DNARoot" [ + pos [ -260 -255 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.01 5.17 19.26 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.89 0.49 1 ] + ] + ] + flat_building "tb49:random20_DNARoot" [ + pos [ -280 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_bricks_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.866667 0.376471 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 1 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.14 1.92 20.69 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ -280 -200 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb7:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Jumping Beans" ] + pos [ -245 -255 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.76 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.317647 0.466667 1 ] + pos [ 0.12 0 -0.29 ] + scale [ 1.3 1 1.7 ] + kern [ 0.06932 ] + wiggle [ 6.41346 ] + stumble [ 0.017673 ] + stomp [ 0.064787 ] + flags [ "b" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + flat_building "tb6:random_DNARoot" [ + pos [ -290 -240 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.917 0.592 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.14 0.53 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + ] + ] + flat_building "tb7:random_DNARoot" [ + pos [ -280 -255 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 19.9998 -5.99992 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.879202 0.879202 0.879202 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -287.008 -234.496 7.62939e-006 ] + nhpr [ 165 0 0 ] + ] + ] + visgroup "2110" [ + vis [ "2108" "2109" "2110" "2111" "2112" "2113" "2133" "2134" "2107" "2145" "2146" "2147" "2155" "2114" ] + suit_edge [ 69 75 ] + suit_edge [ 71 67 ] + suit_edge [ 72 69 ] + suit_edge [ 75 69 ] + suit_edge [ 75 67 ] + suit_edge [ 67 75 ] + suit_edge [ 406 71 ] + suit_edge [ 69 407 ] + suit_edge [ 67 409 ] + suit_edge [ 453 406 ] + suit_edge [ 406 453 ] + suit_edge [ 453 407 ] + suit_edge [ 407 453 ] + battle_cell [ 20 20 -130 -220 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -150 -200 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -150 -190 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -90 -190 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -90 -210 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -100 -230 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -90 -230 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb10:random20_DNARoot" [ + pos [ -150 -190 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -120 -190 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -90 -225 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 0.94 0.35 0.35 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.94 0.35 0.35 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb10:random20_DNARoot" [ + pos [ -90 -200 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.32 0.54 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 7.00002 -3.00001 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.18114 1.18114 1.18114 ] + ] + prop "toys_DNARoot" [ + code [ "toys" ] + pos [ 5.41241 -3.20669 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -90 -215 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -90 -190 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb10:random_DNARoot" [ + pos [ -150 -200 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + landmark_building "tb10:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Dr. Tom Foolery" ] + pos [ -145 -190 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.15 ] + scale [ 1.5 1 1.8 ] + kern [ 0.060969 ] + wiggle [ 5 ] + stumble [ 0.05 ] + stomp [ 0.018506 ] + width [ 25 ] + height [ 25 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 35.4019 -3.30334 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -145.162 -234.8 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -110 -190 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ -103 -226 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2111" [ + vis [ "2111" "2112" "2113" "2114" "2146" "2145" "2110" "2147" "2134" "2133" ] + suit_edge [ 76 77 ] + suit_edge [ 77 78 ] + suit_edge [ 79 80 ] + suit_edge [ 80 83 ] + suit_edge [ 76 83 ] + suit_edge [ 83 76 ] + suit_edge [ 83 80 ] + suit_edge [ 80 404 ] + suit_edge [ 405 76 ] + suit_edge [ 455 77 ] + suit_edge [ 77 455 ] + suit_edge [ 455 80 ] + suit_edge [ 80 455 ] + battle_cell [ 20 20 -130 -280 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -110 -300 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ -150 -300 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.878431 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.88 0.8 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -150 -270 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 3 ] + ] + ] + ] + flat_building "tb63:random20_DNARoot" [ + pos [ -135 -300 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb63:random20_DNARoot" [ + pos [ -110 -300 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.411765 0.266667 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.701961 0.266667 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.941176 0.709804 0.556863 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 1.7 -7.18 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + color [ 1 0.88 0.8 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7 -33 0 ] + nhpr [ -90 0 -0 ] + ] + ] + landmark_building "tb11:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "" ] + pos [ -150 -285 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + color [ 1 0.88 0.56 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 7.5 -8.4 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.933333 0.588235 0.333333 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -145.494 -263.481 3.8147e-006 ] + nhpr [ 60 0 0 ] + ] + ] + visgroup "2112" [ + vis [ "2112" "2113" "2114" "2110" "2111" "2146" "2147" "2145" "2134" "2133" "2109" "2115" "2148" ] + suit_edge [ 402 79 ] + suit_edge [ 78 401 ] + battle_cell [ 20 20 -90 -280 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -110 -300 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb63:random20_DNARoot" [ + pos [ -90 -300 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb63:random20_DNARoot" [ + pos [ -80 -300 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb62:10_10_DNARoot" [ + pos [ -90 -260 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -93.2397 -264.454 1.14441e-005 ] + nhpr [ -9.7442 0 -0 ] + ] + ] + visgroup "2113" [ + vis [ "2111" "2112" "2113" "2114" "2115" "2146" "2147" "2148" "2116" "2110" "2134" "2133" "2145" "2117" "2118" "2149" "2109" ] + suit_edge [ 86 95 ] + suit_edge [ 95 96 ] + suit_edge [ 97 98 ] + suit_edge [ 98 87 ] + suit_edge [ 456 87 ] + suit_edge [ 87 456 ] + suit_edge [ 456 86 ] + suit_edge [ 86 456 ] + suit_edge [ 489 97 ] + suit_edge [ 97 489 ] + suit_edge [ 96 489 ] + suit_edge [ 489 96 ] + battle_cell [ 20 20 -25 -280 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -40 -260 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb62:random20_DNARoot" [ + pos [ -25 -260 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.07 1.83 19.4 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb62:random20_DNARoot" [ + pos [ -10 -260 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -285 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.0980392 0.588235 0.388235 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7 -31.86 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -260 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 7 -8 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb62:random20_DNARoot" [ + pos [ -40 -260 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.9 0.33 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.71 0.27 1 ] + ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -275 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 5.37 3.36016 17.16 ] + nhpr [ -0 0 -0 ] + color [ 0.24 0.79 0.32 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -5.89063 -294.379 -3.05176e-005 ] + nhpr [ -120 0 0 ] + ] + ] + visgroup "2114" [ + vis [ "2113" "2114" "2115" "2116" "2148" "2147" "2112" "2111" "2146" "2145" "2110" "2134" "2133" "2149" "2117" "2118" "2119" "2120" "2154" ] + suit_edge [ 397 97 ] + suit_edge [ 96 396 ] + battle_cell [ 20 20 -35 -330 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -40 -310 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -40 -300 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -70 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -305 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_bricks_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3.5 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.39 ] + baseline [ + code [ "mickey" ] + color [ 0 0.65098 0 1 ] + pos [ -0.1 0 -1.06 ] + scale [ 0.9 1 1.1 ] + kern [ 0.062709 ] + flags [ "c" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.65098 0 1 ] + pos [ 0 0 0.94 ] + scale [ 0.8 1 0.6 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -325 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb70:random20_DNARoot" [ + pos [ -70 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 8.99997 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2923 1.2923 1.2923 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 9.02122 -1.76929 0.846027 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb64:random_DNARoot" [ + pos [ 0 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 0 -295 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + ] + flat_building "tb63:random20_DNARoot" [ + pos [ -40 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.94 0.35 0.35 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + ] + ] + flat_building "tb70:random20_DNARoot" [ + pos [ -50 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 6 -2 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 2 -2 0 ] + nhpr [ 180 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -39.3156 -345.371 -3.8147e-006 ] + nhpr [ -180 0 0 ] + ] + ] + visgroup "2115" [ + vis [ "2113" "2114" "2115" "2116" "2117" "2148" "2147" "2149" "2118" "2119" "2154" ] + suit_edge [ 107 106 ] + suit_edge [ 109 110 ] + suit_edge [ 110 107 ] + suit_edge [ 111 112 ] + suit_edge [ 113 111 ] + suit_edge [ 111 116 ] + suit_edge [ 116 111 ] + suit_edge [ 110 116 ] + suit_edge [ 116 110 ] + battle_cell [ 20 20 -19.9999 -385 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 0 -370 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 10 -370 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -9.99999 -420 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 10 -420 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ 0 -420 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 10 -365 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -20 -45 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb64:random20_DNARoot" [ + pos [ 10 -385 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 3.91 1.64 18.99 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 10 -400 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ur_DNARoot" [ + code [ "prop_tree_fat_brickbox_ur" ] + pos [ 2.00009 -11 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ 10 -420 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 45 -47 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Weird Beard's Disguise Shop" ] + pos [ -10 -420 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.4 ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.96 ] + nhpr [ -0 0 2 ] + scale [ 0.8 1 1.2 ] + kern [ 0.086221 ] + wiggle [ 2.16724 ] + stomp [ 0.048925 ] + width [ 23.896 ] + height [ 23.896 ] + flags [ "cd" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.533333 0.533333 1 ] + pos [ 0 0 -0.58 ] + nhpr [ -0 0 2 ] + scale [ 1.3 1 1.3 ] + kern [ 0.198742 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -5.83831 -386.206 3.8147e-006 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "2116" [ + vis [ "2115" "2116" "2117" "2118" "2148" "2149" "2154" "2114" "2119" "2113" ] + suit_edge [ 112 118 ] + suit_edge [ 119 109 ] + suit_edge [ 459 109 ] + suit_edge [ 109 459 ] + suit_edge [ 459 112 ] + suit_edge [ 112 459 ] + suit_edge [ 460 392 ] + suit_edge [ 392 460 ] + suit_edge [ 460 390 ] + suit_edge [ 390 460 ] + battle_cell [ 20 20 -54.9999 -390 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -40 -370 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -70 -350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -50 -360 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -50 -350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ -35 -420 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.3 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -50 -410 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ -5 -5 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + color [ 0.756863 0.729412 0.639216 1 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -50 -420 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb71:toon_landmark_hqTT_DNARoot" [ + code [ "toon_landmark_hqTT" ] + building_type [ "hq" ] + title [ "" ] + pos [ -55 -350 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2117" [ + vis [ "2115" "2116" "2117" "2118" "2154" "2149" "2119" "2148" "2114" "2113" ] + suit_edge [ 386 388 ] + suit_edge [ 389 387 ] + suit_edge [ 390 389 ] + suit_edge [ 118 390 ] + suit_edge [ 391 119 ] + suit_edge [ 392 391 ] + suit_edge [ 388 392 ] + suit_edge [ 388 393 ] + suit_edge [ 393 388 ] + suit_edge [ 389 393 ] + suit_edge [ 393 389 ] + suit_edge [ 391 394 ] + suit_edge [ 394 391 ] + suit_edge [ 390 394 ] + suit_edge [ 394 390 ] + battle_cell [ 20 20 -89.9999 -390 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -70 -410 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb17:random20_DNARoot" [ + pos [ -70 -410 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.243137 0.792157 0.317647 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.843137 0.784314 0.388235 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -110 -410 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 16.7866 -6.00001 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.73 2.6 17.92 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ -110 -395 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.44 0.91 0.63 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -95 -410 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + landmark_building "tb18:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "All That Razz" ] + pos [ -110 -385 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 13 -36 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 0.996078 0.74902 0.686275 1 ] + pos [ 0 0 -0.38 ] + scale [ 1.2 1 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.219608 0.439216 0.439216 1 ] + pos [ 0 0 0.77 ] + scale [ 1.6 1 1.3 ] + kern [ 0.00230901 ] + wiggle [ 3.22556 ] + stumble [ 0.033745 ] + stomp [ 0.014504 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.619608 0.0196078 0.227451 1 ] + pos [ 0 0 -0.22 ] + scale [ 1.5 1 1.1 ] + kern [ 0.447517 ] + wiggle [ 8.49339 ] + stumble [ 0.027211 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Z" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.101961 0.529412 0.784314 1 ] + pos [ 0 0 -0.94 ] + kern [ 0.059731 ] + text [ + letters [ "d" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + landmark_building "tb17:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Silly Stunts" ] + pos [ -80 -410 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.29 0 -0.19 ] + scale [ 1.7 1 1.7 ] + wiggle [ 6.14589 ] + stumble [ 0.083181 ] + stomp [ 0.029973 ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 0 1 ] + pos [ -2.99 0 -0.21 ] + scale [ 1.6 1 1.7 ] + kern [ 0.043421 ] + wiggle [ 1.79686 ] + text [ + letters [ "i" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 0 1 ] + pos [ 3.09 0 -0.39 ] + scale [ 1.7 1 1.7 ] + kern [ 0.114237 ] + wiggle [ 1.50061 ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -105.1 -406.141 7.62939e-006 ] + nhpr [ 97.1931 0 -0 ] + ] + ] + visgroup "2118" [ + vis [ "2116" "2117" "2118" "2119" "2120" "2149" "2154" "2150" "2115" "2114" "2113" "2148" ] + suit_edge [ 122 127 ] + suit_edge [ 127 128 ] + suit_edge [ 133 123 ] + suit_edge [ 332 133 ] + suit_edge [ 128 331 ] + suit_edge [ 463 128 ] + suit_edge [ 128 463 ] + suit_edge [ 463 133 ] + suit_edge [ 133 463 ] + battle_cell [ 20 20 -90 -330 -0.5 ] + group "streets" [ + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ -110 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb70:random20_DNARoot" [ + pos [ -100 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 25 -35 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb70:random20_DNARoot" [ + pos [ -85 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 7 -6 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.801187 0.801187 0.801187 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2119" [ + vis [ "2117" "2118" "2119" "2120" "2121" "2122" "2154" "2149" "2116" "2150" "2115" "2114" "2148" "2129" ] + suit_edge [ 130 138 ] + suit_edge [ 138 139 ] + suit_edge [ 140 141 ] + suit_edge [ 141 131 ] + suit_edge [ 138 143 ] + suit_edge [ 143 138 ] + suit_edge [ 141 143 ] + suit_edge [ 143 141 ] + battle_cell [ 20 20 -145 -330 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -170 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -170 -310 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -170 -300 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb70:random20_DNARoot" [ + pos [ -145 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.82 0.91 0.44 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 6.24 -0.09 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ -170 -320 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ -170 -350 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.98 0.58 0.42 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ -2.99994 -34 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 8.87 -1.05 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb70:random20_DNARoot" [ + pos [ -160 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 4.11537 6.37085 16.72 ] + nhpr [ -0 0.550004 -0 ] + color [ 0.93 0.59 0.33 1 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 6.01 -1.18 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb38:10_10_DNARoot" [ + pos [ -200 -290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.69 0.51 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:10_10_DNARoot" [ + pos [ -190 -290 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:10_10_DNARoot" [ + pos [ -180 -290 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb57:random_DNARoot" [ + pos [ -170 -300 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + landmark_building "tb21:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Paper Airplanes" ] + pos [ -170 -335 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.82 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.13 ] + nhpr [ -0 0 2 ] + scale [ 2 1 1.5 ] + kern [ 0.116953 ] + wiggle [ 3 ] + stumble [ 0.01089 ] + width [ 33.2701 ] + height [ 33.2701 ] + flags [ "d" ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 1.26 ] + scale [ 1.7 1 1.6 ] + kern [ -0.018902 ] + width [ 31.738 ] + height [ 31.738 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.921569 0.00784314 0.0784314 1 ] + pos [ 0 0 -0.87 ] + nhpr [ -0 0 4 ] + scale [ 1 1 0.6 ] + kern [ 0.064604 ] + width [ 12.4256 ] + height [ 12.4256 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 16.43 -9.29 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb70:10_10_DNARoot" [ + pos [ -160 -290 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ -170 -310 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -164.838 -335.02 7.24792e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "2120" [ + vis [ "2118" "2119" "2120" "2121" "2122" "2154" "2150" "2114" "2113" ] + suit_edge [ 139 338 ] + suit_edge [ 339 140 ] + suit_edge [ 464 139 ] + suit_edge [ 139 464 ] + suit_edge [ 464 140 ] + suit_edge [ 140 464 ] + suit_edge [ 486 140 ] + suit_edge [ 140 486 ] + suit_edge [ 486 139 ] + suit_edge [ 139 486 ] + battle_cell [ 20 20 -150 -365 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb65:random20_DNARoot" [ + pos [ -170 -385 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb66:random20_DNARoot" [ + pos [ -130 -365 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ -170 -365 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb66:random20_DNARoot" [ + pos [ -130 -350 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -130 -390 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -135.869 -383.107 -3.8147e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2121" [ + vis [ "2119" "2120" "2121" "2122" "2123" "2124" "2150" "2154" "2143" "2125" ] + suit_edge [ 148 153 ] + suit_edge [ 153 154 ] + suit_edge [ 155 156 ] + suit_edge [ 156 147 ] + suit_edge [ 156 158 ] + suit_edge [ 158 156 ] + suit_edge [ 153 158 ] + suit_edge [ 158 153 ] + suit_edge [ 466 153 ] + suit_edge [ 153 466 ] + suit_edge [ 466 156 ] + suit_edge [ 156 466 ] + battle_cell [ 20 20 -150 -445 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -130 -470 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -180 -470 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -140 -480 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb65:random20_DNARoot" [ + pos [ -180 -440 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.0980392 0.588235 0.388235 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.917 0.592 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -180 -460 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.81 0.61 0.48 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -4.99997 -40 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 6.67 0.88 19.31 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.78 ] + nhpr [ -0 0 -5 ] + scale [ 0.8 1 0.9 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "b" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "?" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.6 ] + nhpr [ -0 0 -6 ] + width [ 34.4021 ] + height [ 34.4021 ] + flags [ "b" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -1.82 ] + nhpr [ -0 0 -5 ] + scale [ 0.8 1 0.8 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ -9.99997 -10 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 1 0.88 0.8 1 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -165 -480 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ -180 -480 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.44 0.91 0.63 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -140 -480 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.419608 0.266667 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 3 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -2.99999 -45 0 ] + nhpr [ -180 0 -0 ] + ] + ] + landmark_building "tb24:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Happy Hooligans" ] + pos [ -150 -480 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.72 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.26 ] + scale [ 1.1 1 1.1 ] + kern [ 0.025526 ] + wiggle [ 6.58752 ] + stumble [ 0.031384 ] + stomp [ -0.00573399 ] + flags [ "b" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.71 ] + scale [ 1.7 1 1 ] + kern [ 0.053424 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "b" ] + ] + ] + ] + ] + flat_building "tb65:random_DNARoot" [ + pos [ -180 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.75 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.75 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2122" [ + vis [ "2120" "2121" "2122" "2123" "2124" "2150" "2143" "2125" "2151" "2119" ] + suit_edge [ 154 160 ] + suit_edge [ 160 161 ] + suit_edge [ 162 163 ] + suit_edge [ 163 155 ] + suit_edge [ 160 164 ] + suit_edge [ 164 160 ] + suit_edge [ 163 164 ] + suit_edge [ 164 163 ] + suit_edge [ 467 161 ] + suit_edge [ 161 467 ] + suit_edge [ 467 162 ] + suit_edge [ 162 467 ] + suit_edge [ 468 162 ] + suit_edge [ 162 468 ] + suit_edge [ 468 161 ] + suit_edge [ 161 468 ] + suit_edge [ 469 178 ] + suit_edge [ 178 469 ] + suit_edge [ 469 172 ] + suit_edge [ 172 469 ] + battle_cell [ 20 20 -105 -450 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -130 -470 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb66:random20_DNARoot" [ + pos [ -130 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + flat_building "tb66:random20_DNARoot" [ + pos [ -125 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.270588 0.270588 1 ] + count [ 3 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 13 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -90 -470 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -105 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.97 3.58 17.34 ] + nhpr [ -0 0 -0 ] + color [ 1 0.67 0.59 1 ] + ] + ] + landmark_building "tb25:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "House of Bad Pies" ] + pos [ -105 -470 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ -0.22 0 -2.81 ] + scale [ 1.4 1 1.1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.0666667 0.376471 0.541176 1 ] + pos [ 0 0 0.55 ] + scale [ 1.1 1 1.9 ] + wiggle [ 3 ] + stumble [ 0.07 ] + stomp [ 0.04 ] + width [ 50 ] + height [ 50 ] + flags [ "c" ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 1.77 0 0.51 ] + nhpr [ -0 0 6 ] + scale [ 1 1 1.9 ] + kern [ -0.035845 ] + wiggle [ 3.50797 ] + stomp [ -0.062248 ] + width [ 9.05158 ] + height [ 9.05158 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.764706 0.0235294 0.235294 1 ] + pos [ 0 0 -0.89 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "," ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb25:10_10_DNARoot" [ + pos [ -130 -470 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb25:10_10_DNARoot" [ + pos [ -140 -470 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -93.9726 -435.262 3.8147e-006 ] + nhpr [ -15 0 -0 ] + ] + ] + visgroup "2123" [ + vis [ "2121" "2122" "2123" "2124" "2125" "2126" "2143" "2150" "2151" ] + suit_edge [ 165 162 ] + suit_edge [ 166 165 ] + suit_edge [ 167 166 ] + suit_edge [ 161 168 ] + suit_edge [ 168 171 ] + suit_edge [ 171 168 ] + suit_edge [ 168 170 ] + suit_edge [ 165 171 ] + suit_edge [ 171 165 ] + battle_cell [ 20 20 -70 -450 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -90 -430 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb26:random20_DNARoot" [ + pos [ -65 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 4 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 10 -20 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 7.16 -1.25 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -50 -430 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 8.66 -1.19 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -90 -430 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb26:random20_DNARoot" [ + pos [ -50 -450 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 3 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 8.03 -0.25 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 12.77 -32.88 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 5.05 0.82 20.99 ] + nhpr [ 15 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0.184314 0.592157 1 ] + pos [ 0 0 0.73 ] + nhpr [ -0 0 -4 ] + scale [ 1.1 1 1.2 ] + width [ 31.5746 ] + height [ 31.5746 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0.184314 0.592157 1 ] + pos [ 0 0 -0.16 ] + nhpr [ -0 0 -5 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "E" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -2.23 ] + nhpr [ -0 0 -2 ] + scale [ 0.7 1 0.7 ] + kern [ 0.04 ] + width [ 29.5194 ] + height [ 29.5194 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -1.37 ] + nhpr [ -0 0 -2 ] + width [ 24.3469 ] + height [ 24.3469 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + ] + ] + ] + ] + landmark_building "tb26:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Jesse's Joke Repair" ] + pos [ -80 -430 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.99 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.776471 0 0 1 ] + pos [ 0 0 0.31 ] + scale [ 1.7 1 1.7 ] + kern [ 0.275404 ] + wiggle [ 6.25714 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.0156863 0.54902 0.74902 1 ] + pos [ 0 0 -0.87 ] + kern [ 0.171677 ] + wiggle [ 5.38531 ] + stomp [ 0.034373 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -80.3853 -436.265 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2124" [ + vis [ "2121" "2122" "2123" "2124" "2125" "2143" "2150" "2151" "2126" "2152" "2135" ] + suit_edge [ 170 172 ] + suit_edge [ 178 167 ] + suit_edge [ 470 172 ] + suit_edge [ 172 470 ] + suit_edge [ 470 178 ] + suit_edge [ 178 470 ] + battle_cell [ 20 20 -70 -490 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -90 -470 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ -69.9992 -490 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -69.9992 -500 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -69.9992 -510 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb25:random20_DNARoot" [ + pos [ -100 -495 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb61:random20_DNARoot" [ + pos [ -40.0001 -495 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 5 -13.9999 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb67:random20_DNARoot" [ + pos [ -100 -510 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.4 4.34 19.09 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 19 -14 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -90 -480 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb61:random20_DNARoot" [ + pos [ -50 -465 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_lg_brick_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.98 0.58 0.42 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 4 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.89706 1.43344 20.7206 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -40 -480 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ -100 -480 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -50 -480 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -55.413 -472.677 7.62939e-006 ] + nhpr [ -60 0 0 ] + ] + ] + visgroup "2125" [ + vis [ "2123" "2124" "2125" "2126" "2127" "2128" "2136" "2135" "2122" "2143" "2151" "2152" "2137" "2138" "2156" ] + suit_edge [ 180 181 ] + suit_edge [ 182 183 ] + suit_edge [ 183 184 ] + suit_edge [ 183 186 ] + suit_edge [ 186 183 ] + suit_edge [ 180 186 ] + suit_edge [ 186 180 ] + suit_edge [ 471 184 ] + suit_edge [ 184 471 ] + suit_edge [ 471 180 ] + suit_edge [ 180 471 ] + suit_edge [ 431 180 ] + suit_edge [ 184 436 ] + battle_cell [ 20 20 -70.0001 -585 -0.5 ] + group "streets" [ + street "street_exterior_whole_corner_w_grass_DNARoot" [ + code [ "street_exterior_whole_corner_w_grass" ] + pos [ -69.9996 -570 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -29.9992 -550 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -29.9992 -590 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -39.9999 -630 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -79.9999 -630 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -10 -575 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 10.0008 -575 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 30.0008 -615 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 30.0008 -575 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ -79.9999 -630 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5 -55 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 4.99982 -24 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb29:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "The Laughin' Place" ] + pos [ -64.9999 -630 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.98 ] + nhpr [ -0 0 -2 ] + baseline [ + code [ "mickey" ] + color [ 1 0.356863 0.0509804 1 ] + pos [ 0 0 1.28 ] + scale [ 1.5 1 1 ] + kern [ 0.137741 ] + width [ 35.2871 ] + height [ 35.2871 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.356863 0.0509804 1 ] + pos [ -0.1 0 -0.33 ] + nhpr [ -0 0 1 ] + scale [ 1.1 1 1.1 ] + width [ 36.739 ] + height [ 36.739 ] + flags [ "b" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ -45 -630 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.95 0.17 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 8.5402 -23.684 0 ] + nhpr [ 1.00179e-005 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -29.9999 -630 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -29.9999 -595 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -29.9999 -615 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -14.9933 -595.028 -0.0229761 ] + nhpr [ 180 0.0871985 0.0234833 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -29.9991 -550 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -29.9991 -560 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -19.9991 -575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -29.9991 -575 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 9.91821e-005 -595 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 10.0274 -595 0.0117475 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 0.0273991 -595 0.00888433 ] + nhpr [ -90 -0.000102453 -2.50448e-006 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -45 -640 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.32 0.54 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.89 0.95 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 10.0001 -615 0 ] + nhpr [ 90 0.086962 5.86943e-011 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ 9.9995 -575 -0.140026 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb61:20_DNARoot" [ + pos [ -9.99921 -550 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -29.9992 -550 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -9.9992 -575 0 ] + nhpr [ -1.00212e-006 -0.0387139 -0.00148312 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ 29.9995 -575 -0.140026 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ 29.9996 -590 -0.140026 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ 29.9997 -615 -0.140026 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -5.00026 -615 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + ] + ] + visgroup "2126" [ + vis [ "2126" "2127" "2128" "2136" "2135" "2137" "2151" "2125" "2152" "2124" "2143" "2123" "2138" "2139" "2140" "2141" "2142" "2129" "2130" ] + suit_edge [ 181 187 ] + suit_edge [ 187 188 ] + suit_edge [ 189 190 ] + suit_edge [ 190 182 ] + suit_edge [ 187 191 ] + suit_edge [ 191 187 ] + suit_edge [ 190 191 ] + suit_edge [ 191 190 ] + suit_edge [ 472 181 ] + suit_edge [ 181 472 ] + suit_edge [ 472 182 ] + suit_edge [ 182 472 ] + suit_edge [ 473 190 ] + suit_edge [ 190 473 ] + suit_edge [ 473 187 ] + suit_edge [ 187 473 ] + battle_cell [ 20 20 -116 -590 -0.5 ] + group "streets" [ + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ -120 -590 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ -90 -620 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 17.33 5.24 15.24 ] + nhpr [ -0 0 -0 ] + color [ 0.9 0.56 0.34 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 13.24 -3.5 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.32 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.96 ] + kern [ 0.055229 ] + wiggle [ 3.16561 ] + stumble [ 0.015725 ] + stomp [ 0.011329 ] + flags [ "d" ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 1.01 ] + scale [ 0.7 1 0.6 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + landmark_building "tb32:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Clown Class" ] + pos [ -135 -560 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.25 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.807843 0.403922 0 1 ] + pos [ 0 0 0.4 ] + nhpr [ -0 0 2 ] + scale [ 2 1 1.5 ] + kern [ 0.286692 ] + wiggle [ 3.46139 ] + stumble [ 0.02 ] + stomp [ 0.031369 ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.807843 0.403922 0 1 ] + pos [ 0 0 -0.87 ] + scale [ 2 1 1.5 ] + kern [ 0.260754 ] + wiggle [ 4.64003 ] + stomp [ 0.042004 ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ -0.17 0 0.63 ] + scale [ 2 1 1.5 ] + kern [ 0.932395 ] + wiggle [ 3.55442 ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.97 ] + scale [ 2 1 1.5 ] + kern [ 0.362709 ] + wiggle [ 10.2343 ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb52:random20_DNARoot" [ + pos [ -125 -620 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 6 -15 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb52:random20_DNARoot" [ + pos [ -115 -620 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -110 -560 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -3 -15 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ -90 -630 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -113.407 -606.13 3.8147e-005 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "2127" [ + vis [ "2125" "2126" "2127" "2128" "2129" "2130" "2135" "2136" "2137" "2138" "2139" "2140" "2141" "2151" "2152" "2142" "2143" "2119" ] + suit_edge [ 198 199 ] + suit_edge [ 200 201 ] + suit_edge [ 198 205 ] + suit_edge [ 205 198 ] + suit_edge [ 201 205 ] + suit_edge [ 205 201 ] + suit_edge [ 475 201 ] + suit_edge [ 201 475 ] + suit_edge [ 475 198 ] + suit_edge [ 198 475 ] + suit_edge [ 383 198 ] + suit_edge [ 201 382 ] + suit_edge [ 382 509 ] + suit_edge [ 509 382 ] + suit_edge [ 383 509 ] + suit_edge [ 509 383 ] + battle_cell [ 20 20 -205 -590 -0.5 ] + group "streets" [ + street "street_exterior_whole_corner_w_grass_DNARoot" [ + code [ "street_exterior_whole_corner_w_grass" ] + pos [ -190 -590 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -170 -630 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -210 -630 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -250 -620 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -250 -580 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb33:random20_DNARoot" [ + pos [ -190 -630 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 2.43 2.43 18.59 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6 -54.0004 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 45.1191 -1.61032 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 5.00043 -25 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.923248 0.923248 0.923248 ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 8.4126 -1.2749 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 8.65364 -1.47711 1.2579 ] + nhpr [ -0 0.811123 -0 ] + ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -250 -580 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 0.11 0.8 0.22 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.0980392 0.588235 0.388235 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 1 -25 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.00989 1.00989 1.00989 ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ -250 -610 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 8.00024 -2.46463 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 6.74725 -3.57382 0.0444473 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -250 -595 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.85 2.02 19.26 ] + nhpr [ -0 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 19 -1.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ -220 -630 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ -265 -610 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb54:random_DNARoot" [ + pos [ -250 -570 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -230 -630 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + landmark_building "tb33:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Tee-Hee Tea Shop" ] + pos [ -205 -630 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + pos [ 0 0 1 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 0 0 -0.17 ] + scale [ 2.1 1 1.2 ] + kern [ 0.19903 ] + wiggle [ 6.05491 ] + stomp [ -0.062151 ] + width [ 31.1081 ] + height [ 31.1081 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.28 ] + scale [ 1.4 1 1 ] + kern [ 0.1 ] + width [ 45.0857 ] + height [ 45.0857 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -230 -630 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -240 -630 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 10.0001 20.0002 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -250 -630 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -250 -620 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -10.0002 20 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -170 -630 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14.9992 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -1.99957 -25 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.96299 0.96299 0.96299 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 8.99957 -56.0001 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.18965 1.18965 1.18965 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -223.047 -603.934 7.62939e-006 ] + nhpr [ 120 0 -0 ] + ] + ] + visgroup "2128" [ + vis [ "2125" "2126" "2127" "2128" "2129" "2130" "2135" "2136" "2137" "2138" "2139" "2140" "2141" "2152" "2142" "2119" ] + suit_edge [ 199 206 ] + suit_edge [ 207 200 ] + suit_edge [ 206 508 ] + suit_edge [ 508 206 ] + suit_edge [ 207 508 ] + suit_edge [ 508 207 ] + battle_cell [ 20 20 -209 -547 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb54:random20_DNARoot" [ + pos [ -240 -570 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 27.9999 -45 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb54:random20_DNARoot" [ + pos [ -240 -545 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.142751 0.527559 0.295847 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -3.00043 -15.0002 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -210 -540 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -210 -540 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -210 -560 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -210 -550 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -194.48 -555.395 -3.8147e-006 ] + nhpr [ -105 0 0 ] + ] + ] + visgroup "2129" [ + vis [ "2126" "2127" "2128" "2129" "2130" "2131" "2137" "2138" "2139" "2140" "2135" "2141" "2142" "2136" "2152" "2153" "2119" ] + suit_edge [ 226 228 ] + suit_edge [ 229 227 ] + suit_edge [ 228 230 ] + suit_edge [ 230 231 ] + suit_edge [ 231 232 ] + suit_edge [ 233 234 ] + suit_edge [ 234 229 ] + suit_edge [ 234 236 ] + suit_edge [ 236 234 ] + suit_edge [ 231 236 ] + suit_edge [ 236 231 ] + suit_edge [ 228 237 ] + suit_edge [ 237 228 ] + suit_edge [ 229 237 ] + suit_edge [ 237 229 ] + battle_cell [ 20 20 -210 -355 -0.5 ] + group "streets" [ + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -190 -290 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ -210 -350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ -210 -330 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ -230 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -230 -370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb38:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Toontown Playhouse" ] + pos [ -230 -330 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 35 -15 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 12.5 -3 4.38 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -0.25 ] + scale [ 0.9 1 0.9 ] + wiggle [ 1.63273 ] + stumble [ -0.01226 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 1 1 ] + pos [ -0.49 0 -1.56 ] + scale [ 0.9 1 0.9 ] + stomp [ 0.054882 ] + width [ 1953.13 ] + height [ 1953.13 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ -200 -330 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb57:random20_DNARoot" [ + pos [ -190 -330 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592157 1 ] + ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ -205 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:10_10_DNARoot" [ + pos [ -200 -320 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:10_10_DNARoot" [ + pos [ -200 -305 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.12 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb57:10_10_DNARoot" [ + pos [ -190 -315 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb57:10_10_DNARoot" [ + pos [ -190 -300 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + landmark_building "tb57:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Frank's Pranks" ] + pos [ -190 -350 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + pos [ 0 0 -0.37 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.647059 0.0352941 0.352941 1 ] + pos [ 0.22 0 0 ] + scale [ 1.2 1 1.2 ] + kern [ 0.047797 ] + wiggle [ 4.72105 ] + stumble [ 0.041499 ] + stomp [ 0.053635 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -225.262 -335.835 0 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "2130" [ + vis [ "2142" "2141" "2140" "2139" "2138" "2137" "2136" "2135" "2131" "2130" "2129" "2128" "2127" "2152" "2153" "2126" ] + suit_edge [ 232 238 ] + suit_edge [ 239 233 ] + suit_edge [ 480 232 ] + suit_edge [ 232 480 ] + suit_edge [ 480 233 ] + suit_edge [ 233 480 ] + suit_edge [ 482 238 ] + suit_edge [ 238 482 ] + suit_edge [ 482 239 ] + suit_edge [ 239 482 ] + battle_cell [ 20 20 -255 -350 -0.5 ] + group "streets" [ + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -274.999 -320 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_40x20_DNARoot" [ + code [ "street_40x20" ] + pos [ -270 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ -280 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_sidewalk_transitionR_DNARoot" [ + code [ "street_park_sidewalk_transitionR" ] + pos [ -260 -370 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_10_DNARoot" [ + code [ "street_park_straight_10" ] + pos [ -260 -370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -240 -370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb38:random20_DNARoot" [ + pos [ -255 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb38:random20_DNARoot" [ + pos [ -245 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ -1 -7 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "neighborhood_sign_DG_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ -7 -2 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ -270 -320 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.56 2.17 19.65 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -255 -320 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb39:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Monkey Tricks" ] + pos [ -285 -320 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.745098 0.792157 0.552941 1 ] + ] + sign [ + code [ "TTC_sign2" ] + pos [ 0 0 0.26 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.25098 0.25098 1 ] + pos [ 0 0 0.75 ] + scale [ 2 1 1.1 ] + width [ 37.9377 ] + height [ 37.9377 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.25098 0.25098 1 ] + pos [ 0 0 -0.53 ] + scale [ 2.3 1 1.1 ] + width [ 102.291 ] + height [ 102.291 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ -7 -3 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -259.085 -334.696 -3.05176e-005 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "2131" [ + vis [ "2129" "2130" "2131" "2142" "2141" "2140" "2153" "2139" ] + suit_edge [ 243 251 ] + suit_edge [ 251 252 ] + suit_edge [ 252 253 ] + suit_edge [ 253 244 ] + suit_edge [ 252 254 ] + suit_edge [ 254 252 ] + suit_edge [ 484 251 ] + suit_edge [ 251 484 ] + suit_edge [ 485 251 ] + suit_edge [ 251 485 ] + battle_cell [ 20 20 -360 -350 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -380 -370 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -380 -370 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -390 -405 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb43:random20_DNARoot" [ + pos [ -390 -390 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.99994 -12.9999 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -390 -400 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -340 -380 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -340 -370 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb69:random20_DNARoot" [ + pos [ -380 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -380 -345 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -340 -390 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + ] + prop "linktunnel_dg_5138_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ -360 -400 0 ] + nhpr [ 180 0 -0 ] + sign [ + code [ "tunnel_sign_green" ] + pos [ 0 0 0.9 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.06 ] + scale [ 1.5 1 1.5 ] + kern [ -0.005794 ] + width [ 55.0903 ] + height [ 55.0903 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "daisySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -2 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 45.2059 ] + height [ 45.2059 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb69:random20_DNARoot" [ + pos [ -365 -330 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.917 0.592 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 4.62 3.03 12.73 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 20 -6 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -390 -380 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0980392 0.588235 0.388235 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -380 -400 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb69:random_DNARoot" [ + pos [ -345 -330 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -390 -365 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + landmark_building "tb43:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Canned Bottles" ] + pos [ -380.65 -359.48 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.97 ] + scale [ 1 1 0.9 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0.22 0 0.26 ] + scale [ 1.2 1 1.2 ] + wiggle [ 4.86944 ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.843137 0.0156863 0.156863 1 ] + pos [ -2.39 0 0 ] + scale [ 1.2 1 1.2 ] + kern [ -0.029772 ] + wiggle [ -3.7255 ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 3.19 0 -0.16 ] + scale [ 1.2 1 1.2 ] + kern [ 0.113477 ] + wiggle [ -6.40935 ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -380 -365 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.411765 0.266667 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ -0.999908 -35.0001 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.88 0.88 0.88 1 ] + ] + ] + ] + group "props" [ + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -368.577 -395.45 -0.499989 ] + nhpr [ 180 0 -0 ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -364.473 -336.494 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2132" [ + vis [ "2101" "2102" "2103" "2132" "2144" "2107" "2155" ] + suit_edge [ 420 421 ] + suit_edge [ 421 422 ] + suit_edge [ 422 421 ] + suit_edge [ 423 420 ] + suit_edge [ 421 424 ] + suit_edge [ 423 441 ] + suit_edge [ 441 423 ] + suit_edge [ 441 424 ] + suit_edge [ 424 441 ] + battle_cell [ 20 20 -110 -125 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -130 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -130 -120 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -140 -130 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -140 -90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "props" [ + ] + group "buildings" [ + flat_building "tb44:random20_DNARoot" [ + pos [ -110 -80 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -140 -110 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 11.52 -6.35 0 ] + nhpr [ -90 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -130 -80 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.898039 0.329412 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 4 ] + ] + ] + ] + prop "linktunnel_tt_2000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -90.03 -79.94 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -2.84 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.09 0 -0.99 ] + scale [ 1.5 1 1.5 ] + width [ 38.4394 ] + height [ 38.4394 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.94 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -140 -130 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -140 -95 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -130 -140 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -130 -130 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -140 -80 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + landmark_building "tb44:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Impractical Jokes" ] + pos [ -140 -125 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.7 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.545098 0.0196078 0.203922 1 ] + pos [ 0.89 0 0.41 ] + scale [ 1.4 1 1.4 ] + kern [ 0.106115 ] + wiggle [ 5.23175 ] + stumble [ 0.021261 ] + stomp [ 0.021038 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.545098 0.0196078 0.203922 1 ] + pos [ 0.01 0 -0.82 ] + scale [ 1.4 1 1.4 ] + kern [ 0.099194 ] + wiggle [ 4.08275 ] + stumble [ 0.025965 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.803922 0.027451 0.301961 1 ] + pos [ -4.11 0 0.4 ] + scale [ 1.4 1 1.4 ] + kern [ 0.212702 ] + wiggle [ 6.63998 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -90 -120 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -5 -5 0 ] + nhpr [ 90 0 -0 ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -93.9915 -108.692 -0.500011 ] + nhpr [ -90.4703 0 -0 ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -108.243 -85.8131 1.90735e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2133" [ + vis [ "2133" "2110" "2134" "2111" "2109" "2108" "2107" "2145" "2146" "2155" "2112" "2147" "2113" "2114" ] + suit_edge [ 504 505 ] + suit_edge [ 495 498 ] + battle_cell [ 20 20 -228 -235 -0.5 ] + flat_building "tb7:20_DNARoot" [ + pos [ -225 -255 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -260 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_facade_d_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 7.99997 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "gallery2_DNARoot" [ + code [ "gallery2" ] + pos [ 8.00815 -3.62329 -1.03882 ] + nhpr [ 0.00561342 0.902912 -0.356219 ] + ] + ] + flat_building "tb60:20_DNARoot" [ + pos [ -205 -255 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 12.67 2.45 21.57 ] + nhpr [ -0 0 -1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 3 -7 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 8 -34 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 25 -34 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 41 -34 0 ] + nhpr [ 180 0 -0 ] + ] + ] + street "street_divided_40x70_DNARoot" [ + code [ "street_divided_40x70" ] + pos [ -250 -255 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -225 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.78638 -6.67212 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -245 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -239.607 -249.971 -0.000110626 ] + nhpr [ 156.841 0 -0 ] + ] + ] + visgroup "2134" [ + vis [ "2110" "2111" "2112" "2109" "2108" "2133" "2107" "2145" "2146" "2134" "2155" "2114" "2147" "2113" ] + suit_edge [ 412 408 ] + suit_edge [ 410 413 ] + suit_edge [ 412 416 ] + suit_edge [ 416 412 ] + suit_edge [ 413 416 ] + suit_edge [ 416 413 ] + suit_edge [ 498 500 ] + suit_edge [ 500 412 ] + suit_edge [ 413 501 ] + suit_edge [ 501 413 ] + suit_edge [ 412 501 ] + suit_edge [ 501 412 ] + suit_edge [ 413 502 ] + suit_edge [ 502 413 ] + suit_edge [ 412 502 ] + suit_edge [ 502 412 ] + suit_edge [ 413 503 ] + suit_edge [ 503 504 ] + battle_cell [ 20 20 -190 -220 -0.5 ] + landmark_building "tb49:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "All Fun and Games Shop" ] + pos [ -215 -185 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.69 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.764706 0.0235294 0.235294 1 ] + pos [ 0.04 0 0.62 ] + scale [ 1 1 1.4 ] + kern [ 0.051385 ] + wiggle [ 2.62807 ] + stumble [ 0.085556 ] + stomp [ 0.05 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.86 ] + scale [ 1.3 1 1.4 ] + kern [ 0.124529 ] + wiggle [ 6.52308 ] + stumble [ 0.1 ] + stomp [ 0.02 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + flat_building "tb60:20_DNARoot" [ + pos [ -170 -255 0 ] + nhpr [ 180 0 -0 ] + width [ 15.6 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 12.0001 -18 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + landmark_building "tb60:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Tickle Machines" ] + pos [ -185 -255 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.37 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0.15 0 0.39 ] + scale [ 2 1 2 ] + kern [ 0.078774 ] + wiggle [ 1.35566 ] + stumble [ 0.008135 ] + stomp [ 0.032597 ] + width [ 54.401 ] + height [ 54.401 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1 ] + scale [ 1.5 1 1.5 ] + kern [ 0.111783 ] + wiggle [ 3 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -190 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ -170 -185 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb49:random_DNARoot" [ + pos [ -170 -185 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 16 -13.0001 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.01849 1.01849 1.01849 ] + ] + ] + flat_building "tb60:random_DNARoot" [ + pos [ -170 -240 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb49:20_DNARoot" [ + pos [ -200 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -175.337 -204.794 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2135" [ + vis [ "2136" "2137" "2138" "2139" "2140" "2128" "2129" "2130" "2141" "2135" "2125" "2126" "2127" "2152" "2151" "2143" "2142" ] + suit_edge [ 382 384 ] + suit_edge [ 384 189 ] + suit_edge [ 188 385 ] + suit_edge [ 385 383 ] + suit_edge [ 384 437 ] + suit_edge [ 437 384 ] + suit_edge [ 385 437 ] + suit_edge [ 437 385 ] + suit_edge [ 385 491 ] + suit_edge [ 491 385 ] + suit_edge [ 384 491 ] + suit_edge [ 491 384 ] + battle_cell [ 20 20 -156 -589 -0.5 ] + landmark_building "tb52:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "" ] + pos [ -135 -620 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_anvil_sign_DNARoot" [ + code [ "prop_anvil_sign" ] + pos [ 13 -3 12 ] + nhpr [ 90 0 -0 ] + ] + sign [ + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -4 -45 0 ] + nhpr [ -90 0 -0 ] + scale [ 1.01351 1.01351 1.01351 ] + ] + ] + flat_building "tb52:20_DNARoot" [ + pos [ -160 -620 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ -150 -590 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -150 -590 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -170 -590 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -170 -590 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -170 -620 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ -150 -560 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.81 0.61 0.48 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "2136" [ + vis [ "2136" "2135" "2137" "2138" "2126" "2125" "2127" "2128" "2152" "2129" "2130" "2141" "2140" "2139" "2142" ] + suit_edge [ 477 220 ] + suit_edge [ 220 477 ] + suit_edge [ 477 214 ] + suit_edge [ 214 477 ] + suit_edge [ 478 214 ] + suit_edge [ 214 478 ] + suit_edge [ 478 220 ] + suit_edge [ 220 478 ] + battle_cell [ 20 20 -165 -550 -0.5 ] + landmark_building "tb53:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "" ] + pos [ -150 -525 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 11 -9 0 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ -150 -550 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ -165 -515 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 4.71 -4.86 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ -180 -515 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + ] + ] + flat_building "tb53:20_DNARoot" [ + pos [ -150 -515 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ -180 -520 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -180 -500 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -160 -500 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2137" [ + vis [ "2137" "2136" "2135" "2127" "2128" "2126" "2138" "2139" "2140" "2141" "2130" "2129" "2152" "2142" "2153" "2119" "2125" ] + suit_edge [ 208 207 ] + suit_edge [ 206 209 ] + suit_edge [ 209 212 ] + suit_edge [ 215 208 ] + suit_edge [ 212 216 ] + suit_edge [ 216 212 ] + suit_edge [ 215 216 ] + suit_edge [ 216 215 ] + suit_edge [ 208 218 ] + suit_edge [ 218 208 ] + suit_edge [ 209 218 ] + suit_edge [ 218 209 ] + battle_cell [ 20 20 -210 -511 -0.5 ] + flat_building "tb54:20_DNARoot" [ + pos [ -240 -505 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 13.23 3.20621 18.81 ] + nhpr [ -0 0 -0 ] + color [ 1 0.42 0.27 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 13.0001 -15.0004 0 ] + nhpr [ 90 0 -0 ] + ] + ] + landmark_building "tb55:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Funny Money Savings & Loan" ] + pos [ -180 -479 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ 0 0 -3.77 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ -0.19 0 0.94 ] + scale [ 1.1 1 1.2 ] + wiggle [ 6.77971 ] + stumble [ 0.06932 ] + stomp [ 0.026188 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.25098 0.25098 1 ] + pos [ -0.37 0 -0.18 ] + scale [ 1.2 1 0.8 ] + kern [ 0.063308 ] + width [ 27.3769 ] + height [ 27.3769 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + landmark_building "tb54:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Laughing Lessons" ] + pos [ -240 -530 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.28 ] + nhpr [ -0 0 3 ] + kern [ 0.177503 ] + wiggle [ 2.7934 ] + stomp [ 0.081645 ] + flags [ "cdb" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.08 0 -0.95 ] + kern [ 0.063849 ] + wiggle [ 3.97854 ] + stomp [ 0.053734 ] + flags [ "b" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ -210 -510 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb55:20_DNARoot" [ + pos [ -180 -500 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 15 -15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.08532 1.08532 1.08532 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -233.269 -526.938 3.8147e-005 ] + nhpr [ 96.7837 0 -0 ] + ] + ] + visgroup "2138" [ + vis [ "2138" "2128" "2127" "2137" "2136" "2135" "2139" "2140" "2141" "2129" "2130" "2142" "2152" "2153" "2119" "2126" ] + suit_edge [ 212 220 ] + suit_edge [ 214 215 ] + battle_cell [ 20 20 -210 -470 -0.5 ] + flat_building "tb55:20_DNARoot" [ + pos [ -190 -460 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb56:20_DNARoot" [ + pos [ -230 -470 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 6.14999 2.2903 19.22 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb56:20_DNARoot" [ + pos [ -240 -485 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb55:20_DNARoot" [ + pos [ -180 -470 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb55:20_DNARoot" [ + pos [ -190 -445 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.44 4.1 19.68 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 35 -5.00002 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.88 0.88 0.88 1 ] + ] + ] + flat_building "tb56:20_DNARoot" [ + pos [ -230 -460 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 1.99997 -5.99998 0 ] + nhpr [ 180 0 -0 ] + ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ -210 -480 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -190 -470 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -240 -470 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb55:random_DNARoot" [ + pos [ -190 -470 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + ] + visgroup "2139" [ + vis [ "2139" "2128" "2138" "2137" "2136" "2135" "2127" "2129" "2130" "2140" "2141" "2142" "2152" "2153" "2131" "2119" "2126" ] + suit_edge [ 220 221 ] + suit_edge [ 221 222 ] + suit_edge [ 223 224 ] + suit_edge [ 224 214 ] + suit_edge [ 224 225 ] + suit_edge [ 225 224 ] + suit_edge [ 221 225 ] + suit_edge [ 225 221 ] + suit_edge [ 479 222 ] + suit_edge [ 222 479 ] + suit_edge [ 479 223 ] + suit_edge [ 223 479 ] + battle_cell [ 20 20 -210 -430 -0.5 ] + flat_building "tb57:20_DNARoot" [ + pos [ -190 -435 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb57:20_DNARoot" [ + pos [ -190 -425 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb57:20_DNARoot" [ + pos [ -190 -410 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 9.17 3.85 16.47 ] + nhpr [ -0 0 -0 ] + color [ 0.24 0.79 0.32 1 ] + ] + ] + landmark_building "tb56:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Used Clown Cars" ] + pos [ -230 -450 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.75 0.79 0.55 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0.08 0 0.95 ] + nhpr [ -0 0 -3 ] + scale [ 0.7 1 0.6 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.27 ] + nhpr [ -0 0 2 ] + scale [ 1.2 1 1.5 ] + kern [ 0.075874 ] + wiggle [ 2.84704 ] + stumble [ 0.03 ] + stomp [ 0.06 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 -0.1 ] + scale [ 0.9 1 1.7 ] + kern [ 0.060648 ] + wiggle [ 3.81682 ] + stumble [ 0.0406 ] + stomp [ 0.047384 ] + width [ 16.6814 ] + height [ 16.6814 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -190 -450 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ -210 -410 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb56:20_DNARoot" [ + pos [ -230 -435 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + ] + street "street_park_sidewalk_transitionL_DNARoot" [ + code [ "street_park_sidewalk_transitionL" ] + pos [ -230 -430 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2140" [ + vis [ "2140" "2141" "2142" "2128" "2127" "2137" "2138" "2139" "2136" "2135" "2129" "2130" "2131" "2152" "2153" "2119" ] + suit_edge [ 222 226 ] + suit_edge [ 227 223 ] + battle_cell [ 20 20 -210 -390 -0.5 ] + flat_building "tb57:20_DNARoot" [ + pos [ -190 -375 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb57:20_DNARoot" [ + pos [ -190 -390 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + street "street_40x20_DNARoot" [ + code [ "street_40x20" ] + pos [ -210 -370 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -230 -380 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -230 -400 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2141" [ + vis [ "2141" "2140" "2139" "2138" "2137" "2136" "2135" "2128" "2127" "2142" "2130" "2129" "2131" "2152" "2153" "2119" "2126" ] + street "street_park_straight_sidewalk_corner_DNARoot" [ + code [ "street_park_straight_sidewalk_corner" ] + pos [ -270 -430 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_sidewalk_20_DNARoot" [ + code [ "street_park_straight_sidewalk_20" ] + pos [ -250 -430 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_sidewalk_20_DNARoot" [ + code [ "street_park_straight_sidewalk_20" ] + pos [ -280 -400 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_interior_20x20_DNARoot" [ + code [ "street_park_interior_20x20" ] + pos [ -250 -400 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_sidewalk_10_DNARoot" [ + code [ "street_park_straight_sidewalk_10" ] + pos [ -280 -390 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -260 -380 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.895649 0.895649 0.895649 ] + ] + flat_building "tb59:20_DNARoot" [ + pos [ -280 -390 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88 0.44 0.15 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb56:20_DNARoot" [ + pos [ -230 -430 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -260 -410 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.11655 1.11655 1.11655 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -235 -395 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -250 -380 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -295 -420 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -280 -440 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.27585 1.27585 1.27585 ] + ] + street "street_park_interior_20x20_DNARoot" [ + code [ "street_park_interior_20x20" ] + pos [ -240 -380 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_interior_10x10_DNARoot" [ + code [ "street_park_interior_10x10" ] + pos [ -250 -380 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_interior_10x10_DNARoot" [ + code [ "street_park_interior_10x10" ] + pos [ -250 -370 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_interior_10x10_DNARoot" [ + code [ "street_park_interior_10x10" ] + pos [ -230 -390 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_interior_10x10_DNARoot" [ + code [ "street_park_interior_10x10" ] + pos [ -230 -400 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -240 -430 0 ] + nhpr [ -135 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -240 -430 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -250 -430 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -260 -430 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -270 -430 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -280 -430 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb56:random_DNARoot" [ + pos [ -280 -420 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ -300 -410 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb59:random_DNARoot" [ + pos [ -280 -410 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + ] + visgroup "2142" [ + vis [ "2142" "2141" "2140" "2139" "2138" "2137" "2131" "2130" "2129" "2153" ] + suit_edge [ 238 240 ] + suit_edge [ 240 241 ] + suit_edge [ 246 247 ] + suit_edge [ 247 239 ] + suit_edge [ 240 248 ] + suit_edge [ 248 240 ] + suit_edge [ 247 248 ] + suit_edge [ 248 247 ] + suit_edge [ 241 249 ] + suit_edge [ 249 241 ] + suit_edge [ 246 249 ] + suit_edge [ 249 246 ] + suit_edge [ 241 379 ] + suit_edge [ 380 246 ] + battle_cell [ 20 20 -290 -350 -0.5 ] + flat_building "tb59:20_DNARoot" [ + pos [ -280 -370 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb69:20_DNARoot" [ + pos [ -315 -320 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 9.41016 -15.2698 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -314.999 -319.999 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb59:20_DNARoot" [ + pos [ -285 -370 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + ] + ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -280 -330 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -300 -320 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 8.116 -2.89508 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 7.92358 -3.6301 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb59:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Joy Buzzers to the World" ] + pos [ -290 -370 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + sign [ + code [ "TTC_sign1" ] + pos [ 0 0 -3.44 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.31 ] + scale [ 1.5 1 1.4 ] + kern [ 0.073066 ] + wiggle [ 1.08097 ] + stomp [ 0.025552 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "J" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 0 0 -1.25 ] + width [ 26.0838 ] + height [ 26.0838 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -284.229 -365.871 -1.52588e-005 ] + nhpr [ 168.805 0 -0 ] + ] + ] + visgroup "2143" [ + vis [ "2143" "2126" "2125" "2124" "2123" "2122" "2135" "2121" "2120" "2151" "2150" "2127" "2128" ] + suit_edge [ 172 430 ] + suit_edge [ 430 431 ] + suit_edge [ 433 178 ] + suit_edge [ 433 434 ] + suit_edge [ 434 433 ] + suit_edge [ 430 434 ] + suit_edge [ 434 430 ] + suit_edge [ 431 435 ] + suit_edge [ 435 431 ] + suit_edge [ 436 435 ] + suit_edge [ 435 436 ] + suit_edge [ 436 433 ] + battle_cell [ 20 20 -70 -530 -0.5 ] + flat_building "tb61:20_DNARoot" [ + pos [ -40.0001 -510 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 9.00003 -13.9999 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb61:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Daffy Taffy" ] + pos [ -40.0001 -525 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.8 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0.501961 1 ] + pos [ 0.15 0 0.48 ] + scale [ 1.5 1 1.5 ] + kern [ 0.226735 ] + wiggle [ 5.94718 ] + stomp [ 0.071629 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0.501961 1 ] + pos [ 0 0 -0.99 ] + scale [ 1.5 1 1.5 ] + kern [ 0.214972 ] + wiggle [ 3.88838 ] + stomp [ 0.09369 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb61:20_DNARoot" [ + pos [ -40 -540 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 5.99988 -13.9996 0 ] + nhpr [ -0 0 -0 ] + ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -69.9992 -550 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -69.9992 -560 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ -69.9992 -530 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ -100 -560 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 0 -14.9998 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.86162 0.86162 0.86162 ] + ] + ] + landmark_building "tb67:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Happy Times" ] + pos [ -100 -550 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.78 ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 1 1 ] + pos [ 0.05 0 -0.82 ] + scale [ 1.6 1 1.6 ] + kern [ 0.206922 ] + wiggle [ 2.80276 ] + stumble [ 0.044511 ] + stomp [ 0.0406 ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.843137 0.0156863 0.156863 1 ] + pos [ 0.23 0 -0.86 ] + scale [ 1.6 1 1.6 ] + kern [ 0.419026 ] + wiggle [ 2.1532 ] + stumble [ -0.061946 ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 1 1 ] + pos [ 0 0 0.71 ] + kern [ 0.129856 ] + wiggle [ 4.68109 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb67:20_DNARoot" [ + pos [ -100 -525 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 4.00024 -15.0001 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb61:random_DNARoot" [ + pos [ -39.9992 -550 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -92.9847 -529.502 -7.62939e-006 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "2144" [ + vis [ "2144" "2102" "2101" "2132" "2103" "2104" "2105" "2106" "2107" "2155" ] + suit_edge [ 261 17 ] + suit_edge [ 23 262 ] + suit_edge [ 445 17 ] + suit_edge [ 17 445 ] + suit_edge [ 445 23 ] + suit_edge [ 23 445 ] + battle_cell [ 20 20 -190 -160 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -210 -180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -200 -180 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -185 -180 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb2:20_DNARoot" [ + pos [ -175 -180 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb1:20_DNARoot" [ + pos [ -200 -140 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 16 -7 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb1:20_DNARoot" [ + pos [ -210 -140 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 3 -6 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.88 0.88 0.88 1 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -204.876 -172.969 3.8147e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "2145" [ + vis [ "2145" "2134" "2133" "2109" "2108" "2107" "2110" "2146" "2111" "2155" "2112" "2147" "2114" "2113" "2148" ] + suit_edge [ 408 72 ] + suit_edge [ 409 410 ] + suit_edge [ 451 408 ] + suit_edge [ 408 451 ] + suit_edge [ 451 410 ] + suit_edge [ 410 451 ] + battle_cell [ 20 20 -160 -220 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -170 -240 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -170 -200 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb60:20_DNARoot" [ + pos [ -150 -240 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb10:20_DNARoot" [ + pos [ -165 -200 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.26 3.63 15.56 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + prop "prop_facade_d_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 7.39088 -2.40546 -0.00119227 ] + nhpr [ -0 0.168383 -0 ] + ] + prop "gallery2_DNARoot" [ + code [ "gallery2" ] + pos [ 7.6089 -3.01639 -1.23236 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -166.481 -205.755 3.43323e-005 ] + nhpr [ -14.1905 0 -0 ] + ] + ] + visgroup "2146" [ + vis [ "2146" "2111" "2110" "2145" "2134" "2112" "2147" "2114" "2113" "2109" "2108" "2133" "2155" "2148" ] + suit_edge [ 404 406 ] + suit_edge [ 407 405 ] + suit_edge [ 454 405 ] + suit_edge [ 405 454 ] + suit_edge [ 454 404 ] + suit_edge [ 404 454 ] + battle_cell [ 20 20 -130 -250 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -110 -260 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -110 -260 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ -90 -240 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 22 -18 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 7.99594 -0.998199 0 ] + nhpr [ -0 0 -0 ] + ] + prop "sport_store_DNARoot" [ + code [ "sport_store" ] + pos [ 8.74557 -1.57281 -0.340002 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ -90 -255 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + ] + ] + flat_building "tb11:20_DNARoot" [ + pos [ -150 -255 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -114.113 -249.986 -1.52588e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2147" [ + vis [ "2147" "2113" "2112" "2111" "2146" "2114" "2115" "2148" "2110" "2145" "2133" "2134" "2109" ] + suit_edge [ 401 85 ] + suit_edge [ 88 402 ] + suit_edge [ 401 403 ] + suit_edge [ 403 401 ] + suit_edge [ 402 403 ] + suit_edge [ 403 402 ] + suit_edge [ 85 86 ] + suit_edge [ 87 88 ] + suit_edge [ 88 94 ] + suit_edge [ 94 88 ] + suit_edge [ 85 94 ] + suit_edge [ 94 85 ] + battle_cell [ 20 20 -55 -280 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -40 -260 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb63:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Toontown Cinerama" ] + pos [ -55 -300 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_marquee" ] + pos [ 12 -3 5 ] + nhpr [ -0 0 -0 ] + color [ 1 0.88 0.8 1 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 0 0.792157 0.792157 1 ] + pos [ 0 0 -0.12 ] + scale [ 0.9 1 0.9 ] + wiggle [ -2.51509 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.59 ] + scale [ 0.9 1 1 ] + wiggle [ -4.53148 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + ] + flat_building "tb63:20_DNARoot" [ + pos [ -40 -300 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 4 -5 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.6 0.6 0.6 ] + ] + ] + flat_building "tb62:20_DNARoot" [ + pos [ -75 -260 0 ] + nhpr [ -0 0 -0 ] + width [ 15.6 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb62:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Dr. I.M. Euphoric" ] + pos [ -60 -260 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 1.53 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ -0.3 0 -0.33 ] + scale [ 1.2 1 1.3 ] + kern [ 0.04 ] + wiggle [ 3.45308 ] + stumble [ 0.070882 ] + stomp [ 0.031987 ] + width [ 31.3264 ] + height [ 31.3264 ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ 0 0 0.97 ] + scale [ 1.5 1 1.5 ] + kern [ 0.108364 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -59.2811 -267.189 -7.62939e-006 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2148" [ + vis [ "2148" "2114" "2115" "2113" "2147" "2116" "2117" "2118" "2119" "2120" "2149" "2154" ] + suit_edge [ 396 100 ] + suit_edge [ 105 397 ] + suit_edge [ 106 105 ] + suit_edge [ 100 113 ] + suit_edge [ 100 103 ] + suit_edge [ 103 100 ] + suit_edge [ 105 103 ] + suit_edge [ 103 105 ] + battle_cell [ 20 20 -20 -360 -0.5 ] + flat_building "tb64:20_DNARoot" [ + pos [ 10 -330 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 5.99994 -14 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.73549 0.73549 0.73549 ] + ] + ] + landmark_building "tb64:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "The Merry Mimes" ] + pos [ 10 -340 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -2.29 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 0.97 ] + scale [ 1.1 1 1.3 ] + kern [ 0.073341 ] + wiggle [ 2.7148 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0 0 -0.81 ] + scale [ 1.4 1 1.4 ] + kern [ 0.109621 ] + wiggle [ 0.96288 ] + stumble [ 0.040154 ] + stomp [ -0.019753 ] + width [ 29.685 ] + height [ 29.685 ] + flags [ "b" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -40 -350 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 10 -330 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 2.99183 -362.525 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2149" [ + vis [ "2149" "2118" "2119" "2117" "2116" "2154" "2115" "2114" "2113" "2148" ] + suit_edge [ 123 386 ] + suit_edge [ 387 122 ] + suit_edge [ 461 123 ] + suit_edge [ 123 461 ] + suit_edge [ 461 122 ] + suit_edge [ 122 461 ] + battle_cell [ 20 20 -90 -360 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -70 -370 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb18:20_DNARoot" [ + pos [ -110 -360 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 15 -4.00001 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.921112 0.921112 0.921112 ] + ] + ] + ] + visgroup "2150" [ + vis [ "2150" "2120" "2121" "2122" "2119" "2154" "2123" "2124" "2118" "2143" ] + suit_edge [ 338 150 ] + suit_edge [ 150 149 ] + suit_edge [ 149 148 ] + suit_edge [ 147 146 ] + suit_edge [ 146 145 ] + suit_edge [ 145 339 ] + suit_edge [ 146 151 ] + suit_edge [ 151 146 ] + suit_edge [ 149 151 ] + suit_edge [ 151 149 ] + suit_edge [ 150 152 ] + suit_edge [ 152 150 ] + suit_edge [ 145 152 ] + suit_edge [ 152 145 ] + suit_edge [ 148 490 ] + suit_edge [ 490 148 ] + suit_edge [ 147 490 ] + suit_edge [ 490 147 ] + battle_cell [ 20 20 -150 -410 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -130 -430 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb66:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Laughing Gas Station" ] + pos [ -130 -390 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ 0 0 0.49 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.07 0 1.11 ] + scale [ 1.1 1 1 ] + kern [ 0.032945 ] + width [ 38.5624 ] + height [ 38.5624 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.666667 0.0823529 0.462745 1 ] + pos [ -0.02 0 -0.21 ] + scale [ 1.5 1 1.5 ] + kern [ 0.034834 ] + width [ 27.7616 ] + height [ 27.7616 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + landmark_building "tb65:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Mary's Go Around Travel Company" ] + pos [ -170 -410 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.29 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ 0 0 -0.14 ] + scale [ 1 1 1.3 ] + width [ 28.6049 ] + height [ 28.6049 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.08 ] + scale [ 1.2 1 2.4 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.25098 0.501961 1 ] + pos [ 0 0 -1.17 ] + scale [ 0.7 1 0.7 ] + width [ 23.6412 ] + height [ 23.6412 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + ] + ] + ] + flat_building "tb65:20_DNARoot" [ + pos [ -170 -430 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ -9.99997 0 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.926619 0.926619 0.926619 ] + ] + ] + flat_building "tb66:20_DNARoot" [ + pos [ -130 -415 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -165.761 -415.208 -5.34058e-005 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "2151" [ + vis [ "2151" "2143" "2125" "2124" "2123" "2122" "2126" "2152" "2127" "2135" ] + ] + visgroup "2152" [ + vis [ "2152" "2136" "2151" "2125" "2126" "2127" "2135" "2128" "2137" "2138" "2139" "2140" "2141" "2129" "2130" ] + ] + visgroup "2153" [ + vis [ "2153" "2131" "2142" "2130" "2141" "2129" "2140" "2139" "2138" "2137" ] + suit_edge [ 379 242 ] + suit_edge [ 242 243 ] + suit_edge [ 244 245 ] + suit_edge [ 245 380 ] + suit_edge [ 242 250 ] + suit_edge [ 250 242 ] + suit_edge [ 245 250 ] + suit_edge [ 250 245 ] + suit_edge [ 483 244 ] + suit_edge [ 244 483 ] + suit_edge [ 483 243 ] + suit_edge [ 243 483 ] + battle_cell [ 20 20 -325 -350 -0.5 ] + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ -340 -370 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb59:20_DNARoot" [ + pos [ -315 -370 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb59:20_DNARoot" [ + pos [ -325 -370 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb69:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Muldoon's Maroon Balloons" ] + pos [ -336 -320 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + nhpr [ -0 0 1 ] + baseline [ + code [ "mickey" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ -0.12 0 1.06 ] + nhpr [ -0 0 1 ] + scale [ 0.9 1 0.9 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "c" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ -0.05 0 -0.2 ] + scale [ 0.9 1 1 ] + width [ 31.738 ] + height [ 31.738 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb69:20_DNARoot" [ + pos [ -345 -320 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -354.999 -319.999 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2154" [ + vis [ "2154" "2119" "2118" "2120" "2150" "2121" "2149" "2117" "2116" "2115" "2114" "2113" "2148" ] + suit_edge [ 131 439 ] + suit_edge [ 439 332 ] + suit_edge [ 331 440 ] + suit_edge [ 440 130 ] + suit_edge [ 440 136 ] + suit_edge [ 136 440 ] + suit_edge [ 439 136 ] + suit_edge [ 136 439 ] + battle_cell [ 20 20 -120 -330 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -130 -350 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb70:random20_DNARoot" [ + pos [ -130 -310 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 0 ] + ] + ] + ] + flat_building "tb66:20_DNARoot" [ + pos [ -110 -350 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + landmark_building "tb70:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Soup Forks" ] + pos [ -125 -310 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -1.69 ] + scale [ 1.4 1 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.552941 0.0196078 0.207843 1 ] + pos [ -0.08 0 -0.84 ] + scale [ 1.6 1 1.9 ] + kern [ 0.101819 ] + wiggle [ 2.06752 ] + stumble [ 0.07262 ] + stomp [ 0.070247 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_facade_aN_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 2 -4 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_facade_eN_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 22 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 21.9794 -3.51221 1.17856 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 3 -4 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "2155" [ + vis [ "2155" "2103" "2104" "2105" "2106" "2107" "2109" "2108" "2110" "2134" "2133" "2145" "2111" "2146" "2144" "2132" "2102" "2101" ] + suit_edge [ 40 272 ] + suit_edge [ 419 418 ] + battle_cell [ 20 20 -310 -190 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -290 -200 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ -290 -180 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ -330 -200 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 13.1309 -0.0579834 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 15.705 6.12888 14.14 ] + nhpr [ -90 0 -0 ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -323.469 -190.811 0 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2156" [ + vis [ "2156" "2125" ] + street "street_TT_pond_DNARoot" [ + code [ "street_TT_pond" ] + pos [ 20.0004 -665 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + group "props" [ + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 0 -625 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ -21.6709 -664.913 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.31765 1.31765 1.31765 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 43.9344 -647.039 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 30.0001 -700 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.06961 1.06961 1.06961 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 60.0001 -665 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.37669 1.37669 1.37669 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 5 -700 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -3.50123 -684.431 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.22166 1.22166 1.22166 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -3.05211 -646.89 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.19081 1.19081 1.19081 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 44.9775 -684.646 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 40 -625 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.14876 1.14876 1.14876 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 74.2261 -633.947 6.12889 ] + nhpr [ 90 0 -0 ] + scale [ 1.65844 1.65844 1.65844 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -21.8402 -619.825 5.49219 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 7.91282 -731.192 6.97894 ] + nhpr [ 90 0 -0 ] + scale [ 1.48928 1.48928 1.48928 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 58.7126 -719.839 5.53402 ] + nhpr [ 90 0 -0 ] + scale [ 1.65782 1.65782 1.65782 ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 11.4 -633 0 ] + nhpr [ -87 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 35.2944 -672.413 0.445984 ] + nhpr [ 90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 35.3701 -658.097 0.360748 ] + nhpr [ 90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 4.40166 -671.547 0.418176 ] + nhpr [ -90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 4.45088 -658.174 0.431656 ] + nhpr [ -90 0 -0 ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/toontown_central_2200.dna b/ttmodels/src/dna/toontown_central_2200.dna new file mode 100644 index 00000000..3420dd57 --- /dev/null +++ b/ttmodels/src/dna/toontown_central_2200.dna @@ -0,0 +1,12008 @@ +store_suit_point [ 3, STREET_POINT, -575 50 -0.5 ] +store_suit_point [ 4, STREET_POINT, -585 50 -0.5 ] +store_suit_point [ 11, STREET_POINT, -575 75 -0.5 ] +store_suit_point [ 12, STREET_POINT, -560 75 -0.5 ] +store_suit_point [ 13, STREET_POINT, -560 85 -0.5 ] +store_suit_point [ 14, STREET_POINT, -585 85 -0.5 ] +store_suit_point [ 16, STREET_POINT, -538 75 -0.5 ] +store_suit_point [ 17, STREET_POINT, -520 75 -0.5 ] +store_suit_point [ 18, STREET_POINT, -520 85 -0.5 ] +store_suit_point [ 19, STREET_POINT, -538 85 -0.5 ] +store_suit_point [ 21, FRONT_DOOR_POINT, -538 96 0, 4 ] +store_suit_point [ 22, STREET_POINT, -505 75 -0.5 ] +store_suit_point [ 23, STREET_POINT, -505 60 -0.5 ] +store_suit_point [ 24, STREET_POINT, -495 60 -0.5 ] +store_suit_point [ 25, STREET_POINT, -495 85 -0.5 ] +store_suit_point [ 30, STREET_POINT, -505 -60 -0.5 ] +store_suit_point [ 31, STREET_POINT, -495 -60 -0.5 ] +store_suit_point [ 39, STREET_POINT, -505 -68 -0.5 ] +store_suit_point [ 40, STREET_POINT, -505 -85 -0.5 ] +store_suit_point [ 41, STREET_POINT, -480 -85 -0.5 ] +store_suit_point [ 42, STREET_POINT, -480 -75 -0.5 ] +store_suit_point [ 43, STREET_POINT, -495 -75 -0.5 ] +store_suit_point [ 44, STREET_POINT, -495 -68 -0.5 ] +store_suit_point [ 45, FRONT_DOOR_POINT, -516 -68 0, 8 ] +store_suit_point [ 46, STREET_POINT, -465 -85 -0.5 ] +store_suit_point [ 50, STREET_POINT, -465 -100 -0.5 ] +store_suit_point [ 51, STREET_POINT, -465 -120 -0.5 ] +store_suit_point [ 53, STREET_POINT, -440 -125 -0.5 ] +store_suit_point [ 54, STREET_POINT, -455 -125 -0.5 ] +store_suit_point [ 55, STREET_POINT, -455 -100 -0.5 ] +store_suit_point [ 59, STREET_POINT, -420 -125 -0.5 ] +store_suit_point [ 61, STREET_POINT, -385 -156 -0.5 ] +store_suit_point [ 62, STREET_POINT, -385 -110 -0.5 ] +store_suit_point [ 63, STREET_POINT, -395 -110 -0.5 ] +store_suit_point [ 64, STREET_POINT, -395 -125 -0.5 ] +store_suit_point [ 65, STREET_POINT, -410 -125 -0.5 ] +store_suit_point [ 67, STREET_POINT, -385 -89 -0.5 ] +store_suit_point [ 68, STREET_POINT, -385 -60 -0.5 ] +store_suit_point [ 69, STREET_POINT, -395 -60 -0.5 ] +store_suit_point [ 70, STREET_POINT, -395 -89 -0.5 ] +store_suit_point [ 71, FRONT_DOOR_POINT, -406 -89 0, 11 ] +store_suit_point [ 73, STREET_POINT, -385 -47 -0.5 ] +store_suit_point [ 74, STREET_POINT, -385 -35 -0.5 ] +store_suit_point [ 75, STREET_POINT, -410 -35 -0.5 ] +store_suit_point [ 76, STREET_POINT, -410 -45 -0.5 ] +store_suit_point [ 77, STREET_POINT, -395 -45 -0.5 ] +store_suit_point [ 79, FRONT_DOOR_POINT, -373 -47 0, 12 ] +store_suit_point [ 80, STREET_POINT, -425 -35 -0.5 ] +store_suit_point [ 83, STREET_POINT, -435 -45 -0.5 ] +store_suit_point [ 84, STREET_POINT, -430 -45 -0.5 ] +store_suit_point [ 91, STREET_POINT, -435 90 -0.5 ] +store_suit_point [ 100, STREET_POINT, -410 115 -0.5 ] +store_suit_point [ 101, STREET_POINT, -418 115 -0.5 ] +store_suit_point [ 102, STREET_POINT, -435 115 -0.5 ] +store_suit_point [ 115, FRONT_DOOR_POINT, -314 87 0, 48 ] +store_suit_point [ 117, STREET_POINT, -345 -10 -0.5 ] +store_suit_point [ 118, STREET_POINT, -335 -10 -0.5 ] +store_suit_point [ 121, STREET_POINT, -345 -35 -0.5 ] +store_suit_point [ 123, STREET_POINT, -320 -35 -0.5 ] +store_suit_point [ 125, STREET_POINT, -335 -25 -0.5 ] +store_suit_point [ 155, STREET_POINT, -157 49 -0.5 ] +store_suit_point [ 185, STREET_POINT, -575 -3 -0.5 ] +store_suit_point [ 186, STREET_POINT, -575 10 -0.5 ] +store_suit_point [ 187, STREET_POINT, -585 10 -0.5 ] +store_suit_point [ 188, STREET_POINT, -585 -3 -0.5 ] +store_suit_point [ 189, FRONT_DOOR_POINT, -595 -8 0, 1 ] +store_suit_point [ 190, STREET_POINT, -575 25 -0.5 ] +store_suit_point [ 191, STREET_POINT, -585 25 -0.5 ] +store_suit_point [ 192, STREET_POINT, -575 33 -0.5 ] +store_suit_point [ 193, STREET_POINT, -585 33 -0.5 ] +store_suit_point [ 194, FRONT_DOOR_POINT, -563 25 0, 30 ] +store_suit_point [ 195, FRONT_DOOR_POINT, -606 33 0, 29 ] +store_suit_point [ 208, STREET_POINT, -505 -34 -0.5 ] +store_suit_point [ 213, STREET_POINT, -425 -20 -0.5 ] +store_suit_point [ 214, STREET_POINT, -425 -8 -0.5 ] +store_suit_point [ 215, STREET_POINT, -425 20 -0.5 ] +store_suit_point [ 216, STREET_POINT, -435 20 -0.5 ] +store_suit_point [ 217, STREET_POINT, -435 -8 -0.5 ] +store_suit_point [ 218, STREET_POINT, -435 -20 -0.5 ] +store_suit_point [ 219, FRONT_DOOR_POINT, -446 -8 0, 14 ] +store_suit_point [ 221, STREET_POINT, -435 75 -0.5 ] +store_suit_point [ 222, STREET_POINT, -435 70 -0.5 ] +store_suit_point [ 223, STREET_POINT, -425 45 -0.5 ] +store_suit_point [ 226, FRONT_DOOR_POINT, -454 70 0, 33 ] +store_suit_point [ 227, STREET_POINT, -280 -35 -0.5 ] +store_suit_point [ 228, STREET_POINT, -280 -25 -0.5 ] +store_suit_point [ 229, STREET_POINT, -320 -25 -0.5 ] +store_suit_point [ 232, STREET_POINT, -185 50 -0.5 ] +store_suit_point [ 237, STREET_POINT, -135 49 -0.5 ] +store_suit_point [ 247, FRONT_DOOR_POINT, -430 -55 0, 13 ] +store_suit_point [ 249, FRONT_DOOR_POINT, -338 -46 0, 20 ] +store_suit_point [ 260, STREET_POINT, -215 59 -0.5 ] +store_suit_point [ 263, STREET_POINT, -455 -75 -0.5 ] +store_suit_point [ 264, STREET_POINT, -335 89 -0.5 ] +store_suit_point [ 265, STREET_POINT, -335 115 -0.5 ] +store_suit_point [ 266, STREET_POINT, -335 10 -0.5 ] +store_suit_point [ 267, STREET_POINT, -345 10 -0.5 ] +store_suit_point [ 268, STREET_POINT, -335 30 -0.5 ] +store_suit_point [ 271, STREET_POINT, -345 30 -0.5 ] +store_suit_point [ 273, SIDE_DOOR_POINT, -600 10 0, 1 ] +store_suit_point [ 274, SIDE_DOOR_POINT, -560 3 0, 30 ] +store_suit_point [ 275, SIDE_DOOR_POINT, -600 52 0, 29 ] +store_suit_point [ 276, SIDE_DOOR_POINT, -561 105 0, 4 ] +store_suit_point [ 277, SIDE_DOOR_POINT, -470 102 0, 5 ] +store_suit_point [ 280, SIDE_DOOR_POINT, -520 -50 0, 8 ] +store_suit_point [ 281, SIDE_DOOR_POINT, -489 -115 0, 43 ] +store_suit_point [ 283, SIDE_DOOR_POINT, -430 -110 0, 11 ] +store_suit_point [ 284, SIDE_DOOR_POINT, -371 -99 0, 12 ] +store_suit_point [ 285, SIDE_DOOR_POINT, -415 -60 0, 13 ] +store_suit_point [ 286, SIDE_DOOR_POINT, -450 -40 0, 14 ] +store_suit_point [ 292, SIDE_DOOR_POINT, -360 -13 0, 20 ] +store_suit_point [ 293, SIDE_DOOR_POINT, -287 -50 0, 35 ] +store_suit_point [ 297, SIDE_DOOR_POINT, -143 26 0, 40 ] +store_suit_point [ 300, STREET_POINT, -495 -25 -0.5 ] +store_suit_point [ 302, STREET_POINT, -519 -20 -0.5 ] +store_suit_point [ 303, STREET_POINT, -519 -34 -0.5 ] +store_suit_point [ 309, STREET_POINT, -494 25 -0.5 ] +store_suit_point [ 312, STREET_POINT, -519 34 -0.5 ] +store_suit_point [ 313, STREET_POINT, -519 20 -0.5 ] +store_suit_point [ 314, STREET_POINT, -519 -6 -0.5 ] +store_suit_point [ 315, FRONT_DOOR_POINT, -530 0 0, 31 ] +store_suit_point [ 316, SIDE_DOOR_POINT, -535 16 0, 31 ] +store_suit_point [ 317, STREET_POINT, -465 -175 -0.5 ] +store_suit_point [ 318, STREET_POINT, -440 -175 -0.5 ] +store_suit_point [ 319, FRONT_DOOR_POINT, -443 -196 0, 43 ] +store_suit_point [ 321, STREET_POINT, -385 -175 -0.5 ] +store_suit_point [ 323, SIDE_DOOR_POINT, -361 -155 0, 44 ] +store_suit_point [ 324, STREET_POINT, -390 45 -0.5 ] +store_suit_point [ 325, SIDE_DOOR_POINT, -390 31 0, 17 ] +store_suit_point [ 326, STREET_POINT, -381 45 -0.5 ] +store_suit_point [ 327, STREET_POINT, -345 45 -0.5 ] +store_suit_point [ 328, FRONT_DOOR_POINT, -380 33 0, 17 ] +store_suit_point [ 329, STREET_POINT, -335 70 -0.5 ] +store_suit_point [ 330, SIDE_DOOR_POINT, -459 95 0, 33 ] +store_suit_point [ 331, SIDE_DOOR_POINT, -310 120 0, 48 ] +store_suit_point [ 333, STREET_POINT, -240 -6 -0.5 ] +store_suit_point [ 335, STREET_POINT, -240 15 -0.5 ] +store_suit_point [ 336, FRONT_DOOR_POINT, -205 -16 0, 47 ] +store_suit_point [ 338, STREET_POINT, -250 15 -0.5 ] +store_suit_point [ 341, STREET_POINT, -240 50 -0.5 ] +store_suit_point [ 342, STREET_POINT, -215 50 -0.5 ] +store_suit_point [ 343, STREET_POINT, -250 59 -0.5 ] +store_suit_point [ 344, STREET_POINT, -200 50 -0.5 ] +store_suit_point [ 345, STREET_POINT, -185 59 -0.5 ] +store_suit_point [ 346, STREET_POINT, -200 59 -0.5 ] +store_suit_point [ 347, FRONT_DOOR_POINT, -201 40 0, 25 ] +store_suit_point [ 348, SIDE_DOOR_POINT, -186 36 0, 25 ] +store_suit_point [ 350, STREET_POINT, -112 49 -0.5 ] +store_suit_point [ 351, STREET_POINT, -111 100 -0.5 ] +store_suit_point [ 352, STREET_POINT, -120 100 -0.5 ] +store_suit_point [ 353, STREET_POINT, -121 59 -0.5 ] +store_suit_point [ 354, FRONT_DOOR_POINT, -122 29 0, 28 ] +store_suit_point [ 355, SIDE_DOOR_POINT, -95 55 0, 28 ] +store_suit_point [ 356, SIDE_DOOR_POINT, -113 124 0, 27 ] +store_suit_point [ 357, FRONT_DOOR_POINT, -141 95 0, 27 ] +store_suit_point [ 358, STREET_POINT, -135 59 -0.5 ] +store_suit_point [ 359, STREET_POINT, -157 59 -0.5 ] +store_suit_point [ 360, FRONT_DOOR_POINT, -165 72 0, 41 ] +store_suit_point [ 361, SIDE_DOOR_POINT, -142 75 0, 41 ] +store_suit_point [ 362, FRONT_DOOR_POINT, -357 13 0, 34 ] +store_suit_point [ 363, FRONT_DOOR_POINT, -298 -14 0, 39 ] +store_suit_point [ 364, SIDE_DOOR_POINT, -360 25 0, 34 ] +store_suit_point [ 365, STREET_POINT, -360 115 -0.5 ] +store_suit_point [ 366, STREET_POINT, -380 115 -0.5 ] +store_suit_point [ 367, FRONT_DOOR_POINT, -378 136 0, 16 ] +store_suit_point [ 368, FRONT_DOOR_POINT, -158 28 0, 40 ] +store_suit_point [ 369, STREET_POINT, -510 -25 -0.5 ] +store_suit_point [ 370, STREET_POINT, -510 -20 -0.5 ] +store_suit_point [ 371, FRONT_DOOR_POINT, -469 -28 0, 32 ] +store_suit_point [ 372, STREET_POINT, -510 -6 -0.5 ] +store_suit_point [ 373, STREET_POINT, -510 20 -0.5 ] +store_suit_point [ 374, SIDE_DOOR_POINT, -465 -8 0, 32 ] +store_suit_point [ 375, STREET_POINT, -510 25 -0.5 ] +store_suit_point [ 376, FRONT_DOOR_POINT, -468 38 0, 5 ] +store_suit_point [ 377, STREET_POINT, -505 34 -0.5 ] +store_suit_point [ 378, STREET_POINT, -435 80 -0.5 ] +store_suit_point [ 381, STREET_POINT, -250 -7 -0.5 ] +store_suit_point [ 383, STREET_POINT, -259 -25 -0.5 ] +store_suit_point [ 384, SIDE_DOOR_POINT, -201 -33 0, 47 ] +store_suit_point [ 385, STREET_POINT, -251 -35 -0.5 ] +store_suit_point [ 386, FRONT_DOOR_POINT, -260 -61 0, 35 ] +store_suit_point [ 387, SIDE_DOOR_POINT, -430 140 0, 16 ] +store_suit_point [ 388, STREET_POINT, -430 -175 -0.5 ] +store_suit_point [ 389, STREET_POINT, -406 -175 -0.5 ] +store_suit_point [ 390, FRONT_DOOR_POINT, -405 -197 0, 44 ] +store_suit_point [ 391, STREET_POINT, -251 -16 -0.5 ] +store_suit_point [ 392, STREET_POINT, -240 -16 -0.5 ] +store_suit_point [ 393, STREET_POINT, -259 -7 -0.5 ] +group "toontownCentral" [ + visgroup "2201" [ + vis [ "2201" "2202" "2203" "2204" "2227" ] + suit_edge [ 185 186 ] + suit_edge [ 187 188 ] + suit_edge [ 188 185 ] + suit_edge [ 188 189 ] + suit_edge [ 189 188 ] + suit_edge [ 274 186 ] + suit_edge [ 186 274 ] + suit_edge [ 274 187 ] + suit_edge [ 187 274 ] + suit_edge [ 275 4 ] + suit_edge [ 4 275 ] + suit_edge [ 275 3 ] + suit_edge [ 3 275 ] + suit_edge [ 276 14 ] + suit_edge [ 14 276 ] + suit_edge [ 276 11 ] + suit_edge [ 11 276 ] + suit_edge [ 277 25 ] + suit_edge [ 25 277 ] + suit_edge [ 277 22 ] + suit_edge [ 22 277 ] + battle_cell [ 20 20 -578.615 -1.88722 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -560 -30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb1:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "" ] + pos [ -600 -20 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 12 -10 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.2 1.2 1.2 ] + color [ 0.9 0.56 0.34 1 ] + ] + ] + prop "linktunnel_mm_4101_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ -580 -30 0 ] + nhpr [ 180 0 -0 ] + sign [ + code [ "tunnel_sign_magenta" ] + pos [ 0 0 0.13 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ -0.44 0 -0.89 ] + scale [ 1.5 1 1.5 ] + kern [ -0.10813 ] + wiggle [ -2.85301 ] + width [ 44.8914 ] + height [ 44.8914 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.501961 1 1 ] + pos [ 0.07 0 -1.88 ] + nhpr [ -0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 45.996 ] + height [ 45.996 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.6 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "minnieSZ" ] + ] + ] + ] + ] + flat_building "tb1:20_DNARoot" [ + pos [ -600 5 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -560 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.91 0.54 0.44 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ -600 -30 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.701961 0.266667 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -560.001 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5 -6 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ -560 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -588.889 -25.385 -0.5 ] + nhpr [ 180 0 0 ] + ] + ] + visgroup "2202" [ + vis [ "2201" "2202" "2203" "2204" "2205" "2227" ] + suit_edge [ 3 11 ] + suit_edge [ 11 12 ] + suit_edge [ 13 14 ] + suit_edge [ 14 4 ] + battle_cell [ 20 20 -580 75 -0.5 ] + group "streets" [ + street "street_interior_corner_slope_DNARoot" [ + code [ "street_interior_corner_slope" ] + pos [ -610 90 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_L_DNARoot" [ + code [ "street_slope_transition_L" ] + pos [ -580 110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_R_DNARoot" [ + code [ "street_slope_transition_R" ] + pos [ -610 80 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ -580 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random_DNARoot" [ + pos [ -600 60 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -580 110 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ -14 -14 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.863359 0.863359 0.863359 ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -580 110 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -610 94.9999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -625 79.9999 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -610 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.27 0.27 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ -610 60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.71 0.27 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3.99994 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb29:20_DNARoot" [ + pos [ -600 45 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88 0.44 0.15 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -610 79.9999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -595 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random_DNARoot" [ + pos [ -560 110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -560 50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -565.151 65.2674 0 ] + nhpr [ -90 0 -0 ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ -560 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.13 0.75 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.13 0.75 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -596.266 64.9908 -2.28882e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2203" [ + vis [ "2228" "2229" "2227" "2207" "2208" "2206" "2205" "2204" "2203" "2202" "2201" "2210" "2209" ] + suit_edge [ 16 17 ] + suit_edge [ 18 19 ] + suit_edge [ 19 21 ] + suit_edge [ 21 19 ] + suit_edge [ 16 21 ] + suit_edge [ 21 16 ] + suit_edge [ 12 16 ] + suit_edge [ 19 13 ] + battle_cell [ 20 20 -545 80 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -560 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb4:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Movie Multiplex" ] + pos [ -550 100 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 12.46 -3.52 3.22 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -0.4 ] + kern [ 0.070481 ] + wiggle [ 2.28808 ] + stumble [ 0.042398 ] + stomp [ 0.02 ] + flags [ "d" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.58 ] + kern [ 0.040758 ] + wiggle [ 1.68319 ] + stumble [ 0.026923 ] + stomp [ 0.022954 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -530 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ -545 60 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.129412 0.74902 0.309804 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.129412 0.74902 0.352941 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ -535 60 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -560 100 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.411765 0.266667 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 2.0705 -32.8676 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 0.827451 0.905882 0.913725 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -546.791 63.5223 7.62939e-006 ] + nhpr [ 180 0 -0 ] + ] + ] + visgroup "2204" [ + vis [ "2201" "2202" "2203" "2204" "2205" "2206" "2207" "2208" "2227" "2228" "2229" "2210" "2209" ] + suit_edge [ 17 22 ] + suit_edge [ 22 23 ] + suit_edge [ 24 25 ] + suit_edge [ 25 18 ] + battle_cell [ 20 20 -502.204 77.2296 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -520 100 7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -480 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -470 100 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -470 110 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ -500 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 16.59 -1.28 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 7.86725 -15.9631 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ -500 100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:10_10_DNARoot" [ + pos [ -485 110 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ -470 95 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -480 80 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.839216 0.588235 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.352941 0.690196 0.490196 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -470 110 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 5.05 -22.42 0.58 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 1 0.92 0.59 1 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.96 3.67 17.41 ] + nhpr [ -0 0 -0 ] + color [ 0.9 0.56 0.34 1 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 19 -1 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ -520 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0941176 0.541176 0.329412 1 ] + count [ 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3.24 1.28 18.95 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ -0.04 0 0.61 ] + nhpr [ -0 0 -6 ] + scale [ 1.7 1 1.7 ] + kern [ 0.039931 ] + width [ 29.9186 ] + height [ 29.9186 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.76 ] + nhpr [ -0 0 -6 ] + scale [ 1.2 1 1.2 ] + kern [ 0.05 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 0.627451 1 ] + pos [ 0 0 -1.91 ] + nhpr [ -0 0 -2 ] + kern [ 0.029553 ] + width [ 36.1481 ] + height [ 36.1481 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 9.8855 -2.939 0 ] + nhpr [ -0 0 -0 ] + ] + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 9.03625 -3.65375 0.0250034 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_facade_d_DNARoot" [ + code [ "prop_facade_d" ] + pos [ -42.4342 -112.819 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ -470 80 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.32 0.54 0.36 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -483.955 66.5998 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "animated_prop_generic_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + pos [ -487.053 102.437 2.28882e-005 ] + nhpr [ -15 0 0 ] + ] + ] + visgroup "2205" [ + vis [ "2202" "2203" "2204" "2205" "2206" "2207" "2208" "2209" "2210" "2228" "2229" ] + suit_edge [ 309 24 ] + suit_edge [ 312 313 ] + suit_edge [ 373 316 ] + suit_edge [ 316 373 ] + suit_edge [ 373 375 ] + suit_edge [ 375 309 ] + suit_edge [ 309 376 ] + suit_edge [ 376 309 ] + suit_edge [ 23 377 ] + suit_edge [ 377 312 ] + suit_edge [ 377 376 ] + suit_edge [ 376 377 ] + battle_cell [ 20 20 -499.904 39.297 -0.5 ] + group "streets" [ + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ -535 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb0:random20_DNARoot" [ + pos [ -520 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 0 ] + ] + ] + ] + landmark_building "tb5:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Wiseacre's Noisemakers" ] + pos [ -465 50 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.26 ] + scale [ 1.3 1 1 ] + baseline [ + code [ "humanist" ] + color [ 1 0 0 1 ] + pos [ 0 0 -0.24 ] + scale [ 1.6 1 1.3 ] + kern [ 0.150336 ] + width [ 28.4657 ] + height [ 28.4657 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.133333 0.133333 1 1 ] + pos [ 0 0 -1.18 ] + kern [ 0.134041 ] + width [ 30.409 ] + height [ 30.409 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -535 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 15.6288 -11.3026 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ -465 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 15 -15 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -535 35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 0.74 4.33 17.06 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 9.68168 -16.1115 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ -535 20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb5:20_DNARoot" [ + pos [ -480 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ -465 25 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.411765 0.266667 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -474.543 54.9492 1.52588e-005 ] + nhpr [ -66.2245 0 -0 ] + ] + ] + visgroup "2206" [ + vis [ "2203" "2204" "2205" "2206" "2207" "2208" "2209" "2210" "2228" "2229" ] + suit_edge [ 30 39 ] + suit_edge [ 39 40 ] + suit_edge [ 40 41 ] + suit_edge [ 42 43 ] + suit_edge [ 44 31 ] + suit_edge [ 43 44 ] + suit_edge [ 39 45 ] + suit_edge [ 45 39 ] + suit_edge [ 44 45 ] + suit_edge [ 45 44 ] + battle_cell [ 20 20 -500 -80 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -480 -100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -490 -110 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -510 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -530 -120 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -530 -100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb8:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Blue Glue" ] + pos [ -520 -80 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -3.52 ] + baseline [ + code [ "mickey" ] + color [ 0.00784314 0.721569 0.992157 1 ] + pos [ -0.27 0 0.43 ] + scale [ 1.1 1 1.8 ] + kern [ 0.075906 ] + width [ 45.0755 ] + height [ 45.0755 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0.0156863 0.372549 0.635294 1 ] + pos [ 0 0 -0.44 ] + scale [ 1.3 1 1 ] + kern [ 0.039288 ] + width [ 38.7072 ] + height [ 38.7072 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "2" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + ] + ] + ] + flat_building "tb43:20_DNARoot" [ + pos [ -490 -135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 5 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -25 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 30 -16 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ -510 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ -520 -90 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -4.99998 -45 0 ] + nhpr [ 180 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 4.99999 -5.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ -500 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -500 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb8:random20_DNARoot" [ + pos [ -490 -110 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 5 -2.00002 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -520 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_mickey_on_horse_DNARoot" [ + code [ "prop_goofy_statue" ] + pos [ -5.00003 -15 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.745441 0.745441 0.745441 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -530 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -530 -110 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 1.00006 17 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.21456 1.21456 1.21456 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -32 4.00009 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -530 -100 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb8:random_DNARoot" [ + pos [ -540 -90 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -490 -120 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -490 -120 0 ] + nhpr [ 180 0 -0 ] + width [ 5 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.42 0.39 0.61 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -485.093 -64.3452 -1.52588e-005 ] + nhpr [ -30 0 -0 ] + ] + ] + visgroup "2207" [ + vis [ "2203" "2204" "2205" "2206" "2207" "2208" "2209" "2210" "2228" "2229" ] + suit_edge [ 41 46 ] + suit_edge [ 55 263 ] + suit_edge [ 46 50 ] + suit_edge [ 263 42 ] + battle_cell [ 20 20 -465 -80 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -480 -60 -7.62939e-006 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ -440 -95 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -440 -75 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.944882 0.711441 0.559518 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 23 -6.00003 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -440 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.55312 -9.35229 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 11.24 3.35 16.26 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -450 -60 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.110236 0.669291 0.333333 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.109804 0.666667 0.329412 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb32:random20_DNARoot" [ + pos [ -465 -60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.39 1.37 18.27 ] + nhpr [ -0 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -443.621 -72.4842 -7.62939e-006 ] + nhpr [ -98.9974 0 -0 ] + ] + ] + visgroup "2208" [ + vis [ "2203" "2204" "2205" "2206" "2207" "2208" "2209" "2210" "2211" "2228" "2229" "2212" ] + suit_edge [ 50 51 ] + suit_edge [ 53 54 ] + suit_edge [ 54 55 ] + suit_edge [ 281 54 ] + suit_edge [ 54 281 ] + suit_edge [ 281 51 ] + suit_edge [ 51 281 ] + suit_edge [ 283 53 ] + suit_edge [ 53 283 ] + suit_edge [ 284 67 ] + suit_edge [ 67 284 ] + suit_edge [ 284 70 ] + suit_edge [ 70 284 ] + suit_edge [ 51 317 ] + suit_edge [ 317 318 ] + suit_edge [ 318 319 ] + suit_edge [ 319 318 ] + suit_edge [ 318 388 ] + battle_cell [ 20 20 -460 -150 -0.5 ] + group "streets" [ + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -440 -110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_slope_DNARoot" [ + code [ "street_interior_corner_slope" ] + pos [ -470 -200 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_L_DNARoot" [ + code [ "street_slope_transition_L" ] + pos [ -490 -130 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -440 -150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -440 -150 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ -440 -130 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ -460 -155 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x10_DNARoot" [ + code [ "street_slope_30x10" ] + pos [ -460 -135 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ -445 -170 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_10_DNARoot" [ + code [ "street_park_straight_10" ] + pos [ -430 -150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb43:toon_landmark_TT_B2_raised_DNARoot" [ + code [ "toon_landmark_TT_B2_raised" ] + title [ "Ragtime Dry Cleaners" ] + pos [ -437 -200 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ -12.717 7.47189 23.8009 ] + nhpr [ -30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "humanist" ] + color [ 0.72549 0 0.72549 1 ] + pos [ 0 0 0.36 ] + nhpr [ -0 0 -7 ] + scale [ 2 1 2 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.93 ] + nhpr [ -0 0 -4 ] + scale [ 0.9 1 1.1 ] + kern [ 0.056488 ] + width [ 29.627 ] + height [ 29.627 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0 0 1 ] + pos [ 0 0 -2.1 ] + nhpr [ -0 0 -2 ] + kern [ 0.040949 ] + width [ 27.6297 ] + height [ 27.6297 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 3 -3 0 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.54 0.44 1 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ -7 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 3 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 13 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 23 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 33 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -7 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 13 -5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 23 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -2 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 18 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 28 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 38 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 3 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 13 -10 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 3 -5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 3 -10 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 43 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 33 -10 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -450 -200 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -460 -200 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -475 -200 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 5.00015 20 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 34.9999 4.99997 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.10692 1.10692 1.10692 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -490 -200 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -490 -185 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 0.999985 -15 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -490 -165 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 5.00006 0 0 ] + nhpr [ -0 0 -0 ] + color [ 0.24 0.79 0.32 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 15 -5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 15 -10 0 ] + nhpr [ 90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 15 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 20 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 25 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 25 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 30 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 35 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 40 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 45 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 45 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 45 -5 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 45 0 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 45 -1 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 5.00002 0 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 5 -9.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 5 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 0 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -4.99998 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -4.99998 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -9.99998 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -15 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -15 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -20 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -25 -10 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -490 -145 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -460 -200 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb43:random_DNARoot" [ + pos [ -505 -185 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -474.63 -147.157 1.52588e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2209" [ + vis [ "2205" "2206" "2207" "2208" "2209" "2210" "2211" "2212" "2228" "2229" "2203" ] + suit_edge [ 59 53 ] + battle_cell [ 20 20 -426 -130 -0.5 ] + group "streets" [ + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ -440 -130 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -420 -150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_10_DNARoot" [ + code [ "street_park_straight_10" ] + pos [ -440 -150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb11:random20_DNARoot" [ + pos [ -440 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.917 0.592 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.592 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -4.99999 -4.99998 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 29 -35 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.815638 0.815638 0.815638 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 0 -40 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.762351 0.762351 0.762351 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 16.4365 -43.2518 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.798936 0.798936 0.798936 ] + ] + ] + flat_building "tb43:random20_DNARoot" [ + pos [ -418 -200 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -420 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 15 -4.99998 0 ] + nhpr [ -90 0 -0 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2210" [ + vis [ "2206" "2207" "2208" "2209" "2210" "2211" "2212" "2213" "2214" "2230" "2231" "2229" "2215" ] + suit_edge [ 61 62 ] + suit_edge [ 63 64 ] + suit_edge [ 64 65 ] + suit_edge [ 65 59 ] + suit_edge [ 321 61 ] + suit_edge [ 61 323 ] + suit_edge [ 323 61 ] + suit_edge [ 388 389 ] + suit_edge [ 389 321 ] + suit_edge [ 389 390 ] + suit_edge [ 390 389 ] + battle_cell [ 20 20 -391 -149 -0.5 ] + group "streets" [ + street "street_interior_corner_slope_DNARoot" [ + code [ "street_interior_corner_slope" ] + pos [ -360 -180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_R_DNARoot" [ + code [ "street_slope_transition_R" ] + pos [ -360 -130 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ -390 -110 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -410 -150 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -410 -150 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x10_DNARoot" [ + code [ "street_slope_30x10" ] + pos [ -390 -135 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ -405 -170 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ -390 -155 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x10_DNARoot" [ + code [ "street_slope_30x10" ] + pos [ -425 -170 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -420 -150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb44:toon_landmark_TT_A2_raised_DNARoot" [ + code [ "toon_landmark_TT_A2_raised" ] + title [ "" ] + pos [ -393 -200 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 7 -3 0 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ 32.366 -10.2228 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ 27.366 -10.2228 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ 17.366 -10.2228 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ 7.36597 -10.2228 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ -2.63403 -10.2228 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ -12.634 -10.2228 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone2" ] + pos [ -17.634 -10.2228 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 32 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 27 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 22 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 17 -10 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 17 -5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 7 -5 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 7 0 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 7 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 2 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -3 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -8 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -13 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_brickstucco_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -18 -10 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -380 -200 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -360 -140 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -30 15 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ur" ] + pos [ -4.99998 20 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -350 -140 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ -10 -1 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ -10 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 0 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 20 -1 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 20 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 10 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -9.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -4.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 4.99997 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -10 -4.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -5.00003 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -10 -9.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 9.99997 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -120 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 3 -15 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb44:random20_DNARoot" [ + pos [ -360 -150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -160 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 0 -0.999969 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 9.99998 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 20 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 30 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 0 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 9.99998 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 25 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 4.99998 -9.99997 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 30 -9.99997 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -9.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -4.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 25 -15 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -180 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -200 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 5.00024 10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ -25.0002 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb12:random_DNARoot" [ + pos [ -360 -110 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -360 -150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -350 -160 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb44:random_DNARoot" [ + pos [ -380 -215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -370 -110 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.75 0.31 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.75 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.32 0.54 0.36 1 ] + ] + ] + ] + ] + group "props" [ + ] + anim_prop "animated_prop_generic_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "animated_prop_generic_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_fightIdle" ] + pos [ -424.514 -185.081 1.52588e-005 ] + nhpr [ 180 0 0 ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -375.417 -146.899 0 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2211" [ + vis [ "2208" "2209" "2210" "2211" "2212" "2213" "2214" "2215" "2230" "2231" "2206" "2216" ] + suit_edge [ 62 67 ] + suit_edge [ 67 68 ] + suit_edge [ 69 70 ] + suit_edge [ 70 63 ] + suit_edge [ 70 71 ] + suit_edge [ 71 70 ] + suit_edge [ 67 71 ] + suit_edge [ 71 67 ] + battle_cell [ 20 20 -390.655 -84.8606 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -370 -110 -2.67029e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -370 -70 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb11:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Toontown Post Office" ] + pos [ -410 -100 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -1.64 ] + baseline [ + code [ "humanist" ] + color [ 0 0 0.501961 1 ] + pos [ 0 0 1.5 ] + scale [ 1.2 1 1.1 ] + kern [ 0.078515 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "cd" ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.58 ] + scale [ 2.1 1 1.8 ] + kern [ 0.07751 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + prop "prop_post_office_sign_DNARoot" [ + code [ "prop_post_office_sign" ] + pos [ 12 -3 12 ] + nhpr [ 90 0 -0 ] + scale [ 1.3 1.3 1.3 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -370 -60 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -410 -75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb11:random20_DNARoot" [ + pos [ -410 -110 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -370 -90 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0 0.623529 0.419608 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -370 -75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.44 0.91 0.63 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 5.00015 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -404.709 -72.7818 -2.67029e-005 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "2212" [ + vis [ "2209" "2210" "2211" "2212" "2213" "2214" "2215" "2230" "2231" "2208" "2216" ] + suit_edge [ 68 73 ] + suit_edge [ 74 75 ] + suit_edge [ 76 77 ] + suit_edge [ 73 74 ] + suit_edge [ 73 79 ] + suit_edge [ 79 73 ] + suit_edge [ 77 69 ] + suit_edge [ 77 79 ] + suit_edge [ 79 77 ] + battle_cell [ 20 20 -390 -45 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -410 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -410 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb12:random20_DNARoot" [ + pos [ -390 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.207843 0.729412 0.309804 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 18 -11 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 5.00002 -9.99997 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 1 1 0.59 1 ] + ] + ] + landmark_building "tb12:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Chortle Cafe" ] + pos [ -370 -35 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "tunnel_sign_red" ] + color [ 1 1 0.807843 1 ] + pos [ 0 0 0.21 ] + scale [ 1.2 1 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.541176 0 1 ] + pos [ 0 0 1.7 ] + scale [ 0.9 1 1.1 ] + width [ 3.42749 ] + height [ 3.42749 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ 0 0 -1.42 ] + scale [ 3.5 1 2.3 ] + kern [ 0.384904 ] + width [ 34.2395 ] + height [ 34.2395 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -410 0 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -390 -20 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.24 0.79 0.32 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.24 0.79 0.32 1 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -370 -20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.411765 0.266667 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 4 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 7.52 -1.26 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -385 -20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.16 1.53 18.71 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 1.49 -1.12 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2213" [ + vis [ "2210" "2211" "2212" "2213" "2214" "2215" "2216" "2230" "2231" ] + suit_edge [ 75 80 ] + suit_edge [ 83 84 ] + suit_edge [ 84 76 ] + suit_edge [ 80 247 ] + suit_edge [ 247 80 ] + suit_edge [ 84 247 ] + suit_edge [ 247 84 ] + suit_edge [ 80 213 ] + suit_edge [ 218 83 ] + suit_edge [ 285 76 ] + suit_edge [ 76 285 ] + suit_edge [ 285 75 ] + suit_edge [ 75 285 ] + suit_edge [ 286 83 ] + suit_edge [ 83 286 ] + suit_edge [ 286 80 ] + suit_edge [ 80 286 ] + battle_cell [ 20 20 -425 -40 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -410 -60 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb13:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Laughter Hours Cafe" ] + pos [ -420 -60 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.75 0.79 0.55 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.61 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.13 0 0.23 ] + scale [ 1.4 1 1.4 ] + kern [ 0.048886 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.98 ] + scale [ 1.4 1 1.4 ] + kern [ 0.081337 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -410 -60 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -450 -60 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.88 0.8 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 6.36 -6.87 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -450 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 9 -8 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 1 1 0.59 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 9 -34 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -450 -45 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.41 1.73 19.52 ] + nhpr [ -0 0 -0 ] + color [ 1 0.67 0.59 1 ] + ] + ] + flat_building "tb13:random20_DNARoot" [ + pos [ -435 -60 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -446.769 -40.6552 7.62939e-006 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2214" [ + vis [ "2210" "2211" "2212" "2213" "2214" "2230" "2231" "2215" "2216" "2217" "2218" ] + suit_edge [ 213 214 ] + suit_edge [ 214 215 ] + suit_edge [ 216 217 ] + suit_edge [ 217 218 ] + suit_edge [ 217 219 ] + suit_edge [ 219 217 ] + suit_edge [ 214 219 ] + suit_edge [ 219 214 ] + battle_cell [ 20 20 -430 -5 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -410 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb14:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Kooky CinePlex" ] + pos [ -450 -20 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 12.75 -2.99 6 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -0.31 ] + wiggle [ 1.18534 ] + stomp [ 0.043992 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.835294 0.835294 1 ] + pos [ 0 0 -1.64 ] + kern [ 0.036467 ] + wiggle [ 0.31377 ] + stomp [ 0.045855 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb12:random20_DNARoot" [ + pos [ -410 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ -450 5 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2215" [ + vis [ "2211" "2212" "2213" "2214" "2215" "2216" "2210" "2231" "2230" "2217" "2218" "2232" "2219" "2220" ] + suit_edge [ 100 101 ] + suit_edge [ 101 102 ] + suit_edge [ 102 91 ] + suit_edge [ 91 330 ] + suit_edge [ 330 91 ] + suit_edge [ 91 378 ] + suit_edge [ 101 387 ] + suit_edge [ 387 101 ] + battle_cell [ 20 20 -430 105 -0.5 ] + group "streets" [ + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ -460 140 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.588235 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.627451 0.301961 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 0.560784 0.207843 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3.68 -0.05 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.28 1.49 19.37 ] + nhpr [ -0 0 -0 ] + color [ 1 0.71 0.27 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 15 -15 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -460 115 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 0.7 0.27 1 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -460 105 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 0.7 0.27 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ 10 10 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.888571 0.888571 0.888571 ] + color [ 0.88 0.88 0.88 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 0.876015 -14.5963 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.74422 0.74422 0.74422 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -460 125 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ -460 85 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -4.51538 -12.1857 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -460 80 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -460 105 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -470 125 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -420 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ -430 120.001 1.14441e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -430 100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -430 90 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -410 90 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -410 80 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -447.275 120.571 1.14441e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + visgroup "2216" [ + vis [ "2213" "2214" "2215" "2216" "2217" "2218" "2219" "2220" "2231" "2232" "2230" ] + suit_edge [ 365 366 ] + suit_edge [ 366 100 ] + battle_cell [ 20 20 -381 111 -0.5 ] + group "streets" [ + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -400 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -360 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ -380 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_sidewalk_transitionR_DNARoot" [ + code [ "street_park_sidewalk_transitionR" ] + pos [ -360 90 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ -380 110 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_sidewalk_transitionL_DNARoot" [ + code [ "street_park_sidewalk_transitionL" ] + pos [ -390 90 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb16:random20_DNARoot" [ + pos [ -425 140 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + ] + prop "prop_smokestack_DNARoot" [ + code [ "prop_smokestack" ] + pos [ 3.01 3.93 15.19 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 13.06 -3.86 0 ] + nhpr [ -0 0 -0 ] + color [ 1 0.88 0.8 1 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.57 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.1 ] + scale [ 0.8 1 0.8 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.13 0 1.89 ] + scale [ 0.6 1 0.55 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + landmark_building "tb42:toon_landmark_hqTT_DNARoot" [ + code [ "toon_landmark_hqTT" ] + building_type [ "hq" ] + title [ "" ] + pos [ -385 70 0 ] + nhpr [ 180 0 -0 ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -435 140 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.89 0.95 0.17 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 4 -15 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.89041 0.89041 0.89041 ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -400 140 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.996078 0.996078 0.486275 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 45 -62 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -9.99994 -60 0 ] + nhpr [ 180 0 -0 ] + ] + ] + landmark_building "tb16:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Soup and Crack Ups" ] + pos [ -390 140 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.627451 0.376471 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ -0.58 0 1.67 ] + scale [ 1.7 1 1.7 ] + kern [ 0.179266 ] + wiggle [ 6.82156 ] + stumble [ 0.12 ] + stomp [ 0.032 ] + width [ 14.0248 ] + height [ 14.0248 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.56 ] + nhpr [ -0 0 5 ] + kern [ 0.040121 ] + wiggle [ 5.05088 ] + flags [ "d" ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0.09 0 -0.73 ] + nhpr [ -0 0 3 ] + scale [ 2 1 2 ] + kern [ 0.125054 ] + wiggle [ 4.58884 ] + stomp [ 0.05 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ -1.24 0 -0.75 ] + nhpr [ -0 0 -3 ] + scale [ 1.9 1 1.9 ] + kern [ 0.294832 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "p" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0.1 0 1.72 ] + scale [ 1.5 1 1.8 ] + kern [ 0.101601 ] + width [ 12.7637 ] + height [ 12.7637 ] + text [ + letters [ "o" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2217" [ + vis [ "2215" "2216" "2217" "2218" "2219" "2220" "2231" "2232" "2230" "2214" "2213" ] + suit_edge [ 264 265 ] + suit_edge [ 264 115 ] + suit_edge [ 115 264 ] + suit_edge [ 329 264 ] + suit_edge [ 265 331 ] + suit_edge [ 331 265 ] + suit_edge [ 265 365 ] + suit_edge [ 366 367 ] + suit_edge [ 367 366 ] + battle_cell [ 20 20 -339 99 -0.5 ] + group "streets" [ + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ -330 110 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -350 110 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ -340 90 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -340 70 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -340 100 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -360 90 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_straight_20_DNARoot" [ + code [ "street_park_straight_20" ] + pos [ -360 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb48:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Jest for Laughs" ] + pos [ -310 100 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + pos [ 0 0 -0.5 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.2 ] + scale [ 2 1 2 ] + wiggle [ 5 ] + stumble [ 0.1 ] + stomp [ 0.1 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "f" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 1.4 ] + scale [ 1.5 1 1.5 ] + kern [ 0.2 ] + wiggle [ 5 ] + stumble [ 0.1 ] + stomp [ 0.1 ] + text [ + letters [ "J" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + flat_building "tb16:random20_DNARoot" [ + pos [ -365 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 3.37 3.84 19.63 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 0.45 ] + nhpr [ -0 0 -6 ] + scale [ 1.5 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "m" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.501961 1 ] + pos [ 0 0 -0.88 ] + nhpr [ -0 0 -5 ] + scale [ 1.1 1 1 ] + kern [ 0.022869 ] + width [ 35.0508 ] + height [ 35.0508 ] + flags [ "d" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.89 ] + nhpr [ -0 0 -3 ] + scale [ 0.8 1 0.9 ] + kern [ 0.042516 ] + stumble [ 0.02 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "L" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 40 -15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 20 -15 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.07687 1.07687 1.07687 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -310 140 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 9.2 1.63 19.28 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -310 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.9 0.56 0.34 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 4 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3.57983 6.17053 18.35 ] + nhpr [ -0 0 -0 ] + color [ 0.9 0.56 0.34 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 5.34737 -16.0063 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -310 115 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 2.36638 -12.6653 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb16:random_DNARoot" [ + pos [ -350 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 14.9999 10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -335 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -320 150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -320 140 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb48:random_DNARoot" [ + pos [ -310 125 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.75 0.79 0.55 1 ] + ] + ] + ] + flat_building "tb16:random_DNARoot" [ + pos [ -350 140 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.69 0.51 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -315.792 103.824 1.14441e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2218" [ + vis [ "2216" "2217" "2218" "2219" "2215" "2232" "2220" "2214" "2230" ] + suit_edge [ 324 326 ] + suit_edge [ 326 327 ] + suit_edge [ 327 271 ] + suit_edge [ 326 328 ] + suit_edge [ 328 326 ] + suit_edge [ 268 329 ] + battle_cell [ 30 20 -353.922 50.362 -0.5 ] + group "streets" [ + ] + group "buildings" [ + landmark_building "tb17:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Bottled Cans" ] + pos [ -370 30 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.45 ] + scale [ 0.9 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.36 ] + scale [ 1.3 1 1.7 ] + kern [ 0.049758 ] + wiggle [ 3.88301 ] + stumble [ 0.034363 ] + stomp [ 0.064039 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb17:random20_DNARoot" [ + pos [ -360 30 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.992157 0.686275 0.486275 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 6 -2.00004 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 0 -108 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 35 -108 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -5 -5 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -310 40 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 28.177 9.06769 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -310 30 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb48:random20_DNARoot" [ + pos [ -310 60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 16.5437 -14.9075 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb48:random_DNARoot" [ + pos [ -310 40 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ -360 50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -340 60 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionL_30x20_DNARoot" [ + code [ "street_grass_transitionL_30x20" ] + pos [ -340 40 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -360 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_sidewalk_transitionL_DNARoot" [ + code [ "street_park_sidewalk_transitionL" ] + pos [ -380 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ -360 50 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -380 70 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -380 90 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2219" [ + vis [ "2216" "2217" "2218" "2219" "2220" "2221" "2222" "2232" "2233" "2234" "2215" "2223" ] + suit_edge [ 117 121 ] + suit_edge [ 121 123 ] + suit_edge [ 125 249 ] + suit_edge [ 249 125 ] + suit_edge [ 121 249 ] + suit_edge [ 249 121 ] + suit_edge [ 229 125 ] + suit_edge [ 125 118 ] + suit_edge [ 117 292 ] + suit_edge [ 292 117 ] + suit_edge [ 118 292 ] + suit_edge [ 292 118 ] + battle_cell [ 20 20 -340 -25 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -320 -50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb20:random20_DNARoot" [ + pos [ -350 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 6.68 -1.34 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + landmark_building "tb20:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Crack Up Auto Repair" ] + pos [ -325 -50 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.87451 0.376471 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 0.999966 -34 0 ] + nhpr [ 90 0 -0 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.12 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ -0.29 0 0.78 ] + scale [ 1.1 1 1.3 ] + wiggle [ 7.83535 ] + stomp [ 0.012608 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.835294 0.835294 1 ] + pos [ 0 0 -0.4 ] + stomp [ 0.03 ] + width [ 43.9812 ] + height [ 43.9812 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ -11.9999 -6.00027 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.75576 0.75576 0.75576 ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -315 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -360 -50 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb20:random20_DNARoot" [ + pos [ -360 -35 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.627451 0.443137 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 5.34 -1.32 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb20:20_DNARoot" [ + pos [ -360 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.16 3.26 17.41 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -322.747 -44.1439 3.8147e-006 ] + nhpr [ -135 0 -0 ] + ] + ] + visgroup "2220" [ + vis [ "2217" "2218" "2219" "2220" "2221" "2222" "2223" "2224" "2232" "2233" "2234" "2216" "2235" "2215" "2236" ] + suit_edge [ 123 227 ] + suit_edge [ 228 229 ] + suit_edge [ 293 227 ] + suit_edge [ 227 293 ] + suit_edge [ 293 228 ] + suit_edge [ 228 293 ] + suit_edge [ 228 363 ] + suit_edge [ 363 228 ] + suit_edge [ 227 363 ] + suit_edge [ 363 227 ] + battle_cell [ 20 20 -300 -30 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -320 -50 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb39:20_DNARoot" [ + pos [ -290 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -280 -50 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -295 -50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 9.99994 10.0001 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -305 -50.0001 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb20:random_DNARoot" [ + pos [ -315 -70 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -295 -50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ -320 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.32 0.54 0.36 1 ] + ] + ] + ] + landmark_building "tb39:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Sidesplitter's Mending" ] + pos [ -305 -10 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.987687 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 0.37 ] + nhpr [ -0 0 3 ] + scale [ 1.2 1 2.1 ] + kern [ 0.044642 ] + wiggle [ 4.91427 ] + stumble [ 0.099713 ] + stomp [ 0.03 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ 0 0 -0.66 ] + nhpr [ -0 0 2 ] + kern [ 0.080052 ] + stomp [ 0.03 ] + width [ 31.4822 ] + height [ 31.4822 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ -313.838 -14.2531 -1.14441e-005 ] + nhpr [ -8.80343 0 -0 ] + ] + ] + visgroup "2221" [ + vis [ "2219" "2220" "2221" "2222" "2223" "2233" "2234" "2224" ] + group "streets" [ + ] + group "buildings" [ + ] + group "props" [ + ] + ] + visgroup "2222" [ + vis [ "2219" "2220" "2221" "2222" "2223" "2224" "2225" "2226" "2234" "2233" "2235" ] + group "streets" [ + ] + group "buildings" [ + ] + ] + visgroup "2223" [ + vis [ "2220" "2221" "2222" "2223" "2224" "2225" "2226" "2234" "2235" "2233" "2219" "2236" ] + suit_edge [ 335 341 ] + suit_edge [ 341 342 ] + suit_edge [ 343 338 ] + suit_edge [ 260 343 ] + battle_cell [ 20 20 -242.611 52.3903 -0.5 ] + group "streets" [ + street "street_exterior_corner_grass_transition_DNARoot" [ + code [ "street_exterior_corner_grass_transition" ] + pos [ -245 35.0001 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ -245 65.0001 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -245 45.0001 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -235 55.0001 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -225 55.0001 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionR_30x20_DNARoot" [ + code [ "street_grass_transitionR_30x20" ] + pos [ -245 25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionL_30x10_DNARoot" [ + code [ "street_grass_transitionL_30x10" ] + pos [ -245 25 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -245 105 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ -245 125 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb39:random20_DNARoot" [ + pos [ -275 35 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 14.6883 -13.4085 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ -215 35.0001 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -5 -15 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 8.00014 -15 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -275 15 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 9.99995 -15 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -260 100 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -275 84.9999 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -12.0002 -6.99994 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 1.99982 12 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 7.99979 -8.00018 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -275 69.9999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -275 54.9999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 6.00012 -2.00009 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -275 55 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -280 15 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -260 84.9999 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 7 -2.99998 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 17.0001 -13.9999 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + color [ 0.88 0.88 0.88 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 13.19 2.8101 19.77 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ -245 85 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ -225 105 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ -225 125 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ -210 125 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -245 105 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -245 125 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -260.557 64.5035 1.52588e-005 ] + nhpr [ 45 0 -0 ] + ] + ] + visgroup "2224" [ + vis [ "2220" "2221" "2222" "2223" "2224" "2225" "2226" "2235" "2234" "2233" "2219" "2236" ] + suit_edge [ 342 344 ] + suit_edge [ 344 232 ] + suit_edge [ 345 346 ] + suit_edge [ 346 260 ] + suit_edge [ 344 347 ] + suit_edge [ 347 344 ] + suit_edge [ 346 347 ] + suit_edge [ 347 346 ] + suit_edge [ 232 348 ] + suit_edge [ 348 232 ] + suit_edge [ 345 348 ] + suit_edge [ 348 345 ] + battle_cell [ 20 20 -200 55 -0.5 ] + group "streets" [ + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ -185 55.0001 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ -205 55.0001 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionL_30x10_DNARoot" [ + code [ "street_grass_transitionL_30x10" ] + pos [ -195 55 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + ] + group "props" [ + landmark_building "tb25:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "" ] + pos [ -190 35 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_drycleaner_sign_DNARoot" [ + code [ "prop_drycleaner_sign" ] + pos [ 10.78 -4.02 12.11 ] + nhpr [ 90 0 -0 ] + scale [ 1.8 1.8 1.8 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -210 35 0 ] + nhpr [ -180 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -210 85.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 12.67 -3.56 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.37 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.14 0 -1.02 ] + stomp [ 0.043448 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.95 ] + scale [ 0.6 1 0.7 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 17.0761 -13.9234 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.684366 0.684366 0.684366 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ -225 85.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 7.00006 -14.9999 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb25:random20_DNARoot" [ + pos [ -180 35 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.415686 0.270588 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.411765 0.266667 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.74902 0.376471 1 ] + ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + ] + ] + ] + visgroup "2225" [ + vis [ "2222" "2223" "2224" "2225" "2226" "2234" "2235" "2233" ] + suit_edge [ 237 350 ] + suit_edge [ 350 351 ] + suit_edge [ 352 353 ] + suit_edge [ 351 352 ] + suit_edge [ 350 354 ] + suit_edge [ 354 350 ] + suit_edge [ 353 354 ] + suit_edge [ 354 353 ] + suit_edge [ 350 355 ] + suit_edge [ 355 350 ] + suit_edge [ 353 355 ] + suit_edge [ 355 353 ] + suit_edge [ 351 356 ] + suit_edge [ 356 351 ] + suit_edge [ 352 357 ] + suit_edge [ 357 352 ] + suit_edge [ 353 358 ] + battle_cell [ 20 20 -115 76 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -95 75 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ -135 75 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -145 75 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -145.012 124.977 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -100 25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -90 35 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ -85 45 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb28:random20_DNARoot" [ + pos [ -95 75 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb27:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Seltzer Bottles and Cans" ] + pos [ -145 85 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 0.745098 0.792157 0.552941 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.61 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "humanist" ] + color [ 0.0235294 0.458824 0.776471 1 ] + pos [ 0 0 0.35 ] + scale [ 1.4 1 1.5 ] + kern [ 0.046812 ] + wiggle [ 3.43588 ] + stumble [ 0.021261 ] + stomp [ 0.050755 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "z" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.81 ] + scale [ 1.1 1 1.2 ] + kern [ 0.063908 ] + wiggle [ 4.78927 ] + stomp [ 0.022698 ] + text [ + letters [ "(" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "!" ] + ] + text [ + letters [ ")" ] + ] + ] + ] + ] + landmark_building "tb28:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Vanishing Cream" ] + pos [ -110 25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.2 ] + nhpr [ -0 0 3 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0.18 0 0.24 ] + nhpr [ -0 0 1 ] + scale [ 1.1 1 1.8 ] + kern [ 0.087728 ] + text [ + letters [ "V" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "m" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.776471 0 0 1 ] + pos [ 0 0 -0.89 ] + scale [ 1.3 1 1 ] + kern [ 0.05456 ] + text [ + letters [ "g" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -135 75 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.54 0.44 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.54 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.270588 0.270588 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -135 125 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.882353 0.803922 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.0972673 0.590551 0.393701 1 ] + count [ 1 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 8 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "sport_store_DNARoot" [ + code [ "sport_store" ] + pos [ 7.68359 -3.73505 -0.0762644 ] + nhpr [ -0 -1.27727 -0 ] + scale [ 0.816999 0.816999 0.816999 ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -120 125 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.91 0.63 0.44 1 ] + count [ 2 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.52 2.27 17.7 ] + nhpr [ -0 0 -0 ] + color [ 1 0.71 0.27 1 ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -105 115 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -145 100 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5 -15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_c" ] + pos [ 8.41456 -2.96718 0 ] + nhpr [ -0 0 -0 ] + ] + prop "music_inst_DNARoot" [ + code [ "music_inst" ] + pos [ 8.10126 -3.32384 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -90 25 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 9 -11 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -90 45 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.270588 0.270588 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.46 2.86 18.4 ] + nhpr [ -0 0 -0 ] + color [ 1 0.42 0.27 1 ] + ] + ] + flat_building "tb28:random20_DNARoot" [ + pos [ -95 65 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -135 80 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -145 80 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -145 115 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -145 125 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb27:random_DNARoot" [ + pos [ -105 125 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb28:random_DNARoot" [ + pos [ -95 45 0 ] + nhpr [ -0 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -131.543 77.7585 5.34058e-005 ] + nhpr [ 90 0 0 ] + ] + anim_prop "animated_prop_generic_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_fightIdle" ] + pos [ -137.631 119.748 7.62939e-006 ] + nhpr [ 30 0 -0 ] + ] + anim_prop "animated_prop_generic_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "animated_prop_generic_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightIdle" ] + pos [ -100.277 64.3605 -3.05176e-005 ] + nhpr [ -75 0 0 ] + ] + ] + visgroup "2226" [ + vis [ "2222" "2223" "2224" "2225" "2226" "2235" "2234" "2233" ] + group "streets" [ + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -95 75 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb28:random20_DNARoot" [ + pos [ -75 75 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb27:random20_DNARoot" [ + pos [ -95 115 0 ] + nhpr [ -0 0 -0 ] + width [ 20.7 ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.992157 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 10.12 -7.61 0 ] + nhpr [ -0 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "linktunnel_tt_2000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ -75 115 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -2.92 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.02 ] + nhpr [ -0 0 1 ] + scale [ 1.4 1 1.4 ] + width [ 48.5743 ] + height [ 48.5743 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.58 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.94 ] + scale [ 0.8 1 0.8 ] + width [ 37.8616 ] + height [ 37.8616 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + ] + group "props" [ + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ -79.3193 86.4648 -0.500008 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "2227" [ + vis [ "2227" "2201" "2202" "2203" "2204" ] + suit_edge [ 186 190 ] + suit_edge [ 191 187 ] + suit_edge [ 190 192 ] + suit_edge [ 192 3 ] + suit_edge [ 4 193 ] + suit_edge [ 193 191 ] + suit_edge [ 190 194 ] + suit_edge [ 194 190 ] + suit_edge [ 191 194 ] + suit_edge [ 194 191 ] + suit_edge [ 193 195 ] + suit_edge [ 195 193 ] + suit_edge [ 192 195 ] + suit_edge [ 195 192 ] + suit_edge [ 273 191 ] + suit_edge [ 191 273 ] + suit_edge [ 273 190 ] + suit_edge [ 190 273 ] + battle_cell [ 20 20 -580 30 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -560 10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ -560 50 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + landmark_building "tb30:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "News for the Amused" ] + pos [ -560 35 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + pos [ 0 0 0.73 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.764706 0.0235294 0.235294 1 ] + pos [ 0 0 0.17 ] + scale [ 2.1 1 2 ] + kern [ 0.336563 ] + wiggle [ 4.06537 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.88 ] + kern [ 0.023308 ] + wiggle [ 4.98201 ] + stomp [ 0.034998 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + ] + ] + flat_building "tb30:20_DNARoot" [ + pos [ -560 20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb29:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "14 Karat Goldfish" ] + pos [ -610 25 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.21 ] + scale [ 1.4 1 1.3 ] + width [ 29.1571 ] + height [ 29.1571 ] + text [ + letters [ "1" ] + ] + text [ + letters [ "4" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -1.16 ] + width [ 21.5332 ] + height [ 21.5332 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + ] + ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -610 25 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ -610 4.99999 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb1:10_10_DNARoot" [ + pos [ -600 15 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb29:10_10_DNARoot" [ + pos [ -610 40 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb29:10_10_DNARoot" [ + pos [ -610 45 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 16.8777 -4.62177 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb1:10_10_DNARoot" [ + pos [ -610 15 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ -565.492 13.7371 3.8147e-006 ] + nhpr [ -120 0 -0 ] + ] + ] + visgroup "2228" [ + vis [ "2228" "2205" "2204" "2203" "2229" "2206" "2207" "2208" "2209" "2210" "2202" ] + suit_edge [ 313 314 ] + suit_edge [ 314 302 ] + suit_edge [ 314 315 ] + suit_edge [ 315 314 ] + suit_edge [ 316 313 ] + suit_edge [ 313 316 ] + suit_edge [ 370 372 ] + suit_edge [ 372 373 ] + suit_edge [ 372 315 ] + suit_edge [ 315 372 ] + suit_edge [ 372 374 ] + suit_edge [ 374 372 ] + suit_edge [ 314 374 ] + suit_edge [ 374 314 ] + battle_cell [ 20 20 -514.843 -3.42102 -0.5 ] + flat_building "tb32:20_DNARoot" [ + pos [ -465 20 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.04 3.47 16.3 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.36 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.13 0 -0.91 ] + scale [ 0.8 1 0.9 ] + kern [ 0.012169 ] + wiggle [ 3.80252 ] + stomp [ 0.004158 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.13 0 0.94 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + ] + flat_building "tb32:20_DNARoot" [ + pos [ -465 0 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 1 1 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.6 0.66 0.27 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ -535 10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 20 -7 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + color [ 1 0.917647 0.588235 1 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 4.17 2.74 18.77 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_woodbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 7.99999 -35 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_large_woodbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ -25 -36 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ -7.00001 -35 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.874535 0.874535 0.874535 ] + ] + ] + landmark_building "tb31:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "" ] + pos [ -535 -9.99999 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_drycleaner_sign_DNARoot" [ + code [ "prop_drycleaner_sign" ] + pos [ 10.75 -4.06 12.5 ] + nhpr [ 90 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + ] + flat_building "tb31:20_DNARoot" [ + pos [ -535 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 1.73 -6.76 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + street "street_divided_40x70_DNARoot" [ + code [ "street_divided_40x70" ] + pos [ -465 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2229" [ + vis [ "2229" "2228" "2205" "2204" "2206" "2207" "2208" "2209" "2210" "2203" ] + suit_edge [ 208 30 ] + suit_edge [ 280 30 ] + suit_edge [ 30 280 ] + suit_edge [ 280 31 ] + suit_edge [ 31 280 ] + suit_edge [ 302 303 ] + suit_edge [ 303 208 ] + suit_edge [ 300 369 ] + suit_edge [ 369 370 ] + suit_edge [ 31 300 ] + suit_edge [ 300 371 ] + suit_edge [ 371 300 ] + suit_edge [ 208 371 ] + suit_edge [ 371 208 ] + battle_cell [ 20 20 -500.068 -40.1532 -0.5 ] + landmark_building "tb32:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Spaghetti and Goofballs" ] + pos [ -465 -15 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.52 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.921569 0.00784314 0.0784314 1 ] + pos [ 0 0 0.96 ] + scale [ 1.2 1 1.3 ] + kern [ 0.104094 ] + width [ 31.7965 ] + height [ 31.7965 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.07 0 -1.08 ] + scale [ 1.5 1 1.4 ] + kern [ 0.123203 ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + pos [ 0 0 0.08 ] + scale [ 1.1 1 1 ] + kern [ 0.079022 ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + pos [ -1.7 0 -1.12 ] + scale [ 1.4 1 1.4 ] + kern [ 0.030733 ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 30.3183 -18.8885 0 ] + nhpr [ -0 0 -0 ] + ] + ] + street "street_divided_transition_DNARoot" [ + code [ "street_divided_transition" ] + pos [ -465 -60 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ -535 -45 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb32:20_DNARoot" [ + pos [ -465 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 10.946 -3.60266 0.213852 ] + nhpr [ -0 0 -0 ] + ] + prop "music_inst_DNARoot" [ + code [ "music_inst" ] + pos [ 10.7983 -3.49689 0.211712 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ -520 -55 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ -520 -45 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -6.11148 0.318245 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb8:20_DNARoot" [ + pos [ -535 -30 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 2 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 10.37 1.38 19.13 ] + nhpr [ -0 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -531.624 -35.4456 -1.52588e-005 ] + nhpr [ 90 0 0 ] + ] + ] + visgroup "2230" [ + vis [ "2230" "2231" "2214" "2213" "2212" "2211" "2215" "2216" "2210" "2217" "2218" "2232" ] + suit_edge [ 222 216 ] + suit_edge [ 215 223 ] + suit_edge [ 223 324 ] + suit_edge [ 324 325 ] + suit_edge [ 325 324 ] + suit_edge [ 378 221 ] + suit_edge [ 221 222 ] + suit_edge [ 221 226 ] + suit_edge [ 226 221 ] + battle_cell [ 20 20 -424.8 50.6696 -0.5 ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ -417.132 10.3384 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + street "street_10x40_DNARoot" [ + code [ "street_10x40" ] + pos [ -410 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb17:20_DNARoot" [ + pos [ -385 30 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ -430 30 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -460 45 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 2.75932 -12.3945 7.62939e-006 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb14:20_DNARoot" [ + pos [ -450 15 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_facade_d_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 7.98812 -3.01135 7.62939e-006 ] + nhpr [ -0 0 -0 ] + color [ 1 0.84 0.59 1 ] + ] + prop "gallery2_DNARoot" [ + code [ "gallery2" ] + pos [ 8.17182 -3.48016 -1.07931 ] + nhpr [ -0 1.31085 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ -450 30 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:20_DNARoot" [ + pos [ -460 30 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + street "street_grass_transitionR_30x20_DNARoot" [ + code [ "street_grass_transitionR_30x20" ] + pos [ -430 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ -430 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ -430 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb33:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Cast Iron Kites" ] + pos [ -460 60 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.37 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0.25098 0.25098 1 ] + pos [ -0.11 0 0.91 ] + width [ 36.5283 ] + height [ 36.5283 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "-" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.51 ] + scale [ 2.3 1 1.5 ] + kern [ 0.07285 ] + wiggle [ 4.027 ] + width [ 63.3553 ] + height [ 63.3553 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + street "street_park_sidewalk_transitionR_DNARoot" [ + code [ "street_park_sidewalk_transitionR" ] + pos [ -410 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ -390 50 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_park_corner_DNARoot" [ + code [ "street_park_corner" ] + pos [ -410 70 1.52588e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb17:20_DNARoot" [ + pos [ -395 30 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ 11 -1.99992 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 20 -4.99999 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb17:20_DNARoot" [ + pos [ -410 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 5 -5.00003 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -446.673 32.4106 7.62939e-006 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "2231" [ + vis [ "2231" "2230" "2217" "2216" "2215" "2214" "2213" "2212" "2211" "2210" ] + ] + visgroup "2232" [ + vis [ "2232" "2218" "2217" "2216" "2219" "2220" "2233" "2215" "2230" ] + suit_edge [ 266 268 ] + suit_edge [ 271 267 ] + suit_edge [ 267 362 ] + suit_edge [ 362 267 ] + suit_edge [ 266 362 ] + suit_edge [ 362 266 ] + suit_edge [ 271 364 ] + suit_edge [ 364 271 ] + suit_edge [ 268 364 ] + suit_edge [ 364 268 ] + suit_edge [ 267 117 ] + suit_edge [ 118 266 ] + battle_cell [ 30 20 -339.118 4.0922 -0.5 ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -360 30 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ -320 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb34:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Suction Cups and Saucers" ] + pos [ -360 4.99998 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.83 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.18 ] + scale [ 1.1 1 1.2 ] + flags [ "b" ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.368627 0.682353 1 1 ] + pos [ 0 0 -0.89 ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb34:20_DNARoot" [ + pos [ -360 -5 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -320 5 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -320 20 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -320 30 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 3.00003 -5.00003 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ -310 20 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb34:random20_DNARoot" [ + pos [ -360 20 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.75 0.35 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -354.861 -5.10002 -7.62939e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2233" [ + vis [ "2233" "2234" "2222" "2221" "2220" "2219" "2223" "2224" "2235" "2232" "2236" ] + suit_edge [ 333 336 ] + suit_edge [ 336 333 ] + suit_edge [ 381 336 ] + suit_edge [ 336 381 ] + suit_edge [ 333 384 ] + suit_edge [ 384 333 ] + suit_edge [ 381 384 ] + suit_edge [ 384 381 ] + suit_edge [ 385 386 ] + suit_edge [ 386 385 ] + suit_edge [ 383 386 ] + suit_edge [ 386 383 ] + suit_edge [ 383 228 ] + suit_edge [ 227 385 ] + suit_edge [ 338 381 ] + suit_edge [ 333 335 ] + suit_edge [ 385 391 ] + suit_edge [ 392 333 ] + suit_edge [ 391 392 ] + suit_edge [ 381 393 ] + suit_edge [ 393 383 ] + battle_cell [ 20 20 -252.88 -9.81432 -0.5 ] + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ -235 -30 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_courtyard_70_15_exit_DNARoot" [ + code [ "street_courtyard_70_15_exit" ] + pos [ -245 -29.9999 7.62939e-006 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb35:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "The Kaboomery" ] + pos [ -250 -65 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.88 ] + scale [ 0.8 1 0.7 ] + baseline [ + code [ "mickey" ] + color [ 0.368627 0.682353 1 1 ] + pos [ -0.2 0 0.82 ] + scale [ 0.7 1 1.5 ] + width [ 26.7845 ] + height [ 26.7845 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.25098 0 1 ] + pos [ 0 0 -0.33 ] + scale [ 0.7 1 1 ] + width [ 30.4683 ] + height [ 30.4683 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "!" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.72549 0.027451 0.27451 1 ] + pos [ -2.16 0 -0.47 ] + nhpr [ -0 0 -9 ] + scale [ 0.6 1 1 ] + width [ 26.5104 ] + height [ 26.5104 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "X" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "," ] + ] + ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -280 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ -245 -20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_courtyard_70_15_DNARoot" [ + code [ "street_courtyard_70_15" ] + pos [ -245 -30 -7.62939e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -200 -65 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 12.0001 -12.0002 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb35:random20_DNARoot" [ + pos [ -215 -65 5.72205e-006 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 1.56 2.4 18.25 ] + nhpr [ -0 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 10 -1.99997 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 10.2361 -2.12429 -0.0597 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb35:20_DNARoot" [ + pos [ -235 -65 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 7 -3.99989 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.14204 1.14204 1.14204 ] + ] + prop "gallery1_DNARoot" [ + code [ "gallery1" ] + pos [ 6.98914 -4.79314 -1.13513 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb35:20_DNARoot" [ + pos [ -265 -65 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 3.99982 -17.0004 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb35:random_DNARoot" [ + pos [ -280 -65 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.31706 0.535433 0.361155 1 ] + ] + ] + ] + landmark_building "tb47:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Visible Ink" ] + pos [ -200 -5.00001 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + pos [ 0 0 0.7 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ 0 0 0.5 ] + scale [ 1.3 1 1.3 ] + kern [ 0.2 ] + wiggle [ 2 ] + stomp [ 0.05 ] + text [ + letters [ "V" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -0.9 ] + scale [ 1.6 1 1.6 ] + kern [ 0.1 ] + wiggle [ 0.1 ] + stomp [ 0.05 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + prop "prop_goofy_statue_DNARoot" [ + code [ "prop_mickey_on_horse" ] + pos [ 20 -40.0001 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.644566 0.644566 0.644566 ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ -215 15.0001 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb25:random_DNARoot" [ + pos [ -200 15 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb39:20_DNARoot" [ + pos [ -280 4.99997 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 0.46596 -8.95938 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb47:random20_DNARoot" [ + pos [ -200 5 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -0.625958 -10.3742 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb47:random20_DNARoot" [ + pos [ -200 -25 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.992157 0.670588 0.25098 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4.4 5.67 18.62 ] + nhpr [ -30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 0 0 1 ] + pos [ 0 0 1.06 ] + nhpr [ -0 0 -3 ] + scale [ 1.1 1 1.1 ] + kern [ 0.05 ] + width [ 20.5162 ] + height [ 20.5162 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ -0.09 0 -0.16 ] + nhpr [ -0 0 -1 ] + scale [ 1.2 1 1.2 ] + kern [ 0.07365 ] + width [ 12.7732 ] + height [ 12.7732 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 0 1 ] + pos [ 0 0 -1.18 ] + nhpr [ -0 0 -2 ] + kern [ 0.028793 ] + width [ 15.7067 ] + height [ 15.7067 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + flat_building "tb47:random20_DNARoot" [ + pos [ -200 -40 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 6.99998 -3.99994 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.45594 1.45594 1.45594 ] + ] + prop "office_furniture_DNARoot" [ + code [ "office_furniture" ] + pos [ 6.14301 -4.77043 1.38279 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb47:random20_DNARoot" [ + pos [ -200 -55 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -274.479 -45.6942 7.62939e-006 ] + nhpr [ 165 0 0 ] + ] + anim_prop "animated_prop_generic_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "animated_prop_generic_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_fightIdle" ] + pos [ -205.685 -61.1066 -6.10352e-005 ] + nhpr [ -105 0 -0 ] + ] + ] + visgroup "2234" [ + vis [ "2234" "2222" "2221" "2233" "2220" "2223" "2224" "2235" "2219" "2225" "2226" ] + ] + visgroup "2235" [ + vis [ "2235" "2226" "2234" "2222" "2223" "2224" "2225" "2233" "2220" ] + suit_edge [ 155 237 ] + suit_edge [ 297 237 ] + suit_edge [ 237 297 ] + suit_edge [ 232 155 ] + suit_edge [ 358 359 ] + suit_edge [ 359 345 ] + suit_edge [ 359 360 ] + suit_edge [ 360 359 ] + suit_edge [ 155 360 ] + suit_edge [ 360 155 ] + suit_edge [ 358 361 ] + suit_edge [ 361 358 ] + suit_edge [ 237 361 ] + suit_edge [ 361 237 ] + suit_edge [ 358 297 ] + suit_edge [ 297 358 ] + suit_edge [ 359 368 ] + suit_edge [ 368 359 ] + suit_edge [ 155 368 ] + suit_edge [ 368 155 ] + battle_cell [ 20 20 -151.264 54.3643 -0.5 ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ -175 35 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + landmark_building "tb41:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "" ] + pos [ -175 75 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 10 -9 0 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + flat_building "tb41:20_DNARoot" [ + pos [ -150 75 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.909804 0.630415 0.444156 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.270588 0.270588 1 ] + count [ 2 ] + ] + ] + ] + landmark_building "tb40:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Used Firecrackers" ] + pos [ -150 25 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -1.01 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.415686 0.415686 1 ] + pos [ 0 0 0.53 ] + scale [ 1.3 1 1.4 ] + kern [ 0.065118 ] + wiggle [ 1.08673 ] + width [ 14.2857 ] + height [ 14.2857 ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.768627 0 0.384314 1 ] + pos [ 0 0 -0.93 ] + scale [ 1.5 1 1.5 ] + kern [ 0.052868 ] + width [ 32.619 ] + height [ 32.619 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ -140 25 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb40:random_DNARoot" [ + pos [ -180 25 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb40:20_DNARoot" [ + pos [ -135 25 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.69 0.49 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 0 -15 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb40:20_DNARoot" [ + pos [ -165 25 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 8 -2 0 ] + nhpr [ -0 0 -0 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 8.60706 -2.33435 1.03576 ] + nhpr [ -0 0 -0 ] + ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ -175 55.0001 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb41:20_DNARoot" [ + pos [ -185 75 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ -185 55 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ -185 85 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ -167.763 37.6429 1.52588e-005 ] + nhpr [ 150 0 0 ] + ] + ] + visgroup "2236" [ + vis [ "2236" "2223" "2224" "2220" "2233" ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -226.4 143.2 0 ] + nhpr [ 94 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -223.506 161.474 0.477789 ] + nhpr [ 45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -247.176 161.177 0.46299 ] + nhpr [ -45 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -220.433 188.951 0.441254 ] + nhpr [ 135 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -248.511 189.017 0.425943 ] + nhpr [ -135 0 -0 ] + ] + ] + street "street_TT_pond_DNARoot" [ + code [ "street_TT_pond" ] + pos [ -235 175 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + group "props" [ + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -208.98 133.275 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.868303 0.868303 0.868303 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -196.961 193.866 0 ] + nhpr [ 135 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -267.722 191.353 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.13975 1.13975 1.13975 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -267.914 161.317 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.921101 0.921101 0.921101 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -260 230 10 ] + nhpr [ 135 0 -0 ] + scale [ 1.20501 1.20501 1.20501 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -295 165 5 ] + nhpr [ 135 0 -0 ] + scale [ 1.45126 1.45126 1.45126 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ -199.992 241.724 6.52702 ] + nhpr [ 135 0 -0 ] + scale [ 1.49558 1.49558 1.49558 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -180.257 135.492 10.4874 ] + nhpr [ 135 -8.50951e-008 -0.0343972 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -165 200 10 ] + nhpr [ 135 0 -0 ] + scale [ 1.77224 1.77224 1.77224 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -246.395 204.759 0 ] + nhpr [ 135 0 -0 ] + scale [ 0.905364 0.905364 0.905364 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -196.111 160.829 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.29384 1.29384 1.29384 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -258.488 134.744 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.12842 1.12842 1.12842 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -224.005 213.188 0 ] + nhpr [ 135 0 -0 ] + scale [ 1.45763 1.45763 1.45763 ] + ] + ] + ] +] diff --git a/ttmodels/src/dna/toontown_central_2300.dna b/ttmodels/src/dna/toontown_central_2300.dna new file mode 100644 index 00000000..52f4eb97 --- /dev/null +++ b/ttmodels/src/dna/toontown_central_2300.dna @@ -0,0 +1,14150 @@ +store_suit_point [ 0, STREET_POINT, 40 15 -0.5 ] +store_suit_point [ 3, STREET_POINT, 40 25 -0.5 ] +store_suit_point [ 5, STREET_POINT, 93 15 -0.5 ] +store_suit_point [ 8, STREET_POINT, 93 25 -0.5 ] +store_suit_point [ 9, FRONT_DOOR_POINT, 93 46 0, 1 ] +store_suit_point [ 10, FRONT_DOOR_POINT, 93 -6 0, 2 ] +store_suit_point [ 12, STREET_POINT, 145 15 -0.5 ] +store_suit_point [ 13, STREET_POINT, 145 40 -0.5 ] +store_suit_point [ 14, STREET_POINT, 135 40 -0.5 ] +store_suit_point [ 15, STREET_POINT, 135 25 -0.5 ] +store_suit_point [ 17, STREET_POINT, 145 53 -0.5 ] +store_suit_point [ 18, STREET_POINT, 145 70 -0.5 ] +store_suit_point [ 19, STREET_POINT, 135 70 -0.5 ] +store_suit_point [ 20, STREET_POINT, 135 53 -0.5 ] +store_suit_point [ 21, FRONT_DOOR_POINT, 156 53 0, 3 ] +store_suit_point [ 25, STREET_POINT, 145 100 -0.5 ] +store_suit_point [ 27, STREET_POINT, 145 115 -0.5 ] +store_suit_point [ 28, STREET_POINT, 160 115 -0.5 ] +store_suit_point [ 29, STREET_POINT, 160 125 -0.5 ] +store_suit_point [ 30, STREET_POINT, 135 125 -0.5 ] +store_suit_point [ 31, STREET_POINT, 200 115 -0.5 ] +store_suit_point [ 32, STREET_POINT, 200 125 -0.5 ] +store_suit_point [ 34, STREET_POINT, 215 115 -0.5 ] +store_suit_point [ 35, STREET_POINT, 215 100 -0.5 ] +store_suit_point [ 36, STREET_POINT, 225 100 -0.5 ] +store_suit_point [ 37, STREET_POINT, 225 115 -0.5 ] +store_suit_point [ 38, STREET_POINT, 240 115 -0.5 ] +store_suit_point [ 39, STREET_POINT, 240 125 -0.5 ] +store_suit_point [ 40, STREET_POINT, 225 125 -0.5 ] +store_suit_point [ 41, STREET_POINT, 225 140 -0.5 ] +store_suit_point [ 42, STREET_POINT, 215 140 -0.5 ] +store_suit_point [ 43, STREET_POINT, 215 125 -0.5 ] +store_suit_point [ 45, STREET_POINT, 225 165 -0.5 ] +store_suit_point [ 46, STREET_POINT, 240 165 -0.5 ] +store_suit_point [ 47, STREET_POINT, 240 175 -0.5 ] +store_suit_point [ 50, STREET_POINT, 200 175 -0.5 ] +store_suit_point [ 51, STREET_POINT, 200 165 -0.5 ] +store_suit_point [ 52, STREET_POINT, 215 165 -0.5 ] +store_suit_point [ 53, FRONT_DOOR_POINT, 260 186 0, 41 ] +store_suit_point [ 54, FRONT_DOOR_POINT, 183 185 0, 39 ] +store_suit_point [ 55, STREET_POINT, 215 74 -0.5 ] +store_suit_point [ 56, STREET_POINT, 200 74 -0.5 ] +store_suit_point [ 57, STREET_POINT, 200 62 -0.5 ] +store_suit_point [ 59, STREET_POINT, 240 63 -0.5 ] +store_suit_point [ 60, STREET_POINT, 240 74 -0.5 ] +store_suit_point [ 61, STREET_POINT, 225 74 -0.5 ] +store_suit_point [ 63, STREET_POINT, 280 115 -0.5 ] +store_suit_point [ 64, STREET_POINT, 280 125 -0.5 ] +store_suit_point [ 65, STREET_POINT, 295 115 -0.5 ] +store_suit_point [ 69, STREET_POINT, 295 70 -0.5 ] +store_suit_point [ 70, STREET_POINT, 305 70 -0.5 ] +store_suit_point [ 73, STREET_POINT, 295 52 -0.5 ] +store_suit_point [ 74, STREET_POINT, 295 40 -0.5 ] +store_suit_point [ 75, STREET_POINT, 305 40 -0.5 ] +store_suit_point [ 76, FRONT_DOOR_POINT, 283 52 0, 14 ] +store_suit_point [ 77, STREET_POINT, 295 15 -0.5 ] +store_suit_point [ 78, STREET_POINT, 320 15 -0.5 ] +store_suit_point [ 79, STREET_POINT, 320 25 -0.5 ] +store_suit_point [ 80, STREET_POINT, 305 25 -0.5 ] +store_suit_point [ 82, STREET_POINT, 344 15 -0.5 ] +store_suit_point [ 84, STREET_POINT, 344 25 -0.5 ] +store_suit_point [ 88, FRONT_DOOR_POINT, 344 46 0, 5 ] +store_suit_point [ 89, STREET_POINT, 400 15 -0.5 ] +store_suit_point [ 90, STREET_POINT, 400 25 -0.5 ] +store_suit_point [ 93, STREET_POINT, 440 15 -0.5 ] +store_suit_point [ 99, STREET_POINT, 465 15 -0.5 ] +store_suit_point [ 100, STREET_POINT, 465 40 -0.5 ] +store_suit_point [ 101, STREET_POINT, 455 40 -0.5 ] +store_suit_point [ 102, STREET_POINT, 455 25 -0.5 ] +store_suit_point [ 103, STREET_POINT, 465 51 -0.5 ] +store_suit_point [ 104, STREET_POINT, 465 60 -0.5 ] +store_suit_point [ 105, STREET_POINT, 455 60 -0.5 ] +store_suit_point [ 106, FRONT_DOOR_POINT, 476 43 0, 30 ] +store_suit_point [ 107, STREET_POINT, 465 85 -0.5 ] +store_suit_point [ 108, STREET_POINT, 455 85 -0.5 ] +store_suit_point [ 111, STREET_POINT, 445 75 -0.5 ] +store_suit_point [ 112, STREET_POINT, 455 75 -0.5 ] +store_suit_point [ 116, STREET_POINT, 470 125 -0.5 ] +store_suit_point [ 118, STREET_POINT, 445 185 -0.5 ] +store_suit_point [ 120, STREET_POINT, 510 185 -0.5 ] +store_suit_point [ 126, STREET_POINT, 535 123 -0.5 ] +store_suit_point [ 127, STREET_POINT, 535 185 -0.5 ] +store_suit_point [ 129, STREET_POINT, 525 100 -0.5 ] +store_suit_point [ 130, STREET_POINT, 535 100 -0.5 ] +store_suit_point [ 131, STREET_POINT, 525 85 -0.5 ] +store_suit_point [ 132, STREET_POINT, 515 85 -0.5 ] +store_suit_point [ 133, STREET_POINT, 515 60 -0.5 ] +store_suit_point [ 134, STREET_POINT, 525 60 -0.5 ] +store_suit_point [ 135, STREET_POINT, 525 75 -0.5 ] +store_suit_point [ 136, STREET_POINT, 535 75 -0.5 ] +store_suit_point [ 137, STREET_POINT, 515 50 -0.5 ] +store_suit_point [ 138, STREET_POINT, 515 40 -0.5 ] +store_suit_point [ 139, STREET_POINT, 525 40 -0.5 ] +store_suit_point [ 140, FRONT_DOOR_POINT, 504 50 0, 31 ] +store_suit_point [ 143, STREET_POINT, 540 15 -0.5 ] +store_suit_point [ 157, STREET_POINT, 620 15 -0.5 ] +store_suit_point [ 158, STREET_POINT, 674 15 -0.5 ] +store_suit_point [ 159, STREET_POINT, 674 40 -0.5 ] +store_suit_point [ 160, STREET_POINT, 665 40 -0.5 ] +store_suit_point [ 161, STREET_POINT, 665 25 -0.5 ] +store_suit_point [ 162, STREET_POINT, 620 25 -0.5 ] +store_suit_point [ 163, STREET_POINT, 674 50 -0.5 ] +store_suit_point [ 164, STREET_POINT, 665 50 -0.5 ] +store_suit_point [ 184, STREET_POINT, 525 50 -0.5 ] +store_suit_point [ 188, STREET_POINT, 455 51 -0.5 ] +store_suit_point [ 195, STREET_POINT, 305 52 -0.5 ] +store_suit_point [ 200, STREET_POINT, 420 15 -0.5 ] +store_suit_point [ 201, STREET_POINT, 425 15 -0.5 ] +store_suit_point [ 202, STREET_POINT, 440 25 -0.5 ] +store_suit_point [ 203, STREET_POINT, 425 25 -0.5 ] +store_suit_point [ 204, STREET_POINT, 420 25 -0.5 ] +store_suit_point [ 205, FRONT_DOOR_POINT, 405 -6 0, 34 ] +store_suit_point [ 206, FRONT_DOOR_POINT, 425 46 0, 29 ] +store_suit_point [ 207, STREET_POINT, 525 125 -0.5 ] +store_suit_point [ 213, STREET_POINT, 580 15 -0.5 ] +store_suit_point [ 218, STREET_POINT, 580 25 -0.5 ] +store_suit_point [ 219, STREET_POINT, 515 15 -0.5 ] +store_suit_point [ 220, STREET_POINT, 540 25 -0.5 ] +store_suit_point [ 221, STREET_POINT, 525 25 -0.5 ] +store_suit_point [ 222, STREET_POINT, 135 95 -0.5 ] +store_suit_point [ 223, FRONT_DOOR_POINT, 124 90 0, 4 ] +store_suit_point [ 224, STREET_POINT, 145 95 -0.5 ] +store_suit_point [ 225, STREET_POINT, 135 100 -0.5 ] +store_suit_point [ 226, STREET_POINT, 305 80 -0.5 ] +store_suit_point [ 227, FRONT_DOOR_POINT, 316 80 0, 9 ] +store_suit_point [ 228, STREET_POINT, 295 80 -0.5 ] +store_suit_point [ 229, STREET_POINT, 305 100 -0.5 ] +store_suit_point [ 230, STREET_POINT, 295 100 -0.5 ] +store_suit_point [ 232, STREET_POINT, 305 125 -0.5 ] +store_suit_point [ 235, FRONT_DOOR_POINT, 582 55 0, 21 ] +store_suit_point [ 236, FRONT_DOOR_POINT, 575 -6 0, 22 ] +store_suit_point [ 237, STREET_POINT, 510 125 -0.5 ] +store_suit_point [ 239, FRONT_DOOR_POINT, 220 20 0, 37 ] +store_suit_point [ 240, SIDE_DOOR_POINT, 50 49 0, 1 ] +store_suit_point [ 241, SIDE_DOOR_POINT, 160 -10 0, 2 ] +store_suit_point [ 242, SIDE_DOOR_POINT, 160 75 0, 3 ] +store_suit_point [ 243, SIDE_DOOR_POINT, 110 127 0, 4 ] +store_suit_point [ 244, SIDE_DOOR_POINT, 181 54 0, 37 ] +store_suit_point [ 245, SIDE_DOOR_POINT, 167 140 0, 39 ] +store_suit_point [ 246, SIDE_DOOR_POINT, 273 140 0, 41 ] +store_suit_point [ 247, SIDE_DOOR_POINT, 280 92 0, 14 ] +store_suit_point [ 248, SIDE_DOOR_POINT, 330 125 0, 9 ] +store_suit_point [ 251, SIDE_DOOR_POINT, 407 49 0, 29 ] +store_suit_point [ 252, SIDE_DOOR_POINT, 435 -9 0, 34 ] +store_suit_point [ 253, SIDE_DOOR_POINT, 479 25 0, 30 ] +store_suit_point [ 256, SIDE_DOOR_POINT, 500 30 0, 31 ] +store_suit_point [ 257, SIDE_DOOR_POINT, 533 0 0, 22 ] +store_suit_point [ 258, SIDE_DOOR_POINT, 641 53 0, 21 ] +store_suit_point [ 259, SIDE_DOOR_POINT, 699 35 0, 23 ] +store_suit_point [ 261, STREET_POINT, 100 25 -0.5 ] +store_suit_point [ 262, STREET_POINT, 100 15 -0.5 ] +store_suit_point [ 263, STREET_POINT, 120 15 -0.5 ] +store_suit_point [ 264, STREET_POINT, 120 25 -0.5 ] +store_suit_point [ 265, STREET_POINT, 674 85 -0.5 ] +store_suit_point [ 268, STREET_POINT, 665 95 -0.5 ] +store_suit_point [ 271, SIDE_DOOR_POINT, 665 120 0, 24 ] +store_suit_point [ 272, STREET_POINT, 470 185 -0.5 ] +store_suit_point [ 273, STREET_POINT, 445 140 -0.5 ] +store_suit_point [ 274, STREET_POINT, 445 150 -0.5 ] +store_suit_point [ 275, SIDE_DOOR_POINT, 420 150 0, 33 ] +store_suit_point [ 276, STREET_POINT, 580 15 -0.5 ] +store_suit_point [ 277, STREET_POINT, 580 25 -0.5 ] +store_suit_point [ 278, STREET_POINT, 486 185 -0.5 ] +store_suit_point [ 279, FRONT_DOOR_POINT, 485 206 0, 33 ] +store_suit_point [ 281, SIDE_DOOR_POINT, 310 0 0, 36 ] +store_suit_point [ 282, SIDE_DOOR_POINT, 550 132 0, 18 ] +store_suit_point [ 283, FRONT_DOOR_POINT, 547 93 0, 18 ] +store_suit_point [ 284, STREET_POINT, 390 25 -0.5 ] +store_suit_point [ 285, STREET_POINT, 370 25 -0.5 ] +store_suit_point [ 286, STREET_POINT, 390 15 -0.5 ] +store_suit_point [ 287, STREET_POINT, 370 15 -0.5 ] +store_suit_point [ 288, SIDE_DOOR_POINT, 352 49 0, 5 ] +store_suit_point [ 289, STREET_POINT, 455 125 -0.5 ] +store_suit_point [ 290, STREET_POINT, 700 85 -0.5 ] +store_suit_point [ 291, STREET_POINT, 700 95 -0.5 ] +store_suit_point [ 292, STREET_POINT, 730 85 -0.5 ] +store_suit_point [ 293, STREET_POINT, 730 95 -0.5 ] +store_suit_point [ 294, FRONT_DOOR_POINT, 720 65 0, 23 ] +store_suit_point [ 295, FRONT_DOOR_POINT, 712 116 0, 24 ] +group "toontownCentral" [ + visgroup "2301" [ + vis [ "2303" "2304" "2305" "2302" "2301" ] + battle_cell [ 20 20 20 20 -0.5 ] + group "streets" [ + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ 20 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 0 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 40 -20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + prop "linktunnel_tt_2000_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 0 0 0 ] + nhpr [ 90 0 -0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -3.2 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.16 ] + scale [ 1.5 1 1.5 ] + width [ 47.4001 ] + height [ 47.4001 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -2.03 ] + scale [ 0.8 1 0.8 ] + width [ 39.6338 ] + height [ 39.6338 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 40 70 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb2:random_DNARoot" [ + pos [ 20.0329 -19.8599 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -13.817 -25.1741 0 ] + nhpr [ 165 0 -0 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 0 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -2.52825 -7.8239 -0.5 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 20 -34.8565 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 40 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 0 10 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 30 -20 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 0 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 15 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ -5 20 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb1:random_DNARoot" [ + pos [ 30 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 0 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 6.25549 28.9096 -0.5 ] + nhpr [ 90 0 0 ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 24.8589 43.3428 0 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2302" [ + vis [ "2302" "2301" "2303" "2304" "2305" "2308" "2307" "2306" ] + suit_edge [ 3 0 ] + suit_edge [ 240 3 ] + suit_edge [ 3 240 ] + suit_edge [ 8 3 ] + suit_edge [ 0 5 ] + suit_edge [ 261 8 ] + suit_edge [ 5 262 ] + battle_cell [ 20 20 60 20 -0.5 ] + group "streets" [ + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ 90 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_divided_30x20_DNARoot" [ + code [ "street_w_grass_divided_30x20" ] + pos [ 90 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ 60 20 -2.28882e-005 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 80 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 4 0 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 6 -15 0 ] + nhpr [ 165 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 60 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 15.3024 -14.0195 0 ] + nhpr [ 165 0 -0 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 60 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 60 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 50 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb2:random_DNARoot" [ + pos [ 40 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb1:random20_DNARoot" [ + pos [ 40 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 46.7725 -3.22564 -2.28882e-005 ] + nhpr [ 150 0 -0 ] + ] + ] + visgroup "2303" [ + vis [ "2303" "2301" "2302" "2304" "2305" "2306" "2307" "2308" "2310" ] + suit_edge [ 8 9 ] + suit_edge [ 9 8 ] + suit_edge [ 5 9 ] + suit_edge [ 9 5 ] + suit_edge [ 5 10 ] + suit_edge [ 10 5 ] + suit_edge [ 8 10 ] + suit_edge [ 10 8 ] + suit_edge [ 262 263 ] + suit_edge [ 264 261 ] + battle_cell [ 20 20 110 20 -0.5 ] + group "streets" [ + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ 110 20 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb1:random20_DNARoot" [ + pos [ 105 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 6.95515 -11.9105 0 ] + nhpr [ 165 0 -0 ] + scale [ 0.795135 0.795135 0.795135 ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 115 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 11.1752 -13.615 0 ] + nhpr [ 165 0 -0 ] + ] + ] + landmark_building "tb1:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Sofa Whoopee Cushions" ] + pos [ 80 50 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.3 ] + scale [ 0.8 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -0.26 ] + scale [ 2.1 1 1.2 ] + kern [ 0.109824 ] + width [ 25 ] + height [ 25 ] + flags [ "c" ] + text [ + letters [ "W" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.129412 0.533333 0.619608 1 ] + pos [ 0 0 -1.14 ] + scale [ 1 1 0.7 ] + width [ 25.8552 ] + height [ 25.8552 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -0.25 ] + scale [ 1.6 1 2.5 ] + kern [ 0.178793 ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + ] + ] + ] + landmark_building "tb2:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Inflatable Wrecking Balls" ] + pos [ 105 -10 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -2.44 ] + nhpr [ -0 0 -3 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.733333 0 0.368627 1 ] + pos [ 0 0 0.75 ] + nhpr [ -0 0 3 ] + scale [ 1.2 1 1.3 ] + kern [ 0.079331 ] + wiggle [ 4 ] + stumble [ 0.08 ] + stomp [ 0.05 ] + width [ 36.8297 ] + height [ 36.8297 ] + flags [ "cd" ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.25098 0.501961 0.501961 1 ] + pos [ 0 0 -0.62 ] + nhpr [ -0 0 4 ] + scale [ 1.1 1 1.4 ] + kern [ 0.11259 ] + wiggle [ 4.51671 ] + stomp [ 0.037045 ] + width [ 32.4349 ] + height [ 32.4349 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 102.467 41.6953 6.86646e-005 ] + nhpr [ 15 0 -0 ] + ] + ] + visgroup "2304" [ + vis [ "2304" "2301" "2302" "2303" "2305" "2306" "2307" "2308" ] + suit_edge [ 12 13 ] + suit_edge [ 14 15 ] + suit_edge [ 241 12 ] + suit_edge [ 12 241 ] + suit_edge [ 241 15 ] + suit_edge [ 15 241 ] + suit_edge [ 263 12 ] + suit_edge [ 15 264 ] + battle_cell [ 20 20 140 25 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 160 40 -1.52588e-005 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 160 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 160 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 170 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb2:random20_DNARoot" [ + pos [ 140 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.31 0.63 0.37 1 ] + count [ 2 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 13 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.24 ] + baseline [ + code [ "mickey" ] + color [ 0.0745098 0.505882 0.0117647 1 ] + pos [ 0 0 -0.31 ] + scale [ 0.685 1 0.8 ] + wiggle [ 1.49012 ] + stomp [ 0.048224 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "J" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 1.6 ] + scale [ 0.8 1 0.5 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 150 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -3 -17 0 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 5 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 5 -3 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 170 20 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4 8 18 ] + nhpr [ -30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 0.41 ] + nhpr [ -0 0 -6 ] + scale [ 1.2 1 1.2 ] + width [ 40.1461 ] + height [ 40.1461 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 1 1 ] + pos [ 0 0 -0.93 ] + nhpr [ -0 0 -3 ] + scale [ 1.2 1 1.2 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.01 ] + nhpr [ -0 0 -3 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 20 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 0.75 0.75 0.75 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 40 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 4.00001 -36 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 170 10 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 8.37209 2.71768 19.9072 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -13.07 -11.09 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 5 -3.00002 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.11007 1.11007 1.11007 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 4.61293 -3.4305 1.4826 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb3:20_DNARoot" [ + pos [ 170 0 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb2:random20_DNARoot" [ + pos [ 170 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 134.802 2.23568 -1.52588e-005 ] + nhpr [ 165 0 -0 ] + ] + ] + visgroup "2305" [ + vis [ "2305" "2304" "2303" "2302" "2301" "2306" "2307" "2308" "2310" ] + suit_edge [ 13 17 ] + suit_edge [ 17 18 ] + suit_edge [ 19 20 ] + suit_edge [ 20 14 ] + suit_edge [ 17 21 ] + suit_edge [ 21 17 ] + suit_edge [ 20 21 ] + suit_edge [ 21 20 ] + battle_cell [ 20 20 140 55 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 160 40 -3.8147e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb3:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "The Karnival Kid" ] + pos [ 160 65 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 13 -3.14 4.09 ] + nhpr [ -0 0 -0 ] + scale [ 1.3 1 1 ] + sign [ + color [ 1 0.88 0.56 1 ] + scale [ 2.5 1 2.9 ] + baseline [ + code [ "mickey" ] + color [ 1 0.32549 0 1 ] + pos [ 0 0 -0.61 ] + scale [ 0.5 1 0.5 ] + wiggle [ 2 ] + stomp [ 0.01 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.682353 0.172549 1 ] + pos [ -0.12 0 -0.1 ] + scale [ 0.4 1 0.4 ] + kern [ 0.008935 ] + wiggle [ 2.05907 ] + stomp [ 0.010949 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 120 55 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 120 50 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + ] + group "props" [ + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 126.501 64.175 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.637711 0.637711 0.637711 ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 124.929 43.8333 -3.8147e-005 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "2306" [ + vis [ "2304" "2306" "2305" "2303" "2307" "2308" "2309" "2310" "2312" "2313" "2302" "2301" ] + suit_edge [ 222 223 ] + suit_edge [ 223 222 ] + suit_edge [ 224 223 ] + suit_edge [ 223 224 ] + suit_edge [ 224 25 ] + suit_edge [ 225 222 ] + suit_edge [ 222 19 ] + suit_edge [ 18 224 ] + suit_edge [ 242 18 ] + suit_edge [ 18 242 ] + suit_edge [ 242 19 ] + suit_edge [ 19 242 ] + battle_cell [ 20 20 140 85 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 160 70 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb4:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Dr. Pulyurleg, Chiropractor" ] + pos [ 120 80 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.58 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ -0.18 0 1.08 ] + scale [ 0.9 1 1 ] + kern [ 0.047797 ] + wiggle [ 1.75521 ] + width [ 25.3421 ] + height [ 25.3421 ] + flags [ "d" ] + text [ + letters [ "D" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "." ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.701961 0 0 1 ] + pos [ 0 0 -0.26 ] + scale [ 1.2 1 1.2 ] + kern [ 0.12794 ] + wiggle [ 6.45834 ] + stumble [ 0.077553 ] + width [ 27.5406 ] + height [ 27.5406 ] + flags [ "d" ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "R" ] + ] + ] + ] + ] + flat_building "tb4:20_DNARoot" [ + pos [ 120 95 0 ] + nhpr [ 90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 85 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 160 100 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 120 70 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 3.00003 -5 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2307" [ + vis [ "2307" "2306" "2305" "2304" "2303" "2308" "2309" "2310" "2311" "2312" "2313" "2314" "2302" ] + suit_edge [ 25 27 ] + suit_edge [ 27 28 ] + suit_edge [ 29 30 ] + suit_edge [ 30 225 ] + suit_edge [ 243 30 ] + suit_edge [ 30 243 ] + suit_edge [ 243 27 ] + suit_edge [ 27 243 ] + battle_cell [ 20 20 140 115 -0.5 ] + group "streets" [ + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ 160 140 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 120 120 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb4:random20_DNARoot" [ + pos [ 110 135 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 110 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 0.69 3.23 19.24 ] + nhpr [ 15 0 -0 ] + color [ 1 0.71 0.27 1 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 125 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ -9 -7 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 19.87 -11.17 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 6.99998 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 6.76428 -3.35706 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 140 150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 120 100 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 140 140 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 110 100 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 10 -3.99998 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.22765 1.22765 1.22765 ] + ] + prop "gallery2_DNARoot" [ + code [ "gallery2" ] + pos [ 10.144 -4.70386 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb4:random20_DNARoot" [ + pos [ 110 120 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.14 0.53 0.3 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.32 0.54 0.36 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 10 -18 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.62 2.78999 20.4096 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 117.142 121.677 1.90735e-005 ] + nhpr [ 90 0 -0 ] + ] + ] + visgroup "2308" [ + vis [ "2308" "2307" "2306" "2305" "2304" "2303" "2309" "2310" "2311" "2312" "2313" "2314" "2302" ] + suit_edge [ 28 31 ] + suit_edge [ 32 29 ] + suit_edge [ 245 29 ] + suit_edge [ 29 245 ] + suit_edge [ 245 28 ] + suit_edge [ 28 245 ] + battle_cell [ 20 20 180 120 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 200 140 -7.62939e-006 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb3:random20_DNARoot" [ + pos [ 190 100 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 11 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.44 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.23 ] + kern [ 0.035129 ] + wiggle [ 3.12775 ] + stomp [ 0.027854 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.11 0 1.79 ] + scale [ 0.6 1 0.5 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + ] + ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 175 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb3:random20_DNARoot" [ + pos [ 170 100 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + flat_building "tb39:random_DNARoot" [ + pos [ 160 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 163.24 135.395 -7.62939e-006 ] + nhpr [ 30 0 -0 ] + ] + ] + visgroup "2309" [ + vis [ "2309" "2308" "2307" "2306" "2310" "2311" "2312" "2313" "2314" ] + suit_edge [ 34 35 ] + suit_edge [ 36 37 ] + suit_edge [ 37 38 ] + suit_edge [ 39 40 ] + suit_edge [ 40 41 ] + suit_edge [ 42 43 ] + suit_edge [ 31 34 ] + suit_edge [ 43 32 ] + battle_cell [ 20 20 220 120 -0.5 ] + group "streets" [ + street "street_4way_intersection_DNARoot" [ + code [ "street_4way_intersection" ] + pos [ 200 100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + ] + group "props" [ + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 237.65 138.14 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 201 138 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 201 102 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 236.79 101.86 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + visgroup "2310" [ + vis [ "2310" "2309" "2308" "2311" "2312" "2313" "2314" "2307" "2306" "2305" "2302" "2303" "2304" "2315" ] + suit_edge [ 41 45 ] + suit_edge [ 45 46 ] + suit_edge [ 46 47 ] + suit_edge [ 50 51 ] + suit_edge [ 51 52 ] + suit_edge [ 52 42 ] + suit_edge [ 47 53 ] + suit_edge [ 53 47 ] + suit_edge [ 50 54 ] + suit_edge [ 54 50 ] + suit_edge [ 47 50 ] + battle_cell [ 20 20 219 164 -0.5 ] + group "streets" [ + street "street_courtyard_70_exit_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ 220 185 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 220 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 220 150 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_courtyard_w_grass_DNARoot" [ + code [ "street_courtyard_w_grass" ] + pos [ 220 185 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 250 150 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 190 140 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_Tcourtyard_w_grass" ] + pos [ 220 185 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_Tcourtyard_w_grass" ] + pos [ 220 185 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb39:toon_landmark_TT_B2_raised_DNARoot" [ + code [ "toon_landmark_TT_B2_raised" ] + title [ "Barely Palatable Pasta" ] + pos [ 175 177 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + pos [ 0 0 -1 ] + scale [ 0.8 1 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.384314 0 1 ] + pos [ 0 0 1.2 ] + scale [ 1.5 1 1.5 ] + width [ 12.5 ] + height [ 12.5 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.611765 0.027451 0.278431 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.5 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "a" ] + ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 7.99998 -43.5 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 2.99998 -2.99998 0 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.54 0.44 1 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ -12 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ -7.00002 -9.99998 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ -7 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ -2 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 13 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 18 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 23 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 3 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 23 -9.99998 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 13 -9.99998 0 ] + nhpr [ -0 0 -0 ] + ] + ] + landmark_building "tb41:toon_landmark_TT_A1_raised_DNARoot" [ + code [ "toon_landmark_TT_A1_raised" ] + title [ "" ] + pos [ 266.146 197.914 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "prop_drycleaner_sign_DNARoot" [ + code [ "prop_drycleaner_sign" ] + pos [ 12.0175 -4.23605 19.0499 ] + nhpr [ 90 0 -0 ] + scale [ 2.2 2.2 2.2 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 7.38504 -2.81789 0 ] + nhpr [ -0 0 -0 ] + color [ 1 0.71 0.27 1 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -2.08582 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 2.91418 -11.146 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 27.9142 -11.146 0 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 6.91399 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 22.9142 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -7.08582 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 1.91417 -11.146 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 6.91399 -11.146 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 17.9142 -11.146 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 22.9142 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 32.9142 -11.146 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 32.9142 -11.146 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 17.9142 -11.146 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 6.91417 -11.146 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 17.914 -7.14597 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 6.91417 -6.14603 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 175 190 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 175 215 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 175 205 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 175 230 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.31 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 31.0001 -15.0002 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 14.9999 -16.0002 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 10 -25 0 ] + nhpr [ 90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_brick3" ] + pos [ 10 -20 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 10 -20 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 10 -15 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_brick3" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 195 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 10.66 4.52 19.14 ] + nhpr [ -0 0 -0 ] + color [ 0.33 0.73 0.43 1 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 25 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 30 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_brick2" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_brick2" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_brick2" ] + pos [ 20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 175 150 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 0.88 0.8 1 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 5.00002 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodbrush_brick" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ 1 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 210 230 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 210 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 220 230 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 230 230 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 25 -25 0 ] + nhpr [ 90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 25 -15 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_sandstone" ] + pos [ 25 -15 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 25 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_brick2" ] + pos [ 0 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_brick2" ] + pos [ 15 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_brick2" ] + pos [ 25 -10 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 250 230 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 265 230 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 265 215 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_light_round_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 0 -31 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 1.00006 -16.0002 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 265 175 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 15 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 20 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 25 -10 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_sandstone" ] + pos [ 24 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_sandstone" ] + pos [ 20 -10 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 265 150 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 190 150 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 190 140 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + prop "prop_light_round_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15 -1 0 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 250 150 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 265 150 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_light_round_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 14.9999 -4.99988 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 230 245 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 195 230 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.31 0.63 0.37 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 175 205 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb39:random_DNARoot" [ + pos [ 160 165 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb41:random_DNARoot" [ + pos [ 250 230 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb39:random20_DNARoot" [ + pos [ 175 165 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 203.59 150.833 0 ] + nhpr [ 105 0 -0 ] + ] + ] + visgroup "2311" [ + vis [ "2311" "2310" "2309" "2308" "2307" "2312" "2313" "2306" "2314" ] + suit_edge [ 35 55 ] + suit_edge [ 55 56 ] + suit_edge [ 56 57 ] + suit_edge [ 59 60 ] + suit_edge [ 60 61 ] + suit_edge [ 61 36 ] + suit_edge [ 57 59 ] + suit_edge [ 59 239 ] + suit_edge [ 239 59 ] + suit_edge [ 244 57 ] + suit_edge [ 57 244 ] + battle_cell [ 20 20 220 74 -0.5 ] + group "streets" [ + street "street_courtyard_70_exit_DNARoot" [ + code [ "street_courtyard_70_exit" ] + pos [ 220 55 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 220 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 220 90 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_courtyard_w_grass_endR_DNARoot" [ + code [ "street_courtyard_w_grass_endR" ] + pos [ 220 55 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 240 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 190 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_Tcourtyard_w_grass" ] + pos [ 220 55 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_Tcourtyard_w_grass_DNARoot" [ + code [ "street_Tcourtyard_w_grass" ] + pos [ 220 55 0.000102997 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb37:toon_landmark_TT_C1_raised_DNARoot" [ + code [ "toon_landmark_TT_C1_raised" ] + title [ "Hardy Harr Seminars" ] + pos [ 230 10 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ -0.29 0 -0.5 ] + scale [ 1.2 1 1.3 ] + wiggle [ -6.88 ] + width [ 100 ] + height [ 100 ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0.6 0 -0.5 ] + scale [ 1.2 1 1.2 ] + kern [ -0.01 ] + wiggle [ 5.59 ] + width [ 100 ] + height [ 100 ] + text [ + letters [ "A" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.9 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 5 -4 0 ] + nhpr [ -0 0 -0 ] + color [ 0.913725 0.415686 0.0862745 1 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 250 100 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 250 90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 265 90 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 265 75 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick" ] + pos [ -9.99999 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick2" ] + pos [ -9.99999 -1 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 2.99994 -15.9999 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ -4.99998 -15.0001 0 ] + nhpr [ -180 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ 25 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ 15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 5.00001 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone2_DNARoot" [ + code [ "post_brick3" ] + pos [ 5.00001 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -4.99999 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -9.99999 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -9.99999 -5 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -9.99999 0 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 265 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 265 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 265 50 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 265 40 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 275 75 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 265 30 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -20 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -1.13411 -10.0467 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -6.13411 -10.0467 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ -11.1341 -10.0467 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_brick_DNARoot" [ + code [ "fence_ironbar_brick" ] + pos [ 3.86589 -10.0467 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick3_DNARoot" [ + code [ "post_brick3" ] + pos [ -10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 10 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 10 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 10 -15 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 10 -20 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 265 10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.415686 0.270588 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.306315 0.627451 0.370542 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 14 -15 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 255 10 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 240 10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 15 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -5 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 12 -17 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_small_woodbox_ul" ] + pos [ -5 20 0 ] + nhpr [ -0 0 -0 ] + color [ 0.88 0.88 0.88 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -14.9256 35.3815 2.57892 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 255 20 -6 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 210 10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_square_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -5 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 5 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_light_round_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -3 -17 0 ] + nhpr [ 90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ -25 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 15 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ 5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 200 10 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 7.93472 14 -1.19477 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -1.09851 31.9037 4.11407 ] + nhpr [ -0 0 -0 ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 185 10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ -5 -15 0 ] + nhpr [ -0 0 -0 ] + ] + prop "post_sandstone_DNARoot" [ + code [ "post_sandstone" ] + pos [ 0 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -15 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -10 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_ironbar_stuccobrick_DNARoot" [ + code [ "fence_woodbrush_sandstone" ] + pos [ -5 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 0 -20 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 0 -15 0 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 0 -9.99999 0 ] + nhpr [ -90 0 -0 ] + ] + prop "post_brick2_DNARoot" [ + code [ "post_brick2" ] + pos [ 0 -15 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 175 9.99999 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 175 30 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 175 45 0.000102997 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_brick" ] + pos [ 4.99999 -10 -0.000102997 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 20 -10 0 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 20 -9.99998 -0.000102997 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 25 -9.99998 -0.000102997 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 30 -9.99998 -0.000102997 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 9.99999 -45 -0.000102997 ] + nhpr [ -90 0 -0 ] + scale [ 0.466563 0.466563 0.466563 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 15 -10 0 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 4.99998 0 0.000102997 ] + nhpr [ -0 0 -0 ] + color [ 0.9 0.56 0.34 1 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -10 -9.99998 -0.000102997 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ -5.00001 -9.99998 -0.000102997 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodbrush_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 0 -9.99998 -0.000102997 ] + nhpr [ -0 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 4.99998 -4.99996 0.000102997 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 15 -4.99998 -0.000102997 ] + nhpr [ -90 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 15 -4.99998 -0.000102997 ] + nhpr [ -90 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 4.99999 -4.99998 -0.000102997 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_light_round_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 21 -15.9999 -0.000102997 ] + nhpr [ 90 0 -0 ] + ] + prop "post_stuccobrick_DNARoot" [ + code [ "post_brick2" ] + pos [ -10 -9.99998 -0.000102997 ] + nhpr [ -0 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 30 -9.99998 -0.000102997 ] + nhpr [ -90 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 35 -9.99998 -0.000102997 ] + nhpr [ 180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 40 -9.99998 -0.000102997 ] + nhpr [ -180 0 -0 ] + ] + prop "fence_woodflower_sandstone_DNARoot" [ + code [ "fence_woodflower_sandstone" ] + pos [ 45 -9.99998 -0.000102997 ] + nhpr [ 180 0 -0 ] + ] + prop "post_brick_DNARoot" [ + code [ "post_brick" ] + pos [ 44 -9.99998 -0.000102997 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 175 30 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 175 65 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 160 75 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + ] + flat_building "tb37:random20_DNARoot" [ + pos [ 175 90 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 190 90 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 175 75 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 6.00002 -15 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 175 65 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 185 0 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 255 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 280 30 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 240 -4.99999 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.71 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 200 10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 1 0.71 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 255 10 -6 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 185 20 -6 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 185 10 -6 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 1 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb37:random_DNARoot" [ + pos [ 160 45 0.000102997 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 3 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 13 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + ] + wall [ + height [ 9 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 248.12 66.2144 -3.05176e-005 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2312" [ + vis [ "2312" "2311" "2310" "2309" "2308" "2307" "2306" "2313" "2314" "2315" "2316" "2317" ] + suit_edge [ 38 63 ] + suit_edge [ 64 39 ] + suit_edge [ 246 64 ] + suit_edge [ 64 246 ] + suit_edge [ 246 63 ] + suit_edge [ 63 246 ] + battle_cell [ 20 20 260 120 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 240 100 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 265 100 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 250 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb41:random20_DNARoot" [ + pos [ 265 140 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 280 100 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "winter_sports_DNARoot" [ + code [ "winter_sports" ] + pos [ 5.76541 -3.2226 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.835411 0.835411 0.835411 ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 5.93609 -3.07341 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 253.658 135.336 0.000114441 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2313" [ + vis [ "2313" "2314" "2315" "2316" "2317" "2312" "2311" "2310" "2309" "2308" "2307" "2306" ] + suit_edge [ 63 65 ] + suit_edge [ 229 232 ] + suit_edge [ 65 230 ] + suit_edge [ 232 64 ] + suit_edge [ 248 232 ] + suit_edge [ 232 248 ] + suit_edge [ 248 65 ] + suit_edge [ 65 248 ] + battle_cell [ 20 20 300 120 -0.5 ] + group "streets" [ + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ 320 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 330 120 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb9:random20_DNARoot" [ + pos [ 330 100 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 330 150 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_1_DNARoot" [ + code [ "cloth_1" ] + pos [ 9 -3 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 330 130 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.5 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ -14.65 6.49002 20.1949 ] + nhpr [ -0 0 -0 ] + color [ 0.95 0.89 0.17 1 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 280 140 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 8.34 -8.34 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 300 150 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 0.83 0.99 19.8 ] + nhpr [ -0 0 -0 ] + color [ 1 0.92 0.59 1 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ -4.64 -11.15 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 9.69617 -3.32037 1.10393 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 9.89148 -2.77917 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 320 150 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 330 120 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.42 1 ] + ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_c" ] + pos [ 10.4995 -3.05731 0 ] + nhpr [ -0 0 -0 ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -12.5431 -0.907776 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 0.760925 7.48874 19.58 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 0.38 ] + nhpr [ -0 0 -5 ] + scale [ 1.3 1 1.3 ] + kern [ 0.03 ] + wiggle [ 3.04247 ] + stumble [ 0.033424 ] + width [ 26.9273 ] + height [ 26.9273 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.68 ] + nhpr [ -0 0 -3 ] + scale [ 1.3 1 1.3 ] + width [ 24.4996 ] + height [ 24.4996 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0 0 1 ] + pos [ -0.08 0 -2.15 ] + nhpr [ -0 0 -3 ] + scale [ 0.9 1 1 ] + width [ 33.5469 ] + height [ 33.5469 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "d" ] + ] + ] + ] + ] + prop "tailor_shop_DNARoot" [ + code [ "tailor_shop" ] + pos [ 10.7914 -4.26376 1.68993 ] + nhpr [ -0 0.791022 -0 ] + scale [ 0.59319 0.59319 0.59319 ] + ] + ] + flat_building "tb9:random_DNARoot" [ + pos [ 300 140 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 299.905 134.31 2.28882e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2314" [ + vis [ "2314" "2315" "2316" "2317" "2313" "2312" "2310" "2309" "2308" "2307" "2318" ] + suit_edge [ 226 227 ] + suit_edge [ 227 226 ] + suit_edge [ 228 227 ] + suit_edge [ 227 228 ] + suit_edge [ 70 226 ] + suit_edge [ 226 229 ] + suit_edge [ 230 228 ] + suit_edge [ 228 69 ] + suit_edge [ 247 230 ] + suit_edge [ 230 247 ] + suit_edge [ 247 229 ] + suit_edge [ 229 247 ] + battle_cell [ 20 20 300 85 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 280 100 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 280.01 65.36 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + landmark_building "tb9:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "The Punch Line Gym" ] + pos [ 320 90 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "TTC_sign2" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.53 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "mickey" ] + color [ 0 1 0 1 ] + pos [ 0 0 1.14 ] + scale [ 0.7 1 0.7 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + scale [ 1.3 1 1.4 ] + kern [ 0.055485 ] + wiggle [ 5.25383 ] + stomp [ 0.023111 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 1 0 1 ] + pos [ 0 0 -1.01 ] + kern [ 0.186803 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 280 85 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 320 100 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + ] + ] + group "props" [ + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 286 101 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.455373 0.455373 0.455373 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 284.329 73.4212 -0.00012207 ] + nhpr [ 105 0 0 ] + ] + ] + visgroup "2315" [ + vis [ "2315" "2314" "2313" "2312" "2310" "2316" "2317" "2318" "2320" "2321" "2319" "2322" ] + suit_edge [ 69 73 ] + suit_edge [ 73 74 ] + suit_edge [ 75 70 ] + suit_edge [ 73 76 ] + suit_edge [ 76 73 ] + suit_edge [ 75 195 ] + suit_edge [ 195 76 ] + suit_edge [ 76 195 ] + suit_edge [ 195 70 ] + battle_cell [ 20 20 300 55 -0.5 ] + group "streets" [ + street "street_30x40_DNARoot" [ + code [ "street_30x40" ] + pos [ 320 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb14:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "Toontown Theatre" ] + pos [ 279.9 40 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 11.2 -3.09 5 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.73 ] + scale [ 2.3 1 2.3 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.25098 0.501961 1 ] + pos [ -0.13 0 0.26 ] + scale [ 0.5 1 0.5 ] + kern [ 0.03 ] + wiggle [ 2.52543 ] + stumble [ 0.02 ] + stomp [ 0.018828 ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.701961 0 0 1 ] + pos [ 0 0 -0.38 ] + scale [ 0.5 1 0.5 ] + kern [ 0.055963 ] + wiggle [ 4.28232 ] + stumble [ 0.017647 ] + stomp [ 0.015594 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 320 75 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + ] + flat_building "tb9:random20_DNARoot" [ + pos [ 320 65 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 314.589 66.4249 0 ] + nhpr [ -75 0 -0 ] + ] + ] + visgroup "2316" [ + vis [ "2316" "2315" "2314" "2313" "2312" "2317" "2318" "2319" "2320" "2321" "2322" ] + suit_edge [ 74 77 ] + suit_edge [ 77 78 ] + suit_edge [ 79 80 ] + suit_edge [ 80 75 ] + suit_edge [ 78 281 ] + suit_edge [ 281 78 ] + suit_edge [ 79 281 ] + suit_edge [ 281 79 ] + battle_cell [ 20 20 300 20 -0.5 ] + group "streets" [ + street "street_double_corner_DNARoot" [ + code [ "street_double_corner" ] + pos [ 280 40 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb14:random20_DNARoot" [ + pos [ 280 20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 4.309 4.79218 22.2021 ] + nhpr [ 30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.501961 0.25098 0.25098 1 ] + pos [ -0.2 0 -0.57 ] + nhpr [ -0 0 -6 ] + scale [ 1.6 1 1.8 ] + width [ 39.3701 ] + height [ 39.3701 ] + flags [ "d" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 -2.08 ] + nhpr [ -0 0 -3 ] + kern [ 0.052901 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ur" ] + pos [ -16.28 -1.47 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 270 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 270 5 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 265 20 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 320 0 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 0.31 0.63 0.37 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 300 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb14:random20_DNARoot" [ + pos [ 285 -10.0001 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 300 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 304.292 2.99895 7.62939e-006 ] + nhpr [ -180 0 -0 ] + ] + ] + visgroup "2317" [ + vis [ "2317" "2316" "2315" "2314" "2313" "2312" "2318" "2319" "2320" "2321" "2322" "2323" "2310" ] + suit_edge [ 84 88 ] + suit_edge [ 88 84 ] + suit_edge [ 84 79 ] + suit_edge [ 78 82 ] + suit_edge [ 82 88 ] + suit_edge [ 88 82 ] + suit_edge [ 285 84 ] + suit_edge [ 82 287 ] + suit_edge [ 285 288 ] + suit_edge [ 288 285 ] + suit_edge [ 287 288 ] + suit_edge [ 288 287 ] + battle_cell [ 20 20 335 20 -0.5 ] + group "streets" [ + street "street_slope_transition_L_DNARoot" [ + code [ "street_slope_transition_L" ] + pos [ 340 -10 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ 355 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 350 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 320 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 320 50 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 360 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb36:toon_landmark_TT_A2_raised_DNARoot" [ + code [ "toon_landmark_TT_A2_raised" ] + title [ "" ] + pos [ 367.474 -10.3992 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + prop "prop_post_office_sign_DNARoot" [ + code [ "prop_post_office_sign" ] + pos [ 12.4741 -3.39923 18.7267 ] + nhpr [ 90 0 -0 ] + scale [ 1.6 1.6 1.6 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 7.474 -2.3992 0 ] + nhpr [ -0 0 -0 ] + color [ 0.25 0.65 0.29 1 ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 40.4669 -14.4753 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.916135 0.916135 0.916135 ] + ] + ] + landmark_building "tb5:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "" ] + pos [ 333.008 51.3769 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.88 0.56 1 ] + ] + prop "prop_roman_entrance_DNARoot" [ + code [ "prop_roman_entrance" ] + pos [ 8 -8.4 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + color [ 0.33 0.73 0.43 1 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 320 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -5.99997 -16 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 345 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 330 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb36:random_DNARoot" [ + pos [ 330 -10 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 345 50 0.000102997 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 320 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 329.734 35.0325 0 ] + nhpr [ 30 0 -0 ] + ] + ] + visgroup "2318" [ + vis [ "2318" "2317" "2316" "2315" "2319" "2320" "2321" "2322" "2323" "2314" ] + suit_edge [ 284 285 ] + suit_edge [ 287 286 ] + battle_cell [ 20 20 380 20 -0.5 ] + group "streets" [ + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 370 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x20_DNARoot" [ + code [ "street_slope_30x20" ] + pos [ 380 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb34:random20_DNARoot" [ + pos [ 395 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb36:random20_DNARoot" [ + pos [ 380 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 2.44049 2.05953 22.6123 ] + nhpr [ -0 0 -0 ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 372.36 37.2993 -7.62939e-006 ] + nhpr [ 0 0 0 ] + ] + ] + visgroup "2319" [ + vis [ "2319" "2318" "2317" "2320" "2321" "2316" "2322" "2315" "2314" ] + battle_cell [ 20 20 380 80 -0.5 ] + group "streets" [ + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 350 80 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_40x40_DNARoot" [ + code [ "street_sidewalk_40x40" ] + pos [ 370 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 380 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 360 40 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ 385 100 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 16 -10 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 7 7 23 ] + nhpr [ -30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0 0 0.52 ] + nhpr [ -0 0 -6 ] + scale [ 1.1 1 1.5 ] + width [ 27.7863 ] + height [ 27.7863 ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ 0.04 0 -0.81 ] + nhpr [ -0 0 -5 ] + scale [ 1.3 1 1.4 ] + width [ 34.9785 ] + height [ 34.9785 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.15 ] + nhpr [ -0 0 -2 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + ] + ] + prop "prop_toontown_central_fountain_DNARoot" [ + code [ "prop_toontown_central_fountain" ] + pos [ -6 -34.9999 0 ] + nhpr [ -90 0 -0 ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 410 100 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 410 85 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 12 -2.99997 0 ] + nhpr [ -0 0 -0 ] + ] + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 11 -3.99997 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 410 60 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 400 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 360 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 360 60 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 350 80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 0.91 0.54 0.44 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 9 -8.99988 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 350 100 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 1.99 3.13 17.87 ] + nhpr [ -0 0 -0 ] + color [ 0.95 0.89 0.17 1 ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 365 100 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.996078 0.690196 0.486275 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.31706 0.535433 0.361155 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.55 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.72 ] + scale [ 1 1 0.8 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Q" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 0.88 ] + scale [ 0.6 1 0.5 ] + kern [ 0.074587 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.37 ] + scale [ 1 1 0.8 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + ] + flat_building "tb5:random20_DNARoot" [ + pos [ 350 60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_c" ] + pos [ 8.99976 -2.99982 0 ] + nhpr [ -0 0 -0 ] + ] + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 8.84283 -3.66272 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 388.402 93.4765 0 ] + nhpr [ -30 0 -0 ] + ] + ] + visgroup "2320" [ + vis [ "2320" "2321" "2322" "2323" "2325" "2326" "2319" "2318" "2317" "2316" "2315" "2337" "2314" ] + suit_edge [ 89 200 ] + suit_edge [ 204 90 ] + suit_edge [ 200 205 ] + suit_edge [ 205 200 ] + suit_edge [ 204 205 ] + suit_edge [ 205 204 ] + suit_edge [ 251 90 ] + suit_edge [ 90 251 ] + suit_edge [ 251 89 ] + suit_edge [ 89 251 ] + suit_edge [ 286 89 ] + suit_edge [ 90 284 ] + battle_cell [ 20 20 406 20 -0.5 ] + group "streets" [ + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ 405 20 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 390 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 420 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ 400 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ -4 -13 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.859683 0.859683 0.859683 ] + ] + ] + landmark_building "tb34:toon_landmark_TT_A1_raised_DNARoot" [ + code [ "toon_landmark_TT_A1_raised" ] + title [ "Funny Bone Emergency Room" ] + pos [ 417 -10 0 ] + nhpr [ -180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ 0 0 -0.5 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 1 ] + scale [ 1.3 1 1.3 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.960784 0.00392157 0.0392157 1 ] + pos [ 0 0 -0.2 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "E" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 7 -3 0 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.54 0.44 1 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 430 -9.99996 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 8 -15 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 430 -20 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2321" [ + vis [ "2321" "2320" "2319" "2318" "2317" "2316" "2315" "2322" "2323" "2325" "2326" "2331" "2327" "2337" "2314" "2341" ] + suit_edge [ 93 99 ] + suit_edge [ 99 100 ] + suit_edge [ 101 102 ] + suit_edge [ 102 202 ] + suit_edge [ 252 93 ] + suit_edge [ 93 252 ] + suit_edge [ 252 202 ] + suit_edge [ 202 252 ] + suit_edge [ 253 100 ] + suit_edge [ 100 253 ] + suit_edge [ 253 101 ] + suit_edge [ 101 253 ] + suit_edge [ 200 201 ] + suit_edge [ 201 93 ] + suit_edge [ 202 203 ] + suit_edge [ 203 204 ] + suit_edge [ 201 206 ] + suit_edge [ 206 201 ] + suit_edge [ 203 206 ] + suit_edge [ 206 203 ] + battle_cell [ 20 20 452.262 20.3586 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 480 39.9999 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 470 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_R_DNARoot" [ + code [ "street_slope_transition_R" ] + pos [ 420 -9.99997 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 420 20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 440 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -19.9998 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -39.9997 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -59.9997 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 460 -79.9997 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 480 -79.9997 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ 480 0 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -6.57999 -1.29004 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ -17.09 -5.79019 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ -12.95 0.470001 19.54 ] + nhpr [ 15 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 470 -20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 490 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 480 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 430 50 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 15.8221 -16.1739 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 480 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 1.46992 1.92981 19.5204 ] + nhpr [ 15 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.44 ] + nhpr [ -0 0 -3 ] + scale [ 1.2 1 1.2 ] + kern [ 0.035418 ] + width [ 33.5469 ] + height [ 33.5469 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "&" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.686275 0.0313726 0.313726 1 ] + pos [ -0.05 0 -2.08 ] + nhpr [ -0 0 -3 ] + kern [ 0.056193 ] + width [ 32.0986 ] + height [ 32.0986 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "t" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 0.93 ] + nhpr [ -0 0 -6 ] + scale [ 1.2 1 1.2 ] + width [ 41.1675 ] + height [ 41.1675 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 480 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + landmark_building "tb29:toon_landmark_TT_B2_DNARoot" [ + code [ "toon_landmark_TT_B2" ] + title [ "Phony Baloney" ] + pos [ 415 50 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ 0 0 0.58 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.776471 0 0.388235 1 ] + pos [ -0.08 0 0.94 ] + scale [ 0.7 1 1.2 ] + kern [ 0.038232 ] + wiggle [ 3.19119 ] + stomp [ 0.018512 ] + width [ 19.7918 ] + height [ 19.7918 ] + flags [ "b" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.22 0 -0.28 ] + nhpr [ -0 0 1 ] + kern [ 0.034263 ] + width [ 26.8147 ] + height [ 26.8147 ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "!" ] + ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -30 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -44.9997 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 12.1099 4.99997 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -7.4354 4.99994 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.894733 0.894733 0.894733 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -26.2112 4.99997 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.06386 1.06386 1.06386 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -45 5 0 ] + nhpr [ 90 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -45 -15 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.19409 1.19409 1.19409 ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 470 0 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.11 0.8 0.22 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 4.64 -1.43 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 460 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 460 -19.9999 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 460 -34.9999 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 459.999 -49.9999 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 460 -60 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.56 0.21 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 480 -59.9997 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.56 0.21 1 ] + ] + ] + ] + flat_building "tb30:random_DNARoot" [ + pos [ 480.311 -50.3161 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.91 0.63 0.44 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 480 -79.9997 0 ] + nhpr [ -180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + flat_door [ + code [ "door_single_shuttered_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 460 -79.9997 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 460 -79.9997 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -59.9997 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -79.9997 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 480 -94.9997 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 410 -20 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -10 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 440 -19.9998 0 ] + nhpr [ 90 -0.0787278 3.1635e-009 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + ] + node "props" [ + ] + flat_building "tb34:random_DNARoot" [ + pos [ 410 -45 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.27 0.27 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.27 0.27 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb34:random_DNARoot" [ + pos [ 385 -45 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.27 0.27 1 ] + count [ 1 ] + ] + ] + ] + ] + visgroup "2322" [ + vis [ "2322" "2321" "2320" "2317" "2316" "2318" "2323" "2325" "2326" "2327" "2337" "2319" "2315" ] + suit_edge [ 100 103 ] + suit_edge [ 103 104 ] + suit_edge [ 105 101 ] + suit_edge [ 103 106 ] + suit_edge [ 106 103 ] + suit_edge [ 105 188 ] + suit_edge [ 188 101 ] + suit_edge [ 188 106 ] + suit_edge [ 106 188 ] + battle_cell [ 20 20 460 50 -0.5 ] + group "streets" [ + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 460 40 3.8147e-005 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 460 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb30:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "Zippy's Zingers" ] + pos [ 480 55 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.36 ] + nhpr [ -0 0 -3 ] + scale [ 1.1 1 1.1 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.623529 0 0.294118 1 ] + pos [ 0 0 -0.3 ] + nhpr [ -0 0 3 ] + scale [ 1.3 1 1.3 ] + kern [ 0.046458 ] + wiggle [ 8.35534 ] + stumble [ 0.127742 ] + stomp [ -0.026594 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "db" ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "Z" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 440 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 443.452 58.0096 3.8147e-005 ] + nhpr [ 60 0 -0 ] + ] + ] + visgroup "2323" [ + vis [ "2323" "2322" "2321" "2320" "2318" "2325" "2326" "2327" "2329" "2337" "2317" "2316" ] + suit_edge [ 273 111 ] + suit_edge [ 108 289 ] + suit_edge [ 289 116 ] + suit_edge [ 104 107 ] + suit_edge [ 107 108 ] + suit_edge [ 111 112 ] + suit_edge [ 112 105 ] + battle_cell [ 20 20 449.63 88.7125 -0.5 ] + group "streets" [ + street "street_tight_corner_DNARoot" [ + code [ "street_tight_corner" ] + pos [ 430 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 470 100 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb29:random20_DNARoot" [ + pos [ 440 60 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 2.76 -6.66 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 430 60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 430 80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.58 ] + scale [ 1.9 1 1.4 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.07 ] + scale [ 0.5 1 0.8 ] + kern [ 0.009216 ] + wiggle [ 2 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ -0.05 0 1.35 ] + scale [ 0.45 1 0.35 ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 480 100 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ -4.58631 -12.9324 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb29:random20_DNARoot" [ + pos [ 430 125 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 9.5708 -35.9564 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb29:random_DNARoot" [ + pos [ 430 100 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb30:random20_DNARoot" [ + pos [ 480 80 0 ] + nhpr [ -90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 10 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 465.987 95.1675 0.0249939 ] + nhpr [ -90 0 -0 ] + ] + ] + visgroup "2325" [ + vis [ "2325" "2323" "2322" "2321" "2320" "2326" "2327" "2329" "2337" "2330" "2334" ] + suit_edge [ 272 118 ] + suit_edge [ 118 274 ] + suit_edge [ 274 273 ] + suit_edge [ 274 275 ] + suit_edge [ 275 274 ] + battle_cell [ 20 20 450 157 -0.5 ] + group "streets" [ + street "street_slope_transition_R_DNARoot" [ + code [ "street_slope_transition_R" ] + pos [ 420 180 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_slope_DNARoot" [ + code [ "street_interior_corner_slope" ] + pos [ 420 190 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ 450 160 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x20_DNARoot" [ + code [ "street_slope_30x20" ] + pos [ 460 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 470 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 430 160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb33:random_DNARoot" [ + pos [ 430 140 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb33:random20_DNARoot" [ + pos [ 420 160 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_square_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 2 ] + ] + ] + prop "prop_chimney_DNARoot" [ + code [ "prop_chimney" ] + pos [ 15.56 3.37 16.35 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.67 0.25 1 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 5.79356 -48.2573 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 420 195 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ -1 -14.9999 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 420 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87451 0.376471 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 440 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 5 13.9999 4.21819 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 18.1924 38.1356 -1.92734 ] + nhpr [ -180 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 430 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 450 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 410 180 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 420 140 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 25 -13 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 430 210 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 420 180 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2326" [ + vis [ "2326" "2325" "2323" "2322" "2320" "2327" "2329" "2330" "2331" "2334" "2337" "2321" ] + suit_edge [ 116 237 ] + battle_cell [ 20 20 490 120 -0.5 ] + group "buildings" [ + flat_building "tb30:random20_DNARoot" [ + pos [ 500 100 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.67451 0.592157 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.88189 0.439216 0.145252 1 ] + count [ 2 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 3.2149 -2.11125 0 ] + nhpr [ 180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 17.0655 -1.61314 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + ] + node "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 510 140 -3.05176e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 490 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 510 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 475.615 134.683 -3.05176e-005 ] + nhpr [ 30 0 -0 ] + ] + ] + visgroup "2327" [ + vis [ "2327" "2326" "2325" "2323" "2329" "2330" "2331" "2334" "2337" "2322" "2321" "2320" ] + suit_edge [ 126 127 ] + suit_edge [ 127 120 ] + suit_edge [ 237 207 ] + suit_edge [ 130 126 ] + suit_edge [ 207 129 ] + suit_edge [ 126 282 ] + suit_edge [ 282 126 ] + suit_edge [ 282 207 ] + suit_edge [ 207 282 ] + battle_cell [ 20 20 530 151 -0.5 ] + group "streets" [ + street "street_interior_corner_slope_DNARoot" [ + code [ "street_interior_corner_slope" ] + pos [ 540 210 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x20_DNARoot" [ + code [ "street_slope_30x20" ] + pos [ 520 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_outer_corner_DNARoot" [ + code [ "street_outer_corner" ] + pos [ 510 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_transition_L_DNARoot" [ + code [ "street_slope_transition_L" ] + pos [ 560 180 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_t_intersection_DNARoot" [ + code [ "street_t_intersection" ] + pos [ 510 140 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 550 140 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 560 160 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 540 195 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 560 160 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ -3.22781 -10.9288 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 550 140 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5.76692 -36.2913 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 550 125 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 10 -3 0 ] + nhpr [ -0 0 -0 ] + ] + prop "music_inst_DNARoot" [ + code [ "music_inst" ] + pos [ 10 -4 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 510 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 520 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 20.6122 47.7016 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.23694 1.23694 1.23694 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -4.41699 35.8168 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 530 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 540 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 550 220 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_stovepipe_DNARoot" [ + code [ "prop_stovepipe" ] + pos [ 5.36009 1.27988 22.65 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 550 210 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.5 0.68 0.36 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 560 210 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.25 0.65 0.29 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dr" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 560 195 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 560 180 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 560 180 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb18:random_DNARoot" [ + pos [ 560 140 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2329" [ + vis [ "2329" "2327" "2326" "2330" "2331" "2334" "2335" "2336" "2325" "2323" "2337" ] + suit_edge [ 129 131 ] + suit_edge [ 131 132 ] + suit_edge [ 132 133 ] + suit_edge [ 134 135 ] + suit_edge [ 135 136 ] + suit_edge [ 136 130 ] + suit_edge [ 130 283 ] + suit_edge [ 283 130 ] + suit_edge [ 129 283 ] + suit_edge [ 283 129 ] + battle_cell [ 20 20 530 80 -0.5 ] + group "streets" [ + street "street_tight_corner_mirror_DNARoot" [ + code [ "street_tight_corner_mirror" ] + pos [ 500 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb18:random20_DNARoot" [ + pos [ 550 60 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 550 70 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 4.30068 -9.87653 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 500 80 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb18:random20_DNARoot" [ + pos [ 550 80 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.42 0.27 1 ] + ] + ] + ] + landmark_building "tb18:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "The Flying Pie" ] + pos [ 550 105 0 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + sign [ + code [ "sign_general1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -2.16 ] + nhpr [ -0 0 -3 ] + scale [ 1.3 1 1.3 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.776471 0 0.388235 1 ] + pos [ 0 0 1.08 ] + nhpr [ -0 0 2 ] + scale [ 1.9 1 1.1 ] + kern [ 0.164644 ] + width [ 18.2408 ] + height [ 18.2408 ] + flags [ "d" ] + text [ + letters [ "T" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.776471 0 0.388235 1 ] + pos [ 0 0 -0.5 ] + nhpr [ -0 0 2 ] + scale [ 1.8 1 1.9 ] + kern [ 0.167833 ] + stumble [ 0.080013 ] + width [ 33.3333 ] + height [ 33.3333 ] + flags [ "d" ] + text [ + letters [ "F" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 500 55 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.27 0.27 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 11 0 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.5 0.5 0.5 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 514.514 96.4643 0 ] + nhpr [ 75 0 0 ] + ] + ] + visgroup "2330" [ + vis [ "2330" "2329" "2327" "2326" "2331" "2334" "2335" "2336" "2337" "2325" ] + suit_edge [ 133 137 ] + suit_edge [ 137 138 ] + suit_edge [ 139 134 ] + suit_edge [ 137 140 ] + suit_edge [ 140 137 ] + suit_edge [ 139 184 ] + suit_edge [ 184 134 ] + suit_edge [ 184 140 ] + suit_edge [ 140 184 ] + battle_cell [ 20 20 520 50 -0.5 ] + group "streets" [ + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 520 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 520 40 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb21:random20_DNARoot" [ + pos [ 540 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + landmark_building "tb31:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Professor Wiggle's House of Giggles" ] + pos [ 500 40 0 ] + nhpr [ 90 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + color [ 1 0.88 0.56 1 ] + pos [ 0.2 0 0.311759 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0 0.501961 0.501961 1 ] + pos [ -0.12 0 1.03 ] + nhpr [ -0 0 -1 ] + scale [ 0.7 1 0.9 ] + kern [ 0.05481 ] + stomp [ 0.03135 ] + width [ 25 ] + height [ 25 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "s" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 -0.1 ] + scale [ 1.2 1 1.2 ] + kern [ 0.035608 ] + wiggle [ 2.20397 ] + stomp [ 0.02 ] + width [ 33.117 ] + height [ 33.117 ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "s" ] + ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2331" [ + vis [ "2331" "2321" "2334" "2335" "2336" "2337" "2339" "2330" "2329" "2327" "2326" "2340" "2338" "2325" ] + suit_edge [ 138 219 ] + suit_edge [ 219 143 ] + suit_edge [ 220 221 ] + suit_edge [ 221 139 ] + suit_edge [ 256 138 ] + suit_edge [ 138 256 ] + suit_edge [ 256 139 ] + suit_edge [ 139 256 ] + suit_edge [ 257 143 ] + suit_edge [ 143 257 ] + suit_edge [ 257 220 ] + suit_edge [ 220 257 ] + battle_cell [ 20 20 520 25 -0.5 ] + group "streets" [ + street "street_full_corner_DNARoot" [ + code [ "street_full_corner" ] + pos [ 540 -6.00815e-005 7.62939e-006 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 490 -20 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb31:random20_DNARoot" [ + pos [ 500 0 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 11.7 -1.2 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 510 -20 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 510 0 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 525 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "neighborhood_sign_DD_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ 12.67 -1.09 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 500 20 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_single_round_ur" ] + color [ 0.05 0.75 0.27 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 490 -10 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb31:random20_DNARoot" [ + pos [ 500 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.32 0.54 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.92 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 540 0 0 ] + nhpr [ -180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 1 1 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 1 1 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 16.21 -6.62 0 ] + nhpr [ 90 0 -0 ] + scale [ 0.7 0.7 0.7 ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 3 5 18 ] + nhpr [ -0 0 -0 ] + color [ 0.99 0.69 0.49 1 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 5.00002 -35 0 ] + nhpr [ -180 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleAwesome3" ] + cell_id [ 0 ] + pos [ 504.889 35.5017 7.62939e-006 ] + nhpr [ 75 0 -0 ] + ] + ] + visgroup "2334" [ + vis [ "2334" "2331" "2330" "2329" "2335" "2336" "2337" "2338" "2339" "2340" "2326" "2325" "2327" ] + suit_edge [ 218 235 ] + suit_edge [ 235 218 ] + suit_edge [ 213 235 ] + suit_edge [ 235 213 ] + suit_edge [ 213 236 ] + suit_edge [ 236 213 ] + suit_edge [ 218 236 ] + suit_edge [ 236 218 ] + suit_edge [ 143 276 ] + suit_edge [ 277 220 ] + suit_edge [ 218 277 ] + suit_edge [ 276 213 ] + battle_cell [ 20 20 561 19 -0.5 ] + group "streets" [ + ] + group "buildings" [ + landmark_building "tb21:toon_landmark_TT_A3_DNARoot" [ + code [ "toon_landmark_TT_A3" ] + title [ "" ] + pos [ 570 60 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + prop "prop_dentist_DNARoot" [ + code [ "prop_dentist" ] + pos [ 12 -3 16 ] + nhpr [ 90 0 -0 ] + scale [ 1.7 1.7 1.7 ] + ] + ] + landmark_building "tb22:toon_landmark_TT_B1_DNARoot" [ + code [ "toon_landmark_TT_B1" ] + title [ "Rubber Chicken Sandwiches" ] + pos [ 585 -10 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_pillars_ur" ] + color [ 1 0.88 0.56 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0 0 0.64 ] + scale [ 0.8 1 0.6 ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.72549 0.360784 0 1 ] + pos [ 0.24 0 -0.05 ] + nhpr [ -0 0 2 ] + scale [ 1.2 1 1 ] + kern [ 0.063127 ] + wiggle [ 1.76275 ] + stomp [ 0.02 ] + width [ 32.5373 ] + height [ 32.5373 ] + text [ + letters [ "R" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "B" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 1 0 1 ] + pos [ 0 0 -1.11 ] + scale [ 1.2 1 1.3 ] + kern [ 0.144058 ] + width [ 25.3711 ] + height [ 25.3711 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 540 50 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 3.95361 -0.0714264 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 540 0 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 580 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 560 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 570 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 13.49 -4.76 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 550 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 1.91 -9.63 0 ] + nhpr [ 180 0 -0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -5 -15 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 540 -10 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 555 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 555 60 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 540 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + visgroup "2335" [ + vis [ "2335" "2334" "2331" "2330" "2329" "2336" "2338" "2339" "2340" ] + suit_edge [ 162 218 ] + suit_edge [ 213 157 ] + battle_cell [ 20 20 610 20 -0.5 ] + group "streets" [ + street "street_40x40_DNARoot" [ + code [ "street_40x40" ] + pos [ 580 0 -4.57764e-005 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 620 -10 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 580 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_20x20_DNARoot" [ + code [ "street_sidewalk_20x20" ] + pos [ 600 60 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random20_DNARoot" [ + pos [ 620 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 1 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 11.34 -8.57 0 ] + nhpr [ 180 0 -0 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 620 -5 0 ] + nhpr [ -90 0 -0 ] + width [ 5 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.996078 0.894118 0.486275 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 620 60 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 595 60 0 ] + nhpr [ -0 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + prop "prop_tree_fat_brickbox_ul_DNARoot" [ + code [ "prop_tree_fat_brickbox_ul" ] + pos [ 0.887024 -21.0446 0 ] + nhpr [ -0 0 -0 ] + ] + prop "gallery2_DNARoot" [ + code [ "gallery2" ] + pos [ 13.5376 -3.68808 -0.000900053 ] + nhpr [ -0 -0.0759305 -0 ] + ] + prop "prop_facade_d_DNARoot" [ + code [ "prop_facade_d" ] + pos [ 13 -3.00018 0 ] + nhpr [ -0 0 1.18767 ] + scale [ 1.18483 1.18483 1.18483 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 605 -10 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 3 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 11 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 615.93 34.8039 -4.57764e-005 ] + nhpr [ -0 0 -0 ] + ] + ] + visgroup "2336" [ + vis [ "2336" "2335" "2334" "2331" "2330" "2329" "2338" "2339" "2340" ] + suit_edge [ 157 158 ] + suit_edge [ 158 159 ] + suit_edge [ 160 161 ] + suit_edge [ 161 162 ] + suit_edge [ 259 159 ] + suit_edge [ 159 259 ] + suit_edge [ 259 160 ] + suit_edge [ 160 259 ] + suit_edge [ 258 160 ] + suit_edge [ 160 258 ] + suit_edge [ 258 159 ] + suit_edge [ 159 258 ] + suit_edge [ 159 163 ] + suit_edge [ 164 160 ] + battle_cell [ 20 20 667 20 -0.5 ] + group "streets" [ + street "street_exterior_whole_corner_w_grass_DNARoot" [ + code [ "street_exterior_whole_corner_w_grass" ] + pos [ 670 39.9999 1.52588e-005 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ 630 19.9999 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb22:random20_DNARoot" [ + pos [ 700 -5 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 5.22 4.26 18.91 ] + nhpr [ -0 0 -0 ] + color [ 1 0.9 0.33 1 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 15 -24.0004 0 ] + nhpr [ -90 0 -0 ] + scale [ 0.9 0.9 0.9 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 700 40 0 ] + nhpr [ -90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 620 50 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.11 0.8 0.22 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 34 1.00006 0 ] + nhpr [ -15 0 -0 ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 675 -4.99999 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 700 60 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 14 0 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb22:random20_DNARoot" [ + pos [ 635 -5 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb22:random_DNARoot" [ + pos [ 660 -4.99994 0 ] + nhpr [ -180 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 700 30 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 700 15 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 0.59 1 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 16.9999 14.0001 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 700 0 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_fence_wood_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 700 30 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.69 0.51 1 ] + count [ 2 ] + ] + ] + ] + ] + group "props" [ + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_hydrant_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_hydrant" ] + anim [ "tt_a_ara_ttc_hydrant_fightBoost" ] + cell_id [ 0 ] + pos [ 682.759 6.87756 1.52588e-005 ] + nhpr [ -150 0 -0 ] + ] + ] + visgroup "2337" [ + vis [ "2337" "2321" "2331" "2334" "2320" "2322" "2323" "2325" "2326" "2327" "2329" "2330" ] + suit_edge [ 120 278 ] + suit_edge [ 278 272 ] + suit_edge [ 279 278 ] + suit_edge [ 278 279 ] + battle_cell [ 20 20 491 180 -0.5 ] + group "streets" [ + street "street_slope_pathway_30x20_DNARoot" [ + code [ "street_slope_pathway_30x20" ] + pos [ 485 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_slope_30x10_DNARoot" [ + code [ "street_slope_30x10" ] + pos [ 505 180 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_30x20_DNARoot" [ + code [ "street_30x20" ] + pos [ 500 180 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_10x20_DNARoot" [ + code [ "street_10x20" ] + pos [ 510 180 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb32:toon_landmark_hqTT_DNARoot" [ + code [ "toon_landmark_hqTT" ] + building_type [ "hq" ] + title [ "" ] + pos [ 490 140 0 ] + nhpr [ -180 0 -0 ] + ] + landmark_building "tb33:toon_landmark_TT_C1_raised_DNARoot" [ + code [ "toon_landmark_TT_C1_raised" ] + title [ "" ] + pos [ 475 210 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + prop "prop_TT_stairs_DNARoot" [ + code [ "prop_TT_stairs" ] + pos [ 5 -4 0 ] + nhpr [ -0 0 -0 ] + color [ 0.91 0.63 0.44 1 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 460 210 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_tree_small_brickbox_ul_DNARoot" [ + code [ "prop_tree_small_brickbox_ul" ] + pos [ 8.00003 -14 0 ] + nhpr [ -90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 495 210 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 0 -15.0002 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_small_brickbox_ur_DNARoot" [ + code [ "prop_tree_small_brickbox_ur" ] + pos [ 9.6377 -14.761 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 460 225 0 ] + nhpr [ -90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + flat_building "tb33:random_DNARoot" [ + pos [ 510 210 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 4 ] + code [ "wall_basement_brick_ur" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.3 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + ] + ] + group "props" [ + ] + ] + visgroup "2338" [ + vis [ "2338" "2336" "2335" "2334" "2339" "2340" "2331" ] + suit_edge [ 163 265 ] + suit_edge [ 268 164 ] + suit_edge [ 268 271 ] + suit_edge [ 271 268 ] + suit_edge [ 265 290 ] + suit_edge [ 291 268 ] + battle_cell [ 20 20 679 90 -0.5 ] + group "streets" [ + street "street_exterior_whole_corner_w_grass_DNARoot" [ + code [ "street_exterior_whole_corner_w_grass" ] + pos [ 670 70 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 640 120 0 ] + nhpr [ 180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 660 120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ 670 60 0 ] + nhpr [ -0 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ 670 50 0 ] + nhpr [ -180 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb24:random20_DNARoot" [ + pos [ 670 120 0 ] + nhpr [ -0 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 0.99 0.99 0.49 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_roof_access_DNARoot" [ + code [ "prop_roof_access" ] + pos [ 2.21 5.02 19 ] + nhpr [ -0 0 -0 ] + color [ 1 0.71 0.27 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 11.0001 -15 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.1056 1.1056 1.1056 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 30 -46.0005 0 ] + nhpr [ -0 0 -0 ] + scale [ 0.8 0.8 0.8 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 690 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:10_10_DNARoot" [ + pos [ 640 50 0 ] + nhpr [ 90 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 640 80 0 ] + nhpr [ 180 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 630 80 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 7.94946 -23.9157 0 ] + nhpr [ -15 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 630 95 0 ] + nhpr [ 90 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 630 110 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 630 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 640 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + prop "prop_tree_fat_brickbox_ur_DNARoot" [ + code [ "prop_tree_fat_brickbox_ur" ] + pos [ -1 -11.9999 0 ] + nhpr [ -0 0 -0 ] + ] + ] + flat_building "tb21:random_DNARoot" [ + pos [ 650 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 660 140 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 660 120 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + flat_door [ + code [ "door_single_square_ur" ] + color [ 1 0.59 0.59 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "tb21:random20_DNARoot" [ + pos [ 640 60 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.705882 0.270588 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.944882 0.711441 0.559518 1 ] + ] + ] + prop "prop_diner_entrance_DNARoot" [ + code [ "prop_diner_entrance" ] + pos [ 9.9 -2.5 0 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + pos [ 0 0 -0.59 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.12 0 0.02 ] + scale [ 0.85 1 0.9 ] + kern [ 0.01679 ] + wiggle [ 2 ] + stomp [ 0.01 ] + flags [ "d" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.21 0 1.9 ] + scale [ 0.7 1 0.5 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + prop "prop_billboard_DNARoot" [ + code [ "prop_billboard" ] + pos [ 7.38 7.67 20 ] + nhpr [ -30 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 1.24 ] + nhpr [ -0 0 -6 ] + scale [ 1.3 1 1.1 ] + kern [ 0.037787 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "," ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -0.01 ] + nhpr [ -0 0 -2 ] + scale [ 1.3 1 1.1 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.09 ] + nhpr [ -0 0 -1 ] + scale [ 1.1 1 1.1 ] + width [ 24.2612 ] + height [ 24.2612 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "v" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "humanist" ] + color [ 0 0.501961 0.501961 1 ] + pos [ 0 0 -2.12 ] + width [ 21.2603 ] + height [ 21.2603 ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 37.5071 6.29932 0 ] + nhpr [ -180 0 -0 ] + scale [ 1.5 1.5 1.5 ] + ] + ] + ] + group "props" [ + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 686 73.9997 0 ] + nhpr [ -0 0 -0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 687 56.0003 0 ] + nhpr [ -180 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_mailbox_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_mailbox" ] + anim [ "tt_a_ara_ttc_mailbox_idle0" ] + cell_id [ 0 ] + pos [ 689.13 75.3608 2.28882e-005 ] + nhpr [ -165 0 0 ] + ] + ] + visgroup "2339" [ + vis [ "2339" "2338" "2336" "2335" "2334" "2331" "2340" ] + suit_edge [ 290 292 ] + suit_edge [ 292 293 ] + suit_edge [ 293 291 ] + suit_edge [ 292 294 ] + suit_edge [ 294 292 ] + suit_edge [ 293 295 ] + suit_edge [ 295 293 ] + battle_cell [ 20 20 722 89 -0.5 ] + group "streets" [ + street "street_w_grass_60x40_DNARoot" [ + code [ "street_w_grass_60x40" ] + pos [ 720 90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + landmark_building "tb24:toon_landmark_TT_A2_DNARoot" [ + code [ "toon_landmark_TT_A2" ] + title [ "Punchline Movie Palace" ] + pos [ 700 120 0 ] + nhpr [ -0 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "prop_marquee_DNARoot" [ + code [ "prop_marquee" ] + pos [ 12.34 -3.01 2.66 ] + nhpr [ -0 0 -0 ] + sign [ + color [ 1 0.88 0.56 1 ] + scale [ 2.7 1 2.2 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.752941 1 ] + pos [ -0.12 0 -0.13 ] + scale [ 0.5 1 0.5 ] + kern [ 0.024043 ] + wiggle [ 3 ] + stomp [ 0.01 ] + flags [ "d" ] + text [ + letters [ "N" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "G" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.0745098 0.85098 0.733333 1 ] + pos [ -0.09 0 -0.73 ] + scale [ 0.5 1 0.5 ] + wiggle [ 2.76215 ] + stomp [ 0.01 ] + text [ + letters [ "M" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + ] + landmark_building "tb23:toon_landmark_TT_C1_DNARoot" [ + code [ "toon_landmark_TT_C1" ] + title [ "Sundae Funnies Ice Cream" ] + pos [ 730 60 0 ] + nhpr [ 180 0 -0 ] + door [ + code [ "door_double_curved_ur" ] + color [ 1 0.63 0.38 1 ] + ] + sign [ + code [ "TTC_sign1" ] + color [ 1 0.88 0.56 1 ] + pos [ 0.15 0 0.16 ] + scale [ 0.7 1 0.7 ] + baseline [ + code [ "TT_Comedy" ] + color [ 1 1 0 1 ] + pos [ 0 0 -0.43 ] + nhpr [ -0 0 1 ] + scale [ 1.4 1 1.4 ] + width [ 36.0114 ] + height [ 36.0114 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "F" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + baseline [ + code [ "TT_Comedy" ] + color [ 0.8 0.4 0 1 ] + pos [ 0 0 -1.27 ] + width [ 20 ] + height [ 20 ] + text [ + letters [ "I" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 715 60 0 ] + nhpr [ 180 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 725 120 0 ] + nhpr [ -0 0 -0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + flat_door [ + code [ "door_garage_ur" ] + color [ 1 0.88 0.56 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.99 0.99 0.49 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -68.1679 -17.303 0 ] + nhpr [ -0 0 -0 ] + ] + ] + ] + group "props" [ + ] + flat_building "tb23:random_DNARoot" [ + pos [ 740 60 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 6 -14.9993 0 ] + nhpr [ 90 0 -0 ] + ] + ] + interactive_prop "interactive_prop_phase_5_models_char__ttc_trashcan_DNARoot" [ + code [ "interactive_prop_phase_5_models_char__ttc_trashcan" ] + anim [ "tt_a_ara_ttc_trashcan_idleHiccup0" ] + cell_id [ 0 ] + pos [ 697.723 112.894 0.000106812 ] + nhpr [ 10.0739 0 -0 ] + ] + ] + visgroup "2340" [ + vis [ "2340" "2339" "2338" "2335" "2334" "2331" "2336" ] + group "streets" [ + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 780 120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 760 120 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 760 50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 780 50 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 750 90 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 750 90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ 770 90 0 ] + nhpr [ -90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] + group "buildings" [ + flat_building "tb23:random20_DNARoot" [ + pos [ 780 70 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + prop "linktunnel_dd_1127_DNARoot" [ + code [ "prop_neighborhood_tunnel" ] + pos [ 780 90 0 ] + nhpr [ -90 0 -0 ] + sign [ + code [ "tunnel_sign_red" ] + pos [ 0 0 0.2 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -0.36 ] + scale [ 1.5 1 1.1 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + pos [ 0 0 1.68 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "donaldSZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -1.43 ] + scale [ 1.5 1 1.1 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "B" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "V" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0.501961 0 0.25098 1 ] + pos [ 0 0 -2.05 ] + scale [ 0.8 1 0.8 ] + width [ 36.3888 ] + height [ 36.3888 ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "'" ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "D" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "K" ] + ] + ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 780 130 0 ] + nhpr [ -90 0 -0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 0.99 0.69 0.49 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_stone_ur" ] + color [ 1 0.92 0.59 1 ] + ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 24 -33.9999 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb24:random20_DNARoot" [ + pos [ 740 120 0 ] + nhpr [ 90 0 -0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 740 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 750 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 17 15 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.23751 1.23751 1.23751 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 760 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb24:random_DNARoot" [ + pos [ 770 130 0 ] + nhpr [ -0 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 750 50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 780 50 0 ] + nhpr [ 180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 770 50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 4 11.0004 0 ] + nhpr [ 90 0 -0 ] + scale [ 1.23896 1.23896 1.23896 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 11 -24.0004 0 ] + nhpr [ 90 0 -0 ] + ] + ] + flat_building "tb23:random_DNARoot" [ + pos [ 760 50 0 ] + nhpr [ -180 0 -0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 0.59 1 ] + ] + ] + flat_building "tb23:random20_DNARoot" [ + pos [ 740 40 0 ] + nhpr [ 90 0 -0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 1 0.49 1 ] + count [ 1 ] + ] + ] + ] + ] + group "props" [ + ] + prop "prop_tt_m_ara_gen_tunnelAheadSign_DNARoot" [ + code [ "prop_tt_m_ara_gen_tunnelAheadSign" ] + pos [ 773.275 81.3465 -0.499771 ] + nhpr [ -90 0 0 ] + ] + ] + visgroup "2341" [ + vis [ "2341" "2321" ] + group "props" [ + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 565.534 -85.1643 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.739441 0.739441 0.739441 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 497.121 -85.8672 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.712681 0.712681 0.712681 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 565.791 -54.9341 0 ] + nhpr [ -180 0 -0 ] + scale [ 0.723219 0.723219 0.723219 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 496.498 -54.8544 0 ] + nhpr [ 180 0 -0 ] + scale [ 0.744633 0.744633 0.744633 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 495 -115 10 ] + nhpr [ -0 0 -0 ] + scale [ 0.997809 0.997809 0.997809 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 575 -110 10 ] + nhpr [ -0 0 -0 ] + scale [ 0.939629 0.939629 0.939629 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 600 -49.9997 10 ] + nhpr [ -0 0 -0 ] + scale [ 1.15846 1.15846 1.15846 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 520 -130 10 ] + nhpr [ -0 0 -0 ] + scale [ 1.43794 1.43794 1.43794 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 565 -24.9997 10 ] + nhpr [ -0 0 -0 ] + scale [ 1.11233 1.11233 1.11233 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 530 -14.9997 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.55724 1.55724 1.55724 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 590 -74.9997 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.55815 1.55815 1.55815 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 540 -105 0 ] + nhpr [ -0 0 -0 ] + scale [ 1.21512 1.21512 1.21512 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 510 -29.9997 0 ] + nhpr [ -0 0 -0 ] + ] + ] + node "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ 492.7 -78.6 0 ] + nhpr [ 5 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 529.758 -83.7616 0.346085 ] + nhpr [ -0 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 512.4 -69.9997 0.485466 ] + nhpr [ -90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 542.675 -69.9997 0.425789 ] + nhpr [ 90 0 -0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ 530.082 -56.1489 0.464592 ] + nhpr [ -180 0 -0 ] + ] + ] + street "street_TT_pond_DNARoot" [ + code [ "street_TT_pond" ] + pos [ 530 -69.9997 0 ] + nhpr [ 90 0 -0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + ] +] diff --git a/ttmodels/src/dna/toontown_central_sz.dna b/ttmodels/src/dna/toontown_central_sz.dna new file mode 100644 index 00000000..d324b309 --- /dev/null +++ b/ttmodels/src/dna/toontown_central_sz.dna @@ -0,0 +1,1381 @@ +group "toontownCentral" [ + visgroup "2000:safe_zone" [ + vis [ "2000:safe_zone" ] + prop "npc_origin_3" [ + code [ "DCS" ] + pos [ -124 -77.5 0.525 ] + nhpr [ -15 0 0 ] + ] + group "fishing_pond_1" [ + prop "npc_fisherman_origin_0" [ + code [ "DCS" ] + pos [ -68 -2 -1.975 ] + nhpr [ 27 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -63.5335 41.648 -3.36708 ] + nhpr [ 120 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -90.2253 42.5202 -3.3105 ] + nhpr [ -135 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -94.9218 31.4153 -3.20083 ] + nhpr [ -105 0 0 ] + ] + prop "fishing_spot_DNARoot" [ + code [ "fishing_spot" ] + pos [ -77.5199 46.9817 -3.28456 ] + nhpr [ -180 0 0 ] + ] + ] + group "props" [ + prop "linktunnel_tt_2226_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -239.67 64.08 -6.18 ] + nhpr [ -90 0 0 ] + sign [ + code [ "tunnel_sign_orange" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.84 ] + nhpr [ 0 0 2 ] + scale [ 1.5 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -2 ] + nhpr [ 0 0 2 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + pos [ 0 0 1.77 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + ] + ] + prop "linktunnel_tt_2132_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ -68.38 -202.64 -3.58 ] + nhpr [ -31 0 0 ] + sign [ + code [ "tunnel_sign_orange" ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.76 ] + scale [ 1.5 1 1.5 ] + width [ 33.3333 ] + height [ 33.3333 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ -0.08 0 -1.98 ] + scale [ 0.8 1 0.8 ] + width [ 44.0567 ] + height [ 44.0567 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + pos [ 0 0 1.75 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + ] + ] + prop "linktunnel_tt_2301_DNARoot" [ + code [ "prop_safe_zone_tunnel" ] + pos [ 27.6402 176.475 -6.18 ] + nhpr [ 171 0 0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -0.18 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -2.01 ] + nhpr [ 0 0 1 ] + scale [ 0.8 1 0.8 ] + width [ 40.563 ] + height [ 40.563 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -0.33 ] + scale [ 1.3 1 1 ] + width [ 49.1087 ] + height [ 49.1087 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "I" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ " " ] + ] + ] + baseline [ + pos [ 0 0 1.69 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0 1 ] + pos [ 0 0 -1.34 ] + scale [ 1.3 1 1 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + ] + ] + ] + prop "linktunnel_gs_8000_DNARoot" [ + code [ "prop_GS_tunnel" ] + pos [ 20.9205 172.683 3.24925 ] + nhpr [ -150 -0.083787 0.0101321 ] + sign [ + baseline [ + code [ "mickey" ] + color [ 0.00392157 0.403922 0.803922 1 ] + pos [ 2.07014 0 0.591417 ] + nhpr [ 0 0 0.828508 ] + scale [ 2.67969 1 2.12201 ] + width [ 38.5314 ] + height [ 38.5314 ] + flags [ "b" ] + text [ + letters [ "G" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "f" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0.25098 1 ] + pos [ -0.572558 0 -3.648 ] + nhpr [ 0 0 1.03171 ] + scale [ 3.31651 1 3.4338 ] + wiggle [ -1.9889 ] + stumble [ 0.1 ] + width [ -62.3199 ] + height [ -62.3199 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "p" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "d" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + ] + node "buildings" [ + prop "prop_trolley_station_DNARoot" [ + code [ "prop_trolley_station" ] + pos [ -120.945 -77.5626 0.525 ] + nhpr [ 128 0 0 ] + sign [ + color [ 1 0.88 0.56 1 ] + baseline [ + code [ "mickey" ] + color [ 0.992157 0.968627 0.00784314 1 ] + pos [ 0.5 0 1.33 ] + scale [ 1.4 1 1.4 ] + kern [ -0.09181 ] + width [ 10.9993 ] + height [ 10.9993 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "Y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 0 0 1 ] + pos [ 0.29 0 -1.9 ] + scale [ 2.7 1 2.7 ] + kern [ -0.2159 ] + text [ + letters [ "G" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "M" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "S" ] + ] + ] + ] + ] + landmark_building "sz18:toon_landmark_TT_library_DNARoot" [ + code [ "toon_landmark_TT_library" ] + title [ "Toontown Library" ] + pos [ 91.4475 -44.9255 4 ] + nhpr [ 180 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ 1.52 0 3.88 ] + scale [ 1 1 0.8 ] + baseline [ + code [ "mickey" ] + color [ 1 0.611765 0.129412 1 ] + pos [ 0 0 -0.63 ] + scale [ 2.4 1 2.4 ] + kern [ -0.074144 ] + width [ 32.3782 ] + height [ 32.3782 ] + text [ + letters [ "L" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "b" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "r" ] + ] + text [ + letters [ "y" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ -0.18 0 1.24 ] + scale [ 1.1 1 1.4 ] + width [ 29.3574 ] + height [ 29.3574 ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + landmark_building "sz14:toon_landmark_TT_bank_DNARoot" [ + code [ "toon_landmark_TT_bank" ] + title [ "Toontown Bank" ] + pos [ 57.1796 38.6656 4 ] + nhpr [ 0 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + color [ 1 1 0.776471 1 ] + pos [ 0 0 -0.64 ] + scale [ 1.2 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 1 0.662745 0.32549 1 ] + pos [ 0 0 -1.58 ] + scale [ 2.9 1 3.4 ] + kern [ 0.092795 ] + width [ 50 ] + height [ 50 ] + flags [ "c" ] + text [ + letters [ "B" ] + ] + text [ + letters [ "a" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "k" ] + ] + ] + ] + ] + landmark_building "sz16:toon_landmark_TT_school_house_DNARoot" [ + code [ "toon_landmark_TT_school_house" ] + title [ "Toontown School House" ] + pos [ 129.919 -138.445 2.4997 ] + nhpr [ -140 0 0 ] + door [ + code [ "door_double_square_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + code [ "TTC_sign3" ] + pos [ -0.35 0 0.3 ] + scale [ 0.9 1 0.9 ] + baseline [ + code [ "mickey" ] + color [ 1 0.501961 0 1 ] + pos [ 0 0 -0.49 ] + scale [ 1.5 1 1.8 ] + kern [ -0.028793 ] + width [ 40.778 ] + height [ 40.778 ] + text [ + letters [ "S" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "u" ] + ] + text [ + letters [ "s" ] + ] + text [ + letters [ "e" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0.501961 1 ] + pos [ 0 0 1.24 ] + scale [ 1.1 1 1.1 ] + width [ 24.3433 ] + height [ 24.3433 ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "w" ] + ] + text [ + letters [ "n" ] + ] + ] + ] + ] + landmark_building "sz21:toon_landmark_TT_clothes_shop_DNARoot" [ + code [ "toon_landmark_TT_clothes_shop" ] + building_type [ "clotheshop" ] + title [ "Clothing Shop" ] + pos [ 106.265 160.831 3 ] + nhpr [ -30 0 0 ] + door [ + code [ "door_double_clothesshop_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 0.611765 0.423529 1 ] + pos [ 0 0 -0.5 ] + scale [ 1.7 1 1.7 ] + text [ + letters [ "C" ] + ] + text [ + letters [ "l" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "t" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "n" ] + ] + text [ + letters [ "g" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "h" ] + ] + text [ + letters [ "o" ] + ] + text [ + letters [ "p" ] + ] + ] + ] + ] + landmark_building "sz13:toon_landmark_TT_toonhall_DNARoot" [ + code [ "toon_landmark_TT_toonhall" ] + title [ "Toon Hall" ] + pos [ 116.66 24.29 4 ] + nhpr [ -90 0 -0 ] + door [ + code [ "door_double_round_ur" ] + color [ 0.88 0.45 0.38 1 ] + ] + sign [ + pos [ 0 0 -1.13 ] + scale [ 1.2 1 1.2 ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0.3 0 -1.4 ] + scale [ 2.2 1 2.3 ] + kern [ -0.099751 ] + width [ 134.553 ] + height [ 134.553 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "L" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ 0 0 1.08 ] + scale [ 1.7 1 1.7 ] + kern [ -0.108469 ] + width [ 19.1721 ] + height [ 19.1721 ] + text [ + letters [ "m" ] + ] + text [ + letters [ "i" ] + ] + text [ + letters [ "c" ] + ] + text [ + letters [ "k" ] + ] + text [ + letters [ "e" ] + ] + text [ + letters [ "y" ] + ] + ] + ] + ] + ] + prop "toontown_central_DNARoot" [ + code [ "toontown_central" ] + pos [ 9.15527e-005 -1.90735e-006 2.6226e-006 ] + nhpr [ -90 0 -0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -79.7819 79.5309 0 ] + nhpr [ 135 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -127.003 30.3763 0 ] + nhpr [ 135 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -128.16 -24.0245 0.000663757 ] + nhpr [ 135 0 0 ] + ] + prop "prop_gazebo_DNARoot" [ + code [ "prop_gazebo" ] + pos [ -60.94 -8.8 -2 ] + nhpr [ -178 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 119.621 -127.865 2.49998 ] + nhpr [ -15 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 127.424 -59.0748 2.5 ] + nhpr [ -15 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 120.107 -44.4808 2.5 ] + nhpr [ -15 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 96.8622 -146.373 2.52 ] + nhpr [ -15 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 114.056 -57.3443 2.5 ] + nhpr [ -15 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 21.3941 -144.665 2.99998 ] + nhpr [ -30 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_DG" ] + pos [ 44.1038 -157.906 2.99998 ] + nhpr [ 148 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ -143.503 -8.9528 0.499987 ] + nhpr [ 90 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_MM" ] + pos [ -143.242 16.9541 0.499977 ] + nhpr [ -90 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -59.1768 92.9836 0.499824 ] + nhpr [ -9 0 0 ] + ] + prop "neighborhood_sign_MM_DNARoot" [ + code [ "neighborhood_sign_DD" ] + pos [ -33.749 88.9499 0.499825 ] + nhpr [ 170 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 142.717 108.674 2.49998 ] + nhpr [ 135 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 6.33804 100.879 2.5 ] + nhpr [ 135 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ -23.998 74.1829 0 ] + nhpr [ 180 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 103.397 79.4494 2.5 ] + nhpr [ 135 0 0 ] + ] + prop "prop_tree_fat_ur_DNARoot" [ + code [ "prop_tree_fat_ur" ] + pos [ 116.09 54.81 2.5 ] + nhpr [ 135 0 0 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 18.9496 -48.977 4.95856 ] + nhpr [ -135 0 0 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 19.2327 52.5553 4.95837 ] + nhpr [ -135 0 0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 6.51316 -96.6973 2.49997 ] + nhpr [ 135 0 0 ] + ] + landmark_building "sz19:toon_landmark_TT_gag_shop_DNARoot" [ + code [ "toon_landmark_TT_gag_shop" ] + building_type [ "gagshop" ] + title [ "Gag Shop" ] + pos [ -86.6848 -90.5693 0.500015 ] + nhpr [ -15 0 0 ] + door [ + code [ "door_double_square_ur" ] + color [ 1 0.63 0.38 1 ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -107.954 -85.0626 -0.18 ] + nhpr [ 150 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.59 1 0.49 1 ] + count [ 2 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -94.9639 -92.5626 -0.18 ] + nhpr [ 150 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -139.693 -54.0363 -0.18 ] + nhpr [ 110 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ -53.7466 -73.3194 0.00999998 ] + nhpr [ 105 0 0 ] + ] + landmark_building "sz20:toon_landmark_hqTT_DNARoot" [ + code [ "toon_landmark_hqTT" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ 24.6425 24.8587 4.00001 ] + nhpr [ 135 0 0 ] + prop "animated_prop_HQPeriscopeAnimatedProp_DNARoot" [ + code [ "animated_prop_HQPeriscopeAnimatedProp" ] + pos [ 7.17 -7.67 19.07 ] + nhpr [ 110 0 0 ] + scale [ 4 4 4 ] + ] + prop "animated_prop_HQTelescopeAnimatedProp_DNARoot" [ + code [ "animated_prop_HQTelescopeAnimatedProp" ] + pos [ 7.003 0 13.191 ] + nhpr [ 168 81 0 ] + scale [ 4 4 4 ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -148.706 -25.452 -0.18 ] + nhpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ul" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_dl" ] + color [ 0.9 0.56 0.34 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 1 1 0.52 1 ] + ] + ] + ] + flat_building "sz0:random_DNARoot" [ + pos [ -144.824 -39.9409 -0.18 ] + nhpr [ 105 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + prop "prop_toontown_central_fountain_DNARoot" [ + code [ "prop_toontown_central_fountain" ] + pos [ 93.2057 -106.482 2.50002 ] + nhpr [ 0 0 0 ] + ] + prop "prop_mickey_on_horse_DNARoot" [ + code [ "prop_mickey_on_horse" ] + pos [ 73.6829 121.026 2.49996 ] + nhpr [ 0 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 3.84337 118.504 3 ] + nhpr [ -110 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 116.979 146.926 3 ] + nhpr [ 145 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 86.808 164.831 3 ] + nhpr [ -95 0 0 ] + ] + prop "prop_tree_fat_ul_DNARoot" [ + code [ "prop_tree_fat_ul" ] + pos [ 55.4077 154.679 2.49996 ] + nhpr [ -33 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 43.7488 -86.2016 3.00007 ] + nhpr [ -2 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 77.3059 -86.4255 2.99998 ] + nhpr [ -2 0 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ -95 87 0.5 ] + nhpr [ -75 4.55705 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ -60.8037 -84.8026 0.5 ] + nhpr [ 105 0 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ 57.0769 -159.55 3 ] + nhpr [ 90 0 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ 52.2826 165.787 3 ] + nhpr [ -76 0 0 ] + ] + prop "prop_hydrant_DNARoot" [ + code [ "prop_hydrant" ] + pos [ 133.82 124.946 3 ] + nhpr [ 120 0 0 ] + ] + prop "prop_hydrant_DNARoot" [ + code [ "prop_hydrant" ] + pos [ 135.748 -119.711 3 ] + nhpr [ -120 0 0 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 105.911 -153.71 3 ] + nhpr [ -120 0 0 ] + ] + prop "prop_hydrant_DNARoot" [ + code [ "prop_hydrant" ] + pos [ 16.1492 -89.1852 3 ] + nhpr [ -45 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 58.8052 93.6999 3 ] + nhpr [ -90 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 92.8051 93.6997 3 ] + nhpr [ -90 0 0 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ 117.805 151.699 3 ] + nhpr [ -90 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 132.882 -122.532 3 ] + nhpr [ -130 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 4.9912 -116.182 3 ] + nhpr [ -155 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 108.962 -28.0532 4 ] + nhpr [ -180 0 -0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 108.205 32.0659 4 ] + nhpr [ -180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 32.9609 61.9462 4 ] + nhpr [ 180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 28.9617 -57.0532 4 ] + nhpr [ 180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -101.98 -70.4832 0.5 ] + nhpr [ 175 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ -129.889 -39.5582 0.5 ] + nhpr [ 175 0 0 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ -145.168 -19.1499 0.5 ] + nhpr [ 175 0 0 ] + ] + prop "prop_hydrant_DNARoot" [ + code [ "prop_hydrant" ] + pos [ -19.1686 83.5834 0.5 ] + nhpr [ 175 0 0 ] + ] + prop "prop_trashcan_metal_DNARoot" [ + code [ "prop_trashcan_metal" ] + pos [ -69.2756 95.9983 0.5 ] + nhpr [ 175 0 0 ] + ] + prop "prop_post_one_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ -125 60 0 ] + nhpr [ 150 0 0 ] + ] + landmark_building "sz22:toon_landmark_TT_pet_shop_DNARoot" [ + code [ "toon_landmark_TT_pet_shop" ] + building_type [ "petshop" ] + title [ "Pet Shop" ] + pos [ -124.375 74.3749 0.5 ] + nhpr [ 49 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + prop "animated_prop_PetShopFishAnimatedProp_DNARoot" [ + code [ "animated_prop_PetShopFishAnimatedProp" ] + pos [ 0 0 0 ] + nhpr [ 0 0 0 ] + ] + sign [ + baseline [ + code [ "mickey" ] + color [ 1 1 0 1 ] + pos [ -0.0715486 0 0.575594 ] + scale [ 1.58014 1 2.42354 ] + width [ 14.2363 ] + height [ 14.2363 ] + flags [ "d" ] + text [ + letters [ "P" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "S" ] + ] + text [ + letters [ "H" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "P" ] + ] + ] + ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 38.282 163.591 2.95929 ] + nhpr [ 31 0 0 ] + scale [ 1.18418 1.18418 1.18418 ] + ] + prop "prop_party_gate_DNARoot" [ + code [ "prop_party_gate" ] + pos [ 77.935 -159.939 2.60141 ] + nhpr [ 195 0 0 ] + ] + ] +] diff --git a/ttmodels/src/dna/tutorial_street.dna b/ttmodels/src/dna/tutorial_street.dna new file mode 100644 index 00000000..24ca7d1b --- /dev/null +++ b/ttmodels/src/dna/tutorial_street.dna @@ -0,0 +1,2130 @@ +store_suit_point [ 0, STREET_POINT, 25 25 -0.5 ] +store_suit_point [ 1, STREET_POINT, 25 15 -0.5 ] +store_suit_point [ 2, STREET_POINT, 55 15 -0.5 ] +store_suit_point [ 3, STREET_POINT, 55 25 -0.5 ] +group "toontownCentralTutorial" [ + visgroup "20001" [ + vis [ "20001" ] + suit_edge [ 0 1 ] + suit_edge [ 1 2 ] + suit_edge [ 2 3 ] + suit_edge [ 3 0 ] + battle_cell [ 20 20 75 20 -0.5 ] + group "tutorial" [ + prop "linktunnel_tt_0_DNARoot" [ + code [ "prop_safe_zone_entrance_tunnel" ] + pos [ 210 40 0 ] + hpr [ -90 0 0 ] + sign [ + code [ "tunnel_sign_orange" ] + pos [ 0 0 -2.84 ] + scale [ 1.5 1 1.5 ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0.09 0 -0.99 ] + scale [ 1.5 1 1.5 ] + width [ 38.4394 ] + height [ 38.4394 ] + text [ + letters [ "P" ] + ] + text [ + letters [ "L" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "Y" ] + ] + text [ + letters [ "G" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "U" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "D" ] + ] + ] + baseline [ + pos [ 0 0 1.5 ] + scale [ 2.5 1 2.5 ] + graphic [ + code [ "mickeySZ" ] + ] + ] + baseline [ + code [ "mickey" ] + color [ 0 0.501961 0.25098 1 ] + pos [ 0 0 -1.94 ] + hpr [ 0 0 -1 ] + scale [ 0.8 1 0.8 ] + width [ 50 ] + height [ 50 ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "O" ] + ] + text [ + letters [ "W" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ " " ] + ] + text [ + letters [ "C" ] + ] + text [ + letters [ "E" ] + ] + text [ + letters [ "N" ] + ] + text [ + letters [ "T" ] + ] + text [ + letters [ "R" ] + ] + text [ + letters [ "A" ] + ] + text [ + letters [ "L" ] + ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 105 -60 0 ] + hpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 0 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.88 0.44 0.15 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 0 30 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 0 0 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + prop "prop_tree_large_brickbox_ur_DNARoot" [ + code [ "prop_tree_large_brickbox_ur" ] + pos [ 120 40 0 ] + hpr [ 0 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 150 -10 0 ] + hpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 204 35 0 ] + hpr [ -45 0 0 ] + ] + prop "neighborhood_sign_TT_DNARoot" [ + code [ "neighborhood_sign_TT" ] + pos [ 203 5.00001 0 ] + hpr [ 45 0 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ 52.5642 73.9019 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_tree_large_brickbox_ul_DNARoot" [ + code [ "prop_tree_large_brickbox_ul" ] + pos [ 120 0 0 ] + hpr [ 0 0 0 ] + ] + landmark_building "tb1:toon_landmark_hqTT_DNARoot" [ + code [ "toon_landmark_hqTT" ] + building_type [ "hq" ] + title [ "Toon HQ" ] + pos [ 100 20 0 ] + hpr [ 90 0 0 ] + ] + landmark_building "tb2:toon_landmark_TT_A1_DNARoot" [ + code [ "toon_landmark_TT_A1" ] + title [ "" ] + pos [ 0 5 0 ] + hpr [ 90 0 0 ] + door [ + code [ "door_double_round_ur" ] + color [ 1 0.87 0.38 1 ] + ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ 60 70 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ 50 -20 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 70 60 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 70 -20 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ 90 60 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_interior_corner_w_grass_DNARoot" [ + code [ "street_interior_corner_w_grass" ] + pos [ 80 -30 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionL_30x10_DNARoot" [ + code [ "street_grass_transitionL_30x10" ] + pos [ 80 40 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 80 50 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x20_DNARoot" [ + code [ "street_w_grass_30x20" ] + pos [ 80 -10 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionR_30x10_DNARoot" [ + code [ "street_grass_transitionR_30x10" ] + pos [ 80 0 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_20x20_DNARoot" [ + code [ "street_20x20" ] + pos [ 80 30 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_street_20x20_DNARoot" [ + code [ "street_street_20x20" ] + pos [ 60 -20 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_street_20x20_DNARoot" [ + code [ "street_street_20x20" ] + pos [ 60 0 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_street_20x20_DNARoot" [ + code [ "street_street_20x20" ] + pos [ 60 20 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_street_20x20_DNARoot" [ + code [ "street_street_20x20" ] + pos [ 60 40 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 50 0 ] + hpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + street "street_exterior_corner_w_grass_DNARoot" [ + code [ "street_exterior_corner_w_grass" ] + pos [ 60 40 0 ] + hpr [ -180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ 60 -10 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_30x10_DNARoot" [ + code [ "street_w_grass_30x10" ] + pos [ 60 60 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionL_30x10_DNARoot" [ + code [ "street_grass_transitionL_30x10" ] + pos [ 30 20 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transitionR_30x10_DNARoot" [ + code [ "street_grass_transitionR_30x10" ] + pos [ 30 20 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ 0 20 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ 20 0 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ 130 0 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_inner_corner_DNARoot" [ + code [ "street_inner_corner" ] + pos [ 110 20 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ 140 20 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_grass_transition_60x20_DNARoot" [ + code [ "street_grass_transition_60x20" ] + pos [ 180 20 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_w_grass_60x20_DNARoot" [ + code [ "street_w_grass_60x20" ] + pos [ 160 20 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_exterior_corner_w_grass_DNARoot" [ + code [ "street_exterior_corner_w_grass" ] + pos [ 40 20 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 -10 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 0 0 ] + hpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 0 40 0 ] + hpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 40 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 1 ] + ] + ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 130 -10 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 130 40 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 50 100 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 30 100 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 110 -60 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 110 -10 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 130 -10 0 ] + hpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + street "street_sidewalk_10x40_DNARoot" [ + code [ "street_sidewalk_10x40" ] + pos [ 120 -20 0 ] + hpr [ 180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 70 -60 0 ] + hpr [ 90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 60 -60 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 20 -50 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 -30 0 ] + hpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 1 0.75 0.38 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 -10 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 40 -50 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 60 -50 0 ] + hpr [ -180 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 -50 0 ] + hpr [ 180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 -50 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 20 -40 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_stone_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 15 -30 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.67 0.25 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 40 -50 0 ] + hpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ul" ] + color [ 1 0.92 0.59 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 90 90 0 ] + hpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.32 0.54 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.95 0.17 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 90 100 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.32 0.54 0.36 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.89 0.95 0.17 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 50 0 ] + hpr [ 90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + ] + ] + street "street_20x40_DNARoot" [ + code [ "street_20x40" ] + pos [ 190 0 0 ] + hpr [ 0 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 45 100 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 110 -20 0 ] + hpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 120 -20 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 120 -30 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 120 -40 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 120 -50 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 135 -50 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 120 -60 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 125 50 0 ] + hpr [ 0 0 0 ] + width [ 20.7 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ul" ] + color [ 1 0.87 0.38 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 165.7 60 0 ] + hpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_sm_cement_ur" ] + color [ 1 0.88 0.8 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.1 0.59 0.39 1 ] + count [ 1 ] + ] + ] + ] + street "street_sidewalk_10x20_DNARoot" [ + code [ "street_sidewalk_10x20" ] + pos [ 145.7 60 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 175.7 50 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 145.7 60 0 ] + hpr [ 0 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 165.7 60 0 ] + hpr [ -90 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 175.7 60 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 145.7 50 0 ] + hpr [ 90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_sm_shuttered_ur" ] + color [ 1 0.92 0.59 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.84 0.59 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.35 0.69 0.49 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190 -10 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.32 0.54 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.95 0.17 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 175 -10 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.27 1 0.42 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 210 0 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 200 0 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190 0 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190 50 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190 40 0 ] + hpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 200 40 0 ] + hpr [ 0 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190.7 50 0 ] + hpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.99 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 0.93 0.83 0.33 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 1 0.89 0.49 1 ] + windows [ + code [ "window_md_curved_ur" ] + color [ 1 0.87 0.38 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 190 -25 0 ] + hpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 0.69 0.49 1 ] + windows [ + code [ "window_porthole_ul" ] + color [ 0.32 0.54 0.36 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_curved_ul" ] + color [ 0.89 0.95 0.17 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 215 5 0 ] + hpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 165 -10 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 215 50 0 ] + hpr [ -90 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 110 50 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 110 65 0 ] + hpr [ -90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.13 0.78 0.52 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.91 0.63 0.44 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.6 0.66 0.27 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_dental_ur" ] + color [ 1 0.84 0.59 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 110 90 0 ] + hpr [ -90 0 0 ] + width [ 25 ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + ] + wall [ + height [ 10 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ul" ] + color [ 0.27 1 0.42 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + /* + prop "cloth_DNARoot" [ + code [ "cloth" ] + pos [ 13.0524 -4.36687 -0.203286 ] + hpr [ 0 0 0 ] + ] + */ + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 100 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_pillars_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_round_ur" ] + color [ 0.13 0.78 0.52 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.27 0.77 0.42 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 60 100 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_curved_ur" ] + color [ 0.95 0.89 0.17 1 ] + count [ 1 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.79 0.36 0.19 1 ] + ] + ] + /* + prop "house_needs_DNARoot" [ + code [ "house_needs" ] + pos [ 6.26776 -4.66185 1.69415 ] + hpr [ 0 0 0 ] + ] + */ + ] +/* + comment out buildings since joe doesnt want to download + glass window textures in phase 3.5 instead of phase 5 + prop "prop_facade_b_DNARoot" [ + code [ "prop_facade_b" ] + pos [ 106 77 0 ] + hpr [ -90 0 0 ] + scale [ 1.16802 1.16802 1.16802 ] + ] + prop "prop_facade_dN_DNARoot" [ + code [ "prop_facade_dN" ] + pos [ 108 -15 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_facade_e_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 95 -58 0 ] + hpr [ -180 0 0 ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 69 -56.8631 -0.0225287 ] + hpr [ -180 -0.692787 0 ] + ] + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_c" ] + pos [ 67 96.6177 0.0162828 ] + hpr [ 0 1.51015 0 ] + scale [ 1.24024 1.24024 1.24024 ] + ] +*/ + flat_building "tb0:random_DNARoot" [ + pos [ 30 70 0 ] + hpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 85 0 ] + hpr [ 90 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 100 0 ] + hpr [ 0 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_woodflower_fence_ur" ] + color [ 1 1 1 1 ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 45 120 0 ] + hpr [ -90 0 0 ] + width [ 20 ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_dental_ur" ] + color [ 0.21 0.73 0.31 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 1 0.63 0.38 1 ] + count [ 2 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 30 70 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 10 ] + code [ "wall_sm_brick_ur" ] + color [ 1 1 0.59 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 1 0.63 0.12 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.7 0.27 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 1 ] + ] + ] + ] +/* + prop "prop_facade_a_DNARoot" [ + code [ "prop_facade_a" ] + pos [ 158 -7 0 ] + hpr [ -180 0 0 ] + scale [ 1.10176 1.10176 1.10176 ] + ] +*/ + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 96 -5 0 ] + hpr [ 180 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 96 50.3001 0 ] + hpr [ -180 0 0 ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 85 -60 0 ] + hpr [ -180 0 0 ] + width [ 10 ] + wall [ + height [ 10 ] + code [ "wall_lg_brick_ur" ] + color [ 1 0.42 0.27 1 ] + windows [ + code [ "window_porthole_ur" ] + color [ 0.31 0.63 0.37 1 ] + count [ 1 ] + ] + ] + wall [ + height [ 10 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.71 0.27 1 ] + windows [ + code [ "window_sm_round_ul" ] + color [ 0.11 0.67 0.33 1 ] + count [ 2 ] + ] + cornice [ + code [ "cornice_marble_ur" ] + color [ 0.42 0.69 0.27 1 ] + ] + ] + ] + flat_building "tb0:random_DNARoot" [ + pos [ 75 -60 0 ] + hpr [ -180 0 0 ] + width [ 15 ] + wall [ + height [ 20 ] + code [ "wall_md_blank_ur" ] + color [ 1 0.9 0.33 1 ] + windows [ + code [ "window_sm_pointed_ur" ] + color [ 0.11 0.67 0.33 1 ] + count [ 4 ] + ] + cornice [ + code [ "cornice_curved_ur" ] + color [ 0.21 0.73 0.31 1 ] + ] + ] + /* + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 6.91632 -5.09789 1.01734 ] + hpr [ 180 0 0 ] + ] + */ + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 69 -35 0 ] + hpr [ 180 0 0 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 112 -36 0 ] + hpr [ -180 0 0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 30 -17 0 ] + hpr [ 90 0 0 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 29 -42 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 30 5 0 ] + hpr [ 0 0 0 ] + scale [ 1.19211 1.19211 1.19211 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 23 -63 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 5 -46 0 ] + hpr [ 0 0 0 ] + scale [ 1.13727 1.13727 1.13727 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 28 35 0 ] + hpr [ 0 0 0 ] + scale [ 1.10413 1.10413 1.10413 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 70 75 0 ] + hpr [ 0 0 0 ] + scale [ 0.845024 0.845024 0.845024 ] + ] + prop "prop_big_planter_DNARoot" [ + code [ "prop_big_planter" ] + pos [ 37 93 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 30 54 0 ] + hpr [ 90 0 0 ] + ] + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 110 85 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 16 93 0 ] + hpr [ 0 0 0 ] + scale [ 1.33692 1.33692 1.33692 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 27 118 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 135 -37 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ur_DNARoot" [ + code [ "prop_tree_small_ur" ] + pos [ 147.3 34 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 144 3.69994 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_large_ul_DNARoot" [ + code [ "prop_tree_large_ul" ] + pos [ 170.7 35 0 ] + hpr [ 0 0 0 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 173 3.30004 0 ] + hpr [ 0 0 0 ] + scale [ 0.871352 0.871352 0.871352 ] + ] + prop "prop_tree_small_ul_DNARoot" [ + code [ "prop_tree_small_ul" ] + pos [ 215 -28.6999 0 ] + hpr [ 0 0 0 ] + scale [ 1.06784 1.06784 1.06784 ] + ] + prop "prop_tree_large_ur_DNARoot" [ + code [ "prop_tree_large_ur" ] + pos [ 224 66.3001 0 ] + hpr [ 0 0 0 ] + scale [ 1.19204 1.19204 1.19204 ] + ] +/* + prop "prop_facade_c_DNARoot" [ + code [ "prop_facade_e" ] + pos [ 157 56.7 0 ] + hpr [ 0 0 0 ] + ] +*/ + prop "prop_cellar_door_DNARoot" [ + code [ "prop_cellar_door" ] + pos [ 187 -9.99993 0 ] + hpr [ 180 0 0 ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 110 30 0 ] + hpr [ -90 0 0 ] + ] + street "street_sidewalk_10x10_DNARoot" [ + code [ "street_sidewalk_10x10" ] + pos [ 110 20 0 ] + hpr [ 180 0 0 ] + texture [ "street_street_TT_tex" ] + texture [ "street_sidewalk_TT_tex" ] + texture [ "street_curb_TT_tex" ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 186.725 5.3825 0 ] + hpr [ -180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ 187.676 35.7579 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 94 -34 0 ] + hpr [ -180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_one_light" ] + pos [ 92.5642 75.9019 0 ] + hpr [ 180 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 45 5 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_post_three_light_DNARoot" [ + code [ "prop_post_three_light" ] + pos [ 45 35 0 ] + hpr [ -90 0 0 ] + ] +/* + prop "music_inst_DNARoot" [ + code [ "music_inst" ] + pos [ 94.8372 -57.3556 0.025013 ] + hpr [ -180 0 0 ] + ] + prop "gallery1_DNARoot" [ + code [ "gallery1" ] + pos [ 107.447 -14.9985 1.72175 ] + hpr [ 270 0 0 ] + scale [ 0.5 0.5 0.5 ] + ] + prop "flower_shop_DNARoot" [ + code [ "flower_shop" ] + pos [ 157.684 54.1417 0.266033 ] + hpr [ 180 0 0 ] + ] + prop "office_furniture_DNARoot" [ + code [ "office_furniture" ] + pos [ 158.151 -6.57072 1.75069 ] + hpr [ 180 0 0 ] + scale [ 0.728917 0.728917 0.728917 ] + ] +*/ + ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 110 50 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 110 40 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 110 10 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_wood_fence_DNARoot" [ + code [ "prop_wood_fence" ] + pos [ 110 0 0 ] + hpr [ -90 0 0 ] + ] + prop "prop_mailbox_TT_DNARoot" [ + code [ "prop_mailbox_TT" ] + pos [ 46 -30 0 ] + hpr [ 0 0 0 ] + ] +] diff --git a/ttrun.prc b/ttrun.prc index 1497eaa4..9bb40ea1 100644 --- a/ttrun.prc +++ b/ttrun.prc @@ -95,7 +95,7 @@ audio-library-name p3miles_audio cursor-filename resources/toonmono.cur -show-frame-rate-meter #t +show-frame-rate-meter #f load-display pandagl @@ -137,11 +137,10 @@ server-type prod color-bits 8 8 8 alpha-bits 8 default-server-constants 1 -fake-blue test +fake-blue test2 game-server 127.0.0.1 want-magic-words 1 - want-cogdominiums 1 want-game-tables 1 show-scientists 1 \ No newline at end of file diff --git a/ttrun.py b/ttrun.py index c6036586..5ef6867f 100644 --- a/ttrun.py +++ b/ttrun.py @@ -1,7 +1,4 @@ -import sys -sys.path.append("./modules") - -import os, marshal, imp +import os, marshal, imp, sys os.environ["PATH"] += ";./resources" codes = {} @@ -10,57 +7,54 @@ def generate(path, module): print(path, module) - + for file in os.listdir(path): if os.path.isdir(os.path.join(path, file)): generate(os.path.join(path, file), module + [file]) - + elif file.endswith(".py"): if file == "__init__.py": codes[".".join(module)] = [1, os.path.join(path, file)] else: codes[".".join(module + [file[:-3]])] = [0, os.path.join(path, file)] - - + class Importer: @classmethod def find_module(cls, fullname, path=None): if fullname in codes: return cls - - + + @classmethod def load_module(cls, fullname): if fullname in sys.modules: return sys.modules[fullname] - + code = codes[fullname] module = imp.new_module(fullname) - + sys.modules[fullname] = module - + #module.__builtins__ = __builtins__ module.__file__ = "" module.__name__ = fullname module.__path__ = [] module.__loader__ = cls - + if code[0] == 1: module.__package__ = fullname else: module.__package__ = ".".join(fullname.split(".")[:-1]) - + if code[1]: - with open(code[1], "r") as file: - exec compile(file.read() + "\n", codes[fullname][1], "exec") in module.__dict__ - + with open(code[1], "rb") as file: + exec(compile(file.read() + b"\n", codes[fullname][1], "exec"), module.__dict__) + return module - - - -if __name__ == "__main__": + +if __name__ == "__main__": sys.meta_path.append(Importer) - + generate("direct/src", ["direct"]) generate("toontown/src", ["toontown"]) generate("otp/src", ["otp"]) @@ -70,31 +64,37 @@ def load_module(cls, fullname): vfs.mount(Filename("resources"), '.', 0) for phase in [3,3.5,4,5,5.5,6,7,8,9,10,11,12,13]: vfs.mount(Filename("resources", "phase_" + str(phase) + ".mf"), '.', VirtualFileSystem.MFReadOnly) - + + # we need some sql config + loadPrcFileData("", "mysql-user root") + loadPrcFileData("", "mysql-passwd klnbZS9Jca4PLaWIMEED77zwQzL0EfaX") + loadPrcFileData("", "want-code-redemption-init-db 1") + + loadPrcFileData('', 'dc-multiple-inheritance #f') + loadPrcFileData('', 'dc-sort-virtual-inheritance #t') + loadPrcFileData('', 'dc-sort-inheritance-by-file #f') + + loadPrcFileData("", "dc-file resources/phase_3/etc/otp.dc") + loadPrcFileData("", "dc-file resources/phase_3/etc/toon.dc") + + loadPrcFileData("", "msg-director-ip 127.0.0.1") + loadPrcFileData("", "event-server-ip 127.0.0.1") + import traceback try: if "-ai" in sys.argv: from toontown.ai import AIStart - + + elif "-prod-ai" in sys.argv: + from toontown.ai import AIServiceStart + elif "-ud" in sys.argv: - # ihooks messes with our import system - import ihooks - ihooks.install = lambda *args: None - - # ud tries to load from libdirect but it's libp3direct on public 1.7.2 - import libp3direct - sys.modules["libdirect"] = sys.modules["libp3direct"] - - # we need some sql config - loadPrcFileData("", "mysql-user root") - loadPrcFileData("", "mysql-passwd ") - loadPrcFileData("", "want-code-redemption-init-db 1") from toontown.uberdog import Start - + else: from toontown.toonbase import ToontownStart - + except: traceback.print_exc() - - sys.exit() + + sys.exit() \ No newline at end of file diff --git a/ud.bat b/ud.bat new file mode 100644 index 00000000..e0bc23f0 --- /dev/null +++ b/ud.bat @@ -0,0 +1,4 @@ +:main +python ttrun.py -ud %* +pause +goto :main diff --git a/ud.sh b/ud.sh new file mode 100755 index 00000000..b6528c16 --- /dev/null +++ b/ud.sh @@ -0,0 +1 @@ +screen -dmS UberDOG python3 -m ttrun -ud